'use client'
import ButtonCard from '~/components/ButtonCard'
import { useSendTelemetryEvent } from '~/lib/telemetry'
import { useDocsSearch, type DocsSearchResult } from 'common'
import { usePathname } from 'next/navigation'
import { useEffect } from 'react'
import { Button, cn } from 'ui'
import { useSetCommandMenuOpen } from 'ui-patterns/CommandMenu'
import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader'
function SearchButton() {
const setCommandMenuOpen = useSetCommandMenuOpen()
return (
)
}
function Recommendations() {
const pathname = usePathname()
const { searchState: state, handleDocsSearch: handleSearch } = useDocsSearch()
const loading = state.status === 'initial' || state.status === 'loading'
const recommendations =
state.status === 'partialResults' || state.status === 'fullResults' ? state.results : []
useEffect(() => {
if (!pathname) return
const query = decodeURIComponent(pathname.replace(/^\/(?:guides|reference)\//, '')).replace(
/[_\/-]/g,
' '
)
handleSearch(query)
}, [handleSearch, pathname])
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>
}) {
const pathname = usePathname()
const sendTelemetryEvent = useSendTelemetryEvent()
return (
{recommendations
.filter(({ title }) => !!title)
.slice(0, 6)
.map(({ path, title, subtitle, description }) => (
sendTelemetryEvent({
action: 'docs_404_recommendation_clicked',
properties: { destinationPath: path, sourcePath: pathname ?? '' },
})
}
/>
))}
)
}
export { Recommendations, SearchButton }