Files
supabase/apps/studio/components/interfaces/Platform/Webhooks/PlatformWebhooksHeader.tsx
T
Danny White df55c5c327 feat(studio): platform webhooks scaffolding (#43276)
## What kind of change does this PR introduce?

Impending feature addition. Resolves DEPR-340.

## What is the current behavior?

We don’t have any platform webhook support.

## What is the new behavior?

This puts the scaffolding for platform webhooks **behind a feature
flag**. The content is currently UI-only (with mock data and a
[temporary tracking
file](https://github.com/supabase/supabase/blob/8adadc61f57c70b686a0f5f05e9f7f05837e0466/apps/studio/components/interfaces/Platform/Webhooks/DEPR-340-backend-integration-tracker.md)).

Merging this in lets us work incrementally from here on.
2026-03-06 02:56:54 +00:00

92 lines
2.6 KiB
TypeScript

import Link from 'next/link'
import { ReactNode } from 'react'
import { DocsButton } from 'components/ui/DocsButton'
import {
Badge,
BreadcrumbItem_Shadcn_ as BreadcrumbItem,
BreadcrumbLink_Shadcn_ as BreadcrumbLink,
BreadcrumbList_Shadcn_ as BreadcrumbList,
BreadcrumbPage_Shadcn_ as BreadcrumbPage,
BreadcrumbSeparator_Shadcn_ as BreadcrumbSeparator,
Button,
} from 'ui'
import {
PageHeader,
PageHeaderAside,
PageHeaderBreadcrumb,
PageHeaderDescription,
PageHeaderMeta,
PageHeaderSummary,
PageHeaderTitle,
} from 'ui-patterns/PageHeader'
interface PlatformWebhooksHeaderProps {
hasSelectedEndpoint: boolean
headerTitle: string
headerDescription: string
endpointStatus?: 'enabled' | 'disabled'
endpointActions?: ReactNode
webhooksHref: string
scopeLabel: string
}
export const PlatformWebhooksHeader = ({
hasSelectedEndpoint,
headerTitle,
headerDescription,
endpointStatus,
endpointActions,
webhooksHref,
scopeLabel,
}: PlatformWebhooksHeaderProps) => {
return (
<PageHeader size="default" className="pb-6">
{hasSelectedEndpoint && (
<PageHeaderBreadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink asChild>
<Link href={webhooksHref}>{scopeLabel}</Link>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Endpoint</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</PageHeaderBreadcrumb>
)}
<PageHeaderMeta>
<PageHeaderSummary>
<PageHeaderTitle>
<span className="inline-flex items-center gap-2">
<span>{headerTitle}</span>
{hasSelectedEndpoint && endpointStatus && (
<Badge variant={endpointStatus === 'enabled' ? 'success' : 'default'}>
{endpointStatus === 'enabled' ? 'Enabled' : 'Disabled'}
</Badge>
)}
</span>
</PageHeaderTitle>
<PageHeaderDescription>{headerDescription}</PageHeaderDescription>
</PageHeaderSummary>
<PageHeaderAside>
{hasSelectedEndpoint ? (
endpointActions
) : (
<>
<DocsButton href="https://supabase.com/docs" />
<Button asChild type="default">
<a target="_blank" rel="noopener noreferrer" href="https://supabase.com">
Leave feedback
</a>
</Button>
</>
)}
</PageHeaderAside>
</PageHeaderMeta>
</PageHeader>
)
}