funda-ui 4.1.379 → 4.1.401

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.
@@ -47,3 +47,9 @@
47
47
  width: max-content;
48
48
  max-width: 100%;
49
49
  }
50
+ .syntable__wrapper .syntable__caption.syntable__caption--top {
51
+ caption-side: top;
52
+ }
53
+ .syntable__wrapper .syntable__caption.syntable__caption--bottom {
54
+ caption-side: bottom;
55
+ }
@@ -6,3 +6,5 @@ export { default as TableFoot } from './TableFoot';
6
6
  export { default as TableRow } from './TableRow';
7
7
  export { default as TableColgroup } from './TableColgroup';
8
8
  export { default as TableCaption } from './TableCaption';
9
+ export { default as TableFilter } from './table-utils/TableFilter';
10
+ export { default as ToggleSelection } from './table-utils/ToggleSelection';
@@ -100,9 +100,11 @@ __webpack_require__.d(__webpack_exports__, {
100
100
  "TableCaption": () => (/* reexport */ src_TableCaption),
101
101
  "TableCell": () => (/* reexport */ src_TableCell),
102
102
  "TableColgroup": () => (/* reexport */ src_TableColgroup),
103
+ "TableFilter": () => (/* reexport */ table_utils_TableFilter),
103
104
  "TableFoot": () => (/* reexport */ src_TableFoot),
104
105
  "TableHead": () => (/* reexport */ src_TableHead),
105
- "TableRow": () => (/* reexport */ src_TableRow)
106
+ "TableRow": () => (/* reexport */ src_TableRow),
107
+ "ToggleSelection": () => (/* reexport */ table_utils_ToggleSelection)
106
108
  });
107
109
 
108
110
  // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react"}
@@ -119,47 +121,8 @@ var TableProvider = function TableProvider(props) {
119
121
  }, children);
120
122
  };
121
123
 
122
- ;// CONCATENATED MODULE: ./src/table-utils/TableFilter.tsx
123
-
124
-
125
- var TableFilter = function TableFilter(props) {
126
- var className = props.className,
127
- placeholder = props.placeholder,
128
- label = props.label,
129
- _onChange = props.onChange;
130
- var _useContext = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useContext)(TableContext),
131
- originData = _useContext.originData,
132
- filterFields = _useContext.filterFields,
133
- setInstance = _useContext.setInstance;
134
- var filterFieldsData = filterFields || [];
135
- return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("div", {
136
- style: {
137
- marginBottom: "16px"
138
- }
139
- }, label || null, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("input", {
140
- type: "text",
141
- className: className || '',
142
- onChange: function onChange(e) {
143
- var filteredData = originData === null || originData === void 0 ? void 0 : originData.filter(function (item) {
144
- return filterFieldsData.some(function (s) {
145
- var _item$s;
146
- return (_item$s = item[s]) === null || _item$s === void 0 ? void 0 : _item$s.toLowerCase().includes(e.target.value.toLowerCase());
147
- });
148
- });
149
- if (e.target.value.trim() === '') {
150
- setInstance(originData);
151
- _onChange === null || _onChange === void 0 ? void 0 : _onChange(originData);
152
- } else {
153
- setInstance(filteredData);
154
- _onChange === null || _onChange === void 0 ? void 0 : _onChange(filteredData);
155
- }
156
- },
157
- placeholder: placeholder || ''
158
- }));
159
- };
160
- /* harmony default export */ const table_utils_TableFilter = (TableFilter);
161
124
  ;// CONCATENATED MODULE: ./src/Table.tsx
162
- var _excluded = ["children", "wrapperClassName", "tableClassName", "responsive", "bordered", "colGroup", "cellAutoWidth", "data", "filterFields", "filterRow", "filterControlClassName", "filterControlPlaceholder", "filterLabel", "onChangeFilter"];
125
+ var _excluded = ["children", "wrapperClassName", "tableClassName", "responsive", "bordered", "colGroup", "cellAutoWidth", "data", "filterFields", "filterControlClassName", "filterControlPlaceholder", "filterLabel", "onChangeFilter", "dataSelected", "checkboxSelection", "onChangeRowSelect"];
163
126
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
164
127
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
165
128
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -171,7 +134,6 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
171
134
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
172
135
 
173
136
 
174
-
175
137
  var Table = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_.forwardRef)(function (_ref, externalRef) {
176
138
  var children = _ref.children,
177
139
  wrapperClassName = _ref.wrapperClassName,
@@ -182,11 +144,13 @@ var Table = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_a
182
144
  cellAutoWidth = _ref.cellAutoWidth,
183
145
  data = _ref.data,
184
146
  filterFields = _ref.filterFields,
185
- filterRow = _ref.filterRow,
186
147
  filterControlClassName = _ref.filterControlClassName,
187
148
  filterControlPlaceholder = _ref.filterControlPlaceholder,
188
149
  filterLabel = _ref.filterLabel,
189
150
  onChangeFilter = _ref.onChangeFilter,
151
+ dataSelected = _ref.dataSelected,
152
+ checkboxSelection = _ref.checkboxSelection,
153
+ onChangeRowSelect = _ref.onChangeRowSelect,
190
154
  attributes = _objectWithoutProperties(_ref, _excluded);
191
155
  var uniqueID = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useId)().replace(/\:/g, "-");
192
156
  var rootRef = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useRef)(null);
@@ -197,6 +161,12 @@ var Table = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_a
197
161
  instance = _useState2[0],
198
162
  setInstance = _useState2[1];
199
163
 
164
+ // selection
165
+ var _useState3 = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useState)(new Set()),
166
+ _useState4 = _slicedToArray(_useState3, 2),
167
+ selectedItems = _useState4[0],
168
+ setSelectedItems = _useState4[1];
169
+
200
170
  //
201
171
  var responsiveClasses = typeof responsive === 'undefined' || responsive === true ? 'table-responsive' : '';
202
172
 
@@ -208,19 +178,33 @@ var Table = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_a
208
178
  (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useEffect)(function () {
209
179
  setInstance(data);
210
180
  }, [data]);
181
+
182
+ // The items are selected by default
183
+ (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useEffect)(function () {
184
+ if (Array.isArray(data) && Array.isArray(dataSelected) && dataSelected.length > 0) {
185
+ var newSelectedItems = new Set(selectedItems);
186
+ dataSelected.forEach(function (s) {
187
+ newSelectedItems.add(String(s));
188
+ });
189
+ setSelectedItems(newSelectedItems);
190
+ }
191
+ }, [data, dataSelected]);
211
192
  return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement((external_root_React_commonjs2_react_commonjs_react_amd_react_default()).Fragment, null, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement(TableProvider, {
212
193
  value: {
213
194
  originData: data,
195
+ // filter
214
196
  filterFields: filterFields,
215
197
  instance: instance,
216
- setInstance: setInstance
198
+ setInstance: setInstance,
199
+ onChangeFilter: onChangeFilter,
200
+ // selection
201
+ dataSelected: dataSelected,
202
+ checkboxSelection: checkboxSelection,
203
+ selectedItems: selectedItems,
204
+ setSelectedItems: setSelectedItems,
205
+ onChangeRowSelect: onChangeRowSelect
217
206
  }
218
- }, filterRow ? /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement(table_utils_TableFilter, {
219
- className: filterControlClassName || '',
220
- placeholder: filterControlPlaceholder || '',
221
- onChange: onChangeFilter,
222
- label: filterLabel
223
- }) : null, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("div", _extends({}, attributes, {
207
+ }, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("div", _extends({}, attributes, {
224
208
  id: uniqueID,
225
209
  ref: function ref(node) {
226
210
  rootRef.current = node;
@@ -306,6 +290,15 @@ var TableFoot = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_rea
306
290
  }), children));
307
291
  });
308
292
  /* harmony default export */ const src_TableFoot = (TableFoot);
293
+ ;// CONCATENATED MODULE: ./src/table-utils/func.ts
294
+ function valRes(setData) {
295
+ var res = [];
296
+ var s = setData;
297
+ for (var it = s.values(), val = null; val = it.next().value;) {
298
+ res.push(val);
299
+ }
300
+ return res;
301
+ }
309
302
  ;// CONCATENATED MODULE: ./src/TableRow.tsx
310
303
  var TableRow_excluded = ["children", "active", "activeClassName", "className", "itemData"];
311
304
  function TableRow_extends() { TableRow_extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return TableRow_extends.apply(this, arguments); }
@@ -313,6 +306,7 @@ function TableRow_objectWithoutProperties(source, excluded) { if (source == null
313
306
  function TableRow_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
314
307
 
315
308
 
309
+
316
310
  var TableRow = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_.forwardRef)(function (_ref, externalRef) {
317
311
  var children = _ref.children,
318
312
  active = _ref.active,
@@ -323,9 +317,16 @@ var TableRow = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_reac
323
317
  var _useContext = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useContext)(TableContext),
324
318
  originData = _useContext.originData,
325
319
  filterFields = _useContext.filterFields,
320
+ selectedItems = _useContext.selectedItems,
326
321
  instance = _useContext.instance;
327
322
  var filteredData = instance || [];
328
323
  var filterFieldsData = filterFields || [];
324
+
325
+ // selection
326
+ var _res = valRes(selectedItems);
327
+ var _selectedIndex = _res.map(function (v) {
328
+ return Number(v);
329
+ });
329
330
  return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement((external_root_React_commonjs2_react_commonjs_react_amd_react_default()).Fragment, null, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("tr", TableRow_extends({}, attributes, {
330
331
  ref: externalRef,
331
332
  className: "\n ".concat(className || '', " \n ").concat(active ? activeClassName || 'active' : '', " \n ").concat(itemData && originData ? filteredData.every(function (item) {
@@ -333,7 +334,9 @@ var TableRow = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_reac
333
334
  var _item$s, _itemData$s;
334
335
  return !((_item$s = item[s]) !== null && _item$s !== void 0 && _item$s.toLowerCase().includes((_itemData$s = itemData[s]) === null || _itemData$s === void 0 ? void 0 : _itemData$s.toLowerCase()));
335
336
  });
336
- }) ? 'd-none' : '' : '', "\n ")
337
+ }) ? 'd-none' : '' : '', "\n ").concat(itemData && originData ? _selectedIndex.some(function (rowNum) {
338
+ return JSON.stringify(itemData) === JSON.stringify(originData[rowNum]) ? 'selected' : '';
339
+ }) : '', "\n ")
337
340
  }), children));
338
341
  });
339
342
  /* harmony default export */ const src_TableRow = (TableRow);
@@ -362,21 +365,212 @@ var TableColgroup = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs
362
365
  });
363
366
  /* harmony default export */ const src_TableColgroup = (TableColgroup);
364
367
  ;// CONCATENATED MODULE: ./src/TableCaption.tsx
365
- var TableCaption_excluded = ["children", "className"];
368
+ var TableCaption_excluded = ["children", "captionSide", "className"];
366
369
  function TableCaption_extends() { TableCaption_extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return TableCaption_extends.apply(this, arguments); }
367
370
  function TableCaption_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = TableCaption_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
368
371
  function TableCaption_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
369
372
 
370
373
  var TableCaption = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_.forwardRef)(function (_ref, externalRef) {
371
374
  var children = _ref.children,
375
+ captionSide = _ref.captionSide,
372
376
  className = _ref.className,
373
377
  attributes = TableCaption_objectWithoutProperties(_ref, TableCaption_excluded);
374
378
  return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement((external_root_React_commonjs2_react_commonjs_react_amd_react_default()).Fragment, null, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("caption", TableCaption_extends({}, attributes, {
375
379
  ref: externalRef,
376
- className: className || ''
380
+ className: "syntable__caption ".concat(className || '', " syntable__caption--").concat(captionSide || 'top')
377
381
  }), children));
378
382
  });
379
383
  /* harmony default export */ const src_TableCaption = (TableCaption);
384
+ ;// CONCATENATED MODULE: ./src/table-utils/TableFilter.tsx
385
+
386
+
387
+ var TableFilter = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_.forwardRef)(function (props, externalRef) {
388
+ var className = props.className,
389
+ placeholder = props.placeholder,
390
+ label = props.label,
391
+ _onChange = props.onChange;
392
+ var _useContext = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useContext)(TableContext),
393
+ originData = _useContext.originData,
394
+ filterFields = _useContext.filterFields,
395
+ setInstance = _useContext.setInstance,
396
+ onChangeFilter = _useContext.onChangeFilter;
397
+ var filterFieldsData = filterFields || [];
398
+ return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("div", {
399
+ className: "syntable__filter-container"
400
+ }, label || null, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("input", {
401
+ type: "text",
402
+ ref: externalRef,
403
+ className: className || '',
404
+ onChange: function onChange(e) {
405
+ var filteredData = originData === null || originData === void 0 ? void 0 : originData.filter(function (item) {
406
+ return filterFieldsData.some(function (s) {
407
+ var _item$s;
408
+ return (_item$s = item[s]) === null || _item$s === void 0 ? void 0 : _item$s.toLowerCase().includes(e.target.value.toLowerCase());
409
+ });
410
+ });
411
+ if (e.target.value.trim() === '') {
412
+ setInstance(originData);
413
+ onChangeFilter === null || onChangeFilter === void 0 ? void 0 : onChangeFilter(originData);
414
+ _onChange === null || _onChange === void 0 ? void 0 : _onChange(e, originData);
415
+ } else {
416
+ setInstance(filteredData);
417
+ onChangeFilter === null || onChangeFilter === void 0 ? void 0 : onChangeFilter(filteredData);
418
+ _onChange === null || _onChange === void 0 ? void 0 : _onChange(e, filteredData);
419
+ }
420
+ },
421
+ placeholder: placeholder || ''
422
+ }));
423
+ });
424
+ /* harmony default export */ const table_utils_TableFilter = (TableFilter);
425
+ ;// CONCATENATED MODULE: ./src/table-utils/ToggleSelection.tsx
426
+ var ToggleSelection_excluded = ["contentRef", "row", "className", "indeterminate", "disabled", "name", "value", "onChange", "checked"];
427
+ function ToggleSelection_extends() { ToggleSelection_extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return ToggleSelection_extends.apply(this, arguments); }
428
+ function ToggleSelection_slicedToArray(arr, i) { return ToggleSelection_arrayWithHoles(arr) || ToggleSelection_iterableToArrayLimit(arr, i) || ToggleSelection_unsupportedIterableToArray(arr, i) || ToggleSelection_nonIterableRest(); }
429
+ function ToggleSelection_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
430
+ function ToggleSelection_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ToggleSelection_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return ToggleSelection_arrayLikeToArray(o, minLen); }
431
+ function ToggleSelection_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
432
+ function ToggleSelection_iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
433
+ function ToggleSelection_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
434
+ function ToggleSelection_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = ToggleSelection_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
435
+ function ToggleSelection_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
436
+
437
+
438
+
439
+ var ToggleSelection = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_.forwardRef)(function (props, ref) {
440
+ var contentRef = props.contentRef,
441
+ row = props.row,
442
+ className = props.className,
443
+ _props$indeterminate = props.indeterminate,
444
+ indeterminate = _props$indeterminate === void 0 ? false : _props$indeterminate,
445
+ disabled = props.disabled,
446
+ name = props.name,
447
+ value = props.value,
448
+ onChange = props.onChange,
449
+ checked = props.checked,
450
+ attributes = ToggleSelection_objectWithoutProperties(props, ToggleSelection_excluded);
451
+ var _useContext = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useContext)(TableContext),
452
+ originData = _useContext.originData,
453
+ checkboxSelection = _useContext.checkboxSelection,
454
+ selectedItems = _useContext.selectedItems,
455
+ setSelectedItems = _useContext.setSelectedItems,
456
+ onChangeRowSelect = _useContext.onChangeRowSelect;
457
+ var totalSize = originData.length;
458
+ var defaultRef = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useRef)();
459
+ var resolvedRef = ref || defaultRef;
460
+ var _useState = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useState)(false),
461
+ _useState2 = ToggleSelection_slicedToArray(_useState, 2),
462
+ allChecked = _useState2[0],
463
+ setAllChecked = _useState2[1];
464
+
465
+ // exposes the following methods
466
+ (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useImperativeHandle)(contentRef, function () {
467
+ return {
468
+ indeterminate: function indeterminate(value) {
469
+ resolvedRef.current.indeterminate = value;
470
+ },
471
+ setSelectAll: function setSelectAll(value) {
472
+ setAllChecked(value);
473
+ },
474
+ control: function control() {
475
+ return resolvedRef.current;
476
+ }
477
+ };
478
+ }, [contentRef, resolvedRef]);
479
+ function selectTarget(rowIndex) {
480
+ var _val = String(rowIndex);
481
+
482
+ // filter
483
+ // =================================================================
484
+ var _selectedIndex = [];
485
+ var filteredData = [];
486
+ if (!isNaN(row) && Array.isArray(originData)) {
487
+ // all
488
+ if (row === -1) {
489
+ var _target = Array.from({
490
+ length: totalSize
491
+ }, function (v, k) {
492
+ return String(k);
493
+ });
494
+ if (selectedItems.size === 0 || selectedItems.size < totalSize) {
495
+ _selectedIndex = valRes(checkedSpecItems(_target, true)).map(function (v) {
496
+ return Number(v);
497
+ });
498
+ setAllChecked(true);
499
+ } else {
500
+ _selectedIndex = valRes(checkedSpecItems(_target, false)).map(function (v) {
501
+ return Number(v);
502
+ });
503
+ setAllChecked(false);
504
+ }
505
+ } else {
506
+ var _newSelectedItems = checkedOneItem(_val);
507
+ var _res = valRes(_newSelectedItems);
508
+ _selectedIndex = _res.map(function (v) {
509
+ return Number(v);
510
+ });
511
+ }
512
+ filteredData = originData.filter(function (v, i) {
513
+ return _selectedIndex.includes(i);
514
+ });
515
+ }
516
+ return filteredData;
517
+ }
518
+ function checkedSpecItems(itemKey, check) {
519
+ // first, make a copy of the original set rather than mutating the original
520
+ var newSelectedItems = new Set(selectedItems);
521
+ itemKey.forEach(function (s) {
522
+ if (check) {
523
+ newSelectedItems.add(s);
524
+ } else {
525
+ newSelectedItems["delete"](s);
526
+ }
527
+ });
528
+ setSelectedItems(newSelectedItems);
529
+ return newSelectedItems;
530
+ }
531
+ function checkedOneItem(itemKey) {
532
+ // first, make a copy of the original set rather than mutating the original
533
+ var newSelectedItems = new Set(selectedItems);
534
+ if (!newSelectedItems.has(itemKey)) {
535
+ newSelectedItems.add(itemKey);
536
+ } else {
537
+ newSelectedItems["delete"](itemKey);
538
+ }
539
+ setSelectedItems(newSelectedItems);
540
+ return newSelectedItems;
541
+ }
542
+ function handleChange(event) {
543
+ var _val = event.target.value;
544
+ var filteredData = selectTarget(_val);
545
+ onChange === null || onChange === void 0 ? void 0 : onChange(event, event.target.checked, filteredData);
546
+ onChangeRowSelect === null || onChangeRowSelect === void 0 ? void 0 : onChangeRowSelect(filteredData);
547
+ }
548
+ (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useEffect)(function () {
549
+ if (resolvedRef.current) {
550
+ resolvedRef.current.indeterminate = indeterminate;
551
+ }
552
+ }, [resolvedRef, indeterminate]);
553
+ return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement((external_root_React_commonjs2_react_commonjs_react_amd_react_default()).Fragment, null, checkboxSelection && row === -1 ? /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("input", ToggleSelection_extends({
554
+ type: "checkbox",
555
+ ref: resolvedRef,
556
+ className: className || '',
557
+ name: name,
558
+ value: "".concat(row),
559
+ checked: allChecked,
560
+ onChange: handleChange
561
+ }, attributes)) : null, checkboxSelection && row != -1 ? /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("input", ToggleSelection_extends({
562
+ type: "checkbox",
563
+ ref: resolvedRef,
564
+ className: className || '',
565
+ name: name,
566
+ value: "".concat(row),
567
+ "data-row": row,
568
+ "data-value": originData[row] ? JSON.stringify(originData[row]) : null,
569
+ checked: selectedItems.has("".concat(row)),
570
+ onChange: handleChange
571
+ }, attributes)) : null);
572
+ });
573
+ /* harmony default export */ const table_utils_ToggleSelection = (ToggleSelection);
380
574
  ;// CONCATENATED MODULE: ./src/index.tsx
381
575
 
382
576
 
@@ -386,6 +580,11 @@ var TableCaption = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_
386
580
 
387
581
 
388
582
 
583
+
584
+ // utils
585
+
586
+
587
+
389
588
  })();
390
589
 
391
590
  /******/ return __webpack_exports__;
@@ -6,3 +6,5 @@ export { default as TableFoot } from './TableFoot';
6
6
  export { default as TableRow } from './TableRow';
7
7
  export { default as TableColgroup } from './TableColgroup';
8
8
  export { default as TableCaption } from './TableCaption';
9
+ export { default as TableFilter } from './table-utils/TableFilter';
10
+ export { default as ToggleSelection } from './table-utils/ToggleSelection';
@@ -100,9 +100,11 @@ __webpack_require__.d(__webpack_exports__, {
100
100
  "TableCaption": () => (/* reexport */ src_TableCaption),
101
101
  "TableCell": () => (/* reexport */ src_TableCell),
102
102
  "TableColgroup": () => (/* reexport */ src_TableColgroup),
103
+ "TableFilter": () => (/* reexport */ table_utils_TableFilter),
103
104
  "TableFoot": () => (/* reexport */ src_TableFoot),
104
105
  "TableHead": () => (/* reexport */ src_TableHead),
105
- "TableRow": () => (/* reexport */ src_TableRow)
106
+ "TableRow": () => (/* reexport */ src_TableRow),
107
+ "ToggleSelection": () => (/* reexport */ table_utils_ToggleSelection)
106
108
  });
107
109
 
108
110
  // EXTERNAL MODULE: external {"root":"React","commonjs2":"react","commonjs":"react","amd":"react"}
@@ -119,47 +121,8 @@ var TableProvider = function TableProvider(props) {
119
121
  }, children);
120
122
  };
121
123
 
122
- ;// CONCATENATED MODULE: ./src/table-utils/TableFilter.tsx
123
-
124
-
125
- var TableFilter = function TableFilter(props) {
126
- var className = props.className,
127
- placeholder = props.placeholder,
128
- label = props.label,
129
- _onChange = props.onChange;
130
- var _useContext = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useContext)(TableContext),
131
- originData = _useContext.originData,
132
- filterFields = _useContext.filterFields,
133
- setInstance = _useContext.setInstance;
134
- var filterFieldsData = filterFields || [];
135
- return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("div", {
136
- style: {
137
- marginBottom: "16px"
138
- }
139
- }, label || null, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("input", {
140
- type: "text",
141
- className: className || '',
142
- onChange: function onChange(e) {
143
- var filteredData = originData === null || originData === void 0 ? void 0 : originData.filter(function (item) {
144
- return filterFieldsData.some(function (s) {
145
- var _item$s;
146
- return (_item$s = item[s]) === null || _item$s === void 0 ? void 0 : _item$s.toLowerCase().includes(e.target.value.toLowerCase());
147
- });
148
- });
149
- if (e.target.value.trim() === '') {
150
- setInstance(originData);
151
- _onChange === null || _onChange === void 0 ? void 0 : _onChange(originData);
152
- } else {
153
- setInstance(filteredData);
154
- _onChange === null || _onChange === void 0 ? void 0 : _onChange(filteredData);
155
- }
156
- },
157
- placeholder: placeholder || ''
158
- }));
159
- };
160
- /* harmony default export */ const table_utils_TableFilter = (TableFilter);
161
124
  ;// CONCATENATED MODULE: ./src/Table.tsx
162
- var _excluded = ["children", "wrapperClassName", "tableClassName", "responsive", "bordered", "colGroup", "cellAutoWidth", "data", "filterFields", "filterRow", "filterControlClassName", "filterControlPlaceholder", "filterLabel", "onChangeFilter"];
125
+ var _excluded = ["children", "wrapperClassName", "tableClassName", "responsive", "bordered", "colGroup", "cellAutoWidth", "data", "filterFields", "filterControlClassName", "filterControlPlaceholder", "filterLabel", "onChangeFilter", "dataSelected", "checkboxSelection", "onChangeRowSelect"];
163
126
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
164
127
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
165
128
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -171,7 +134,6 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
171
134
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
172
135
 
173
136
 
174
-
175
137
  var Table = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_.forwardRef)(function (_ref, externalRef) {
176
138
  var children = _ref.children,
177
139
  wrapperClassName = _ref.wrapperClassName,
@@ -182,11 +144,13 @@ var Table = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_a
182
144
  cellAutoWidth = _ref.cellAutoWidth,
183
145
  data = _ref.data,
184
146
  filterFields = _ref.filterFields,
185
- filterRow = _ref.filterRow,
186
147
  filterControlClassName = _ref.filterControlClassName,
187
148
  filterControlPlaceholder = _ref.filterControlPlaceholder,
188
149
  filterLabel = _ref.filterLabel,
189
150
  onChangeFilter = _ref.onChangeFilter,
151
+ dataSelected = _ref.dataSelected,
152
+ checkboxSelection = _ref.checkboxSelection,
153
+ onChangeRowSelect = _ref.onChangeRowSelect,
190
154
  attributes = _objectWithoutProperties(_ref, _excluded);
191
155
  var uniqueID = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useId)().replace(/\:/g, "-");
192
156
  var rootRef = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useRef)(null);
@@ -197,6 +161,12 @@ var Table = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_a
197
161
  instance = _useState2[0],
198
162
  setInstance = _useState2[1];
199
163
 
164
+ // selection
165
+ var _useState3 = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useState)(new Set()),
166
+ _useState4 = _slicedToArray(_useState3, 2),
167
+ selectedItems = _useState4[0],
168
+ setSelectedItems = _useState4[1];
169
+
200
170
  //
201
171
  var responsiveClasses = typeof responsive === 'undefined' || responsive === true ? 'table-responsive' : '';
202
172
 
@@ -208,19 +178,33 @@ var Table = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_a
208
178
  (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useEffect)(function () {
209
179
  setInstance(data);
210
180
  }, [data]);
181
+
182
+ // The items are selected by default
183
+ (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useEffect)(function () {
184
+ if (Array.isArray(data) && Array.isArray(dataSelected) && dataSelected.length > 0) {
185
+ var newSelectedItems = new Set(selectedItems);
186
+ dataSelected.forEach(function (s) {
187
+ newSelectedItems.add(String(s));
188
+ });
189
+ setSelectedItems(newSelectedItems);
190
+ }
191
+ }, [data, dataSelected]);
211
192
  return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement((external_root_React_commonjs2_react_commonjs_react_amd_react_default()).Fragment, null, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement(TableProvider, {
212
193
  value: {
213
194
  originData: data,
195
+ // filter
214
196
  filterFields: filterFields,
215
197
  instance: instance,
216
- setInstance: setInstance
198
+ setInstance: setInstance,
199
+ onChangeFilter: onChangeFilter,
200
+ // selection
201
+ dataSelected: dataSelected,
202
+ checkboxSelection: checkboxSelection,
203
+ selectedItems: selectedItems,
204
+ setSelectedItems: setSelectedItems,
205
+ onChangeRowSelect: onChangeRowSelect
217
206
  }
218
- }, filterRow ? /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement(table_utils_TableFilter, {
219
- className: filterControlClassName || '',
220
- placeholder: filterControlPlaceholder || '',
221
- onChange: onChangeFilter,
222
- label: filterLabel
223
- }) : null, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("div", _extends({}, attributes, {
207
+ }, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("div", _extends({}, attributes, {
224
208
  id: uniqueID,
225
209
  ref: function ref(node) {
226
210
  rootRef.current = node;
@@ -306,6 +290,15 @@ var TableFoot = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_rea
306
290
  }), children));
307
291
  });
308
292
  /* harmony default export */ const src_TableFoot = (TableFoot);
293
+ ;// CONCATENATED MODULE: ./src/table-utils/func.ts
294
+ function valRes(setData) {
295
+ var res = [];
296
+ var s = setData;
297
+ for (var it = s.values(), val = null; val = it.next().value;) {
298
+ res.push(val);
299
+ }
300
+ return res;
301
+ }
309
302
  ;// CONCATENATED MODULE: ./src/TableRow.tsx
310
303
  var TableRow_excluded = ["children", "active", "activeClassName", "className", "itemData"];
311
304
  function TableRow_extends() { TableRow_extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return TableRow_extends.apply(this, arguments); }
@@ -313,6 +306,7 @@ function TableRow_objectWithoutProperties(source, excluded) { if (source == null
313
306
  function TableRow_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
314
307
 
315
308
 
309
+
316
310
  var TableRow = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_.forwardRef)(function (_ref, externalRef) {
317
311
  var children = _ref.children,
318
312
  active = _ref.active,
@@ -323,9 +317,16 @@ var TableRow = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_reac
323
317
  var _useContext = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useContext)(TableContext),
324
318
  originData = _useContext.originData,
325
319
  filterFields = _useContext.filterFields,
320
+ selectedItems = _useContext.selectedItems,
326
321
  instance = _useContext.instance;
327
322
  var filteredData = instance || [];
328
323
  var filterFieldsData = filterFields || [];
324
+
325
+ // selection
326
+ var _res = valRes(selectedItems);
327
+ var _selectedIndex = _res.map(function (v) {
328
+ return Number(v);
329
+ });
329
330
  return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement((external_root_React_commonjs2_react_commonjs_react_amd_react_default()).Fragment, null, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("tr", TableRow_extends({}, attributes, {
330
331
  ref: externalRef,
331
332
  className: "\n ".concat(className || '', " \n ").concat(active ? activeClassName || 'active' : '', " \n ").concat(itemData && originData ? filteredData.every(function (item) {
@@ -333,7 +334,9 @@ var TableRow = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_reac
333
334
  var _item$s, _itemData$s;
334
335
  return !((_item$s = item[s]) !== null && _item$s !== void 0 && _item$s.toLowerCase().includes((_itemData$s = itemData[s]) === null || _itemData$s === void 0 ? void 0 : _itemData$s.toLowerCase()));
335
336
  });
336
- }) ? 'd-none' : '' : '', "\n ")
337
+ }) ? 'd-none' : '' : '', "\n ").concat(itemData && originData ? _selectedIndex.some(function (rowNum) {
338
+ return JSON.stringify(itemData) === JSON.stringify(originData[rowNum]) ? 'selected' : '';
339
+ }) : '', "\n ")
337
340
  }), children));
338
341
  });
339
342
  /* harmony default export */ const src_TableRow = (TableRow);
@@ -362,21 +365,212 @@ var TableColgroup = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs
362
365
  });
363
366
  /* harmony default export */ const src_TableColgroup = (TableColgroup);
364
367
  ;// CONCATENATED MODULE: ./src/TableCaption.tsx
365
- var TableCaption_excluded = ["children", "className"];
368
+ var TableCaption_excluded = ["children", "captionSide", "className"];
366
369
  function TableCaption_extends() { TableCaption_extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return TableCaption_extends.apply(this, arguments); }
367
370
  function TableCaption_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = TableCaption_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
368
371
  function TableCaption_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
369
372
 
370
373
  var TableCaption = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_.forwardRef)(function (_ref, externalRef) {
371
374
  var children = _ref.children,
375
+ captionSide = _ref.captionSide,
372
376
  className = _ref.className,
373
377
  attributes = TableCaption_objectWithoutProperties(_ref, TableCaption_excluded);
374
378
  return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement((external_root_React_commonjs2_react_commonjs_react_amd_react_default()).Fragment, null, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("caption", TableCaption_extends({}, attributes, {
375
379
  ref: externalRef,
376
- className: className || ''
380
+ className: "syntable__caption ".concat(className || '', " syntable__caption--").concat(captionSide || 'top')
377
381
  }), children));
378
382
  });
379
383
  /* harmony default export */ const src_TableCaption = (TableCaption);
384
+ ;// CONCATENATED MODULE: ./src/table-utils/TableFilter.tsx
385
+
386
+
387
+ var TableFilter = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_.forwardRef)(function (props, externalRef) {
388
+ var className = props.className,
389
+ placeholder = props.placeholder,
390
+ label = props.label,
391
+ _onChange = props.onChange;
392
+ var _useContext = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useContext)(TableContext),
393
+ originData = _useContext.originData,
394
+ filterFields = _useContext.filterFields,
395
+ setInstance = _useContext.setInstance,
396
+ onChangeFilter = _useContext.onChangeFilter;
397
+ var filterFieldsData = filterFields || [];
398
+ return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("div", {
399
+ className: "syntable__filter-container"
400
+ }, label || null, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("input", {
401
+ type: "text",
402
+ ref: externalRef,
403
+ className: className || '',
404
+ onChange: function onChange(e) {
405
+ var filteredData = originData === null || originData === void 0 ? void 0 : originData.filter(function (item) {
406
+ return filterFieldsData.some(function (s) {
407
+ var _item$s;
408
+ return (_item$s = item[s]) === null || _item$s === void 0 ? void 0 : _item$s.toLowerCase().includes(e.target.value.toLowerCase());
409
+ });
410
+ });
411
+ if (e.target.value.trim() === '') {
412
+ setInstance(originData);
413
+ onChangeFilter === null || onChangeFilter === void 0 ? void 0 : onChangeFilter(originData);
414
+ _onChange === null || _onChange === void 0 ? void 0 : _onChange(e, originData);
415
+ } else {
416
+ setInstance(filteredData);
417
+ onChangeFilter === null || onChangeFilter === void 0 ? void 0 : onChangeFilter(filteredData);
418
+ _onChange === null || _onChange === void 0 ? void 0 : _onChange(e, filteredData);
419
+ }
420
+ },
421
+ placeholder: placeholder || ''
422
+ }));
423
+ });
424
+ /* harmony default export */ const table_utils_TableFilter = (TableFilter);
425
+ ;// CONCATENATED MODULE: ./src/table-utils/ToggleSelection.tsx
426
+ var ToggleSelection_excluded = ["contentRef", "row", "className", "indeterminate", "disabled", "name", "value", "onChange", "checked"];
427
+ function ToggleSelection_extends() { ToggleSelection_extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return ToggleSelection_extends.apply(this, arguments); }
428
+ function ToggleSelection_slicedToArray(arr, i) { return ToggleSelection_arrayWithHoles(arr) || ToggleSelection_iterableToArrayLimit(arr, i) || ToggleSelection_unsupportedIterableToArray(arr, i) || ToggleSelection_nonIterableRest(); }
429
+ function ToggleSelection_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
430
+ function ToggleSelection_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ToggleSelection_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return ToggleSelection_arrayLikeToArray(o, minLen); }
431
+ function ToggleSelection_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
432
+ function ToggleSelection_iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
433
+ function ToggleSelection_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
434
+ function ToggleSelection_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = ToggleSelection_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
435
+ function ToggleSelection_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
436
+
437
+
438
+
439
+ var ToggleSelection = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_react_amd_react_.forwardRef)(function (props, ref) {
440
+ var contentRef = props.contentRef,
441
+ row = props.row,
442
+ className = props.className,
443
+ _props$indeterminate = props.indeterminate,
444
+ indeterminate = _props$indeterminate === void 0 ? false : _props$indeterminate,
445
+ disabled = props.disabled,
446
+ name = props.name,
447
+ value = props.value,
448
+ onChange = props.onChange,
449
+ checked = props.checked,
450
+ attributes = ToggleSelection_objectWithoutProperties(props, ToggleSelection_excluded);
451
+ var _useContext = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useContext)(TableContext),
452
+ originData = _useContext.originData,
453
+ checkboxSelection = _useContext.checkboxSelection,
454
+ selectedItems = _useContext.selectedItems,
455
+ setSelectedItems = _useContext.setSelectedItems,
456
+ onChangeRowSelect = _useContext.onChangeRowSelect;
457
+ var totalSize = originData.length;
458
+ var defaultRef = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useRef)();
459
+ var resolvedRef = ref || defaultRef;
460
+ var _useState = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useState)(false),
461
+ _useState2 = ToggleSelection_slicedToArray(_useState, 2),
462
+ allChecked = _useState2[0],
463
+ setAllChecked = _useState2[1];
464
+
465
+ // exposes the following methods
466
+ (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useImperativeHandle)(contentRef, function () {
467
+ return {
468
+ indeterminate: function indeterminate(value) {
469
+ resolvedRef.current.indeterminate = value;
470
+ },
471
+ setSelectAll: function setSelectAll(value) {
472
+ setAllChecked(value);
473
+ },
474
+ control: function control() {
475
+ return resolvedRef.current;
476
+ }
477
+ };
478
+ }, [contentRef, resolvedRef]);
479
+ function selectTarget(rowIndex) {
480
+ var _val = String(rowIndex);
481
+
482
+ // filter
483
+ // =================================================================
484
+ var _selectedIndex = [];
485
+ var filteredData = [];
486
+ if (!isNaN(row) && Array.isArray(originData)) {
487
+ // all
488
+ if (row === -1) {
489
+ var _target = Array.from({
490
+ length: totalSize
491
+ }, function (v, k) {
492
+ return String(k);
493
+ });
494
+ if (selectedItems.size === 0 || selectedItems.size < totalSize) {
495
+ _selectedIndex = valRes(checkedSpecItems(_target, true)).map(function (v) {
496
+ return Number(v);
497
+ });
498
+ setAllChecked(true);
499
+ } else {
500
+ _selectedIndex = valRes(checkedSpecItems(_target, false)).map(function (v) {
501
+ return Number(v);
502
+ });
503
+ setAllChecked(false);
504
+ }
505
+ } else {
506
+ var _newSelectedItems = checkedOneItem(_val);
507
+ var _res = valRes(_newSelectedItems);
508
+ _selectedIndex = _res.map(function (v) {
509
+ return Number(v);
510
+ });
511
+ }
512
+ filteredData = originData.filter(function (v, i) {
513
+ return _selectedIndex.includes(i);
514
+ });
515
+ }
516
+ return filteredData;
517
+ }
518
+ function checkedSpecItems(itemKey, check) {
519
+ // first, make a copy of the original set rather than mutating the original
520
+ var newSelectedItems = new Set(selectedItems);
521
+ itemKey.forEach(function (s) {
522
+ if (check) {
523
+ newSelectedItems.add(s);
524
+ } else {
525
+ newSelectedItems["delete"](s);
526
+ }
527
+ });
528
+ setSelectedItems(newSelectedItems);
529
+ return newSelectedItems;
530
+ }
531
+ function checkedOneItem(itemKey) {
532
+ // first, make a copy of the original set rather than mutating the original
533
+ var newSelectedItems = new Set(selectedItems);
534
+ if (!newSelectedItems.has(itemKey)) {
535
+ newSelectedItems.add(itemKey);
536
+ } else {
537
+ newSelectedItems["delete"](itemKey);
538
+ }
539
+ setSelectedItems(newSelectedItems);
540
+ return newSelectedItems;
541
+ }
542
+ function handleChange(event) {
543
+ var _val = event.target.value;
544
+ var filteredData = selectTarget(_val);
545
+ onChange === null || onChange === void 0 ? void 0 : onChange(event, event.target.checked, filteredData);
546
+ onChangeRowSelect === null || onChangeRowSelect === void 0 ? void 0 : onChangeRowSelect(filteredData);
547
+ }
548
+ (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useEffect)(function () {
549
+ if (resolvedRef.current) {
550
+ resolvedRef.current.indeterminate = indeterminate;
551
+ }
552
+ }, [resolvedRef, indeterminate]);
553
+ return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement((external_root_React_commonjs2_react_commonjs_react_amd_react_default()).Fragment, null, checkboxSelection && row === -1 ? /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("input", ToggleSelection_extends({
554
+ type: "checkbox",
555
+ ref: resolvedRef,
556
+ className: className || '',
557
+ name: name,
558
+ value: "".concat(row),
559
+ checked: allChecked,
560
+ onChange: handleChange
561
+ }, attributes)) : null, checkboxSelection && row != -1 ? /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("input", ToggleSelection_extends({
562
+ type: "checkbox",
563
+ ref: resolvedRef,
564
+ className: className || '',
565
+ name: name,
566
+ value: "".concat(row),
567
+ "data-row": row,
568
+ "data-value": originData[row] ? JSON.stringify(originData[row]) : null,
569
+ checked: selectedItems.has("".concat(row)),
570
+ onChange: handleChange
571
+ }, attributes)) : null);
572
+ });
573
+ /* harmony default export */ const table_utils_ToggleSelection = (ToggleSelection);
380
574
  ;// CONCATENATED MODULE: ./src/index.tsx
381
575
 
382
576
 
@@ -386,6 +580,11 @@ var TableCaption = /*#__PURE__*/(0,external_root_React_commonjs2_react_commonjs_
386
580
 
387
581
 
388
582
 
583
+
584
+ // utils
585
+
586
+
587
+
389
588
  })();
390
589
 
391
590
  /******/ return __webpack_exports__;
@@ -47,3 +47,9 @@
47
47
  width: max-content;
48
48
  max-width: 100%;
49
49
  }
50
+ .syntable__wrapper .syntable__caption.syntable__caption--top {
51
+ caption-side: top;
52
+ }
53
+ .syntable__wrapper .syntable__caption.syntable__caption--bottom {
54
+ caption-side: bottom;
55
+ }
@@ -14,11 +14,15 @@ interface TableProps extends React.HTMLAttributes<HTMLDivElement> {
14
14
  // filter
15
15
  data?: any[];
16
16
  filterFields?: string[];
17
- filterRow?: boolean;
18
17
  filterControlClassName?: string;
19
18
  filterControlPlaceholder?: string;
20
19
  filterLabel?: React.ReactNode;
21
20
  onChangeFilter?: (value: any) => void;
21
+
22
+ // selection
23
+ dataSelected?: number[];
24
+ checkboxSelection?: boolean;
25
+ onChangeRowSelect?: (fetchData: any[]) => void;
22
26
  }
23
27
 
24
28
 
@@ -35,11 +39,15 @@ const Table = forwardRef<HTMLDivElement, TableProps>((
35
39
  // filter
36
40
  data,
37
41
  filterFields,
38
- filterRow,
39
42
  filterControlClassName,
40
43
  filterControlPlaceholder,
41
44
  filterLabel,
42
45
  onChangeFilter,
46
+
47
+ // selection
48
+ dataSelected,
49
+ checkboxSelection,
50
+ onChangeRowSelect,
43
51
 
44
52
  ...attributes
45
53
  },
@@ -52,6 +60,8 @@ const Table = forwardRef<HTMLDivElement, TableProps>((
52
60
  // context
53
61
  const [instance, setInstance] = useState<any>(null);
54
62
 
63
+ // selection
64
+ const [selectedItems, setSelectedItems] = useState<any>(new Set());
55
65
 
56
66
  //
57
67
  const responsiveClasses = typeof responsive === 'undefined' || responsive === true ? 'table-responsive' : '';
@@ -67,23 +77,38 @@ const Table = forwardRef<HTMLDivElement, TableProps>((
67
77
  setInstance(data);
68
78
  }, [data]);
69
79
 
80
+ // The items are selected by default
81
+ useEffect(() => {
82
+ if (Array.isArray(data) && Array.isArray(dataSelected) && dataSelected.length > 0) {
83
+ const newSelectedItems = new Set(selectedItems);
84
+ dataSelected.forEach((s: number) => {
85
+ newSelectedItems.add(String(s));
86
+ });
87
+
88
+ setSelectedItems(newSelectedItems);
89
+ }
90
+ }, [data, dataSelected]);
91
+
70
92
  return (
71
93
  <>
72
94
 
73
95
  <TableProvider value={{
74
96
  originData: data,
97
+
98
+ // filter
75
99
  filterFields,
76
100
  instance,
77
- setInstance
101
+ setInstance,
102
+ onChangeFilter,
103
+
104
+ // selection
105
+ dataSelected,
106
+ checkboxSelection,
107
+ selectedItems,
108
+ setSelectedItems,
109
+ onChangeRowSelect
78
110
  }}>
79
111
 
80
- {/** Filter Control */}
81
- {filterRow ? <TableFilter
82
- className={filterControlClassName || ''}
83
- placeholder={filterControlPlaceholder || ''}
84
- onChange={onChangeFilter}
85
- label={filterLabel}
86
- /> : null}
87
112
 
88
113
  {/** Main */}
89
114
  <div
@@ -3,10 +3,16 @@ import React, { forwardRef } from 'react';
3
3
 
4
4
  interface TableCaptionProps extends React.HTMLAttributes<HTMLTableCaptionElement> {
5
5
  className?: string;
6
+ captionSide?: string;
6
7
  }
7
8
 
8
9
  const TableCaption = forwardRef<HTMLTableCaptionElement, TableCaptionProps>((
9
- { children, className, ...attributes },
10
+ {
11
+ children,
12
+ captionSide,
13
+ className,
14
+ ...attributes
15
+ },
10
16
  externalRef
11
17
  ) => {
12
18
 
@@ -16,7 +22,7 @@ const TableCaption = forwardRef<HTMLTableCaptionElement, TableCaptionProps>((
16
22
  <caption
17
23
  {...attributes}
18
24
  ref={externalRef}
19
- className={className || ''}
25
+ className={`syntable__caption ${className || ''} syntable__caption--${captionSide || 'top'}`}
20
26
  >
21
27
  {children}
22
28
  </caption>
@@ -2,6 +2,9 @@ import React, { useContext, forwardRef } from 'react';
2
2
 
3
3
  import { TableContext } from "./TableContext";
4
4
 
5
+ import { valRes } from './table-utils/func';
6
+
7
+
5
8
  interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {
6
9
  active?: boolean;
7
10
  activeClassName?: string;
@@ -24,12 +27,17 @@ const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>((
24
27
  const {
25
28
  originData,
26
29
  filterFields,
30
+ selectedItems,
27
31
  instance
28
32
  } = useContext(TableContext);
29
33
 
30
34
  const filteredData = instance || [];
31
35
  const filterFieldsData = filterFields || [];
32
36
 
37
+ // selection
38
+ const _res = valRes(selectedItems);
39
+ const _selectedIndex = _res.map((v: any) => Number(v));
40
+
33
41
  return (
34
42
  <>
35
43
 
@@ -40,6 +48,7 @@ const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>((
40
48
  ${className || ''}
41
49
  ${active ? (activeClassName || 'active') : ''}
42
50
  ${itemData && originData ? (filteredData.every((item: any) => filterFieldsData.some((s: string) => !item[s]?.toLowerCase().includes(itemData[s]?.toLowerCase())) ) ? 'd-none' : '') : ''}
51
+ ${itemData && originData ? _selectedIndex.some((rowNum: number) => JSON.stringify(itemData) === JSON.stringify(originData[rowNum]) ? 'selected' : '') : ''}
43
52
  `}
44
53
  >
45
54
  {children}
@@ -68,6 +68,16 @@
68
68
 
69
69
  }
70
70
 
71
+ .syntable__caption {
72
+ &.syntable__caption--top {
73
+ caption-side: top;
74
+ }
75
+
76
+ &.syntable__caption--bottom {
77
+ caption-side: bottom;
78
+ }
79
+ }
80
+
71
81
  }
72
82
 
73
83
 
@@ -7,3 +7,9 @@ export { default as TableRow } from './TableRow';
7
7
  export { default as TableColgroup } from './TableColgroup';
8
8
  export { default as TableCaption } from './TableCaption';
9
9
 
10
+ // utils
11
+
12
+ export { default as TableFilter } from './table-utils/TableFilter';
13
+ export { default as ToggleSelection } from './table-utils/ToggleSelection';
14
+
15
+
@@ -1,15 +1,15 @@
1
- import React, { useContext } from "react";
1
+ import React, { forwardRef, useContext } from "react";
2
2
  import { TableContext } from '../TableContext';
3
3
 
4
4
  type TableFilterProps = {
5
5
  className?: string;
6
6
  placeholder?: string;
7
7
  label?: React.ReactNode;
8
- onChange?: (value: any) => void;
8
+ onChange?: (e: any, fetchData: any[]) => void;
9
9
  };
10
10
 
11
11
 
12
- const TableFilter = (props: TableFilterProps) => {
12
+ const TableFilter = forwardRef((props: TableFilterProps, externalRef: any) => {
13
13
  const {
14
14
  className,
15
15
  placeholder,
@@ -20,33 +20,37 @@ const TableFilter = (props: TableFilterProps) => {
20
20
  const {
21
21
  originData,
22
22
  filterFields,
23
- setInstance
23
+ setInstance,
24
+ onChangeFilter
24
25
  } = useContext(TableContext);
25
26
 
26
27
  const filterFieldsData = filterFields || [];
27
28
 
28
29
 
29
30
  return (
30
- <div style={{ marginBottom: "16px" }}>
31
+ <div className="syntable__filter-container">
31
32
  {label || null}
32
33
  <input
33
34
  type="text"
35
+ ref={externalRef}
34
36
  className={className || ''}
35
- onChange={e => {
37
+ onChange={(e: any) => {
36
38
  const filteredData = originData?.filter((item: any) => filterFieldsData.some((s: string) => item[s]?.toLowerCase().includes(e.target.value.toLowerCase())));
37
39
 
38
40
  if (e.target.value.trim() === '') {
39
41
  setInstance(originData);
40
- onChange?.(originData);
42
+ onChangeFilter?.(originData);
43
+ onChange?.(e, originData);
41
44
  } else {
42
45
  setInstance(filteredData);
43
- onChange?.(filteredData);
46
+ onChangeFilter?.(filteredData);
47
+ onChange?.(e, filteredData);
44
48
  }
45
49
  }}
46
50
  placeholder={placeholder || ''}
47
51
  />
48
52
  </div>
49
53
  );
50
- };
54
+ });
51
55
 
52
56
  export default TableFilter;
@@ -0,0 +1,188 @@
1
+ import React, { useState, useEffect, useRef, forwardRef, useContext, useImperativeHandle } from "react";
2
+ import { TableContext } from '../TableContext';
3
+
4
+ import { valRes } from './func';
5
+
6
+ type ToggleSelectionProps = {
7
+ contentRef?: React.ForwardedRef<any>;
8
+ row: number;
9
+ className?: string;
10
+ indeterminate?: boolean;
11
+ disabled?: boolean;
12
+ name?: string;
13
+ value?: string;
14
+ onChange?: (arg1: any, arg2: any, fetchData: any[]) => void;
15
+ checked?: boolean;
16
+ };
17
+
18
+
19
+ const ToggleSelection = forwardRef((props: ToggleSelectionProps, ref: any) => {
20
+ const {
21
+ contentRef,
22
+ row,
23
+ className,
24
+ indeterminate = false,
25
+ disabled,
26
+ name,
27
+ value,
28
+ onChange,
29
+ checked,
30
+ ...attributes
31
+ } = props;
32
+
33
+ const {
34
+ originData,
35
+ checkboxSelection,
36
+ selectedItems,
37
+ setSelectedItems,
38
+ onChangeRowSelect,
39
+ } = useContext(TableContext);
40
+
41
+
42
+ const totalSize = originData.length;
43
+ const defaultRef = useRef();
44
+ const resolvedRef = ref || defaultRef;
45
+ const [allChecked, setAllChecked] = useState<boolean>(false);
46
+
47
+ // exposes the following methods
48
+ useImperativeHandle(
49
+ contentRef,
50
+ () => ({
51
+ indeterminate: (value: boolean) => {
52
+ resolvedRef.current.indeterminate = value;
53
+ },
54
+ setSelectAll: (value: boolean) => {
55
+ setAllChecked(value);
56
+ },
57
+ control: () => {
58
+ return resolvedRef.current;
59
+ }
60
+ }),
61
+ [contentRef, resolvedRef],
62
+ );
63
+
64
+
65
+ function selectTarget(rowIndex: string | number) {
66
+ const _val = String(rowIndex);
67
+
68
+ // filter
69
+ // =================================================================
70
+ let _selectedIndex: number[] = [];
71
+ let filteredData: any[] = [];
72
+ if (!isNaN(row) && Array.isArray(originData)) {
73
+
74
+ // all
75
+ if (row === -1) {
76
+ const _target = Array.from({
77
+ length: totalSize
78
+ },
79
+ function(v, k) {
80
+ return String(k);
81
+ }
82
+ );
83
+
84
+ if (selectedItems.size === 0 || selectedItems.size < totalSize) {
85
+ _selectedIndex = valRes(checkedSpecItems(_target, true)).map((v: any) => Number(v));
86
+ setAllChecked(true);
87
+ } else {
88
+ _selectedIndex = valRes(checkedSpecItems(_target, false)).map((v: any) => Number(v));
89
+ setAllChecked(false);
90
+ }
91
+
92
+
93
+ } else {
94
+ const _newSelectedItems = checkedOneItem(_val);
95
+ const _res = valRes(_newSelectedItems);
96
+ _selectedIndex = _res.map((v: any) => Number(v));
97
+ }
98
+
99
+ filteredData = originData.filter((v: any, i: number) => _selectedIndex.includes(i));
100
+
101
+ }
102
+
103
+ return filteredData;
104
+ }
105
+
106
+
107
+ function checkedSpecItems(itemKey: string[], check: boolean) {
108
+ // first, make a copy of the original set rather than mutating the original
109
+ const newSelectedItems = new Set(selectedItems);
110
+ itemKey.forEach((s: string) => {
111
+ if (check) {
112
+ newSelectedItems.add(s);
113
+ } else {
114
+ newSelectedItems.delete(s);
115
+ }
116
+ });
117
+
118
+ setSelectedItems(newSelectedItems);
119
+ return newSelectedItems;
120
+ }
121
+
122
+ function checkedOneItem(itemKey: string) {
123
+ // first, make a copy of the original set rather than mutating the original
124
+ const newSelectedItems = new Set(selectedItems);
125
+ if (!newSelectedItems.has(itemKey)) {
126
+ newSelectedItems.add(itemKey);
127
+ } else {
128
+ newSelectedItems.delete(itemKey);
129
+ }
130
+ setSelectedItems(newSelectedItems);
131
+
132
+ return newSelectedItems;
133
+ }
134
+
135
+
136
+ function handleChange(event: any) {
137
+ const _val = event.target.value;
138
+ const filteredData = selectTarget(_val);
139
+
140
+ onChange?.(event, event.target.checked, filteredData);
141
+ onChangeRowSelect?.(filteredData);
142
+ }
143
+
144
+
145
+ useEffect(() => {
146
+ if (resolvedRef.current) {
147
+ resolvedRef.current.indeterminate = indeterminate;
148
+ }
149
+ }, [resolvedRef, indeterminate]);
150
+
151
+
152
+ return (
153
+ <>
154
+
155
+ {/** All */}
156
+ {checkboxSelection && row === -1 ? <input
157
+ type="checkbox"
158
+ ref={resolvedRef}
159
+ className={className || ''}
160
+ name={name}
161
+ value={`${row}`}
162
+ checked={allChecked}
163
+ onChange={handleChange}
164
+ {...attributes}
165
+ /> : null}
166
+
167
+
168
+ {/** Per Row */}
169
+ {checkboxSelection && row != -1 ? <input
170
+ type="checkbox"
171
+ ref={resolvedRef}
172
+ className={className || ''}
173
+ name={name}
174
+ value={`${row}`}
175
+ data-row={row}
176
+ data-value={originData[row] ? JSON.stringify(originData[row]) : null}
177
+ checked={selectedItems.has(`${row}`)}
178
+ onChange={handleChange}
179
+ {...attributes}
180
+ /> : null}
181
+
182
+
183
+ </>
184
+ );
185
+ }
186
+ );
187
+
188
+ export default ToggleSelection;
@@ -0,0 +1,8 @@
1
+ export function valRes(setData: any) {
2
+ const res: any[] = [];
3
+ const s = setData;
4
+ for (let it = s.values(), val = null; val = it.next().value;) {
5
+ res.push(val);
6
+ }
7
+ return res;
8
+ }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "UIUX Lab",
3
3
  "email": "uiuxlab@gmail.com",
4
4
  "name": "funda-ui",
5
- "version": "4.1.379",
5
+ "version": "4.1.401",
6
6
  "description": "React components using pure Bootstrap 5+ which does not contain any external style and script libraries.",
7
7
  "repository": {
8
8
  "type": "git",