import { useMemo } from 'react'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react/macro'; import { Trans } from '@lingui/react/macro'; import { EditIcon, MoreHorizontalIcon, Trash2Icon } from 'lucide-react'; import { Link } from 'react-router'; import { useCurrentOrganisation } from '@documenso/lib/client-only/providers/organisation'; import { IS_BILLING_ENABLED } from '@documenso/lib/constants/app'; import { generateEmailDomainRecords } from '@documenso/lib/utils/email-domains'; import { trpc } from '@documenso/trpc/react'; import type { TGetOrganisationEmailDomainResponse } from '@documenso/trpc/server/enterprise-router/get-organisation-email-domain.types'; import { Alert, AlertDescription, AlertTitle } from '@documenso/ui/primitives/alert'; import { Button } from '@documenso/ui/primitives/button'; import { DataTable, type DataTableColumnDef } from '@documenso/ui/primitives/data-table'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from '@documenso/ui/primitives/dropdown-menu'; import { SpinnerBox } from '@documenso/ui/primitives/spinner'; import { OrganisationEmailCreateDialog } from '~/components/dialogs/organisation-email-create-dialog'; import { OrganisationEmailDeleteDialog } from '~/components/dialogs/organisation-email-delete-dialog'; import { OrganisationEmailDomainDeleteDialog } from '~/components/dialogs/organisation-email-domain-delete-dialog'; import { OrganisationEmailDomainRecordsDialog } from '~/components/dialogs/organisation-email-domain-records-dialog'; import { OrganisationEmailUpdateDialog } from '~/components/dialogs/organisation-email-update-dialog'; import { GenericErrorLayout } from '~/components/general/generic-error-layout'; import { SettingsHeader } from '~/components/general/settings-header'; import type { Route } from './+types/o.$orgUrl.settings.groups.$id'; export default function OrganisationEmailDomainSettingsPage({ params }: Route.ComponentProps) { const { t } = useLingui(); const organisation = useCurrentOrganisation(); const emailDomainId = params.id; const { data: emailDomain, isLoading: isLoadingEmailDomain } = trpc.enterprise.organisation.emailDomain.get.useQuery( { emailDomainId, }, { enabled: !!emailDomainId, }, ); const emailColumns = useMemo(() => { return [ { header: t`Name`, accessorKey: 'emailName', }, { header: t`Email`, accessorKey: 'email', }, { header: t`Actions`, cell: ({ row }) => ( Actions e.preventDefault()}> Update } /> e.preventDefault()}> Remove } /> ), }, ] satisfies DataTableColumnDef[]; }, [organisation]); if (!IS_BILLING_ENABLED()) { return null; } if (isLoadingEmailDomain) { return ; } // Todo: Update UI, currently out of place. if (!emailDomain) { return ( Go back } secondaryButton={null} /> ); } const records = generateEmailDomainRecords(emailDomain.selector, emailDomain.publicKey); return (
DNS Records View the DNS records for this email domain
View DNS Records } />
Delete email domain This will remove all emails associated with this email domain
Delete Email Domain } />
); }