import { AlertCircle } from 'lucide-react' import { SupportCategories } from '@supabase/shared-types/out/constants' import { useFlag, useParams } from 'common' import { SupportLink } from 'components/interfaces/Support/SupportLink' import { FormHeader } from 'components/ui/Forms/FormHeader' import { InlineLinkClassName } from 'components/ui/InlineLink' import Panel from 'components/ui/Panel' import { UpgradeToPro } from 'components/ui/UpgradeToPro' import { useCustomDomainsQuery, type CustomDomainsData, } from 'data/custom-domains/custom-domains-query' import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query' import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' import CustomDomainActivate from './CustomDomainActivate' import CustomDomainDelete from './CustomDomainDelete' import CustomDomainVerify from './CustomDomainVerify' import CustomDomainsConfigureHostname from './CustomDomainsConfigureHostname' import CustomDomainsShimmerLoader from './CustomDomainsShimmerLoader' export const CustomDomainConfig = () => { const { ref } = useParams() const { data: organization } = useSelectedOrganizationQuery() const customDomainsDisabledDueToQuota = useFlag('customDomainsDisabledDueToQuota') const plan = organization?.plan?.id const { data: addons, isPending: isLoadingAddons } = useProjectAddonsQuery({ projectRef: ref }) const hasCustomDomainAddon = !!addons?.selected_addons.find((x) => x.type === 'custom_domain') const { data: customDomainData, isPending: isCustomDomainsLoading, isError, isSuccess, status: customDomainStatus, } = useCustomDomainsQuery( { projectRef: ref }, { refetchInterval: (query) => { const data = query.state.data // while setting up the ssl certificate, we want to poll every 5 seconds if (data?.customDomain?.ssl.status) { return 10000 // 10 seconds } return false }, } ) const { status } = customDomainData || {} return (
{isLoadingAddons ? ( ) : !hasCustomDomainAddon ? ( ) : isCustomDomainsLoading ? ( ) : isError ? (

Failed to retrieve custom domain configuration. Please try again later or{' '} contact support .

) : status === '0_no_hostname_configured' ? ( ) : ( {isSuccess ? (
{(status === '1_not_started' || status === '2_initiated' || status === '3_challenge_verified') && } {customDomainData.status === '4_origin_setup_completed' && ( )} {customDomainData.status === '5_services_reconfigured' && ( )}
) : ( )}
)}
) } interface CustomDomainConfigFallthroughProps { fetchStatus: 'error' | 'success' | 'pending' data: CustomDomainsData | undefined } function CustomDomainConfigFallthrough({ fetchStatus, data }: CustomDomainConfigFallthroughProps) { console.error(`Failing to display UI for custom domains: Fetch status: ${fetchStatus} Custom domain status: ${data?.status}`) return null }