es-grid-template 0.0.7 → 0.0.8

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.
@@ -7,55 +7,38 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _react = _interopRequireWildcard(require("react"));
10
- var _uiRc = require("ui-rc");
11
10
  var _reactResizable = require("react-resizable");
12
11
  var _antdStyle = require("antd-style");
13
12
  var _reactNumericComponent = require("react-numeric-component");
14
13
  var _icons = require("@ant-design/icons");
14
+ var _rcMasterUi = require("rc-master-ui");
15
15
  var _dayjs = _interopRequireDefault(require("dayjs"));
16
16
  require("dayjs/locale/es");
17
17
  require("dayjs/locale/vi");
18
18
  require("./styles.scss");
19
+ var _en_US = _interopRequireDefault(require("rc-master-ui/es/date-picker/locale/en_US"));
20
+ var _vi_VN = _interopRequireDefault(require("rc-master-ui/es/date-picker/locale/vi_VN"));
19
21
  var _moment = _interopRequireDefault(require("moment"));
20
22
  var _CheckboxFilter = _interopRequireDefault(require("./CheckboxFilter"));
21
23
  var _ContextMenu = _interopRequireDefault(require("./ContextMenu"));
22
- var _ColumnsChoose = require("./ColumnsChoose");
23
24
  var _classnames = _interopRequireDefault(require("classnames"));
24
25
  var _hooks = require("./hooks");
25
26
  var _antd = require("antd");
26
27
  var _useColumns = require("./hooks/useColumns");
28
+ var _customParseFormat = _interopRequireDefault(require("dayjs/plugin/customParseFormat"));
29
+ var _pagination = _interopRequireDefault(require("rc-master-ui/es/pagination"));
30
+ var _space = _interopRequireDefault(require("rc-master-ui/es/space"));
31
+ var _becoxyIcons = require("becoxy-icons");
32
+ var _LoadingSpinner = _interopRequireDefault(require("./LoadingSpinner"));
33
+ var _ColumnsChoose = require("./ColumnsChoose");
27
34
  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); }
28
35
  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; }
29
- // import {Button, DatePicker, Input, Space} from "antd"
30
-
31
- // import {flatColumns} from "../../hooks/useColumns";
32
- // import {
33
- // checkDecimalSeparator,
34
- // checkThousandSeparator,
35
- // convertDateToDayjs,
36
- // convertDayjsToDate,
37
- // getTypeFilter,
38
- // getDatepickerFormat,
39
- // isColor,
40
- // isEmpty,
41
- // numberOperator,
42
- // sumDataByField,
43
- // translateOption
44
- // } from "../hooks";
45
-
46
- // import type {ColumnsType, ColumnType, GridTableProps} from "../../type";
47
-
48
- // import en from 'antd/es/date-picker/locale/en_US'
49
-
50
- // import vi from 'antd/es/date-picker/locale/vi_VN'
51
-
52
- // import type {PickerLocale} from "antd/es/date-picker/generatePicker";
53
-
54
- // import type {PickerLocale} from "ui-rc/dist/date-picker/generatePicker";
36
+ // import styled from "styled-components";
55
37
 
38
+ _dayjs.default.extend(_customParseFormat.default);
56
39
  const {
57
40
  RangePicker
58
- } = _uiRc.DatePicker;
41
+ } = _rcMasterUi.DatePicker;
59
42
  const convertFilters = filters => {
60
43
  const result = [];
61
44
  filters.forEach(({
@@ -65,25 +48,25 @@ const convertFilters = filters => {
65
48
  operator
66
49
  }) => {
67
50
  if (!filteredKeys || filteredKeys.length === 0) return;
68
- if (column.typeFilter === "DateRange" && filteredKeys.length === 2) {
51
+ if (column?.typeFilter === "DateRange" && filteredKeys.length === 2) {
69
52
  result.push({
70
53
  key,
71
- field: column.dataIndex,
54
+ field: column?.dataIndex,
72
55
  value: filteredKeys[0],
73
56
  predicate: "and",
74
57
  operator: "greaterthanorequal"
75
58
  }, {
76
59
  key,
77
- field: column.dataIndex,
60
+ field: column?.dataIndex,
78
61
  value: filteredKeys[1],
79
62
  predicate: "and",
80
63
  operator: "lessthanorequal"
81
64
  });
82
- } else if (column.typeFilter === 'Checkbox') {
65
+ } else if (column?.typeFilter === 'Checkbox') {
83
66
  filteredKeys.forEach(value => {
84
67
  result.push({
85
68
  key,
86
- field: column.dataIndex,
69
+ field: column?.dataIndex,
87
70
  value,
88
71
  predicate: "or",
89
72
  operator
@@ -92,7 +75,7 @@ const convertFilters = filters => {
92
75
  } else {
93
76
  result.push({
94
77
  key,
95
- field: column.dataIndex,
78
+ field: column?.dataIndex,
96
79
  value: filteredKeys[0],
97
80
  predicate: 'and',
98
81
  operator
@@ -149,10 +132,13 @@ const useStyle = (0, _antdStyle.createStyles)(({
149
132
  `
150
133
  };
151
134
  });
152
- const GridTable = props => {
135
+ // type OnChange = NonNullable<TableProps<any>['onChange']>;
136
+
137
+ const TableGrid = props => {
153
138
  const {
154
139
  columns: defaultColumns,
155
140
  dataSource,
141
+ title,
156
142
  format,
157
143
  virtual = true,
158
144
  t,
@@ -169,23 +155,27 @@ const GridTable = props => {
169
155
  rowSelection,
170
156
  rowSelected,
171
157
  rowKey = 'id',
158
+ pagination,
159
+ scroll,
160
+ onFilterClick,
161
+ dataSourceFilter: propDataSourceFilter,
162
+ loading,
163
+ setColumns,
164
+ // dataSourceFilter,
172
165
  ...rest
173
166
  } = props;
174
167
  const {
175
168
  styles
176
169
  } = useStyle();
170
+ const locale = lang && lang === 'en' ? _en_US.default : _vi_VN.default;
171
+ // const locale = vi
177
172
 
178
- // const locale = lang && lang === 'en' ? en : vi
179
-
180
- // const buddhistLocale: PickerLocale = {
181
- // ...locale,
182
- // lang: {
183
- // ...locale.lang
184
- //
185
- // }
186
- // }
187
-
188
- // console.log('buddhistLocale', buddhistLocale)
173
+ const buddhistLocale = {
174
+ ...locale,
175
+ lang: {
176
+ ...locale.lang
177
+ }
178
+ };
189
179
  const clickRef = (0, _react.useRef)(null);
190
180
  const searchInput = (0, _react.useRef)(null);
191
181
  const menuRef = (0, _react.useRef)(null);
@@ -202,9 +192,11 @@ const GridTable = props => {
202
192
  viewportWidth,
203
193
  viewportHeight
204
194
  });
205
- // const [filters, setFilters] = React.useState<any[]>([])
206
-
207
195
  const [selectedRowKeys, setSelectedRowKeys] = (0, _react.useState)(defaultSelected);
196
+ const [dataSourceFilter, setDataSourceFilter] = (0, _react.useState)(propDataSourceFilter ?? []);
197
+ _react.default.useEffect(() => {
198
+ setDataSourceFilter(propDataSourceFilter ?? []);
199
+ }, [propDataSourceFilter]);
208
200
  const contextMenuItems = _react.default.useMemo(() => {
209
201
  if (typeof contextMenuHidden === "function" && propContextMenuItems && selectedRowData) {
210
202
  const hiddenItems = contextMenuHidden({
@@ -222,15 +214,15 @@ const GridTable = props => {
222
214
  (0, _react.useLayoutEffect)(() => {
223
215
  setMenuVisible(false);
224
216
  }, []);
225
- const handleSearch = (selectedKeys, confirm
226
- // dataIndex: any
227
- ) => {
217
+ const handleSearch = (selectedKeys, confirm) => {
228
218
  confirm();
229
219
  };
230
220
  const renderFilter = (column, selectedKeys, setSelectedKeys, confirm, visible, searchValue, setSearchValue) => {
231
221
  const type = (0, _hooks.getTypeFilter)(column);
232
- const dateFormat = (0, _hooks.getDatepickerFormat)(column.type, column) ?? 'DD/MM/YYYY';
233
- const dateRangeFormat = (0, _hooks.getDatepickerFormat)(column.type, column) ?? 'DD/MM/YYYY';
222
+ const dateFormat = (0, _hooks.getDatepickerFormat)(column?.typeFilter ?? column?.type, column) ?? 'DD/MM/YYYY';
223
+ const dateRangeFormat = (0, _hooks.getDatepickerFormat)(column?.type, column) ?? 'DD/MM/YYYY';
224
+ const find = dataSourceFilter?.find(it => it.key === column?.key);
225
+ const options = find ? find.data : [];
234
226
  switch (type) {
235
227
  case 'Number':
236
228
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
@@ -242,7 +234,7 @@ const GridTable = props => {
242
234
  // allowNegative={col.format && col.format.allowNegative === true}
243
235
  ,
244
236
  allowNegative: true,
245
- customInput: _uiRc.Input,
237
+ customInput: _rcMasterUi.Input,
246
238
  className: ' rounded-0 input-element form-control',
247
239
  onValueChange: values => {
248
240
  // onChangeValueFilter(type, values.floatValue)
@@ -262,7 +254,7 @@ const GridTable = props => {
262
254
  // decimalSeparator={checkDecimalSeparator(thousandSeparator, decimalSeparator)}
263
255
  ,
264
256
  allowNegative: true,
265
- customInput: _uiRc.Input,
257
+ customInput: _rcMasterUi.Input,
266
258
  className: ' rounded-0 input-element form-control'
267
259
  // onValueChange={(values: any) => {
268
260
  // onChangeValueFilter(type, values.floatValue, 'min')
@@ -276,7 +268,7 @@ const GridTable = props => {
276
268
  // decimalSeparator={checkDecimalSeparator(thousandSeparator, decimalSeparator)}
277
269
  ,
278
270
  allowNegative: true,
279
- customInput: _uiRc.Input,
271
+ customInput: _rcMasterUi.Input,
280
272
  className: ' rounded-0 input-element form-control',
281
273
  onValueChange: () => {
282
274
  // onChangeValueFilter(type, values.floatValue, 'max')
@@ -287,21 +279,20 @@ const GridTable = props => {
287
279
  const dateValue = selectedKeys[0] ? (0, _hooks.convertDateToDayjs)(new Date(selectedKeys[0]), dateFormat) : null;
288
280
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
289
281
  className: 'mb-1'
290
- }, /*#__PURE__*/_react.default.createElement(_uiRc.DatePicker, {
282
+ }, /*#__PURE__*/_react.default.createElement(_rcMasterUi.DatePicker, {
291
283
  format: {
292
284
  format: dateFormat,
293
285
  type: 'mask'
294
- }
295
- // locale={buddhistLocale}
296
- ,
286
+ },
287
+ locale: buddhistLocale,
297
288
  style: {
298
289
  width: '100%',
299
290
  height: '100%'
300
291
  },
301
292
  value: dateValue,
302
293
  defaultValue: dateValue,
303
- placeholder: column.placeholder,
304
- onChange: (valueDate, dateString) => {
294
+ placeholder: column?.placeholder,
295
+ onChange: (date, dateString) => {
305
296
  const newDateValue = dateString ? (0, _moment.default)((0, _hooks.convertDayjsToDate)(dateString, dateFormat)).format() : null;
306
297
  setSelectedKeys(newDateValue ? [newDateValue] : []);
307
298
  }
@@ -334,11 +325,136 @@ const GridTable = props => {
334
325
  // popupClassName={'adv-popup-container'}
335
326
  // getPopupContainer={() => menuRef.current}
336
327
  }))));
328
+ case 'Week':
329
+ const weekValue = !(0, _hooks.isEmpty)(selectedKeys[0]) ? (0, _dayjs.default)(selectedKeys[0], dateFormat) : null;
330
+ return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
331
+ className: 'mb-1'
332
+ }, /*#__PURE__*/_react.default.createElement(_rcMasterUi.DatePicker, {
333
+ format: {
334
+ format: dateFormat,
335
+ type: 'mask'
336
+ },
337
+ picker: 'week',
338
+ locale: buddhistLocale,
339
+ style: {
340
+ width: '100%',
341
+ height: '100%'
342
+ },
343
+ value: weekValue,
344
+ defaultValue: weekValue,
345
+ placeholder: column?.placeholder,
346
+ onChange: (date, dateString) => {
347
+ const newDateValue = dateString ?? null;
348
+ setSelectedKeys(newDateValue ? [newDateValue] : []);
349
+ }
350
+ }))));
351
+ case 'Month':
352
+ const monthValue = !(0, _hooks.isEmpty)(selectedKeys[0]) ? (0, _dayjs.default)(selectedKeys[0], dateFormat) : null;
353
+ return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
354
+ className: 'mb-1'
355
+ }, /*#__PURE__*/_react.default.createElement(_rcMasterUi.DatePicker, {
356
+ format: {
357
+ format: dateFormat,
358
+ type: 'mask'
359
+ },
360
+ picker: 'month',
361
+ locale: buddhistLocale,
362
+ style: {
363
+ width: '100%',
364
+ height: '100%'
365
+ },
366
+ value: monthValue,
367
+ defaultValue: monthValue,
368
+ placeholder: column?.placeholder,
369
+ onChange: (date, dateString) => {
370
+ const newDateValue = dateString ?? null;
371
+ setSelectedKeys(newDateValue ? [newDateValue] : []);
372
+ }
373
+ })));
374
+
375
+ // case 'Quarter':
376
+ //
377
+ // // const monthValue = selectedKeys[0] ? convertDateToDayjs(new Date(selectedKeys[0]), dateFormat) : null
378
+ //
379
+ // const pickerFormat = getDatepickerFormat(getEditType(col) as IEditType, col)
380
+ // const pickerValue = !isEmpty(selectedKeys[0]) ? dayjs(selectedKeys[0], pickerFormat) : null
381
+ //
382
+ // return (
383
+ // <Fragment>
384
+ // <div>
385
+ //
386
+ //
387
+ // <div className={'mb-1'}>
388
+ //
389
+ // <DatePicker
390
+ // format={{
391
+ // format: dateFormat,
392
+ // type: 'mask'
393
+ // }}
394
+ // locale={buddhistLocale}
395
+ // style={{width: '100%', height: '100%'}}
396
+ // value={pickerValue}
397
+ // defaultValue={pickerValue}
398
+ // placeholder={column.placeholder}
399
+ // onChange={(date, dateString) => {
400
+ // const newDateValue = dateString ? moment(convertDayjsToDate(dateString as string, dateFormat)).format() : null
401
+ // setSelectedKeys(newDateValue ? [newDateValue] : [])
402
+ //
403
+ // }}
404
+ //
405
+ // />
406
+ // </div>
407
+ //
408
+ //
409
+ // </div>
410
+ // </Fragment>
411
+ // )
412
+ //
413
+ // case 'Year':
414
+ //
415
+ // // const monthValue = selectedKeys[0] ? convertDateToDayjs(new Date(selectedKeys[0]), dateFormat) : null
416
+ //
417
+ // const pickerFormat = getDatepickerFormat(getEditType(col) as IEditType, col)
418
+ // const pickerValue = !isEmpty(selectedKeys[0]) ? dayjs(selectedKeys[0], pickerFormat) : null
419
+ //
420
+ // return (
421
+ // <Fragment>
422
+ // <div>
423
+ //
424
+ //
425
+ // <div className={'mb-1'}>
426
+ //
427
+ // <DatePicker
428
+ // format={{
429
+ // format: dateFormat,
430
+ // type: 'mask'
431
+ // }}
432
+ // locale={buddhistLocale}
433
+ // style={{width: '100%', height: '100%'}}
434
+ // value={pickerValue}
435
+ // defaultValue={pickerValue}
436
+ // placeholder={column.placeholder}
437
+ // onChange={(date, dateString) => {
438
+ // const newDateValue = dateString ? moment(convertDayjsToDate(dateString as string, dateFormat)).format() : null
439
+ // setSelectedKeys(newDateValue ? [newDateValue] : [])
440
+ //
441
+ // }}
442
+ //
443
+ // />
444
+ // </div>
445
+ //
446
+ //
447
+ // </div>
448
+ // </Fragment>
449
+ // )
450
+
337
451
  case 'Dropdown':
338
452
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
339
453
  className: 'mb-1'
340
- }, /*#__PURE__*/_react.default.createElement(_uiRc.Select, {
341
- options: (0, _hooks.translateOption)(_hooks.numberOperator, t),
454
+ }, /*#__PURE__*/_react.default.createElement(_rcMasterUi.Select
455
+ // options={translateOption(numberOperator, t)}
456
+ , {
457
+ options: options,
342
458
  style: {
343
459
  width: '100%',
344
460
  marginBottom: 8
@@ -409,54 +525,17 @@ const GridTable = props => {
409
525
  filterCheckall: 'Chọn tất cả'
410
526
  },
411
527
  selectedKeys: selectedKeys,
412
- onSelect: setSelectedKeys,
413
- options: [{
414
- text: 'Joe',
415
- value: 'Joe'
416
- }, {
417
- text: 'Jim',
418
- value: 'Jim'
419
- }, {
420
- text: 'Green',
421
- value: 'Green'
422
- }, {
423
- text: 'Black',
424
- value: 'Black'
425
- }, {
426
- text: 'Category 1',
427
- value: 'Category 1'
428
- }, {
429
- text: 'Yellow',
430
- value: 'Yellow'
431
- }, {
432
- text: 'Pink',
433
- value: 'Pink'
434
- }, {
435
- text: 'Category 2',
436
- value: 'Category 666'
437
- }, {
438
- text: 'Category 2',
439
- value: 'Category 555'
440
- }, {
441
- text: 'Category 2',
442
- value: 'Category 55'
443
- }, {
444
- text: 'Category 2',
445
- value: 'Category 44'
446
- }, {
447
- text: 'Category 2',
448
- value: 'Category 33'
449
- }, {
450
- text: 'Category 2',
451
- value: 'Category 22'
452
- }, {
453
- text: 'Category 2',
454
- value: 'Category 11'
455
- }
456
- // {
457
- // text: 'Submenu',
458
- // value: 'Submenu',
459
- // children: [
528
+ onSelect: setSelectedKeys
529
+ // options={
530
+ // [
531
+ // {
532
+ // text: 'Joe',
533
+ // value: 'Joe',
534
+ // },
535
+ // {
536
+ // text: 'Jim',
537
+ // value: 'Jim',
538
+ // },
460
539
  // {
461
540
  // text: 'Green',
462
541
  // value: 'Green',
@@ -465,9 +544,65 @@ const GridTable = props => {
465
544
  // text: 'Black',
466
545
  // value: 'Black',
467
546
  // },
468
- // ],
469
- // },
470
- ],
547
+ // {
548
+ // text: 'Category 1',
549
+ // value: 'Category 1'
550
+ // },
551
+ // {
552
+ // text: 'Yellow',
553
+ // value: 'Yellow',
554
+ // },
555
+ // {
556
+ // text: 'Pink',
557
+ // value: 'Pink',
558
+ // },
559
+ // {
560
+ // text: 'Category 2',
561
+ // value: 'Category 666'
562
+ // },
563
+ // {
564
+ // text: 'Category 2',
565
+ // value: 'Category 555'
566
+ // },
567
+ // {
568
+ // text: 'Category 2',
569
+ // value: 'Category 55'
570
+ // },
571
+ // {
572
+ // text: 'Category 2',
573
+ // value: 'Category 44'
574
+ // },
575
+ // {
576
+ // text: 'Category 2',
577
+ // value: 'Category 33'
578
+ // },
579
+ // {
580
+ // text: 'Category 2',
581
+ // value: 'Category 22'
582
+ // },
583
+ // {
584
+ // text: 'Category 2',
585
+ // value: 'Category 11'
586
+ // }
587
+ // // {
588
+ // // text: 'Submenu',
589
+ // // value: 'Submenu',
590
+ // // children: [
591
+ // // {
592
+ // // text: 'Green',
593
+ // // value: 'Green',
594
+ // // },
595
+ // // {
596
+ // // text: 'Black',
597
+ // // value: 'Black',
598
+ // // },
599
+ // // ],
600
+ // // },
601
+ // ]
602
+ // }
603
+ ,
604
+
605
+ options: options,
471
606
  filterMultiple: true,
472
607
  open: visible,
473
608
  searchValue: searchValue,
@@ -477,9 +612,9 @@ const GridTable = props => {
477
612
  default:
478
613
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
479
614
  className: 'mb-1'
480
- }, /*#__PURE__*/_react.default.createElement(_uiRc.Input, {
615
+ }, /*#__PURE__*/_react.default.createElement(_rcMasterUi.Input, {
481
616
  ref: searchInput,
482
- placeholder: `Search ${column.key}`,
617
+ placeholder: `Search ${column?.dataIndex}`,
483
618
  value: selectedKeys[0],
484
619
  onChange: e => setSelectedKeys(e.target.value ? [e.target.value] : []),
485
620
  onPressEnter: () => handleSearch(selectedKeys, confirm),
@@ -487,12 +622,33 @@ const GridTable = props => {
487
622
  }))));
488
623
  }
489
624
  };
625
+ const onFilterCallback = (key, data) => {
626
+ // console.log(key, data)
627
+
628
+ const find = dataSourceFilter.find(it => it.key === key);
629
+ if (find) {
630
+ const newData = (0, _hooks.updateArrayByKey)(dataSourceFilter, {
631
+ key,
632
+ data
633
+ }, 'key');
634
+ setDataSourceFilter(newData);
635
+ } else {
636
+ const newData = [...dataSourceFilter, {
637
+ key,
638
+ data
639
+ }];
640
+ setDataSourceFilter(newData);
641
+ }
642
+
643
+ // setDataSourceFilter([{key, data}])
644
+ };
645
+
646
+ // eslint-disable-next-line react-hooks/exhaustive-deps
490
647
  const getColumnSearchProps = column => ({
491
648
  filterDropdown: ({
492
649
  setSelectedKeys,
493
650
  selectedKeys,
494
651
  confirm,
495
- // clearFilters,
496
652
  close,
497
653
  setOperatorKey,
498
654
  operatorKey,
@@ -500,16 +656,15 @@ const GridTable = props => {
500
656
  searchValue,
501
657
  setSearchValue
502
658
  }) => {
503
- // const typeFilter = getTypeFilter(columns as RcColumnType)
504
659
  return /*#__PURE__*/_react.default.createElement("div", {
505
660
  style: {
506
661
  padding: 8,
507
662
  minWidth: 275
508
663
  },
509
664
  onKeyDown: e => e.stopPropagation()
510
- }, (column.showOperator !== false || column.typeFilter !== 'DateRange' && column.typeFilter !== 'NumberRange') && /*#__PURE__*/_react.default.createElement("div", {
665
+ }, (column?.showOperator !== false || column?.typeFilter !== 'DateRange' && column?.typeFilter !== 'NumberRange') && /*#__PURE__*/_react.default.createElement("div", {
511
666
  className: 'mb-1'
512
- }, /*#__PURE__*/_react.default.createElement(_uiRc.Select, {
667
+ }, /*#__PURE__*/_react.default.createElement(_rcMasterUi.Select, {
513
668
  options: (0, _hooks.translateOption)(_hooks.numberOperator, t),
514
669
  style: {
515
670
  width: '100%',
@@ -523,7 +678,7 @@ const GridTable = props => {
523
678
  style: {
524
679
  marginBottom: 8
525
680
  }
526
- }, renderFilter(column, selectedKeys, setSelectedKeys, confirm, visible, searchValue, setSearchValue)), /*#__PURE__*/_react.default.createElement("div", {
681
+ }, renderFilter(column, selectedKeys, setSelectedKeys, confirm, visible, searchValue, setSearchValue)), /*#__PURE__*/_react.default.createElement(_space.default, {
527
682
  style: {
528
683
  justifyContent: 'end',
529
684
  width: '100%'
@@ -549,50 +704,52 @@ const GridTable = props => {
549
704
  }
550
705
  }, "close")));
551
706
  },
552
- // filterIcon: (filtered: boolean) => (
553
- // <SearchOutlined style={{ color: filtered ? '#1677ff' : undefined }} />
554
- // ),
555
-
556
- onFilter: (value, record) => {
557
- // @ts-ignore
558
- return record[column.dataIndex];
559
- },
707
+ filterIcon: filtered => /*#__PURE__*/_react.default.createElement(_becoxyIcons.FilterFill, {
708
+ fontSize: 12,
709
+ onClick: () => {
710
+ console.log('onFilterClick', column);
711
+ onFilterClick?.(column, onFilterCallback);
712
+ },
713
+ style: {
714
+ color: filtered ? '#283046' : undefined
715
+ }
716
+ }),
560
717
  filterDropdownProps: {
561
718
  onOpenChange(open) {
562
719
  if (open) {
563
720
  setTimeout(() => searchInput.current?.select(), 100);
564
721
  }
565
722
  }
566
-
567
- // trigger: ['hover']
568
723
  }
569
724
  });
725
+
726
+ // eslint-disable-next-line react-hooks/exhaustive-deps
570
727
  const renderContent = column => value => {
571
728
  switch (column?.type) {
572
729
  case 'number':
573
- const thousandSeparator = column.format?.thousandSeparator ? column.format?.thousandSeparator : format?.thousandSeparator;
574
- const decimalSeparator = column.format?.decimalSeparator ? column.format?.decimalSeparator : format?.decimalSeparator;
575
- const dec = column.format?.decimalScale || column.format?.decimalScale === 0 ? column.format?.decimalScale : format?.decimalScale;
730
+ const thousandSeparator = column?.format?.thousandSeparator ? column?.format?.thousandSeparator : format?.thousandSeparator;
731
+ const decimalSeparator = column?.format?.decimalSeparator ? column?.format?.decimalSeparator : format?.decimalSeparator;
732
+ const dec = column?.format?.decimalScale || column?.format?.decimalScale === 0 ? column?.format?.decimalScale : format?.decimalScale;
576
733
  const content = !(0, _hooks.isEmpty)(value) ? dec || dec === 0 ? parseFloat(Number(value).toFixed(dec)).toString() : value.toString() : '0';
577
734
  const numericFormatProps = {
578
735
  thousandSeparator: (0, _hooks.checkThousandSeparator)(thousandSeparator, decimalSeparator),
579
736
  decimalSeparator: (0, _hooks.checkDecimalSeparator)(thousandSeparator, decimalSeparator),
580
- allowNegative: (column.format?.allowNegative ? column.format?.allowNegative : format?.allowNegative) ?? true,
581
- prefix: column.format?.prefix ? column.format?.prefix : format?.prefix,
582
- suffix: column.format?.suffix ? column.format?.suffix : format?.suffix,
583
- decimalScale: column.format?.decimalScale || column.format?.decimalScale === 0 ? column.format?.decimalScale : format?.decimalScale,
584
- fixedDecimalScale: (column.format?.fixedDecimalScale ? column.format?.fixedDecimalScale : format?.fixedDecimalScale) ?? false
737
+ allowNegative: (column?.format?.allowNegative ? column?.format?.allowNegative : format?.allowNegative) ?? true,
738
+ prefix: column?.format?.prefix ? column?.format?.prefix : format?.prefix,
739
+ suffix: column?.format?.suffix ? column?.format?.suffix : format?.suffix,
740
+ decimalScale: column?.format?.decimalScale || column?.format?.decimalScale === 0 ? column?.format?.decimalScale : format?.decimalScale,
741
+ fixedDecimalScale: (column?.format?.fixedDecimalScale ? column?.format?.fixedDecimalScale : format?.fixedDecimalScale) ?? false
585
742
  };
586
743
  return !(0, _hooks.isEmpty)(content) ? (0, _reactNumericComponent.numericFormatter)(content, numericFormatProps) : '';
587
744
  case 'date':
588
- return value ? (0, _dayjs.default)(value).format(column.format?.dateFormat ?? format?.dateFormat ?? 'DD/MM/YYYY') : '';
745
+ return value ? (0, _dayjs.default)(value).format(column?.format?.dateFormat ?? format?.dateFormat ?? 'DD/MM/YYYY') : '';
589
746
  case 'time':
590
747
  return value ? value : '';
591
748
  case 'year':
592
749
  const year = value ? (0, _moment.default)(value).format('yyyy') : '';
593
750
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, year);
594
751
  case 'datetime':
595
- return value ? (0, _moment.default)(value).format(column.format?.datetimeFormat ?? format?.datetimeFormat ?? 'DD/MM/YYYY HH:mm') : '';
752
+ return value ? (0, _moment.default)(value).format(column?.format?.datetimeFormat ?? format?.datetimeFormat ?? 'DD/MM/YYYY HH:mm') : '';
596
753
  case 'boolean':
597
754
  return value ? 'true' : 'false';
598
755
  case 'color':
@@ -604,7 +761,7 @@ const GridTable = props => {
604
761
  }
605
762
  }) : '');
606
763
  case 'checkbox':
607
- return /*#__PURE__*/_react.default.createElement(_uiRc.Input, {
764
+ return /*#__PURE__*/_react.default.createElement(_rcMasterUi.Input, {
608
765
  checked: !!content,
609
766
  readOnly: true,
610
767
  type: "checkbox"
@@ -619,117 +776,45 @@ const GridTable = props => {
619
776
  return value;
620
777
  }
621
778
  };
622
- const addIsFilter = columns => {
623
- return columns.map(column => {
779
+ const addFilter = _react.default.useCallback(cols => {
780
+ return cols.map(column => {
624
781
  // @ts-ignore
625
- if (!column?.dataIndex && !column.key) {
782
+ if (!column?.dataIndex && !column?.key) {
626
783
  return column;
627
784
  }
628
785
  // @ts-ignore
629
- if (column?.children && column.children.length > 0) {
786
+ if (column?.children && column?.children.length > 0) {
630
787
  return {
631
788
  ...column,
632
789
  // @ts-ignore
633
- children: addIsFilter(column.children) // Xử lý đệ quy cho cấp con
790
+ children: addFilter(column?.children) // Xử lý đệ quy cho cấp con
634
791
  };
635
792
  }
636
793
  // @ts-ignore
637
- if (column?.dataIndex === 'index' || column.allowFiltering === false) {
794
+ if (column?.dataIndex === 'index' || column?.allowFiltering === false) {
638
795
  return {
639
796
  ...column
640
797
  };
641
798
  }
642
799
  return {
643
800
  ...getColumnSearchProps(column),
801
+ onFilter: (value, record) => {
802
+ // @ts-ignore
803
+ return record[column?.dataIndex];
804
+ },
644
805
  render: renderContent(column),
645
- ...column
646
- };
647
- });
648
- };
649
- const tmpColumns = (0, _react.useMemo)(() => {
650
- // return addIsFilter(defaultColumns ?? [])
651
- return addIsFilter(defaultColumns ? [_uiRc.Table.SELECTION_COLUMN, ...defaultColumns] : []);
652
- }, [defaultColumns]);
653
- const [columns, setColumns] = (0, _react.useState)(tmpColumns ?? []);
654
- const handleResize = indexPath => (e, {
655
- size
656
- }) => {
657
- const updateColumns = (cols, path) => {
658
- const [currentIndex, ...restPath] = path;
659
- return cols.map((col, idx) => {
660
- if (idx === currentIndex) {
661
- if (restPath.length === 0) {
662
- // Cập nhật width của cột cuối cùng trong path
663
- // return { ...col, width: size.width }
664
-
665
- // Kiểm tra minWidth trước khi cập nhật width
666
- if (col.minWidth && size.width < col.minWidth) {
667
- e.preventDefault();
668
- return col; // Không cập nhật nếu nhỏ hơn minWidth
669
- }
670
-
671
- // Kiểm tra minWidth trước khi cập nhật width
672
- if (col.maxWidth && size.width > col.maxWidth) {
673
- e.preventDefault();
674
- return col; // Không cập nhật nếu nhỏ hơn minWidth
675
- }
676
- return {
677
- ...col,
678
- width: size.width
679
- };
680
- } else if (col.children) {
681
- // Tiếp tục cập nhật các cấp con
682
- return {
683
- ...col,
684
- children: updateColumns(col.children, restPath)
685
- };
686
- }
806
+ ...column,
807
+ ellipsis: column?.ellipsis !== false,
808
+ sorter: () => {
809
+ // console.log('a, b, sortOrder', a, b, sortOrder)
687
810
  }
688
- // e.preventDefault()
689
- return col;
690
- });
691
- };
692
- setColumns(prevColumns => updateColumns(prevColumns, indexPath));
693
- };
694
- const addResizeHandlers = (cols, parentPath = []) => {
695
- return cols.map((col, index) => {
696
- const currentPath = [...parentPath, index];
697
- if (!col?.dataIndex && !col.key) {
698
- return col;
699
- }
700
- if (col.children) {
701
- return {
702
- ...col,
703
- ellipsis: col.ellipsis !== true,
704
- children: addResizeHandlers(col.children, currentPath)
705
- };
706
- }
707
- return {
708
- ...col,
709
- ellipsis: col.ellipsis !== true,
710
- onHeaderCell: () => ({
711
- width: col.width,
712
- onResize: handleResize(currentPath)
713
- })
714
811
  };
715
812
  });
716
- };
717
-
718
- // const resizableColumns = createResizableColumns(columns)
719
-
720
- // const resizableColumns = addResizeHandlers(columns)
721
- const resizableColumns = (0, _react.useMemo)(() => {
722
- return addResizeHandlers(columns);
723
- }, [columns]);
724
-
725
- // const handleReset = (clearFilters: () => void) => {
726
- // clearFilters()
727
- // }
728
-
729
- // const handleChangeOperator = (val: IFilterOperator) => {
730
- // setOperator(val)
731
- // }
732
-
813
+ }, [getColumnSearchProps, renderContent]);
814
+ const tmpColumns = (0, _react.useMemo)(() => {
815
+ // @ts-ignore
816
+ return addFilter(defaultColumns ?? []);
817
+ }, [addFilter, defaultColumns]);
733
818
  const onContextMenu = data => event => {
734
819
  event.preventDefault(); // Ngăn chặn menu mặc định của trình duyệt
735
820
 
@@ -827,7 +912,22 @@ const GridTable = props => {
827
912
  }
828
913
  }
829
914
  };
830
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_ContextMenu.default, {
915
+ const handleChange = sorter => {
916
+ console.log('Various parameters', sorter);
917
+ // setFilteredInfo(filters);
918
+ // setSortedInfo(sorter as Sorts);
919
+ };
920
+ return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_antd.ConfigProvider, {
921
+ theme: {
922
+ components: {
923
+ Table: {
924
+ rowHoverBg: '#eb461912',
925
+ rowSelectedBg: '#eb4619',
926
+ rowSelectedHoverBg: '#eb4619'
927
+ }
928
+ }
929
+ }
930
+ }, /*#__PURE__*/_react.default.createElement(_ContextMenu.default, {
831
931
  open: menuVisible,
832
932
  pos: position,
833
933
  setOpen: setMenuVisible,
@@ -835,7 +935,14 @@ const GridTable = props => {
835
935
  contextMenuItems: contextMenuItems,
836
936
  contextMenuClick: contextMenuClick,
837
937
  rowData: selectedRowData
838
- }), /*#__PURE__*/_react.default.createElement(_uiRc.Table, (0, _extends2.default)({}, rest, {
938
+ }), /*#__PURE__*/_react.default.createElement(_rcMasterUi.Table
939
+ // loading={defaultColumns && defaultColumns.length === 0}
940
+ // loading={true}
941
+ , (0, _extends2.default)({
942
+ loading: {
943
+ spinning: defaultColumns && defaultColumns.length === 0 || loading === true,
944
+ indicator: /*#__PURE__*/_react.default.createElement(_LoadingSpinner.default, null)
945
+ },
839
946
  dataSource: dataSource
840
947
  // className={styles.customTable}
841
948
  ,
@@ -843,19 +950,28 @@ const GridTable = props => {
843
950
  'table-none-column-select': selectionSettings?.mode === undefined && selectionSettings?.type !== 'multiple'
844
951
  }, styles.customTable),
845
952
  bordered: true,
846
- virtual: virtual,
847
- columns: resizableColumns,
953
+ virtual: virtual
954
+ // columns={resizableColumns as any}
955
+ ,
956
+ columns: tmpColumns
957
+ // scroll={{ y: 550 }}
958
+ ,
848
959
  rowKey: rowKey,
849
960
  rowHoverable: true,
850
961
  components: {
851
962
  header: {
852
963
  cell: ResizableTitle
853
964
  }
965
+ }
966
+ // scroll={scroll}
967
+ ,
968
+ size: "small",
969
+ scroll: scroll ? scroll : {
970
+ y: 500
854
971
  },
855
972
  onRow: (data, index) => {
856
973
  return {
857
974
  onDoubleClick: handleRowDoubleClick(data, index),
858
- // onClick: handleRowClick(data),
859
975
  onClick: handleRowClick,
860
976
  onContextMenu: onContextMenu(data)
861
977
  };
@@ -865,6 +981,9 @@ const GridTable = props => {
865
981
  // columnWidth: selectionSettings?.mode === 'checkbox' || selectionSettings?.mode === 'radio' || selectionSettings?.type === 'multiple' ? 50 : 0.000001,
866
982
  columnWidth: !selectionSettings?.mode ? 0.0000001 : selectionSettings?.columnWidth ?? 50,
867
983
  onChange: onSelectChange,
984
+ // onChange: (selectedRowKeys, selectedRows, info, selectedRow) => {
985
+ //
986
+ // },
868
987
  // onSelect: (record, selected, selectedRows, nativeEvent)=> {
869
988
  // // console.log(record, selected, selectedRows, nativeEvent)
870
989
  // },
@@ -879,31 +998,9 @@ const GridTable = props => {
879
998
  onScroll: () => {
880
999
  setMenuVisible(false);
881
1000
  },
882
- title: () => {
883
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", null, "Header"), toolbarItems && /*#__PURE__*/_react.default.createElement("div", {
884
- style: {
885
- display: 'flex',
886
- justifyContent: 'space-between'
887
- }
888
- }, /*#__PURE__*/_react.default.createElement(_uiRc.Toolbar, {
889
- style: {
890
- width: '100%'
891
- },
892
- items: toolbarItems,
893
- mode: 'responsive'
894
- // mode={'scroll'}
895
- ,
896
- onClick: val => {
897
- console.log(val);
898
- }
899
- }), showColumnChoose && /*#__PURE__*/_react.default.createElement(_ColumnsChoose.ColumnsChoose, {
900
- columns: columns,
901
- setColumns: setColumns
902
- }), /*#__PURE__*/_react.default.createElement("div", null)));
903
- },
904
- summary: () => /*#__PURE__*/_react.default.createElement(_uiRc.Table.Summary, {
1001
+ summary: () => /*#__PURE__*/_react.default.createElement(_rcMasterUi.Table.Summary, {
905
1002
  fixed: true
906
- }, /*#__PURE__*/_react.default.createElement(_uiRc.Table.Summary.Row, null, (0, _useColumns.flatColumns)(tmpColumns).filter(col => col.hidden !== true).map((col, index) => {
1003
+ }, /*#__PURE__*/_react.default.createElement(_rcMasterUi.Table.Summary.Row, null, (0, _useColumns.flatColumns)(tmpColumns).filter(col => col.hidden !== true).map((col, index) => {
907
1004
  const thousandSeparator = col.format?.thousandSeparator ? col.format?.thousandSeparator : format?.thousandSeparator;
908
1005
  const decimalSeparator = col.format?.decimalSeparator ? col.format?.decimalSeparator : format?.decimalSeparator;
909
1006
  const dec = col.format?.decimalScale || col.format?.decimalScale === 0 ? col.format?.decimalScale : format?.decimalScale;
@@ -919,18 +1016,48 @@ const GridTable = props => {
919
1016
  decimalScale: dec,
920
1017
  fixedDecimalScale: (col.format?.fixedDecimalScale ? col.format?.fixedDecimalScale : format?.fixedDecimalScale) ?? false
921
1018
  };
922
- return (
923
- /*#__PURE__*/
924
- // <Table.Summary.Cell index={index}>{col.summaryTemplate ? col.summaryTemplate(cellValue, (col.key || col.dataIndex) as string) : numericFormatter(cellValue, numericFormatProps)}</Table.Summary.Cell>
925
- _react.default.createElement(_uiRc.Table.Summary.Cell, {
926
- key: index,
927
- index: index
928
- }, col.summaryTemplate ? col.summaryTemplate(cellValue, col.key) : (0, _reactNumericComponent.numericFormatter)(cellValue, numericFormatProps))
929
- );
1019
+ return /*#__PURE__*/_react.default.createElement(_rcMasterUi.Table.Summary.Cell, {
1020
+ key: col.key,
1021
+ index: index
1022
+ }, col.summaryTemplate ? col.summaryTemplate(cellValue, col.key) : (0, _reactNumericComponent.numericFormatter)(cellValue, numericFormatProps));
930
1023
  }))),
1024
+ pagination: pagination && pagination.onChange ? false : {
1025
+ showTotal: (total, range) => `${range[0]}-${range[1]} / ${total} items`,
1026
+ ...pagination
1027
+ },
931
1028
  onFilter: val => {
932
1029
  onFilter?.(convertFilters(val));
1030
+ },
1031
+ onChange: (paging, filters, sorter) => handleChange(sorter),
1032
+ title: () => {
1033
+ return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", null, title?.(dataSource)), (toolbarItems || showColumnChoose !== false) && /*#__PURE__*/_react.default.createElement("div", {
1034
+ style: {
1035
+ display: 'flex',
1036
+ justifyContent: 'space-between'
1037
+ }
1038
+ }, /*#__PURE__*/_react.default.createElement(_rcMasterUi.Toolbar, {
1039
+ style: {
1040
+ width: '100%'
1041
+ },
1042
+ items: toolbarItems ?? [],
1043
+ mode: 'responsive'
1044
+ // mode={'scroll'}
1045
+ ,
1046
+ onClick: val => {
1047
+ console.log(val);
1048
+ }
1049
+ }), showColumnChoose && /*#__PURE__*/_react.default.createElement(_ColumnsChoose.ColumnsChoose, {
1050
+ columns: tmpColumns,
1051
+ setColumns: setColumns
1052
+ }), /*#__PURE__*/_react.default.createElement("div", null)));
933
1053
  }
934
- })));
1054
+ }, rest)), pagination && pagination.onChange && /*#__PURE__*/_react.default.createElement(_pagination.default
1055
+ // style={{padding: '0.75rem 1rem'}}
1056
+ , (0, _extends2.default)({
1057
+ showSizeChanger: true,
1058
+ responsive: true,
1059
+ size: 'small',
1060
+ showTotal: (total, range) => `${range[0]}-${range[1]} / ${total} items`
1061
+ }, pagination))));
935
1062
  };
936
- var _default = exports.default = GridTable;
1063
+ var _default = exports.default = TableGrid;