es-grid-template 1.8.55 → 1.8.57

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.
Files changed (37) hide show
  1. package/es/grid-component/type.d.ts +8 -0
  2. package/es/table-component/TableContainer.js +15 -0
  3. package/es/table-component/TableContainerEdit.js +13 -12
  4. package/es/table-component/body/TableBodyCell.js +24 -62
  5. package/es/table-component/body/TableBodyCellEdit.js +14 -9
  6. package/es/table-component/body/TableBodyRow.js +7 -12
  7. package/es/table-component/footer/TableFooterCell.js +2 -2
  8. package/es/table-component/footer/TableFooterRow.js +8 -4
  9. package/es/table-component/header/TableHead.js +4 -1
  10. package/es/table-component/header/TableHeadCell2.js +7 -48
  11. package/es/table-component/header/TableHeadGroupCell.js +13 -225
  12. package/es/table-component/header/TableHeadRow.js +7 -19
  13. package/es/table-component/hook/useColumns.js +17 -3
  14. package/es/table-component/hook/utils.js +0 -17
  15. package/es/table-component/style.scss +270 -15
  16. package/es/table-component/table/Grid.js +14 -25
  17. package/es/table-component/type.d.ts +8 -1
  18. package/es/table-component/useContext.d.ts +4 -1
  19. package/lib/grid-component/type.d.ts +8 -0
  20. package/lib/table-component/TableContainer.js +15 -0
  21. package/lib/table-component/TableContainerEdit.js +13 -12
  22. package/lib/table-component/body/TableBodyCell.js +24 -62
  23. package/lib/table-component/body/TableBodyCellEdit.js +14 -9
  24. package/lib/table-component/body/TableBodyRow.js +7 -12
  25. package/lib/table-component/footer/TableFooterCell.js +2 -2
  26. package/lib/table-component/footer/TableFooterRow.js +8 -4
  27. package/lib/table-component/header/TableHead.js +4 -1
  28. package/lib/table-component/header/TableHeadCell2.js +7 -48
  29. package/lib/table-component/header/TableHeadGroupCell.js +11 -223
  30. package/lib/table-component/header/TableHeadRow.js +7 -20
  31. package/lib/table-component/hook/useColumns.js +17 -3
  32. package/lib/table-component/hook/utils.js +0 -17
  33. package/lib/table-component/style.scss +270 -15
  34. package/lib/table-component/table/Grid.js +14 -25
  35. package/lib/table-component/type.d.ts +8 -1
  36. package/lib/table-component/useContext.d.ts +4 -1
  37. package/package.json +1 -1
@@ -7,31 +7,18 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = void 0;
8
8
  var _reactTable = require("@tanstack/react-table");
9
9
  var _react = _interopRequireWildcard(require("react"));
10
- var _antd = require("antd");
11
- var _becoxyIcons = require("becoxy-icons");
12
10
  var _classnames = _interopRequireDefault(require("classnames"));
13
11
  var _rcMasterUi = require("rc-master-ui");
14
- var _constant = require("../hook/constant");
15
12
  var _utils = require("../hook/utils");
16
13
  var _useContext = require("../useContext");
17
- var _renderFilter = require("./renderFilter");
18
14
  var _server = _interopRequireDefault(require("react-dom/server"));
19
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
16
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
- // import { useSortable } from "@dnd-kit/sortable"
22
-
23
- // import { CSS } from '@dnd-kit/utilities'
24
- // import type { Virtualizer } from '@tanstack/react-virtual'
25
-
26
- // import { ColumnTable } from "../type";
27
-
28
- // import { Tooltip } from 'react-tooltip'
29
-
30
17
  const TableHeadGroupCell = props => {
31
18
  const {
32
19
  column,
33
20
  header,
34
- getPopupContainer,
21
+ // getPopupContainer,
35
22
  table,
36
23
  depth,
37
24
  // t,
@@ -41,30 +28,21 @@ const TableHeadGroupCell = props => {
41
28
  rowSpan
42
29
  } = props;
43
30
  const {
44
- t,
31
+ // t,
45
32
  prefix,
46
- setSorterChange,
47
- setFilterChange,
33
+ // setSorterChange,
34
+ // setFilterChange,
48
35
  wrapSettings,
49
36
  selectionSettings,
50
37
  setIsSelectionChange,
51
- id,
52
- locale
38
+ id
39
+ // locale
53
40
  } = (0, _react.useContext)(_useContext.TableContext);
54
41
  const isPinned = column.getIsPinned();
55
42
  const isLastLeftPinnedColumn = isPinned === 'left' && column.getIsLastColumn('left');
56
43
  const isFirstRightPinnedColumn = isPinned === 'right' && column.getIsFirstColumn('right');
57
- const [selectedKeys, setSelectedKeys] = _react.default.useState([]);
58
- const [visible, setVisible] = _react.default.useState(false);
59
- const {
60
- filterIcon
61
- } = column.columnDef.meta ?? {};
62
-
63
- // const column = (column.columnDef ?? {}) as ColumnTable
64
- // const column = column.columnDef
65
-
66
44
  const originalColumn = column.columnDef.meta ?? {};
67
- const filtered = (column.getFilterValue() ?? []).length > 0;
45
+ const cellStyles = typeof originalColumn.onCellHeaderStyles === 'function' ? originalColumn.onCellHeaderStyles(header) : originalColumn.onCellHeaderStyles;
68
46
  const cellContent = (0, _reactTable.flexRender)(column.columnDef.header, header.getContext());
69
47
  const html = _server.default.renderToStaticMarkup( /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, cellContent));
70
48
  const hasValue = html.trim().length > 0;
@@ -77,148 +55,10 @@ const TableHeadGroupCell = props => {
77
55
  // })
78
56
 
79
57
  const style = {
80
- // opacity: isDragging ? 0.8 : 1,
81
- // position: 'relative',
82
- // transform: CSS.Translate.toString(transform), // translate instead of transform to avoid squishing
83
58
  transition: 'width transform 0.2s ease-in-out',
84
- whiteSpace: 'nowrap'
85
- // width: column.getSize(),
86
- // zIndex: isDragging ? 1 : 0,
59
+ whiteSpace: 'nowrap',
60
+ ...cellStyles
87
61
  };
88
- const getDropdownTrigger = () => {
89
- let iconFilter;
90
- if (typeof filterIcon === 'function') {
91
- iconFilter = filterIcon(filtered);
92
- } else if (filterIcon) {
93
- iconFilter = filterIcon;
94
- } else {
95
- iconFilter = /*#__PURE__*/_react.default.createElement(_becoxyIcons.FilterFill, {
96
- style: {
97
- color: filtered ? '#E3165B' : '#283046'
98
- },
99
- fontSize: 12
100
- });
101
- }
102
- return /*#__PURE__*/_react.default.createElement("span", {
103
- role: "button",
104
- tabIndex: -1,
105
- className: (0, _classnames.default)(`${prefix}-trigger`, {
106
- active: filtered
107
- }),
108
- onClick: e => {
109
- e.stopPropagation();
110
- }
111
- }, iconFilter);
112
- };
113
- const triggerVisible = newVisible => {
114
- setVisible(newVisible);
115
- };
116
- const onVisibleChange = (newVisible, info) => {
117
- if (info.source === 'trigger') {
118
- if (newVisible) {
119
- const filterValue = column.getFilterValue() ?? [];
120
- const operatorValue = column.getFilterOperator() ?? (0, _utils.getDefaultOperator)(column?.meta ?? {});
121
- setSelectedKeys(filterValue);
122
- column.setFilterOperator?.(operatorValue);
123
- } else {}
124
- triggerVisible(newVisible);
125
- }
126
- };
127
- const doFilter = type => {
128
- if (type) {
129
- column.setFilterValue(!originalColumn.typeFilter || originalColumn.typeFilter === 'Text' ? selectedKeys.length === 0 ? [''] : selectedKeys : selectedKeys);
130
- } else {
131
- column.setFilterValue(undefined);
132
- setSelectedKeys([]);
133
- }
134
- setFilterChange(true);
135
- triggerVisible(false);
136
- setTimeout(() => {
137
- setFilterChange(false);
138
- }, 10);
139
- };
140
- const mergedDropdownProps = (0, _utils.extendsObject)({
141
- trigger: ['click'],
142
- placement: 'bottomRight',
143
- // placement: direction === 'rtl' ? 'bottomLeft' : 'bottomRight',
144
- children: getDropdownTrigger(),
145
- getPopupContainer
146
- }, {
147
- // ...filterDropdownProps,
148
- // rootClassName: classNames(rootClassName, filterDropdownProps.rootClassName),
149
- open: visible,
150
- onOpenChange: onVisibleChange,
151
- destroyPopupOnHide: true,
152
- dropdownRender: () => {
153
- const type = (0, _utils.getTypeFilter)(originalColumn);
154
- const operatorValue = column.getFilterOperator() ?? (0, _utils.getDefaultOperator)(originalColumn);
155
- const operatorOptions = ['Checkbox', 'Dropdown', 'DropTree', 'CheckboxDropdown'].includes(type) ? _constant.booleanOperator : !type || type === 'Text' ? _constant.stringOperator : _constant.numberOperator;
156
- return /*#__PURE__*/_react.default.createElement("div", {
157
- // className='ui-rc-table-filter-dropdown'
158
-
159
- className: (0, _classnames.default)(`${prefix}-grid-filter-dropdown`, {}),
160
- style: {}
161
- }, /*#__PURE__*/_react.default.createElement("div", {
162
- style: {
163
- minWidth: 275,
164
- padding: '8px'
165
- }
166
- }, /*#__PURE__*/_react.default.createElement("div", null), column.meta?.showOperator !== false && column.meta?.typeFilter !== 'DateRange' && column.meta?.typeFilter !== 'NumberRange' && /*#__PURE__*/_react.default.createElement("div", {
167
- className: 'mb-1'
168
- }, /*#__PURE__*/_react.default.createElement(_rcMasterUi.Select, {
169
- options: (0, _constant.translateOption)(operatorOptions, t),
170
- style: {
171
- width: '100%',
172
- marginBottom: 8
173
- },
174
- value: operatorValue,
175
- onChange: val => {
176
- column.setFilterOperator(val);
177
- }
178
- })), /*#__PURE__*/_react.default.createElement("div", {
179
- style: {
180
- marginBottom: 8
181
- }
182
- }, (0, _renderFilter.renderFilter)({
183
- column: column,
184
- selectedKeys,
185
- setSelectedKeys
186
- // selectedKeys: (column.getFilterValue() ?? []) as string[],
187
- // setSelectedKeys: column.setFilterValue,
188
- })), /*#__PURE__*/_react.default.createElement(_antd.Space, {
189
- style: {
190
- justifyContent: 'end',
191
- width: '100%'
192
- }
193
- }, /*#__PURE__*/_react.default.createElement(_antd.Button, {
194
- type: "primary",
195
- onClick: () => {
196
- // column.setFilterValue(selectedKeys)
197
-
198
- doFilter(true);
199
- },
200
- size: "small",
201
- style: {
202
- width: 90
203
- }
204
- }, t ? t('Filter') : 'Filter'), /*#__PURE__*/_react.default.createElement(_antd.Button, {
205
- type: "link",
206
- size: "small",
207
- onClick: () => {
208
- // column.setFilterValue([])
209
- // column.setFilterOperator('')
210
-
211
- setSelectedKeys([]);
212
- doFilter(false);
213
- }
214
- }, t ? t('Clear') : 'Clear'))));
215
-
216
- // if (typeof filterDropdownProps?.dropdownRender === 'function') {
217
- // return filterDropdownProps.dropdownRender(dropdownContent);
218
- // }
219
- // return dropdownContent;
220
- }
221
- });
222
62
  return /*#__PURE__*/_react.default.createElement("div", {
223
63
  // ref={setNodeRef}
224
64
  className: (0, _classnames.default)(`${prefix}-grid-cell`, {
@@ -228,21 +68,14 @@ const TableHeadGroupCell = props => {
228
68
  [`${prefix}-grid-cell-fix-right-first`]: isFirstRightPinnedColumn,
229
69
  [`${prefix}-grid-cell-text-center`]: (originalColumn?.headerTextAlign ?? originalColumn?.textAlign) === 'center',
230
70
  [`${prefix}-grid-cell-text-right`]: (originalColumn?.headerTextAlign ?? originalColumn.textAlign) === 'right'
231
- })
232
- // colSpan={colSpan}
233
- // rowSpan={rowSpan}
234
- ,
235
-
71
+ }),
236
72
  "data-col-span": colSpan,
237
73
  key: header.id,
238
74
  style: {
239
- // display: 'flex',
240
- // width: column.getSize(),
241
75
  minWidth: column.getSize(),
242
76
  flex: 1,
243
77
  gridRow: `${depth + 1} / span ${rowSpan}`,
244
78
  gridColumn: `span ${colSpan}`,
245
- // maxWidth: header.getSize(),
246
79
  ...(0, _utils.getCommonPinningStyles2)(header),
247
80
  width: 'auto',
248
81
  ...style
@@ -276,52 +109,7 @@ const TableHeadGroupCell = props => {
276
109
  [`${prefix}-grid-cell-ellipsis`]: !wrapSettings || !(wrapSettings && (wrapSettings.wrapMode === 'Both' || wrapSettings.wrapMode === 'Header')),
277
110
  [`${prefix}-grid-cell-text-wrap`]: wrapSettings && (wrapSettings.wrapMode === 'Both' || wrapSettings.wrapMode === 'Header')
278
111
  })
279
- }, cellContent)), !_constant.nonActionColumn.includes(column.id) && column.columns.length < 1 && /*#__PURE__*/_react.default.createElement("span", {
280
- className: "ui-rc-header-trigger"
281
- }, column.getCanSort() && /*#__PURE__*/_react.default.createElement("div", {
282
- style: {
283
- marginInlineEnd: 6,
284
- cursor: 'pointer'
285
- },
286
- onClick: e => {
287
- setSorterChange(true);
288
- const toggleSortingHandler = column.getToggleSortingHandler();
289
- if (typeof toggleSortingHandler === 'function') {
290
- toggleSortingHandler(e);
291
- }
292
- }
293
- }, column.getIsSorted() ? column.getIsSorted() === 'asc' ? /*#__PURE__*/_react.default.createElement(_becoxyIcons.ArrowUp, {
294
- fontSize: 15,
295
- color: '#000'
296
- // data-tooltip-id={`${id}-tooltip-header-trigger`}
297
- ,
298
- "data-tooltip-id": `${id}-tooltip-content`
299
- // data-tooltip-content='Nhấp để sắp xếp giảm dần'
300
- ,
301
- "data-tooltip-content": locale?.triggerDesc ?? 'Click to sort descending'
302
- }) : /*#__PURE__*/_react.default.createElement(_becoxyIcons.ArrowDown, {
303
- fontSize: 15,
304
- color: '#000',
305
- "data-tooltip-id": `${id}-tooltip-content`
306
- // data-tooltip-id={`${id}-tooltip-header-trigger`}
307
- // data-tooltip-content='Nhấp để hủy sắp xếp'
308
- ,
309
- "data-tooltip-content": locale?.cancelSort ?? 'Click to cancel sorting'
310
- }) : /*#__PURE__*/_react.default.createElement(_becoxyIcons.SortCancel
311
- // data-tooltip-id={`${id}-tooltip-header-trigger`}
312
- , {
313
- "data-tooltip-id": `${id}-tooltip-content`
314
- // data-tooltip-content='Nhấp để sắp xếp tăng dần'
315
- ,
316
- "data-tooltip-content": locale?.triggerAsc ?? 'Click to sort ascending',
317
- fontSize: 15,
318
- style: {
319
- display: 'flex'
320
- },
321
- className: (0, _classnames.default)(`ui-rc-table-column-sorter-cancel`, {
322
- active: true
323
- })
324
- })), column.getCanFilter() && /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_rcMasterUi.Dropdown, mergedDropdownProps)))), column.getCanResize() && /*#__PURE__*/_react.default.createElement("div", {
112
+ }, cellContent))), column.getCanResize() && /*#__PURE__*/_react.default.createElement("div", {
325
113
  onDoubleClick: () => column.resetSize(),
326
114
  onMouseDown: header.getResizeHandler(),
327
115
  onTouchStart: header.getResizeHandler(),
@@ -9,40 +9,29 @@ var _sortable = require("@dnd-kit/sortable");
9
9
  var _react = _interopRequireDefault(require("react"));
10
10
  var _useContext = require("../useContext");
11
11
  var _TableHeadCell = _interopRequireDefault(require("./TableHeadCell"));
12
- // import type { Virtualizer } from '@tanstack/react-virtual'
13
- // import type { Person } from "../../tanstack-table/makeData"
14
-
15
- // import { getCommonPinningStyles } from '../hook/utils'
16
-
17
12
  const TableHeadRow = ({
18
13
  table,
19
14
  headerGroup,
20
15
  columnVirtualizer
21
- // virtualPaddingLeft,
22
- // virtualPaddingRight,
23
- // fixedLeftColumns,
24
- // fixedRightColumns
25
16
  }) => {
26
17
  const {
27
- prefix
18
+ prefix,
19
+ onRowHeaderStyles
28
20
  } = _react.default.useContext(_useContext.TableContext);
29
-
30
- // const virtualColumns = columnVirtualizer.getVirtualItems()
31
-
32
21
  const columnOrder = table.getState().columnOrder;
22
+ const rowStyles = typeof onRowHeaderStyles === 'function' ? onRowHeaderStyles() : onRowHeaderStyles;
33
23
  return /*#__PURE__*/_react.default.createElement("div", {
34
24
  key: headerGroup.id
35
25
  // ref={el => {
36
26
  // if (el) rowHeaderVirtualizer.measureElement(el)
37
27
  // }}
38
- // data-index={rowHeaderVirtual?.index}
39
28
  ,
29
+
40
30
  "data-index": headerGroup.id,
41
- className: `${prefix}-grid-row`,
31
+ className: `${prefix}-grid-row ${prefix}-grid-header`,
42
32
  style: {
43
- // display: 'flex',
33
+ ...rowStyles,
44
34
  width: '100%'
45
- // minHeight: rowHeaderVirtual?.size
46
35
  }
47
36
  }, /*#__PURE__*/_react.default.createElement(_sortable.SortableContext, {
48
37
  items: columnOrder,
@@ -61,9 +50,7 @@ const TableHeadRow = ({
61
50
  key: header.id,
62
51
  header: header,
63
52
  table: table,
64
- columnVirtualizer: columnVirtualizer
65
- // rowHeaderVirtualizer={rowHeaderVirtualizer}
66
- ,
53
+ columnVirtualizer: columnVirtualizer,
67
54
  colSpan: header.colSpan,
68
55
  rowSpan: rowSpan
69
56
  });
@@ -225,6 +225,8 @@ const toggleRowSelection = props => {
225
225
  return;
226
226
  }
227
227
  if (row.subRows && row.subRows.length > 0) {
228
+ // click vào row cha
229
+
228
230
  const allChild = (0, _utils.getAllChildren)(row);
229
231
  (0, _utils.toggleRowAndChildren)(row, !row.getIsSelected());
230
232
  if (row.getIsSelected()) {
@@ -256,17 +258,29 @@ const toggleRowSelection = props => {
256
258
  });
257
259
  }
258
260
  } else {
261
+ // click vào row không có cha
262
+
259
263
  row.getToggleSelectedHandler()(e);
260
264
  if (row.getIsSelected()) {
261
265
  // đã chọn
262
266
 
263
- // xóa row ra list selected
264
- const newRowsSelected = prevSelected.filter(it => it.id !== row.id);
267
+ const rowParent = row.getParentRow();
268
+ // const rowParent1 = row.getParentRows()
269
+
270
+ let newCheckedRows = [];
271
+ if (rowParent) {}
272
+ if (rowParent && (0, _utils.countUnselectedChildren)(row) === 1) {
273
+ newCheckedRows = prevSelected.filter(it => it.id !== row.id && it.id !== rowParent.id);
274
+ } else {
275
+ // xóa row ra list selected
276
+ // const newRowsSelected = prevSelected.filter((it) => it.id !== row.id)
277
+ newCheckedRows = prevSelected.filter(it => it.id !== row.id);
278
+ }
265
279
  setIsSelectionChange({
266
280
  isChange: true,
267
281
  type: 'rowSelected',
268
282
  rowData: row.original,
269
- rowsData: newRowsSelected ?? []
283
+ rowsData: newCheckedRows ?? []
270
284
  });
271
285
  } else {
272
286
  // chưa selected
@@ -94,25 +94,13 @@ const convertDateToDayjs = (date, format) => {
94
94
  exports.convertDateToDayjs = convertDateToDayjs;
95
95
  const getCommonPinningStyles = column => {
96
96
  const isPinned = column.getIsPinned();
97
- // const isLastLeftPinnedColumn = isPinned === "left" && column.getIsLastColumn("left");
98
- // const isFirstRightPinnedColumn =isPinned === "right" && column.getIsFirstColumn("right");
99
-
100
97
  return {
101
- // boxShadow: isFirstRightPinnedColumn
102
- // ? "#e0e0e0 2px 0px 1px -1px inset"
103
- // : undefined,
104
-
105
98
  left: isPinned === "left" ? `${column.getStart("left")}px` : undefined,
106
99
  right: isPinned === "right" ? `${column.getAfter("right")}px` : undefined,
107
- // opacity: isPinned ? 0.5 : 1,
108
100
  opacity: 1,
109
101
  position: isPinned ? "sticky" : "relative",
110
- // width: column.getSize(),
111
102
  width: 'auto',
112
103
  zIndex: isPinned ? 2 : 0
113
- // border: '1px solid #e5e7eb',
114
- // borderTop: 0,
115
- // borderBottom: 0
116
104
  };
117
105
  };
118
106
  exports.getCommonPinningStyles = getCommonPinningStyles;
@@ -128,15 +116,10 @@ const getCommonPinningStyles2 = header => {
128
116
 
129
117
  left: isPinned === "left" ? `${header.getStart("left")}px` : undefined,
130
118
  right: isPinned === "right" ? `${header.getAfter("right")}px` : undefined,
131
- // opacity: isPinned ? 0.5 : 1,
132
119
  opacity: 1,
133
120
  position: isPinned ? "sticky" : "relative",
134
- // width: column.getSize(),
135
121
  width: 'auto',
136
122
  zIndex: isPinned ? 2 : 0
137
- // border: '1px solid #e5e7eb',
138
- // borderTop: 0,
139
- // borderBottom: 0
140
123
  };
141
124
  };
142
125
  exports.getCommonPinningStyles2 = getCommonPinningStyles2;