es-grid-template 0.0.8 → 0.1.0

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/CHANGELOG.md +6 -6
  2. package/LICENSE +21 -19
  3. package/README.md +1 -1
  4. package/es/{CheckboxFilter.js → grid-component/CheckboxFilter.js} +0 -1
  5. package/es/{ColumnsChoose.js → grid-component/ColumnsChoose.js} +1 -1
  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} +1 -1
  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.js +284 -0
  12. package/es/{LoadingSpinner.js → grid-component/LoadingSpinner.js} +1 -1
  13. package/es/grid-component/Message/Message.d.ts +2 -0
  14. package/es/grid-component/Message/Message.js +16 -0
  15. package/es/grid-component/Message/index.d.ts +1 -0
  16. package/es/grid-component/Message/index.js +1 -0
  17. package/{lib → es/grid-component}/TableGrid.d.ts +2 -2
  18. package/es/grid-component/TableGrid.js +375 -0
  19. package/es/grid-component/async-table-select/index.d.ts +9 -0
  20. package/es/grid-component/async-table-select/index.js +37 -0
  21. package/{lib → es/grid-component}/hooks/constant.d.ts +14 -0
  22. package/es/{hooks → grid-component/hooks}/constant.js +16 -1
  23. package/es/grid-component/hooks/useColumns/index.d.ts +6 -0
  24. package/es/grid-component/hooks/useColumns/index.js +422 -0
  25. package/es/grid-component/hooks/utils.d.ts +35 -0
  26. package/es/{hooks → grid-component/hooks}/utils.js +124 -16
  27. package/es/grid-component/index.d.ts +2 -0
  28. package/es/grid-component/index.js +2 -0
  29. package/es/grid-component/styles.scss +551 -0
  30. package/es/grid-component/table/Grid.d.ts +8 -0
  31. package/es/grid-component/table/Grid.js +99 -0
  32. package/es/grid-component/table/GridEdit.d.ts +9 -0
  33. package/es/grid-component/table/GridEdit.js +706 -0
  34. package/es/grid-component/type.d.ts +225 -0
  35. package/es/grid-component/useContext.d.ts +27 -0
  36. package/es/grid-component/useContext.js +4 -0
  37. package/es/index.d.ts +1 -2
  38. package/es/index.js +1 -2
  39. package/lib/{CheckboxFilter.js → grid-component/CheckboxFilter.js} +0 -1
  40. package/lib/{ColumnsChoose.js → grid-component/ColumnsChoose.js} +1 -1
  41. package/lib/grid-component/EditableCell.d.ts +19 -0
  42. package/lib/grid-component/EditableCell.js +844 -0
  43. package/lib/{FilterSearch.js → grid-component/FilterSearch.js} +1 -1
  44. package/lib/grid-component/GridStyle.d.ts +4 -0
  45. package/lib/grid-component/GridStyle.js +12 -0
  46. package/lib/grid-component/InternalTable.js +293 -0
  47. package/lib/{LoadingSpinner.js → grid-component/LoadingSpinner.js} +1 -1
  48. package/lib/grid-component/Message/Message.d.ts +2 -0
  49. package/lib/grid-component/Message/Message.js +25 -0
  50. package/lib/grid-component/Message/index.d.ts +1 -0
  51. package/lib/grid-component/Message/index.js +16 -0
  52. package/{es → lib/grid-component}/TableGrid.d.ts +2 -2
  53. package/lib/grid-component/TableGrid.js +382 -0
  54. package/lib/grid-component/async-table-select/index.d.ts +9 -0
  55. package/lib/grid-component/async-table-select/index.js +46 -0
  56. package/{es → lib/grid-component}/hooks/constant.d.ts +14 -0
  57. package/lib/{hooks → grid-component/hooks}/constant.js +17 -2
  58. package/lib/grid-component/hooks/useColumns/index.d.ts +6 -0
  59. package/lib/grid-component/hooks/useColumns/index.js +435 -0
  60. package/lib/grid-component/hooks/utils.d.ts +35 -0
  61. package/lib/{hooks → grid-component/hooks}/utils.js +140 -19
  62. package/lib/grid-component/index.d.ts +2 -0
  63. package/lib/grid-component/index.js +9 -0
  64. package/lib/grid-component/styles.scss +551 -0
  65. package/lib/grid-component/table/Grid.d.ts +8 -0
  66. package/lib/grid-component/table/Grid.js +108 -0
  67. package/lib/grid-component/table/GridEdit.d.ts +9 -0
  68. package/lib/grid-component/table/GridEdit.js +715 -0
  69. package/lib/grid-component/type.d.ts +225 -0
  70. package/lib/grid-component/useContext.d.ts +27 -0
  71. package/lib/grid-component/useContext.js +10 -0
  72. package/lib/index.d.ts +1 -2
  73. package/lib/index.js +7 -3
  74. package/package.json +112 -77
  75. package/es/InternalTable.js +0 -185
  76. package/es/TableGrid.js +0 -1055
  77. package/es/hooks/useColumns/index.d.ts +0 -2
  78. package/es/hooks/useColumns/index.js +0 -25
  79. package/es/hooks/utils.d.ts +0 -19
  80. package/es/styles.scss +0 -296
  81. package/es/type.d.ts +0 -100
  82. package/lib/InternalTable.js +0 -194
  83. package/lib/TableGrid.js +0 -1063
  84. package/lib/hooks/useColumns/index.d.ts +0 -2
  85. package/lib/hooks/useColumns/index.js +0 -31
  86. package/lib/hooks/utils.d.ts +0 -19
  87. package/lib/styles.scss +0 -296
  88. package/lib/type.d.ts +0 -100
  89. package/es/{CheckboxFilter.d.ts → grid-component/CheckboxFilter.d.ts} +0 -0
  90. package/es/{ColumnsChoose.d.ts → grid-component/ColumnsChoose.d.ts} +0 -0
  91. package/es/{ContextMenu.d.ts → grid-component/ContextMenu.d.ts} +0 -0
  92. package/es/{ContextMenu.js → grid-component/ContextMenu.js} +0 -0
  93. package/es/{FilterSearch.d.ts → grid-component/FilterSearch.d.ts} +0 -0
  94. package/es/{InternalTable.d.ts → grid-component/InternalTable.d.ts} +1 -1
  95. package/es/{LoadingSpinner.d.ts → grid-component/LoadingSpinner.d.ts} +0 -0
  96. package/es/{hooks → grid-component/hooks}/index.d.ts +0 -0
  97. package/es/{hooks → grid-component/hooks}/index.js +0 -0
  98. package/es/{hooks → grid-component/hooks}/useIsOverflow.d.ts +0 -0
  99. package/es/{hooks → grid-component/hooks}/useIsOverflow.js +0 -0
  100. package/es/{hooks → grid-component/hooks}/useOnClickOutside.d.ts +0 -0
  101. package/es/{hooks → grid-component/hooks}/useOnClickOutside.js +0 -0
  102. package/es/{type.js → grid-component/type.js} +0 -0
  103. package/lib/{CheckboxFilter.d.ts → grid-component/CheckboxFilter.d.ts} +0 -0
  104. package/lib/{ColumnsChoose.d.ts → grid-component/ColumnsChoose.d.ts} +0 -0
  105. package/lib/{ContextMenu.d.ts → grid-component/ContextMenu.d.ts} +0 -0
  106. package/lib/{ContextMenu.js → grid-component/ContextMenu.js} +0 -0
  107. package/lib/{FilterSearch.d.ts → grid-component/FilterSearch.d.ts} +0 -0
  108. package/lib/{InternalTable.d.ts → grid-component/InternalTable.d.ts} +1 -1
  109. /package/lib/{LoadingSpinner.d.ts → grid-component/LoadingSpinner.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
@@ -19,7 +19,7 @@ const FilterSearch = props => {
19
19
  paddingRight: 0
20
20
  }
21
21
  }, /*#__PURE__*/React.createElement(Input, {
22
- prefix: /*#__PURE__*/React.createElement(SearchOutlined, null),
22
+ suffix: /*#__PURE__*/React.createElement(SearchOutlined, null),
23
23
  placeholder: locale.filterSearchPlaceholder,
24
24
  onChange: onChange,
25
25
  value: value,
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ export declare const GridStyle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
3
+ heightTable?: number | string;
4
+ }>> & string;
@@ -0,0 +1,5 @@
1
+ import styled from "styled-components";
2
+ export const GridStyle = styled.div.withConfig({
3
+ displayName: "GridStyle",
4
+ componentId: "es-grid-template__sc-sueu2e-0"
5
+ })([".ui-rc-pagination{border-bottom:1px solid #e0e0e0;border-top:1px solid #e0e0e0;margin:0;padding:.75rem 1rem;.ui-rc-pagination-total-text{order:2;margin-left:auto;}&::before{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:", ";bottom:0;left:0;z-index:-1;}&::after{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:", ";bottom:0;visibility:visible;right:0;z-index:-1;}}"], props => props.heightTable ? typeof props.heightTable === 'string' ? props.heightTable : `${props.heightTable}px` : undefined, props => props.heightTable ? `${props.heightTable}px` : undefined);
@@ -0,0 +1,284 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import React, { Fragment, useCallback, useEffect, useRef, useState } from 'react';
3
+ import { Select, Table } from "rc-master-ui";
4
+ import { Button, Space } from "antd";
5
+ import { SearchOutlined } from "@ant-design/icons";
6
+ import styled from "styled-components";
7
+ import { Resizable } from "react-resizable";
8
+ import customParseFormat from 'dayjs/plugin/customParseFormat';
9
+ import { numberOperator, translateOption, updateArrayByKey } from "./hooks";
10
+ import { FilterFill } from "becoxy-icons";
11
+ import { renderFilter } from "./hooks/useColumns";
12
+ import dayjs from "dayjs";
13
+ import 'dayjs/locale/es';
14
+ import 'dayjs/locale/vi';
15
+ import en from 'rc-master-ui/es/date-picker/locale/en_US';
16
+ import vi from 'rc-master-ui/es/date-picker/locale/vi_VN';
17
+ import GridEdit from "./table/GridEdit";
18
+ import Grid from "./table/Grid";
19
+ import "./styles.scss";
20
+ dayjs.extend(customParseFormat);
21
+ const ResizableTitle = props => {
22
+ const {
23
+ onResize,
24
+ width,
25
+ ...restProps
26
+ } = props;
27
+ if (!width) {
28
+ return /*#__PURE__*/React.createElement("th", restProps);
29
+ }
30
+ return (
31
+ /*#__PURE__*/
32
+ // @ts-ignore
33
+ React.createElement(Resizable, {
34
+ width: width,
35
+ height: 0,
36
+ handle: /*#__PURE__*/React.createElement("span", {
37
+ className: "react-resizable-handle",
38
+ onClick: e => {
39
+ e.stopPropagation();
40
+ }
41
+ }),
42
+ onResize: onResize,
43
+ draggableOpts: {
44
+ enableUserSelectHack: false
45
+ }
46
+ }, /*#__PURE__*/React.createElement("th", restProps))
47
+ );
48
+ };
49
+ const GridStyle = styled.div.withConfig({
50
+ displayName: "GridStyle",
51
+ componentId: "es-grid-template__sc-1awgu8w-0"
52
+ })([".ui-rc-pagination{border-bottom:1px solid #e0e0e0;border-top:1px solid #e0e0e0;margin:0;padding:.75rem 1rem;.ui-rc-pagination-total-text{order:2;margin-left:auto;}&::before{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:", ";bottom:0;left:0;}&::after{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:", ";bottom:0;visibility:visible;right:0;}}"], props => props.heightTable ? typeof props.heightTable === 'string' ? props.heightTable : `${props.heightTable}px` : undefined, props => props.heightTable ? `${props.heightTable}px` : undefined);
53
+ const InternalTable = props => {
54
+ const {
55
+ t,
56
+ columns: propsColumns,
57
+ lang,
58
+ dataSource,
59
+ allowResizing = true,
60
+ dataSourceFilter: propDataSourceFilter,
61
+ onFilterClick,
62
+ editAble,
63
+ ...rest
64
+ } = props;
65
+ const locale = lang && lang === 'en' ? en : vi;
66
+ const buddhistLocale = {
67
+ ...locale,
68
+ lang: {
69
+ ...locale.lang
70
+ }
71
+ };
72
+ const tableRef = useRef(null);
73
+ const [data, setData] = useState(dataSource);
74
+ const [columns, setColumns] = useState([]);
75
+ const [isManualUpdate, setIsManualUpdate] = useState(false);
76
+ const [dataSourceFilter, setDataSourceFilter] = useState(propDataSourceFilter ?? []);
77
+ useEffect(() => {
78
+ const rs = propsColumns ? [Table.SELECTION_COLUMN, ...propsColumns] : [];
79
+ setColumns(rs);
80
+ }, [propsColumns]);
81
+ useEffect(() => {
82
+ if (!isManualUpdate) {
83
+ setData(dataSource || []);
84
+ }
85
+ setIsManualUpdate(false);
86
+ }, [dataSource]);
87
+ const handleSearch = (selectedKeys, confirm) => {
88
+ confirm();
89
+ };
90
+ const onFilterCallback = (key, filterDataCallback) => {
91
+ const find = dataSourceFilter.find(it => it.key === key);
92
+ if (find) {
93
+ const newData = updateArrayByKey(dataSourceFilter, {
94
+ key,
95
+ data: filterDataCallback
96
+ }, 'key');
97
+ setDataSourceFilter(newData);
98
+ } else {
99
+ const newData = [...dataSourceFilter, {
100
+ key,
101
+ data: filterDataCallback
102
+ }];
103
+ setDataSourceFilter(newData);
104
+ }
105
+ };
106
+ const getColumnSearchProps = useCallback(column => ({
107
+ filterDropdown: ({
108
+ setSelectedKeys,
109
+ selectedKeys,
110
+ confirm,
111
+ close,
112
+ setOperatorKey,
113
+ operatorKey,
114
+ visible,
115
+ searchValue,
116
+ setSearchValue
117
+ }) => {
118
+ return /*#__PURE__*/React.createElement("div", {
119
+ style: {
120
+ padding: 8,
121
+ minWidth: 275
122
+ },
123
+ onKeyDown: e => e.stopPropagation()
124
+ }, (column?.showOperator !== false || column?.typeFilter !== 'DateRange' && column?.typeFilter !== 'NumberRange') && /*#__PURE__*/React.createElement("div", {
125
+ className: 'mb-1'
126
+ }, /*#__PURE__*/React.createElement(Select, {
127
+ options: translateOption(numberOperator, t),
128
+ style: {
129
+ width: '100%',
130
+ marginBottom: 8
131
+ },
132
+ value: operatorKey,
133
+ onChange: val => {
134
+ setOperatorKey(val);
135
+ }
136
+ })), /*#__PURE__*/React.createElement("div", {
137
+ style: {
138
+ marginBottom: 8
139
+ }
140
+ }, renderFilter(column, selectedKeys, setSelectedKeys, confirm, visible, searchValue, setSearchValue, dataSourceFilter, buddhistLocale)), /*#__PURE__*/React.createElement(Space, {
141
+ style: {
142
+ justifyContent: 'end',
143
+ width: '100%'
144
+ }
145
+ }, /*#__PURE__*/React.createElement(Button, {
146
+ type: "primary",
147
+ onClick: () => {
148
+ confirm({
149
+ closeDropdown: false
150
+ });
151
+ handleSearch(selectedKeys, confirm);
152
+ },
153
+ icon: /*#__PURE__*/React.createElement(SearchOutlined, null),
154
+ size: "small",
155
+ style: {
156
+ width: 90
157
+ }
158
+ }, "Filter"), /*#__PURE__*/React.createElement(Button, {
159
+ type: "link",
160
+ size: "small",
161
+ onClick: () => {
162
+ close();
163
+ }
164
+ }, "close")));
165
+ },
166
+ filterIcon: filtered => /*#__PURE__*/React.createElement(FilterFill, {
167
+ fontSize: 12,
168
+ onClick: () => {
169
+ onFilterClick?.(column, onFilterCallback);
170
+ },
171
+ style: {
172
+ color: filtered ? '#283046' : undefined
173
+ }
174
+ }),
175
+ filterDropdownProps: {
176
+ onOpenChange(open) {
177
+ if (open) {
178
+ // setTimeout(() => searchInput.current?.select(), 100)
179
+ }
180
+ }
181
+ }
182
+ }), [onFilterCallback, onFilterClick, renderFilter, t]);
183
+ const handleResize = indexPath => (e, {
184
+ size
185
+ }) => {
186
+ const updateColumns = (cols, path) => {
187
+ const [currentIndex, ...restPath] = path;
188
+ return cols.map((col, idx) => {
189
+ if (idx === currentIndex) {
190
+ if (restPath.length === 0) {
191
+ // Cập nhật width của cột cuối cùng trong path
192
+ // return { ...col, width: size.width }
193
+
194
+ // Kiểm tra minWidth trước khi cập nhật width
195
+ if (col.minWidth && size.width < col.minWidth) {
196
+ e.preventDefault();
197
+ return col; // Không cập nhật nếu nhỏ hơn minWidth
198
+ }
199
+
200
+ // Kiểm tra minWidth trước khi cập nhật width
201
+ if (col.maxWidth && size.width > col.maxWidth) {
202
+ e.preventDefault();
203
+ return col; // Không cập nhật nếu nhỏ hơn minWidth
204
+ }
205
+ return {
206
+ ...col,
207
+ width: size.width
208
+ };
209
+ } else if (col.children) {
210
+ // Tiếp tục cập nhật các cấp con
211
+ return {
212
+ ...col,
213
+ children: updateColumns(col.children, restPath)
214
+ };
215
+ }
216
+ }
217
+ // e.preventDefault()
218
+ return col;
219
+ });
220
+ };
221
+ setColumns(prevColumns => updateColumns(prevColumns, indexPath));
222
+ };
223
+ const transformColumns = React.useCallback((cols, parentPath = []) => {
224
+ return cols.map((col, index) => {
225
+ const currentPath = [...parentPath, index];
226
+ // @ts-ignore
227
+ if (!col?.dataIndex && !col.key) {
228
+ return col;
229
+ }
230
+ if (col.children) {
231
+ return {
232
+ ...col,
233
+ title: col.headerText ?? col.title,
234
+ ellipsis: col.ellipsis !== false,
235
+ children: transformColumns(col.children, currentPath)
236
+ };
237
+ }
238
+ if (col.dataIndex === 'index' || col.field === 'index' || col.dataIndex === '#' || col.dataIndex === '#') {
239
+ return {
240
+ ...col,
241
+ title: col.headerText ?? col.title,
242
+ ellipsis: col.ellipsis !== false
243
+ };
244
+ }
245
+ return {
246
+ ...getColumnSearchProps(col),
247
+ ...col,
248
+ title: col.headerText ?? col.title,
249
+ ellipsis: col.ellipsis !== false,
250
+ onFilter: (value, record) => {
251
+ // @ts-ignore
252
+ return record[column?.dataIndex];
253
+ },
254
+ onHeaderCell: () => ({
255
+ width: col.width,
256
+ onResize: handleResize(currentPath)
257
+ })
258
+ };
259
+ });
260
+ }, [getColumnSearchProps]);
261
+ const mergedColumns = React.useMemo(() => {
262
+ return transformColumns(columns);
263
+ }, [transformColumns, columns]);
264
+ const TableComponent = editAble ? GridEdit : Grid;
265
+ return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(GridStyle, {
266
+ heightTable: props.style?.minHeight,
267
+ style: {
268
+ position: 'relative'
269
+ }
270
+ }, /*#__PURE__*/React.createElement(TableComponent, _extends({}, rest, {
271
+ tableRef: tableRef,
272
+ dataSource: data,
273
+ components: {
274
+ header: {
275
+ cell: allowResizing ? ResizableTitle : undefined
276
+ }
277
+ },
278
+ columns: mergedColumns,
279
+ showSorterTooltip: {
280
+ target: 'sorter-icon'
281
+ }
282
+ }))));
283
+ };
284
+ export default InternalTable;
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import styled from "styled-components";
3
3
  const SpinnerStyle = styled.div.withConfig({
4
4
  displayName: "SpinnerStyle",
5
- componentId: "es-grid-template__sc-180f2ml-0"
5
+ componentId: "es-grid-template__sc-jrz5mo-0"
6
6
  })(["width:1em;height:1em;font-size:20px;display:inline-block;transition:transform 0.3s ease,opacity 0.3s ease;transform-origin:50% 50%;line-height:1;.loading{position:absolute;top:50%;inset-inline-start:50%;margin:-10px;width:55px;height:55px;border-radius:50%;border:3px solid transparent;-webkit-box-sizing:border-box;box-sizing:border-box;.effect-1,.effect-2,.effect-3{width:36px;height:36px;border-radius:50%;border:3px solid transparent;border-left:3px solid #eb4619;-webkit-box-sizing:border-box;box-sizing:border-box;}.effect-1{position:absolute;animation:rotate 1s ease infinite;}.effect-2{position:absolute;animation:rotateOpacity 1s ease infinite 0.1s;}.effect-3{-webkit-animation:rotateOpacity 1s ease infinite 0.2s;animation:rotateOpacity 1s ease infinite 0.2s;}.loading .effects{transition:all 0.3s ease;}}@keyframes rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(1turn);transform:rotate(1turn);}}@keyframes rotateOpacity{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:0.1;}100%{-webkit-transform:rotate(1turn);transform:rotate(1turn);opacity:1;}}"]);
7
7
  const ComponentSpinner = () => {
8
8
  return /*#__PURE__*/React.createElement(SpinnerStyle, {
@@ -0,0 +1,2 @@
1
+ declare const Message: (param: string) => string;
2
+ export default Message;
@@ -0,0 +1,16 @@
1
+ import React, { Fragment } from "react";
2
+ import toast from "react-hot-toast";
3
+ const Message = param => {
4
+ return toast.success( /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", {
5
+ className: "toastify-header"
6
+ }, /*#__PURE__*/React.createElement("div", {
7
+ className: "title-wrapper"
8
+ }, /*#__PURE__*/React.createElement("h6", {
9
+ className: "toast-title"
10
+ }, param))), /*#__PURE__*/React.createElement("div", {
11
+ className: "toastify-body"
12
+ }, /*#__PURE__*/React.createElement("ul", {
13
+ className: "list-unstyled mb-0"
14
+ }, /*#__PURE__*/React.createElement("li", null)))));
15
+ };
16
+ export default Message;
@@ -0,0 +1 @@
1
+ export * from "./Message";
@@ -0,0 +1 @@
1
+ export * from "./Message";
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
2
  import 'dayjs/locale/es';
3
3
  import 'dayjs/locale/vi';
4
- import './styles.scss';
5
4
  import type { GridTableProps } from "./type";
6
5
  type GridProps<T> = GridTableProps<T> & {
7
- setColumns: any;
6
+ setColumns?: any;
7
+ tableRef: any;
8
8
  };
9
9
  declare const TableGrid: <RecordType extends object>(props: GridProps<RecordType>) => React.JSX.Element;
10
10
  export default TableGrid;