PlatformWebhooksHeader.tsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import Link from 'next/link'
  2. import { ReactNode } from 'react'
  3. import {
  4. Badge,
  5. BreadcrumbItem,
  6. BreadcrumbLink,
  7. BreadcrumbList,
  8. BreadcrumbPage,
  9. BreadcrumbSeparator,
  10. } from 'ui'
  11. import {
  12. PageHeader,
  13. PageHeaderAside,
  14. PageHeaderBreadcrumb,
  15. PageHeaderDescription,
  16. PageHeaderMeta,
  17. PageHeaderSummary,
  18. PageHeaderTitle,
  19. } from 'ui-patterns/PageHeader'
  20. import { DocsButton } from '@/components/ui/DocsButton'
  21. import { FeaturePreviewBadge } from '@/components/ui/FeaturePreviewBadge'
  22. interface PlatformWebhooksHeaderProps {
  23. hasSelectedEndpoint: boolean
  24. headerTitle: string
  25. headerDescription: string
  26. endpointStatus?: 'enabled' | 'disabled'
  27. endpointActions?: ReactNode
  28. webhooksHref: string
  29. scopeLabel: string
  30. featureKey: string
  31. }
  32. export const PlatformWebhooksHeader = ({
  33. hasSelectedEndpoint,
  34. headerTitle,
  35. headerDescription,
  36. endpointStatus,
  37. endpointActions,
  38. webhooksHref,
  39. scopeLabel,
  40. featureKey,
  41. }: PlatformWebhooksHeaderProps) => {
  42. return (
  43. <PageHeader size="default" className="pb-6">
  44. {hasSelectedEndpoint && (
  45. <PageHeaderBreadcrumb>
  46. <BreadcrumbList>
  47. <BreadcrumbItem>
  48. <BreadcrumbLink asChild>
  49. <Link href={webhooksHref}>{scopeLabel}</Link>
  50. </BreadcrumbLink>
  51. </BreadcrumbItem>
  52. <BreadcrumbSeparator />
  53. <BreadcrumbItem>
  54. <BreadcrumbPage>Endpoint</BreadcrumbPage>
  55. </BreadcrumbItem>
  56. </BreadcrumbList>
  57. </PageHeaderBreadcrumb>
  58. )}
  59. <PageHeaderMeta>
  60. <PageHeaderSummary className="min-w-0">
  61. <PageHeaderTitle className="min-w-0 w-full">
  62. <span className="flex w-full min-w-0 items-center gap-x-4">
  63. <span className="block min-w-0 truncate leading-tight">{headerTitle}</span>
  64. {hasSelectedEndpoint && endpointStatus && (
  65. <Badge
  66. className="shrink-0 self-center"
  67. variant={endpointStatus === 'enabled' ? 'success' : 'default'}
  68. >
  69. {endpointStatus === 'enabled' ? 'Enabled' : 'Disabled'}
  70. </Badge>
  71. )}
  72. {!hasSelectedEndpoint && <FeaturePreviewBadge featureKey={featureKey} />}
  73. </span>
  74. </PageHeaderTitle>
  75. <PageHeaderDescription>{headerDescription}</PageHeaderDescription>
  76. </PageHeaderSummary>
  77. <PageHeaderAside>
  78. {hasSelectedEndpoint ? endpointActions : <DocsButton href="https://supabase.com/docs" />}
  79. </PageHeaderAside>
  80. </PageHeaderMeta>
  81. </PageHeader>
  82. )
  83. }