diff --git a/frontend/src/components/residents/ResidentDialogs.tsx b/frontend/src/components/residents/ResidentDialogs.tsx index a77b96490..6ba6355da 100644 --- a/frontend/src/components/residents/ResidentDialogs.tsx +++ b/frontend/src/components/residents/ResidentDialogs.tsx @@ -26,6 +26,14 @@ import { FormModal, TonedPanel } from '@/components/shared'; import { useTypeToConfirm } from '@/components/shared/useTypeToConfirm'; import { Copy, Check } from 'lucide-react'; +function useConfirmToken(resident: User, open: boolean) { + const hasDocId = Boolean(resident.doc_id); + const confirmToken = hasDocId ? resident.doc_id! : resident.username; + const confirmLabel = hasDocId ? 'Resident ID' : 'username'; + const confirm = useTypeToConfirm({ open, expected: confirmToken }); + return { confirmToken, confirmLabel, confirm }; +} + // --------------------------------------------------------------------------- // EditResidentDialog // --------------------------------------------------------------------------- @@ -90,56 +98,65 @@ export function EditResidentDialog({ description="Update resident information" titleClassName="text-foreground" > -
-
+
{ + void form.handleSubmit((d) => void handleSave(d))(e); + }} + > +
+
+
+ + +
+
+ + +
+
- +
- +
-
- - -
-
- - -
-
- - - - + + + + + ); } @@ -308,8 +325,10 @@ export function DeactivateDialog({ }: DeactivateDialogProps) { const { toaster } = useToast(); const [loading, setLoading] = useState(false); - const displayId = resident.doc_id ?? ''; - const confirm = useTypeToConfirm({ open, expected: displayId }); + const { confirmToken, confirmLabel, confirm } = useConfirmToken( + resident, + open + ); const handleDeactivate = async () => { setLoading(true); @@ -391,8 +410,8 @@ export function DeactivateDialog({ { setLoading(true); @@ -477,8 +498,8 @@ export function DeleteDialog({ { if (!open) setTransferFacilityId(''); @@ -687,9 +710,9 @@ export function TransferDialog({ htmlFor="transfer-confirm" className="text-sm font-medium" > - Type{' '} + Type the {confirmLabel}{' '} - {displayId} + {confirmToken} {' '} to confirm diff --git a/frontend/src/pages/class-detail/BulkSessionFieldModal.tsx b/frontend/src/pages/class-detail/BulkSessionFieldModal.tsx index a79b44b21..589fbc5ec 100644 --- a/frontend/src/pages/class-detail/BulkSessionFieldModal.tsx +++ b/frontend/src/pages/class-detail/BulkSessionFieldModal.tsx @@ -42,7 +42,7 @@ interface BulkSessionFieldModalProps { idPrefix: string; options: FieldOption[]; payloadKey: string; - reasonOptions: Array<{ value: string; label: string }>; + reasonOptions: { value: string; label: string }[]; } export function BulkSessionFieldModal({ @@ -87,12 +87,16 @@ export function BulkSessionFieldModal({ ? [...sessions, ...futureSessions] : sessions; - const { ok, fail } = await bulkPatchEvents(classId, allSessions, (s) => ({ - date: s.date, - start_time: s.classTime?.split('-')[0], - is_cancelled: false, - [payloadKey]: Number(selectedId) - })); + const { ok, fail } = await bulkPatchEvents( + classId, + allSessions, + (s) => ({ + date: s.date, + start_time: s.classTime?.split('-')[0], + is_cancelled: false, + [payloadKey]: Number(selectedId) + }) + ); const selectedLabel = options.find((o) => String(o.id) === selectedId)?.label ?? ''; @@ -133,7 +137,9 @@ export function BulkSessionFieldModal({