'use client' import { useSupabaseClient } from '@supabase/auth-helpers-react' import { type SupabaseClient } from '@supabase/supabase-js' import { usePathname } from 'next/navigation' import { useEffect, useRef, useState } from 'react' import { type DocsSearchResult } from 'common' import { Button, cn } from 'ui' import { useSetCommandMenuOpen } from 'ui-patterns/CommandMenu' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' import ButtonCard from '~/components/ButtonCard' function SearchButton() { const setCommandMenuOpen = useSetCommandMenuOpen() 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() { const pathname = usePathname() const supabase = useSupabaseClient() const [loading, setLoading] = useState(true) const [recommendations, setRecommendations] = useState( [] as Array> ) useEffect(() => { if (!pathname) return let stale = false getRecommendations(pathname, supabase).then((data) => { if (!stale) { setRecommendations(data) setLoading(false) } }) return () => { stale = true } }, [pathname, supabase]) return (

Are you looking for...?

{loading && } {!loading && recommendations.length === 0 && } {!loading && 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 { Recommendations, SearchButton }