@react-fabric/data 1.0.0-beta.5 → 1.0.0-beta.52
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 +48 -16
- package/dist/cjs/histogram/Histogram.js +48 -10
- package/dist/cjs/hooks/useFilteredList.js +20 -0
- 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 +38 -5
- package/dist/cjs/table/BodyRow.js +107 -0
- package/dist/cjs/table/CheckboxCell.js +1 -1
- package/dist/cjs/table/ColumnFilters.js +97 -0
- package/dist/cjs/table/HeaderCell.js +70 -37
- package/dist/cjs/table/Table.js +113 -71
- package/dist/cjs/table/types.js +29 -0
- package/dist/cjs/table/useResizer.js +4 -4
- package/dist/cjs/table/useVirtualTable.js +122 -18
- package/dist/cjs/tree/TreeNode.js +45 -25
- package/dist/cjs/tree/TreePanel.js +28 -10
- package/dist/cjs/tree/useTree.js +97 -15
- package/dist/cjs/tree/utils.js +20 -5
- package/dist/cjs/virtual/Gallery.js +84 -35
- package/dist/cjs/virtual/List.js +82 -32
- package/dist/esm/checklist/CheckList.js +50 -18
- package/dist/esm/histogram/Histogram.js +49 -11
- package/dist/esm/hooks/useFilteredList.js +20 -0
- 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 +38 -5
- package/dist/esm/table/BodyRow.js +107 -0
- package/dist/esm/table/CheckboxCell.js +1 -1
- package/dist/esm/table/ColumnFilters.js +97 -0
- package/dist/esm/table/HeaderCell.js +71 -38
- package/dist/esm/table/Table.js +115 -73
- package/dist/esm/table/types.js +29 -0
- package/dist/esm/table/useResizer.js +4 -4
- package/dist/esm/table/useVirtualTable.js +124 -20
- package/dist/esm/tree/TreeNode.js +47 -27
- package/dist/esm/tree/TreePanel.js +28 -10
- package/dist/esm/tree/useTree.js +99 -17
- package/dist/esm/tree/utils.js +20 -5
- package/dist/esm/virtual/Gallery.js +84 -35
- package/dist/esm/virtual/List.js +82 -32
- package/dist/types/checklist/CheckList.d.ts +24 -2
- package/dist/types/histogram/Histogram.d.ts +31 -4
- package/dist/types/hooks/useFilteredList.d.ts +20 -2
- package/dist/types/hooks/usePagination.d.ts +19 -0
- package/dist/types/hooks/useSelectableList.d.ts +29 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/json/JsonViewer.d.ts +27 -2
- package/dist/types/pagination/Pagination.d.ts +10 -1
- package/dist/types/table/AddColumn.d.ts +2 -2
- package/dist/types/table/BodyCell.d.ts +4 -3
- package/dist/types/table/BodyRow.d.ts +20 -0
- package/dist/types/table/ColumnFilters.d.ts +9 -0
- package/dist/types/table/EmptyCell.d.ts +2 -2
- package/dist/types/table/HeaderCell.d.ts +2 -2
- package/dist/types/table/Table.d.ts +14 -1
- package/dist/types/table/types.d.ts +48 -7
- package/dist/types/table/useTableColumns.d.ts +6 -6
- package/dist/types/table/useVirtualTable.d.ts +23 -8
- 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 +25 -5
- package/dist/types/tree/useTree.d.ts +3 -10
- package/dist/types/tree/utils.d.ts +4 -1
- package/dist/types/virtual/Gallery.d.ts +44 -4
- package/dist/types/virtual/List.d.ts +44 -4
- package/package.json +13 -10
- package/src/checklist/CheckList.tsx +103 -77
- package/src/histogram/Histogram.tsx +45 -11
- package/src/hooks/useFilteredList.tsx +19 -0
- 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/index.ts +1 -1
- package/src/json/JsonViewer.tsx +71 -35
- package/src/pagination/Pagination.tsx +10 -0
- package/src/table/AddColumn.tsx +3 -3
- package/src/table/BodyCell.tsx +34 -5
- package/src/table/BodyRow.tsx +143 -0
- package/src/table/CheckboxCell.tsx +1 -1
- package/src/table/ColumnFilters.tsx +105 -0
- package/src/table/EmptyCell.tsx +2 -2
- package/src/table/HeaderCell.tsx +72 -14
- package/src/table/Table.tsx +177 -77
- package/src/table/types.ts +52 -6
- package/src/table/useResizer.ts +5 -3
- package/src/table/useTableColumns.ts +7 -7
- package/src/table/useVirtualTable.ts +146 -24
- package/src/tree/TreeNode.tsx +98 -56
- package/src/tree/TreePanel.tsx +64 -3
- package/src/tree/types.ts +32 -4
- package/src/tree/useTree.ts +109 -26
- package/src/tree/utils.ts +23 -8
- package/src/virtual/Gallery.tsx +96 -42
- package/src/virtual/List.tsx +82 -33
- package/dist/cjs/histogram/Histogram.module.css +0 -1
- package/dist/esm/histogram/Histogram.module.css +0 -1
package/dist/cjs/table/Table.js
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
4
|
var core = require('@react-fabric/core');
|
|
5
|
+
var utilities = require('@react-fabric/utilities');
|
|
5
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');
|
|
9
|
-
var
|
|
10
|
+
var BodyRow = require('./BodyRow.js');
|
|
10
11
|
var CheckboxCell = require('./CheckboxCell.js');
|
|
11
12
|
var Context = require('./Context.js');
|
|
12
13
|
var EmptyCell = require('./EmptyCell.js');
|
|
@@ -18,16 +19,26 @@ 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,
|
|
30
|
+
initialScroll = _ref.initialScroll,
|
|
27
31
|
hideableColumns = _ref.hideableColumns,
|
|
28
32
|
sort = _ref.sort,
|
|
29
33
|
loading = _ref.loading,
|
|
34
|
+
checked = _ref.checked,
|
|
35
|
+
emptyDisplay = _ref.emptyDisplay,
|
|
36
|
+
groupRenderer = _ref.groupRenderer,
|
|
37
|
+
canExpand = _ref.canExpand,
|
|
38
|
+
children = _ref.children,
|
|
30
39
|
onSort = _ref.onSort,
|
|
40
|
+
onFilter = _ref.onFilter,
|
|
41
|
+
onScroll = _ref.onScroll,
|
|
31
42
|
onRowClick = _ref.onRowClick,
|
|
32
43
|
onCheckedChanged = _ref.onCheckedChanged;
|
|
33
44
|
var _useTranslation = reactI18next.useTranslation("data"),
|
|
@@ -38,14 +49,25 @@ var Table = function Table(_ref) {
|
|
|
38
49
|
var _useTableColumns = useTableColumns.useTableColumns(columns),
|
|
39
50
|
state = _useTableColumns.state,
|
|
40
51
|
onHide = _useTableColumns.onHide;
|
|
41
|
-
var _useVirtualTable = useVirtualTable.useVirtualTable(data,
|
|
52
|
+
var _useVirtualTable = useVirtualTable.useVirtualTable(data, {
|
|
53
|
+
checked: checked,
|
|
54
|
+
keyProperty: keyProperty,
|
|
55
|
+
groupProperty: groupProperty,
|
|
56
|
+
onCheckChanged: fireCheckChanged
|
|
57
|
+
}),
|
|
42
58
|
scrollerRef = _useVirtualTable.scrollerRef,
|
|
43
59
|
items = _useVirtualTable.items,
|
|
60
|
+
top = _useVirtualTable.top,
|
|
44
61
|
checkState = _useVirtualTable.checkState,
|
|
62
|
+
virtualizer = _useVirtualTable.virtualizer,
|
|
63
|
+
hasActiveSticky = _useVirtualTable.hasActiveSticky,
|
|
64
|
+
toggleExpand = _useVirtualTable.toggleExpand,
|
|
45
65
|
toggleChecked = _useVirtualTable.toggleChecked,
|
|
46
66
|
toggleAllChecked = _useVirtualTable.toggleAllChecked,
|
|
67
|
+
toggleGroupExpand = _useVirtualTable.toggleGroupExpand,
|
|
47
68
|
getData = _useVirtualTable.getData,
|
|
48
69
|
totalSize = _useVirtualTable.totalSize,
|
|
70
|
+
isActiveSticky = _useVirtualTable.isActiveSticky,
|
|
49
71
|
measureElement = _useVirtualTable.measureElement;
|
|
50
72
|
var refBody = react.useRef(null);
|
|
51
73
|
var wrapperStart = react.useMemo(function () {
|
|
@@ -54,66 +76,84 @@ var Table = function Table(_ref) {
|
|
|
54
76
|
var wrapperEnd = react.useMemo(function () {
|
|
55
77
|
return "bg-inherit sticky end-0 flex flex-nowrap z-1 border-s -ms-px";
|
|
56
78
|
}, []);
|
|
79
|
+
react.useLayoutEffect(function () {
|
|
80
|
+
setTimeout(function () {
|
|
81
|
+
initialScroll && virtualizer.scrollToIndex(initialScroll, {
|
|
82
|
+
align: "start"
|
|
83
|
+
});
|
|
84
|
+
}, 100);
|
|
85
|
+
}, []);
|
|
57
86
|
react.useImperativeHandle(ref, function () {
|
|
58
87
|
return {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return el && (el.dataset.hilight = undefined);
|
|
63
|
-
});
|
|
64
|
-
var el = (_refBody$current2 = refBody.current) === null || _refBody$current2 === void 0 ? void 0 : _refBody$current2.querySelector("[data-row=\"".concat(row, "\"]"));
|
|
65
|
-
el === null || el === void 0 || el.scrollIntoView({
|
|
66
|
-
behavior: "smooth",
|
|
67
|
-
block: "center"
|
|
88
|
+
scrollTo: function scrollTo(row) {
|
|
89
|
+
virtualizer.scrollToIndex(row, {
|
|
90
|
+
align: "start"
|
|
68
91
|
});
|
|
69
|
-
el && (el.dataset.hilight = "true");
|
|
70
92
|
},
|
|
71
|
-
|
|
72
|
-
var
|
|
73
|
-
(
|
|
74
|
-
|
|
93
|
+
hilight: function hilight(row) {
|
|
94
|
+
var _scrollerRef$current;
|
|
95
|
+
(_scrollerRef$current = scrollerRef.current) === null || _scrollerRef$current === void 0 || (_scrollerRef$current = _scrollerRef$current.querySelector(".hilight")) === null || _scrollerRef$current === void 0 || _scrollerRef$current.classList.remove("hilight", "ring-1");
|
|
96
|
+
virtualizer.scrollToIndex(Math.floor(row), {
|
|
97
|
+
align: "start"
|
|
75
98
|
});
|
|
99
|
+
setTimeout(function () {
|
|
100
|
+
var _scrollerRef$current2;
|
|
101
|
+
(_scrollerRef$current2 = scrollerRef.current) === null || _scrollerRef$current2 === void 0 || (_scrollerRef$current2 = _scrollerRef$current2.querySelector("[data-index=\"".concat(row, "\"]"))) === null || _scrollerRef$current2 === void 0 || _scrollerRef$current2.classList.add("hilight", "ring-1");
|
|
102
|
+
}, 100);
|
|
76
103
|
},
|
|
77
|
-
|
|
78
|
-
var
|
|
79
|
-
|
|
80
|
-
el === null || el === void 0 || el.scrollIntoView({
|
|
81
|
-
behavior: "smooth"
|
|
82
|
-
});
|
|
104
|
+
unhilight: function unhilight() {
|
|
105
|
+
var _scrollerRef$current3;
|
|
106
|
+
(_scrollerRef$current3 = scrollerRef.current) === null || _scrollerRef$current3 === void 0 || (_scrollerRef$current3 = _scrollerRef$current3.querySelector(".hilight")) === null || _scrollerRef$current3 === void 0 || _scrollerRef$current3.classList.remove("hilight", "ring-1");
|
|
83
107
|
}
|
|
84
108
|
};
|
|
85
109
|
}, []);
|
|
110
|
+
react.useEffect(function () {
|
|
111
|
+
var handle = utilities.debounce(function (top) {
|
|
112
|
+
onScroll === null || onScroll === void 0 || onScroll(top !== null && top !== void 0 ? top : 0);
|
|
113
|
+
});
|
|
114
|
+
handle(top);
|
|
115
|
+
return function () {
|
|
116
|
+
handle.cancel();
|
|
117
|
+
};
|
|
118
|
+
}, [top]);
|
|
86
119
|
return /*#__PURE__*/jsxRuntime.jsx(Context.TableProvider, {
|
|
87
120
|
children: /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
88
121
|
className: "grid area-content overflow-auto relative",
|
|
89
122
|
style: {
|
|
90
123
|
gridTemplate: "\"head\" auto \"loader\" auto \"content\" 1fr \"foot\" auto/1fr"
|
|
91
124
|
},
|
|
125
|
+
"data-ref": "tableScroller",
|
|
92
126
|
ref: scrollerRef,
|
|
93
127
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
94
|
-
|
|
128
|
+
"data-ref": "tableHeader",
|
|
129
|
+
className: "bg-base font-medium sticky top-0 h-8 area-head border-b select-none flex flex-nowrap z-2",
|
|
95
130
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
96
131
|
className: wrapperStart,
|
|
97
|
-
children: [
|
|
132
|
+
children: [canExpand && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
133
|
+
className: "w-6"
|
|
134
|
+
}), checkableRows && /*#__PURE__*/jsxRuntime.jsx(CheckboxCell.CheckboxCell, {
|
|
98
135
|
state: checkState.allChecked,
|
|
99
136
|
onClick: toggleAllChecked
|
|
100
137
|
}), (_state$start = state.start) === null || _state$start === void 0 ? void 0 : _state$start.map(function (col, idx) {
|
|
101
138
|
return /*#__PURE__*/jsxRuntime.jsx(HeaderCell.HeaderCell, _objectSpread(_objectSpread({}, col), {}, {
|
|
102
139
|
sort: sort,
|
|
103
|
-
onSort: onSort
|
|
140
|
+
onSort: onSort,
|
|
141
|
+
onFilter: onFilter
|
|
104
142
|
}), idx);
|
|
105
143
|
})]
|
|
106
144
|
}), (_state$cols = state.cols) === null || _state$cols === void 0 ? void 0 : _state$cols.map(function (col, idx) {
|
|
107
145
|
return /*#__PURE__*/jsxRuntime.jsx(HeaderCell.HeaderCell, _objectSpread(_objectSpread({}, col), {}, {
|
|
108
146
|
sort: sort,
|
|
109
|
-
onSort: onSort
|
|
147
|
+
onSort: onSort,
|
|
148
|
+
onFilter: onFilter
|
|
110
149
|
}), idx);
|
|
111
150
|
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
112
151
|
className: wrapperEnd,
|
|
113
152
|
children: [(_state$end = state.end) === null || _state$end === void 0 ? void 0 : _state$end.map(function (col, idx) {
|
|
114
153
|
return /*#__PURE__*/jsxRuntime.jsx(HeaderCell.HeaderCell, _objectSpread(_objectSpread({}, col), {}, {
|
|
115
154
|
sort: sort,
|
|
116
|
-
onSort: onSort
|
|
155
|
+
onSort: onSort,
|
|
156
|
+
onFilter: onFilter
|
|
117
157
|
}), idx);
|
|
118
158
|
}), hideableColumns && /*#__PURE__*/jsxRuntime.jsx(AddColumn.AddColumn, {
|
|
119
159
|
onClick: onHide,
|
|
@@ -123,84 +163,86 @@ var Table = function Table(_ref) {
|
|
|
123
163
|
})]
|
|
124
164
|
})]
|
|
125
165
|
}), loading && /*#__PURE__*/jsxRuntime.jsx(core.Loading, {}), data.length > 0 && /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
126
|
-
className: "area-content flex flex-col flex-nowrap",
|
|
166
|
+
className: "area-content flex flex-col flex-nowrap min-h-full",
|
|
127
167
|
style: {
|
|
128
168
|
height: totalSize()
|
|
129
169
|
},
|
|
130
170
|
ref: refBody,
|
|
131
171
|
children: [/*#__PURE__*/jsxRuntime.jsx("div", {
|
|
132
172
|
style: {
|
|
133
|
-
height: (_items
|
|
173
|
+
height: (_items = items[hasActiveSticky ? 1 : 0]) === null || _items === void 0 ? void 0 : _items.start
|
|
134
174
|
}
|
|
135
175
|
}), items.map(function (_ref2) {
|
|
136
|
-
var
|
|
176
|
+
var _groupRenderer;
|
|
137
177
|
var index = _ref2.index,
|
|
138
178
|
key = _ref2.key;
|
|
139
179
|
var data = getData(index);
|
|
140
|
-
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
180
|
+
return "__GROUP__" in data ? /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
181
|
+
ref: measureElement,
|
|
182
|
+
"data-index": index,
|
|
183
|
+
className: classNames("px-2 py-1 text-md bg-base border-y border-tint-100 cursor-pointer flex items-center gap-1 z-1", isActiveSticky(index) && "sticky top-8"),
|
|
141
184
|
role: "none",
|
|
142
|
-
"data-row": index,
|
|
143
|
-
className: classNames("flex flex-nowrap datatable-row data-[hilight]:outline-1 -outline-offset-1 outline-primary-500", index % 2 ? "bg-even" : "bg-odd", onRowClick && "hover:bg-primary-50 active:bg-primary-100"),
|
|
144
185
|
onClick: function onClick() {
|
|
145
|
-
return
|
|
186
|
+
return toggleGroupExpand(data.key);
|
|
146
187
|
},
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
return /*#__PURE__*/jsxRuntime.jsx(BodyCell.BodyCell, {
|
|
158
|
-
column: col,
|
|
159
|
-
item: data
|
|
160
|
-
}, "".concat(key, ":").concat(ids));
|
|
161
|
-
})]
|
|
162
|
-
}), (_state$cols2 = state.cols) === null || _state$cols2 === void 0 ? void 0 : _state$cols2.map(function (col, idc) {
|
|
163
|
-
return /*#__PURE__*/jsxRuntime.jsx(BodyCell.BodyCell, {
|
|
164
|
-
column: col,
|
|
165
|
-
item: data
|
|
166
|
-
}, "".concat(key, ":").concat(idc));
|
|
167
|
-
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
168
|
-
className: wrapperEnd,
|
|
169
|
-
children: [(_state$end2 = state.end) === null || _state$end2 === void 0 ? void 0 : _state$end2.map(function (col, ide) {
|
|
170
|
-
return /*#__PURE__*/jsxRuntime.jsx(BodyCell.BodyCell, {
|
|
171
|
-
column: col,
|
|
172
|
-
item: data
|
|
173
|
-
}, "".concat(key, ":").concat(ide));
|
|
174
|
-
}), hideableColumns && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
175
|
-
className: "w-6"
|
|
188
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
189
|
+
rtlFlip: true,
|
|
190
|
+
icon: data.open ? core.CoreIcons.chevronDown : core.CoreIcons.chevronRight
|
|
191
|
+
}), (_groupRenderer = groupRenderer === null || groupRenderer === void 0 ? void 0 : groupRenderer(data)) !== null && _groupRenderer !== void 0 ? _groupRenderer : /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
192
|
+
className: "flex gap-1 items-center",
|
|
193
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("span", {
|
|
194
|
+
children: data.key
|
|
195
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("span", {
|
|
196
|
+
className: "text-sm",
|
|
197
|
+
children: ["(", data.itemCount, ")"]
|
|
176
198
|
})]
|
|
177
199
|
})]
|
|
200
|
+
}, key) : /*#__PURE__*/jsxRuntime.jsx(BodyRow.BodyRow, {
|
|
201
|
+
rowKey: key.toString(),
|
|
202
|
+
index: index,
|
|
203
|
+
checkableRows: checkableRows,
|
|
204
|
+
checked: keyProperty && checkState.checked.includes(data[keyProperty]) ? 1 : 0,
|
|
205
|
+
expanded: !!keyProperty && checkState.expanded.includes(data[keyProperty]),
|
|
206
|
+
data: data,
|
|
207
|
+
hideableColumns: hideableColumns,
|
|
208
|
+
keyProperty: keyProperty,
|
|
209
|
+
measureElement: measureElement,
|
|
210
|
+
onRowClick: onRowClick,
|
|
211
|
+
state: state,
|
|
212
|
+
canExpand: canExpand,
|
|
213
|
+
toggleExpand: toggleExpand,
|
|
214
|
+
expandRow: children,
|
|
215
|
+
toggleChecked: toggleChecked,
|
|
216
|
+
wrapperEnd: wrapperEnd,
|
|
217
|
+
wrapperStart: wrapperStart
|
|
178
218
|
}, key);
|
|
179
219
|
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
180
220
|
className: "flex-1 flex flex-nowrap",
|
|
181
221
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
182
222
|
className: wrapperStart,
|
|
183
|
-
children: [
|
|
223
|
+
children: [canExpand && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
224
|
+
className: "w-6"
|
|
225
|
+
}), checkableRows && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
184
226
|
className: "w-6"
|
|
185
|
-
}), (_state$
|
|
227
|
+
}), (_state$start2 = state.start) === null || _state$start2 === void 0 ? void 0 : _state$start2.map(function (col) {
|
|
186
228
|
return /*#__PURE__*/jsxRuntime.jsx(EmptyCell.EmptyCell, _objectSpread({}, col), String(col.id));
|
|
187
229
|
})]
|
|
188
|
-
}), (_state$
|
|
230
|
+
}), (_state$cols2 = state.cols) === null || _state$cols2 === void 0 ? void 0 : _state$cols2.map(function (col) {
|
|
189
231
|
return /*#__PURE__*/jsxRuntime.jsx(EmptyCell.EmptyCell, _objectSpread({}, col), String(col.id));
|
|
190
232
|
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
191
233
|
className: wrapperEnd,
|
|
192
|
-
children: [(_state$
|
|
234
|
+
children: [(_state$end2 = state.end) === null || _state$end2 === void 0 ? void 0 : _state$end2.map(function (col) {
|
|
193
235
|
return /*#__PURE__*/jsxRuntime.jsx(EmptyCell.EmptyCell, _objectSpread({}, col), String(col.id));
|
|
194
236
|
}), hideableColumns && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
195
237
|
className: "w-6"
|
|
196
238
|
})]
|
|
197
239
|
})]
|
|
198
240
|
})]
|
|
199
|
-
}), !loading && data.length === 0 && /*#__PURE__*/jsxRuntime.jsx(core.EmptyContent, {
|
|
241
|
+
}), !loading && data.length === 0 && (emptyDisplay !== null && emptyDisplay !== void 0 ? emptyDisplay : /*#__PURE__*/jsxRuntime.jsx(core.EmptyContent, {
|
|
200
242
|
size: "sm",
|
|
201
243
|
className: "bg-dimmed",
|
|
202
244
|
message: t("datagrid.empty")
|
|
203
|
-
})]
|
|
245
|
+
}))]
|
|
204
246
|
})
|
|
205
247
|
});
|
|
206
248
|
};
|
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");
|
|
@@ -1,61 +1,165 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
|
+
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
|
|
4
5
|
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
6
|
+
var utilities = require('@react-fabric/utilities');
|
|
5
7
|
var reactVirtual = require('@tanstack/react-virtual');
|
|
6
8
|
var react = require('react');
|
|
7
9
|
|
|
8
10
|
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; }
|
|
9
11
|
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; }
|
|
10
|
-
var useVirtualTable = function useVirtualTable(data,
|
|
12
|
+
var useVirtualTable = function useVirtualTable(data, options) {
|
|
13
|
+
var _virtualizer$range;
|
|
11
14
|
// TODO: refactor data into item list, apply grouping if groupColumn provided
|
|
12
15
|
// TODO: when grouping maintain map of group with children, {___GROUP___:true, label, items, open}
|
|
13
16
|
|
|
14
|
-
var scrollerRef = react.useRef(null);
|
|
15
|
-
var virtualizer = reactVirtual.useVirtualizer({
|
|
16
|
-
count: data.length,
|
|
17
|
-
getScrollElement: function getScrollElement() {
|
|
18
|
-
return scrollerRef.current;
|
|
19
|
-
},
|
|
20
|
-
estimateSize: function estimateSize() {
|
|
21
|
-
return 24;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
17
|
var _useReducer = react.useReducer(function (state, action) {
|
|
18
|
+
if (action.type === "updateState") {
|
|
19
|
+
state.checked = action.checked;
|
|
20
|
+
}
|
|
21
|
+
if (action.type === "expand") {
|
|
22
|
+
if (state.expanded.includes(action.key)) state.expanded.splice(state.expanded.indexOf(action.key), 1);else state.expanded.push(action.key);
|
|
23
|
+
}
|
|
25
24
|
if (action.type === "check") {
|
|
25
|
+
var _options$onCheckChang;
|
|
26
26
|
if (state.checked.includes(action.key)) state.checked.splice(state.checked.indexOf(action.key), 1);else state.checked.push(action.key);
|
|
27
|
+
(_options$onCheckChang = options.onCheckChanged) === null || _options$onCheckChang === void 0 || _options$onCheckChang.call(options, state.checked);
|
|
27
28
|
}
|
|
28
29
|
if (action.type === "checkall") {
|
|
30
|
+
var _options$onCheckChang2;
|
|
29
31
|
if (state.allChecked !== 0) {
|
|
30
32
|
state.checked = [];
|
|
31
|
-
} else if (keyProperty) {
|
|
32
|
-
state.checked = data.map(function (item) {
|
|
33
|
-
return item[keyProperty];
|
|
33
|
+
} else if (options.keyProperty) {
|
|
34
|
+
state.checked = state.data.map(function (item) {
|
|
35
|
+
return item[options.keyProperty];
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
(_options$onCheckChang2 = options.onCheckChanged) === null || _options$onCheckChang2 === void 0 || _options$onCheckChang2.call(options, state.checked);
|
|
39
|
+
}
|
|
40
|
+
var checkList = state.data.filter(function (hit) {
|
|
41
|
+
return state.checked.includes(hit[options.keyProperty]);
|
|
42
|
+
});
|
|
43
|
+
if (action.type === "groupExpand") {
|
|
44
|
+
var group = state.groups.find(function (group) {
|
|
45
|
+
return group.key === action.key;
|
|
46
|
+
});
|
|
47
|
+
if (group) {
|
|
48
|
+
group.open = !group.open;
|
|
49
|
+
state.groups = state.groups.slice();
|
|
50
|
+
state.items = state.groups.map(function (group) {
|
|
51
|
+
return [group, group.open ? state.grouped[group.key] : undefined];
|
|
52
|
+
}).flat(2).filter(Boolean);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (action.type === "reset") {
|
|
56
|
+
state.data = action.data;
|
|
57
|
+
if (action.key) {
|
|
58
|
+
state.grouped = utilities.groupBy(state.data, action.key);
|
|
59
|
+
state.groups = Object.keys(state.grouped).sort(utilities.compareValues("asc")).map(function (group) {
|
|
60
|
+
return {
|
|
61
|
+
__GROUP__: true,
|
|
62
|
+
open: true,
|
|
63
|
+
key: group,
|
|
64
|
+
items: state.grouped[group],
|
|
65
|
+
itemCount: state.grouped[group].length
|
|
66
|
+
};
|
|
34
67
|
});
|
|
68
|
+
state.items = state.groups.map(function (group) {
|
|
69
|
+
return [group].concat(_toConsumableArray(state.grouped[group.key]));
|
|
70
|
+
}).flat();
|
|
71
|
+
} else {
|
|
72
|
+
state.items = state.data;
|
|
35
73
|
}
|
|
36
74
|
}
|
|
37
|
-
onCheckChanged === null || onCheckChanged === void 0 || onCheckChanged(state.checked);
|
|
38
75
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
39
|
-
allChecked:
|
|
76
|
+
allChecked: checkList.length === state.data.length ? 1 : state.checked.length ? 2 : 0
|
|
40
77
|
});
|
|
41
78
|
}, {
|
|
79
|
+
data: data,
|
|
80
|
+
items: [],
|
|
81
|
+
grouped: {},
|
|
82
|
+
groups: [],
|
|
42
83
|
checked: [],
|
|
84
|
+
expanded: [],
|
|
43
85
|
allChecked: 0
|
|
44
86
|
}),
|
|
45
87
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
46
88
|
state = _useReducer2[0],
|
|
47
89
|
dispatch = _useReducer2[1];
|
|
90
|
+
var activeStickyIndexRef = react.useRef(0);
|
|
91
|
+
var stickyIndexes = react.useMemo(function () {
|
|
92
|
+
return state.items.map(function (hit, idx) {
|
|
93
|
+
return "__GROUP__" in hit ? idx : undefined;
|
|
94
|
+
}).filter(Boolean);
|
|
95
|
+
}, [state.items]);
|
|
96
|
+
var isActiveSticky = function isActiveSticky(index) {
|
|
97
|
+
return activeStickyIndexRef.current === index;
|
|
98
|
+
};
|
|
99
|
+
var _useState = react.useState(false),
|
|
100
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
101
|
+
hasActiveSticky = _useState2[0],
|
|
102
|
+
setHasActiveSticky = _useState2[1];
|
|
103
|
+
var scrollerRef = react.useRef(null);
|
|
104
|
+
var virtualizer = reactVirtual.useVirtualizer({
|
|
105
|
+
count: state.items.length,
|
|
106
|
+
getScrollElement: function getScrollElement() {
|
|
107
|
+
return scrollerRef.current;
|
|
108
|
+
},
|
|
109
|
+
estimateSize: function estimateSize() {
|
|
110
|
+
return 32;
|
|
111
|
+
},
|
|
112
|
+
rangeExtractor: react.useCallback(function (range) {
|
|
113
|
+
var _reverse$find;
|
|
114
|
+
activeStickyIndexRef.current = (_reverse$find = _toConsumableArray(stickyIndexes).reverse().find(function (index) {
|
|
115
|
+
return range.startIndex > index;
|
|
116
|
+
})) !== null && _reverse$find !== void 0 ? _reverse$find : 0;
|
|
117
|
+
setHasActiveSticky(range.startIndex !== activeStickyIndexRef.current);
|
|
118
|
+
var next = new Set([activeStickyIndexRef.current].concat(_toConsumableArray(reactVirtual.defaultRangeExtractor(range))));
|
|
119
|
+
return _toConsumableArray(next);
|
|
120
|
+
}, [stickyIndexes])
|
|
121
|
+
});
|
|
48
122
|
var virtualItems = virtualizer.getVirtualItems();
|
|
49
123
|
var getData = react.useCallback(function (index) {
|
|
50
|
-
return
|
|
51
|
-
}, [
|
|
124
|
+
return state.items[index];
|
|
125
|
+
}, [state.items]);
|
|
126
|
+
react.useEffect(function () {
|
|
127
|
+
dispatch({
|
|
128
|
+
type: "reset",
|
|
129
|
+
key: options.groupProperty,
|
|
130
|
+
data: data
|
|
131
|
+
});
|
|
132
|
+
}, [data, options.groupProperty]);
|
|
133
|
+
react.useEffect(function () {
|
|
134
|
+
var _options$checked;
|
|
135
|
+
dispatch({
|
|
136
|
+
type: "updateState",
|
|
137
|
+
checked: (_options$checked = options.checked) !== null && _options$checked !== void 0 ? _options$checked : []
|
|
138
|
+
});
|
|
139
|
+
}, [options.checked]);
|
|
52
140
|
return {
|
|
53
141
|
scrollerRef: scrollerRef,
|
|
54
142
|
items: virtualItems,
|
|
55
143
|
checkState: state,
|
|
56
144
|
getData: getData,
|
|
145
|
+
virtualizer: virtualizer,
|
|
146
|
+
hasActiveSticky: hasActiveSticky,
|
|
147
|
+
isActiveSticky: isActiveSticky,
|
|
148
|
+
top: (_virtualizer$range = virtualizer.range) === null || _virtualizer$range === void 0 ? void 0 : _virtualizer$range.startIndex,
|
|
57
149
|
totalSize: virtualizer.getTotalSize,
|
|
58
150
|
measureElement: virtualizer.measureElement,
|
|
151
|
+
toggleGroupExpand: function toggleGroupExpand(key) {
|
|
152
|
+
return dispatch({
|
|
153
|
+
type: "groupExpand",
|
|
154
|
+
key: key
|
|
155
|
+
});
|
|
156
|
+
},
|
|
157
|
+
toggleExpand: function toggleExpand(key) {
|
|
158
|
+
return dispatch({
|
|
159
|
+
type: "expand",
|
|
160
|
+
key: key
|
|
161
|
+
});
|
|
162
|
+
},
|
|
59
163
|
toggleChecked: function toggleChecked(key) {
|
|
60
164
|
return dispatch({
|
|
61
165
|
type: "check",
|