import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' import { noop } from 'lodash' import { Lock, Table } from 'lucide-react' import { AiIconAnimation, Badge, CardTitle } from 'ui' import type { PolicyTable } from './PolicyTableRow.types' import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { EditorTablePageLink } from '@/data/prefetchers/project.$ref.editor.$id' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state' import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state' interface PolicyTableRowHeaderProps { table: PolicyTable isLocked: boolean hasApiAccess: boolean isLoadingApiAccess: boolean onSelectToggleRLS: (table: PolicyTable) => void onSelectCreatePolicy: (table: PolicyTable) => void } export const PolicyTableRowHeader = ({ table, isLocked, hasApiAccess, isLoadingApiAccess, onSelectToggleRLS = noop, onSelectCreatePolicy, }: PolicyTableRowHeaderProps) => { const { ref } = useParams() const aiSnap = useAiAssistantStateSnapshot() const { openSidebar } = useSidebarManagerSnapshot() const { can: canCreatePolicies } = useAsyncCheckPermissions( PermissionAction.TENANT_SQL_ADMIN_WRITE, 'policies' ) const { can: canToggleRLS } = useAsyncCheckPermissions( PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables' ) const isRealtimeSchema = table.schema === 'realtime' const isRealtimeMessagesTable = isRealtimeSchema && table.name === 'messages' const isTableLocked = isRealtimeSchema ? !isRealtimeMessagesTable : isLocked return (
{table.name} {!table.rls_enabled && ( RLS Disabled )} {!isLoadingApiAccess && !hasApiAccess && ( API Disabled )} {isTableLocked && ( Locked )} {!isTableLocked && (
{!isRealtimeMessagesTable && ( onSelectToggleRLS(table)} data-testid={`${table.name}-toggle-rls`} tooltip={{ content: { side: 'bottom', text: !canToggleRLS ? 'You need additional permissions to toggle RLS' : undefined, }, }} > {table.rls_enabled ? 'Disable RLS' : 'Enable RLS'} )} onSelectCreatePolicy(table)} data-testid={`${table.name}-create-policy`} tooltip={{ content: { side: 'bottom', text: !canToggleRLS ? !canToggleRLS || !canCreatePolicies ? 'You need additional permissions to create RLS policies' : undefined : undefined, }, }} > Create policy { openSidebar(SIDEBAR_KEYS.AI_ASSISTANT) aiSnap.newChat({ name: 'Create new policy', initialInput: `Create and name a new policy for the ${table.schema} schema on the ${table.name} table that ...`, }) }} tooltip={{ content: { side: 'bottom', text: !canToggleRLS || !canCreatePolicies ? 'You need additional permissions to create RLS policies' : 'Create with Supabase Assistant', }, }} aria-label={ !canToggleRLS || !canCreatePolicies ? 'You need additional permissions to create RLS policies' : 'Create with Supabase Assistant' } >
)} ) }