@open-mercato/ui 0.8.1-develop.7274.1.21a0083828 → 0.8.1-develop.7294.1.0ef99fc518

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -867,10 +867,22 @@ function DataTable({
867
867
  const [perspectiveApiMissing, setPerspectiveApiMissing] = React.useState(false);
868
868
  const [viewBaseline, setViewBaselineState] = React.useState(() => mergedInitialSettings ?? {});
869
869
  const viewBaselineInitializedRef = React.useRef(Boolean(mergedInitialSettings));
870
+ const autoHiddenVisibilityRef = React.useRef({});
870
871
  const setViewBaseline = React.useCallback((settings) => {
871
872
  const initialized = viewBaselineInitializedRef.current;
872
873
  viewBaselineInitializedRef.current = true;
873
- setViewBaselineState((previous) => initialized && diffPerspectiveSettings(previous, settings).length === 0 ? previous : settings);
874
+ const autoHidden = autoHiddenVisibilityRef.current;
875
+ const next = Object.keys(autoHidden).length ? { ...settings, columnVisibility: { ...settings.columnVisibility ?? {}, ...autoHidden } } : settings;
876
+ setViewBaselineState((previous) => initialized && diffPerspectiveSettings(previous, next).length === 0 ? previous : next);
877
+ }, []);
878
+ const foldAutoHiddenIntoBaseline = React.useCallback((entries) => {
879
+ autoHiddenVisibilityRef.current = { ...autoHiddenVisibilityRef.current, ...entries };
880
+ if (!viewBaselineInitializedRef.current) return;
881
+ setViewBaselineState((previous) => {
882
+ const current = previous.columnVisibility ?? {};
883
+ if (Object.keys(entries).every((key) => key in current)) return previous;
884
+ return { ...previous, columnVisibility: { ...entries, ...current } };
885
+ });
874
886
  }, []);
875
887
  const perspectiveFeatureQuery = useQuery({
876
888
  queryKey: ["feature-check", "perspectives"],
@@ -1290,26 +1302,30 @@ function DataTable({
1290
1302
  return changed ? filtered : prev;
1291
1303
  });
1292
1304
  }, [table, mergedColumns]);
1293
- const visibilitySeededByStoredSettings = React.useRef(Boolean(mergedInitialSettings?.columnVisibility));
1294
- const autoHiddenColumnIds = React.useRef(/* @__PURE__ */ new Set());
1305
+ const visibilityDecidedColumnIds = React.useRef(
1306
+ new Set(Object.keys(mergedInitialSettings?.columnVisibility ?? {}))
1307
+ );
1308
+ const [visibilityDefaultsPass, setVisibilityDefaultsPass] = React.useState(0);
1295
1309
  React.useEffect(() => {
1296
- if (visibilitySeededByStoredSettings.current) return;
1297
1310
  const hidden = {};
1298
1311
  table.getAllLeafColumns().forEach((column) => {
1312
+ if (visibilityDecidedColumnIds.current.has(column.id)) return;
1299
1313
  const hiddenMeta = column.columnDef?.meta?.hidden;
1300
- if (!hiddenMeta || autoHiddenColumnIds.current.has(column.id)) return;
1314
+ if (!hiddenMeta) return;
1315
+ visibilityDecidedColumnIds.current.add(column.id);
1301
1316
  hidden[column.id] = false;
1302
- autoHiddenColumnIds.current.add(column.id);
1303
1317
  });
1304
1318
  if (!Object.keys(hidden).length) return;
1305
1319
  setColumnVisibility((prev) => ({ ...hidden, ...prev }));
1306
- }, [table, mergedColumns]);
1320
+ foldAutoHiddenIntoBaseline(hidden);
1321
+ }, [table, mergedColumns, visibilityDefaultsPass, foldAutoHiddenIntoBaseline]);
1307
1322
  const getCurrentSettings = React.useCallback(() => {
1308
1323
  const visibility = {};
1309
1324
  for (const [key, value] of Object.entries(columnVisibility)) {
1310
- if (typeof key === "string" && typeof value === "boolean") {
1311
- visibility[key] = value;
1312
- }
1325
+ if (typeof value === "boolean") visibility[key] = value;
1326
+ }
1327
+ for (const column of table.getAllLeafColumns()) {
1328
+ visibility[column.id] = column.getIsVisible();
1313
1329
  }
1314
1330
  let filtersPayload;
1315
1331
  if (advancedFilter) {
@@ -1331,9 +1347,10 @@ function DataTable({
1331
1347
  searchValue
1332
1348
  };
1333
1349
  return sanitizePerspectiveSettings(candidate) ?? {};
1334
- }, [columnOrder, columnVisibility, columnSizing, sorting, filterValues, searchValue, advancedFilter]);
1350
+ }, [table, columnOrder, columnVisibility, columnSizing, sorting, filterValues, searchValue, advancedFilter]);
1335
1351
  const applyPerspectiveSettings = React.useCallback((settings, nextId, options) => {
1336
1352
  const normalized = sanitizePerspectiveSettings(settings) ?? {};
1353
+ autoHiddenVisibilityRef.current = {};
1337
1354
  setViewBaseline(
1338
1355
  options?.preserveAdvancedFilter ? { ...normalized, filters: getCurrentSettings().filters } : normalized
1339
1356
  );
@@ -1343,6 +1360,8 @@ function DataTable({
1343
1360
  const ids = table.getAllLeafColumns().map((column) => column.id);
1344
1361
  if (ids.length) setColumnOrder(ids);
1345
1362
  }
1363
+ visibilityDecidedColumnIds.current = new Set(Object.keys(normalized.columnVisibility ?? {}));
1364
+ setVisibilityDefaultsPass((pass) => pass + 1);
1346
1365
  if (normalized.columnVisibility) setColumnVisibility(normalized.columnVisibility);
1347
1366
  else setColumnVisibility({});
1348
1367
  if (normalized.sorting) {