'use client' import { useSupabaseClient } from '@supabase/auth-helpers-react' import { type SupabaseClient } from '@supabase/supabase-js' import { X } from 'lucide-react' import { useEffect, useRef, useState } from 'react' import { useCommandMenu } from '@ui-patterns/Cmdk' import { GenericSkeletonLoader } from '@ui-patterns/ShimmeringLoader' import { type DocsSearchResult } from 'common' import { Button, cn } from 'ui' import ButtonCard from '~/components/ButtonCard' function SearchButton() { const { setIsOpen: setCommandMenuOpen } = useCommandMenu() return ( ) } async function getRecommendations(page: string, supabase: SupabaseClient) { try { const query = decodeURIComponent(page.replace(/^\/(?:guides|reference)\//, '')).replace( /[_\/-]/g, ' ' ) if (!query) return [] const { data, error } = await supabase.rpc('docs_search_fts', { query }) if (error || !data?.length) return [] return data as Array> } catch (err) { console.error(err) return [] } } function Recommendations({ page }: { page: string }) { const supabase = useSupabaseClient() const [recommendations, setRecommendations] = useState( [] as Array> ) const fetched = useRef(false) useEffect(() => { getRecommendations(page, supabase).then((data) => { if (!fetched.current) { setRecommendations(data) fetched.current = true } }) }, [page, supabase]) return (

Are you looking for...?

{!fetched.current && } {fetched.current && recommendations.length === 0 && } {fetched.current && recommendations.length > 0 && ( )}
) } function LoadingState() { return } function NoResults() { return No recommendations found. } function RecommendationsList({ recommendations, }: { recommendations: Array> }) { return (
    {recommendations .filter(({ title }) => !!title) .slice(0, 6) .map(({ path, title, subtitle, description }) => ( ))}
) } export { SearchButton, Recommendations }