@react-fabric/data 1.0.0-beta.6 → 1.0.0-beta.60
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/{src/histogram/Histogram.module.css → css/_histogram.css} +16 -13
- package/css/styles.css +24 -0
- package/dist/cjs/checklist/CheckList.js +23 -0
- package/dist/cjs/histogram/Histogram.js +37 -7
- package/dist/cjs/hooks/useFilteredList.js +88 -10
- package/dist/cjs/hooks/usePagination.js +27 -4
- package/dist/cjs/hooks/useSelectableList.js +29 -0
- package/dist/cjs/i18n/ar.json.js +8 -1
- package/dist/cjs/i18n/en.json.js +8 -1
- package/dist/cjs/json/JsonViewer.js +67 -27
- package/dist/cjs/pagination/Pagination.js +10 -0
- package/dist/cjs/table/AddColumn.js +1 -1
- package/dist/cjs/table/BodyCell.js +5 -4
- package/dist/cjs/table/BodyRow.js +2 -2
- package/dist/cjs/table/CheckboxCell.js +1 -1
- package/dist/cjs/table/ColumnFilters.js +97 -0
- package/dist/cjs/table/HeaderCell.js +71 -43
- package/dist/cjs/table/Table.js +58 -12
- package/dist/cjs/table/types.js +29 -0
- package/dist/cjs/table/useResizer.js +4 -4
- package/dist/cjs/table/useVirtualTable.js +127 -19
- package/dist/cjs/tree/TreeNode.js +48 -30
- package/dist/cjs/tree/TreePanel.js +45 -11
- package/dist/cjs/tree/useTree.js +199 -38
- package/dist/cjs/tree/utils.js +39 -12
- package/dist/cjs/virtual/Gallery.js +97 -45
- package/dist/cjs/virtual/List.js +93 -39
- package/dist/cjs/virtual/Scroller.js +16 -8
- package/dist/esm/checklist/CheckList.js +23 -0
- package/dist/esm/histogram/Histogram.js +38 -8
- package/dist/esm/hooks/useFilteredList.js +89 -11
- package/dist/esm/hooks/usePagination.js +27 -4
- package/dist/esm/hooks/useSelectableList.js +29 -0
- package/dist/esm/i18n/ar.json.js +8 -2
- package/dist/esm/i18n/en.json.js +8 -2
- package/dist/esm/json/JsonViewer.js +68 -28
- package/dist/esm/pagination/Pagination.js +10 -0
- package/dist/esm/table/AddColumn.js +1 -1
- package/dist/esm/table/BodyCell.js +5 -4
- package/dist/esm/table/BodyRow.js +2 -2
- package/dist/esm/table/CheckboxCell.js +1 -1
- package/dist/esm/table/ColumnFilters.js +97 -0
- package/dist/esm/table/HeaderCell.js +72 -44
- package/dist/esm/table/Table.js +59 -13
- package/dist/esm/table/types.js +29 -0
- package/dist/esm/table/useResizer.js +4 -4
- package/dist/esm/table/useVirtualTable.js +129 -21
- package/dist/esm/tree/TreeNode.js +51 -33
- package/dist/esm/tree/TreePanel.js +46 -12
- package/dist/esm/tree/useTree.js +202 -41
- package/dist/esm/tree/utils.js +40 -13
- package/dist/esm/virtual/Gallery.js +97 -45
- package/dist/esm/virtual/List.js +93 -39
- package/dist/esm/virtual/Scroller.js +16 -8
- package/dist/types/checklist/CheckList.d.ts +22 -0
- package/dist/types/histogram/Histogram.d.ts +28 -1
- package/dist/types/hooks/useFilteredList.d.ts +66 -5
- package/dist/types/hooks/usePagination.d.ts +19 -0
- package/dist/types/hooks/useSelectableList.d.ts +29 -0
- package/dist/types/json/JsonViewer.d.ts +27 -2
- package/dist/types/pagination/Pagination.d.ts +10 -1
- package/dist/types/table/ColumnFilters.d.ts +9 -0
- package/dist/types/table/HeaderCell.d.ts +1 -1
- package/dist/types/table/Table.d.ts +14 -1
- package/dist/types/table/types.d.ts +44 -5
- package/dist/types/table/useVirtualTable.d.ts +23 -9
- package/dist/types/tree/TreeNode.d.ts +1 -1
- package/dist/types/tree/TreePanel.d.ts +42 -1
- package/dist/types/tree/types.d.ts +65 -19
- package/dist/types/tree/useTree.d.ts +9 -10
- package/dist/types/tree/utils.d.ts +10 -3
- package/dist/types/virtual/Gallery.d.ts +42 -3
- package/dist/types/virtual/List.d.ts +42 -3
- package/package.json +16 -14
- package/src/checklist/CheckList.tsx +22 -0
- package/src/histogram/Histogram.tsx +40 -10
- package/src/hooks/useFilteredList.tsx +109 -9
- package/src/hooks/usePagination.tsx +32 -7
- package/src/hooks/useSelectableList.ts +29 -0
- package/src/i18n/ar.json +5 -0
- package/src/i18n/en.json +5 -0
- package/src/json/JsonViewer.tsx +71 -35
- package/src/pagination/Pagination.tsx +10 -0
- package/src/table/AddColumn.tsx +1 -1
- package/src/table/BodyCell.tsx +6 -4
- package/src/table/BodyRow.tsx +3 -2
- package/src/table/CheckboxCell.tsx +1 -1
- package/src/table/ColumnFilters.tsx +105 -0
- package/src/table/HeaderCell.tsx +72 -18
- package/src/table/Table.tsx +99 -11
- package/src/table/types.ts +46 -8
- package/src/table/useResizer.ts +5 -3
- package/src/table/useVirtualTable.ts +158 -27
- package/src/tree/TreeNode.tsx +98 -58
- package/src/tree/TreePanel.tsx +77 -6
- package/src/tree/types.ts +73 -18
- package/src/tree/useTree.ts +220 -44
- package/src/tree/utils.ts +58 -20
- package/src/virtual/Gallery.tsx +118 -54
- package/src/virtual/List.tsx +99 -39
- package/src/virtual/Scroller.tsx +16 -8
- package/dist/cjs/histogram/Histogram.module.css +0 -1
- package/dist/esm/histogram/Histogram.module.css +0 -1
|
@@ -43,9 +43,10 @@ var BodyCell = function BodyCell(_ref) {
|
|
|
43
43
|
return (_widths$get = widths.get(column.id.toString())) !== null && _widths$get !== void 0 ? _widths$get : column.width;
|
|
44
44
|
}, [widths, column]);
|
|
45
45
|
var content = react.useMemo(function () {
|
|
46
|
+
var _column$dataType;
|
|
46
47
|
var value = utilities.getByPath(item, column.id.toString());
|
|
47
48
|
if (column.renderer != null) {
|
|
48
|
-
return column.renderer(
|
|
49
|
+
return column.renderer(value, item, index);
|
|
49
50
|
}
|
|
50
51
|
if (column.dataType === "boolean") {
|
|
51
52
|
var _column$valueMap;
|
|
@@ -60,7 +61,7 @@ var BodyCell = function BodyCell(_ref) {
|
|
|
60
61
|
return column.valueMap[value];
|
|
61
62
|
}
|
|
62
63
|
}
|
|
63
|
-
if (column.dataType
|
|
64
|
+
if (["date", "time", "datetime"].includes((_column$dataType = column.dataType) !== null && _column$dataType !== void 0 ? _column$dataType : "")) {
|
|
64
65
|
return /*#__PURE__*/jsxRuntime.jsx(date.DateDisplay, {
|
|
65
66
|
date: value,
|
|
66
67
|
format: column.format
|
|
@@ -72,14 +73,14 @@ var BodyCell = function BodyCell(_ref) {
|
|
|
72
73
|
return value !== null && value !== void 0 ? value : "";
|
|
73
74
|
}, [item, column]);
|
|
74
75
|
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
75
|
-
className: "overflow-hidden bg-inherit start-0",
|
|
76
|
+
className: "overflow-hidden bg-inherit start-0 border-e group/table-col",
|
|
76
77
|
style: {
|
|
77
78
|
width: width !== null && width !== void 0 ? width : types.COL_DEFAULT_WIDTH,
|
|
78
79
|
minWidth: (_column$minWidth = column.minWidth) !== null && _column$minWidth !== void 0 ? _column$minWidth : types.COL_MIN_WIDTH,
|
|
79
80
|
maxWidth: (_column$maxWidth = column.maxWidth) !== null && _column$maxWidth !== void 0 ? _column$maxWidth : types.COL_MAX_WIDTH
|
|
80
81
|
},
|
|
81
82
|
children: /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
82
|
-
className: classNames("px-2 py-1
|
|
83
|
+
className: classNames("px-2 py-1", column.className, column.truncate && "truncate", column.align === "center" && "text-center", column.align === "end" && "text-end"),
|
|
83
84
|
children: content
|
|
84
85
|
})
|
|
85
86
|
});
|
|
@@ -55,14 +55,14 @@ var BodyRow = function BodyRow(_ref) {
|
|
|
55
55
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
56
56
|
role: "none",
|
|
57
57
|
"data-row": index,
|
|
58
|
-
className: classNames("flex flex-nowrap datatable-row data-
|
|
58
|
+
className: classNames("flex flex-nowrap datatable-row data-hilight:outline-1 -outline-offset-1 outline-primary-500 group/table-row", onRowClick && "hover:bg-primary-50 active:bg-primary-100", index % 2 ? "bg-even" : "bg-odd"),
|
|
59
59
|
onClick: function onClick() {
|
|
60
60
|
return checkableRows && keyProperty && !onRowClick ? toggleChecked(data[keyProperty]) : onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick(data);
|
|
61
61
|
},
|
|
62
62
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
63
63
|
className: wrapperStart,
|
|
64
64
|
children: [!!canExpand && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
65
|
-
className: classNames("group font-medium w-6 flex flex-nowrap text-start
|
|
65
|
+
className: classNames("group font-medium w-6 flex flex-nowrap text-start py-1", !canExpand(data) && "pointer-events-none opacity-35"),
|
|
66
66
|
children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
67
67
|
className: "p-1 text-tint-700 hover:text-primary-600",
|
|
68
68
|
icon: expanded ? core.CoreIcons.collapse : core.CoreIcons.expand,
|
|
@@ -30,7 +30,7 @@ var CheckboxCell = function CheckboxCell(_ref) {
|
|
|
30
30
|
var state = _ref.state,
|
|
31
31
|
_onClick = _ref.onClick;
|
|
32
32
|
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
33
|
-
className: "group font-medium border-e w-6 flex flex-nowrap text-start
|
|
33
|
+
className: "group font-medium border-e w-6 flex flex-nowrap text-start py-1",
|
|
34
34
|
children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
35
35
|
icon: state === 2 ? core.CoreIcons.checkboxInt : state === 1 ? core.CoreIcons.checkboxOn : core.CoreIcons.checkboxOff,
|
|
36
36
|
className: "p-1 text-tint-700 hover:text-primary-600",
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
4
|
+
var core = require('@react-fabric/core');
|
|
5
|
+
var form = require('@react-fabric/form');
|
|
6
|
+
var utilities = require('@react-fabric/utilities');
|
|
7
|
+
var react = require('react');
|
|
8
|
+
var useFilteredList = require('../hooks/useFilteredList.js');
|
|
9
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
10
|
+
|
|
11
|
+
var ListFilter = function ListFilter(_ref) {
|
|
12
|
+
var _ref$list = _ref.list,
|
|
13
|
+
list = _ref$list === void 0 ? utilities.EMPTY_ARRAY : _ref$list,
|
|
14
|
+
filter = _ref.filter,
|
|
15
|
+
onFilter = _ref.onFilter;
|
|
16
|
+
var _useState = react.useState(new Set(filter)),
|
|
17
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
18
|
+
selected = _useState2[0],
|
|
19
|
+
setSelected = _useState2[1];
|
|
20
|
+
var _useFilteredList = useFilteredList.useFilteredList(list, function (item, query) {
|
|
21
|
+
var _item$id;
|
|
22
|
+
return utilities.matchString((_item$id = item.id) !== null && _item$id !== void 0 ? _item$id : item, query);
|
|
23
|
+
}),
|
|
24
|
+
filteredList = _useFilteredList.filteredList,
|
|
25
|
+
query = _useFilteredList.query,
|
|
26
|
+
onSearch = _useFilteredList.onSearch;
|
|
27
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
28
|
+
className: "flex flex-col",
|
|
29
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("div", {
|
|
30
|
+
children: /*#__PURE__*/jsxRuntime.jsx(form.Search, {
|
|
31
|
+
autoFocus: true,
|
|
32
|
+
value: query,
|
|
33
|
+
onSearch: onSearch,
|
|
34
|
+
searchOnChange: true
|
|
35
|
+
})
|
|
36
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
37
|
+
className: "flex-1 overflow-auto scroll-thin",
|
|
38
|
+
children: [filteredList.map(function (v, idx) {
|
|
39
|
+
var _v$id, _v$label;
|
|
40
|
+
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
41
|
+
className: "flex gap-x-1 text-xs items-center",
|
|
42
|
+
children: /*#__PURE__*/jsxRuntime.jsx(form.Checkbox, {
|
|
43
|
+
checked: selected.has((_v$id = v.id) !== null && _v$id !== void 0 ? _v$id : v),
|
|
44
|
+
onChange: function onChange(b) {
|
|
45
|
+
var _v$id2, _v$id3;
|
|
46
|
+
var set = new Set(Array.from(selected.values()));
|
|
47
|
+
b ? set.add((_v$id2 = v.id) !== null && _v$id2 !== void 0 ? _v$id2 : v) : set["delete"]((_v$id3 = v.id) !== null && _v$id3 !== void 0 ? _v$id3 : v);
|
|
48
|
+
setSelected(set);
|
|
49
|
+
},
|
|
50
|
+
label: /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
51
|
+
className: "truncate",
|
|
52
|
+
children: (_v$label = v.label) !== null && _v$label !== void 0 ? _v$label : v
|
|
53
|
+
})
|
|
54
|
+
})
|
|
55
|
+
}, idx);
|
|
56
|
+
}), filteredList.length === 0 && /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
57
|
+
className: "text-muted text-xs",
|
|
58
|
+
children: "No items found"
|
|
59
|
+
})]
|
|
60
|
+
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
61
|
+
className: "flex justify-end",
|
|
62
|
+
children: /*#__PURE__*/jsxRuntime.jsx(core.DropdownDismiss, {
|
|
63
|
+
children: /*#__PURE__*/jsxRuntime.jsx(core.Button, {
|
|
64
|
+
size: "xs",
|
|
65
|
+
onClick: function onClick() {
|
|
66
|
+
return onFilter === null || onFilter === void 0 ? void 0 : onFilter(Array.from(selected));
|
|
67
|
+
},
|
|
68
|
+
children: "Apply"
|
|
69
|
+
})
|
|
70
|
+
})
|
|
71
|
+
})]
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
var ColumnFilters = function ColumnFilters(_ref2) {
|
|
75
|
+
var type = _ref2.type,
|
|
76
|
+
list = _ref2.list,
|
|
77
|
+
filter = _ref2.filter,
|
|
78
|
+
onFilter = _ref2.onFilter;
|
|
79
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
80
|
+
className: "flex flex-col min-w-[16rem]",
|
|
81
|
+
children: [list && /*#__PURE__*/jsxRuntime.jsx(ListFilter, {
|
|
82
|
+
list: list,
|
|
83
|
+
filter: filter,
|
|
84
|
+
onFilter: onFilter
|
|
85
|
+
}), !list && type === "string" && /*#__PURE__*/jsxRuntime.jsx(form.Input, {
|
|
86
|
+
autoFocus: true,
|
|
87
|
+
allowClear: true,
|
|
88
|
+
value: filter,
|
|
89
|
+
onEnterPressed: function onEnterPressed(e) {
|
|
90
|
+
var _e$target$value;
|
|
91
|
+
return onFilter((_e$target$value = e.target.value) !== null && _e$target$value !== void 0 ? _e$target$value : "");
|
|
92
|
+
}
|
|
93
|
+
})]
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
exports.ColumnFilters = ColumnFilters;
|
|
@@ -1,51 +1,37 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
|
+
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
|
|
3
5
|
var core = require('@react-fabric/core');
|
|
6
|
+
var utilities = require('@react-fabric/utilities');
|
|
4
7
|
var react = require('react');
|
|
8
|
+
var ColumnFilters = require('./ColumnFilters.js');
|
|
5
9
|
var Context = require('./Context.js');
|
|
6
10
|
var types = require('./types.js');
|
|
7
11
|
var jsxRuntime = require('react/jsx-runtime');
|
|
8
12
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
* @version: 1.0.0
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* The MIT License (MIT)
|
|
15
|
-
* Copyright (c) 2024 Adarsh Pastakia
|
|
16
|
-
*
|
|
17
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
|
18
|
-
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
|
19
|
-
* including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
20
|
-
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
|
21
|
-
* subject to the following conditions:
|
|
22
|
-
*
|
|
23
|
-
* The above copyright notice and this permission notice shall be included in all copies or substantial
|
|
24
|
-
* portions of the Software.
|
|
25
|
-
*
|
|
26
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
27
|
-
* TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
28
|
-
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
29
|
-
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
30
|
-
*/
|
|
31
|
-
|
|
13
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
14
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
32
15
|
var HeaderCell = function HeaderCell(_ref) {
|
|
33
16
|
var id = _ref.id,
|
|
17
|
+
field = _ref.field,
|
|
18
|
+
dataType = _ref.dataType,
|
|
34
19
|
label = _ref.label,
|
|
35
20
|
icon = _ref.icon,
|
|
36
|
-
|
|
37
|
-
iconColor = _ref.iconColor,
|
|
38
|
-
rtlFlip = _ref.rtlFlip;
|
|
39
|
-
_ref.actions;
|
|
21
|
+
actions = _ref.actions;
|
|
40
22
|
_ref.locked;
|
|
41
|
-
var
|
|
23
|
+
var filter = _ref.filter,
|
|
24
|
+
filterable = _ref.filterable,
|
|
25
|
+
filterOptions = _ref.filterOptions,
|
|
26
|
+
tooltip = _ref.tooltip,
|
|
42
27
|
sortable = _ref.sortable,
|
|
43
28
|
resizable = _ref.resizable,
|
|
44
29
|
_width = _ref.width,
|
|
45
30
|
maxWidth = _ref.maxWidth,
|
|
46
31
|
minWidth = _ref.minWidth,
|
|
47
32
|
sort = _ref.sort,
|
|
48
|
-
onSort = _ref.onSort
|
|
33
|
+
onSort = _ref.onSort,
|
|
34
|
+
_onFilter = _ref.onFilter;
|
|
49
35
|
var _useTableContext = Context.useTableContext(),
|
|
50
36
|
startResize = _useTableContext.startResize,
|
|
51
37
|
widths = _useTableContext.widths;
|
|
@@ -53,30 +39,68 @@ var HeaderCell = function HeaderCell(_ref) {
|
|
|
53
39
|
var _widths$get;
|
|
54
40
|
return (_widths$get = widths.get(id.toString())) !== null && _widths$get !== void 0 ? _widths$get : _width;
|
|
55
41
|
}, [widths, _width, id]);
|
|
56
|
-
var handleSort = react.useCallback(function () {
|
|
42
|
+
var handleSort = react.useCallback(function (order) {
|
|
57
43
|
sortable && (onSort === null || onSort === void 0 ? void 0 : onSort({
|
|
58
44
|
id: id.toString(),
|
|
59
|
-
order: (sort === null || sort === void 0 ? void 0 : sort.id) === id && sort.order === "asc" ? "desc" : "asc"
|
|
45
|
+
order: order !== null && order !== void 0 ? order : (sort === null || sort === void 0 ? void 0 : sort.id) === id && sort.order === "asc" ? "desc" : "asc"
|
|
60
46
|
}));
|
|
61
|
-
}, [onSort,
|
|
47
|
+
}, [onSort, sort, sortable]);
|
|
62
48
|
var menus = react.useMemo(function () {
|
|
63
49
|
var ret = [];
|
|
50
|
+
if (filterable && (dataType !== null && dataType !== void 0 ? dataType : filterOptions)) {
|
|
51
|
+
ret.push( /*#__PURE__*/jsxRuntime.jsx(core.Menu, {
|
|
52
|
+
label: "Filter",
|
|
53
|
+
icon: filter ? core.CoreIcons.tick : "",
|
|
54
|
+
trigger: "click",
|
|
55
|
+
children: /*#__PURE__*/jsxRuntime.jsx(ColumnFilters.ColumnFilters, {
|
|
56
|
+
type: dataType,
|
|
57
|
+
list: filterOptions,
|
|
58
|
+
filter: filter,
|
|
59
|
+
onFilter: function onFilter(value) {
|
|
60
|
+
return _onFilter === null || _onFilter === void 0 ? void 0 : _onFilter(field !== null && field !== void 0 ? field : id, value);
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
}, "filters"));
|
|
64
|
+
}
|
|
64
65
|
if (sortable) {
|
|
65
66
|
ret.push( /*#__PURE__*/jsxRuntime.jsx(core.MenuItem, {
|
|
66
67
|
label: "Sort ascending",
|
|
67
|
-
icon: core.CoreIcons.sortAsc
|
|
68
|
+
icon: core.CoreIcons.sortAsc,
|
|
69
|
+
onClick: function onClick() {
|
|
70
|
+
return handleSort("asc");
|
|
71
|
+
}
|
|
68
72
|
}, "sort-asc"), /*#__PURE__*/jsxRuntime.jsx(core.MenuItem, {
|
|
69
73
|
label: "Sort descending",
|
|
70
|
-
icon: core.CoreIcons.sortDesc
|
|
74
|
+
icon: core.CoreIcons.sortDesc,
|
|
75
|
+
onClick: function onClick() {
|
|
76
|
+
return handleSort("desc");
|
|
77
|
+
}
|
|
71
78
|
}, "sort-desc"));
|
|
72
79
|
}
|
|
80
|
+
if (actions) {
|
|
81
|
+
var _ret;
|
|
82
|
+
ret.push( /*#__PURE__*/jsxRuntime.jsx(core.Divider, {}, "div"));
|
|
83
|
+
(_ret = ret).push.apply(_ret, _toConsumableArray(actions));
|
|
84
|
+
}
|
|
85
|
+
if (ret.length === 1) {
|
|
86
|
+
ret = [/*#__PURE__*/jsxRuntime.jsx(ColumnFilters.ColumnFilters, {
|
|
87
|
+
type: dataType,
|
|
88
|
+
list: filterOptions,
|
|
89
|
+
filter: filter,
|
|
90
|
+
onFilter: function onFilter(value) {
|
|
91
|
+
return _onFilter === null || _onFilter === void 0 ? void 0 : _onFilter(field !== null && field !== void 0 ? field : id, value);
|
|
92
|
+
}
|
|
93
|
+
}, "filters")];
|
|
94
|
+
}
|
|
73
95
|
return ret;
|
|
74
|
-
}, [sortable]);
|
|
96
|
+
}, [sortable, actions, _onFilter, handleSort]);
|
|
75
97
|
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
76
98
|
role: "none",
|
|
77
99
|
"data-id": id,
|
|
78
|
-
onClick:
|
|
79
|
-
|
|
100
|
+
onClick: function onClick() {
|
|
101
|
+
return handleSort();
|
|
102
|
+
},
|
|
103
|
+
className: "group/tool font-medium border-e flex flex-nowrap text-start items-center table-header-cell",
|
|
80
104
|
style: {
|
|
81
105
|
width: width !== null && width !== void 0 ? width : types.COL_DEFAULT_WIDTH,
|
|
82
106
|
minWidth: minWidth !== null && minWidth !== void 0 ? minWidth : types.COL_MIN_WIDTH,
|
|
@@ -87,12 +111,7 @@ var HeaderCell = function HeaderCell(_ref) {
|
|
|
87
111
|
disabled: !(tooltip !== null && tooltip !== void 0 ? tooltip : label),
|
|
88
112
|
children: /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
89
113
|
className: "flex-initial px-2 py-1 text-sm truncate sticky start-0",
|
|
90
|
-
children: [icon && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
91
|
-
icon: icon,
|
|
92
|
-
bg: iconBg,
|
|
93
|
-
color: iconColor,
|
|
94
|
-
rtlFlip: rtlFlip
|
|
95
|
-
}), /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
114
|
+
children: [icon && /*#__PURE__*/jsxRuntime.jsx(core.Icon, _objectSpread({}, core.getIconProps(icon))), /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
96
115
|
children: label !== null && label !== void 0 ? label : " "
|
|
97
116
|
})]
|
|
98
117
|
})
|
|
@@ -112,6 +131,15 @@ var HeaderCell = function HeaderCell(_ref) {
|
|
|
112
131
|
className: "text-sm",
|
|
113
132
|
children: menus
|
|
114
133
|
})
|
|
134
|
+
}), filterable && !utilities.isEmpty(filter) && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
|
|
135
|
+
size: "sm",
|
|
136
|
+
variant: "link",
|
|
137
|
+
"aria-label": "clear filter",
|
|
138
|
+
stopPropagation: true,
|
|
139
|
+
icon: core.CoreIcons.funnelRemove,
|
|
140
|
+
onClick: function onClick() {
|
|
141
|
+
return _onFilter === null || _onFilter === void 0 ? void 0 : _onFilter(id);
|
|
142
|
+
}
|
|
115
143
|
}), resizable && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
116
144
|
role: "none",
|
|
117
145
|
className: "cursor-col-resize border-e bg-transparent border-tint-200 w-[5px] self-stretch",
|
package/dist/cjs/table/Table.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
4
|
var core = require('@react-fabric/core');
|
|
5
5
|
var utilities = require('@react-fabric/utilities');
|
|
6
|
+
var classNames = require('classnames');
|
|
6
7
|
var react = require('react');
|
|
7
8
|
var reactI18next = require('react-i18next');
|
|
8
9
|
var AddColumn = require('./AddColumn.js');
|
|
@@ -18,23 +19,31 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
18
19
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
19
20
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
20
21
|
var Table = function Table(_ref) {
|
|
21
|
-
var _state$start, _state$cols, _state$end, _items
|
|
22
|
+
var _state$start, _state$cols, _state$end, _items, _state$start2, _state$cols2, _state$end2;
|
|
22
23
|
var ref = _ref.ref,
|
|
23
24
|
data = _ref.data,
|
|
24
25
|
columns = _ref.columns,
|
|
25
|
-
keyProperty = _ref.keyProperty,
|
|
26
|
+
_ref$keyProperty = _ref.keyProperty,
|
|
27
|
+
keyProperty = _ref$keyProperty === void 0 ? "id" : _ref$keyProperty,
|
|
28
|
+
groupProperty = _ref.groupProperty,
|
|
26
29
|
checkableRows = _ref.checkableRows,
|
|
27
30
|
initialScroll = _ref.initialScroll,
|
|
28
31
|
hideableColumns = _ref.hideableColumns,
|
|
29
32
|
sort = _ref.sort,
|
|
30
33
|
loading = _ref.loading,
|
|
34
|
+
checked = _ref.checked,
|
|
31
35
|
emptyDisplay = _ref.emptyDisplay,
|
|
36
|
+
groupRenderer = _ref.groupRenderer,
|
|
32
37
|
canExpand = _ref.canExpand,
|
|
33
38
|
children = _ref.children,
|
|
34
39
|
onSort = _ref.onSort,
|
|
40
|
+
onFilter = _ref.onFilter,
|
|
35
41
|
onScroll = _ref.onScroll,
|
|
36
42
|
onRowClick = _ref.onRowClick,
|
|
37
|
-
onCheckedChanged = _ref.onCheckedChanged
|
|
43
|
+
onCheckedChanged = _ref.onCheckedChanged,
|
|
44
|
+
_ref$total = _ref.total,
|
|
45
|
+
total = _ref$total === void 0 ? 0 : _ref$total,
|
|
46
|
+
onLoadMore = _ref.onLoadMore;
|
|
38
47
|
var _useTranslation = reactI18next.useTranslation("data"),
|
|
39
48
|
t = _useTranslation.t;
|
|
40
49
|
var fireCheckChanged = core.useDebounce(function (checkedIds) {
|
|
@@ -43,17 +52,28 @@ var Table = function Table(_ref) {
|
|
|
43
52
|
var _useTableColumns = useTableColumns.useTableColumns(columns),
|
|
44
53
|
state = _useTableColumns.state,
|
|
45
54
|
onHide = _useTableColumns.onHide;
|
|
46
|
-
var _useVirtualTable = useVirtualTable.useVirtualTable(data,
|
|
55
|
+
var _useVirtualTable = useVirtualTable.useVirtualTable(data, {
|
|
56
|
+
checked: checked,
|
|
57
|
+
keyProperty: keyProperty,
|
|
58
|
+
groupProperty: groupProperty,
|
|
59
|
+
total: total,
|
|
60
|
+
loading: loading,
|
|
61
|
+
onLoadMore: onLoadMore,
|
|
62
|
+
onCheckChanged: fireCheckChanged
|
|
63
|
+
}),
|
|
47
64
|
scrollerRef = _useVirtualTable.scrollerRef,
|
|
48
65
|
items = _useVirtualTable.items,
|
|
49
66
|
top = _useVirtualTable.top,
|
|
50
67
|
checkState = _useVirtualTable.checkState,
|
|
51
68
|
virtualizer = _useVirtualTable.virtualizer,
|
|
69
|
+
hasActiveSticky = _useVirtualTable.hasActiveSticky,
|
|
52
70
|
toggleExpand = _useVirtualTable.toggleExpand,
|
|
53
71
|
toggleChecked = _useVirtualTable.toggleChecked,
|
|
54
72
|
toggleAllChecked = _useVirtualTable.toggleAllChecked,
|
|
73
|
+
toggleGroupExpand = _useVirtualTable.toggleGroupExpand,
|
|
55
74
|
getData = _useVirtualTable.getData,
|
|
56
75
|
totalSize = _useVirtualTable.totalSize,
|
|
76
|
+
isActiveSticky = _useVirtualTable.isActiveSticky,
|
|
57
77
|
measureElement = _useVirtualTable.measureElement;
|
|
58
78
|
var refBody = react.useRef(null);
|
|
59
79
|
var wrapperStart = react.useMemo(function () {
|
|
@@ -108,9 +128,11 @@ var Table = function Table(_ref) {
|
|
|
108
128
|
style: {
|
|
109
129
|
gridTemplate: "\"head\" auto \"loader\" auto \"content\" 1fr \"foot\" auto/1fr"
|
|
110
130
|
},
|
|
131
|
+
"data-ref": "tableScroller",
|
|
111
132
|
ref: scrollerRef,
|
|
112
133
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
113
|
-
|
|
134
|
+
"data-ref": "tableHeader",
|
|
135
|
+
className: "bg-base font-medium sticky top-0 h-8 area-head border-b select-none flex flex-nowrap z-3",
|
|
114
136
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
115
137
|
className: wrapperStart,
|
|
116
138
|
children: [canExpand && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
@@ -121,20 +143,23 @@ var Table = function Table(_ref) {
|
|
|
121
143
|
}), (_state$start = state.start) === null || _state$start === void 0 ? void 0 : _state$start.map(function (col, idx) {
|
|
122
144
|
return /*#__PURE__*/jsxRuntime.jsx(HeaderCell.HeaderCell, _objectSpread(_objectSpread({}, col), {}, {
|
|
123
145
|
sort: sort,
|
|
124
|
-
onSort: onSort
|
|
146
|
+
onSort: onSort,
|
|
147
|
+
onFilter: onFilter
|
|
125
148
|
}), idx);
|
|
126
149
|
})]
|
|
127
150
|
}), (_state$cols = state.cols) === null || _state$cols === void 0 ? void 0 : _state$cols.map(function (col, idx) {
|
|
128
151
|
return /*#__PURE__*/jsxRuntime.jsx(HeaderCell.HeaderCell, _objectSpread(_objectSpread({}, col), {}, {
|
|
129
152
|
sort: sort,
|
|
130
|
-
onSort: onSort
|
|
153
|
+
onSort: onSort,
|
|
154
|
+
onFilter: onFilter
|
|
131
155
|
}), idx);
|
|
132
156
|
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
133
157
|
className: wrapperEnd,
|
|
134
158
|
children: [(_state$end = state.end) === null || _state$end === void 0 ? void 0 : _state$end.map(function (col, idx) {
|
|
135
159
|
return /*#__PURE__*/jsxRuntime.jsx(HeaderCell.HeaderCell, _objectSpread(_objectSpread({}, col), {}, {
|
|
136
160
|
sort: sort,
|
|
137
|
-
onSort: onSort
|
|
161
|
+
onSort: onSort,
|
|
162
|
+
onFilter: onFilter
|
|
138
163
|
}), idx);
|
|
139
164
|
}), hideableColumns && /*#__PURE__*/jsxRuntime.jsx(AddColumn.AddColumn, {
|
|
140
165
|
onClick: onHide,
|
|
@@ -144,21 +169,42 @@ var Table = function Table(_ref) {
|
|
|
144
169
|
})]
|
|
145
170
|
})]
|
|
146
171
|
}), loading && /*#__PURE__*/jsxRuntime.jsx(core.Loading, {}), data.length > 0 && /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
147
|
-
className: "area-content flex flex-col flex-nowrap",
|
|
172
|
+
className: "area-content flex flex-col flex-nowrap min-h-full",
|
|
148
173
|
style: {
|
|
149
174
|
height: totalSize()
|
|
150
175
|
},
|
|
151
176
|
ref: refBody,
|
|
152
177
|
children: [/*#__PURE__*/jsxRuntime.jsx("div", {
|
|
153
178
|
style: {
|
|
154
|
-
height: (_items
|
|
179
|
+
height: (_items = items[hasActiveSticky ? 1 : 0]) === null || _items === void 0 ? void 0 : _items.start
|
|
155
180
|
}
|
|
156
181
|
}), items.map(function (_ref2) {
|
|
182
|
+
var _groupRenderer;
|
|
157
183
|
var index = _ref2.index,
|
|
158
184
|
key = _ref2.key;
|
|
159
185
|
var data = getData(index);
|
|
160
|
-
return /*#__PURE__*/jsxRuntime.
|
|
161
|
-
|
|
186
|
+
return "__GROUP__" in data ? /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
187
|
+
ref: measureElement,
|
|
188
|
+
"data-index": index,
|
|
189
|
+
className: classNames("px-2 py-1 text-md bg-base border-y border-tint-100 cursor-pointer flex items-center gap-1 z-2", isActiveSticky(index) && "sticky top-8"),
|
|
190
|
+
role: "none",
|
|
191
|
+
onClick: function onClick() {
|
|
192
|
+
return toggleGroupExpand(data.key);
|
|
193
|
+
},
|
|
194
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
195
|
+
rtlFlip: true,
|
|
196
|
+
icon: data.open ? core.CoreIcons.chevronDown : core.CoreIcons.chevronRight
|
|
197
|
+
}), (_groupRenderer = groupRenderer === null || groupRenderer === void 0 ? void 0 : groupRenderer(data)) !== null && _groupRenderer !== void 0 ? _groupRenderer : /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
198
|
+
className: "flex gap-1 items-center",
|
|
199
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("span", {
|
|
200
|
+
children: data.key
|
|
201
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("span", {
|
|
202
|
+
className: "text-sm",
|
|
203
|
+
children: ["(", data.itemCount, ")"]
|
|
204
|
+
})]
|
|
205
|
+
})]
|
|
206
|
+
}, key) : /*#__PURE__*/jsxRuntime.jsx(BodyRow.BodyRow, {
|
|
207
|
+
rowKey: key.toString(),
|
|
162
208
|
index: index,
|
|
163
209
|
checkableRows: checkableRows,
|
|
164
210
|
checked: keyProperty && checkState.checked.includes(data[keyProperty]) ? 1 : 0,
|
package/dist/cjs/table/types.js
CHANGED
|
@@ -27,6 +27,35 @@ var COL_MIN_WIDTH = "3rem";
|
|
|
27
27
|
var COL_MAX_WIDTH = "64rem";
|
|
28
28
|
var COL_DEFAULT_WIDTH = "12rem";
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* TableColumn interface defines the structure of a column in a table.
|
|
32
|
+
* It includes properties for column identification, display options, alignment,
|
|
33
|
+
* visibility, resizing, sorting, filtering, and rendering.
|
|
34
|
+
*
|
|
35
|
+
* @template T - The type of data the column will represent, defaulting to KeyValue.
|
|
36
|
+
* @property {keyof T | string} id - Unique identifier for the column.
|
|
37
|
+
* @property {"string" | "number" | "boolean" | "datetime" | "date" | "time" | "unknown"} [dataType] - Data type of the column values.
|
|
38
|
+
* @property {string} [label] - Display label for the column header.
|
|
39
|
+
* @property {string} [tooltip] - Tooltip text for the column header.
|
|
40
|
+
* @property {string} [format] - Format string for displaying the column values.
|
|
41
|
+
* @property {"start" | "center" | "end"} [align] - Text alignment within the column.
|
|
42
|
+
* @property {"start" | "end"} [locked] - Indicates if the column is locked at the start or end.
|
|
43
|
+
* @property {boolean} [hidden] - Whether the column is hidden.
|
|
44
|
+
* @property {boolean} [truncate] - Whether to truncate the text in the column.
|
|
45
|
+
* @property {boolean} [hideable] - Whether the column can be hidden by the user.
|
|
46
|
+
* @property {boolean} [resizable] - Whether the column can be resized by the user.
|
|
47
|
+
* @property {boolean} [sortable] - Whether the column can be sorted.
|
|
48
|
+
* @property {boolean} [filterable] - Whether the column can be filtered.
|
|
49
|
+
* @property {AnyObject} [filter] - Filter criteria for the column.
|
|
50
|
+
* @property {ReactElement[]} [actions] - Array of action elements to be displayed in the column.
|
|
51
|
+
* @property {AnyObject[]} [filterOptions] - Options for filtering the column.
|
|
52
|
+
* @property {string | number} [width] - Width of the column.
|
|
53
|
+
* @property {string | number} [minWidth] - Minimum width of the column.
|
|
54
|
+
* @property {string | number} [maxWidth] - Maximum width of the column.
|
|
55
|
+
* @property {KeyValue} [valueMap] - Mapping of values for the column.
|
|
56
|
+
* @property {(value: AnyObject, data: T, index: number) => Elements<AnyObject>} [renderer] - Custom renderer function for the column values.
|
|
57
|
+
*/
|
|
58
|
+
|
|
30
59
|
exports.COL_DEFAULT_WIDTH = COL_DEFAULT_WIDTH;
|
|
31
60
|
exports.COL_MAX_WIDTH = COL_MAX_WIDTH;
|
|
32
61
|
exports.COL_MIN_WIDTH = COL_MIN_WIDTH;
|
|
@@ -44,14 +44,14 @@ var useResizer = function useResizer(colEl, ghostEl, callback) {
|
|
|
44
44
|
/** ***************** attach handlers *******************/
|
|
45
45
|
var box = colEl.getBoundingClientRect();
|
|
46
46
|
if (colEl.parentElement != null) {
|
|
47
|
-
var _colEl$
|
|
48
|
-
var parentBox = (_colEl$
|
|
47
|
+
var _colEl$closest;
|
|
48
|
+
var parentBox = (_colEl$closest = colEl.closest("[data-ref='tableScroller']")) === null || _colEl$closest === void 0 ? void 0 : _colEl$closest.getBoundingClientRect();
|
|
49
49
|
if (isRtl) {
|
|
50
50
|
placeholder.style.left = "unset";
|
|
51
|
-
placeholder.style.right = "".concat(
|
|
51
|
+
placeholder.style.right = "".concat(parentBox.width - box.right, "px");
|
|
52
52
|
} else {
|
|
53
53
|
placeholder.style.right = "unset";
|
|
54
|
-
placeholder.style.left = "".concat(box.left
|
|
54
|
+
placeholder.style.left = "".concat(box.left, "px");
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
placeholder.style.width = "".concat(colEl.offsetWidth, "px");
|