import { useState, useEffect, useRef } from "react"; import { Plus, MagnifyingGlass } from "@phosphor-icons/react"; import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import paths from "@/utils/paths"; import Preloader from "@/components/Preloader"; import debounce from "lodash.debounce"; import Workspace from "@/models/workspace"; import { Tooltip } from "react-tooltip"; const DEFAULT_SEARCH_RESULTS = { workspaces: [], threads: [], }; const SEARCH_RESULT_SELECTED = "search-result-selected"; export default function SearchBox({ user, showNewWsModal }) { const { t } = useTranslation(); const searchRef = useRef(null); const [searchTerm, setSearchTerm] = useState(""); const [loading, setLoading] = useState(false); const [searchResults, setSearchResults] = useState(DEFAULT_SEARCH_RESULTS); const handleSearch = debounce(handleSearchDebounced, 500); async function handleSearchDebounced(e) { try { const searchValue = e.target.value; setSearchTerm(searchValue); setLoading(true); const searchResults = await Workspace.searchWorkspaceOrThread(searchValue); setSearchResults(searchResults); } catch (error) { console.error(error); setSearchResults(DEFAULT_SEARCH_RESULTS); } finally { setLoading(false); } } function handleReset() { searchRef.current.value = ""; setSearchTerm(""); setLoading(false); setSearchResults(DEFAULT_SEARCH_RESULTS); } useEffect(() => { window.addEventListener(SEARCH_RESULT_SELECTED, handleReset); return () => window.removeEventListener(SEARCH_RESULT_SELECTED, handleReset); }, []); return (
Searching for "{searchTerm}"
No results found for
"{searchTerm}"
{name}
{name} {hint && ( | {hint} )}
); } function ShortWidthNewWorkspaceButton({ user, showNewWsModal }) { const { t } = useTranslation(); if (!!user && user?.role === "default") return null; return ( <>