@semcore/data-table 16.5.3 → 16.6.0-prerelease.2
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/CHANGELOG.md +14 -0
- package/lib/cjs/components/AccordionRows/AccordionRows.js +51 -51
- package/lib/cjs/components/Body/Body.js +71 -88
- package/lib/cjs/components/Body/Body.js.map +1 -1
- package/lib/cjs/components/Body/Body.types.js.map +1 -1
- package/lib/cjs/components/Body/Cell.js +51 -51
- package/lib/cjs/components/Body/LimitOverlay.js +51 -51
- package/lib/cjs/components/Body/LimitOverlay.js.map +1 -1
- package/lib/cjs/components/Body/Row.js +130 -157
- package/lib/cjs/components/Body/Row.js.map +1 -1
- package/lib/cjs/components/Body/Row.types.js.map +1 -1
- package/lib/cjs/components/Body/RowGroup.js +147 -0
- package/lib/cjs/components/Body/RowGroup.js.map +1 -0
- package/lib/cjs/components/Body/style.shadow.css +13 -4
- package/lib/cjs/components/DataTable/DataTable.js +122 -102
- package/lib/cjs/components/DataTable/DataTable.js.map +1 -1
- package/lib/cjs/components/DataTable/DataTable.types.js.map +1 -1
- package/lib/cjs/components/Head/Column.js +50 -47
- package/lib/cjs/components/Head/Column.js.map +1 -1
- package/lib/cjs/components/Head/Group.js +36 -36
- package/lib/cjs/components/Head/Head.js +90 -57
- package/lib/cjs/components/Head/Head.js.map +1 -1
- package/lib/cjs/components/Head/Head.types.js.map +1 -1
- package/lib/cjs/components/RowSelector/RowsSelector.js +124 -0
- package/lib/cjs/components/RowSelector/RowsSelector.js.map +1 -0
- package/lib/cjs/index.js +7 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/store/SelectableRows.js +210 -0
- package/lib/cjs/store/SelectableRows.js.map +1 -0
- package/lib/es6/components/AccordionRows/AccordionRows.js +51 -51
- package/lib/es6/components/Body/Body.js +73 -90
- package/lib/es6/components/Body/Body.js.map +1 -1
- package/lib/es6/components/Body/Body.types.js.map +1 -1
- package/lib/es6/components/Body/Cell.js +51 -51
- package/lib/es6/components/Body/LimitOverlay.js +51 -51
- package/lib/es6/components/Body/LimitOverlay.js.map +1 -1
- package/lib/es6/components/Body/Row.js +131 -158
- package/lib/es6/components/Body/Row.js.map +1 -1
- package/lib/es6/components/Body/Row.types.js.map +1 -1
- package/lib/es6/components/Body/RowGroup.js +140 -0
- package/lib/es6/components/Body/RowGroup.js.map +1 -0
- package/lib/es6/components/Body/style.shadow.css +13 -4
- package/lib/es6/components/DataTable/DataTable.js +122 -102
- package/lib/es6/components/DataTable/DataTable.js.map +1 -1
- package/lib/es6/components/DataTable/DataTable.types.js.map +1 -1
- package/lib/es6/components/Head/Column.js +50 -47
- package/lib/es6/components/Head/Column.js.map +1 -1
- package/lib/es6/components/Head/Group.js +36 -36
- package/lib/es6/components/Head/Head.js +90 -57
- package/lib/es6/components/Head/Head.js.map +1 -1
- package/lib/es6/components/Head/Head.types.js.map +1 -1
- package/lib/es6/components/RowSelector/RowsSelector.js +117 -0
- package/lib/es6/components/RowSelector/RowsSelector.js.map +1 -0
- package/lib/es6/index.js +2 -1
- package/lib/es6/index.js.map +1 -1
- package/lib/es6/store/SelectableRows.js +203 -0
- package/lib/es6/store/SelectableRows.js.map +1 -0
- package/lib/esm/components/AccordionRows/AccordionRows.mjs +52 -52
- package/lib/esm/components/Body/Body.mjs +74 -90
- package/lib/esm/components/Body/Cell.mjs +52 -52
- package/lib/esm/components/Body/LimitOverlay.mjs +52 -52
- package/lib/esm/components/Body/Row.mjs +71 -91
- package/lib/esm/components/Body/RowGroup.mjs +133 -0
- package/lib/esm/components/Body/style.shadow.css +13 -4
- package/lib/esm/components/DataTable/DataTable.mjs +68 -47
- package/lib/esm/components/Head/Column.mjs +51 -48
- package/lib/esm/components/Head/Group.mjs +37 -37
- package/lib/esm/components/Head/Head.mjs +91 -56
- package/lib/esm/components/RowSelector/RowsSelector.mjs +98 -0
- package/lib/esm/index.mjs +2 -0
- package/lib/esm/store/SelectableRows.mjs +200 -0
- package/lib/types/components/Body/Body.types.d.ts +2 -1
- package/lib/types/components/Body/Row.d.ts +0 -2
- package/lib/types/components/Body/Row.types.d.ts +2 -1
- package/lib/types/components/Body/RowGroup.d.ts +19 -0
- package/lib/types/components/DataTable/DataTable.types.d.ts +21 -12
- package/lib/types/components/Head/Column.d.ts +1 -0
- package/lib/types/components/Head/Head.types.d.ts +2 -1
- package/lib/types/components/RowSelector/RowsSelector.d.ts +31 -0
- package/lib/types/index.d.ts +2 -1
- package/lib/types/store/SelectableRows.d.ts +51 -0
- package/package.json +9 -9
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
3
|
+
import _callSuper from "@babel/runtime/helpers/esm/callSuper";
|
|
4
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
5
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
6
|
+
import Checkbox from "@semcore/checkbox";
|
|
7
|
+
import React__default from "react";
|
|
8
|
+
import { SelectableRows } from "../../store/SelectableRows.mjs";
|
|
9
|
+
import { Row } from "../Body/Row.mjs";
|
|
10
|
+
import { UNIQ_ROW_KEY, SELECT_ALL } from "../DataTable/DataTable.mjs";
|
|
11
|
+
var RowSelector = /* @__PURE__ */ (function(_React$PureComponent) {
|
|
12
|
+
function RowSelector2(props) {
|
|
13
|
+
var _this;
|
|
14
|
+
_classCallCheck(this, RowSelector2);
|
|
15
|
+
_this = _callSuper(this, RowSelector2, [props]);
|
|
16
|
+
_defineProperty(_this, "state", {
|
|
17
|
+
checked: false
|
|
18
|
+
});
|
|
19
|
+
_defineProperty(_this, "unsubscribeToggle", void 0);
|
|
20
|
+
_defineProperty(_this, "handleSelectRow", function(value, event) {
|
|
21
|
+
var _this$props = _this.props, row = _this$props.row, rowIndex = _this$props.rowIndex, onSelectRow = _this$props.onSelectRow, selectedRows = _this$props.selectedRows;
|
|
22
|
+
onSelectRow === null || onSelectRow === void 0 || onSelectRow(value, rowIndex, row, event);
|
|
23
|
+
if (selectedRows && !Array.isArray(selectedRows)) {
|
|
24
|
+
selectedRows.toggle(value, row);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
_defineProperty(_this, "handleClickCheckbox", function(value) {
|
|
28
|
+
return function(event) {
|
|
29
|
+
event === null || event === void 0 || event.preventDefault();
|
|
30
|
+
event === null || event === void 0 || event.stopPropagation();
|
|
31
|
+
var _this$props2 = _this.props, row = _this$props2.row, rowIndex = _this$props2.rowIndex, onSelectRow = _this$props2.onSelectRow, selectedRows = _this$props2.selectedRows;
|
|
32
|
+
onSelectRow === null || onSelectRow === void 0 || onSelectRow(value, rowIndex, row, event);
|
|
33
|
+
if (selectedRows && !Array.isArray(selectedRows)) {
|
|
34
|
+
selectedRows.toggle(value, row);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
var _row = props.row, _selectedRows = props.selectedRows;
|
|
39
|
+
if (_selectedRows && !Array.isArray(_selectedRows)) {
|
|
40
|
+
_this.state.checked = _selectedRows.has(_row[UNIQ_ROW_KEY]);
|
|
41
|
+
}
|
|
42
|
+
return _this;
|
|
43
|
+
}
|
|
44
|
+
_inherits(RowSelector2, _React$PureComponent);
|
|
45
|
+
return _createClass(RowSelector2, [{
|
|
46
|
+
key: "componentDidMount",
|
|
47
|
+
value: function componentDidMount() {
|
|
48
|
+
var _this2 = this;
|
|
49
|
+
var _this$props3 = this.props, row = _this$props3.row, selectedRows = _this$props3.selectedRows;
|
|
50
|
+
if (selectedRows && !Array.isArray(selectedRows)) {
|
|
51
|
+
this.unsubscribeToggle = selectedRows.subscribe(SelectableRows.TOGGLE_EVENT, function(key) {
|
|
52
|
+
if (row[UNIQ_ROW_KEY] === key) {
|
|
53
|
+
_this2.setState({
|
|
54
|
+
checked: selectedRows.has(row[UNIQ_ROW_KEY])
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}, {
|
|
61
|
+
key: "componentWillUnmount",
|
|
62
|
+
value: function componentWillUnmount() {
|
|
63
|
+
var _this$unsubscribeTogg;
|
|
64
|
+
(_this$unsubscribeTogg = this.unsubscribeToggle) === null || _this$unsubscribeTogg === void 0 || _this$unsubscribeTogg.call(this);
|
|
65
|
+
}
|
|
66
|
+
}, {
|
|
67
|
+
key: "render",
|
|
68
|
+
value: function render() {
|
|
69
|
+
var SCheckboxCell = Row.Cell;
|
|
70
|
+
var _this$props4 = this.props, row = _this$props4.row, rowIndex = _this$props4.rowIndex, gridRowIndex = _this$props4.gridRowIndex, expanded = _this$props4.expanded, withAccordion = _this$props4.withAccordion, isAccordionRow = _this$props4.isAccordionRow, isCellHidden = _this$props4.isCellHidden, theme = _this$props4.theme, uid = _this$props4.uid, selectedRows = _this$props4.selectedRows;
|
|
71
|
+
var rowUniqKey = row[UNIQ_ROW_KEY];
|
|
72
|
+
var checked = Array.isArray(selectedRows) ? selectedRows.includes(rowUniqKey) : this.state.checked;
|
|
73
|
+
return /* @__PURE__ */ React__default.createElement(SCheckboxCell, {
|
|
74
|
+
row,
|
|
75
|
+
rowIndex,
|
|
76
|
+
column: {
|
|
77
|
+
name: SELECT_ALL.toString()
|
|
78
|
+
},
|
|
79
|
+
columnIndex: 0,
|
|
80
|
+
gridRowIndex,
|
|
81
|
+
onClick: this.handleClickCheckbox(!checked),
|
|
82
|
+
expanded,
|
|
83
|
+
isAccordionRow,
|
|
84
|
+
"aria-hidden": isCellHidden,
|
|
85
|
+
withAccordion,
|
|
86
|
+
theme,
|
|
87
|
+
"data-row-selector": true
|
|
88
|
+
}, /* @__PURE__ */ React__default.createElement(Checkbox, {
|
|
89
|
+
checked,
|
|
90
|
+
"aria-labelledby": "".concat(uid, "_").concat(rowUniqKey, "_1"),
|
|
91
|
+
onChange: this.handleSelectRow
|
|
92
|
+
}, /* @__PURE__ */ React__default.createElement(Checkbox.Value, null)));
|
|
93
|
+
}
|
|
94
|
+
}]);
|
|
95
|
+
})(React__default.PureComponent);
|
|
96
|
+
export {
|
|
97
|
+
RowSelector
|
|
98
|
+
};
|
package/lib/esm/index.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { MergedColumnsCell, MergedRowsCell } from "./components/Body/MergedCells.mjs";
|
|
2
2
|
import { ACCORDION, DataTable, ROW_GROUP, UNIQ_ROW_KEY } from "./components/DataTable/DataTable.mjs";
|
|
3
|
+
import { SelectableRows } from "./store/SelectableRows.mjs";
|
|
3
4
|
var wrapDataTable = function wrapDataTable2(wrapper) {
|
|
4
5
|
return wrapper;
|
|
5
6
|
};
|
|
@@ -9,6 +10,7 @@ export {
|
|
|
9
10
|
MergedColumnsCell,
|
|
10
11
|
MergedRowsCell,
|
|
11
12
|
ROW_GROUP,
|
|
13
|
+
SelectableRows,
|
|
12
14
|
UNIQ_ROW_KEY,
|
|
13
15
|
wrapDataTable
|
|
14
16
|
};
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
|
|
2
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
3
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
4
|
+
import _callSuper from "@babel/runtime/helpers/esm/callSuper";
|
|
5
|
+
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
6
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
7
|
+
import EventEmitter from "@semcore/core/lib/utils/eventEmitter";
|
|
8
|
+
import { UNIQ_ROW_KEY } from "../components/DataTable/DataTable.mjs";
|
|
9
|
+
var SelectableRows = /* @__PURE__ */ (function(_EventEmitter) {
|
|
10
|
+
function SelectableRows2() {
|
|
11
|
+
var _this;
|
|
12
|
+
var initValues = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
|
|
13
|
+
_classCallCheck(this, SelectableRows2);
|
|
14
|
+
_this = _callSuper(this, SelectableRows2);
|
|
15
|
+
_defineProperty(_this, "values", void 0);
|
|
16
|
+
_defineProperty(_this, "availableKeys", /* @__PURE__ */ new Set());
|
|
17
|
+
_defineProperty(_this, "lastSelectedRow", null);
|
|
18
|
+
_defineProperty(_this, "isPressedShift", false);
|
|
19
|
+
_this.values = new Set(initValues);
|
|
20
|
+
return _this;
|
|
21
|
+
}
|
|
22
|
+
_inherits(SelectableRows2, _EventEmitter);
|
|
23
|
+
return _createClass(SelectableRows2, [{
|
|
24
|
+
key: "setAvailableKeys",
|
|
25
|
+
value: function setAvailableKeys(value) {
|
|
26
|
+
this.availableKeys = new Set(value);
|
|
27
|
+
}
|
|
28
|
+
}, {
|
|
29
|
+
key: "get",
|
|
30
|
+
value: function get() {
|
|
31
|
+
return Array.from(this.values.keys());
|
|
32
|
+
}
|
|
33
|
+
}, {
|
|
34
|
+
key: "isChecked",
|
|
35
|
+
value: function isChecked(key) {
|
|
36
|
+
return this.values.has(key);
|
|
37
|
+
}
|
|
38
|
+
}, {
|
|
39
|
+
key: "replace",
|
|
40
|
+
value: function replace(value) {
|
|
41
|
+
var _this2 = this;
|
|
42
|
+
this.clearAll();
|
|
43
|
+
value.forEach(function(val) {
|
|
44
|
+
_this2.values.add(val);
|
|
45
|
+
_this2.emit(SelectableRows2.TOGGLE_EVENT, val);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}, {
|
|
49
|
+
key: "has",
|
|
50
|
+
value: function has(value) {
|
|
51
|
+
return this.values.has(value);
|
|
52
|
+
}
|
|
53
|
+
}, {
|
|
54
|
+
key: "isAllSelected",
|
|
55
|
+
value: function isAllSelected() {
|
|
56
|
+
var isAllSelected2 = true;
|
|
57
|
+
if (this.availableKeys.size === 0 || this.values.size === 0) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
var _iterator = _createForOfIteratorHelper(this.availableKeys.values()), _step;
|
|
61
|
+
try {
|
|
62
|
+
for (_iterator.s(); !(_step = _iterator.n()).done; ) {
|
|
63
|
+
var _key = _step.value;
|
|
64
|
+
if (!this.values.has(_key)) {
|
|
65
|
+
isAllSelected2 = false;
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
} catch (err) {
|
|
70
|
+
_iterator.e(err);
|
|
71
|
+
} finally {
|
|
72
|
+
_iterator.f();
|
|
73
|
+
}
|
|
74
|
+
return isAllSelected2;
|
|
75
|
+
}
|
|
76
|
+
}, {
|
|
77
|
+
key: "isIndeterminate",
|
|
78
|
+
value: function isIndeterminate() {
|
|
79
|
+
var isIndeterminate2 = false;
|
|
80
|
+
var _iterator2 = _createForOfIteratorHelper(this.availableKeys.values()), _step2;
|
|
81
|
+
try {
|
|
82
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
|
|
83
|
+
var _key2 = _step2.value;
|
|
84
|
+
if (this.values.has(_key2)) {
|
|
85
|
+
isIndeterminate2 = true;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
} catch (err) {
|
|
90
|
+
_iterator2.e(err);
|
|
91
|
+
} finally {
|
|
92
|
+
_iterator2.f();
|
|
93
|
+
}
|
|
94
|
+
return isIndeterminate2;
|
|
95
|
+
}
|
|
96
|
+
}, {
|
|
97
|
+
key: "selectAll",
|
|
98
|
+
value: function selectAll() {
|
|
99
|
+
var _iterator3 = _createForOfIteratorHelper(this.availableKeys.values()), _step3;
|
|
100
|
+
try {
|
|
101
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) {
|
|
102
|
+
var _key3 = _step3.value;
|
|
103
|
+
this.values.add(_key3);
|
|
104
|
+
this.emit(SelectableRows2.TOGGLE_EVENT, _key3);
|
|
105
|
+
}
|
|
106
|
+
} catch (err) {
|
|
107
|
+
_iterator3.e(err);
|
|
108
|
+
} finally {
|
|
109
|
+
_iterator3.f();
|
|
110
|
+
}
|
|
111
|
+
this.emit(SelectableRows2.SELECT_ALL_EVENT);
|
|
112
|
+
}
|
|
113
|
+
}, {
|
|
114
|
+
key: "clearAll",
|
|
115
|
+
value: function clearAll() {
|
|
116
|
+
var keys = Array.from(this.values.values());
|
|
117
|
+
this.values.clear();
|
|
118
|
+
for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {
|
|
119
|
+
var _key4 = _keys[_i];
|
|
120
|
+
this.emit(SelectableRows2.TOGGLE_EVENT, _key4);
|
|
121
|
+
}
|
|
122
|
+
this.emit(SelectableRows2.SELECT_ALL_EVENT);
|
|
123
|
+
}
|
|
124
|
+
}, {
|
|
125
|
+
key: "clearAllAvailable",
|
|
126
|
+
value: function clearAllAvailable() {
|
|
127
|
+
var _iterator4 = _createForOfIteratorHelper(this.availableKeys.values()), _step4;
|
|
128
|
+
try {
|
|
129
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) {
|
|
130
|
+
var _key5 = _step4.value;
|
|
131
|
+
this.values["delete"](_key5);
|
|
132
|
+
this.emit(SelectableRows2.TOGGLE_EVENT, _key5);
|
|
133
|
+
}
|
|
134
|
+
} catch (err) {
|
|
135
|
+
_iterator4.e(err);
|
|
136
|
+
} finally {
|
|
137
|
+
_iterator4.f();
|
|
138
|
+
}
|
|
139
|
+
this.emit(SelectableRows2.SELECT_ALL_EVENT);
|
|
140
|
+
}
|
|
141
|
+
}, {
|
|
142
|
+
key: "toggle",
|
|
143
|
+
value: function toggle(selected, row) {
|
|
144
|
+
if (this.isPressedShift && this.values.size > 0 && this.lastSelectedRow && (selected ? this.values.has(this.lastSelectedRow) : true)) {
|
|
145
|
+
var select = false;
|
|
146
|
+
var _iterator5 = _createForOfIteratorHelper(this.availableKeys.values()), _step5;
|
|
147
|
+
try {
|
|
148
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done; ) {
|
|
149
|
+
var item = _step5.value;
|
|
150
|
+
if (!select && (item === row[UNIQ_ROW_KEY] || item === this.lastSelectedRow)) {
|
|
151
|
+
select = true;
|
|
152
|
+
this.toggleOneRow(selected, item);
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
if (select) {
|
|
156
|
+
this.toggleOneRow(selected, item);
|
|
157
|
+
}
|
|
158
|
+
if (select && (item === row[UNIQ_ROW_KEY] || item === this.lastSelectedRow)) {
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
} catch (err) {
|
|
163
|
+
_iterator5.e(err);
|
|
164
|
+
} finally {
|
|
165
|
+
_iterator5.f();
|
|
166
|
+
}
|
|
167
|
+
} else {
|
|
168
|
+
this.toggleOneRow(selected, row[UNIQ_ROW_KEY]);
|
|
169
|
+
}
|
|
170
|
+
this.lastSelectedRow = row[UNIQ_ROW_KEY];
|
|
171
|
+
}
|
|
172
|
+
}, {
|
|
173
|
+
key: "toggleOneRow",
|
|
174
|
+
value: function toggleOneRow(isSelected, key) {
|
|
175
|
+
if (isSelected) {
|
|
176
|
+
if (this.values.size === 0) {
|
|
177
|
+
this.emit(SelectableRows2.SELECT_ALL_EVENT);
|
|
178
|
+
}
|
|
179
|
+
this.values.add(key);
|
|
180
|
+
if (this.values.size === this.availableKeys.size) {
|
|
181
|
+
this.emit(SelectableRows2.SELECT_ALL_EVENT);
|
|
182
|
+
}
|
|
183
|
+
} else {
|
|
184
|
+
if (this.values.size === this.availableKeys.size) {
|
|
185
|
+
this.emit(SelectableRows2.SELECT_ALL_EVENT);
|
|
186
|
+
}
|
|
187
|
+
this.values["delete"](key);
|
|
188
|
+
if (this.values.size === 0) {
|
|
189
|
+
this.emit(SelectableRows2.SELECT_ALL_EVENT);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
this.emit(SelectableRows2.TOGGLE_EVENT, key);
|
|
193
|
+
}
|
|
194
|
+
}]);
|
|
195
|
+
})(EventEmitter);
|
|
196
|
+
_defineProperty(SelectableRows, "TOGGLE_EVENT", "toggle_selected_row");
|
|
197
|
+
_defineProperty(SelectableRows, "SELECT_ALL_EVENT", "select_all_selected_rows");
|
|
198
|
+
export {
|
|
199
|
+
SelectableRows
|
|
200
|
+
};
|
|
@@ -2,6 +2,7 @@ import type { Intergalactic } from '@semcore/core';
|
|
|
2
2
|
import type * as React from 'react';
|
|
3
3
|
import type { DataTableCellProps, Theme } from './Cell.types';
|
|
4
4
|
import type { DTRow, RowPropsInner } from './Row.types';
|
|
5
|
+
import type { ISelectedRows } from '../../store/SelectableRows';
|
|
5
6
|
import type { ACCORDION } from '../DataTable/DataTable';
|
|
6
7
|
import type { DataRowItem, DTUse, VirtualScroll, DataTableProps, DataTableData } from '../DataTable/DataTable.types';
|
|
7
8
|
import type { DTColumn } from '../Head/Column.types';
|
|
@@ -67,7 +68,7 @@ export type BodyPropsInner<Data extends DataTableData, UniqKeyType> = DataTableB
|
|
|
67
68
|
renderCell?: (props: CellRenderProps<Data[number], UniqKeyType>) => React.ReactNode | Record<string, any>;
|
|
68
69
|
onBackFromAccordion: (colName: string) => void;
|
|
69
70
|
stickyHeader?: boolean;
|
|
70
|
-
selectedRows?: UniqKeyType[]
|
|
71
|
+
selectedRows?: UniqKeyType[] | ISelectedRows<UniqKeyType>;
|
|
71
72
|
onSelectRow?: (isSelect: boolean, selectedRowIndex: number, row: DTRow<UniqKeyType>, event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
72
73
|
renderEmptyData: () => React.ReactNode;
|
|
73
74
|
sideIndents?: 'wide';
|
|
@@ -28,8 +28,6 @@ export declare class RowRoot<Data extends DataTableData, UniqKeyType> extends Co
|
|
|
28
28
|
componentWillUnmount(): void;
|
|
29
29
|
setAccordion(): void;
|
|
30
30
|
cellHasAccordion(cellValue?: DTValue | MergedColumnsCell | MergedRowsCell): cellValue is DTValue;
|
|
31
|
-
handleSelectRow: (value: boolean, event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
32
|
-
handleClickCheckbox: (value: boolean) => (event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
33
31
|
handleBackFromAccordion: (e: React.KeyboardEvent) => void;
|
|
34
32
|
handleExpandRow: (row: DTRow<UniqKeyType>, index: number) => void;
|
|
35
33
|
closeAccordion: (row: DTRow<UniqKeyType>, closeDuration: number) => void;
|
|
@@ -4,6 +4,7 @@ import type { CellRenderProps } from './Body.types';
|
|
|
4
4
|
import type { DataTableCellProps, Theme } from './Cell.types';
|
|
5
5
|
import type { MergedColumnsCell, MergedRowsCell } from './MergedCells';
|
|
6
6
|
import type { RowRoot } from './Row';
|
|
7
|
+
import type { ISelectedRows } from '../../store/SelectableRows';
|
|
7
8
|
import type { ACCORDION, GRID_ROW_INDEX, IS_EMPTY_DATA_ROW, ROW_GROUP, ROW_INDEX, UNIQ_ROW_KEY } from '../DataTable/DataTable';
|
|
8
9
|
import type { DTValue, DTUse, DataTableData, VirtualScroll, DataRowItem, DataTableProps } from '../DataTable/DataTable.types';
|
|
9
10
|
import type { DTColumn } from '../Head/Column.types';
|
|
@@ -42,7 +43,7 @@ export type RowPropsInner<Data extends DataTableData, UniqKeyType> = JSX.Intrins
|
|
|
42
43
|
onExpandRow: (expandedRow: DTRow<UniqKeyType>) => void;
|
|
43
44
|
gridTemplateAreas: string[];
|
|
44
45
|
gridTemplateColumns: string[];
|
|
45
|
-
selectedRows?: UniqKeyType[]
|
|
46
|
+
selectedRows?: UniqKeyType[] | ISelectedRows<UniqKeyType>;
|
|
46
47
|
onSelectRow?: (isSelect: boolean, selectedRowIndex: number, row: DTRow<UniqKeyType>, event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
47
48
|
inert?: '';
|
|
48
49
|
accordionDuration: number | [number, number];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { ISelectedRows } from '../../store/SelectableRows';
|
|
3
|
+
import type { RowRoot } from '../Body/Row';
|
|
4
|
+
import type { DTRow } from '../Body/Row.types';
|
|
5
|
+
import type { DataTableData } from '../DataTable/DataTable.types';
|
|
6
|
+
import type { DTColumn } from '../Head/Column.types';
|
|
7
|
+
type RowGroupProps<Data extends DataTableData, UniqKeyType> = {
|
|
8
|
+
rows: DTRow<UniqKeyType>[];
|
|
9
|
+
selectedRows?: UniqKeyType[] | ISelectedRows<UniqKeyType>;
|
|
10
|
+
columns: DTColumn[];
|
|
11
|
+
startIndex: number;
|
|
12
|
+
rowIndex: number;
|
|
13
|
+
handleRef: (index: number, row: DTRow<UniqKeyType>) => (node: HTMLElement | null) => void;
|
|
14
|
+
handleComponentRef: (row: DTRow<UniqKeyType>) => (component: RowRoot<Data, UniqKeyType> | null) => void;
|
|
15
|
+
};
|
|
16
|
+
export declare class RowGroup<Data extends DataTableData, UniqKeyType> extends React.PureComponent<RowGroupProps<Data, UniqKeyType>> {
|
|
17
|
+
render(): React.ReactNode;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -3,6 +3,7 @@ import type { Intergalactic } from '@semcore/core';
|
|
|
3
3
|
import type Tooltip from '@semcore/tooltip';
|
|
4
4
|
import type * as React from 'react';
|
|
5
5
|
import type { ACCORDION, ROW_GROUP, UNIQ_ROW_KEY } from './DataTable';
|
|
6
|
+
import type { ISelectedRows } from '../../store/SelectableRows';
|
|
6
7
|
import type { DataTableBodyProps } from '../Body/Body.types';
|
|
7
8
|
import type { DTRow, RowPropsInner } from '../Body/Row.types';
|
|
8
9
|
import type { DataTableColumnProps } from '../Head/Column.types';
|
|
@@ -31,7 +32,7 @@ export interface DTValue {
|
|
|
31
32
|
}
|
|
32
33
|
export type DataTableData = DataRowItem[];
|
|
33
34
|
export type DTUse = 'primary' | 'secondary';
|
|
34
|
-
export type Sizes = Pick<BoxProps, 'w' | 'wMax' | 'wMin' | 'h' | 'hMax' | 'hMin'
|
|
35
|
+
export type Sizes = Partial<Pick<BoxProps, 'w' | 'wMax' | 'wMin' | 'h' | 'hMax' | 'hMin'>>;
|
|
35
36
|
export type DataTableProps<Data extends DataTableData, UniqKey extends (Data[number] extends {
|
|
36
37
|
[ROW_GROUP]: DataTableData;
|
|
37
38
|
} ? keyof Data[number][typeof ROW_GROUP][number] : keyof Data[number]), UniqKeyType extends (Data[number] extends {
|
|
@@ -88,16 +89,6 @@ export type DataTableProps<Data extends DataTableData, UniqKey extends (Data[num
|
|
|
88
89
|
* Name of a unique key for each row data item
|
|
89
90
|
*/
|
|
90
91
|
uniqueRowKey?: UniqKey;
|
|
91
|
-
/**
|
|
92
|
-
* List of selected rows (uniqIds from a data array)
|
|
93
|
-
*/
|
|
94
|
-
selectedRows?: UniqKeyType[];
|
|
95
|
-
/** Callback when row selection changes */
|
|
96
|
-
onSelectedRowsChange?: (selectedRows: UniqKeyType[], event?: React.SyntheticEvent<HTMLElement>, opts?: {
|
|
97
|
-
selectedRowIndex: number;
|
|
98
|
-
isSelected: boolean;
|
|
99
|
-
row: DTRow<UniqKeyType>;
|
|
100
|
-
}) => void;
|
|
101
92
|
/**
|
|
102
93
|
* For custom empty data widget.
|
|
103
94
|
*/
|
|
@@ -154,7 +145,25 @@ export type DataTableProps<Data extends DataTableData, UniqKey extends (Data[num
|
|
|
154
145
|
* Handling table container resizing.
|
|
155
146
|
*/
|
|
156
147
|
onResize?: ResizeObserverCallback;
|
|
157
|
-
}
|
|
148
|
+
} & ({
|
|
149
|
+
/**
|
|
150
|
+
* List of selected rows (uniqIds from a data array)
|
|
151
|
+
* @deprecated use ISelectedRows for this property instead of an array.
|
|
152
|
+
*/
|
|
153
|
+
selectedRows?: UniqKeyType[];
|
|
154
|
+
/** Callback when row selection changes */
|
|
155
|
+
onSelectedRowsChange?: (selectedRows: UniqKeyType[], event?: React.SyntheticEvent<HTMLElement>, opts?: {
|
|
156
|
+
selectedRowIndex: number;
|
|
157
|
+
isSelected: boolean;
|
|
158
|
+
row: DTRow<UniqKeyType>;
|
|
159
|
+
}) => void;
|
|
160
|
+
} | {
|
|
161
|
+
/**
|
|
162
|
+
* Entity of selected rows (uniq id from them)
|
|
163
|
+
* This is mutable! variable because of table performance. Don't change the link on it.
|
|
164
|
+
*/
|
|
165
|
+
selectedRows?: ISelectedRows<UniqKeyType>;
|
|
166
|
+
});
|
|
158
167
|
export type ColumnItemConfig = Intergalactic.InternalTypings.EfficientOmit<Intergalactic.InternalTypings.ComponentProps<'div' | typeof Tooltip, 'div', DataTableColumnProps, {}, [
|
|
159
168
|
]>, 'children'> & {
|
|
160
169
|
children: React.ReactNode | React.FC;
|
|
@@ -29,6 +29,7 @@ export declare class Column<Data extends DataTableData, UniqKey extends (Data[nu
|
|
|
29
29
|
handleMouseEnter: () => void;
|
|
30
30
|
handleMouseLeave: () => void;
|
|
31
31
|
handleBlur: (e: React.FocusEvent<HTMLElement>) => void;
|
|
32
|
+
handleSort: (e: React.SyntheticEvent<HTMLElement>) => void;
|
|
32
33
|
handleSortClick: (e: React.SyntheticEvent<HTMLElement>) => void;
|
|
33
34
|
handleFocusableCellKeyDown: (e: React.KeyboardEvent) => void;
|
|
34
35
|
handleFocusableCellFocus: (e: React.FocusEvent<HTMLElement, HTMLElement>) => void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ColumnPropsInner, DTColumn } from './Column.types';
|
|
2
|
+
import type { ISelectedRows } from '../../store/SelectableRows';
|
|
2
3
|
import type { BodyPropsInner } from '../Body/Body.types';
|
|
3
4
|
import type { DataTableCellProps } from '../Body/Cell.types';
|
|
4
5
|
import type { DTRow } from '../Body/Row.types';
|
|
@@ -45,7 +46,7 @@ export type HeadPropsInner<Data extends DataTableData, UniqKey extends (Data[num
|
|
|
45
46
|
gridTemplateAreas: string[];
|
|
46
47
|
sideIndents?: 'wide';
|
|
47
48
|
totalRows: number;
|
|
48
|
-
selectedRows?: UniqKeyType[]
|
|
49
|
+
selectedRows?: UniqKeyType[] | ISelectedRows<UniqKeyType>;
|
|
49
50
|
onChangeSelectAll?: (selectedRows: UniqKeyType[], event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
50
51
|
flatRows: DTRow<UniqKeyType>[];
|
|
51
52
|
getFixedStyle: (cell: Pick<DTColumn, 'name' | 'fixed'>) => [side: 'left' | 'right', style: string | number] | [side: undefined, style: undefined];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ISelectedRows } from '../../store/SelectableRows';
|
|
3
|
+
import type { Theme } from '../Body/Cell.types';
|
|
4
|
+
import type { DTRow } from '../Body/Row.types';
|
|
5
|
+
type RowSelectorProps<UniqKeyType> = {
|
|
6
|
+
row: DTRow<UniqKeyType>;
|
|
7
|
+
rowIndex: number;
|
|
8
|
+
gridRowIndex: number;
|
|
9
|
+
expanded: boolean;
|
|
10
|
+
withAccordion: boolean;
|
|
11
|
+
uid: string;
|
|
12
|
+
theme?: Theme;
|
|
13
|
+
isCellHidden?: boolean;
|
|
14
|
+
isAccordionRow?: boolean;
|
|
15
|
+
selectedRows?: UniqKeyType[] | ISelectedRows<UniqKeyType>;
|
|
16
|
+
onSelectRow?: (isSelect: boolean, selectedRowIndex: number, row: DTRow<UniqKeyType>, event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
17
|
+
};
|
|
18
|
+
type State = {
|
|
19
|
+
checked: boolean;
|
|
20
|
+
};
|
|
21
|
+
export declare class RowSelector<UniqKeyType> extends React.PureComponent<RowSelectorProps<UniqKeyType>, State> {
|
|
22
|
+
state: State;
|
|
23
|
+
private unsubscribeToggle;
|
|
24
|
+
constructor(props: RowSelectorProps<UniqKeyType>);
|
|
25
|
+
componentDidMount(): void;
|
|
26
|
+
componentWillUnmount(): void;
|
|
27
|
+
handleSelectRow: (value: boolean, event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
28
|
+
handleClickCheckbox: (value: boolean) => (event?: React.SyntheticEvent<HTMLElement>) => void;
|
|
29
|
+
render(): React.JSX.Element;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
package/lib/types/index.d.ts
CHANGED
|
@@ -4,10 +4,11 @@ import type { CellRenderProps } from './components/Body/Body.types';
|
|
|
4
4
|
import { MergedRowsCell, MergedColumnsCell } from './components/Body/MergedCells';
|
|
5
5
|
import { DataTable, ACCORDION, ROW_GROUP, UNIQ_ROW_KEY } from './components/DataTable/DataTable';
|
|
6
6
|
import type { DataTableSort, DataTableType, DataTableData, DataTableProps, DataTableChangeSort, ColumnGroupConfig, ColumnItemConfig } from './components/DataTable/DataTable.types';
|
|
7
|
+
import { SelectableRows } from './store/SelectableRows';
|
|
7
8
|
declare const wrapDataTable: <PropsExtending extends {}>(wrapper: (props: Intergalactic.InternalTypings.UntypeRefAndTag<Intergalactic.InternalTypings.ComponentPropsNesting<DataTableType>> & PropsExtending) => React.ReactNode) => DataTableType;
|
|
8
9
|
export { MergedRowsCell, MergedColumnsCell, DataTable, ACCORDION, ROW_GROUP,
|
|
9
10
|
/**
|
|
10
11
|
* @deprecated use property `uniqueRowKey` in DataTableProps to set key of unique value in your data.
|
|
11
12
|
*/
|
|
12
|
-
UNIQ_ROW_KEY, wrapDataTable, };
|
|
13
|
+
UNIQ_ROW_KEY, wrapDataTable, SelectableRows, };
|
|
13
14
|
export type { DataTableSort, DataTableData, DataTableProps, DataTableChangeSort, ColumnGroupConfig, ColumnItemConfig, CellRenderProps, };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import EventEmitter from '@semcore/core/lib/utils/eventEmitter';
|
|
2
|
+
import type { DTRow } from '../components/Body/Row.types';
|
|
3
|
+
export interface ISelectedRows<UniqKeyType> {
|
|
4
|
+
/** Flag for multiple rows selection */
|
|
5
|
+
isPressedShift: boolean;
|
|
6
|
+
/** Method for set keys from data. Call it in DataTable, on data changes */
|
|
7
|
+
setAvailableKeys(keys: UniqKeyType[]): void;
|
|
8
|
+
/** Get the list of keys */
|
|
9
|
+
get(): UniqKeyType[];
|
|
10
|
+
/** Check if the row is selected */
|
|
11
|
+
isChecked(key: UniqKeyType): boolean;
|
|
12
|
+
/** Replace the list of keys. */
|
|
13
|
+
replace(value: UniqKeyType[]): void;
|
|
14
|
+
/** Check if the key exists in selected rows */
|
|
15
|
+
has(value: UniqKeyType): boolean;
|
|
16
|
+
/** Select all handler */
|
|
17
|
+
selectAll(): void;
|
|
18
|
+
/** Clear all handler */
|
|
19
|
+
clearAll(): void;
|
|
20
|
+
/** Clear all available values (rows on current page) handler */
|
|
21
|
+
clearAllAvailable(): void;
|
|
22
|
+
/** Toggle selection of row */
|
|
23
|
+
toggle(selected: boolean, row: DTRow<UniqKeyType>): void;
|
|
24
|
+
/** Check if all rows selected */
|
|
25
|
+
isAllSelected(): boolean;
|
|
26
|
+
/** Check if at least one row selected */
|
|
27
|
+
isIndeterminate(): boolean;
|
|
28
|
+
/** Subscribe to changes */
|
|
29
|
+
subscribe: EventEmitter['subscribe'];
|
|
30
|
+
}
|
|
31
|
+
export declare class SelectableRows<UniqRowKeyType> extends EventEmitter implements ISelectedRows<UniqRowKeyType> {
|
|
32
|
+
private readonly values;
|
|
33
|
+
private availableKeys;
|
|
34
|
+
private lastSelectedRow;
|
|
35
|
+
static TOGGLE_EVENT: string;
|
|
36
|
+
static SELECT_ALL_EVENT: string;
|
|
37
|
+
isPressedShift: boolean;
|
|
38
|
+
constructor(initValues?: UniqRowKeyType[]);
|
|
39
|
+
setAvailableKeys(value: UniqRowKeyType[]): void;
|
|
40
|
+
get(): UniqRowKeyType[];
|
|
41
|
+
isChecked(key: UniqRowKeyType): boolean;
|
|
42
|
+
replace(value: UniqRowKeyType[]): void;
|
|
43
|
+
has(value: UniqRowKeyType): boolean;
|
|
44
|
+
isAllSelected(): boolean;
|
|
45
|
+
isIndeterminate(): boolean;
|
|
46
|
+
selectAll(): void;
|
|
47
|
+
clearAll(): void;
|
|
48
|
+
clearAllAvailable(): void;
|
|
49
|
+
toggle(selected: boolean, row: DTRow<UniqRowKeyType>): void;
|
|
50
|
+
private toggleOneRow;
|
|
51
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@semcore/data-table",
|
|
3
3
|
"description": "Semrush DataTable Component",
|
|
4
|
-
"version": "16.
|
|
4
|
+
"version": "16.6.0-prerelease.2",
|
|
5
5
|
"main": "lib/cjs/index.js",
|
|
6
6
|
"module": "lib/es6/index.js",
|
|
7
7
|
"typings": "lib/types/index.d.ts",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"types": "./lib/types/index.d.ts"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@semcore/icon": "16.7.
|
|
17
|
+
"@semcore/icon": "16.7.5-prerelease.2",
|
|
18
18
|
"@semcore/button": "16.0.12",
|
|
19
19
|
"@semcore/checkbox": "16.2.1",
|
|
20
20
|
"@semcore/flex-box": "16.0.11",
|
|
@@ -27,21 +27,21 @@
|
|
|
27
27
|
"@types/node": "18.16.15",
|
|
28
28
|
"csstype": "3.1.3",
|
|
29
29
|
"@semcore/testing-utils": "1.0.0",
|
|
30
|
-
"@semcore/dropdown-menu": "16.2.2",
|
|
31
30
|
"@semcore/base-trigger": "16.4.5",
|
|
31
|
+
"@semcore/dropdown-menu": "16.2.2",
|
|
32
32
|
"@semcore/typography": "16.3.2",
|
|
33
33
|
"@semcore/accordion": "16.7.2",
|
|
34
|
-
"@semcore/portal": "16.0.11",
|
|
35
34
|
"@semcore/divider": "16.0.11",
|
|
36
|
-
"@semcore/
|
|
37
|
-
"@semcore/tooltip": "16.0.11",
|
|
35
|
+
"@semcore/portal": "16.0.11",
|
|
38
36
|
"@semcore/progress-bar": "16.0.11",
|
|
37
|
+
"@semcore/skeleton": "16.0.11",
|
|
38
|
+
"@semcore/spin": "16.0.11",
|
|
39
39
|
"@semcore/spin-container": "16.0.11",
|
|
40
|
-
"@semcore/
|
|
41
|
-
"@semcore/
|
|
40
|
+
"@semcore/tooltip": "16.0.11",
|
|
41
|
+
"@semcore/base-components": "16.5.0-prerelease.2"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
|
-
"@semcore/base-components": "^16.0.
|
|
44
|
+
"@semcore/base-components": "^16.5.0-prerelease.2"
|
|
45
45
|
},
|
|
46
46
|
"repository": {
|
|
47
47
|
"type": "git",
|