arengibook 2.0.13-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 +513 -116
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -47294,6 +47294,8 @@ var DeviseBodyCell = function DeviseBodyCell(_ref) {
47294
47294
  var rowData = _ref.rowData,
47295
47295
  col = _ref.col,
47296
47296
  editable = _ref.editable,
47297
+ _ref$isRowEditing = _ref.isRowEditing,
47298
+ isRowEditing = _ref$isRowEditing === void 0 ? false : _ref$isRowEditing,
47297
47299
  onSave = _ref.onSave;
47298
47300
  var _useState = useState(false),
47299
47301
  _useState2 = _slicedToArray$c(_useState, 2),
@@ -47329,6 +47331,21 @@ var DeviseBodyCell = function DeviseBodyCell(_ref) {
47329
47331
  setDevise(initialDevise);
47330
47332
  setEditing(true);
47331
47333
  };
47334
+
47335
+ // Sync avec le mode row edit : auto-ouvrir / fermer
47336
+ useEffect(function () {
47337
+ if (isRowEditing && !editing) {
47338
+ var _displayCell$value2, _ref4, _ref5, _displayCell$devise2;
47339
+ setAmount((_displayCell$value2 = displayCell === null || displayCell === void 0 ? void 0 : displayCell.value) !== null && _displayCell$value2 !== void 0 ? _displayCell$value2 : '');
47340
+ var initialDevise = (_ref4 = (_ref5 = (_displayCell$devise2 = displayCell === null || displayCell === void 0 ? void 0 : displayCell.devise) !== null && _displayCell$devise2 !== void 0 ? _displayCell$devise2 : col.currency) !== null && _ref5 !== void 0 ? _ref5 : devises[0]) !== null && _ref4 !== void 0 ? _ref4 : null;
47341
+ deviseRef.current = initialDevise;
47342
+ setDevise(initialDevise);
47343
+ setEditing(true);
47344
+ } else if (!isRowEditing && editing) {
47345
+ setEditing(false);
47346
+ }
47347
+ // eslint-disable-next-line react-hooks/exhaustive-deps
47348
+ }, [isRowEditing]);
47332
47349
  var handleSave = function handleSave() {
47333
47350
  var _devises$find;
47334
47351
  var currentDevise = deviseRef.current;
@@ -47344,7 +47361,7 @@ var DeviseBodyCell = function DeviseBodyCell(_ref) {
47344
47361
  setEditing(false);
47345
47362
  };
47346
47363
  useEffect(function () {
47347
- if (!editing) return;
47364
+ if (!editing || isRowEditing) return;
47348
47365
  var handler = function handler(e) {
47349
47366
  if (containerRef.current && !containerRef.current.contains(e.target)) {
47350
47367
  setEditing(false);
@@ -47354,7 +47371,7 @@ var DeviseBodyCell = function DeviseBodyCell(_ref) {
47354
47371
  return function () {
47355
47372
  return document.removeEventListener('mousedown', handler);
47356
47373
  };
47357
- }, [editing]);
47374
+ }, [editing, isRowEditing]);
47358
47375
  if (editing) {
47359
47376
  var devisesOptions = devises.map(function (d) {
47360
47377
  return {
@@ -47418,11 +47435,13 @@ var DeviseBodyCell = function DeviseBodyCell(_ref) {
47418
47435
  className: "span-sub"
47419
47436
  }, "".concat(numberWithSpaces(value), " ").concat(cellDevise.code)));
47420
47437
  };
47421
- var TreeSelectBodyCell = function TreeSelectBodyCell(_ref4) {
47422
- var rowData = _ref4.rowData,
47423
- col = _ref4.col,
47424
- editable = _ref4.editable,
47425
- onSave = _ref4.onSave;
47438
+ var TreeSelectBodyCell = function TreeSelectBodyCell(_ref6) {
47439
+ var rowData = _ref6.rowData,
47440
+ col = _ref6.col,
47441
+ editable = _ref6.editable,
47442
+ _ref6$isRowEditing = _ref6.isRowEditing,
47443
+ isRowEditing = _ref6$isRowEditing === void 0 ? false : _ref6$isRowEditing,
47444
+ onSave = _ref6.onSave;
47426
47445
  var _useState9 = useState(false),
47427
47446
  _useState0 = _slicedToArray$c(_useState9, 2),
47428
47447
  editing = _useState0[0],
@@ -47448,6 +47467,17 @@ var TreeSelectBodyCell = function TreeSelectBodyCell(_ref4) {
47448
47467
  setEditValue(savedValue);
47449
47468
  setEditing(true);
47450
47469
  };
47470
+
47471
+ // Sync avec le mode row edit : auto-ouvrir / fermer
47472
+ useEffect(function () {
47473
+ if (isRowEditing && !editing) {
47474
+ setEditValue(savedValue);
47475
+ setEditing(true);
47476
+ } else if (!isRowEditing && editing) {
47477
+ setEditing(false);
47478
+ }
47479
+ // eslint-disable-next-line react-hooks/exhaustive-deps
47480
+ }, [isRowEditing]);
47451
47481
  var handleChange = function handleChange(e) {
47452
47482
  var val = e.value;
47453
47483
  if (val == null || val === '' || _typeof$f(val) === 'object' && Object.keys(val).length === 0) return;
@@ -47456,7 +47486,7 @@ var TreeSelectBodyCell = function TreeSelectBodyCell(_ref4) {
47456
47486
  onSave(val);
47457
47487
  };
47458
47488
  useEffect(function () {
47459
- if (!editing) return;
47489
+ if (!editing || isRowEditing) return;
47460
47490
  var handler = function handler(e) {
47461
47491
  if (containerRef.current && !containerRef.current.contains(e.target)) {
47462
47492
  if (e.target.closest('.p-treeselect-panel')) return;
@@ -47467,7 +47497,7 @@ var TreeSelectBodyCell = function TreeSelectBodyCell(_ref4) {
47467
47497
  return function () {
47468
47498
  return document.removeEventListener('mousedown', handler);
47469
47499
  };
47470
- }, [editing]);
47500
+ }, [editing, isRowEditing]);
47471
47501
  if (editing) {
47472
47502
  var _col$selectionMode, _col$filter, _col$display;
47473
47503
  return /*#__PURE__*/React__default.createElement("div", {
@@ -47516,10 +47546,10 @@ var TreeSelectBodyCell = function TreeSelectBodyCell(_ref4) {
47516
47546
  }, label);
47517
47547
  }));
47518
47548
  };
47519
- var DocumentEditorCell = function DocumentEditorCell(_ref5) {
47549
+ var DocumentEditorCell = function DocumentEditorCell(_ref7) {
47520
47550
  var _options$value;
47521
- var options = _ref5.options,
47522
- col = _ref5.col;
47551
+ var options = _ref7.options,
47552
+ col = _ref7.col;
47523
47553
  var _useState13 = useState(false),
47524
47554
  _useState14 = _slicedToArray$c(_useState13, 2),
47525
47555
  uploading = _useState14[0],
@@ -47527,8 +47557,8 @@ var DocumentEditorCell = function DocumentEditorCell(_ref5) {
47527
47557
  var fileInputRef = useRef(null);
47528
47558
  var docs = (_options$value = options.value) !== null && _options$value !== void 0 ? _options$value : [];
47529
47559
  var handleFileChange = /*#__PURE__*/function () {
47530
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(e) {
47531
- var file, formData, res, data;
47560
+ var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(e) {
47561
+ var file, formData, res, data, _t, _t2;
47532
47562
  return _regenerator().w(function (_context) {
47533
47563
  while (1) switch (_context.n) {
47534
47564
  case 0:
@@ -47542,7 +47572,8 @@ var DocumentEditorCell = function DocumentEditorCell(_ref5) {
47542
47572
  setUploading(true);
47543
47573
  _context.p = 2;
47544
47574
  formData = new FormData();
47545
- formData.append('file', file);
47575
+ formData.append('Filedata', file);
47576
+ if (col.csrfToken) formData.append('token', col.csrfToken);
47546
47577
  _context.n = 3;
47547
47578
  return fetch(col.uploadUrl, {
47548
47579
  method: 'POST',
@@ -47550,23 +47581,38 @@ var DocumentEditorCell = function DocumentEditorCell(_ref5) {
47550
47581
  });
47551
47582
  case 3:
47552
47583
  res = _context.v;
47584
+ if (res.ok) {
47585
+ _context.n = 5;
47586
+ break;
47587
+ }
47588
+ _t = Error;
47553
47589
  _context.n = 4;
47554
- return res.json();
47590
+ return res.text();
47555
47591
  case 4:
47556
- data = _context.v;
47557
- options.editorCallback([].concat(_toConsumableArray$a(docs), [data]));
47592
+ _t2 = _context.v;
47593
+ throw new _t(_t2);
47558
47594
  case 5:
47559
- _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;
47560
47606
  setUploading(false);
47561
47607
  e.target.value = '';
47562
- return _context.f(5);
47563
- case 6:
47608
+ return _context.f(7);
47609
+ case 8:
47564
47610
  return _context.a(2);
47565
47611
  }
47566
- }, _callee, null, [[2,, 5, 6]]);
47612
+ }, _callee, null, [[2,, 7, 8]]);
47567
47613
  }));
47568
47614
  return function handleFileChange(_x) {
47569
- return _ref6.apply(this, arguments);
47615
+ return _ref8.apply(this, arguments);
47570
47616
  };
47571
47617
  }();
47572
47618
  var handleDelete = function handleDelete(id) {
@@ -47615,32 +47661,278 @@ var DocumentEditorCell = function DocumentEditorCell(_ref5) {
47615
47661
  onChange: handleFileChange
47616
47662
  }));
47617
47663
  };
47618
- var Table = function Table(_ref7) {
47619
- var _ref7$value = _ref7.value,
47620
- value = _ref7$value === void 0 ? [] : _ref7$value,
47621
- _ref7$columns = _ref7.columns,
47622
- columns = _ref7$columns === void 0 ? [] : _ref7$columns,
47623
- _ref7$paginator = _ref7.paginator,
47624
- paginator = _ref7$paginator === void 0 ? true : _ref7$paginator,
47625
- _ref7$rows = _ref7.rows,
47626
- rows = _ref7$rows === void 0 ? 25 : _ref7$rows,
47627
- _ref7$loading = _ref7.loading,
47628
- loading = _ref7$loading === void 0 ? false : _ref7$loading,
47629
- _ref7$stripedRows = _ref7.stripedRows,
47630
- stripedRows = _ref7$stripedRows === void 0 ? false : _ref7$stripedRows,
47631
- _ref7$selectionMode = _ref7.selectionMode,
47632
- selectionMode = _ref7$selectionMode === void 0 ? null : _ref7$selectionMode,
47633
- selection = _ref7.selection,
47634
- onSelectionChange = _ref7.onSelectionChange,
47635
- _ref7$editable = _ref7.editable,
47636
- editable = _ref7$editable === void 0 ? false : _ref7$editable,
47637
- onChange = _ref7.onChange,
47638
- onCellChange = _ref7.onCellChange,
47639
- carto = _ref7.carto;
47640
- 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),
47641
47672
  _useState16 = _slicedToArray$c(_useState15, 2),
47642
- data = _useState16[0],
47643
- 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];
47644
47936
  var updateRow = useCallback(function (rowId, field, newVal) {
47645
47937
  setData(function (prev) {
47646
47938
  var updated = prev.map(function (row) {
@@ -47650,21 +47942,53 @@ var Table = function Table(_ref7) {
47650
47942
  return updated;
47651
47943
  });
47652
47944
  }, [onChange]);
47945
+ var _useState25 = useState({}),
47946
+ _useState26 = _slicedToArray$c(_useState25, 2),
47947
+ editingRows = _useState26[0],
47948
+ setEditingRows = _useState26[1];
47949
+ var onRowEditChange = useCallback(function (e) {
47950
+ setEditingRows(e.data);
47951
+ }, []);
47952
+ var onRowEditComplete = useCallback(function (e) {
47953
+ var _data$index;
47954
+ var newData = e.newData,
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
+ });
47967
+ var updated = data.map(function (row, i) {
47968
+ return i === index ? mergedData : row;
47969
+ });
47970
+ setData(updated);
47971
+ onChange === null || onChange === void 0 || onChange(updated);
47972
+ onCellChange === null || onCellChange === void 0 || onCellChange({
47973
+ rowData: data[index],
47974
+ newRowData: mergedData
47975
+ });
47976
+ }, [data, onChange, onCellChange, columns, editable]);
47653
47977
  var STORAGE_KEY = useMemo(function () {
47654
47978
  return carto ? "Table:visibleColumns:".concat(carto) : "Table:visibleColumns";
47655
47979
  }, [carto]);
47656
- var _useState17 = useState(columns),
47657
- _useState18 = _slicedToArray$c(_useState17, 2),
47658
- visibleColumns = _useState18[0],
47659
- setVisibleColumns = _useState18[1];
47660
- var _useState19 = useState(false),
47661
- _useState20 = _slicedToArray$c(_useState19, 2),
47662
- showColumnPicker = _useState20[0],
47663
- setShowColumnPicker = _useState20[1];
47664
- var _useState21 = useState(''),
47665
- _useState22 = _slicedToArray$c(_useState21, 2),
47666
- globalFilter = _useState22[0],
47667
- setGlobalFilter = _useState22[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];
47668
47992
  useEffect(function () {
47669
47993
  var nextVisible = columns;
47670
47994
  var defaultVisible = columns.filter(function (c) {
@@ -47687,9 +48011,9 @@ var Table = function Table(_ref7) {
47687
48011
 
47688
48012
  var linkTemplate = useCallback(function (col) {
47689
48013
  return function (rowData) {
47690
- var _ref8, _col$href;
48014
+ var _ref10, _col$href;
47691
48015
  var label = rowData[col.field];
47692
- var href = typeof col.href === 'function' ? col.href(rowData) : (_ref8 = (_col$href = col.href) !== null && _col$href !== void 0 ? _col$href : rowData[col.field + 'Url']) !== null && _ref8 !== void 0 ? _ref8 : '#';
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 : '#';
47693
48017
  return /*#__PURE__*/React__default.createElement("div", {
47694
48018
  className: "arengi-table-grey-title-box"
47695
48019
  }, /*#__PURE__*/React__default.createElement("a", {
@@ -47706,17 +48030,17 @@ var Table = function Table(_ref7) {
47706
48030
  var str = String(val);
47707
48031
  var y, m, d;
47708
48032
  if (str.includes('/')) {
47709
- var _str$split = str.split('/');
47710
- var _str$split2 = _slicedToArray$c(_str$split, 3);
47711
- d = _str$split2[0];
47712
- m = _str$split2[1];
47713
- 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];
47714
48038
  } else {
47715
- var _str$split3 = str.split('-');
47716
- var _str$split4 = _slicedToArray$c(_str$split3, 3);
47717
- y = _str$split4[0];
47718
- m = _str$split4[1];
47719
- 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];
47720
48044
  }
47721
48045
  var date = new Date(y, m - 1, d);
47722
48046
  if (isNaN(date.getTime())) return 'N/A';
@@ -47746,9 +48070,9 @@ var Table = function Table(_ref7) {
47746
48070
  }, []);
47747
48071
  var textTemplate = useCallback(function (col) {
47748
48072
  return function (rowData) {
47749
- var _rowData$col$field;
48073
+ var _rowData$col$field4;
47750
48074
  if (typeof col.textTemplate === 'function') return col.textTemplate(rowData);
47751
- 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 : '';
47752
48076
  };
47753
48077
  }, []);
47754
48078
  var colorTextTemplate = useCallback(function (col) {
@@ -47807,8 +48131,8 @@ var Table = function Table(_ref7) {
47807
48131
  }, []);
47808
48132
  var documentTemplate = useCallback(function (col) {
47809
48133
  return function (rowData) {
47810
- var _rowData$col$field2;
47811
- 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 : [];
47812
48136
  if (!docs.length) return /*#__PURE__*/React__default.createElement("span", {
47813
48137
  className: "doc-cell-empty"
47814
48138
  }, /*#__PURE__*/React__default.createElement("i", {
@@ -47823,9 +48147,9 @@ var Table = function Table(_ref7) {
47823
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", {
47824
48148
  className: "doc-cell-list"
47825
48149
  }, docs.map(function (doc, i) {
47826
- var _doc$id2;
48150
+ var _doc$id3;
47827
48151
  return /*#__PURE__*/React__default.createElement("div", {
47828
- 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
47829
48153
  }, /*#__PURE__*/React__default.createElement("a", {
47830
48154
  href: doc.url,
47831
48155
  target: "_blank",
@@ -47847,13 +48171,14 @@ var Table = function Table(_ref7) {
47847
48171
  return /*#__PURE__*/React__default.createElement(DeviseBodyCell, {
47848
48172
  rowData: rowData,
47849
48173
  col: col,
47850
- editable: editable && col.editable !== false,
48174
+ editable: editable || rowEdit && col.editable !== false,
48175
+ isRowEditing: rowEdit && !!editingRows[rowData.id],
47851
48176
  onSave: function onSave(newVal) {
47852
48177
  return updateRow(rowData.id, col.field, newVal);
47853
48178
  }
47854
48179
  });
47855
48180
  };
47856
- }, [editable, updateRow]);
48181
+ }, [editable, rowEdit, editingRows, updateRow]);
47857
48182
  var deviseEditor = useCallback(function () {
47858
48183
  return undefined;
47859
48184
  }, []);
@@ -47907,19 +48232,19 @@ var Table = function Table(_ref7) {
47907
48232
  var str = options.value ? String(options.value) : null;
47908
48233
  if (str && str !== 'N/A') {
47909
48234
  if (str.includes('/')) {
47910
- var _str$split5 = str.split('/'),
47911
- _str$split6 = _slicedToArray$c(_str$split5, 3),
47912
- d = _str$split6[0],
47913
- m = _str$split6[1],
47914
- 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];
47915
48240
  dateObj = new Date(y, m - 1, d);
47916
48241
  } else if (str.includes('-')) {
47917
- var _str$split7 = str.split('-'),
47918
- _str$split8 = _slicedToArray$c(_str$split7, 3),
47919
- _y = _str$split8[0],
47920
- _m = _str$split8[1],
47921
- _d = _str$split8[2];
47922
- 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);
47923
48248
  }
47924
48249
  }
47925
48250
  if (!dateObj || isNaN(dateObj.getTime())) dateObj = new Date();
@@ -47977,19 +48302,27 @@ var Table = function Table(_ref7) {
47977
48302
  return /*#__PURE__*/React__default.createElement(TreeSelectBodyCell, {
47978
48303
  rowData: rowData,
47979
48304
  col: col,
47980
- editable: editable && col.editable !== false,
48305
+ editable: editable || rowEdit && col.editable !== false,
48306
+ isRowEditing: rowEdit && !!editingRows[rowData.id],
47981
48307
  onSave: function onSave(newVal) {
47982
48308
  return updateRow(rowData.id, col.field, newVal);
47983
48309
  }
47984
48310
  });
47985
48311
  };
47986
- }, [editable, updateRow]);
48312
+ }, [editable, rowEdit, editingRows, updateRow]);
47987
48313
  var treeSelectEditor = useCallback(function () {
47988
48314
  return undefined;
47989
48315
  }, []);
47990
48316
  var getEditorTemplate = useCallback(function (col) {
47991
48317
  var colEditable = editable ? col.editable !== false : col.editable === true;
47992
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
+ }
47993
48326
  switch (col.type) {
47994
48327
  case 'date':
47995
48328
  return dateEditor;
@@ -48010,8 +48343,9 @@ var Table = function Table(_ref7) {
48010
48343
  default:
48011
48344
  return textEditor;
48012
48345
  }
48013
- }, [editable, textEditor, dateEditor, selectEditor, selectMultipleEditor, numericEditor, documentEditor, deviseEditor, treeSelectEditor]);
48346
+ }, [editable, rowEdit, textEditor, dateEditor, selectEditor, selectMultipleEditor, numericEditor, documentEditor, deviseEditor, treeSelectEditor]);
48014
48347
  var onCellEditComplete = useCallback(function (e) {
48348
+ if (rowEdit) return;
48015
48349
  var rowData = e.rowData,
48016
48350
  newRowData = e.newRowData,
48017
48351
  field = e.field;
@@ -48030,38 +48364,87 @@ var Table = function Table(_ref7) {
48030
48364
  field: field,
48031
48365
  newValue: newRowData[field]
48032
48366
  });
48033
- }, [data, onChange, onCellChange, columns]);
48367
+ }, [data, onChange, onCellChange, columns, rowEdit]);
48034
48368
 
48035
48369
  /** Get the body renderer for a column based on its type */
48036
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;
48037
48399
  switch (col.type) {
48038
48400
  case 'link':
48039
- return linkTemplate(col);
48401
+ displayFn = linkTemplate(col);
48402
+ break;
48040
48403
  case 'date':
48041
- return dateTemplate;
48404
+ displayFn = function displayFn(rd) {
48405
+ return dateTemplate(rd, {
48406
+ field: col.field
48407
+ });
48408
+ };
48409
+ break;
48042
48410
  case 'select':
48043
- return selectTemplate(col);
48411
+ displayFn = selectTemplate(col);
48412
+ break;
48044
48413
  case 'selectMultiple':
48045
- return selectMultipleTemplate(col);
48414
+ displayFn = selectMultipleTemplate(col);
48415
+ break;
48046
48416
  case 'colorText':
48047
- return colorTextTemplate(col);
48048
- case 'picto':
48049
- return pictoTemplate(col);
48417
+ displayFn = colorTextTemplate(col);
48418
+ break;
48050
48419
  case 'numeric':
48051
- return numericTemplate(col);
48052
- case 'calcul':
48053
- return calculTemplate(col);
48054
- case 'documents':
48055
- return documentTemplate(col);
48056
- case 'devise':
48057
- return deviseTemplate(col);
48058
- case 'treeSelect':
48059
- return treeSelectTemplate(col);
48420
+ displayFn = numericTemplate(col);
48421
+ break;
48060
48422
  case 'text':
48061
48423
  default:
48062
- return col.textTemplate ? textTemplate(col) : undefined;
48424
+ displayFn = col.textTemplate ? textTemplate(col) : undefined;
48425
+ break;
48063
48426
  }
48064
- }, [linkTemplate, dateTemplate, selectTemplate, selectMultipleTemplate, colorTextTemplate, pictoTemplate, textTemplate, numericTemplate, calculTemplate, documentTemplate, deviseTemplate, treeSelectTemplate]);
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
+ };
48445
+ }
48446
+ return displayFn;
48447
+ }, [rowEdit, editable, editingRows, updateRow, linkTemplate, dateTemplate, selectTemplate, selectMultipleTemplate, colorTextTemplate, pictoTemplate, textTemplate, numericTemplate, calculTemplate, documentTemplate, deviseTemplate, treeSelectTemplate]);
48065
48448
  var getSortField = useCallback(function (col) {
48066
48449
  return col.field;
48067
48450
  }, []);
@@ -48183,9 +48566,12 @@ var Table = function Table(_ref7) {
48183
48566
  selection: selection,
48184
48567
  onSelectionChange: onSelectionChange,
48185
48568
  globalFilter: globalFilter,
48186
- editMode: editable || columns.some(function (c) {
48569
+ editMode: editable || rowEdit || columns.some(function (c) {
48187
48570
  return c.editable === true;
48188
- }) ? 'cell' : undefined,
48571
+ }) ? rowEdit ? 'row' : 'cell' : undefined,
48572
+ editingRows: rowEdit ? editingRows : undefined,
48573
+ onRowEditChange: rowEdit ? onRowEditChange : undefined,
48574
+ onRowEditComplete: rowEdit ? onRowEditComplete : undefined,
48189
48575
  dataKey: "id",
48190
48576
  tableClassName: '',
48191
48577
  resizableColumns: true,
@@ -48205,12 +48591,23 @@ var Table = function Table(_ref7) {
48205
48591
  header: col.header,
48206
48592
  body: getBodyTemplate(col),
48207
48593
  editor: getEditorTemplate(col),
48208
- onCellEditComplete: (editable ? col.editable !== false : col.editable === true) ? onCellEditComplete : undefined,
48594
+ onCellEditComplete: !rowEdit && (editable ? col.editable !== false : col.editable === true) ? onCellEditComplete : undefined,
48209
48595
  className: col.field === 'nom' ? 'arengi-table-grey-title' : 'hide1time',
48210
48596
  style: {
48211
48597
  minWidth: (_col$minWidth = col.minWidth) !== null && _col$minWidth !== void 0 ? _col$minWidth : '200px'
48212
48598
  }
48213
48599
  });
48600
+ }), rowEdit && /*#__PURE__*/React__default.createElement(Column, {
48601
+ rowEditor: true,
48602
+ headerStyle: {
48603
+ width: '6rem',
48604
+ minWidth: '6rem'
48605
+ },
48606
+ bodyStyle: {
48607
+ textAlign: 'center'
48608
+ },
48609
+ frozen: true,
48610
+ alignFrozen: "right"
48214
48611
  })));
48215
48612
  };
48216
48613
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "arengibook",
3
3
  "private": false,
4
- "version": "2.0.13-table",
4
+ "version": "2.0.15-table",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
7
7
  "exports": {