From fad2b7d6618452012f718fdd62f93e6d372c146e Mon Sep 17 00:00:00 2001 From: Adam Moussa <166072409+amoussa1229@users.noreply.github.com> Date: Thu, 16 Apr 2026 17:34:53 -0400 Subject: [PATCH] Fix controlled input warning on all form pages - Merge API response into form state instead of replacing it - Null values from the API now fall back to the form's default values - Prevents React controlled-to-uncontrolled input warning --- src/pages/PmSchedule/form/PmScheduleFormPage.js | 8 +++++++- src/pages/calendar/form/EventFormPage.js | 8 +++++++- src/pages/employees/form/EmployeeFormPage.js | 8 +++++++- src/pages/followup/form/FollowUpFormPage.js | 8 +++++++- src/pages/locations/form/LocationFormPage.js | 8 +++++++- src/pages/workorders/form/WorkOrderFormPage.js | 8 +++++++- 6 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/pages/PmSchedule/form/PmScheduleFormPage.js b/src/pages/PmSchedule/form/PmScheduleFormPage.js index 5f5b06ff..d3be7e51 100644 --- a/src/pages/PmSchedule/form/PmScheduleFormPage.js +++ b/src/pages/PmSchedule/form/PmScheduleFormPage.js @@ -28,7 +28,13 @@ export default function PmScheduleFormPage() { try { const pm = await getPMScheduleById(id); if (pm) { - setFormData(pm); + setFormData(prev => { + const merged = { ...prev }; + for (const key of Object.keys(merged)) { + if (pm[key] != null) merged[key] = pm[key]; + } + return merged; + }); } } catch (err) { console.error("Failed to load PM schedule", err); diff --git a/src/pages/calendar/form/EventFormPage.js b/src/pages/calendar/form/EventFormPage.js index 894d6e92..a7aa5341 100644 --- a/src/pages/calendar/form/EventFormPage.js +++ b/src/pages/calendar/form/EventFormPage.js @@ -63,7 +63,13 @@ export default function EventFormPage() { try { const event = await getEventById(id); if (event) { - setFormData(event); + setFormData(prev => { + const merged = { ...prev }; + for (const key of Object.keys(merged)) { + if (event[key] != null) merged[key] = event[key]; + } + return merged; + }); setTitleCounter(100 - (event.title?.length || 0)); setLocationCounter(150 - (event.location?.length || 0)); } diff --git a/src/pages/employees/form/EmployeeFormPage.js b/src/pages/employees/form/EmployeeFormPage.js index 2fd7d26f..a4fdb6f0 100644 --- a/src/pages/employees/form/EmployeeFormPage.js +++ b/src/pages/employees/form/EmployeeFormPage.js @@ -50,7 +50,13 @@ export default function EmployeeFormPage() { try { const employee = await getEmployeeById(id); if (employee) { - setFormData(employee); + setFormData(prev => { + const merged = { ...prev }; + for (const key of Object.keys(merged)) { + if (employee[key] != null) merged[key] = employee[key]; + } + return merged; + }); } } catch (err) { console.error("Failed to load employee", err); diff --git a/src/pages/followup/form/FollowUpFormPage.js b/src/pages/followup/form/FollowUpFormPage.js index 31ed1a11..c4c0891f 100644 --- a/src/pages/followup/form/FollowUpFormPage.js +++ b/src/pages/followup/form/FollowUpFormPage.js @@ -27,7 +27,13 @@ export default function FollowUpFormPage() { try { const followUp = await getFollowUpById(id); if (followUp) { - setFormData(followUp); + setFormData(prev => { + const merged = { ...prev }; + for (const key of Object.keys(merged)) { + if (followUp[key] != null) merged[key] = followUp[key]; + } + return merged; + }); } } catch (err) { console.error("Failed to load follow up", err); diff --git a/src/pages/locations/form/LocationFormPage.js b/src/pages/locations/form/LocationFormPage.js index f151fea4..d3ba3b1a 100644 --- a/src/pages/locations/form/LocationFormPage.js +++ b/src/pages/locations/form/LocationFormPage.js @@ -30,7 +30,13 @@ export default function LocationFormPage() { try { const location = await getLocationById(id); if (location) { - setFormData(location); + setFormData(prev => { + const merged = { ...prev }; + for (const key of Object.keys(merged)) { + if (location[key] != null) merged[key] = location[key]; + } + return merged; + }); } } catch (err) { console.error("Failed to load location", err); diff --git a/src/pages/workorders/form/WorkOrderFormPage.js b/src/pages/workorders/form/WorkOrderFormPage.js index b0dbcc0a..88c6ff33 100644 --- a/src/pages/workorders/form/WorkOrderFormPage.js +++ b/src/pages/workorders/form/WorkOrderFormPage.js @@ -30,7 +30,13 @@ export default function WorkOrderFormPage() { try { const wo = await getWorkOrderById(id); if (wo) { - setFormData(wo); + setFormData(prev => { + const merged = { ...prev }; + for (const key of Object.keys(merged)) { + if (wo[key] != null) merged[key] = wo[key]; + } + return merged; + }); } } catch (err) { console.error("Failed to load work order", err);