mirror of
https://github.com/docmost/docmost.git
synced 2026-08-29 10:05:03 +08:00
fix(base): only re-seed column state when view identity changes
This commit is contained in:
@@ -258,13 +258,21 @@ export function useBaseTable(
|
|||||||
const [columnOrder, setColumnOrder] = useState<ColumnOrderState>(derivedColumnOrder);
|
const [columnOrder, setColumnOrder] = useState<ColumnOrderState>(derivedColumnOrder);
|
||||||
const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(derivedColumnVisibility);
|
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(() => {
|
useEffect(() => {
|
||||||
setColumnOrder(derivedColumnOrder);
|
const currentViewId = activeView?.id;
|
||||||
}, [derivedColumnOrder]);
|
if (currentViewId !== lastSyncedViewIdRef.current) {
|
||||||
|
lastSyncedViewIdRef.current = currentViewId;
|
||||||
useEffect(() => {
|
setColumnOrder(derivedColumnOrder);
|
||||||
setColumnVisibility(derivedColumnVisibility);
|
setColumnVisibility(derivedColumnVisibility);
|
||||||
}, [derivedColumnVisibility]);
|
}
|
||||||
|
}, [activeView?.id, derivedColumnOrder, derivedColumnVisibility]);
|
||||||
|
|
||||||
const columnPinning = useMemo(
|
const columnPinning = useMemo(
|
||||||
() => buildColumnPinning(properties),
|
() => buildColumnPinning(properties),
|
||||||
|
|||||||
Reference in New Issue
Block a user