+ );
+ }
+
// Default input field (text, email, date, time, url, password, number, integer, float, timestamp)
const inputType = attributeTypeToInputType(attr.type);
diff --git a/src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx b/src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx
index 807ad5e..7dbc936 100644
--- a/src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx
+++ b/src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx
@@ -1431,62 +1431,95 @@ export function FormGeneratorTable>({
return isCheckboxType(column.type);
}, []);
- // Handle inline toggle for boolean fields
+ // Always-current snapshot of `data` so a queued toggle reads the freshly
+ // refetched row (server truth from the previous PUT+refetch) instead of the
+ // stale `row` captured by React at render time.
+ const dataRef = useRef(data);
+ useEffect(() => { dataRef.current = data; }, [data]);
+
+ // Per-row update queue: every toggle on the same row awaits the previous
+ // one so PUT + refetch are strictly serialized. Combined with a refetch
+ // after every PUT, this guarantees that the next queued PUT merges its
+ // payload from confirmed server state — never from an unconfirmed UI guess.
+ const inlineUpdateQueueRef = useRef