es-grid-template 1.3.1 → 1.3.3

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 (39) hide show
  1. package/es/grid-component/CheckboxFilter.js +4 -0
  2. package/es/grid-component/CheckboxFilter2.d.ts +20 -0
  3. package/es/grid-component/CheckboxFilter2.js +248 -0
  4. package/es/grid-component/ContextMenu.js +1 -0
  5. package/es/grid-component/InternalTable.js +37 -3
  6. package/es/grid-component/TableGrid.d.ts +3 -0
  7. package/es/grid-component/TableGrid.js +69 -7
  8. package/es/grid-component/hooks/columns/index.js +13 -45
  9. package/es/grid-component/hooks/content/HeaderContent.js +54 -58
  10. package/es/grid-component/hooks/useColumns.js +22 -8
  11. package/es/grid-component/hooks/utils.d.ts +8 -0
  12. package/es/grid-component/hooks/utils.js +257 -1
  13. package/es/grid-component/number-range/index.d.ts +11 -0
  14. package/es/grid-component/number-range/index.js +63 -0
  15. package/es/grid-component/table/Grid.d.ts +3 -0
  16. package/es/grid-component/table/GridEdit.js +283 -63
  17. package/es/grid-component/table/Group.d.ts +1 -0
  18. package/es/grid-component/table/Group.js +9 -1
  19. package/es/grid-component/type.d.ts +2 -1
  20. package/lib/grid-component/CheckboxFilter.js +4 -0
  21. package/lib/grid-component/CheckboxFilter2.d.ts +20 -0
  22. package/lib/grid-component/CheckboxFilter2.js +257 -0
  23. package/lib/grid-component/ContextMenu.js +1 -0
  24. package/lib/grid-component/InternalTable.js +31 -2
  25. package/lib/grid-component/TableGrid.d.ts +3 -0
  26. package/lib/grid-component/TableGrid.js +67 -7
  27. package/lib/grid-component/hooks/columns/index.js +13 -45
  28. package/lib/grid-component/hooks/content/HeaderContent.js +53 -55
  29. package/lib/grid-component/hooks/useColumns.js +22 -8
  30. package/lib/grid-component/hooks/utils.d.ts +8 -0
  31. package/lib/grid-component/hooks/utils.js +270 -3
  32. package/lib/grid-component/number-range/index.d.ts +11 -0
  33. package/lib/grid-component/number-range/index.js +71 -0
  34. package/lib/grid-component/table/Grid.d.ts +3 -0
  35. package/lib/grid-component/table/GridEdit.js +283 -63
  36. package/lib/grid-component/table/Group.d.ts +1 -0
  37. package/lib/grid-component/table/Group.js +9 -1
  38. package/lib/grid-component/type.d.ts +2 -1
  39. package/package.json +3 -2
@@ -79,6 +79,7 @@ const CheckboxFilter = props => {
79
79
 
80
80
  // const [searchValue, setSearchValue] = React.useState('');
81
81
 
82
+ console.log('options', options);
82
83
  const [openKeys, setOpenKeys] = React.useState([]);
83
84
 
84
85
  // clear search value after close filter dropdown
@@ -171,6 +172,9 @@ const CheckboxFilter = props => {
171
172
  onSelect?.(keys);
172
173
  }
173
174
  };
175
+ console.log('getTreeData({ filters: options })', getTreeData({
176
+ filters: options
177
+ }));
174
178
  if (filterMode === 'tree') {
175
179
  return /*#__PURE__*/React.createElement(React.Fragment, null, showFilter && /*#__PURE__*/React.createElement(FilterSearch, {
176
180
  filterSearch: filterSearch,
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ import type { TableLocale } from "rc-master-ui/es/table/interface";
3
+ type Props = {
4
+ options: any[];
5
+ filterSearch?: boolean;
6
+ open?: boolean;
7
+ tablePrefixCls?: string;
8
+ prefixCls?: string;
9
+ dropdownPrefixCls?: string;
10
+ filterMultiple: boolean;
11
+ showFilter?: boolean;
12
+ onSelect?: (value: any) => void;
13
+ selectedKeys: string[];
14
+ locale?: TableLocale;
15
+ filterMode?: 'menu' | 'tree';
16
+ searchValue: string;
17
+ setSearchValue: (value: any) => void;
18
+ };
19
+ declare const CheckboxFilter: (props: Props) => React.JSX.Element;
20
+ export default CheckboxFilter;
@@ -0,0 +1,248 @@
1
+ import * as React from "react";
2
+ import classNames from "classnames";
3
+ import FilterSearch from "./FilterSearch";
4
+ import { Checkbox, Menu, Radio, Empty } from "rc-master-ui";
5
+ import { Tree } from "antd";
6
+ import { flattenKeys } from "rc-master-ui/es/table/hooks/useFilter";
7
+ // import Tree from "rc-master-ui/es/tree";
8
+
9
+ function searchValueMatched(searchValue, text) {
10
+ if (typeof text === 'string' || typeof text === 'number') {
11
+ return text?.toString().toLowerCase().includes(searchValue.trim().toLowerCase());
12
+ }
13
+ return false;
14
+ }
15
+ function renderFilterItems({
16
+ filters,
17
+ prefixCls,
18
+ filteredKeys,
19
+ filterMultiple,
20
+ searchValue,
21
+ filterSearch
22
+ }) {
23
+ return filters.map((filter, index) => {
24
+ const key = String(filter.value);
25
+ if (filter.children) {
26
+ return {
27
+ key: key || index,
28
+ label: filter.text,
29
+ popupClassName: `${prefixCls}-dropdown-submenu`,
30
+ children: renderFilterItems({
31
+ filters: filter.children,
32
+ prefixCls,
33
+ filteredKeys,
34
+ filterMultiple,
35
+ searchValue,
36
+ filterSearch
37
+ })
38
+ };
39
+ }
40
+ const Component = filterMultiple ? Checkbox : Radio;
41
+ const item = {
42
+ key: filter.value !== undefined ? key : index,
43
+ label: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Component, {
44
+ checked: filteredKeys.includes(key)
45
+ }), /*#__PURE__*/React.createElement("span", null, filter.text))
46
+ };
47
+ if (searchValue.trim()) {
48
+ if (typeof filterSearch === 'function') {
49
+ return filterSearch(searchValue, filter) ? item : null;
50
+ }
51
+ return searchValueMatched(searchValue, filter.text) ? item : null;
52
+ }
53
+ return item;
54
+ });
55
+ }
56
+ function hasSubMenu(filters) {
57
+ return filters.some(({
58
+ children
59
+ }) => children);
60
+ }
61
+ const CheckboxFilter = props => {
62
+ const {
63
+ // column,
64
+ filterSearch = true,
65
+ tablePrefixCls = 'ui-rc-table',
66
+ prefixCls = 'ui-rc-table-filter',
67
+ dropdownPrefixCls = 'ui-rc-dropdown',
68
+ filterMultiple,
69
+ selectedKeys,
70
+ locale,
71
+ options,
72
+ filterMode = 'tree',
73
+ // open,
74
+ searchValue,
75
+ showFilter,
76
+ setSearchValue,
77
+ onSelect
78
+ } = props;
79
+
80
+ // const [searchValue, setSearchValue] = React.useState('');
81
+
82
+ console.log('options', options);
83
+ const [openKeys, setOpenKeys] = React.useState([]);
84
+
85
+ // clear search value after close filter dropdown
86
+ // React.useEffect(() => {
87
+ // // if (visible) {
88
+ // setSearchValue('');
89
+ // // }
90
+ // }, [open]);
91
+
92
+ const onOpenChange = keys => {
93
+ setOpenKeys(keys);
94
+ };
95
+ const items = renderFilterItems({
96
+ // filters: column.filters || [],
97
+ filters: options || [],
98
+ filterSearch,
99
+ prefixCls,
100
+ filteredKeys: selectedKeys ?? [],
101
+ filterMultiple,
102
+ searchValue
103
+ });
104
+ const dropdownMenuClass = classNames({
105
+ // [`${dropdownPrefixCls}-menu-without-submenu`]: !hasSubMenu(column.filters || []),
106
+ [`${dropdownPrefixCls}-menu-without-submenu`]: !hasSubMenu(options || [])
107
+ });
108
+ const empty = /*#__PURE__*/React.createElement(Empty, {
109
+ image: Empty.PRESENTED_IMAGE_SIMPLE,
110
+ description: locale?.filterEmptyText,
111
+ imageStyle: {
112
+ height: 24
113
+ },
114
+ style: {
115
+ margin: 0,
116
+ padding: '16px 0'
117
+ }
118
+ });
119
+ const isEmpty = items.every(item => item === null);
120
+ const onSearch = e => {
121
+ const {
122
+ value
123
+ } = e.target;
124
+ setSearchValue(value);
125
+ };
126
+
127
+ // if ((column.filters || []).length === 0) {
128
+ // return empty;
129
+ // }
130
+
131
+ const getTreeData = ({
132
+ filters
133
+ }) => (filters || []).map((filter, index) => {
134
+ const key = String(filter.value);
135
+ const item = {
136
+ title: filter.text,
137
+ key: filter.value !== undefined ? key : String(index)
138
+ };
139
+ if (filter.children) {
140
+ item.children = getTreeData({
141
+ filters: filter.children
142
+ });
143
+ }
144
+ return item;
145
+ });
146
+ const getFilterData = node => ({
147
+ ...node,
148
+ text: node.title,
149
+ value: node.key,
150
+ children: node.children?.map(item => getFilterData(item)) || []
151
+ });
152
+ const onCheckAll = e => {
153
+ if (e.target.checked) {
154
+ const allFilterKeys = flattenKeys(options).map(key => String(key));
155
+
156
+ // setFilteredKeysSync(allFilterKeys);
157
+ onSelect?.(allFilterKeys);
158
+ } else {
159
+ onSelect?.([]);
160
+ // setFilteredKeysSync([]);
161
+ }
162
+ };
163
+ const onCheck = (keys, {
164
+ node,
165
+ checked
166
+ }) => {
167
+ if (!filterMultiple) {
168
+ // onSelectKeys({ selectedKeys: checked && node.key ? [node.key] : [] });
169
+ onSelect?.(checked && node.key ? [node.key] : []);
170
+ } else {
171
+ // onSelectKeys({ selectedKeys: keys });
172
+ onSelect?.(keys);
173
+ }
174
+ };
175
+ console.log('getTreeData({ filters: options })', getTreeData({
176
+ filters: options
177
+ }));
178
+ if (filterMode === 'tree') {
179
+ return /*#__PURE__*/React.createElement(React.Fragment, null, showFilter && /*#__PURE__*/React.createElement(FilterSearch, {
180
+ filterSearch: filterSearch,
181
+ value: searchValue,
182
+ onChange: onSearch,
183
+ tablePrefixCls: tablePrefixCls,
184
+ locale: locale
185
+ }), /*#__PURE__*/React.createElement("div", {
186
+ className: `${tablePrefixCls}-filter-dropdown-tree`
187
+ }, filterMultiple && options.length > 0 ? /*#__PURE__*/React.createElement(Checkbox
188
+ // checked={selectedKeys.length === flattenKeys(column.filters).length}
189
+ , {
190
+ checked: selectedKeys.length === flattenKeys(options).length
191
+ // indeterminate={
192
+ // selectedKeys.length > 0 &&
193
+ // selectedKeys.length < flattenKeys(column.filters).length
194
+ // }
195
+ ,
196
+
197
+ indeterminate: selectedKeys.length > 0 && selectedKeys.length < flattenKeys(options).length,
198
+ className: `${tablePrefixCls}-filter-dropdown-checkall`,
199
+ onChange: onCheckAll
200
+ }, locale?.filterCheckall) : /*#__PURE__*/React.createElement(Empty, null), /*#__PURE__*/React.createElement(Tree, {
201
+ checkable: true,
202
+ selectable: false,
203
+ blockNode: true,
204
+ multiple: filterMultiple,
205
+ checkStrictly: !filterMultiple,
206
+ className: `${dropdownPrefixCls}-menu`,
207
+ onCheck: onCheck,
208
+ checkedKeys: selectedKeys,
209
+ selectedKeys: selectedKeys,
210
+ showIcon: false
211
+ // treeData={getTreeData({ filters: column.filters })}
212
+ ,
213
+ treeData: getTreeData({
214
+ filters: options
215
+ }),
216
+ autoExpandParent: true,
217
+ defaultExpandAll: true,
218
+ filterTreeNode: searchValue.trim() ? node => {
219
+ if (typeof filterSearch === 'function') {
220
+ // @ts-ignore
221
+ return filterSearch(searchValue, getFilterData(node));
222
+ }
223
+ return searchValueMatched(searchValue, node.title);
224
+ } : undefined
225
+ })));
226
+ }
227
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FilterSearch, {
228
+ filterSearch: filterSearch,
229
+ value: searchValue,
230
+ onChange: onSearch,
231
+ tablePrefixCls: tablePrefixCls,
232
+ locale: locale
233
+ }), isEmpty ? empty : /*#__PURE__*/React.createElement(Menu, {
234
+ selectable: true,
235
+ multiple: filterMultiple,
236
+ prefixCls: `${dropdownPrefixCls}-menu`,
237
+ className: dropdownMenuClass,
238
+ onSelect: onSelect,
239
+ onDeselect: onSelect,
240
+ selectedKeys: selectedKeys
241
+ // getPopupContainer={getPopupContainer}
242
+ ,
243
+ openKeys: openKeys,
244
+ onOpenChange: onOpenChange,
245
+ items: items
246
+ }));
247
+ };
248
+ export default CheckboxFilter;
@@ -83,6 +83,7 @@ const ContextMenu = props => {
83
83
  React.createElement(Dropdown, {
84
84
  placement: 'topRight',
85
85
  open: open,
86
+ overlayClassName: 'be-popup-container',
86
87
  overlayStyle: {
87
88
  left: `${pos.x}px`,
88
89
  top: `${pos.y}px`
@@ -3,9 +3,14 @@ import React from 'react';
3
3
  import { Resizable } from "react-resizable";
4
4
  import 'react-resizable/css/styles.css';
5
5
  import customParseFormat from 'dayjs/plugin/customParseFormat';
6
- import { addRowIdArray, findItemByKey,
6
+ import { addRowIdArray,
7
+ // filterDataByColumns,
8
+ // filterDataByColumns2,
9
+ // filterDataByColumns3,
10
+ findItemByKey,
7
11
  // convertFlatColumn,
8
12
  removeColumns,
13
+ // removeFieldRecursive,
9
14
  // addRowIdArray,
10
15
  updateArrayByKey, updateColumnsByGroup, updateData } from "./hooks";
11
16
  import dayjs from "dayjs";
@@ -65,7 +70,8 @@ const InternalTable = props => {
65
70
  dataSource,
66
71
  allowResizing,
67
72
  dataSourceFilter: propDataSourceFilter,
68
- onFilterClick,
73
+ // onFilterClick,
74
+ // onFilter,
69
75
  editAble,
70
76
  rowKey: propRowKey,
71
77
  format,
@@ -94,8 +100,15 @@ const InternalTable = props => {
94
100
  ...local.lang
95
101
  }
96
102
  };
103
+
104
+ // const [filterStates, setFilterState] = React.useState<any>(null)
105
+ // const [isFilter, setIsFilter] = React.useState<boolean>(false);
106
+
97
107
  const mergerdData = React.useMemo(() => {
108
+ // return filterDataByColumns2(addRowIdArray(dataSource), filterStates)
109
+ // return filterDataByColumns3(addRowIdArray(dataSource), filterStates)
98
110
  return addRowIdArray(dataSource);
111
+ // return dataSource
99
112
  }, [dataSource]);
100
113
  const [columns, setColumns] = React.useState([]);
101
114
  const tableRef = React.useRef(null);
@@ -140,7 +153,8 @@ const InternalTable = props => {
140
153
  locale,
141
154
  t,
142
155
  rowKey,
143
- dataSource: mergerdData,
156
+ // dataSource: mergerdData,
157
+ dataSource,
144
158
  buddhistLocale,
145
159
  dataSourceFilter: propDataSourceFilter,
146
160
  format,
@@ -208,7 +222,22 @@ const InternalTable = props => {
208
222
  // setData(newData)
209
223
  // setMergedData(newData)
210
224
  onDataChange?.(newData);
225
+ // onDataChange?.(removeFieldRecursive(newData, 'isFilterState'))
211
226
  };
227
+
228
+ // const triggerFilter = (queries: any) => {
229
+ // console.log('queries', queries)
230
+ // // console.log('data', dataSource)
231
+ // setFilterState(queries)
232
+ //
233
+ // if (queries && queries.length > 0) {
234
+ // setIsFilter(true)
235
+ // } else {
236
+ // setIsFilter(false)
237
+ // }
238
+ //
239
+ // }
240
+
212
241
  const triggerCommandClick = args => {
213
242
  const {
214
243
  id,
@@ -367,6 +396,7 @@ const InternalTable = props => {
367
396
  locale: locale,
368
397
  tableRef: tableRef,
369
398
  dataSource: mergerdData
399
+ // dataSource={dataSource}
370
400
  // components={components}
371
401
  ,
372
402
  components: {
@@ -392,6 +422,10 @@ const InternalTable = props => {
392
422
  groupAble: groupAble,
393
423
  groupColumns: groupColumns,
394
424
  commandClick: triggerCommandClick
425
+ // triggerFilter={triggerFilter}
426
+ // isFilter={isFilter}
427
+ // setIsFilter={setIsFilter}
428
+ // onScroll={onScroll}
395
429
  }));
396
430
  };
397
431
  export default InternalTable;
@@ -5,12 +5,15 @@ import type { ColumnsTable, GetRowKey, GridTableProps } from "./type";
5
5
  type GridProps<T> = GridTableProps<T> & {
6
6
  triggerChangeColumns?: (columns: ColumnsTable<T>, type: string) => void;
7
7
  triggerChangeData?: (newData: T[], type: string) => void;
8
+ triggerFilter?: (queries: any) => void;
8
9
  triggerGroupColumns?: (groupedColumns: string[]) => void;
9
10
  tableRef: any;
10
11
  bottomToolbar?: () => React.ReactElement;
11
12
  getRowKey: GetRowKey<T>;
12
13
  rowSelection?: any;
13
14
  groupToolbar?: () => React.ReactNode;
15
+ isFilter?: boolean;
16
+ setIsFilter?: React.Dispatch<React.SetStateAction<boolean>>;
14
17
  };
15
18
  declare const TableGrid: <RecordType extends object>(props: GridProps<RecordType>) => React.JSX.Element;
16
19
  export default TableGrid;
@@ -8,6 +8,8 @@ import 'dayjs/locale/vi';
8
8
  import ContextMenu from "./ContextMenu";
9
9
  import classNames from "classnames";
10
10
  import { checkDecimalSeparator, checkThousandSeparator,
11
+ // filterDataByColumns2,
12
+ filterDataByColumns3,
11
13
  // convertFlatColumn,
12
14
  isEmpty,
13
15
  // newGuid,
@@ -22,6 +24,7 @@ import ComponentSpinner from "./LoadingSpinner";
22
24
  import { ColumnsChoose } from "./ColumnsChoose";
23
25
  import useMergedState from "rc-util/es/hooks/useMergedState";
24
26
  import AdvanceFilter from "./AdvanceFilter";
27
+ import { Tooltip } from "react-tooltip";
25
28
  const convertFilters = filters => {
26
29
  const result = [];
27
30
  filters.forEach(({
@@ -45,6 +48,40 @@ const convertFilters = filters => {
45
48
  predicate: "and",
46
49
  operator: "lessthanorequal"
47
50
  });
51
+ } else if (column?.typeFilter === "NumberRange") {
52
+ if ((filteredKeys[0] || filteredKeys[0] === 0) && !filteredKeys[1]) {
53
+ result.push({
54
+ key,
55
+ field: column?.dataIndex,
56
+ value: filteredKeys[0],
57
+ predicate: "and",
58
+ operator: "greaterthanorequal"
59
+ });
60
+ }
61
+ if ((filteredKeys[1] || filteredKeys[1] === 0) && !filteredKeys[0]) {
62
+ result.push({
63
+ key,
64
+ field: column?.dataIndex,
65
+ value: filteredKeys[1],
66
+ predicate: "and",
67
+ operator: "lessthanorequal"
68
+ });
69
+ }
70
+ if ((filteredKeys[0] || filteredKeys[0] === 0) && (filteredKeys[1] || filteredKeys[1] === 0)) {
71
+ result.push({
72
+ key,
73
+ field: column?.dataIndex,
74
+ value: filteredKeys[0],
75
+ predicate: "and",
76
+ operator: "greaterthanorequal"
77
+ }, {
78
+ key,
79
+ field: column?.dataIndex,
80
+ value: filteredKeys[1],
81
+ predicate: "and",
82
+ operator: "lessthanorequal"
83
+ });
84
+ }
48
85
  } else if (column?.typeFilter === 'Checkbox') {
49
86
  filteredKeys.forEach(value => {
50
87
  result.push({
@@ -112,6 +149,7 @@ const TableGrid = props => {
112
149
  showColumnChoose,
113
150
  showAdvanceFilter,
114
151
  onFilter,
152
+ triggerFilter,
115
153
  selectionSettings,
116
154
  rowSelection,
117
155
  rowSelected,
@@ -133,6 +171,7 @@ const TableGrid = props => {
133
171
  groupColumns,
134
172
  groupToolbar,
135
173
  showEmptyText,
174
+ setIsFilter,
136
175
  ...rest
137
176
  } = props;
138
177
  const {
@@ -159,6 +198,7 @@ const TableGrid = props => {
159
198
  viewportWidth,
160
199
  viewportHeight
161
200
  });
201
+ const [filterStates, setFilterState] = React.useState(null);
162
202
 
163
203
  // const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>(defaultSelected);
164
204
 
@@ -295,6 +335,18 @@ const TableGrid = props => {
295
335
  const handleChange = sorter => {
296
336
  onSorter?.(sorter);
297
337
  };
338
+ const handleOnFilter = queries => {
339
+ if (onFilter) {
340
+ onFilter?.(convertFilters(queries));
341
+ } else {
342
+ setFilterState(convertFilters(queries));
343
+ if (queries && queries.length > 0) {
344
+ setIsFilter?.(true);
345
+ } else {
346
+ setIsFilter?.(false);
347
+ }
348
+ }
349
+ };
298
350
  return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(ContextMenu, {
299
351
  open: menuVisible,
300
352
  pos: position,
@@ -306,7 +358,9 @@ const TableGrid = props => {
306
358
  }), /*#__PURE__*/React.createElement(Table, _extends({
307
359
  ref: tableRef
308
360
  }, rest, {
361
+ tableLayout: 'fixed'
309
362
  // id={newGuid()}
363
+ ,
310
364
  locale: {
311
365
  ...locale,
312
366
  emptyText: showEmptyText !== false ? /*#__PURE__*/React.createElement(Empty, {
@@ -318,7 +372,8 @@ const TableGrid = props => {
318
372
  spinning: columns && columns.length === 0 || loading === true,
319
373
  indicator: /*#__PURE__*/React.createElement(ComponentSpinner, null)
320
374
  },
321
- dataSource: columns && columns.length > 0 && loading !== true ? dataSource : []
375
+ dataSource: columns && columns.length > 0 && loading !== true ? filterDataByColumns3(dataSource, filterStates) : []
376
+ // dataSource={columns && columns.length > 0 && loading !== true ? dataSource : []}
322
377
  // className={styles.customTable}
323
378
  ,
324
379
  className: classNames(className, {
@@ -353,10 +408,13 @@ const TableGrid = props => {
353
408
  // checkStrictly: false,
354
409
 
355
410
  hideSelectAll: !type || type === 'single' || selectionSettings?.mode === 'radio' ? true : hideSelectAll ?? type !== 'multiple'
356
- },
357
- onScroll: () => {
358
- setMenuVisible(false);
359
- },
411
+ }
412
+
413
+ // onScroll={() => {
414
+ // setMenuVisible(false)
415
+ // }}
416
+ ,
417
+
360
418
  summary: () => {
361
419
  if (typeof summary === 'function') {
362
420
  return summary(dataSource);
@@ -395,7 +453,9 @@ const TableGrid = props => {
395
453
  ...pagination
396
454
  },
397
455
  onFilter: val => {
398
- onFilter?.(convertFilters(val));
456
+ handleOnFilter(val);
457
+ // triggerFilter?.(convertFilters(val))
458
+ // onFilter?.(convertFilters(val))
399
459
  },
400
460
  onChange: (paging, filters, sorter) => handleChange(sorter),
401
461
  title: showToolbar === false ? undefined : () => {
@@ -457,6 +517,8 @@ const TableGrid = props => {
457
517
  // @ts-ignore
458
518
  ,
459
519
  showTotal: (total, range) => `${range[0]}-${range[1]} / ${total} ${t ? t(pagination?.locale?.items ?? 'items') : 'items'}`
460
- }, pagination)), bottomToolbar?.());
520
+ }, pagination)), bottomToolbar?.(), /*#__PURE__*/React.createElement(Tooltip, {
521
+ id: "tooltip-header"
522
+ }));
461
523
  };
462
524
  export default TableGrid;
@@ -6,6 +6,7 @@ import React, { Fragment } from "react";
6
6
  import { DatePicker, Empty, Input, Select } from "rc-master-ui";
7
7
  import CheckboxFilter from "../../CheckboxFilter";
8
8
  import { SELECTION_COLUMN } from "rc-master-ui/es/table/hooks/useSelection";
9
+ import NumberRange from "../../number-range";
9
10
  const {
10
11
  RangePicker
11
12
  } = DatePicker;
@@ -131,11 +132,6 @@ export const renderFilter = (column, selectedKeys, setSelectedKeys, confirm, vis
131
132
  const dateRangeFormat = getDatepickerFormat(column?.type, column) ?? 'DD/MM/YYYY';
132
133
  const find = dataSourceFilter?.find(it => it.key === column?.field);
133
134
  const options = find ? find.data : [];
134
-
135
- // console.log('dataSourceFilter', dataSourceFilter)
136
- // console.log('options', options)
137
- // console.log('column', column)
138
-
139
135
  switch (type) {
140
136
  case 'Number':
141
137
  return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
@@ -155,39 +151,14 @@ export const renderFilter = (column, selectedKeys, setSelectedKeys, confirm, vis
155
151
  }
156
152
  }))));
157
153
  case 'NumberRange':
158
- return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
159
- className: 'mb-1 d-flex flex-column gap-1'
160
- }, /*#__PURE__*/React.createElement("div", {
161
- style: {
162
- marginBottom: 8
154
+ return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(NumberRange, {
155
+ t: t,
156
+ min: selectedKeys[0],
157
+ max: selectedKeys[1],
158
+ onChange: vals => {
159
+ setSelectedKeys(vals);
163
160
  }
164
- }, /*#__PURE__*/React.createElement(NumericFormat, {
165
- value: selectedKeys[0]
166
- // thousandSeparator={checkThousandSeparator(thousandSeparator, decimalSeparator)}
167
- // decimalSeparator={checkDecimalSeparator(thousandSeparator, decimalSeparator)}
168
- ,
169
- allowNegative: true,
170
- customInput: Input,
171
- className: ' rounded-0 input-element form-control'
172
- // onValueChange={(values: any) => {
173
- // onChangeValueFilter(type, values.floatValue, 'min')
174
- // }}
175
- ,
176
- placeholder: t ? t('Min') : 'Min',
177
- autoFocus: true
178
- })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(NumericFormat, {
179
- value: selectedKeys[1]
180
- // thousandSeparator={checkThousandSeparator(thousandSeparator, decimalSeparator)}
181
- // decimalSeparator={checkDecimalSeparator(thousandSeparator, decimalSeparator)}
182
- ,
183
- allowNegative: true,
184
- customInput: Input,
185
- className: ' rounded-0 input-element form-control',
186
- onValueChange: () => {
187
- // onChangeValueFilter(type, values.floatValue, 'max')
188
- },
189
- placeholder: t ? t('Max') : 'Max'
190
- })))));
161
+ })));
191
162
  case 'Date':
192
163
  const dateValue = selectedKeys[0] ? convertDateToDayjs(new Date(selectedKeys[0]), dateFormat) : null;
193
164
  return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
@@ -438,16 +409,13 @@ export const renderFilter = (column, selectedKeys, setSelectedKeys, confirm, vis
438
409
  case 'Checkbox':
439
410
  return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
440
411
  className: 'mb-1'
441
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(CheckboxFilter
442
- // locale={{
443
- // filterTitle: 'Chọn tất cả',
444
- // filterCheckall: 'Chọn tất cả'
445
- // }}
446
- , {
412
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(CheckboxFilter, {
447
413
  locale: locale,
448
414
  selectedKeys: selectedKeys,
449
- onSelect: setSelectedKeys,
450
- options: options,
415
+ onSelect: setSelectedKeys
416
+ // options={options}
417
+ ,
418
+ options: column.source ? column.source : options ?? [],
451
419
  filterMultiple: true,
452
420
  open: visible,
453
421
  searchValue: searchValue,