fix(base): only re-seed column state when view identity changes

This commit is contained in:
Philipinho
2026-04-18 19:23:56 +01:00
parent c331e0ffd3
commit c6f993b610
@@ -258,13 +258,21 @@ export function useBaseTable(
const [columnOrder, setColumnOrder] = useState<ColumnOrderState>(derivedColumnOrder);
const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(derivedColumnVisibility);
// Re-seed from server only when the user switches views. Within the same
// view, local state is the source of truth — the debounced persist flushes
// it. Without this guard, any ws-driven `invalidateQueries(["bases", baseId])`
// or concurrent view mutation lands a new `derivedColumnVisibility`
// reference and the effect would overwrite a pending hide/reorder toggle
// before `persistViewConfig` has a chance to flush it.
const lastSyncedViewIdRef = useRef<string | undefined>(activeView?.id);
useEffect(() => {
setColumnOrder(derivedColumnOrder);
}, [derivedColumnOrder]);
useEffect(() => {
setColumnVisibility(derivedColumnVisibility);
}, [derivedColumnVisibility]);
const currentViewId = activeView?.id;
if (currentViewId !== lastSyncedViewIdRef.current) {
lastSyncedViewIdRef.current = currentViewId;
setColumnOrder(derivedColumnOrder);
setColumnVisibility(derivedColumnVisibility);
}
}, [activeView?.id, derivedColumnOrder, derivedColumnVisibility]);
const columnPinning = useMemo(
() => buildColumnPinning(properties),