| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- import { Trash } from 'lucide-react'
- import { useEffect, useState } from 'react'
- import { toast } from 'sonner'
- import { Button, Checkbox } from 'ui'
- import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal'
- import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
- import { DocsButton } from '@/components/ui/DocsButton'
- import Panel from '@/components/ui/Panel'
- import { useCustomDomainDeleteMutation } from '@/data/custom-domains/custom-domains-delete-mutation'
- import type { CustomDomainResponse } from '@/data/custom-domains/custom-domains-query'
- import { DOCS_URL } from '@/lib/constants'
- export type CustomDomainDeleteProps = {
- projectRef?: string
- customDomain: CustomDomainResponse
- }
- export const CustomDomainDelete = ({ projectRef, customDomain }: CustomDomainDeleteProps) => {
- const [removeCustomDomain, setRemoveCustomDomain] = useState(false)
- const [isDeleteConfirmModalVisible, setIsDeleteConfirmModalVisible] = useState(false)
- const { mutate: deleteCustomDomain, isPending: isDeletingCustomDomain } =
- useCustomDomainDeleteMutation({
- onSuccess: () => {
- toast.success(
- `Successfully deleted custom domain. Refresh your browser to see the changes.`
- )
- setIsDeleteConfirmModalVisible(false)
- },
- })
- const onDeleteCustomDomain = async () => {
- if (!projectRef) return console.error('Project ref is required')
- deleteCustomDomain({ projectRef, removeAddon: removeCustomDomain })
- }
- useEffect(() => {
- if (!isDeleteConfirmModalVisible) setRemoveCustomDomain(false)
- }, [isDeleteConfirmModalVisible])
- return (
- <>
- <Panel.Content>
- <div className="w-full space-y-2">
- <p className="text-xs text-foreground-light">Active custom domain:</p>
- <div className="flex items-center space-x-2">
- <code className="text-lg mx-0 flex items-center space-x-2">
- <div className="h-2 w-2 rounded-full bg-brand" />
- <span>
- <code className="text-code-inline">{customDomain.hostname}</code>
- </span>
- </code>
- </div>
- <p className="text-sm text-foreground-light">
- Your custom domain is currently active and is serving traffic
- </p>
- </div>
- </Panel.Content>
- <div className="w-full border-t border-muted" />
- <Panel.Content className="w-full">
- <div className="flex items-center justify-between">
- <DocsButton href={`${DOCS_URL}/guides/platform/custom-domains`} />
- <Button
- type="danger"
- icon={<Trash />}
- onClick={() => setIsDeleteConfirmModalVisible(true)}
- >
- Delete custom domain
- </Button>
- </div>
- </Panel.Content>
- <ConfirmationModal
- visible={isDeleteConfirmModalVisible}
- variant="destructive"
- title="Delete custom domain"
- confirmLabel="Delete"
- confirmLabelLoading="Deleting"
- loading={isDeletingCustomDomain}
- onCancel={() => setIsDeleteConfirmModalVisible(false)}
- onConfirm={onDeleteCustomDomain}
- >
- <p className="text-sm mb-4">
- Are you sure you want to delete the custom domain{' '}
- <code className="text-code-inline break-normal!">{customDomain.hostname}</code> for your
- project? You will need to re-verify this domain if you want to use it again.
- </p>
- <FormItemLayout
- isReactForm={false}
- layout="flex"
- name="removeCustomDomain"
- label="Also remove custom domain add-on"
- description="Stops the monthly add-on charge for this project"
- className="[&>div:first-child>button]:translate-y-0.5"
- >
- <Checkbox
- checked={removeCustomDomain}
- onCheckedChange={(value) => setRemoveCustomDomain(!!value)}
- />
- </FormItemLayout>
- </ConfirmationModal>
- </>
- )
- }
|