arengibook 2.0.14-table → 2.0.15-table

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 +431 -103
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -47558,7 +47558,7 @@ var DocumentEditorCell = function DocumentEditorCell(_ref7) {
47558
47558
  var docs = (_options$value = options.value) !== null && _options$value !== void 0 ? _options$value : [];
47559
47559
  var handleFileChange = /*#__PURE__*/function () {
47560
47560
  var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(e) {
47561
- var file, formData, res, data;
47561
+ var file, formData, res, data, _t, _t2;
47562
47562
  return _regenerator().w(function (_context) {
47563
47563
  while (1) switch (_context.n) {
47564
47564
  case 0:
@@ -47572,7 +47572,8 @@ var DocumentEditorCell = function DocumentEditorCell(_ref7) {
47572
47572
  setUploading(true);
47573
47573
  _context.p = 2;
47574
47574
  formData = new FormData();
47575
- formData.append('file', file);
47575
+ formData.append('Filedata', file);
47576
+ if (col.csrfToken) formData.append('token', col.csrfToken);
47576
47577
  _context.n = 3;
47577
47578
  return fetch(col.uploadUrl, {
47578
47579
  method: 'POST',
@@ -47580,20 +47581,35 @@ var DocumentEditorCell = function DocumentEditorCell(_ref7) {
47580
47581
  });
47581
47582
  case 3:
47582
47583
  res = _context.v;
47584
+ if (res.ok) {
47585
+ _context.n = 5;
47586
+ break;
47587
+ }
47588
+ _t = Error;
47583
47589
  _context.n = 4;
47584
- return res.json();
47590
+ return res.text();
47585
47591
  case 4:
47586
- data = _context.v;
47587
- options.editorCallback([].concat(_toConsumableArray$a(docs), [data]));
47592
+ _t2 = _context.v;
47593
+ throw new _t(_t2);
47588
47594
  case 5:
47589
- _context.p = 5;
47595
+ _context.n = 6;
47596
+ return res.json();
47597
+ case 6:
47598
+ data = _context.v;
47599
+ options.editorCallback([].concat(_toConsumableArray$a(docs), [{
47600
+ id: data.id,
47601
+ name: data.name,
47602
+ url: data.path
47603
+ }]));
47604
+ case 7:
47605
+ _context.p = 7;
47590
47606
  setUploading(false);
47591
47607
  e.target.value = '';
47592
- return _context.f(5);
47593
- case 6:
47608
+ return _context.f(7);
47609
+ case 8:
47594
47610
  return _context.a(2);
47595
47611
  }
47596
- }, _callee, null, [[2,, 5, 6]]);
47612
+ }, _callee, null, [[2,, 7, 8]]);
47597
47613
  }));
47598
47614
  return function handleFileChange(_x) {
47599
47615
  return _ref8.apply(this, arguments);
@@ -47645,34 +47661,278 @@ var DocumentEditorCell = function DocumentEditorCell(_ref7) {
47645
47661
  onChange: handleFileChange
47646
47662
  }));
47647
47663
  };
47648
- var Table = function Table(_ref9) {
47649
- var _ref9$value = _ref9.value,
47650
- value = _ref9$value === void 0 ? [] : _ref9$value,
47651
- _ref9$columns = _ref9.columns,
47652
- columns = _ref9$columns === void 0 ? [] : _ref9$columns,
47653
- _ref9$paginator = _ref9.paginator,
47654
- paginator = _ref9$paginator === void 0 ? true : _ref9$paginator,
47655
- _ref9$rows = _ref9.rows,
47656
- rows = _ref9$rows === void 0 ? 25 : _ref9$rows,
47657
- _ref9$loading = _ref9.loading,
47658
- loading = _ref9$loading === void 0 ? false : _ref9$loading,
47659
- _ref9$stripedRows = _ref9.stripedRows,
47660
- stripedRows = _ref9$stripedRows === void 0 ? false : _ref9$stripedRows,
47661
- _ref9$selectionMode = _ref9.selectionMode,
47662
- selectionMode = _ref9$selectionMode === void 0 ? null : _ref9$selectionMode,
47663
- selection = _ref9.selection,
47664
- onSelectionChange = _ref9.onSelectionChange,
47665
- _ref9$editable = _ref9.editable,
47666
- editable = _ref9$editable === void 0 ? false : _ref9$editable,
47667
- _ref9$rowEdit = _ref9.rowEdit,
47668
- rowEdit = _ref9$rowEdit === void 0 ? true : _ref9$rowEdit,
47669
- onChange = _ref9.onChange,
47670
- onCellChange = _ref9.onCellChange,
47671
- carto = _ref9.carto;
47672
- var _useState15 = useState(value),
47664
+ var SelfEditableCell = function SelfEditableCell(_ref9) {
47665
+ var rowData = _ref9.rowData,
47666
+ col = _ref9.col,
47667
+ editable = _ref9.editable,
47668
+ isRowEditing = _ref9.isRowEditing,
47669
+ onSave = _ref9.onSave,
47670
+ renderDisplay = _ref9.renderDisplay;
47671
+ var _useState15 = useState(false),
47673
47672
  _useState16 = _slicedToArray$c(_useState15, 2),
47674
- data = _useState16[0],
47675
- setData = _useState16[1];
47673
+ editing = _useState16[0],
47674
+ setEditing = _useState16[1];
47675
+ var _useState17 = useState(rowData[col.field]),
47676
+ _useState18 = _slicedToArray$c(_useState17, 2),
47677
+ localValue = _useState18[0],
47678
+ setLocalValue = _useState18[1];
47679
+ var containerRef = useRef(null);
47680
+ var localValueRef = useRef(localValue);
47681
+ useEffect(function () {
47682
+ localValueRef.current = localValue;
47683
+ }, [localValue]);
47684
+ useEffect(function () {
47685
+ if (isRowEditing && !editing) {
47686
+ setLocalValue(rowData[col.field]);
47687
+ setEditing(true);
47688
+ } else if (!isRowEditing && editing) {
47689
+ setEditing(false);
47690
+ }
47691
+ // eslint-disable-next-line react-hooks/exhaustive-deps
47692
+ }, [isRowEditing]);
47693
+ var commit = useCallback(function (val) {
47694
+ onSave(val);
47695
+ setLocalValue(val);
47696
+ if (!isRowEditing) setEditing(false);
47697
+ }, [isRowEditing, onSave]);
47698
+ useEffect(function () {
47699
+ if (!editing || isRowEditing) return;
47700
+ var handler = function handler(e) {
47701
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
47702
+ if (e.target.closest('.p-dropdown-panel, .p-datepicker, .p-multiselect-panel')) return;
47703
+ commit(localValueRef.current);
47704
+ }
47705
+ };
47706
+ document.addEventListener('mousedown', handler);
47707
+ return function () {
47708
+ return document.removeEventListener('mousedown', handler);
47709
+ };
47710
+ }, [editing, isRowEditing, commit]);
47711
+ if (!editing) {
47712
+ var _rowData$col$field;
47713
+ return /*#__PURE__*/React__default.createElement("div", {
47714
+ onClick: function onClick() {
47715
+ return editable && setEditing(true);
47716
+ },
47717
+ style: {
47718
+ cursor: editable ? 'pointer' : 'default',
47719
+ minHeight: '1.5rem'
47720
+ }
47721
+ }, renderDisplay ? renderDisplay(rowData) : (_rowData$col$field = rowData[col.field]) !== null && _rowData$col$field !== void 0 ? _rowData$col$field : '');
47722
+ }
47723
+ switch (col.type) {
47724
+ case 'select':
47725
+ return /*#__PURE__*/React__default.createElement("div", {
47726
+ ref: containerRef
47727
+ }, /*#__PURE__*/React__default.createElement(Dropdown, _extends$I({}, DropdownPresets.Base, {
47728
+ value: localValue,
47729
+ options: col.options,
47730
+ onChange: function onChange(e) {
47731
+ return commit(e.value);
47732
+ },
47733
+ autoFocus: true
47734
+ })));
47735
+ case 'selectMultiple':
47736
+ return /*#__PURE__*/React__default.createElement("div", {
47737
+ ref: containerRef
47738
+ }, /*#__PURE__*/React__default.createElement(MultiSelect, _extends$I({}, MultiSelectPresets.Base, {
47739
+ value: localValue !== null && localValue !== void 0 ? localValue : [],
47740
+ options: col.options,
47741
+ onChange: function onChange(ids) {
47742
+ return commit(ids);
47743
+ }
47744
+ })));
47745
+ case 'date':
47746
+ {
47747
+ var dateObj = null;
47748
+ var str = localValue ? String(localValue) : null;
47749
+ if (str && str !== 'N/A') {
47750
+ if (str.includes('/')) {
47751
+ var _str$split = str.split('/'),
47752
+ _str$split2 = _slicedToArray$c(_str$split, 3),
47753
+ d = _str$split2[0],
47754
+ m = _str$split2[1],
47755
+ y = _str$split2[2];
47756
+ dateObj = new Date(y, m - 1, d);
47757
+ } else if (str.includes('-')) {
47758
+ var _str$split3 = str.split('-'),
47759
+ _str$split4 = _slicedToArray$c(_str$split3, 3),
47760
+ _y = _str$split4[0],
47761
+ _m = _str$split4[1],
47762
+ _d = _str$split4[2];
47763
+ dateObj = new Date(_y, _m - 1, _d);
47764
+ }
47765
+ }
47766
+ if (!dateObj || isNaN(dateObj.getTime())) dateObj = new Date();
47767
+ return /*#__PURE__*/React__default.createElement("div", {
47768
+ ref: containerRef
47769
+ }, /*#__PURE__*/React__default.createElement(DatePicker, {
47770
+ value: dateObj,
47771
+ onChange: function onChange(e) {
47772
+ return commit(e.value ? [e.value.getFullYear(), String(e.value.getMonth() + 1).padStart(2, '0'), String(e.value.getDate()).padStart(2, '0')].join('-') : null);
47773
+ }
47774
+ }));
47775
+ }
47776
+ case 'numeric':
47777
+ return /*#__PURE__*/React__default.createElement("div", {
47778
+ ref: containerRef
47779
+ }, /*#__PURE__*/React__default.createElement(InputText, {
47780
+ type: "number",
47781
+ value: localValue !== null && localValue !== void 0 ? localValue : '',
47782
+ min: col.min,
47783
+ max: col.max,
47784
+ step: col.step,
47785
+ onChange: function onChange(e) {
47786
+ var v = e.target.value === '' ? '' : parseFloat(e.target.value);
47787
+ if (col.min != null && v !== '' && v < col.min) v = col.min;
47788
+ if (col.max != null && v !== '' && v > col.max) v = col.max;
47789
+ setLocalValue(v);
47790
+ },
47791
+ onKeyDown: function onKeyDown(e) {
47792
+ if (e.key === 'Enter') {
47793
+ e.stopPropagation();
47794
+ commit(localValueRef.current);
47795
+ }
47796
+ },
47797
+ autoFocus: true
47798
+ }));
47799
+ default:
47800
+ return /*#__PURE__*/React__default.createElement("div", {
47801
+ ref: containerRef
47802
+ }, /*#__PURE__*/React__default.createElement(InputText, {
47803
+ value: localValue !== null && localValue !== void 0 ? localValue : '',
47804
+ onChange: function onChange(e) {
47805
+ return setLocalValue(e.target.value);
47806
+ },
47807
+ onKeyDown: function onKeyDown(e) {
47808
+ if (e.key === 'Enter') {
47809
+ e.stopPropagation();
47810
+ commit(localValueRef.current);
47811
+ }
47812
+ },
47813
+ autoFocus: true
47814
+ }));
47815
+ }
47816
+ };
47817
+ var DocumentBodyCell = function DocumentBodyCell(_ref0) {
47818
+ var _rowData$col$field2;
47819
+ var rowData = _ref0.rowData,
47820
+ col = _ref0.col,
47821
+ editable = _ref0.editable,
47822
+ isRowEditing = _ref0.isRowEditing,
47823
+ onSave = _ref0.onSave;
47824
+ var _useState19 = useState(false),
47825
+ _useState20 = _slicedToArray$c(_useState19, 2),
47826
+ editing = _useState20[0],
47827
+ setEditing = _useState20[1];
47828
+ var _useState21 = useState((_rowData$col$field2 = rowData[col.field]) !== null && _rowData$col$field2 !== void 0 ? _rowData$col$field2 : []),
47829
+ _useState22 = _slicedToArray$c(_useState21, 2),
47830
+ docs = _useState22[0],
47831
+ setDocs = _useState22[1];
47832
+ var containerRef = useRef(null);
47833
+ useEffect(function () {
47834
+ if (isRowEditing && !editing) {
47835
+ var _rowData$col$field3;
47836
+ setDocs((_rowData$col$field3 = rowData[col.field]) !== null && _rowData$col$field3 !== void 0 ? _rowData$col$field3 : []);
47837
+ setEditing(true);
47838
+ } else if (!isRowEditing && editing) {
47839
+ setEditing(false);
47840
+ }
47841
+ // eslint-disable-next-line react-hooks/exhaustive-deps
47842
+ }, [isRowEditing]);
47843
+ useEffect(function () {
47844
+ if (!editing || isRowEditing) return;
47845
+ var handler = function handler(e) {
47846
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
47847
+ setEditing(false);
47848
+ }
47849
+ };
47850
+ document.addEventListener('mousedown', handler);
47851
+ return function () {
47852
+ return document.removeEventListener('mousedown', handler);
47853
+ };
47854
+ }, [editing, isRowEditing]);
47855
+ var handleCallback = useCallback(function (newDocs) {
47856
+ setDocs(newDocs);
47857
+ onSave(newDocs);
47858
+ }, [onSave]);
47859
+ if (editing) {
47860
+ return /*#__PURE__*/React__default.createElement("div", {
47861
+ ref: containerRef
47862
+ }, /*#__PURE__*/React__default.createElement(DocumentEditorCell, {
47863
+ options: {
47864
+ value: docs,
47865
+ editorCallback: handleCallback
47866
+ },
47867
+ col: col
47868
+ }));
47869
+ }
47870
+ if (!docs.length) {
47871
+ return /*#__PURE__*/React__default.createElement("span", {
47872
+ className: "doc-cell-empty",
47873
+ onClick: function onClick() {
47874
+ return editable && setEditing(true);
47875
+ },
47876
+ style: {
47877
+ cursor: editable ? 'pointer' : 'default'
47878
+ }
47879
+ }, /*#__PURE__*/React__default.createElement("i", {
47880
+ className: "pi pi-paperclip"
47881
+ }), " \u2014");
47882
+ }
47883
+ return /*#__PURE__*/React__default.createElement("div", {
47884
+ className: "doc-cell",
47885
+ onClick: function onClick() {
47886
+ return editable && setEditing(true);
47887
+ },
47888
+ style: {
47889
+ cursor: editable ? 'pointer' : 'default'
47890
+ }
47891
+ }, /*#__PURE__*/React__default.createElement("div", {
47892
+ className: "doc-cell-summary"
47893
+ }, /*#__PURE__*/React__default.createElement("i", {
47894
+ className: "pi pi-paperclip"
47895
+ }), /*#__PURE__*/React__default.createElement("span", null, docs.length === 1 ? docs[0].name : "".concat(docs.length, " documents"))), docs.length > 1 && /*#__PURE__*/React__default.createElement("div", {
47896
+ className: "doc-cell-list"
47897
+ }, docs.map(function (doc, i) {
47898
+ var _doc$id2;
47899
+ return /*#__PURE__*/React__default.createElement("div", {
47900
+ key: (_doc$id2 = doc.id) !== null && _doc$id2 !== void 0 ? _doc$id2 : i
47901
+ }, /*#__PURE__*/React__default.createElement("a", {
47902
+ href: doc.url,
47903
+ target: "_blank",
47904
+ rel: "noreferrer"
47905
+ }, doc.name));
47906
+ })));
47907
+ };
47908
+ var Table = function Table(_ref1) {
47909
+ var _ref1$value = _ref1.value,
47910
+ value = _ref1$value === void 0 ? [] : _ref1$value,
47911
+ _ref1$columns = _ref1.columns,
47912
+ columns = _ref1$columns === void 0 ? [] : _ref1$columns,
47913
+ _ref1$paginator = _ref1.paginator,
47914
+ paginator = _ref1$paginator === void 0 ? true : _ref1$paginator,
47915
+ _ref1$rows = _ref1.rows,
47916
+ rows = _ref1$rows === void 0 ? 25 : _ref1$rows,
47917
+ _ref1$loading = _ref1.loading,
47918
+ loading = _ref1$loading === void 0 ? false : _ref1$loading,
47919
+ _ref1$stripedRows = _ref1.stripedRows,
47920
+ stripedRows = _ref1$stripedRows === void 0 ? false : _ref1$stripedRows,
47921
+ _ref1$selectionMode = _ref1.selectionMode,
47922
+ selectionMode = _ref1$selectionMode === void 0 ? null : _ref1$selectionMode,
47923
+ selection = _ref1.selection,
47924
+ onSelectionChange = _ref1.onSelectionChange,
47925
+ _ref1$editable = _ref1.editable,
47926
+ editable = _ref1$editable === void 0 ? false : _ref1$editable,
47927
+ _ref1$rowEdit = _ref1.rowEdit,
47928
+ rowEdit = _ref1$rowEdit === void 0 ? true : _ref1$rowEdit,
47929
+ onChange = _ref1.onChange,
47930
+ onCellChange = _ref1.onCellChange,
47931
+ carto = _ref1.carto;
47932
+ var _useState23 = useState(value),
47933
+ _useState24 = _slicedToArray$c(_useState23, 2),
47934
+ data = _useState24[0],
47935
+ setData = _useState24[1];
47676
47936
  var updateRow = useCallback(function (rowId, field, newVal) {
47677
47937
  setData(function (prev) {
47678
47938
  var updated = prev.map(function (row) {
@@ -47682,41 +47942,53 @@ var Table = function Table(_ref9) {
47682
47942
  return updated;
47683
47943
  });
47684
47944
  }, [onChange]);
47685
- var _useState17 = useState({}),
47686
- _useState18 = _slicedToArray$c(_useState17, 2),
47687
- editingRows = _useState18[0],
47688
- setEditingRows = _useState18[1];
47945
+ var _useState25 = useState({}),
47946
+ _useState26 = _slicedToArray$c(_useState25, 2),
47947
+ editingRows = _useState26[0],
47948
+ setEditingRows = _useState26[1];
47689
47949
  var onRowEditChange = useCallback(function (e) {
47690
47950
  setEditingRows(e.data);
47691
47951
  }, []);
47692
47952
  var onRowEditComplete = useCallback(function (e) {
47953
+ var _data$index;
47693
47954
  var newData = e.newData,
47694
47955
  index = e.index;
47956
+ // All editable columns are self-managed (SelfEditableCell / DocumentBodyCell / DeviseBodyCell / TreeSelectBodyCell)
47957
+ // and already applied their changes via updateRow — data[index] is the source of truth.
47958
+ // Merge: keep self-managed field values from data, keep non-editable fields from newData.
47959
+ var currentRow = (_data$index = data[index]) !== null && _data$index !== void 0 ? _data$index : newData;
47960
+ var mergedData = _objectSpread2({}, newData);
47961
+ columns.forEach(function (col) {
47962
+ var colEditable = editable ? col.editable !== false : col.editable === true;
47963
+ if (colEditable) {
47964
+ mergedData[col.field] = currentRow[col.field];
47965
+ }
47966
+ });
47695
47967
  var updated = data.map(function (row, i) {
47696
- return i === index ? newData : row;
47968
+ return i === index ? mergedData : row;
47697
47969
  });
47698
47970
  setData(updated);
47699
47971
  onChange === null || onChange === void 0 || onChange(updated);
47700
47972
  onCellChange === null || onCellChange === void 0 || onCellChange({
47701
47973
  rowData: data[index],
47702
- newRowData: newData
47974
+ newRowData: mergedData
47703
47975
  });
47704
- }, [data, onChange, onCellChange]);
47976
+ }, [data, onChange, onCellChange, columns, editable]);
47705
47977
  var STORAGE_KEY = useMemo(function () {
47706
47978
  return carto ? "Table:visibleColumns:".concat(carto) : "Table:visibleColumns";
47707
47979
  }, [carto]);
47708
- var _useState19 = useState(columns),
47709
- _useState20 = _slicedToArray$c(_useState19, 2),
47710
- visibleColumns = _useState20[0],
47711
- setVisibleColumns = _useState20[1];
47712
- var _useState21 = useState(false),
47713
- _useState22 = _slicedToArray$c(_useState21, 2),
47714
- showColumnPicker = _useState22[0],
47715
- setShowColumnPicker = _useState22[1];
47716
- var _useState23 = useState(''),
47717
- _useState24 = _slicedToArray$c(_useState23, 2),
47718
- globalFilter = _useState24[0],
47719
- setGlobalFilter = _useState24[1];
47980
+ var _useState27 = useState(columns),
47981
+ _useState28 = _slicedToArray$c(_useState27, 2),
47982
+ visibleColumns = _useState28[0],
47983
+ setVisibleColumns = _useState28[1];
47984
+ var _useState29 = useState(false),
47985
+ _useState30 = _slicedToArray$c(_useState29, 2),
47986
+ showColumnPicker = _useState30[0],
47987
+ setShowColumnPicker = _useState30[1];
47988
+ var _useState31 = useState(''),
47989
+ _useState32 = _slicedToArray$c(_useState31, 2),
47990
+ globalFilter = _useState32[0],
47991
+ setGlobalFilter = _useState32[1];
47720
47992
  useEffect(function () {
47721
47993
  var nextVisible = columns;
47722
47994
  var defaultVisible = columns.filter(function (c) {
@@ -47739,9 +48011,9 @@ var Table = function Table(_ref9) {
47739
48011
 
47740
48012
  var linkTemplate = useCallback(function (col) {
47741
48013
  return function (rowData) {
47742
- var _ref0, _col$href;
48014
+ var _ref10, _col$href;
47743
48015
  var label = rowData[col.field];
47744
- var href = typeof col.href === 'function' ? col.href(rowData) : (_ref0 = (_col$href = col.href) !== null && _col$href !== void 0 ? _col$href : rowData[col.field + 'Url']) !== null && _ref0 !== void 0 ? _ref0 : '#';
48016
+ var href = typeof col.href === 'function' ? col.href(rowData) : (_ref10 = (_col$href = col.href) !== null && _col$href !== void 0 ? _col$href : rowData[col.field + 'Url']) !== null && _ref10 !== void 0 ? _ref10 : '#';
47745
48017
  return /*#__PURE__*/React__default.createElement("div", {
47746
48018
  className: "arengi-table-grey-title-box"
47747
48019
  }, /*#__PURE__*/React__default.createElement("a", {
@@ -47758,17 +48030,17 @@ var Table = function Table(_ref9) {
47758
48030
  var str = String(val);
47759
48031
  var y, m, d;
47760
48032
  if (str.includes('/')) {
47761
- var _str$split = str.split('/');
47762
- var _str$split2 = _slicedToArray$c(_str$split, 3);
47763
- d = _str$split2[0];
47764
- m = _str$split2[1];
47765
- y = _str$split2[2];
48033
+ var _str$split5 = str.split('/');
48034
+ var _str$split6 = _slicedToArray$c(_str$split5, 3);
48035
+ d = _str$split6[0];
48036
+ m = _str$split6[1];
48037
+ y = _str$split6[2];
47766
48038
  } else {
47767
- var _str$split3 = str.split('-');
47768
- var _str$split4 = _slicedToArray$c(_str$split3, 3);
47769
- y = _str$split4[0];
47770
- m = _str$split4[1];
47771
- d = _str$split4[2];
48039
+ var _str$split7 = str.split('-');
48040
+ var _str$split8 = _slicedToArray$c(_str$split7, 3);
48041
+ y = _str$split8[0];
48042
+ m = _str$split8[1];
48043
+ d = _str$split8[2];
47772
48044
  }
47773
48045
  var date = new Date(y, m - 1, d);
47774
48046
  if (isNaN(date.getTime())) return 'N/A';
@@ -47798,9 +48070,9 @@ var Table = function Table(_ref9) {
47798
48070
  }, []);
47799
48071
  var textTemplate = useCallback(function (col) {
47800
48072
  return function (rowData) {
47801
- var _rowData$col$field;
48073
+ var _rowData$col$field4;
47802
48074
  if (typeof col.textTemplate === 'function') return col.textTemplate(rowData);
47803
- return (_rowData$col$field = rowData[col.field]) !== null && _rowData$col$field !== void 0 ? _rowData$col$field : '';
48075
+ return (_rowData$col$field4 = rowData[col.field]) !== null && _rowData$col$field4 !== void 0 ? _rowData$col$field4 : '';
47804
48076
  };
47805
48077
  }, []);
47806
48078
  var colorTextTemplate = useCallback(function (col) {
@@ -47859,8 +48131,8 @@ var Table = function Table(_ref9) {
47859
48131
  }, []);
47860
48132
  var documentTemplate = useCallback(function (col) {
47861
48133
  return function (rowData) {
47862
- var _rowData$col$field2;
47863
- var docs = (_rowData$col$field2 = rowData[col.field]) !== null && _rowData$col$field2 !== void 0 ? _rowData$col$field2 : [];
48134
+ var _rowData$col$field5;
48135
+ var docs = (_rowData$col$field5 = rowData[col.field]) !== null && _rowData$col$field5 !== void 0 ? _rowData$col$field5 : [];
47864
48136
  if (!docs.length) return /*#__PURE__*/React__default.createElement("span", {
47865
48137
  className: "doc-cell-empty"
47866
48138
  }, /*#__PURE__*/React__default.createElement("i", {
@@ -47875,9 +48147,9 @@ var Table = function Table(_ref9) {
47875
48147
  }), /*#__PURE__*/React__default.createElement("span", null, docs.length === 1 ? docs[0].name : "".concat(docs.length, " documents"))), docs.length > 1 && /*#__PURE__*/React__default.createElement("div", {
47876
48148
  className: "doc-cell-list"
47877
48149
  }, docs.map(function (doc, i) {
47878
- var _doc$id2;
48150
+ var _doc$id3;
47879
48151
  return /*#__PURE__*/React__default.createElement("div", {
47880
- key: (_doc$id2 = doc.id) !== null && _doc$id2 !== void 0 ? _doc$id2 : i
48152
+ key: (_doc$id3 = doc.id) !== null && _doc$id3 !== void 0 ? _doc$id3 : i
47881
48153
  }, /*#__PURE__*/React__default.createElement("a", {
47882
48154
  href: doc.url,
47883
48155
  target: "_blank",
@@ -47960,19 +48232,19 @@ var Table = function Table(_ref9) {
47960
48232
  var str = options.value ? String(options.value) : null;
47961
48233
  if (str && str !== 'N/A') {
47962
48234
  if (str.includes('/')) {
47963
- var _str$split5 = str.split('/'),
47964
- _str$split6 = _slicedToArray$c(_str$split5, 3),
47965
- d = _str$split6[0],
47966
- m = _str$split6[1],
47967
- y = _str$split6[2];
48235
+ var _str$split9 = str.split('/'),
48236
+ _str$split0 = _slicedToArray$c(_str$split9, 3),
48237
+ d = _str$split0[0],
48238
+ m = _str$split0[1],
48239
+ y = _str$split0[2];
47968
48240
  dateObj = new Date(y, m - 1, d);
47969
48241
  } else if (str.includes('-')) {
47970
- var _str$split7 = str.split('-'),
47971
- _str$split8 = _slicedToArray$c(_str$split7, 3),
47972
- _y = _str$split8[0],
47973
- _m = _str$split8[1],
47974
- _d = _str$split8[2];
47975
- dateObj = new Date(_y, _m - 1, _d);
48242
+ var _str$split1 = str.split('-'),
48243
+ _str$split10 = _slicedToArray$c(_str$split1, 3),
48244
+ _y2 = _str$split10[0],
48245
+ _m2 = _str$split10[1],
48246
+ _d2 = _str$split10[2];
48247
+ dateObj = new Date(_y2, _m2 - 1, _d2);
47976
48248
  }
47977
48249
  }
47978
48250
  if (!dateObj || isNaN(dateObj.getTime())) dateObj = new Date();
@@ -48044,6 +48316,13 @@ var Table = function Table(_ref9) {
48044
48316
  var getEditorTemplate = useCallback(function (col) {
48045
48317
  var colEditable = editable ? col.editable !== false : col.editable === true;
48046
48318
  if (!colEditable) return undefined;
48319
+ // In rowEdit mode, all columns except devise/treeSelect use SelfEditableCell or DocumentBodyCell
48320
+ // which manage their own editing state — no PrimeReact editor needed.
48321
+ if (rowEdit) {
48322
+ if (col.type === 'devise') return deviseEditor(col);
48323
+ if (col.type === 'treeSelect') return treeSelectEditor(col);
48324
+ return undefined;
48325
+ }
48047
48326
  switch (col.type) {
48048
48327
  case 'date':
48049
48328
  return dateEditor;
@@ -48064,7 +48343,7 @@ var Table = function Table(_ref9) {
48064
48343
  default:
48065
48344
  return textEditor;
48066
48345
  }
48067
- }, [editable, textEditor, dateEditor, selectEditor, selectMultipleEditor, numericEditor, documentEditor, deviseEditor, treeSelectEditor]);
48346
+ }, [editable, rowEdit, textEditor, dateEditor, selectEditor, selectMultipleEditor, numericEditor, documentEditor, deviseEditor, treeSelectEditor]);
48068
48347
  var onCellEditComplete = useCallback(function (e) {
48069
48348
  if (rowEdit) return;
48070
48349
  var rowData = e.rowData,
@@ -48089,34 +48368,83 @@ var Table = function Table(_ref9) {
48089
48368
 
48090
48369
  /** Get the body renderer for a column based on its type */
48091
48370
  var getBodyTemplate = useCallback(function (col) {
48371
+ var colEditable = editable ? col.editable !== false : col.editable === true;
48372
+
48373
+ // These types always manage their own editing state regardless of mode
48374
+ if (col.type === 'devise') return deviseTemplate(col);
48375
+ if (col.type === 'treeSelect') return treeSelectTemplate(col);
48376
+ if (col.type === 'picto') return pictoTemplate(col);
48377
+ if (col.type === 'calcul') return calculTemplate(col);
48378
+
48379
+ // Documents: self-managed click-to-edit in rowEdit mode
48380
+ if (col.type === 'documents') {
48381
+ if (rowEdit && colEditable) {
48382
+ return function (rowData) {
48383
+ return /*#__PURE__*/React__default.createElement(DocumentBodyCell, {
48384
+ rowData: rowData,
48385
+ col: col,
48386
+ editable: colEditable,
48387
+ isRowEditing: !!editingRows[rowData.id],
48388
+ onSave: function onSave(v) {
48389
+ return updateRow(rowData.id, col.field, v);
48390
+ }
48391
+ });
48392
+ };
48393
+ }
48394
+ return documentTemplate(col);
48395
+ }
48396
+
48397
+ // Pure display renderer
48398
+ var displayFn;
48092
48399
  switch (col.type) {
48093
48400
  case 'link':
48094
- return linkTemplate(col);
48401
+ displayFn = linkTemplate(col);
48402
+ break;
48095
48403
  case 'date':
48096
- return dateTemplate;
48404
+ displayFn = function displayFn(rd) {
48405
+ return dateTemplate(rd, {
48406
+ field: col.field
48407
+ });
48408
+ };
48409
+ break;
48097
48410
  case 'select':
48098
- return selectTemplate(col);
48411
+ displayFn = selectTemplate(col);
48412
+ break;
48099
48413
  case 'selectMultiple':
48100
- return selectMultipleTemplate(col);
48414
+ displayFn = selectMultipleTemplate(col);
48415
+ break;
48101
48416
  case 'colorText':
48102
- return colorTextTemplate(col);
48103
- case 'picto':
48104
- return pictoTemplate(col);
48417
+ displayFn = colorTextTemplate(col);
48418
+ break;
48105
48419
  case 'numeric':
48106
- return numericTemplate(col);
48107
- case 'calcul':
48108
- return calculTemplate(col);
48109
- case 'documents':
48110
- return documentTemplate(col);
48111
- case 'devise':
48112
- return deviseTemplate(col);
48113
- case 'treeSelect':
48114
- return treeSelectTemplate(col);
48420
+ displayFn = numericTemplate(col);
48421
+ break;
48115
48422
  case 'text':
48116
48423
  default:
48117
- return col.textTemplate ? textTemplate(col) : undefined;
48424
+ displayFn = col.textTemplate ? textTemplate(col) : undefined;
48425
+ break;
48426
+ }
48427
+
48428
+ // In rowEdit mode, wrap editable columns with SelfEditableCell for click-to-edit
48429
+ if (rowEdit && colEditable) {
48430
+ return function (rowData) {
48431
+ return /*#__PURE__*/React__default.createElement(SelfEditableCell, {
48432
+ rowData: rowData,
48433
+ col: col,
48434
+ editable: colEditable,
48435
+ isRowEditing: !!editingRows[rowData.id],
48436
+ onSave: function onSave(v) {
48437
+ return updateRow(rowData.id, col.field, v);
48438
+ },
48439
+ renderDisplay: displayFn !== null && displayFn !== void 0 ? displayFn : function (rd) {
48440
+ var _rd$col$field;
48441
+ return (_rd$col$field = rd[col.field]) !== null && _rd$col$field !== void 0 ? _rd$col$field : '';
48442
+ }
48443
+ });
48444
+ };
48118
48445
  }
48119
- }, [linkTemplate, dateTemplate, selectTemplate, selectMultipleTemplate, colorTextTemplate, pictoTemplate, textTemplate, numericTemplate, calculTemplate, documentTemplate, deviseTemplate, treeSelectTemplate]);
48446
+ return displayFn;
48447
+ }, [rowEdit, editable, editingRows, updateRow, linkTemplate, dateTemplate, selectTemplate, selectMultipleTemplate, colorTextTemplate, pictoTemplate, textTemplate, numericTemplate, calculTemplate, documentTemplate, deviseTemplate, treeSelectTemplate]);
48120
48448
  var getSortField = useCallback(function (col) {
48121
48449
  return col.field;
48122
48450
  }, []);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "arengibook",
3
3
  "private": false,
4
- "version": "2.0.14-table",
4
+ "version": "2.0.15-table",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
7
7
  "exports": {