"use client" import { useState } from "react" import { useCoState } from "@/lib/providers/jazz-provider" import { LaIcon } from "@/components/custom/la-icon" import AiSearch from "../../custom/ai-search" import { Topic } from "@/lib/schema" import { PublicGlobalGroup } from "@/lib/schema/master/public-group" import { ID } from "jazz-tools" import Link from "next/link" interface SearchTitleProps { topics: string[] topicTitle: string } const SearchTitle: React.FC = ({ topicTitle, topics }) => { return (

{topicTitle}

{topics.length}
) } export const SearchWrapper = () => { const [searchText, setSearchText] = useState("") const [showAiSearch, setShowAiSearch] = useState(false) const [searchResults, setSearchResults] = useState([]) const globalGroup = useCoState( PublicGlobalGroup, process.env.NEXT_PUBLIC_JAZZ_GLOBAL_GROUP as ID, { root: { topics: [] } } ) const handleSearch = (e: React.ChangeEvent) => { const value = e.target.value setSearchText(value) const results = value && globalGroup?.root.topics ? globalGroup.root.topics.filter( (topic): topic is Topic => topic !== null && topic.prettyName.toLowerCase().startsWith(value.toLowerCase()) ) : [] setSearchResults(results) } const clearSearch = () => { setSearchText("") setSearchResults([]) } return (
{searchText && ( )}
{searchResults.length > 0 ? (
topic.prettyName)} /> {searchResults.map((topic, index) => (
e.stopPropagation()} className="hover:text-primary text-sm font-medium hover:opacity-70" > {topic.prettyName} {topic.latestGlobalGuide?.sections?.reduce( (total, section) => total + (section?.links?.length || 0), 0 ) || 0}{" "} links
))}
) : (
{searchText && searchResults.length === 0 && !showAiSearch && (
setShowAiSearch(true)} > ✨ Didn't find what you were looking for? Ask AI
)} {showAiSearch && }
)}
) }