import { useMemo, useState } from 'react' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' import { Policies } from '@/components/interfaces/Auth/Policies/Policies' import { PoliciesDataProvider } from '@/components/interfaces/Auth/Policies/PoliciesDataContext' import { PolicyEditorPanel } from '@/components/interfaces/Auth/Policies/PolicyEditorPanel' import type { Policy } from '@/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRow.utils' import AlertError from '@/components/ui/AlertError' import { useDatabasePoliciesQuery } from '@/data/database-policies/database-policies-query' import { useTablesQuery } from '@/data/tables/tables-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' export const RealtimePolicies = () => { const { data: project } = useSelectedProjectQuery() const [showPolicyEditor, setShowPolicyEditor] = useState(false) const [selectedPolicyToEdit, setSelectedPolicyToEdit] = useState() const { data: tables, isPending: isLoading, isSuccess, isError, error, } = useTablesQuery({ projectRef: project?.ref, connectionString: project?.connectionString, schema: 'realtime', }) const filteredTables = useMemo( () => (tables ?? []).filter((table) => table.name === 'messages'), [tables] ) const visibleTableIds = useMemo( () => new Set(filteredTables.map((table) => table.id)), [filteredTables] ) const { data: policies, isPending: isLoadingPolicies, isError: isPoliciesError, error: policiesError, } = useDatabasePoliciesQuery({ projectRef: project?.ref, connectionString: project?.connectionString, }) // realtime is never in PostgREST's db_schema — skip the config query to avoid a false warning const exposedSchemas = useMemo(() => ['realtime'], []) return ( <> {isLoading && } {isError && } {isSuccess && ( { setSelectedPolicyToEdit(undefined) setShowPolicyEditor(true) }} onSelectEditPolicy={(policy) => { setSelectedPolicyToEdit(policy) setShowPolicyEditor(true) }} /> )} setShowPolicyEditor(false)} authContext="realtime" /> ) }