From b5d706b8b762db6a564d249250664f7449e54de9 Mon Sep 17 00:00:00 2001 From: Anastasia Beglova Date: Tue, 14 Jan 2025 12:19:24 -0500 Subject: [PATCH] fix text box text (#1951) --- .../app-pages/ChannelPage/ChannelSearch.tsx | 6 ++- .../app-pages/SearchPage/SearchPage.test.tsx | 44 +++++++++++++++++++ .../src/app-pages/SearchPage/SearchPage.tsx | 7 ++- 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/frontends/main/src/app-pages/ChannelPage/ChannelSearch.tsx b/frontends/main/src/app-pages/ChannelPage/ChannelSearch.tsx index 5a345871d0..1e56a34a51 100644 --- a/frontends/main/src/app-pages/ChannelPage/ChannelSearch.tsx +++ b/frontends/main/src/app-pages/ChannelPage/ChannelSearch.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useMemo } from "react" +import React, { useCallback, useMemo, useEffect } from "react" import { ChannelTypeEnum } from "api/v0" import { useOfferorsList } from "api/hooks/learningResources" import { useResourceSearchParams } from "@mitodl/course-search-utils" @@ -95,6 +95,10 @@ const ChannelSearch: React.FC = ({ }) const page = +(searchParams.get("page") ?? "1") + useEffect(() => { + setCurrentText(params.q ?? "") + }, [params, setCurrentText]) + return (
Search within {channelTitle} diff --git a/frontends/main/src/app-pages/SearchPage/SearchPage.test.tsx b/frontends/main/src/app-pages/SearchPage/SearchPage.test.tsx index 0e6954a139..8f59fc6da4 100644 --- a/frontends/main/src/app-pages/SearchPage/SearchPage.test.tsx +++ b/frontends/main/src/app-pages/SearchPage/SearchPage.test.tsx @@ -15,6 +15,7 @@ import type { import invariant from "tiny-invariant" import { Permission } from "api/hooks/user" import { assertHeadings, ControlledPromise } from "ol-test-utilities" +import { act } from "@testing-library/react" const DEFAULT_SEARCH_RESPONSE: LearningResourcesSearchResponse = { count: 0, @@ -224,6 +225,7 @@ describe("SearchPage", () => { expect(queryInput.value).toBe("meow") await user.clear(queryInput) await user.paste("woof") + expect(location.current.search).toBe(initialQuery) await user.click(screen.getByRole("button", { name: "Search" })) expect(location.current.search).toBe(finalQuery) @@ -796,3 +798,45 @@ test("Count changes are announced to screen readers", async () => { expect(count).toHaveTextContent("456 results") }) }) + +test("routing to new query sets currentText", async () => { + setMockApiResponses({}) + renderWithProviders() + act(() => { + window.history.pushState({}, "", "?q=meow") + }) + + await waitFor(() => { + const textInput = screen.getByRole("textbox", { name: "Search for" }) + expect(textInput).toHaveValue("meow") + }) +}) + +test("changing a facet resets unsubmitted text", async () => { + setMockApiResponses({ + search: {}, + }) + renderWithProviders() + + const queryInput = await screen.findByRole("textbox", { + name: "Search for", + }) + await user.clear(queryInput) + await user.paste("woof") + + const textInput = screen.getByRole("textbox", { name: "Search for" }) + + await waitFor(() => { + expect(textInput).toHaveValue("woof") + }) + + const facets = screen.getByTestId("facets-container") + const professionalToggle = await within(facets).findByRole("button", { + name: "Professional", + }) + await user.click(professionalToggle) + + await waitFor(() => { + expect(textInput).toHaveValue("") + }) +}) diff --git a/frontends/main/src/app-pages/SearchPage/SearchPage.tsx b/frontends/main/src/app-pages/SearchPage/SearchPage.tsx index 928cc08968..087f44c9ab 100644 --- a/frontends/main/src/app-pages/SearchPage/SearchPage.tsx +++ b/frontends/main/src/app-pages/SearchPage/SearchPage.tsx @@ -1,7 +1,7 @@ "use client" import { keyBy } from "lodash" -import React, { useCallback, useMemo } from "react" +import React, { useCallback, useMemo, useEffect } from "react" import type { FacetManifest } from "@mitodl/course-search-utils" import { useSearchParams } from "@mitodl/course-search-utils/next" import { useResourceSearchParams } from "@mitodl/course-search-utils" @@ -93,6 +93,7 @@ const SearchPage: React.FC = () => { }, [setSearchParams], ) + const onFacetsChange = useCallback(() => { setPage(1) }, [setPage]) @@ -115,6 +116,10 @@ const SearchPage: React.FC = () => { const page = +(searchParams.get("page") ?? "1") + useEffect(() => { + setCurrentText(params.q ?? "") + }, [params, setCurrentText]) + return (