From aec96f4dfd9685a064ea31cda71f29451dc09bc4 Mon Sep 17 00:00:00 2001 From: BFlat Date: Mon, 18 Dec 2023 21:39:59 +0700 Subject: [PATCH] search bar working with search results page --- .../common/SearchBar/SearchBar.scss | 7 + .../components/common/SearchBar/SearchBar.tsx | 53 +- .../common/SearchBar/SearchField.tsx | 3 + .../SearchBar/SearchResultsDropdown.tsx | 28 +- .../layout/PageHeader/PageHeader.tsx | 17 +- .../fakeyou.com/src/context/SearchContext.tsx | 23 + packages/fakeyou.com/src/context/index.ts | 2 +- .../fakeyou.com/src/v2/view/PageContainer.tsx | 1148 +++++++++-------- .../src/v2/view/search/SearchPage.tsx | 111 ++ 9 files changed, 805 insertions(+), 587 deletions(-) create mode 100644 packages/fakeyou.com/src/context/SearchContext.tsx create mode 100644 packages/fakeyou.com/src/v2/view/search/SearchPage.tsx diff --git a/packages/fakeyou.com/src/components/common/SearchBar/SearchBar.scss b/packages/fakeyou.com/src/components/common/SearchBar/SearchBar.scss index dc3e8eb66b..bf9c42fc6d 100644 --- a/packages/fakeyou.com/src/components/common/SearchBar/SearchBar.scss +++ b/packages/fakeyou.com/src/components/common/SearchBar/SearchBar.scss @@ -81,6 +81,13 @@ } } +.loading-results { + &:hover { + background-color: $panel-inner !important; + cursor: default !important; + } +} + @media (max-width: 992px) { .search-bar-container { width: 100%; diff --git a/packages/fakeyou.com/src/components/common/SearchBar/SearchBar.tsx b/packages/fakeyou.com/src/components/common/SearchBar/SearchBar.tsx index f69a167dbf..46b9928ea7 100644 --- a/packages/fakeyou.com/src/components/common/SearchBar/SearchBar.tsx +++ b/packages/fakeyou.com/src/components/common/SearchBar/SearchBar.tsx @@ -8,6 +8,8 @@ import { import SearchResultsDropdown from "./SearchResultsDropdown"; import SearchField from "./SearchField"; import "./SearchBar.scss"; +import { useHistory, useLocation } from "react-router-dom"; +import { useSearch } from "context/SearchContext"; interface SearchBarProps { autoFocus?: boolean; @@ -22,13 +24,20 @@ export default function SearchBar({ onFocus, isFocused, }: SearchBarProps) { - const [searchTerm, setSearchTerm] = useState(""); + let history = useHistory(); + let location = useLocation(); + + const { searchTerm, setSearchTerm } = useSearch(); const [foundTtsModels, setFoundTtsModels] = useState([]); const [isLoading, setIsLoading] = useState(false); + const isOnSearchPage = location.pathname.startsWith("/search"); - const maybeSearch = useCallback(async (value: string) => { - setSearchTerm(value); - }, []); + const maybeSearch = useCallback( + async (value: string) => { + setSearchTerm(value); + }, + [setSearchTerm] + ); const doSearch = useCallback( async (value: string) => { @@ -53,8 +62,34 @@ export default function SearchBar({ ); useEffect(() => { - doSearch(searchTerm); - }, [doSearch, searchTerm]); + if (isOnSearchPage) { + const query = new URLSearchParams(location.search).get("query"); + if (query) { + setSearchTerm(query); + } + } + }, [isOnSearchPage, location.search, setSearchTerm]); + + useEffect(() => { + if (isOnSearchPage) { + history.push(`/search/weights?query=${encodeURIComponent(searchTerm)}`); + } else { + doSearch(searchTerm); + } + }, [searchTerm, history, location.pathname, doSearch, isOnSearchPage]); + + const handleSearchButtonClick = useCallback(() => { + history.push(`/search/weights?query=${encodeURIComponent(searchTerm)}`); + }, [searchTerm, history]); + + const handleKeyPress = useCallback( + (e: React.KeyboardEvent) => { + if (e.key === "Enter") { + handleSearchButtonClick(); + } + }, + [handleSearchButtonClick] + ); return (
@@ -62,22 +97,24 @@ export default function SearchBar({ - {isFocused && ( + {isFocused && !isOnSearchPage && ( )}