arengibook 3.1.1-main → 3.1.2-main

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.
Files changed (2) hide show
  1. package/dist/index.js +149 -46
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -50425,6 +50425,13 @@ var Table$1 = function Table(_ref13) {
50425
50425
  _useState40 = _slicedToArray$d(_useState39, 2),
50426
50426
  visibleColumns = _useState40[0],
50427
50427
  setVisibleColumns = _useState40[1];
50428
+ // Colonnes de tête (frozen) rendues AVANT les colonnes de données : sélection,
50429
+ // suppression, actions. PrimeReact applique les largeurs sauvegardées par
50430
+ // nth-child(index) sur l'ensemble des <th> — il faut donc que le tableau de
50431
+ // largeurs inclue ces colonnes, sinon tout est décalé et le tbody s'effondre.
50432
+ var leadingColCount = (rowSelection ? 1 : 0) + (onDeleteRow ? 1 : 0) + (columns.some(function (c) {
50433
+ return c.actionsField;
50434
+ }) ? 1 : 0);
50428
50435
  var _useState41 = useState(''),
50429
50436
  _useState42 = _slicedToArray$d(_useState41, 2),
50430
50437
  globalFilter = _useState42[0],
@@ -50454,6 +50461,9 @@ var Table$1 = function Table(_ref13) {
50454
50461
  var FILTER_KEY = useMemo(function () {
50455
50462
  return tableId ? "Table:filterVisible:".concat(tableId) : 'Table:filterVisible';
50456
50463
  }, [tableId]);
50464
+ var FILTERS_VALUES_KEY = useMemo(function () {
50465
+ return tableId ? "Table:filters:".concat(tableId) : 'Table:filters';
50466
+ }, [tableId]);
50457
50467
  var _useState49 = useState(function () {
50458
50468
  try {
50459
50469
  var _JSON$parse;
@@ -50584,13 +50594,44 @@ var Table$1 = function Table(_ref13) {
50584
50594
  });
50585
50595
  return f;
50586
50596
  }, [columns]);
50587
- var _useState53 = useState(initialFilters),
50597
+
50598
+ // Réinjecte les valeurs de filtres persistées dans la structure courante
50599
+ // (on garde les matchModes de `base`, on ne reprend que les `value` sauvegardées).
50600
+ var hydrateFilters = useCallback(function (base) {
50601
+ try {
50602
+ var saved = JSON.parse(localStorage.getItem(FILTERS_VALUES_KEY) || '{}');
50603
+ var merged = {};
50604
+ Object.keys(base).forEach(function (field) {
50605
+ merged[field] = saved[field] != null && saved[field] !== '' ? _objectSpread2(_objectSpread2({}, base[field]), {}, {
50606
+ value: saved[field]
50607
+ }) : base[field];
50608
+ });
50609
+ return merged;
50610
+ } catch (_unused5) {
50611
+ return base;
50612
+ }
50613
+ }, [FILTERS_VALUES_KEY]);
50614
+ var persistFilters = useCallback(function (f) {
50615
+ try {
50616
+ var values = {};
50617
+ Object.entries(f || {}).forEach(function (_ref14) {
50618
+ var _ref15 = _slicedToArray$d(_ref14, 2),
50619
+ field = _ref15[0],
50620
+ meta = _ref15[1];
50621
+ if (meta && meta.value != null && meta.value !== '') values[field] = meta.value;
50622
+ });
50623
+ if (Object.keys(values).length) localStorage.setItem(FILTERS_VALUES_KEY, JSON.stringify(values));else localStorage.removeItem(FILTERS_VALUES_KEY);
50624
+ } catch (_unused6) {}
50625
+ }, [FILTERS_VALUES_KEY]);
50626
+ var _useState53 = useState(function () {
50627
+ return hydrateFilters(initialFilters);
50628
+ }),
50588
50629
  _useState54 = _slicedToArray$d(_useState53, 2),
50589
50630
  filters = _useState54[0],
50590
50631
  setFilters = _useState54[1];
50591
50632
  useEffect(function () {
50592
- setFilters(initialFilters);
50593
- }, [initialFilters, columnFilter]);
50633
+ setFilters(hydrateFilters(initialFilters));
50634
+ }, [initialFilters, columnFilter, hydrateFilters]);
50594
50635
  var textFilterElement = useCallback(function (options) {
50595
50636
  var _options$value2;
50596
50637
  return /*#__PURE__*/React__default.createElement(InputText, {
@@ -50669,7 +50710,7 @@ var Table$1 = function Table(_ref13) {
50669
50710
 
50670
50711
  var linkTemplate = useCallback(function (col) {
50671
50712
  return function (rowData) {
50672
- var _ref14, _col$href;
50713
+ var _ref16, _col$href;
50673
50714
  var label = rowData[col.field];
50674
50715
  if (col.type === 'titleLink') {
50675
50716
  return /*#__PURE__*/React__default.createElement("div", {
@@ -50683,7 +50724,7 @@ var Table$1 = function Table(_ref13) {
50683
50724
  className: "table-item-title cell-text"
50684
50725
  }, label));
50685
50726
  }
50686
- var href = typeof col.href === 'function' ? col.href(rowData) : (_ref14 = (_col$href = col.href) !== null && _col$href !== void 0 ? _col$href : rowData[col.field + 'Url']) !== null && _ref14 !== void 0 ? _ref14 : '#';
50727
+ var href = typeof col.href === 'function' ? col.href(rowData) : (_ref16 = (_col$href = col.href) !== null && _col$href !== void 0 ? _col$href : rowData[col.field + 'Url']) !== null && _ref16 !== void 0 ? _ref16 : '#';
50687
50728
  return /*#__PURE__*/React__default.createElement("div", {
50688
50729
  className: "arengi-table-grey-title-box",
50689
50730
  style: {
@@ -50755,13 +50796,13 @@ var Table$1 = function Table(_ref13) {
50755
50796
  }, []);
50756
50797
  var lienFormulaireTemplate = useCallback(function (col) {
50757
50798
  return function (rowData) {
50758
- var _col$options5, _ref15, _opt$label, _ref16, _col$href2;
50799
+ var _col$options5, _ref17, _opt$label, _ref18, _col$href2;
50759
50800
  var val = rowData[col.field];
50760
50801
  var opt = (_col$options5 = col.options) === null || _col$options5 === void 0 ? void 0 : _col$options5.find(function (o) {
50761
50802
  return o.value === val;
50762
50803
  });
50763
- var label = (_ref15 = (_opt$label = opt === null || opt === void 0 ? void 0 : opt.label) !== null && _opt$label !== void 0 ? _opt$label : val) !== null && _ref15 !== void 0 ? _ref15 : '';
50764
- var href = typeof col.href === 'function' ? col.href(rowData) : (_ref16 = (_col$href2 = col.href) !== null && _col$href2 !== void 0 ? _col$href2 : opt === null || opt === void 0 ? void 0 : opt.href) !== null && _ref16 !== void 0 ? _ref16 : null;
50804
+ var label = (_ref17 = (_opt$label = opt === null || opt === void 0 ? void 0 : opt.label) !== null && _opt$label !== void 0 ? _opt$label : val) !== null && _ref17 !== void 0 ? _ref17 : '';
50805
+ var href = typeof col.href === 'function' ? col.href(rowData) : (_ref18 = (_col$href2 = col.href) !== null && _col$href2 !== void 0 ? _col$href2 : opt === null || opt === void 0 ? void 0 : opt.href) !== null && _ref18 !== void 0 ? _ref18 : null;
50765
50806
  if (!label) return '';
50766
50807
  return /*#__PURE__*/React__default.createElement("div", {
50767
50808
  style: {
@@ -51311,10 +51352,10 @@ var Table$1 = function Table(_ref13) {
51311
51352
  });
51312
51353
  if (option) {
51313
51354
  var extra = {};
51314
- Object.entries(col.updates).forEach(function (_ref17) {
51315
- var _ref18 = _slicedToArray$d(_ref17, 2),
51316
- targetField = _ref18[0],
51317
- optionProp = _ref18[1];
51355
+ Object.entries(col.updates).forEach(function (_ref19) {
51356
+ var _ref20 = _slicedToArray$d(_ref19, 2),
51357
+ targetField = _ref20[0],
51358
+ optionProp = _ref20[1];
51318
51359
  if (option[optionProp] !== undefined) extra[targetField] = option[optionProp];
51319
51360
  });
51320
51361
  enrichedRow = _objectSpread2(_objectSpread2({}, newRowData), extra);
@@ -51471,10 +51512,10 @@ var Table$1 = function Table(_ref13) {
51471
51512
  return opt.value === v;
51472
51513
  });
51473
51514
  if (option) {
51474
- Object.entries(col.updates).forEach(function (_ref19) {
51475
- var _ref20 = _slicedToArray$d(_ref19, 2),
51476
- tf = _ref20[0],
51477
- op = _ref20[1];
51515
+ Object.entries(col.updates).forEach(function (_ref21) {
51516
+ var _ref22 = _slicedToArray$d(_ref21, 2),
51517
+ tf = _ref22[0],
51518
+ op = _ref22[1];
51478
51519
  if (option[op] !== undefined) enrichedFields[tf] = option[op];
51479
51520
  });
51480
51521
  }
@@ -51521,24 +51562,20 @@ var Table$1 = function Table(_ref13) {
51521
51562
  var getSortField = useCallback(function (col) {
51522
51563
  return col.field;
51523
51564
  }, []);
51524
- useLayoutEffect(function () {
51525
- if (!DT_STATE_KEY || !data.length) return;
51526
- try {
51527
- var state = JSON.parse(localStorage.getItem(DT_STATE_KEY) || '{}');
51528
- if (state.first && state.first >= data.length) {
51529
- state.first = 0;
51530
- localStorage.setItem(DT_STATE_KEY, JSON.stringify(state));
51531
- }
51532
- } catch (_unused5) {}
51533
- // eslint-disable-next-line react-hooks/exhaustive-deps
51534
- }, [DT_STATE_KEY, data.length]);
51565
+
51566
+ // Nombre de largeurs attendu = colonnes de tête (frozen) + colonnes visibles.
51567
+ // Toute valeur sauvegardée à un décompte différent est obsolète (la structure
51568
+ // des colonnes a changé) et doit être régénérée, sinon le mapping nth-child de
51569
+ // PrimeReact décale les largeurs et le tableau s'effondre.
51570
+ var expectedWidthCount = leadingColCount + visibleColumns.length;
51535
51571
  var autoWidthsWritten = useRef(false);
51536
51572
  useLayoutEffect(function () {
51537
51573
  if (autoWidthsWritten.current) return;
51538
51574
  try {
51539
51575
  var state = JSON.parse(localStorage.getItem(DT_STATE_KEY) || '{}');
51540
- if (state.columnWidths) return; // user already has saved widths
51541
- } catch (_unused6) {
51576
+ // Largeurs déjà présentes ET cohérentes en nombre → on les garde.
51577
+ if (state.columnWidths && state.columnWidths.split(',').length === expectedWidthCount) return;
51578
+ } catch (_unused7) {
51542
51579
  return;
51543
51580
  }
51544
51581
  if (!tableWrapperRef.current) return;
@@ -51548,25 +51585,29 @@ var Table$1 = function Table(_ref13) {
51548
51585
  var span = document.createElement('span');
51549
51586
  span.style.cssText = "position:absolute;visibility:hidden;white-space:nowrap;font-size:".concat(cs.fontSize, ";font-family:").concat(cs.fontFamily, ";font-weight:").concat(cs.fontWeight, ";letter-spacing:").concat(cs.letterSpacing);
51550
51587
  document.body.appendChild(span);
51551
- var widths = visibleColumns.map(function (col) {
51588
+ // Colonnes de tête frozen : largeur fixe 42px (cf. Column headerStyle).
51589
+ var leadingWidths = Array(leadingColCount).fill(42);
51590
+ var dataWidths = visibleColumns.map(function (col) {
51552
51591
  var _col$header2;
51553
51592
  span.textContent = (_col$header2 = col.header) !== null && _col$header2 !== void 0 ? _col$header2 : '';
51554
51593
  return col.type === 'index' ? 60 : span.offsetWidth + 72;
51555
51594
  });
51556
51595
  document.body.removeChild(span);
51596
+ var widths = [].concat(_toConsumableArray$a(leadingWidths), _toConsumableArray$a(dataWidths));
51557
51597
  try {
51558
51598
  var _state = JSON.parse(localStorage.getItem(DT_STATE_KEY) || '{}');
51559
51599
  _state.columnWidths = widths.join(',');
51560
- _state.first = 0;
51600
+ // tableWidth stale (ancien décompte) casserait le layout scrollable expand.
51601
+ delete _state.tableWidth;
51561
51602
  localStorage.setItem(DT_STATE_KEY, JSON.stringify(_state));
51562
- } catch (_unused7) {
51603
+ } catch (_unused8) {
51563
51604
  return;
51564
51605
  }
51565
51606
  autoWidthsWritten.current = true;
51566
51607
  setTableKey(function (k) {
51567
51608
  return k + 1;
51568
51609
  });
51569
- }, [DT_STATE_KEY, visibleColumns]);
51610
+ }, [DT_STATE_KEY, visibleColumns, leadingColCount, expectedWidthCount]);
51570
51611
  var header = /*#__PURE__*/React__default.createElement("div", {
51571
51612
  style: {
51572
51613
  display: 'flex',
@@ -51705,14 +51746,14 @@ var Table$1 = function Table(_ref13) {
51705
51746
  try {
51706
51747
  localStorage.removeItem(ROW_HEIGHTS_KEY);
51707
51748
  localStorage.removeItem(ROW_PRESET_KEY);
51708
- } catch (_unused8) {}
51749
+ } catch (_unused9) {}
51709
51750
  setRowPreset(null);
51710
51751
  setSettingsOpen(false);
51711
51752
  }
51712
- }].map(function (_ref21) {
51713
- var icon = _ref21.icon,
51714
- label = _ref21.label,
51715
- action = _ref21.action;
51753
+ }].map(function (_ref23) {
51754
+ var icon = _ref23.icon,
51755
+ label = _ref23.label,
51756
+ action = _ref23.action;
51716
51757
  return /*#__PURE__*/React__default.createElement("button", {
51717
51758
  key: label,
51718
51759
  type: "button",
@@ -51770,9 +51811,9 @@ var Table$1 = function Table(_ref13) {
51770
51811
  }, {
51771
51812
  key: 'large',
51772
51813
  label: 'Grande'
51773
- }].map(function (_ref22) {
51774
- var key = _ref22.key,
51775
- label = _ref22.label;
51814
+ }].map(function (_ref24) {
51815
+ var key = _ref24.key,
51816
+ label = _ref24.label;
51776
51817
  return /*#__PURE__*/React__default.createElement("button", {
51777
51818
  key: key,
51778
51819
  type: "button",
@@ -51781,7 +51822,7 @@ var Table$1 = function Table(_ref13) {
51781
51822
  try {
51782
51823
  localStorage.removeItem(ROW_HEIGHTS_KEY);
51783
51824
  localStorage.setItem(ROW_PRESET_KEY, key);
51784
- } catch (_unused9) {}
51825
+ } catch (_unused0) {}
51785
51826
  setRowPreset(key);
51786
51827
  setSettingsOpen(false);
51787
51828
  },
@@ -51910,7 +51951,8 @@ var Table$1 = function Table(_ref13) {
51910
51951
  filters: filterVisible ? filters : undefined,
51911
51952
  filterDisplay: filterVisible ? 'row' : undefined,
51912
51953
  onFilter: filterVisible ? function (e) {
51913
- return setFilters(e.filters);
51954
+ setFilters(e.filters);
51955
+ persistFilters(e.filters);
51914
51956
  } : undefined,
51915
51957
  editMode: (lockable && locked ? false : effectiveEditable || rowEdit || columns.some(function (c) {
51916
51958
  return c.editable === true;
@@ -51925,7 +51967,65 @@ var Table$1 = function Table(_ref13) {
51925
51967
  removableSort: true,
51926
51968
  reorderableColumns: true,
51927
51969
  stateKey: DT_STATE_KEY,
51928
- stateStorage: "local",
51970
+ stateStorage: "custom",
51971
+ customSaveState: function customSaveState(state) {
51972
+ if (!DT_STATE_KEY) return;
51973
+ try {
51974
+ var saved = {};
51975
+ // Pagination, tri, filtres, ordre des colonnes : persistés tels quels.
51976
+ if (typeof state.first === 'number') saved.first = state.first;
51977
+ if (typeof state.rows === 'number') saved.rows = state.rows;
51978
+ if (state.sortField) {
51979
+ saved.sortField = state.sortField;
51980
+ saved.sortOrder = state.sortOrder;
51981
+ }
51982
+ if (state.multiSortMeta) saved.multiSortMeta = state.multiSortMeta;
51983
+ // filtres gérés séparément (state contrôlé + clé Table:filters) pour
51984
+ // éviter un filtrage invisible quand la barre de filtre est masquée.
51985
+ // columnOrder NON persisté : les colonnes frozen (select/delete/actions)
51986
+ // corrompaient l'ordre au tri/remontage (cf. findColumnByKey sur clé nulle).
51987
+ // Largeurs (+ tableWidth) uniquement si le décompte correspond aux
51988
+ // colonnes réellement rendues (tête frozen + visibles), sinon le
51989
+ // mapping nth-child de PrimeReact décale tout et casse le layout.
51990
+ if (typeof state.columnWidths === 'string' && state.columnWidths.split(',').length === expectedWidthCount) {
51991
+ saved.columnWidths = state.columnWidths;
51992
+ if (state.tableWidth !== undefined) saved.tableWidth = state.tableWidth;
51993
+ }
51994
+ localStorage.setItem(DT_STATE_KEY, JSON.stringify(saved));
51995
+ } catch (_unused1) {}
51996
+ },
51997
+ customRestoreState: function customRestoreState() {
51998
+ // CRUCIAL : dès que l'objet restauré est non vide, PrimeReact
51999
+ // (_restoreState) applique setFirstState(state.first)/setRowsState(state.rows).
52000
+ // Sans first/rows valides → undefined → dataToRender fait data.slice(0, NaN)
52001
+ // = [] → tbody vide alors que la data est pleine. On garantit donc toujours
52002
+ // une pagination valide (page 1 par défaut, rows par défaut).
52003
+ var restored = {
52004
+ first: 0,
52005
+ rows: rows
52006
+ };
52007
+ if (!DT_STATE_KEY) return restored;
52008
+ try {
52009
+ var s = JSON.parse(localStorage.getItem(DT_STATE_KEY) || '{}');
52010
+ if (typeof s.rows === 'number' && s.rows > 0) restored.rows = s.rows;
52011
+ // Page courante restaurée seulement si elle reste dans la plage de
52012
+ // données — sinon la tranche serait vide (cf. bug d'origine).
52013
+ var len = Array.isArray(data) ? data.length : 0;
52014
+ if (typeof s.first === 'number' && s.first > 0 && s.first < len) restored.first = s.first;
52015
+ if (s.sortField) {
52016
+ restored.sortField = s.sortField;
52017
+ restored.sortOrder = s.sortOrder;
52018
+ }
52019
+ if (s.multiSortMeta) restored.multiSortMeta = s.multiSortMeta;
52020
+ // filtres : non restaurés ici (gérés via le state contrôlé + Table:filters).
52021
+ // columnOrder : non restauré (corrompait les colonnes frozen au tri).
52022
+ if (typeof s.columnWidths === 'string' && s.columnWidths.split(',').length === expectedWidthCount) {
52023
+ restored.columnWidths = s.columnWidths;
52024
+ if (s.tableWidth !== undefined) restored.tableWidth = s.tableWidth;
52025
+ }
52026
+ } catch (_unused10) {/* noop */}
52027
+ return restored;
52028
+ },
51929
52029
  scrollable: true,
51930
52030
  scrollHeight: fullscreen ? 'flex' : '70vh',
51931
52031
  pt: {
@@ -51957,6 +52057,7 @@ var Table$1 = function Table(_ref13) {
51957
52057
  }
51958
52058
  }, rowSelection && /*#__PURE__*/React__default.createElement(Column, {
51959
52059
  key: "__select__",
52060
+ columnKey: "__select__",
51960
52061
  header: /*#__PURE__*/React__default.createElement("span", {
51961
52062
  className: "material-icons",
51962
52063
  style: {
@@ -52020,6 +52121,7 @@ var Table$1 = function Table(_ref13) {
52020
52121
  }
52021
52122
  }), onDeleteRow && /*#__PURE__*/React__default.createElement(Column, {
52022
52123
  key: "__delete__",
52124
+ columnKey: "__delete__",
52023
52125
  header: "",
52024
52126
  body: function body(rowData) {
52025
52127
  return /*#__PURE__*/React__default.createElement("div", {
@@ -52084,13 +52186,14 @@ var Table$1 = function Table(_ref13) {
52084
52186
  if (!actionsCol) return null;
52085
52187
  return /*#__PURE__*/React__default.createElement(Column, {
52086
52188
  key: "__row_actions__",
52189
+ columnKey: "__row_actions__",
52087
52190
  header: "",
52088
52191
  body: function body(rowData) {
52089
- var _ref23, _linkCol$href;
52192
+ var _ref25, _linkCol$href;
52090
52193
  var linkCol = columns.find(function (c) {
52091
52194
  return c.type === 'titleLink' || c.type === 'link';
52092
52195
  });
52093
- var linkHref = linkCol ? typeof linkCol.href === 'function' ? linkCol.href(rowData) : (_ref23 = (_linkCol$href = linkCol.href) !== null && _linkCol$href !== void 0 ? _linkCol$href : rowData[linkCol.field + 'Url']) !== null && _ref23 !== void 0 ? _ref23 : null : null;
52196
+ var linkHref = linkCol ? typeof linkCol.href === 'function' ? linkCol.href(rowData) : (_ref25 = (_linkCol$href = linkCol.href) !== null && _linkCol$href !== void 0 ? _linkCol$href : rowData[linkCol.field + 'Url']) !== null && _ref25 !== void 0 ? _ref25 : null : null;
52094
52197
  return /*#__PURE__*/React__default.createElement(RowActionsCell, {
52095
52198
  actions: rowData[actionsCol.actionsField] || [],
52096
52199
  rowData: rowData,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "arengibook",
3
3
  "private": false,
4
- "version": "3.1.1-main",
4
+ "version": "3.1.2-main",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
7
7
  "exports": {