'use client' import { useParams } from 'common' import { Auth } from 'icons' import { Loader2 } from 'lucide-react' import { useMemo } from 'react' import { EmptyState, ResultsList, SkeletonResults, type SearchResult, } from './ContextSearchResults.shared' import { useDatabasePoliciesQuery } from '@/data/database-policies/database-policies-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' interface PolicySearchResultsProps { query: string } export function PolicySearchResults({ query }: PolicySearchResultsProps) { const { ref: projectRef } = useParams() const { data: project } = useSelectedProjectQuery() const trimmedQuery = query.trim() const { data: policies, isLoading: isLoadingPolicies, isError: isErrorPolicies, } = useDatabasePoliciesQuery( { projectRef: project?.ref, connectionString: project?.connectionString, }, { enabled: !!project?.ref, } ) const policyResults: SearchResult[] = useMemo(() => { if (!policies) return [] const filtered = trimmedQuery ? policies.filter((policy) => { const searchLower = trimmedQuery.toLowerCase() const policyName = policy.name?.toLowerCase() || '' const tableName = policy.table?.toLowerCase() || '' const schemaName = policy.schema?.toLowerCase() || '' const fullTableName = `${schemaName}.${tableName}` const command = policy.command?.toLowerCase() || '' return ( policyName.includes(searchLower) || tableName.includes(searchLower) || schemaName.includes(searchLower) || fullTableName.includes(searchLower) || command.includes(searchLower) ) }) : policies // Limit results for performance return filtered.slice(0, 20).map((policy) => { const displayName = policy.name || 'Untitled Policy' const tableDisplay = policy.schema && policy.schema !== 'public' ? `${policy.schema}.${policy.table}` : policy.table || 'unknown table' const commandDisplay = policy.command || 'ALL' const description = `${commandDisplay} on ${tableDisplay}` return { id: String(policy.id), name: displayName, description, } }) }, [policies, trimmedQuery]) const totalPolicies = policies?.length ?? 0 const renderFooter = () => (
Failed to load policies