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"
>
-
-
-
-
-
-
+
+
+
+
+
);
}
@@ -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({