Home / Function/ PolicyTemplates() — supabase Function Reference

PolicyTemplates() — supabase Function Reference

Architecture documentation for the PolicyTemplates() function in PolicyTemplates.tsx from the supabase codebase.

Entity Profile

Dependency Diagram

graph TD
  5cae6a1d_d69a_57ce_077f_d3f1a4cc0bff["PolicyTemplates()"]
  ecb0f3a7_06fa_5c8f_550b_082738463a11["getRealtimePolicyTemplates()"]
  5cae6a1d_d69a_57ce_077f_d3f1a4cc0bff -->|calls| ecb0f3a7_06fa_5c8f_550b_082738463a11
  68f8a828_38a7_c5df_4394_d85ba96493dc["getQueuePolicyTemplates()"]
  5cae6a1d_d69a_57ce_077f_d3f1a4cc0bff -->|calls| 68f8a828_38a7_c5df_4394_d85ba96493dc
  84c99679_0e25_0222_f391_4a90bae0289e["getGeneralPolicyTemplates()"]
  5cae6a1d_d69a_57ce_077f_d3f1a4cc0bff -->|calls| 84c99679_0e25_0222_f391_4a90bae0289e
  style 5cae6a1d_d69a_57ce_077f_d3f1a4cc0bff fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

apps/studio/components/interfaces/Auth/Policies/PolicyEditorPanel/PolicyTemplates.tsx lines 25–146

export const PolicyTemplates = ({
  schema,
  table,
  selectedPolicy,
  selectedTemplate,
  onSelectTemplate,
}: PolicyTemplatesProps) => {
  const [search, setSearch] = useState('')

  const templates =
    schema === 'realtime'
      ? getRealtimePolicyTemplates()
      : schema === 'pgmq'
        ? getQueuePolicyTemplates()
        : getGeneralPolicyTemplates(schema, table.length > 0 ? table : 'table_name')

  const baseTemplates =
    selectedPolicy !== undefined
      ? templates.filter((t) => t.command === selectedPolicy.command)
      : templates
  const filteredTemplates =
    search.length > 0
      ? baseTemplates.filter(
          (template) =>
            template.name.toLowerCase().includes(search.toLowerCase()) ||
            template.command.toLowerCase().includes(search.toLowerCase())
        )
      : baseTemplates

  return (
    <div className="h-full px-content py-content flex flex-col gap-3">
      <label className="sr-only" htmlFor="template-search">
        Search templates
      </label>
      <Input
        size="small"
        id="template-search"
        icon={<Search className="text-foreground-muted" />}
        placeholder="Search templates"
        value={search}
        onChange={(event) => setSearch(event.target.value)}
      />

      {search.length > 0 && filteredTemplates.length === 0 && (
        <NoSearchResults searchString={search} className="min-w-full" />
      )}

      <div className="flex flex-col gap-1.5">
        {filteredTemplates.map((template) => {
          return (
            <HoverCard key={template.id} openDelay={100} closeDelay={100}>
              <HoverCardTrigger>
                <CardButton
                  title={template.name}
                  titleClass="text-sm"
                  className={cn(
                    'transition w-full',
                    template.id === selectedTemplate
                      ? '!border-stronger bg-surface-200 hover:!border-stronger'
                      : ''
                  )}
                  key={template.id}
                  onClick={() => onSelectTemplate(template)}
                  hideChevron
                  fixedHeight={false}
                  icon={
                    <div className="min-w-16 flex items-start">
                      <Badge
                        className={cn(
                          '!rounded font-mono',
                          template.command === 'UPDATE'
                            ? 'bg-blue-400 text-blue-900 border border-blue-800'
                            : ''
                        )}
                        variant={
                          template.command === 'ALL'
                            ? 'default'
                            : template.command === 'SELECT'
                              ? 'success'
                              : template.command === 'UPDATE'
                                ? 'default'
                                : template.command === 'DELETE'
                                  ? 'destructive'
                                  : 'warning'
                        }
                      >
                        {template.command}
                      </Badge>
                    </div>
                  }
                >
                  <Markdown content={template.description} className="[&>p]:m-0 space-y-2" />
                </CardButton>
              </HoverCardTrigger>
              <HoverCardContent
                hideWhenDetached
                side="left"
                align="center"
                className="w-[500px] flex"
                animate="slide-in"
              >
                <SimpleCodeBlock
                  showCopy={false}
                  className="sql"
                  parentClassName="!p-0 [&>div>span]:text-xs"
                >
                  {template.statement}
                </SimpleCodeBlock>
                <CopyButton
                  iconOnly
                  type="default"
                  className="px-1 absolute top-1.5 right-1.5"
                  text={template.statement}
                />
              </HoverCardContent>
            </HoverCard>
          )
        })}
      </div>
    </div>
  )
}

Subdomains

Frequently Asked Questions

What does PolicyTemplates() do?
PolicyTemplates() is a function in the supabase codebase.
What does PolicyTemplates() call?
PolicyTemplates() calls 3 function(s): getGeneralPolicyTemplates, getQueuePolicyTemplates, getRealtimePolicyTemplates.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free