import * as Tooltip from '@radix-ui/react-tooltip' import type { PostgresPolicy, PostgresTable } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import Link from 'next/link' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import { useCheckPermissions, useStore } from 'hooks' import { Button, IconAlertCircle, IconCode, IconLock } from 'ui' import { useEffect, useRef, useState } from 'react' import { RLS_ACKNOWLEDGED_KEY, rlsAcknowledgedKey } from 'components/grid/constants' export interface GridHeaderActionsProps { table: PostgresTable apiPreviewPanelOpen: boolean setApiPreviewPanelOpen: (apiPreviewPanelOpen: boolean) => void refreshDocs: () => void } const GridHeaderActions = ({ table, apiPreviewPanelOpen, setApiPreviewPanelOpen, refreshDocs, }: GridHeaderActionsProps) => { const { meta } = useStore() const { project } = useProjectContext() const projectRef = project?.ref const policies = meta.policies.list((policy: PostgresPolicy) => policy.table_id === table.id) const canSqlWriteTables = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') const canSqlWriteColumns = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'columns') const isReadOnly = !canSqlWriteTables && !canSqlWriteColumns const rlsKey = rlsAcknowledgedKey(table.id.toString()) const rlsAcknowledgedChannel = useRef(new BroadcastChannel(rlsKey)) const [showRLSWarning, setShowRLSWarning] = useState( !table.rls_enabled && localStorage.getItem(rlsKey) === 'true' ) const rlsDisabledMessage = showRLSWarning ? 'RLS is not enabled' : '' useEffect(() => { if (rlsAcknowledgedChannel.current) { rlsAcknowledgedChannel.current.close() } rlsAcknowledgedChannel.current = new BroadcastChannel(rlsKey) rlsAcknowledgedChannel.current.onmessage = (event) => { if (event.data.type === 'dismiss') { setShowRLSWarning(true) } } return () => rlsAcknowledgedChannel.current.close() }, [rlsKey]) function handlePreviewToggle() { setApiPreviewPanelOpen(!apiPreviewPanelOpen) refreshDocs() } const RenderAPIPreviewToggle = () => { return ( } onClick={handlePreviewToggle} > API ) } return (