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.
- package/SyntheticTable/index.css +6 -0
- package/SyntheticTable/index.d.ts +2 -0
- package/SyntheticTable/index.js +252 -53
- package/lib/cjs/SyntheticTable/index.d.ts +2 -0
- package/lib/cjs/SyntheticTable/index.js +252 -53
- package/lib/css/SyntheticTable/index.css +6 -0
- package/lib/esm/SyntheticTable/Table.tsx +35 -10
- package/lib/esm/SyntheticTable/TableCaption.tsx +8 -2
- package/lib/esm/SyntheticTable/TableRow.tsx +9 -0
- package/lib/esm/SyntheticTable/index.scss +10 -0
- package/lib/esm/SyntheticTable/index.tsx +6 -0
- package/lib/esm/SyntheticTable/table-utils/TableFilter.tsx +13 -9
- package/lib/esm/SyntheticTable/table-utils/ToggleSelection.tsx +188 -0
- package/lib/esm/SyntheticTable/table-utils/func.ts +8 -0
- package/package.json +1 -1
package/SyntheticTable/index.css
CHANGED
|
@@ -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';
|
package/SyntheticTable/index.js
CHANGED
|
@@ -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", "
|
|
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
|
-
},
|
|
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", "
|
|
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
|
-
},
|
|
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__;
|
|
@@ -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
|
-
{
|
|
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}
|
|
@@ -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?: (
|
|
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
|
|
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
|
-
|
|
42
|
+
onChangeFilter?.(originData);
|
|
43
|
+
onChange?.(e, originData);
|
|
41
44
|
} else {
|
|
42
45
|
setInstance(filteredData);
|
|
43
|
-
|
|
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;
|
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.
|
|
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",
|