Home / Function/ WebhooksListTab() — supabase Function Reference

WebhooksListTab() — supabase Function Reference

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

Entity Profile

Relationship Graph

Source Code

apps/studio/components/interfaces/Integrations/Webhooks/ListTab.tsx lines 15–96

export const WebhooksListTab = () => {
  const { data: project } = useSelectedProjectQuery()

  // Track the ID being deleted to exclude it from error checking
  const deletingHookIdRef = useRef<string | null>(null)

  const [showCreateHookForm, setShowCreateHookForm] = useQueryState(
    'new',
    parseAsBoolean.withDefault(false).withOptions({ history: 'push', clearOnDefault: true })
  )

  const [selectedHookIdToEdit, setSelectedHookIdToEdit] = useQueryState(
    'edit',
    parseAsString.withDefault('').withOptions({ history: 'push', clearOnDefault: true })
  )

  const { can: canReadWebhooks, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
    PermissionAction.TENANT_SQL_ADMIN_READ,
    'triggers'
  )

  const { data: hooks, isPending: isLoadingHooks } = useDatabaseHooksQuery({
    projectRef: project?.ref,
    connectionString: project?.connectionString,
  })

  const { setValue: setSelectedHookToDelete, value: selectedHookToDelete } =
    useQueryStateWithSelect({
      urlKey: 'delete',
      select: (id: string) => (id ? hooks?.find((hook) => hook.id.toString() === id) : undefined),
      enabled: !!hooks && !isLoadingHooks,
      onError: (_error, selectedId) =>
        handleErrorOnDelete(deletingHookIdRef, selectedId, `Webhook not found`),
    })

  const createHook = () => {
    setShowCreateHookForm(true)
  }

  const editHook = (hook: PostgresTrigger) => {
    setSelectedHookIdToEdit(hook.id.toString())
  }

  const deleteHook = (hook: PostgresTrigger) => {
    setSelectedHookToDelete(hook.id.toString())
  }

  const selectedHookToEdit = useMemo(
    () => hooks?.find((hook) => hook.id.toString() === selectedHookIdToEdit),
    [hooks, selectedHookIdToEdit]
  )

  if (isPermissionsLoaded && !canReadWebhooks) {
    return <NoPermission isFullPage resourceText="view database webhooks" />
  }

  return (
    <div className="p-10">
      <HooksList createHook={createHook} editHook={editHook} deleteHook={deleteHook} />
      <EditHookPanel
        key={selectedHookToEdit?.id}
        visible={showCreateHookForm || !!selectedHookToEdit}
        selectedHook={selectedHookToEdit}
        onClose={() => {
          setShowCreateHookForm(false)
          setSelectedHookIdToEdit('')
        }}
      />
      <DeleteHookModal
        visible={!!selectedHookToDelete}
        selectedHook={selectedHookToDelete}
        onClose={() => {
          deletingHookIdRef.current = null
          setSelectedHookToDelete(null)
        }}
        onDeleteStart={(hookId: string) => {
          deletingHookIdRef.current = hookId
        }}
      />
    </div>
  )
}

Subdomains

Analyze Your Own Codebase

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

Try Supermodel Free