'use client'; import { useFormStatus } from 'react-dom'; import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { ErrorBoundary } from '@kit/monitoring/components'; import { useUser } from '@kit/supabase/hooks/use-user'; import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert'; import { AlertDialog, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from '@kit/ui/alert-dialog'; import { Button } from '@kit/ui/button'; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from '@kit/ui/form'; import { Input } from '@kit/ui/input'; import { LoadingOverlay } from '@kit/ui/loading-overlay'; import { Trans } from '@kit/ui/trans'; import { deleteTeamAccountAction } from '../../server/actions/delete-team-account-server-actions'; import { leaveTeamAccountAction } from '../../server/actions/leave-team-account-server-actions'; export function TeamAccountDangerZone({ account, primaryOwnerUserId, features, }: React.PropsWithChildren<{ account: { name: string; id: string; }; features: { enableTeamDeletion: boolean; }; primaryOwnerUserId: string; }>) { const { data: user } = useUser(); if (!user) { return ; } // Only the primary owner can delete the team account const userIsPrimaryOwner = user.id === primaryOwnerUserId; if (userIsPrimaryOwner && features.enableTeamDeletion) { return ; } // A primary owner can't leave the team account // but other members can return ; } function DeleteTeamContainer(props: { account: { name: string; id: string; }; }) { return (

e.preventDefault()}>
); } function DeleteTeamConfirmationForm({ name, id, }: { name: string; id: string; }) { const form = useForm({ mode: 'onChange', reValidateMode: 'onChange', resolver: zodResolver( z.object({ name: z.string().refine((value) => value === name, { message: 'Name does not match', path: ['name'], }), }), ), defaultValues: { name: '', }, }); return ( }>
( )} name={'confirm'} />
); } function DeleteTeamSubmitButton() { const { pending } = useFormStatus(); return ( ); } function LeaveTeamContainer(props: { account: { name: string; id: string; }; }) { const form = useForm({ resolver: zodResolver( z.object({ confirmation: z.string().refine((value) => value === 'LEAVE', { message: 'Confirmation required to leave team', path: ['confirmation'], }), }), ), defaultValues: { confirmation: '', }, }); return (

}>
{ return ( ); }} />
); } function LeaveTeamSubmitButton() { const { pending } = useFormStatus(); return ( ); } function LeaveTeamErrorAlert() { return ( <> ); } function DeleteTeamErrorAlert() { return ( ); }