es-grid-template 0.0.7 → 0.0.13

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 (116) hide show
  1. package/LICENSE +21 -19
  2. package/es/{CheckboxFilter.d.ts → grid-component/CheckboxFilter.d.ts} +1 -1
  3. package/es/{CheckboxFilter.js → grid-component/CheckboxFilter.js} +7 -11
  4. package/es/grid-component/ColumnsChoose.d.ts +9 -0
  5. package/es/{ColumnsChoose.js → grid-component/ColumnsChoose.js} +66 -70
  6. package/es/grid-component/EditableCell.d.ts +19 -0
  7. package/es/grid-component/EditableCell.js +842 -0
  8. package/es/{FilterSearch.js → grid-component/FilterSearch.js} +2 -2
  9. package/es/grid-component/GridStyle.d.ts +4 -0
  10. package/es/grid-component/GridStyle.js +5 -0
  11. package/es/grid-component/InternalTable.d.ts +6 -0
  12. package/es/grid-component/InternalTable.js +283 -0
  13. package/es/grid-component/LoadingSpinner.d.ts +3 -0
  14. package/es/grid-component/LoadingSpinner.js +20 -0
  15. package/es/grid-component/Message/Message.d.ts +2 -0
  16. package/es/grid-component/Message/Message.js +16 -0
  17. package/es/grid-component/Message/index.d.ts +1 -0
  18. package/es/grid-component/Message/index.js +1 -0
  19. package/es/grid-component/TableGrid.d.ts +10 -0
  20. package/es/grid-component/TableGrid.js +375 -0
  21. package/es/grid-component/async-table-select/index.d.ts +9 -0
  22. package/es/grid-component/async-table-select/index.js +37 -0
  23. package/es/{hooks → grid-component/hooks}/constant.d.ts +14 -0
  24. package/es/{hooks → grid-component/hooks}/constant.js +17 -2
  25. package/es/grid-component/hooks/useColumns/index.d.ts +6 -0
  26. package/es/grid-component/hooks/useColumns/index.js +422 -0
  27. package/es/grid-component/hooks/utils.d.ts +35 -0
  28. package/es/{hooks → grid-component/hooks}/utils.js +147 -19
  29. package/es/grid-component/index.d.ts +2 -0
  30. package/es/grid-component/index.js +2 -0
  31. package/es/grid-component/rc-table/Grid.d.ts +8 -0
  32. package/es/grid-component/rc-table/Grid.js +99 -0
  33. package/es/grid-component/rc-table/GridEdit.d.ts +9 -0
  34. package/es/grid-component/rc-table/GridEdit.js +706 -0
  35. package/es/grid-component/type.d.ts +225 -0
  36. package/es/grid-component/useContext.d.ts +27 -0
  37. package/es/grid-component/useContext.js +4 -0
  38. package/es/index.d.ts +1 -2
  39. package/es/index.js +2 -2
  40. package/es/table-grid/styles.scss +551 -0
  41. package/lib/{CheckboxFilter.d.ts → grid-component/CheckboxFilter.d.ts} +1 -1
  42. package/lib/{CheckboxFilter.js → grid-component/CheckboxFilter.js} +11 -14
  43. package/lib/grid-component/ColumnsChoose.d.ts +9 -0
  44. package/lib/{ColumnsChoose.js → grid-component/ColumnsChoose.js} +66 -70
  45. package/lib/grid-component/EditableCell.d.ts +19 -0
  46. package/lib/grid-component/EditableCell.js +844 -0
  47. package/lib/{FilterSearch.js → grid-component/FilterSearch.js} +3 -3
  48. package/lib/grid-component/GridStyle.d.ts +4 -0
  49. package/lib/grid-component/GridStyle.js +12 -0
  50. package/lib/grid-component/InternalTable.d.ts +6 -0
  51. package/lib/grid-component/InternalTable.js +292 -0
  52. package/lib/grid-component/LoadingSpinner.d.ts +3 -0
  53. package/lib/grid-component/LoadingSpinner.js +29 -0
  54. package/lib/grid-component/Message/Message.d.ts +2 -0
  55. package/lib/grid-component/Message/Message.js +25 -0
  56. package/lib/grid-component/Message/index.d.ts +1 -0
  57. package/lib/grid-component/Message/index.js +16 -0
  58. package/lib/grid-component/TableGrid.d.ts +10 -0
  59. package/lib/grid-component/TableGrid.js +382 -0
  60. package/lib/grid-component/async-table-select/index.d.ts +9 -0
  61. package/lib/grid-component/async-table-select/index.js +46 -0
  62. package/lib/{hooks → grid-component/hooks}/constant.d.ts +14 -0
  63. package/lib/{hooks → grid-component/hooks}/constant.js +18 -3
  64. package/lib/grid-component/hooks/useColumns/index.d.ts +6 -0
  65. package/lib/grid-component/hooks/useColumns/index.js +435 -0
  66. package/lib/grid-component/hooks/utils.d.ts +35 -0
  67. package/lib/{hooks → grid-component/hooks}/utils.js +164 -22
  68. package/lib/grid-component/index.d.ts +2 -0
  69. package/lib/grid-component/index.js +9 -0
  70. package/lib/grid-component/rc-table/Grid.d.ts +8 -0
  71. package/lib/grid-component/rc-table/Grid.js +108 -0
  72. package/lib/grid-component/rc-table/GridEdit.d.ts +9 -0
  73. package/lib/grid-component/rc-table/GridEdit.js +715 -0
  74. package/lib/grid-component/type.d.ts +225 -0
  75. package/lib/grid-component/useContext.d.ts +27 -0
  76. package/lib/grid-component/useContext.js +10 -0
  77. package/lib/index.d.ts +1 -2
  78. package/lib/index.js +7 -3
  79. package/lib/table-grid/styles.scss +551 -0
  80. package/package.json +17 -6
  81. package/es/ColumnsChoose.d.ts +0 -10
  82. package/es/GridTable.d.ts +0 -7
  83. package/es/GridTable.js +0 -927
  84. package/es/hooks/useColumns/index.d.ts +0 -2
  85. package/es/hooks/useColumns/index.js +0 -25
  86. package/es/hooks/utils.d.ts +0 -18
  87. package/es/styles.scss +0 -30
  88. package/es/type.d.ts +0 -88
  89. package/lib/ColumnsChoose.d.ts +0 -10
  90. package/lib/GridTable.d.ts +0 -7
  91. package/lib/GridTable.js +0 -936
  92. package/lib/hooks/useColumns/index.d.ts +0 -2
  93. package/lib/hooks/useColumns/index.js +0 -31
  94. package/lib/hooks/utils.d.ts +0 -18
  95. package/lib/styles.scss +0 -30
  96. package/lib/type.d.ts +0 -88
  97. /package/es/{ContextMenu.d.ts → grid-component/ContextMenu.d.ts} +0 -0
  98. /package/es/{ContextMenu.js → grid-component/ContextMenu.js} +0 -0
  99. /package/es/{FilterSearch.d.ts → grid-component/FilterSearch.d.ts} +0 -0
  100. /package/es/{hooks → grid-component/hooks}/index.d.ts +0 -0
  101. /package/es/{hooks → grid-component/hooks}/index.js +0 -0
  102. /package/es/{hooks → grid-component/hooks}/useIsOverflow.d.ts +0 -0
  103. /package/es/{hooks → grid-component/hooks}/useIsOverflow.js +0 -0
  104. /package/es/{hooks → grid-component/hooks}/useOnClickOutside.d.ts +0 -0
  105. /package/es/{hooks → grid-component/hooks}/useOnClickOutside.js +0 -0
  106. /package/es/{type.js → grid-component/type.js} +0 -0
  107. /package/lib/{ContextMenu.d.ts → grid-component/ContextMenu.d.ts} +0 -0
  108. /package/lib/{ContextMenu.js → grid-component/ContextMenu.js} +0 -0
  109. /package/lib/{FilterSearch.d.ts → grid-component/FilterSearch.d.ts} +0 -0
  110. /package/lib/{hooks → grid-component/hooks}/index.d.ts +0 -0
  111. /package/lib/{hooks → grid-component/hooks}/index.js +0 -0
  112. /package/lib/{hooks → grid-component/hooks}/useIsOverflow.d.ts +0 -0
  113. /package/lib/{hooks → grid-component/hooks}/useIsOverflow.js +0 -0
  114. /package/lib/{hooks → grid-component/hooks}/useOnClickOutside.d.ts +0 -0
  115. /package/lib/{hooks → grid-component/hooks}/useOnClickOutside.js +0 -0
  116. /package/lib/{type.js → grid-component/type.js} +0 -0
@@ -0,0 +1,375 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import React, { Fragment, useLayoutEffect, useMemo, useRef, useState } from 'react';
3
+ import { createStyles } from 'antd-style';
4
+ import { numericFormatter } from "react-numeric-component";
5
+ import { Table, Toolbar } from "rc-master-ui";
6
+ import 'dayjs/locale/es';
7
+ import 'dayjs/locale/vi';
8
+ import ContextMenu from "./ContextMenu";
9
+ import classNames from "classnames";
10
+ import { checkDecimalSeparator, checkThousandSeparator, isEmpty, sumDataByField
11
+ // updateArrayByKey
12
+ } from "./hooks";
13
+ import { ConfigProvider } from "antd";
14
+ import { flatColumns } from "./hooks/useColumns";
15
+ import Pagination from "rc-master-ui/es/pagination";
16
+ import ComponentSpinner from "./LoadingSpinner";
17
+ import { ColumnsChoose } from "./ColumnsChoose";
18
+ const convertFilters = filters => {
19
+ const result = [];
20
+ filters.forEach(({
21
+ key,
22
+ column,
23
+ filteredKeys,
24
+ operator
25
+ }) => {
26
+ if (!filteredKeys || filteredKeys.length === 0) return;
27
+ if (column?.typeFilter === "DateRange" && filteredKeys.length === 2) {
28
+ result.push({
29
+ key,
30
+ field: column?.dataIndex,
31
+ value: filteredKeys[0],
32
+ predicate: "and",
33
+ operator: "greaterthanorequal"
34
+ }, {
35
+ key,
36
+ field: column?.dataIndex,
37
+ value: filteredKeys[1],
38
+ predicate: "and",
39
+ operator: "lessthanorequal"
40
+ });
41
+ } else if (column?.typeFilter === 'Checkbox') {
42
+ filteredKeys.forEach(value => {
43
+ result.push({
44
+ key,
45
+ field: column?.dataIndex,
46
+ value,
47
+ predicate: "or",
48
+ operator
49
+ });
50
+ });
51
+ } else {
52
+ result.push({
53
+ key,
54
+ field: column?.dataIndex,
55
+ value: filteredKeys[0],
56
+ predicate: 'and',
57
+ operator
58
+ });
59
+ }
60
+ });
61
+ return result;
62
+ };
63
+ const useStyle = createStyles(({
64
+ css
65
+ }) => {
66
+ // const { antCls } = token
67
+ const antCls = 'ui-rc';
68
+ return {
69
+ customTable: css`
70
+ ${antCls}-table {
71
+ ${antCls}-table-container {
72
+ ${antCls}-table-body,
73
+ ${antCls}-table-content {
74
+ scrollbar-width: thin;
75
+ scrollbar-color: #eaeaea transparent;
76
+ scrollbar-gutter: stable;
77
+ }
78
+ }
79
+ }
80
+ `
81
+ };
82
+ });
83
+ // type OnChange = NonNullable<TableProps<any>['onChange']>;
84
+
85
+ const TableGrid = props => {
86
+ const {
87
+ columns,
88
+ tableRef,
89
+ dataSource,
90
+ title,
91
+ format,
92
+ virtual = true,
93
+ t,
94
+ lang,
95
+ contextMenuOpen,
96
+ contextMenuItems: propContextMenuItems,
97
+ contextMenuHidden,
98
+ contextMenuClick,
99
+ recordDoubleClick,
100
+ toolbarItems,
101
+ showColumnChoose,
102
+ onFilter,
103
+ selectionSettings,
104
+ rowSelection,
105
+ rowSelected,
106
+ rowKey = 'id',
107
+ pagination,
108
+ scroll,
109
+ onFilterClick,
110
+ dataSourceFilter: propDataSourceFilter,
111
+ loading,
112
+ setColumns,
113
+ // dataSourceFilter,
114
+ ...rest
115
+ } = props;
116
+ const {
117
+ styles
118
+ } = useStyle();
119
+ const clickRef = useRef(null);
120
+ const menuRef = useRef(null);
121
+ const viewportWidth = window.innerWidth;
122
+ const viewportHeight = window.innerHeight;
123
+ const defaultSelected = useMemo(() => {
124
+ return selectionSettings?.defaultSelectedRowKeys ?? [];
125
+ }, [selectionSettings?.defaultSelectedRowKeys]);
126
+ const [menuVisible, setMenuVisible] = React.useState(false);
127
+ const [selectedRowData, setSelectedRowData] = React.useState(null);
128
+ const [position, setPosition] = React.useState({
129
+ x: 0,
130
+ y: 0,
131
+ viewportWidth,
132
+ viewportHeight
133
+ });
134
+ const [selectedRowKeys, setSelectedRowKeys] = useState(defaultSelected);
135
+ const contextMenuItems = React.useMemo(() => {
136
+ if (typeof contextMenuHidden === "function" && propContextMenuItems && selectedRowData) {
137
+ const hiddenItems = contextMenuHidden({
138
+ rowInfo: {
139
+ rowData: selectedRowData
140
+ }
141
+ });
142
+ return propContextMenuItems.filter(item => !hiddenItems.includes(item?.key));
143
+ }
144
+ if (contextMenuHidden && typeof contextMenuHidden !== 'function' && propContextMenuItems) {
145
+ return propContextMenuItems.filter(item => !contextMenuHidden.includes(item?.key));
146
+ }
147
+ return propContextMenuItems;
148
+ }, [propContextMenuItems, contextMenuHidden, selectedRowData]);
149
+ useLayoutEffect(() => {
150
+ setMenuVisible(false);
151
+ }, []);
152
+ const onContextMenu = data => event => {
153
+ event.preventDefault(); // Ngăn chặn menu mặc định của trình duyệt
154
+
155
+ setSelectedRowData(data);
156
+ contextMenuOpen?.({
157
+ rowInfo: {
158
+ rowData: data
159
+ },
160
+ event
161
+ });
162
+ setMenuVisible(true);
163
+
164
+ // Đợi DOM cập nhật và lấy kích thước menu
165
+ setTimeout(() => {
166
+ const menuElement = menuRef.current; // Lấy menu từ DOM
167
+ const menuWidth = menuElement?.offsetWidth || 200; // Mặc định 200px nếu chưa render
168
+ const menuHeight = menuElement?.offsetHeight; // Mặc định 450px nếu chưa render
169
+
170
+ // Điều chỉnh vị trí menu
171
+ let x = event.clientX;
172
+ let y = event.clientY;
173
+ if (x + menuWidth > viewportWidth) {
174
+ x = x - menuWidth - 10; // Cách cạnh phải 10px
175
+ }
176
+ if (y + menuHeight > viewportHeight) {
177
+ if (y < menuHeight) {
178
+ y = 10;
179
+ } else {
180
+ y = y - 10 - menuHeight; // Cách cạnh dưới 10px
181
+ }
182
+ }
183
+ setPosition(prevState => ({
184
+ ...prevState,
185
+ x,
186
+ y
187
+ }));
188
+ }, 100);
189
+ if (!menuVisible) {
190
+ document.addEventListener(`click`, function onClickOutside(e) {
191
+ const element = e.target;
192
+ const menuContainer = document.querySelector(".popup-context-menu");
193
+ const isInsideContainer = element.closest(".popup-context-menu") && menuContainer;
194
+ if (isInsideContainer) {
195
+ return;
196
+ }
197
+ setMenuVisible(false);
198
+ document.removeEventListener(`click`, onClickOutside);
199
+ });
200
+ }
201
+ };
202
+ const handleRowClick = () => {
203
+ if (clickRef.current) return;
204
+
205
+ // @ts-ignore
206
+ clickRef.current = setTimeout(() => {
207
+ // console.log("Single Click:", record);
208
+ clickRef.current = null;
209
+ }, 250);
210
+ };
211
+ const handleRowDoubleClick = (record, index) => e => {
212
+ if (clickRef.current) {
213
+ clearTimeout(clickRef.current);
214
+ clickRef.current = null;
215
+ }
216
+ recordDoubleClick?.({
217
+ e,
218
+ rowIndex: index,
219
+ rowData: record
220
+ });
221
+ };
222
+ const onSelectChange = (keys, selectedRows, info, selectedRow) => {
223
+ if (info.type === 'all') {
224
+ // setSelectedRowKeys(keys)
225
+ rowSelected?.({
226
+ selected: selectedRows,
227
+ type: 'rowSelected',
228
+ rowData: {}
229
+ });
230
+ } else {
231
+ if (selectionSettings?.type === 'multiple') {
232
+ // setSelectedRowKeys(keys)
233
+ rowSelected?.({
234
+ selected: selectedRows,
235
+ type: 'rowSelected',
236
+ rowData: selectedRow
237
+ });
238
+ } else {
239
+ // @ts-ignore
240
+ setSelectedRowKeys([selectedRow[rowKey]]);
241
+ rowSelected?.({
242
+ selected: [selectedRow],
243
+ type: 'rowSelected',
244
+ rowData: selectedRow
245
+ });
246
+ }
247
+ }
248
+ };
249
+ const handleChange = sorter => {
250
+ console.log('Various parameters', sorter);
251
+ // setFilteredInfo(filters);
252
+ // setSortedInfo(sorter as Sorts);
253
+ };
254
+ return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(ConfigProvider, {
255
+ theme: {
256
+ components: {
257
+ Table: {
258
+ rowHoverBg: '#eb461912',
259
+ rowSelectedBg: '#eb4619',
260
+ rowSelectedHoverBg: '#eb4619'
261
+ }
262
+ }
263
+ }
264
+ }, /*#__PURE__*/React.createElement(ContextMenu, {
265
+ open: menuVisible,
266
+ pos: position,
267
+ setOpen: setMenuVisible,
268
+ menuRef: menuRef,
269
+ contextMenuItems: contextMenuItems,
270
+ contextMenuClick: contextMenuClick,
271
+ rowData: selectedRowData
272
+ }), /*#__PURE__*/React.createElement(Table, _extends({
273
+ ref: tableRef,
274
+ loading: {
275
+ spinning: columns && columns.length === 0 || loading === true,
276
+ indicator: /*#__PURE__*/React.createElement(ComponentSpinner, null)
277
+ },
278
+ dataSource: dataSource
279
+ // className={styles.customTable}
280
+ ,
281
+ className: classNames('', {
282
+ 'table-none-column-select': selectionSettings?.mode === undefined && selectionSettings?.type !== 'multiple'
283
+ }, styles.customTable),
284
+ bordered: true,
285
+ virtual: virtual,
286
+ columns: columns,
287
+ rowKey: rowKey,
288
+ rowHoverable: true,
289
+ size: "small",
290
+ scroll: scroll ? scroll : {
291
+ y: 500
292
+ },
293
+ onRow: (data, index) => {
294
+ return {
295
+ onDoubleClick: handleRowDoubleClick(data, index),
296
+ onClick: handleRowClick,
297
+ onContextMenu: onContextMenu(data)
298
+ };
299
+ },
300
+ rowSelection: {
301
+ type: selectionSettings?.mode === 'checkbox' || selectionSettings?.type === 'multiple' ? 'checkbox' : "radio",
302
+ columnWidth: !selectionSettings?.mode ? 0.0000001 : selectionSettings?.columnWidth ?? 50,
303
+ onChange: onSelectChange,
304
+ selectedRowKeys: selectionSettings?.mode === 'checkbox' && selectionSettings?.type === 'single' ? selectedRowKeys : undefined,
305
+ defaultSelectedRowKeys: selectionSettings?.defaultSelectedRowKeys,
306
+ preserveSelectedRowKeys: true,
307
+ ...rowSelection,
308
+ hideSelectAll: !selectionSettings?.type || selectionSettings?.type === 'single' || selectionSettings?.mode === 'radio' ? true : selectionSettings?.hideSelectAll ?? selectionSettings?.type !== 'multiple'
309
+ },
310
+ onScroll: () => {
311
+ setMenuVisible(false);
312
+ },
313
+ summary: () => /*#__PURE__*/React.createElement(Table.Summary, {
314
+ fixed: true
315
+ }, /*#__PURE__*/React.createElement(Table.Summary.Row, null, flatColumns(columns).filter(col => col.hidden !== true).map((col, index) => {
316
+ const thousandSeparator = col.format?.thousandSeparator ? col.format?.thousandSeparator : format?.thousandSeparator;
317
+ const decimalSeparator = col.format?.decimalSeparator ? col.format?.decimalSeparator : format?.decimalSeparator;
318
+ const dec = col.format?.decimalScale || col.format?.decimalScale === 0 ? col.format?.decimalScale : format?.decimalScale;
319
+ const sumValue = col.type === 'number' ? sumDataByField(dataSource, col?.key) : 0;
320
+ const value = !isEmpty(sumValue) ? dec || dec === 0 ? parseFloat(Number(sumValue).toFixed(dec)).toString() : sumValue.toString() : '0';
321
+ const cellValue = col.type === 'number' && col.isSummary !== false ? value : '';
322
+ const numericFormatProps = {
323
+ thousandSeparator: checkThousandSeparator(thousandSeparator, decimalSeparator),
324
+ decimalSeparator: checkDecimalSeparator(thousandSeparator, decimalSeparator),
325
+ allowNegative: (col.format?.allowNegative ? col.format?.allowNegative : format?.allowNegative) ?? false,
326
+ prefix: col.format?.prefix ? col.format?.prefix : format?.prefix,
327
+ suffix: col.format?.suffix ? col.format?.suffix : format?.suffix,
328
+ decimalScale: dec,
329
+ fixedDecimalScale: (col.format?.fixedDecimalScale ? col.format?.fixedDecimalScale : format?.fixedDecimalScale) ?? false
330
+ };
331
+ return /*#__PURE__*/React.createElement(Table.Summary.Cell, {
332
+ key: col.key,
333
+ index: index
334
+ }, col.summaryTemplate ? col.summaryTemplate(cellValue, col.key) : numericFormatter(cellValue, numericFormatProps));
335
+ }))),
336
+ pagination: pagination && pagination.onChange ? false : {
337
+ showTotal: (total, range) => `${range[0]}-${range[1]} / ${total} items`,
338
+ ...pagination
339
+ },
340
+ onFilter: val => {
341
+ onFilter?.(convertFilters(val));
342
+ },
343
+ onChange: (paging, filters, sorter) => handleChange(sorter),
344
+ title: () => {
345
+ return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", null, title?.(dataSource)), (toolbarItems || showColumnChoose !== false) && /*#__PURE__*/React.createElement("div", {
346
+ style: {
347
+ display: 'flex',
348
+ justifyContent: 'space-between'
349
+ }
350
+ }, /*#__PURE__*/React.createElement(Toolbar, {
351
+ style: {
352
+ width: '100%'
353
+ },
354
+ items: toolbarItems ?? [],
355
+ mode: 'responsive'
356
+ // mode={'scroll'}
357
+ ,
358
+ onClick: val => {
359
+ console.log(val);
360
+ }
361
+ }), showColumnChoose && /*#__PURE__*/React.createElement(ColumnsChoose, {
362
+ columns: columns,
363
+ setColumns: setColumns
364
+ }), /*#__PURE__*/React.createElement("div", null)));
365
+ }
366
+ }, rest)), pagination && pagination.onChange && /*#__PURE__*/React.createElement(Pagination
367
+ // style={{padding: '0.75rem 1rem'}}
368
+ , _extends({
369
+ showSizeChanger: true,
370
+ responsive: true,
371
+ size: 'small',
372
+ showTotal: (total, range) => `${range[0]}-${range[1]} / ${total} items`
373
+ }, pagination))));
374
+ };
375
+ export default TableGrid;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { BaseOptionType, DefaultOptionType } from "rc-select/lib/Select";
3
+ import type { TableSelectProps } from "rc-master-ui/es/table-select";
4
+ export interface DebounceSelectProps<OptionType extends BaseOptionType = DefaultOptionType> extends TableSelectProps {
5
+ loadOptions?: (search: string, callback: (newOptions: OptionType[]) => void) => void;
6
+ debounceTimeout?: number;
7
+ defaultOptions?: OptionType[];
8
+ }
9
+ export declare function AsyncTableSelect<OptionType extends BaseOptionType>({ loadOptions, debounceTimeout, defaultOptions, columns, ...props }: DebounceSelectProps<OptionType>): React.JSX.Element;
@@ -0,0 +1,37 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import React, { useEffect, useMemo, useState } from 'react';
3
+ import debounce from 'lodash/debounce';
4
+ import { TableSelect } from "rc-master-ui";
5
+ export function AsyncTableSelect({
6
+ loadOptions,
7
+ debounceTimeout = 500,
8
+ defaultOptions,
9
+ columns,
10
+ ...props
11
+ }) {
12
+ const [options, setOptions] = useState(defaultOptions ?? []);
13
+ const debounceFetcher = useMemo(() => {
14
+ const fetchOptions = value => {
15
+ if (value.trim().length === 0) {
16
+ setOptions(defaultOptions ?? []);
17
+ return;
18
+ }
19
+ if (loadOptions) {
20
+ loadOptions(value, newOptions => {
21
+ setOptions(newOptions);
22
+ });
23
+ }
24
+ };
25
+ return debounce(fetchOptions, debounceTimeout);
26
+ }, [loadOptions, debounceTimeout]);
27
+ useEffect(() => {
28
+ setOptions(defaultOptions ?? []);
29
+ }, [defaultOptions]);
30
+ return /*#__PURE__*/React.createElement(TableSelect, _extends({}, props, {
31
+ filterOption: loadOptions ? false : props?.filterOption,
32
+ onSearch: debounceFetcher,
33
+ onSelect: () => setOptions(defaultOptions ?? []),
34
+ options: options,
35
+ columns: columns
36
+ }));
37
+ }
@@ -46,3 +46,17 @@ export declare const optionFontSize: {
46
46
  value: number;
47
47
  label: string;
48
48
  }[];
49
+ /**
50
+ * Sort order for BaseTable
51
+ */
52
+ declare const SortOrder: {
53
+ /**
54
+ * Sort data in ascending order
55
+ */
56
+ ascend: string;
57
+ /**
58
+ * Sort data in descending order
59
+ */
60
+ descend: string;
61
+ };
62
+ export default SortOrder;
@@ -9,7 +9,7 @@ export const numberOperator = [{
9
9
  label: 'Greater than',
10
10
  key: '>'
11
11
  }, {
12
- value: 'greaterthan',
12
+ value: 'greaterthanorequal',
13
13
  label: 'Greater Than or Equal',
14
14
  key: '>='
15
15
  }, {
@@ -211,4 +211,19 @@ export const optionFontSize = [{
211
211
  }, {
212
212
  value: 48,
213
213
  label: '48'
214
- }];
214
+ }];
215
+
216
+ /**
217
+ * Sort order for BaseTable
218
+ */
219
+ const SortOrder = {
220
+ /**
221
+ * Sort data in ascending order
222
+ */
223
+ ascend: 'Ascending',
224
+ /**
225
+ * Sort data in descending order
226
+ */
227
+ descend: 'Descending'
228
+ };
229
+ export default SortOrder;
@@ -0,0 +1,6 @@
1
+ import type { ColumnsType, ColumnType, IFormat } from "../../type";
2
+ import React from "react";
3
+ export declare function flatColumns<RecordType>(columns: ColumnsType<RecordType>, parentKey?: string): ColumnType<RecordType>[];
4
+ export declare const getValueCell: <T>(column: ColumnType<T>, value: any, format?: IFormat) => any;
5
+ export declare const renderContent: <RecordType>(column: ColumnType<RecordType>, value: any, record: RecordType, index: number, format?: IFormat) => React.JSX.Element;
6
+ export declare const renderFilter: <RecordType>(column: ColumnType<RecordType>, selectedKeys: string[], setSelectedKeys: any, confirm: any, visible: boolean, searchValue: string, setSearchValue: any, dataSourceFilter: any[], buddhistLocale: any) => React.JSX.Element;