import { useState, useTransition } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert'; import { Button } from '@kit/ui/button'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from '@kit/ui/dialog'; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from '@kit/ui/form'; import { If } from '@kit/ui/if'; import { Trans } from '@kit/ui/trans'; import { RoleSchema } from '../../schema/update-member-role.schema'; import { updateInvitationAction } from '../../server/actions/team-invitations-server-actions'; import { MembershipRoleSelector } from '../members/membership-role-selector'; import { RolesDataProvider } from '../members/roles-data-provider'; type Role = string; export const UpdateInvitationDialog: React.FC<{ isOpen: boolean; setIsOpen: (isOpen: boolean) => void; invitationId: number; account: string; userRole: Role; userRoleHierarchy: number; }> = ({ isOpen, setIsOpen, invitationId, userRole, userRoleHierarchy, account, }) => { return ( ); }; function UpdateInvitationForm({ account, invitationId, userRole, userRoleHierarchy, setIsOpen, }: React.PropsWithChildren<{ account: string; invitationId: number; userRole: Role; userRoleHierarchy: number; setIsOpen: (isOpen: boolean) => void; }>) { const { t } = useTranslation('teams'); const [pending, startTransition] = useTransition(); const [error, setError] = useState(); const onSubmit = ({ role }: { role: Role }) => { startTransition(async () => { try { await updateInvitationAction({ invitationId, role, }); setIsOpen(false); } catch (e) { setError(true); } }); }; const form = useForm({ resolver: zodResolver( RoleSchema.refine( (data) => { return data.role !== userRole; }, { message: t('roleMustBeDifferent'), path: ['role'], }, ), ), reValidateMode: 'onChange', mode: 'onChange', defaultValues: { role: userRole, }, }); return (
{ return ( {(roles) => ( form.setValue(field.name, newRole) } /> )} ); }} /> ); } function UpdateRoleErrorAlert() { return ( ); }