diff --git a/artifacts/tx-os/src/pages/executive-meetings.tsx b/artifacts/tx-os/src/pages/executive-meetings.tsx index 271c8574..fb897279 100644 --- a/artifacts/tx-os/src/pages/executive-meetings.tsx +++ b/artifacts/tx-os/src/pages/executive-meetings.tsx @@ -3412,8 +3412,10 @@ function ScheduleSection({ sortOrder: idx, kind: a.kind ?? "person", })), - // #635: external meeting flag. - isExternal: editingMeeting.isExternal, + // #635/#639: external meeting flag — coerce to real + // boolean so an undefined state never silently drops + // the field from the PATCH body. + isExternal: Boolean(editingMeeting.isExternal), }; try { await apiJson( @@ -6691,9 +6693,12 @@ function ManageSection({ // schedule survive a save through the Manage dialog. kind: a.kind ?? "person", })), - // #635: send the external flag so the server can force rowColor='red' - // and the cascade/postpone rules know to skip it. - isExternal: editing.isExternal, + // #635/#639: send the external flag as a real boolean so the + // server can force rowColor='red' and the cascade/postpone rules + // know to skip it. Coerce defensively — a stale render where + // state.isExternal is undefined would otherwise silently send + // `undefined` and the server PATCH would skip the column. + isExternal: Boolean(editing.isExternal), }; try { if (editing.id == null) { @@ -7571,21 +7576,26 @@ function MeetingFormDialog({ onChange={(e) => update("meetingDate", e.target.value)} /> - {/* #635: external-meeting toggle replaces the daily-number - input (numbering is now fully auto-assigned by the - server). When ON the row is force-tinted red and the - alert-postpone button is disabled. */} + {/* #635/#639: external-meeting toggle replaces the + daily-number input (numbering is now fully auto-assigned + by the server). When ON the row is force-tinted red and + the alert-postpone button is disabled. + `full` so it spans both grid columns on its own row — + prevents the toggle from sharing a row with the date + input and colliding with the time pickers below on + narrow screens. */} -
+
update("isExternal", Boolean(v))} data-testid="em-form-isExternal" /> - + {state.isExternal ? t("executiveMeetings.manage.field.isExternalOn") : t("executiveMeetings.manage.field.isExternalOff")}