import { PermissionAction } from '@supabase/shared-types/out/constants' import { noop } from 'lodash' import { Lock, Unlock } from 'lucide-react' import { useQueryState } from 'nuqs' import { useParams } from 'common' import { useIsDatabaseFunctionsAssistantEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' import { ButtonTooltip } from 'components/ui/ButtonTooltip' import { EditorTablePageLink } from 'data/prefetchers/project.$ref.editor.$id' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import { useAppStateSnapshot } from 'state/app-state' import { AiIconAnimation, Badge } from 'ui' interface PolicyTableRowHeaderProps { table: { id: number schema: string name: string rls_enabled: boolean } isLocked: boolean onSelectToggleRLS: (table: { id: number schema: string name: string rls_enabled: boolean }) => void onSelectCreatePolicy: () => void } const PolicyTableRowHeader = ({ table, isLocked, onSelectToggleRLS = noop, onSelectCreatePolicy, }: PolicyTableRowHeaderProps) => { const { ref } = useParams() const { setAiAssistantPanel } = useAppStateSnapshot() const enableAssistantV2 = useIsDatabaseFunctionsAssistantEnabled() const canToggleRLS = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') const isRealtimeSchema = table.schema === 'realtime' const isRealtimeMessagesTable = isRealtimeSchema && table.name === 'messages' const isTableLocked = isRealtimeSchema ? !isRealtimeMessagesTable : isLocked const [_, setEditView] = useQueryState('view', { defaultValue: '' }) return (
{table.rls_enabled ? (
) : (
)}

{table.name}

{isTableLocked && ( Locked )}
{!isTableLocked && (
{!isRealtimeMessagesTable && ( onSelectToggleRLS(table)} tooltip={{ content: { side: 'bottom', text: !canToggleRLS ? 'You need additional permissions to toggle RLS' : undefined, }, }} > {table.rls_enabled ? 'Disable RLS' : 'Enable RLS'} )} onSelectCreatePolicy()} tooltip={{ content: { side: 'bottom', text: !canToggleRLS ? !canToggleRLS ? 'You need additional permissions to create RLS policies' : undefined : undefined, }, }} > Create policy { if (enableAssistantV2) { setAiAssistantPanel({ open: true, editor: 'rls-policies', entity: undefined, tables: [{ schema: table.schema, name: table.name }], }) } else { onSelectCreatePolicy() setEditView('conversation') } }} tooltip={{ content: { side: 'bottom', text: !canToggleRLS ? 'You need additional permissions to create RLS policies' : 'Create with Supabase Assistant', }, }} >
)}
) } export default PolicyTableRowHeader