| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import { PermissionAction } from '@supabase/shared-types/out/constants'
- import { useParams } from 'common'
- import { toast } from 'sonner'
- import { Admonition } from 'ui-patterns'
- import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader'
- import { IntegrationOverviewTab } from '../Integration/IntegrationOverviewTab'
- import { IntegrationOverviewTabV2 } from '../Integration/IntegrationOverviewTabV2'
- import { useIsMarketplaceEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext'
- import { ButtonTooltip } from '@/components/ui/ButtonTooltip'
- import NoPermission from '@/components/ui/NoPermission'
- import { useHooksEnableMutation } from '@/data/database/hooks-enable-mutation'
- import { useSchemasQuery } from '@/data/database/schemas-query'
- import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
- import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
- export const WebhooksOverviewTab = () => {
- const { ref: projectRef } = useParams()
- const { data: project } = useSelectedProjectQuery()
- const isMarketplaceEnabled = useIsMarketplaceEnabled()
- const {
- data: schemas,
- isSuccess: isSchemasLoaded,
- refetch,
- } = useSchemasQuery({
- projectRef: project?.ref,
- connectionString: project?.connectionString,
- })
- const isHooksEnabled = schemas?.some((schema) => schema.name === 'briven_functions')
- const { can: canReadWebhooks, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
- PermissionAction.TENANT_SQL_ADMIN_READ,
- 'triggers'
- )
- const { mutate: enableHooks, isPending: isEnablingHooks } = useHooksEnableMutation({
- onSuccess: async () => {
- await refetch()
- toast.success('Successfully enabled webhooks')
- },
- })
- const enableHooksForProject = async () => {
- if (!projectRef) return console.error('Project ref is required')
- enableHooks({ ref: projectRef })
- }
- if (!isSchemasLoaded || isLoadingPermissions) {
- return (
- <div className="p-10">
- <GenericSkeletonLoader />
- </div>
- )
- }
- if (!canReadWebhooks) {
- return (
- <div className="p-10">
- <NoPermission isFullPage resourceText="view database webhooks" />
- </div>
- )
- }
- if (isMarketplaceEnabled) {
- return <IntegrationOverviewTabV2 />
- } else {
- return (
- <IntegrationOverviewTab
- hideRequiredExtensionsSection
- actions={
- isSchemasLoaded && isHooksEnabled ? null : (
- <Admonition
- showIcon={false}
- type="default"
- title="Enable database webhooks on your project"
- >
- <p>
- Database Webhooks can be used to trigger serverless functions or send requests to an
- HTTP endpoint
- </p>
- <ButtonTooltip
- className="mt-2 w-fit"
- onClick={() => enableHooksForProject()}
- disabled={isEnablingHooks}
- tooltip={{
- content: {
- side: 'bottom',
- text: !canReadWebhooks
- ? 'You need additional permissions to enable webhooks'
- : undefined,
- },
- }}
- >
- Enable webhooks
- </ButtonTooltip>
- </Admonition>
- )
- }
- />
- )
- }
- }
|