es-grid-template 1.8.99 → 1.9.10

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 (48) hide show
  1. package/es/ali-table/Grid.d.ts +1 -1
  2. package/es/ali-table/Grid.js +7 -4
  3. package/es/ali-table/InternalTable.d.ts +1 -1
  4. package/es/ali-table/InternalTable.js +28 -8
  5. package/es/ali-table/base-table/styles.js +1 -1
  6. package/es/ali-table/common-views.js +1 -1
  7. package/es/ali-table/pipeline/features/ColumnsChoose.js +4 -3
  8. package/es/ali-table/pipeline/features/columnCustom.d.ts +11 -2
  9. package/es/ali-table/pipeline/features/columnCustom.js +27 -8
  10. package/es/ali-table/pipeline/features/treeMode.d.ts +1 -0
  11. package/es/ali-table/pipeline/features/treeMode.js +8 -1
  12. package/es/ali-table/pipeline/features/treeSelect.js +1 -1
  13. package/es/ali-table/utils/convertColumnsChoose.d.ts +1 -1
  14. package/es/ali-table/utils/convertColumnsChoose.js +2 -0
  15. package/es/grid-component/TempTable.d.ts +1 -1
  16. package/es/grid-component/type.d.ts +3 -0
  17. package/es/group-component/hook/utils.d.ts +6 -5
  18. package/es/group-component/hook/utils.js +1 -1
  19. package/es/group-component/table/Grid.js +4 -0
  20. package/es/table-component/index.d.ts +0 -2
  21. package/es/table-component/index.js +4 -0
  22. package/es/table-component/table/Grid.js +2 -1
  23. package/es/table-virtuoso/InternalTable.js +4 -0
  24. package/es/table-virtuoso/body/TableBodyRow.js +7 -3
  25. package/lib/ali-table/Grid.d.ts +1 -1
  26. package/lib/ali-table/Grid.js +8 -4
  27. package/lib/ali-table/InternalTable.d.ts +1 -1
  28. package/lib/ali-table/InternalTable.js +27 -7
  29. package/lib/ali-table/base-table/styles.js +1 -1
  30. package/lib/ali-table/common-views.js +1 -1
  31. package/lib/ali-table/pipeline/features/ColumnsChoose.js +4 -3
  32. package/lib/ali-table/pipeline/features/columnCustom.d.ts +11 -2
  33. package/lib/ali-table/pipeline/features/columnCustom.js +27 -8
  34. package/lib/ali-table/pipeline/features/treeMode.d.ts +1 -0
  35. package/lib/ali-table/pipeline/features/treeMode.js +8 -1
  36. package/lib/ali-table/utils/convertColumnsChoose.d.ts +1 -1
  37. package/lib/ali-table/utils/convertColumnsChoose.js +2 -0
  38. package/lib/grid-component/TempTable.d.ts +1 -1
  39. package/lib/grid-component/type.d.ts +3 -0
  40. package/lib/group-component/hook/utils.d.ts +1 -0
  41. package/lib/group-component/hook/utils.js +1 -1
  42. package/lib/group-component/table/Grid.js +4 -0
  43. package/lib/table-component/index.d.ts +0 -2
  44. package/lib/table-component/index.js +2 -0
  45. package/lib/table-component/table/Grid.js +2 -1
  46. package/lib/table-virtuoso/InternalTable.js +4 -0
  47. package/lib/table-virtuoso/body/TableBodyRow.js +7 -3
  48. package/package.json +1 -1
@@ -2,9 +2,9 @@ import type { TablePipeline } from "./pipeline";
2
2
  import type { Dispatch, SetStateAction } from "react";
3
3
  import React from "react";
4
4
  import './base-table/styles.scss';
5
- import type { TableProps } from "../table-component";
6
5
  import type { BaseTable } from "./base-table/table";
7
6
  import type { VirtualEnum } from "./base-table/interfaces";
7
+ import type { TableProps } from "../grid-component";
8
8
  declare const Grid: React.ForwardRefExoticComponent<Omit<TableProps, "useVirtual"> & {
9
9
  isFullScreen: boolean;
10
10
  setIsFullScreen: Dispatch<SetStateAction<boolean>>;
@@ -4,6 +4,7 @@ import { useLocale } from "rc-master-ui/es/locale";
4
4
  import React, { useContext } from "react";
5
5
  import { Tooltip } from "react-tooltip";
6
6
  import "./base-table/styles.scss";
7
+ // import type { TableProps } from "../table-component"
7
8
  import { Toolbar } from 'rc-master-ui';
8
9
  import classNames from "classnames";
9
10
  import Pagination from "rc-master-ui/es/pagination";
@@ -50,7 +51,8 @@ const Grid = /*#__PURE__*/React.forwardRef((props, ref) => {
50
51
  setVisibleKeys,
51
52
  footerDataSource,
52
53
  loading,
53
- useVirtual
54
+ useVirtual,
55
+ useOuterBorder = true
54
56
 
55
57
  // onRowFooterStyles,
56
58
  // onRowHeaderStyles
@@ -143,12 +145,13 @@ const Grid = /*#__PURE__*/React.forwardRef((props, ref) => {
143
145
  setVisibleKeys(nextVisibleKeys);
144
146
  };
145
147
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
146
- className: classNames(`${prefix}-grid ${tableClassNames}`, {
148
+ className: classNames(`${prefix}-grid`, {
149
+ [tableClassNames]: !!tableClassNames,
147
150
  [`${prefix}-grid-light`]: !theme || theme.theme === 'light',
148
151
  [`${prefix}-grid-dark`]: theme?.theme === 'dark'
149
152
  }),
150
153
  style: {
151
- height: height ?? 700,
154
+ maxHeight: height ?? 700,
152
155
  minHeight,
153
156
  display: 'flex',
154
157
  flexDirection: 'column'
@@ -228,7 +231,7 @@ const Grid = /*#__PURE__*/React.forwardRef((props, ref) => {
228
231
 
229
232
  // estimatedRowHeight={50}
230
233
  ,
231
- useOuterBorder: true
234
+ useOuterBorder: useOuterBorder
232
235
  // style={{ height: 700, overflow: 'auto' }}
233
236
  ,
234
237
  style: minHeight ? {
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
2
  import './base-table/styles.scss';
3
- import type { TableProps } from "../table-component";
3
+ import type { TableProps } from "../grid-component/type";
4
4
  declare const InternalTable: <RecordType extends object>(props: TableProps<RecordType>) => React.JSX.Element;
5
5
  export default InternalTable;
@@ -5,7 +5,7 @@ import { useLocale } from "rc-master-ui/es/locale";
5
5
  import { faker } from "@faker-js/faker";
6
6
  import React from "react";
7
7
  import "./base-table/styles.scss";
8
- import { addRowIdArray, filterDataByColumns, groupArrayByColumns, isTreeArray, sortByType, sumFields } from "../table-component/hook/utils";
8
+ import { addRowIdArray, filterDataByColumns, groupArrayByColumns, isTreeArray, revertConvertFilters, sortByType, sumFields } from "../table-component/hook/utils";
9
9
  import { CustomProvider, ConfigProvider } from 'rc-master-ui';
10
10
  import { Modal } from 'antd';
11
11
  import { getLocale, getLocales } from "../locale/useLocale";
@@ -33,7 +33,9 @@ const InternalTable = props => {
33
33
  expandable,
34
34
  sortMultiple,
35
35
  onFilter,
36
+ defaultFilter,
36
37
  onSorter,
38
+ defaultSorter,
37
39
  footerDataSource,
38
40
  summary,
39
41
  useVirtual,
@@ -88,11 +90,12 @@ const InternalTable = props => {
88
90
  return isTreeArray(convertData);
89
91
  }, [convertData]);
90
92
  const mergedData = React.useMemo(() => {
91
- if (sortState || filterState) {
92
- return filterDataByColumns(convertData, filterState ?? [], sortState ?? [], [], ignoreAccents);
93
+ const shouldSkip = onFilter && onSorter;
94
+ if (shouldSkip) {
95
+ return convertData;
93
96
  }
94
- return convertData;
95
- }, [convertData, filterState, ignoreAccents, sortState]);
97
+ return filterDataByColumns(convertData, onFilter ? undefined : filterState ?? defaultFilter, onSorter ? undefined : sortState ?? defaultSorter, [], ignoreAccents);
98
+ }, [convertData, filterState, ignoreAccents, sortState, onFilter, onSorter, defaultFilter, defaultSorter]);
96
99
  const footerData = React.useMemo(() => {
97
100
  if (!summary) {
98
101
  return undefined;
@@ -110,6 +113,12 @@ const InternalTable = props => {
110
113
  return undefined;
111
114
  }, [expandable?.defaultExpandAllRows, convertData, isDataTree]);
112
115
  const [isFullScreen, setIsFullScreen] = React.useState(false);
116
+ const defaultFilterConvert = React.useMemo(() => {
117
+ if (defaultFilter) {
118
+ return revertConvertFilters(defaultFilter);
119
+ }
120
+ return undefined;
121
+ }, [defaultFilter]);
113
122
  const pipeline = useTablePipeline({
114
123
  components: fusion
115
124
  }).input({
@@ -158,7 +167,8 @@ const InternalTable = props => {
158
167
  clickArea: 'icon',
159
168
  stopClickEventPropagation: true,
160
169
  expandIconColumnIndex: expandable?.expandIconColumnIndex,
161
- defaultOpenKeys: expandAllKeys ?? expandable?.defaultExpandedRowKeys
170
+ defaultOpenKeys: expandAllKeys ?? expandable?.defaultExpandedRowKeys,
171
+ isTreeArray: !!isDataTree
162
172
  })).use(features.columnCustom({
163
173
  id,
164
174
  t,
@@ -177,6 +187,8 @@ const InternalTable = props => {
177
187
  currentPage: pagination ? pagination?.currentPage : undefined,
178
188
  pageSize: pagination ? pagination?.pageSize : undefined,
179
189
  isDataTree,
190
+ defaultFilter: defaultFilterConvert,
191
+ defaultSorter,
180
192
  onFilter(val) {
181
193
  // const rs =
182
194
 
@@ -232,7 +244,11 @@ const InternalTable = props => {
232
244
  originColumns: columns,
233
245
  groupColumns: groupColumns,
234
246
  setVisibleKeys: setVisibleKeys,
235
- footerDataSource: footerData
247
+ footerDataSource: footerData,
248
+ onFilter: onFilter,
249
+ onSorter: onSorter,
250
+ defaultFilter: defaultFilter,
251
+ defaultSorter: defaultSorter
236
252
  })), /*#__PURE__*/React.createElement(Modal, {
237
253
  open: isFullScreen,
238
254
  footer: null,
@@ -278,7 +294,11 @@ const InternalTable = props => {
278
294
  originColumns: columns,
279
295
  groupColumns: groupColumns,
280
296
  setVisibleKeys: setVisibleKeys,
281
- footerDataSource: footerData
297
+ footerDataSource: footerData,
298
+ onFilter: onFilter,
299
+ onSorter: onSorter,
300
+ defaultFilter: defaultFilter,
301
+ defaultSorter: defaultSorter
282
302
  })))))));
283
303
  };
284
304
  export default InternalTable;
@@ -48,4 +48,4 @@ const outerBorderStyleMixin = css(["border-top:var(--cell-border-horizontal);bor
48
48
  export const StyledArtTableWrapper = styled.div.withConfig({
49
49
  displayName: "StyledArtTableWrapper",
50
50
  componentId: "es-grid-template__sc-ipj1ht-0"
51
- })(["--row-height:38px;--color:#333;--bgcolor:white;--hover-bgcolor:var(--hover-color,#f5f5f5);--highlight-bgcolor:#eee;--header-row-height:36px;--header-color:#000000de;--header-bgcolor:#ffffff;--header-hover-bgcolor:#ddd;--header-highlight-bgcolor:#e4e8ed;--cell-padding:7px 8px;--font-size:13px;--line-height:1.28571;--lock-shadow:rgba(152,152,152,0.5) 0 0 6px 2px;--border-color:#dfe3e8;--cell-border:1px solid var(--border-color);--cell-border-horizontal:var(--cell-border);--cell-border-vertical:var(--cell-border);--header-cell-border:1px solid var(--border-color);--header-cell-border-horizontal:var(--header-cell-border);--header-cell-border-vertical:var(--header-cell-border);--footer-bgColor:#fafafa;box-sizing:border-box;*{box-sizing:border-box;}cursor:default;color:var(--color);font-size:var(--font-size);line-height:var(--line-height);position:relative;overflow-anchor:none;&.use-outer-border{", ";}.no-scrollbar{scrollbar-width:none;::-webkit-scrollbar{display:none;}}.", "{overflow-x:auto;overflow-y:hidden;background:var(--header-bgcolor);.ui-rc-table-column-title{flex:1;min-width:0;text-align:start;}.", "{font-weight:500;.ui-rc-header-trigger{padding-left:6px;display:flex;align-items:center;.ui-rc-table-column-sorter-cancel{opacity:0;}}&:hover{.ui-rc-header-trigger{.ui-rc-table-column-sorter-cancel{opacity:1;}}}.", "{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all;}.", "{width:100%;white-space:normal;word-break:break-word;}.", "{text-align:center;}.", "{text-align:right;}}}.", "{.", "{&.", "{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all;}&.", "{width:100%;white-space:normal;word-break:break-word;}&.", "{text-align:center;}&.", "{text-align:right;}}}.", ",.", "{overflow-x:auto;overflow-y:hidden;background:var(--bgcolor);}&.sticky-header .", "{position:sticky;top:0;z-index:", ";}&.sticky-footer .", "{position:sticky;bottom:0;z-index:", ";}.", "{tr{td{&.lock-left,&.lock-right{border-bottom-width:0;box-shadow:0 -1px 0 0 var(--border-color),0 1px 0 0 var(--border-color),-1px 0 0 0 var(--border-color);}}}}table{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;display:table;margin:0;padding:0;}tr:not(.no-hover):hover > td{background:var(--hover-bgcolor);}tr:not(.no-highlight).highlight > td{background:var(--highlight-bgcolor);}th{font-weight:normal;text-align:left;padding:var(--cell-padding);height:var(--header-row-height);color:var(--header-color);background:var(--header-bgcolor);border:none;border-right:var(--header-cell-border-vertical);border-bottom:var(--header-cell-border-horizontal);}tr.first th{border-top:var(--header-cell-border-horizontal);}th.first{border-left:var(--header-cell-border-vertical);}td{padding:var(--cell-padding);background:var(--bgcolor);height:var(--row-height);border:none;border-right:var(--cell-border-vertical);border-bottom:var(--cell-border-horizontal);}td.first{border-left:var(--cell-border-vertical);}tr.first td{border-top:var(--cell-border-horizontal);}&.has-header tbody tr.first td{border-top:none;}&.has-footer tbody tr.last td{border-bottom:none;}.lock-left,.lock-right{z-index:", ";}.resize-handle{width:6px;height:100%;position:absolute;top:0;right:0;cursor:col-resize;background-color:transparent;border-right:2px solid transparent}.", "{position:absolute;top:0;bottom:0;z-index:", ";pointer-events:none;overflow:hidden;.", "{height:100%;}.", "{margin-right:", "px;box-shadow:none;&.show-shadow{box-shadow:var(--lock-shadow);border-right:var(--cell-border-vertical);}}.", "{margin-left:", "px;box-shadow:none;&.show-shadow{box-shadow:var(--lock-shadow);border-left:var(--cell-border-vertical);}}}.", "{pointer-events:none;color:#99a3b3;font-size:12px;text-align:center;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);.empty-image{width:50px;height:50px;}.empty-tips{margin-top:16px;line-height:1.5;}}.", "{overflow:auto;position:sticky;bottom:0;z-index:", ";margin-top:-17px;}.ui-rc-grid-loading-wrapper{}.ui-rc-grid-table{}.art-loading-content-wrapper{}.", "{height:1px;visibility:hidden;}.", "{position:relative;.", "{position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;}.", "{position:sticky;z-index:", ";transform:translateY(-50%);}}"], outerBorderStyleMixin, Classes.tableHeader, Classes.tableHeaderCell, Classes.cellEllipsis, Classes.cellWrap, Classes.cellTextCenter, Classes.cellTextRight, Classes.tableBody, Classes.tableCell, Classes.cellEllipsis, Classes.cellWrap, Classes.cellTextCenter, Classes.cellTextRight, Classes.tableBody, Classes.tableFooter, Classes.tableHeader, Z.header, Classes.tableFooter, Z.footer, Classes.tableBody, Z.lock, Classes.lockShadowMask, Z.lockShadow, Classes.lockShadow, Classes.leftLockShadow, LOCK_SHADOW_PADDING, Classes.rightLockShadow, LOCK_SHADOW_PADDING, Classes.emptyWrapper, Classes.stickyScroll, Z.scrollItem, Classes.stickyScrollItem, Classes.loadingWrapper, Classes.loadingIndicatorWrapper, Classes.loadingIndicator, Z.loadingIndicator);
51
+ })(["--row-height:38px;--color:#333;--bgcolor:white;--hover-bgcolor:var(--hover-color,#f5f5f5);--highlight-bgcolor:#eee;--header-row-height:36px;--header-color:#000000de;--header-bgcolor:#ffffff;--header-hover-bgcolor:#ddd;--header-highlight-bgcolor:#e4e8ed;--cell-padding:7px 8px;--font-size:13px;--line-height:1.28571;--lock-shadow:rgba(152,152,152,0.5) 0 0 6px 2px;--border-color:#dfe3e8;--cell-border:1px solid var(--border-color);--cell-border-horizontal:var(--cell-border);--cell-border-vertical:var(--cell-border);--header-cell-border:1px solid var(--border-color);--header-cell-border-horizontal:var(--header-cell-border);--header-cell-border-vertical:var(--header-cell-border);--footer-bgColor:#fafafa;box-sizing:border-box;*{box-sizing:border-box;}cursor:default;color:var(--color);font-size:var(--font-size);line-height:var(--line-height);position:relative;overflow-anchor:none;&.use-outer-border{", ";}.no-scrollbar{scrollbar-width:none;::-webkit-scrollbar{display:none;}}.", "{overflow-x:auto;overflow-y:hidden;background:var(--header-bgcolor);.ui-rc-table-column-title{flex:1;min-width:0;text-align:start;}.", "{font-weight:500;.ui-rc-header-trigger{padding-left:6px;display:flex;align-items:center;.ui-rc-table-column-sorter-cancel{opacity:0;}}&:hover{.ui-rc-header-trigger{.ui-rc-table-column-sorter-cancel{opacity:1;}}}.", "{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all;}.", "{width:100%;white-space:normal;word-break:break-word;}.", "{text-align:center;}.", "{text-align:right;}}}.", "{.", "{&.", "{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all;.expansion-cell{.expansion-content{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all;}}}&.", "{width:100%;white-space:normal;word-break:break-word;}&.", "{text-align:center;}&.", "{text-align:right;}}}.", ",.", "{overflow-x:auto;overflow-y:hidden;background:var(--bgcolor);}&.sticky-header .", "{position:sticky;top:0;z-index:", ";}&.sticky-footer .", "{position:sticky;bottom:0;z-index:", ";}.", "{tr{td{&.lock-left,&.lock-right{border-bottom-width:0;box-shadow:0 -1px 0 0 var(--border-color),0 1px 0 0 var(--border-color),-1px 0 0 0 var(--border-color);}}}}table{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;display:table;margin:0;padding:0;}tr:not(.no-hover):hover > td{background:var(--hover-bgcolor);}tr:not(.no-highlight).highlight > td{background:var(--highlight-bgcolor);}th{font-weight:normal;text-align:left;padding:var(--cell-padding);height:var(--header-row-height);color:var(--header-color);background:var(--header-bgcolor);border:none;border-right:var(--header-cell-border-vertical);border-bottom:var(--header-cell-border-horizontal);}tr.first th{border-top:var(--header-cell-border-horizontal);}th.first{border-left:var(--header-cell-border-vertical);}td{padding:var(--cell-padding);background:var(--bgcolor);height:var(--row-height);border:none;border-right:var(--cell-border-vertical);border-bottom:var(--cell-border-horizontal);}td.first{border-left:var(--cell-border-vertical);}tr.first td{border-top:var(--cell-border-horizontal);}&.has-header tbody tr.first td{border-top:none;}&.has-footer tbody tr.last td{border-bottom:none;}.lock-left,.lock-right{z-index:", ";}.resize-handle{width:6px;height:100%;position:absolute;top:0;right:0;cursor:col-resize;background-color:transparent;border-right:2px solid transparent}.", "{position:absolute;top:0;bottom:0;z-index:", ";pointer-events:none;overflow:hidden;.", "{height:100%;}.", "{margin-right:", "px;box-shadow:none;&.show-shadow{box-shadow:var(--lock-shadow);border-right:var(--cell-border-vertical);}}.", "{margin-left:", "px;box-shadow:none;&.show-shadow{box-shadow:var(--lock-shadow);border-left:var(--cell-border-vertical);}}}.", "{pointer-events:none;color:#99a3b3;font-size:12px;text-align:center;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);.empty-image{width:50px;height:50px;}.empty-tips{margin-top:16px;line-height:1.5;}}.", "{overflow:auto;position:sticky;bottom:0;z-index:", ";margin-top:-17px;}.ui-rc-grid-loading-wrapper{}.ui-rc-grid-table{}.art-loading-content-wrapper{}.", "{height:1px;visibility:hidden;}.", "{position:relative;.", "{position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;}.", "{position:sticky;z-index:", ";transform:translateY(-50%);}}"], outerBorderStyleMixin, Classes.tableHeader, Classes.tableHeaderCell, Classes.cellEllipsis, Classes.cellWrap, Classes.cellTextCenter, Classes.cellTextRight, Classes.tableBody, Classes.tableCell, Classes.cellEllipsis, Classes.cellWrap, Classes.cellTextCenter, Classes.cellTextRight, Classes.tableBody, Classes.tableFooter, Classes.tableHeader, Z.header, Classes.tableFooter, Z.footer, Classes.tableBody, Z.lock, Classes.lockShadowMask, Z.lockShadow, Classes.lockShadow, Classes.leftLockShadow, LOCK_SHADOW_PADDING, Classes.rightLockShadow, LOCK_SHADOW_PADDING, Classes.emptyWrapper, Classes.stickyScroll, Z.scrollItem, Classes.stickyScrollItem, Classes.loadingWrapper, Classes.loadingIndicatorWrapper, Classes.loadingIndicator, Z.loadingIndicator);
@@ -4,7 +4,7 @@ import styled from 'styled-components';
4
4
  export const InlineFlexCell = styled.div.withConfig({
5
5
  displayName: "InlineFlexCell",
6
6
  componentId: "es-grid-template__sc-1o0on5d-0"
7
- })(["display:inline-flex;align-items:center;"]);
7
+ })(["display:flex;align-items:center;"]);
8
8
  export const ExpansionCell = styled(InlineFlexCell).withConfig({
9
9
  displayName: "ExpansionCell",
10
10
  componentId: "es-grid-template__sc-1o0on5d-1"
@@ -33,11 +33,12 @@ export const ColumnsChoose = props => {
33
33
  const defaultSelectedKeys = React.useMemo(() => {
34
34
  const colsVisiables = originColumns.filter(it => it.showInColumnChoose !== false && it.visible !== false);
35
35
  const colsKeys = colsVisiables.map(it => it.field);
36
-
37
- // const aa = Object.keys(columnHidden)
38
-
39
36
  return colsKeys.filter(it => !columnsGroup?.includes(it));
40
37
  }, [columnsGroup, originColumns]);
38
+
39
+ // console.log('defaultSelectedKeys', defaultSelectedKeys)
40
+ // console.log('originColumns', originColumns)
41
+
41
42
  const [mergedSelectedKeys, setMergedSelectedKeys] = useMergedState(defaultSelectedKeys && defaultSelectedKeys.length ? defaultSelectedKeys : undefined, {
42
43
  value: undefined
43
44
  });
@@ -1,7 +1,14 @@
1
1
  import type { TablePipeline } from '../pipeline';
2
2
  import type { ColumnResizeMode } from '../../base-table/table';
3
- import type { SortOrder } from '../../interfaces';
3
+ import type { ArtColumn, SortOrder } from '../../interfaces';
4
4
  import type { FilterItem, IFormat, IWrapSettings, Sorter, SourceFilter } from '../../../grid-component/type';
5
+ type FilterState = {
6
+ field: any;
7
+ key: any;
8
+ column: ArtColumn;
9
+ filteredKeys: any[];
10
+ operator: string | undefined;
11
+ };
5
12
  export interface ColumnFeatureOptions {
6
13
  id: any;
7
14
  columns: any[];
@@ -39,7 +46,8 @@ export interface ColumnFeatureOptions {
39
46
  dataSourceFilter?: SourceFilter[];
40
47
  ignoreAccents?: boolean;
41
48
  onFilter?: (filterState: FilterItem[]) => void;
42
- defaultSorts?: Sorter[];
49
+ defaultFilter?: FilterState[];
50
+ defaultSorter?: Sorter[];
43
51
  mode?: 'single' | 'multiple';
44
52
  keepDataSource?: boolean;
45
53
  orders?: SortOrder[];
@@ -49,3 +57,4 @@ export interface ColumnFeatureOptions {
49
57
  pageSize?: number;
50
58
  }
51
59
  export declare function columnCustom(opts: ColumnFeatureOptions): (pipeline: TablePipeline) => TablePipeline;
60
+ export {};
@@ -41,7 +41,10 @@ export function columnCustom(opts) {
41
41
  wrapSettings,
42
42
  // ignoreAccents,
43
43
  dataSource,
44
- isDataTree
44
+ isDataTree,
45
+ defaultSorter,
46
+ defaultFilter
47
+
45
48
  // currentPage = 1,
46
49
  // pageSize
47
50
  } = opts;
@@ -52,7 +55,7 @@ export function columnCustom(opts) {
52
55
  } = opts;
53
56
  return function columnResizeFeature(pipeline) {
54
57
  const sizes = opts.sizes ?? pipeline.getStateAtKey(stateKeyResize) ?? opts.defaultSizes ?? [];
55
- const filterState = pipeline.getStateAtKey(stateKeyFilter) ?? [];
58
+ const filterState = pipeline.getStateAtKey(stateKeyFilter) ?? defaultFilter ?? [];
56
59
  const visible = pipeline.getStateAtKey(stateKeyVisible) ?? '';
57
60
  const isOpenTooltip = pipeline.getStateAtKey(stateKeyTooltip) ?? false;
58
61
  const pageSize = opts?.pageSize ?? pipeline.getStateAtKey(stateKey)?.pageSize ?? pageSizeOptions[0];
@@ -67,7 +70,7 @@ export function columnCustom(opts) {
67
70
  // const fieldOriginal = fieldOriginalKey ? columns.find((it) => it.field === fieldOriginalKey) : undefined
68
71
 
69
72
  // const sorterStates = pipeline.getStateAtKey(stateKeySorter) ?? []
70
- const sorterStates = pipeline.getStateAtKey(stateKeySorter) ?? opts.defaultSorts ?? [];
73
+ const sorterStates = pipeline.getStateAtKey(stateKeySorter) ?? defaultSorter ?? [];
71
74
  const activeSorts = sorterStates.filter(s => s.order !== 'none');
72
75
  const sorts = mode === 'multiple' ? activeSorts : activeSorts.slice(0, 1);
73
76
  const leafColumns = collectNodes(pipeline.getColumns(), 'leaf-only');
@@ -119,9 +122,10 @@ export function columnCustom(opts) {
119
122
  const onVisibleChange = (newVisible, info, column) => {
120
123
  if (info.source === 'trigger') {
121
124
  if (newVisible) {
122
- const filterValue = filterColumnState.filteredKeys ?? [];
125
+ const defaultFilterOption = defaultFilter?.find(it => it.field === column.field);
126
+ const filterValue = filterColumnState.filteredKeys === null ? [] : filterColumnState.filteredKeys ?? defaultFilterOption?.filteredKeys ?? [];
123
127
  const operator = filterColumnState.operator;
124
- const operatorValue = operator ?? getDefaultOperator(column);
128
+ const operatorValue = operator ?? defaultFilterOption?.operator ?? getDefaultOperator(column);
125
129
  pipeline.setStateAtKey(stateKeyColumnFilter, {
126
130
  operator: operatorValue,
127
131
  filteredKeys: filterValue,
@@ -193,8 +197,20 @@ export function columnCustom(opts) {
193
197
  // xóa column đang filter trong filterState
194
198
 
195
199
  const newFilterState = filterState.filter(it => it.field !== filterColumnState.field);
196
- pipeline.setStateAtKey(stateKeyColumnFilter, {});
197
- pipeline.setStateAtKey(stateKeyFilter, [...newFilterState]);
200
+ const currentFilter = {
201
+ field: filterColumnState.field,
202
+ key: filterColumnState.field,
203
+ column: filterColumnState.column,
204
+ filteredKeys: null,
205
+ operator: filterColumnState.operator ?? undefined
206
+ };
207
+ const rs = updateArrayByKey(filterState, currentFilter, 'field');
208
+ pipeline.setStateAtKey(stateKeyColumnFilter, {
209
+ ...currentFilter
210
+ });
211
+
212
+ // pipeline.setStateAtKey(stateKeyFilter, [...newFilterState])
213
+ pipeline.setStateAtKey(stateKeyFilter, rs);
198
214
  if (onFilter) {
199
215
  onFilter(convertFilters([...newFilterState]));
200
216
  } else {
@@ -242,7 +258,10 @@ export function columnCustom(opts) {
242
258
  const {
243
259
  order
244
260
  } = isSorted && sortMap.get(col.field);
245
- const filtered = !!filterState.find(it => it.field === col.field);
261
+ const find = filterState.find(it => it.field === col.field);
262
+
263
+ // const filtered = !!filterState.find((it) => it.field === col.field)
264
+ const filtered = !!find && find.filteredKeys !== null;
246
265
  const getDropdownTrigger = () => {
247
266
  let iconFilter;
248
267
  if (typeof filterIcon === 'function') {
@@ -16,5 +16,6 @@ export interface TreeModeFeatureOptions {
16
16
  clickArea?: 'cell' | 'content' | 'icon';
17
17
  stopClickEventPropagation?: boolean;
18
18
  treeMetaKey?: string | symbol;
19
+ isTreeArray?: boolean;
19
20
  }
20
21
  export declare function treeMode(opts?: TreeModeFeatureOptions): (pipeline: TablePipeline) => TablePipeline;
@@ -10,6 +10,7 @@ export function treeMode(opts = {}) {
10
10
  const stateKey = 'treeMode';
11
11
  const ctx = pipeline.ctx;
12
12
  const expandIconColumnIndex = opts.expandIconColumnIndex ?? 0;
13
+ const isTreeArray = opts.isTreeArray;
13
14
  const primaryKey = pipeline.ensurePrimaryKey('treeMode');
14
15
  if (typeof primaryKey !== 'string') {
15
16
  throw new Error('treeMode Only strings are supported primaryKey');
@@ -94,6 +95,9 @@ export function treeMode(opts = {}) {
94
95
  if (record[treeMetaKey] == null) {
95
96
  return content;
96
97
  }
98
+ if (!isTreeArray) {
99
+ return /*#__PURE__*/React.createElement(React.Fragment, null, content);
100
+ }
97
101
  const {
98
102
  rowKey,
99
103
  depth,
@@ -105,6 +109,7 @@ export function treeMode(opts = {}) {
105
109
  return /*#__PURE__*/React.createElement(InlineFlexCell, {
106
110
  className: "expansion-cell leaf"
107
111
  }, /*#__PURE__*/React.createElement("span", {
112
+ className: "expansion-content",
108
113
  style: {
109
114
  marginLeft: indent + iconWidth + iconGap
110
115
  }
@@ -131,7 +136,9 @@ export function treeMode(opts = {}) {
131
136
  marginRight: iconGap
132
137
  },
133
138
  onClick: clickArea === 'icon' ? onClick : undefined
134
- }), content);
139
+ }), /*#__PURE__*/React.createElement("span", {
140
+ className: "expansion-content"
141
+ }, content));
135
142
  };
136
143
  const getCellProps = (value, record, rowIndex) => {
137
144
  const prevProps = internals.safeGetCellProps(firstCol, record, rowIndex);
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React from "react";
2
2
  import { always } from "../../utils/others";
3
3
  import { findItemByKey, updateArrayByKey } from "../../../table-component/hook/utils";
4
4
  import { mergeCellProps } from "../../utils";
@@ -1,5 +1,5 @@
1
1
  import { TreeDataNode } from "antd";
2
- import type { ColumnTable } from "../../table-component";
2
+ import { ColumnTable } from "../../grid-component";
3
3
  export declare function convertColumnsToTreeData(columns: ColumnTable[], groupColumns?: string[], t?: any): TreeDataNode[];
4
4
  export declare function filterColumnsByField(columns: ColumnTable[], fieldList: string[]): ColumnTable[];
5
5
  export declare function filterVisibleColumns(columns: ColumnTable[]): ColumnTable[];
@@ -1,3 +1,5 @@
1
+ // import type { ColumnTable } from "../../table-component"
2
+
1
3
  export function convertColumnsToTreeData(columns, groupColumns, t) {
2
4
  if (!columns) {
3
5
  return [];
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
- import type { TableProps } from "../table-component";
2
+ import type { TableProps } from "../grid-component";
3
3
  declare const TempTable: <RecordType extends object>(props: TableProps<RecordType>) => React.JSX.Element;
4
4
  export default TempTable;
@@ -219,6 +219,8 @@ export type ColumnTable<RecordType = AnyObject> = {
219
219
  /** Custom render method */
220
220
  /** Custom method to get cell props */
221
221
  getCellProps?: (value: any, row: any, rowIndex: number) => CellProps;
222
+ /** Props for the header cell */
223
+ headerCellProps?: CellProps;
222
224
  /** Custom method to get cell SpanRect */
223
225
  getSpanRect?: (value: any, row: any, rowIndex: number) => SpanRect;
224
226
  };
@@ -230,6 +232,7 @@ export type TableProps<RecordType = AnyObject> = {
230
232
  backgroundColor?: string;
231
233
  color?: string;
232
234
  };
235
+ useOuterBorder?: boolean;
233
236
  className?: string;
234
237
  title?: ReactNode | ((data: RecordType) => ReactNode);
235
238
  fullScreenTitle?: ReactNode | (() => ReactNode);
@@ -162,7 +162,7 @@ export declare const fixColumnsLeft: <RecordType>(columns: ColumnTable<RecordTyp
162
162
  type?: IColumnType;
163
163
  haveSum?: boolean;
164
164
  isSummary?: boolean;
165
- summaryTemplate?: (data: number, key: string) => import("react").ReactNode | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
165
+ summaryTemplate?: (data: number, key: string) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | import("react").ReactNode;
166
166
  format?: IFormat | ((rowData: any) => IFormat);
167
167
  allowFiltering?: boolean;
168
168
  sorter?: boolean;
@@ -177,18 +177,18 @@ export declare const fixColumnsLeft: <RecordType>(columns: ColumnTable<RecordTyp
177
177
  headerText?: string;
178
178
  hidden?: boolean;
179
179
  visible?: boolean;
180
- headerTooltip?: string | boolean | (() => import("react").ReactNode | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>);
180
+ headerTooltip?: string | boolean | (() => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | import("react").ReactNode);
181
181
  columnGroupText?: string;
182
182
  align?: import("./../../grid-component/type").ITextAlign;
183
183
  textAlign?: import("./../../grid-component/type").ITextAlign;
184
184
  headerTextAlign?: import("./../../grid-component/type").ITextAlign;
185
- template?: import("react").ReactNode | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | ((args: import("./../../grid-component/type").ColumnTemplate<RecordType>) => import("react").ReactNode | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>);
185
+ template?: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | import("react").ReactNode | ((args: import("./../../grid-component/type").ColumnTemplate<RecordType>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | import("react").ReactNode);
186
186
  showTooltip?: boolean;
187
187
  tooltipDescription?: string | ((args: {
188
188
  value: any;
189
189
  rowData: RecordType;
190
- }) => import("react").ReactNode | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>);
191
- headerTemplate?: import("react").ReactNode | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | ((column: ColumnTable<RecordType>) => import("react").ReactNode | import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>);
190
+ }) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | import("react").ReactNode);
191
+ headerTemplate?: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | import("react").ReactNode | ((column: ColumnTable<RecordType>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | import("react").ReactNode);
192
192
  commandItems?: import("./../../grid-component/type").CommandItem[];
193
193
  children?: ColumnTable<RecordType>[];
194
194
  editType?: EditType | ((rowData?: RecordType) => EditType);
@@ -214,6 +214,7 @@ export declare const fixColumnsLeft: <RecordType>(columns: ColumnTable<RecordTyp
214
214
  sumGroup?: boolean;
215
215
  getValue?: (row: any, rowIndex: number) => any;
216
216
  getCellProps?: (value: any, row: any, rowIndex: number) => import("./../../grid-component/type").CellProps;
217
+ headerCellProps?: import("./../../grid-component/type").CellProps;
217
218
  getSpanRect?: (value: any, row: any, rowIndex: number) => import("./../../grid-component/type").SpanRect;
218
219
  }[];
219
220
  export declare function sortColumnsByField<T extends ColumnTable>(columns: T[], priorityFields: string[]): T[];
@@ -1993,7 +1993,7 @@ export function isTreeArray(arr) {
1993
1993
  if (!item) {
1994
1994
  return false;
1995
1995
  }
1996
- if (item.children?.length > 0) {
1996
+ if (Array.isArray(item.children)) {
1997
1997
  return true;
1998
1998
  }
1999
1999
  }
@@ -126,6 +126,10 @@ const Grid = props => {
126
126
  }
127
127
  return true;
128
128
  },
129
+ getRowCanExpand: row => {
130
+ // return Array.isArray(row.original.children) && row.original.children.length > 0
131
+ return Array.isArray(row.original.children);
132
+ },
129
133
  initialState: {
130
134
  rowSelection: {}
131
135
  },
@@ -1,4 +1,2 @@
1
1
  import InternalTable from './InternalTable';
2
- import type { ColumnsTable, TableProps, ColumnTable, ContextMenuItem } from './../grid-component/type';
3
- export type { ColumnsTable, TableProps, ColumnTable, ContextMenuItem };
4
2
  export default InternalTable;
@@ -1,2 +1,6 @@
1
1
  import InternalTable from "./InternalTable";
2
+ // import type { ColumnsTable, TableProps, ColumnTable, ContextMenuItem} from './../grid-component/type'
3
+
4
+ // export type {ColumnsTable, TableProps, ColumnTable, ContextMenuItem}
5
+
2
6
  export default InternalTable;
@@ -157,7 +157,8 @@ const Grid = props => {
157
157
  getGroupedRowModel: getGroupedRowModel(),
158
158
  // onExpandedChange: setExpanded,
159
159
  getRowCanExpand: row => {
160
- return Array.isArray(row.original.children) && row.original.children.length > 0;
160
+ // return Array.isArray(row.original.children) && row.original.children.length > 0
161
+ return Array.isArray(row.original.children);
161
162
  },
162
163
  getExpandedRowModel: getExpandedRowModel(),
163
164
  getPaginationRowModel: pagination && !infiniteScroll ? getPaginationRowModel() : undefined,
@@ -237,6 +237,10 @@ const InternalTable = props => {
237
237
  enableColumnResizing: allowResizing !== false,
238
238
  columnResizeMode,
239
239
  columnResizeDirection,
240
+ getRowCanExpand: row => {
241
+ // return Array.isArray(row.original.children) && row.original.children.length > 0
242
+ return Array.isArray(row.original.children);
243
+ },
240
244
  onColumnSizingChange: setColumnSizing,
241
245
  onColumnSizingInfoChange: setColumnSizingInfo,
242
246
  // ColumnSizing
@@ -45,7 +45,7 @@ const TableBodyRow = ({
45
45
  className: classNames(`${prefix}-grid-row ${rowClass ?? ''}`, {
46
46
  [`${prefix}-grid-row-selected`]: row.getIsSelected(),
47
47
  [`${prefix}-grid-row-focus`]: row.id === focusedCell?.rowId,
48
- [`${prefix}-grid-row-parent`]: row.subRows && row.subRows.length > 0
48
+ [`${prefix}-grid-row-parent`]: row.getCanExpand()
49
49
  }),
50
50
  style: {
51
51
  ...rowStyles,
@@ -85,7 +85,9 @@ const TableBodyRow = ({
85
85
 
86
86
  // const colSpan = row.subRows && cell.column.id === firstNonGroupColumn?.id ? (groupSetting?.groupColumnSpan ?? 2)
87
87
  const colSpanGroup = row.subRows && row.subRows.length > 0 && cell.column.id === firstNonGroupColumn?.column.id ? 2 : row.subRows && nonGroupColumns[1].column.id === cell.column.id ? 0 : 1;
88
- if (row.subRows && row.subRows.length > 0 && colSpanGroup === 0 || onCellRowSpan === 0 || onCellColSpan === 0) {
88
+
89
+ // if (row.subRows && row.subRows.length > 0 && colSpanGroup === 0 || onCellRowSpan === 0 || onCellColSpan === 0) {
90
+ if (row.subRows && row.getCanExpand() && colSpanGroup === 0 || onCellRowSpan === 0 || onCellColSpan === 0) {
89
91
  return null;
90
92
  }
91
93
 
@@ -128,7 +130,9 @@ const TableBodyRow = ({
128
130
  groupValue: groupValue
129
131
  }));
130
132
  }
131
- if (row.subRows.length > 0 && originCol.sumGroup === true && originCol.type === 'number') {
133
+
134
+ // if (row.subRows.length > 0 && originCol.sumGroup === true && originCol.type === 'number') {
135
+ if (row.getCanExpand() && originCol.sumGroup === true && originCol.type === 'number') {
132
136
  const colFormat = typeof originCol.format === 'function' ? originCol.format({}) : originCol.format;
133
137
  const cellFormat = getFormat(colFormat, format);
134
138
  const thousandSeparator = cellFormat?.thousandSeparator;
@@ -2,9 +2,9 @@ import type { TablePipeline } from "./pipeline";
2
2
  import type { Dispatch, SetStateAction } from "react";
3
3
  import React from "react";
4
4
  import './base-table/styles.scss';
5
- import type { TableProps } from "../table-component";
6
5
  import type { BaseTable } from "./base-table/table";
7
6
  import type { VirtualEnum } from "./base-table/interfaces";
7
+ import type { TableProps } from "../grid-component";
8
8
  declare const Grid: React.ForwardRefExoticComponent<Omit<TableProps, "useVirtual"> & {
9
9
  isFullScreen: boolean;
10
10
  setIsFullScreen: Dispatch<SetStateAction<boolean>>;
@@ -22,6 +22,8 @@ var _useContext = require("./useContext");
22
22
  var _ColumnsChoose = require("./pipeline/features/ColumnsChoose");
23
23
  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); }
24
24
  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; }
25
+ // import type { TableProps } from "../table-component"
26
+
25
27
  // const Grid = (props: GridProps) => {
26
28
  const Grid = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
27
29
  const {
@@ -59,7 +61,8 @@ const Grid = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
59
61
  setVisibleKeys,
60
62
  footerDataSource,
61
63
  loading,
62
- useVirtual
64
+ useVirtual,
65
+ useOuterBorder = true
63
66
 
64
67
  // onRowFooterStyles,
65
68
  // onRowHeaderStyles
@@ -152,12 +155,13 @@ const Grid = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
152
155
  setVisibleKeys(nextVisibleKeys);
153
156
  };
154
157
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
155
- className: (0, _classnames.default)(`${prefix}-grid ${tableClassNames}`, {
158
+ className: (0, _classnames.default)(`${prefix}-grid`, {
159
+ [tableClassNames]: !!tableClassNames,
156
160
  [`${prefix}-grid-light`]: !theme || theme.theme === 'light',
157
161
  [`${prefix}-grid-dark`]: theme?.theme === 'dark'
158
162
  }),
159
163
  style: {
160
- height: height ?? 700,
164
+ maxHeight: height ?? 700,
161
165
  minHeight,
162
166
  display: 'flex',
163
167
  flexDirection: 'column'
@@ -237,7 +241,7 @@ const Grid = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
237
241
 
238
242
  // estimatedRowHeight={50}
239
243
  ,
240
- useOuterBorder: true
244
+ useOuterBorder: useOuterBorder
241
245
  // style={{ height: 700, overflow: 'auto' }}
242
246
  ,
243
247
  style: minHeight ? {
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
2
  import './base-table/styles.scss';
3
- import type { TableProps } from "../table-component";
3
+ import type { TableProps } from "../grid-component/type";
4
4
  declare const InternalTable: <RecordType extends object>(props: TableProps<RecordType>) => React.JSX.Element;
5
5
  export default InternalTable;
@@ -42,7 +42,9 @@ const InternalTable = props => {
42
42
  expandable,
43
43
  sortMultiple,
44
44
  onFilter,
45
+ defaultFilter,
45
46
  onSorter,
47
+ defaultSorter,
46
48
  footerDataSource,
47
49
  summary,
48
50
  useVirtual,
@@ -97,11 +99,12 @@ const InternalTable = props => {
97
99
  return (0, _utils.isTreeArray)(convertData);
98
100
  }, [convertData]);
99
101
  const mergedData = _react.default.useMemo(() => {
100
- if (sortState || filterState) {
101
- return (0, _utils.filterDataByColumns)(convertData, filterState ?? [], sortState ?? [], [], ignoreAccents);
102
+ const shouldSkip = onFilter && onSorter;
103
+ if (shouldSkip) {
104
+ return convertData;
102
105
  }
103
- return convertData;
104
- }, [convertData, filterState, ignoreAccents, sortState]);
106
+ return (0, _utils.filterDataByColumns)(convertData, onFilter ? undefined : filterState ?? defaultFilter, onSorter ? undefined : sortState ?? defaultSorter, [], ignoreAccents);
107
+ }, [convertData, filterState, ignoreAccents, sortState, onFilter, onSorter, defaultFilter, defaultSorter]);
105
108
  const footerData = _react.default.useMemo(() => {
106
109
  if (!summary) {
107
110
  return undefined;
@@ -119,6 +122,12 @@ const InternalTable = props => {
119
122
  return undefined;
120
123
  }, [expandable?.defaultExpandAllRows, convertData, isDataTree]);
121
124
  const [isFullScreen, setIsFullScreen] = _react.default.useState(false);
125
+ const defaultFilterConvert = _react.default.useMemo(() => {
126
+ if (defaultFilter) {
127
+ return (0, _utils.revertConvertFilters)(defaultFilter);
128
+ }
129
+ return undefined;
130
+ }, [defaultFilter]);
122
131
  const pipeline = (0, _pipeline.useTablePipeline)({
123
132
  components: fusion
124
133
  }).input({
@@ -167,7 +176,8 @@ const InternalTable = props => {
167
176
  clickArea: 'icon',
168
177
  stopClickEventPropagation: true,
169
178
  expandIconColumnIndex: expandable?.expandIconColumnIndex,
170
- defaultOpenKeys: expandAllKeys ?? expandable?.defaultExpandedRowKeys
179
+ defaultOpenKeys: expandAllKeys ?? expandable?.defaultExpandedRowKeys,
180
+ isTreeArray: !!isDataTree
171
181
  })).use(_pipeline.features.columnCustom({
172
182
  id,
173
183
  t,
@@ -186,6 +196,8 @@ const InternalTable = props => {
186
196
  currentPage: pagination ? pagination?.currentPage : undefined,
187
197
  pageSize: pagination ? pagination?.pageSize : undefined,
188
198
  isDataTree,
199
+ defaultFilter: defaultFilterConvert,
200
+ defaultSorter,
189
201
  onFilter(val) {
190
202
  // const rs =
191
203
 
@@ -241,7 +253,11 @@ const InternalTable = props => {
241
253
  originColumns: columns,
242
254
  groupColumns: groupColumns,
243
255
  setVisibleKeys: setVisibleKeys,
244
- footerDataSource: footerData
256
+ footerDataSource: footerData,
257
+ onFilter: onFilter,
258
+ onSorter: onSorter,
259
+ defaultFilter: defaultFilter,
260
+ defaultSorter: defaultSorter
245
261
  })), /*#__PURE__*/_react.default.createElement(_antd.Modal, {
246
262
  open: isFullScreen,
247
263
  footer: null,
@@ -287,7 +303,11 @@ const InternalTable = props => {
287
303
  originColumns: columns,
288
304
  groupColumns: groupColumns,
289
305
  setVisibleKeys: setVisibleKeys,
290
- footerDataSource: footerData
306
+ footerDataSource: footerData,
307
+ onFilter: onFilter,
308
+ onSorter: onSorter,
309
+ defaultFilter: defaultFilter,
310
+ defaultSorter: defaultSorter
291
311
  })))))));
292
312
  };
293
313
  var _default = exports.default = InternalTable;
@@ -56,4 +56,4 @@ const outerBorderStyleMixin = (0, _styledComponents.css)(["border-top:var(--cell
56
56
  const StyledArtTableWrapper = exports.StyledArtTableWrapper = _styledComponents.default.div.withConfig({
57
57
  displayName: "StyledArtTableWrapper",
58
58
  componentId: "es-grid-template__sc-ipj1ht-0"
59
- })(["--row-height:38px;--color:#333;--bgcolor:white;--hover-bgcolor:var(--hover-color,#f5f5f5);--highlight-bgcolor:#eee;--header-row-height:36px;--header-color:#000000de;--header-bgcolor:#ffffff;--header-hover-bgcolor:#ddd;--header-highlight-bgcolor:#e4e8ed;--cell-padding:7px 8px;--font-size:13px;--line-height:1.28571;--lock-shadow:rgba(152,152,152,0.5) 0 0 6px 2px;--border-color:#dfe3e8;--cell-border:1px solid var(--border-color);--cell-border-horizontal:var(--cell-border);--cell-border-vertical:var(--cell-border);--header-cell-border:1px solid var(--border-color);--header-cell-border-horizontal:var(--header-cell-border);--header-cell-border-vertical:var(--header-cell-border);--footer-bgColor:#fafafa;box-sizing:border-box;*{box-sizing:border-box;}cursor:default;color:var(--color);font-size:var(--font-size);line-height:var(--line-height);position:relative;overflow-anchor:none;&.use-outer-border{", ";}.no-scrollbar{scrollbar-width:none;::-webkit-scrollbar{display:none;}}.", "{overflow-x:auto;overflow-y:hidden;background:var(--header-bgcolor);.ui-rc-table-column-title{flex:1;min-width:0;text-align:start;}.", "{font-weight:500;.ui-rc-header-trigger{padding-left:6px;display:flex;align-items:center;.ui-rc-table-column-sorter-cancel{opacity:0;}}&:hover{.ui-rc-header-trigger{.ui-rc-table-column-sorter-cancel{opacity:1;}}}.", "{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all;}.", "{width:100%;white-space:normal;word-break:break-word;}.", "{text-align:center;}.", "{text-align:right;}}}.", "{.", "{&.", "{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all;}&.", "{width:100%;white-space:normal;word-break:break-word;}&.", "{text-align:center;}&.", "{text-align:right;}}}.", ",.", "{overflow-x:auto;overflow-y:hidden;background:var(--bgcolor);}&.sticky-header .", "{position:sticky;top:0;z-index:", ";}&.sticky-footer .", "{position:sticky;bottom:0;z-index:", ";}.", "{tr{td{&.lock-left,&.lock-right{border-bottom-width:0;box-shadow:0 -1px 0 0 var(--border-color),0 1px 0 0 var(--border-color),-1px 0 0 0 var(--border-color);}}}}table{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;display:table;margin:0;padding:0;}tr:not(.no-hover):hover > td{background:var(--hover-bgcolor);}tr:not(.no-highlight).highlight > td{background:var(--highlight-bgcolor);}th{font-weight:normal;text-align:left;padding:var(--cell-padding);height:var(--header-row-height);color:var(--header-color);background:var(--header-bgcolor);border:none;border-right:var(--header-cell-border-vertical);border-bottom:var(--header-cell-border-horizontal);}tr.first th{border-top:var(--header-cell-border-horizontal);}th.first{border-left:var(--header-cell-border-vertical);}td{padding:var(--cell-padding);background:var(--bgcolor);height:var(--row-height);border:none;border-right:var(--cell-border-vertical);border-bottom:var(--cell-border-horizontal);}td.first{border-left:var(--cell-border-vertical);}tr.first td{border-top:var(--cell-border-horizontal);}&.has-header tbody tr.first td{border-top:none;}&.has-footer tbody tr.last td{border-bottom:none;}.lock-left,.lock-right{z-index:", ";}.resize-handle{width:6px;height:100%;position:absolute;top:0;right:0;cursor:col-resize;background-color:transparent;border-right:2px solid transparent}.", "{position:absolute;top:0;bottom:0;z-index:", ";pointer-events:none;overflow:hidden;.", "{height:100%;}.", "{margin-right:", "px;box-shadow:none;&.show-shadow{box-shadow:var(--lock-shadow);border-right:var(--cell-border-vertical);}}.", "{margin-left:", "px;box-shadow:none;&.show-shadow{box-shadow:var(--lock-shadow);border-left:var(--cell-border-vertical);}}}.", "{pointer-events:none;color:#99a3b3;font-size:12px;text-align:center;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);.empty-image{width:50px;height:50px;}.empty-tips{margin-top:16px;line-height:1.5;}}.", "{overflow:auto;position:sticky;bottom:0;z-index:", ";margin-top:-17px;}.ui-rc-grid-loading-wrapper{}.ui-rc-grid-table{}.art-loading-content-wrapper{}.", "{height:1px;visibility:hidden;}.", "{position:relative;.", "{position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;}.", "{position:sticky;z-index:", ";transform:translateY(-50%);}}"], outerBorderStyleMixin, Classes.tableHeader, Classes.tableHeaderCell, Classes.cellEllipsis, Classes.cellWrap, Classes.cellTextCenter, Classes.cellTextRight, Classes.tableBody, Classes.tableCell, Classes.cellEllipsis, Classes.cellWrap, Classes.cellTextCenter, Classes.cellTextRight, Classes.tableBody, Classes.tableFooter, Classes.tableHeader, Z.header, Classes.tableFooter, Z.footer, Classes.tableBody, Z.lock, Classes.lockShadowMask, Z.lockShadow, Classes.lockShadow, Classes.leftLockShadow, LOCK_SHADOW_PADDING, Classes.rightLockShadow, LOCK_SHADOW_PADDING, Classes.emptyWrapper, Classes.stickyScroll, Z.scrollItem, Classes.stickyScrollItem, Classes.loadingWrapper, Classes.loadingIndicatorWrapper, Classes.loadingIndicator, Z.loadingIndicator);
59
+ })(["--row-height:38px;--color:#333;--bgcolor:white;--hover-bgcolor:var(--hover-color,#f5f5f5);--highlight-bgcolor:#eee;--header-row-height:36px;--header-color:#000000de;--header-bgcolor:#ffffff;--header-hover-bgcolor:#ddd;--header-highlight-bgcolor:#e4e8ed;--cell-padding:7px 8px;--font-size:13px;--line-height:1.28571;--lock-shadow:rgba(152,152,152,0.5) 0 0 6px 2px;--border-color:#dfe3e8;--cell-border:1px solid var(--border-color);--cell-border-horizontal:var(--cell-border);--cell-border-vertical:var(--cell-border);--header-cell-border:1px solid var(--border-color);--header-cell-border-horizontal:var(--header-cell-border);--header-cell-border-vertical:var(--header-cell-border);--footer-bgColor:#fafafa;box-sizing:border-box;*{box-sizing:border-box;}cursor:default;color:var(--color);font-size:var(--font-size);line-height:var(--line-height);position:relative;overflow-anchor:none;&.use-outer-border{", ";}.no-scrollbar{scrollbar-width:none;::-webkit-scrollbar{display:none;}}.", "{overflow-x:auto;overflow-y:hidden;background:var(--header-bgcolor);.ui-rc-table-column-title{flex:1;min-width:0;text-align:start;}.", "{font-weight:500;.ui-rc-header-trigger{padding-left:6px;display:flex;align-items:center;.ui-rc-table-column-sorter-cancel{opacity:0;}}&:hover{.ui-rc-header-trigger{.ui-rc-table-column-sorter-cancel{opacity:1;}}}.", "{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all;}.", "{width:100%;white-space:normal;word-break:break-word;}.", "{text-align:center;}.", "{text-align:right;}}}.", "{.", "{&.", "{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all;.expansion-cell{.expansion-content{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all;}}}&.", "{width:100%;white-space:normal;word-break:break-word;}&.", "{text-align:center;}&.", "{text-align:right;}}}.", ",.", "{overflow-x:auto;overflow-y:hidden;background:var(--bgcolor);}&.sticky-header .", "{position:sticky;top:0;z-index:", ";}&.sticky-footer .", "{position:sticky;bottom:0;z-index:", ";}.", "{tr{td{&.lock-left,&.lock-right{border-bottom-width:0;box-shadow:0 -1px 0 0 var(--border-color),0 1px 0 0 var(--border-color),-1px 0 0 0 var(--border-color);}}}}table{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;display:table;margin:0;padding:0;}tr:not(.no-hover):hover > td{background:var(--hover-bgcolor);}tr:not(.no-highlight).highlight > td{background:var(--highlight-bgcolor);}th{font-weight:normal;text-align:left;padding:var(--cell-padding);height:var(--header-row-height);color:var(--header-color);background:var(--header-bgcolor);border:none;border-right:var(--header-cell-border-vertical);border-bottom:var(--header-cell-border-horizontal);}tr.first th{border-top:var(--header-cell-border-horizontal);}th.first{border-left:var(--header-cell-border-vertical);}td{padding:var(--cell-padding);background:var(--bgcolor);height:var(--row-height);border:none;border-right:var(--cell-border-vertical);border-bottom:var(--cell-border-horizontal);}td.first{border-left:var(--cell-border-vertical);}tr.first td{border-top:var(--cell-border-horizontal);}&.has-header tbody tr.first td{border-top:none;}&.has-footer tbody tr.last td{border-bottom:none;}.lock-left,.lock-right{z-index:", ";}.resize-handle{width:6px;height:100%;position:absolute;top:0;right:0;cursor:col-resize;background-color:transparent;border-right:2px solid transparent}.", "{position:absolute;top:0;bottom:0;z-index:", ";pointer-events:none;overflow:hidden;.", "{height:100%;}.", "{margin-right:", "px;box-shadow:none;&.show-shadow{box-shadow:var(--lock-shadow);border-right:var(--cell-border-vertical);}}.", "{margin-left:", "px;box-shadow:none;&.show-shadow{box-shadow:var(--lock-shadow);border-left:var(--cell-border-vertical);}}}.", "{pointer-events:none;color:#99a3b3;font-size:12px;text-align:center;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);.empty-image{width:50px;height:50px;}.empty-tips{margin-top:16px;line-height:1.5;}}.", "{overflow:auto;position:sticky;bottom:0;z-index:", ";margin-top:-17px;}.ui-rc-grid-loading-wrapper{}.ui-rc-grid-table{}.art-loading-content-wrapper{}.", "{height:1px;visibility:hidden;}.", "{position:relative;.", "{position:absolute;left:0;right:0;top:0;bottom:0;pointer-events:none;}.", "{position:sticky;z-index:", ";transform:translateY(-50%);}}"], outerBorderStyleMixin, Classes.tableHeader, Classes.tableHeaderCell, Classes.cellEllipsis, Classes.cellWrap, Classes.cellTextCenter, Classes.cellTextRight, Classes.tableBody, Classes.tableCell, Classes.cellEllipsis, Classes.cellWrap, Classes.cellTextCenter, Classes.cellTextRight, Classes.tableBody, Classes.tableFooter, Classes.tableHeader, Z.header, Classes.tableFooter, Z.footer, Classes.tableBody, Z.lock, Classes.lockShadowMask, Z.lockShadow, Classes.lockShadow, Classes.leftLockShadow, LOCK_SHADOW_PADDING, Classes.rightLockShadow, LOCK_SHADOW_PADDING, Classes.emptyWrapper, Classes.stickyScroll, Z.scrollItem, Classes.stickyScrollItem, Classes.loadingWrapper, Classes.loadingIndicatorWrapper, Classes.loadingIndicator, Z.loadingIndicator);
@@ -11,7 +11,7 @@ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
11
  const InlineFlexCell = exports.InlineFlexCell = _styledComponents.default.div.withConfig({
12
12
  displayName: "InlineFlexCell",
13
13
  componentId: "es-grid-template__sc-1o0on5d-0"
14
- })(["display:inline-flex;align-items:center;"]);
14
+ })(["display:flex;align-items:center;"]);
15
15
  const ExpansionCell = exports.ExpansionCell = (0, _styledComponents.default)(InlineFlexCell).withConfig({
16
16
  displayName: "ExpansionCell",
17
17
  componentId: "es-grid-template__sc-1o0on5d-1"
@@ -42,11 +42,12 @@ const ColumnsChoose = props => {
42
42
  const defaultSelectedKeys = _react.default.useMemo(() => {
43
43
  const colsVisiables = originColumns.filter(it => it.showInColumnChoose !== false && it.visible !== false);
44
44
  const colsKeys = colsVisiables.map(it => it.field);
45
-
46
- // const aa = Object.keys(columnHidden)
47
-
48
45
  return colsKeys.filter(it => !columnsGroup?.includes(it));
49
46
  }, [columnsGroup, originColumns]);
47
+
48
+ // console.log('defaultSelectedKeys', defaultSelectedKeys)
49
+ // console.log('originColumns', originColumns)
50
+
50
51
  const [mergedSelectedKeys, setMergedSelectedKeys] = (0, _useMergedState.default)(defaultSelectedKeys && defaultSelectedKeys.length ? defaultSelectedKeys : undefined, {
51
52
  value: undefined
52
53
  });
@@ -1,7 +1,14 @@
1
1
  import type { TablePipeline } from '../pipeline';
2
2
  import type { ColumnResizeMode } from '../../base-table/table';
3
- import type { SortOrder } from '../../interfaces';
3
+ import type { ArtColumn, SortOrder } from '../../interfaces';
4
4
  import type { FilterItem, IFormat, IWrapSettings, Sorter, SourceFilter } from '../../../grid-component/type';
5
+ type FilterState = {
6
+ field: any;
7
+ key: any;
8
+ column: ArtColumn;
9
+ filteredKeys: any[];
10
+ operator: string | undefined;
11
+ };
5
12
  export interface ColumnFeatureOptions {
6
13
  id: any;
7
14
  columns: any[];
@@ -39,7 +46,8 @@ export interface ColumnFeatureOptions {
39
46
  dataSourceFilter?: SourceFilter[];
40
47
  ignoreAccents?: boolean;
41
48
  onFilter?: (filterState: FilterItem[]) => void;
42
- defaultSorts?: Sorter[];
49
+ defaultFilter?: FilterState[];
50
+ defaultSorter?: Sorter[];
43
51
  mode?: 'single' | 'multiple';
44
52
  keepDataSource?: boolean;
45
53
  orders?: SortOrder[];
@@ -49,3 +57,4 @@ export interface ColumnFeatureOptions {
49
57
  pageSize?: number;
50
58
  }
51
59
  export declare function columnCustom(opts: ColumnFeatureOptions): (pipeline: TablePipeline) => TablePipeline;
60
+ export {};
@@ -48,7 +48,10 @@ function columnCustom(opts) {
48
48
  wrapSettings,
49
49
  // ignoreAccents,
50
50
  dataSource,
51
- isDataTree
51
+ isDataTree,
52
+ defaultSorter,
53
+ defaultFilter
54
+
52
55
  // currentPage = 1,
53
56
  // pageSize
54
57
  } = opts;
@@ -59,7 +62,7 @@ function columnCustom(opts) {
59
62
  } = opts;
60
63
  return function columnResizeFeature(pipeline) {
61
64
  const sizes = opts.sizes ?? pipeline.getStateAtKey(stateKeyResize) ?? opts.defaultSizes ?? [];
62
- const filterState = pipeline.getStateAtKey(stateKeyFilter) ?? [];
65
+ const filterState = pipeline.getStateAtKey(stateKeyFilter) ?? defaultFilter ?? [];
63
66
  const visible = pipeline.getStateAtKey(stateKeyVisible) ?? '';
64
67
  const isOpenTooltip = pipeline.getStateAtKey(stateKeyTooltip) ?? false;
65
68
  const pageSize = opts?.pageSize ?? pipeline.getStateAtKey(stateKey)?.pageSize ?? _hooks.pageSizeOptions[0];
@@ -74,7 +77,7 @@ function columnCustom(opts) {
74
77
  // const fieldOriginal = fieldOriginalKey ? columns.find((it) => it.field === fieldOriginalKey) : undefined
75
78
 
76
79
  // const sorterStates = pipeline.getStateAtKey(stateKeySorter) ?? []
77
- const sorterStates = pipeline.getStateAtKey(stateKeySorter) ?? opts.defaultSorts ?? [];
80
+ const sorterStates = pipeline.getStateAtKey(stateKeySorter) ?? defaultSorter ?? [];
78
81
  const activeSorts = sorterStates.filter(s => s.order !== 'none');
79
82
  const sorts = mode === 'multiple' ? activeSorts : activeSorts.slice(0, 1);
80
83
  const leafColumns = (0, _utils.collectNodes)(pipeline.getColumns(), 'leaf-only');
@@ -126,9 +129,10 @@ function columnCustom(opts) {
126
129
  const onVisibleChange = (newVisible, info, column) => {
127
130
  if (info.source === 'trigger') {
128
131
  if (newVisible) {
129
- const filterValue = filterColumnState.filteredKeys ?? [];
132
+ const defaultFilterOption = defaultFilter?.find(it => it.field === column.field);
133
+ const filterValue = filterColumnState.filteredKeys === null ? [] : filterColumnState.filteredKeys ?? defaultFilterOption?.filteredKeys ?? [];
130
134
  const operator = filterColumnState.operator;
131
- const operatorValue = operator ?? (0, _utils2.getDefaultOperator)(column);
135
+ const operatorValue = operator ?? defaultFilterOption?.operator ?? (0, _utils2.getDefaultOperator)(column);
132
136
  pipeline.setStateAtKey(stateKeyColumnFilter, {
133
137
  operator: operatorValue,
134
138
  filteredKeys: filterValue,
@@ -200,8 +204,20 @@ function columnCustom(opts) {
200
204
  // xóa column đang filter trong filterState
201
205
 
202
206
  const newFilterState = filterState.filter(it => it.field !== filterColumnState.field);
203
- pipeline.setStateAtKey(stateKeyColumnFilter, {});
204
- pipeline.setStateAtKey(stateKeyFilter, [...newFilterState]);
207
+ const currentFilter = {
208
+ field: filterColumnState.field,
209
+ key: filterColumnState.field,
210
+ column: filterColumnState.column,
211
+ filteredKeys: null,
212
+ operator: filterColumnState.operator ?? undefined
213
+ };
214
+ const rs = (0, _hooks.updateArrayByKey)(filterState, currentFilter, 'field');
215
+ pipeline.setStateAtKey(stateKeyColumnFilter, {
216
+ ...currentFilter
217
+ });
218
+
219
+ // pipeline.setStateAtKey(stateKeyFilter, [...newFilterState])
220
+ pipeline.setStateAtKey(stateKeyFilter, rs);
205
221
  if (onFilter) {
206
222
  onFilter((0, _utils2.convertFilters)([...newFilterState]));
207
223
  } else {
@@ -249,7 +265,10 @@ function columnCustom(opts) {
249
265
  const {
250
266
  order
251
267
  } = isSorted && sortMap.get(col.field);
252
- const filtered = !!filterState.find(it => it.field === col.field);
268
+ const find = filterState.find(it => it.field === col.field);
269
+
270
+ // const filtered = !!filterState.find((it) => it.field === col.field)
271
+ const filtered = !!find && find.filteredKeys !== null;
253
272
  const getDropdownTrigger = () => {
254
273
  let iconFilter;
255
274
  if (typeof filterIcon === 'function') {
@@ -16,5 +16,6 @@ export interface TreeModeFeatureOptions {
16
16
  clickArea?: 'cell' | 'content' | 'icon';
17
17
  stopClickEventPropagation?: boolean;
18
18
  treeMetaKey?: string | symbol;
19
+ isTreeArray?: boolean;
19
20
  }
20
21
  export declare function treeMode(opts?: TreeModeFeatureOptions): (pipeline: TablePipeline) => TablePipeline;
@@ -18,6 +18,7 @@ function treeMode(opts = {}) {
18
18
  const stateKey = 'treeMode';
19
19
  const ctx = pipeline.ctx;
20
20
  const expandIconColumnIndex = opts.expandIconColumnIndex ?? 0;
21
+ const isTreeArray = opts.isTreeArray;
21
22
  const primaryKey = pipeline.ensurePrimaryKey('treeMode');
22
23
  if (typeof primaryKey !== 'string') {
23
24
  throw new Error('treeMode Only strings are supported primaryKey');
@@ -102,6 +103,9 @@ function treeMode(opts = {}) {
102
103
  if (record[treeMetaKey] == null) {
103
104
  return content;
104
105
  }
106
+ if (!isTreeArray) {
107
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, content);
108
+ }
105
109
  const {
106
110
  rowKey,
107
111
  depth,
@@ -113,6 +117,7 @@ function treeMode(opts = {}) {
113
117
  return /*#__PURE__*/_react.default.createElement(_commonViews.InlineFlexCell, {
114
118
  className: "expansion-cell leaf"
115
119
  }, /*#__PURE__*/_react.default.createElement("span", {
120
+ className: "expansion-content",
116
121
  style: {
117
122
  marginLeft: indent + iconWidth + iconGap
118
123
  }
@@ -139,7 +144,9 @@ function treeMode(opts = {}) {
139
144
  marginRight: iconGap
140
145
  },
141
146
  onClick: clickArea === 'icon' ? onClick : undefined
142
- }), content);
147
+ }), /*#__PURE__*/_react.default.createElement("span", {
148
+ className: "expansion-content"
149
+ }, content));
143
150
  };
144
151
  const getCellProps = (value, record, rowIndex) => {
145
152
  const prevProps = _internals.internals.safeGetCellProps(firstCol, record, rowIndex);
@@ -1,5 +1,5 @@
1
1
  import { TreeDataNode } from "antd";
2
- import type { ColumnTable } from "../../table-component";
2
+ import { ColumnTable } from "../../grid-component";
3
3
  export declare function convertColumnsToTreeData(columns: ColumnTable[], groupColumns?: string[], t?: any): TreeDataNode[];
4
4
  export declare function filterColumnsByField(columns: ColumnTable[], fieldList: string[]): ColumnTable[];
5
5
  export declare function filterVisibleColumns(columns: ColumnTable[]): ColumnTable[];
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.convertColumnsToTreeData = convertColumnsToTreeData;
7
7
  exports.filterColumnsByField = filterColumnsByField;
8
8
  exports.filterVisibleColumns = filterVisibleColumns;
9
+ // import type { ColumnTable } from "../../table-component"
10
+
9
11
  function convertColumnsToTreeData(columns, groupColumns, t) {
10
12
  if (!columns) {
11
13
  return [];
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
- import type { TableProps } from "../table-component";
2
+ import type { TableProps } from "../grid-component";
3
3
  declare const TempTable: <RecordType extends object>(props: TableProps<RecordType>) => React.JSX.Element;
4
4
  export default TempTable;
@@ -219,6 +219,8 @@ export type ColumnTable<RecordType = AnyObject> = {
219
219
  /** Custom render method */
220
220
  /** Custom method to get cell props */
221
221
  getCellProps?: (value: any, row: any, rowIndex: number) => CellProps;
222
+ /** Props for the header cell */
223
+ headerCellProps?: CellProps;
222
224
  /** Custom method to get cell SpanRect */
223
225
  getSpanRect?: (value: any, row: any, rowIndex: number) => SpanRect;
224
226
  };
@@ -230,6 +232,7 @@ export type TableProps<RecordType = AnyObject> = {
230
232
  backgroundColor?: string;
231
233
  color?: string;
232
234
  };
235
+ useOuterBorder?: boolean;
233
236
  className?: string;
234
237
  title?: ReactNode | ((data: RecordType) => ReactNode);
235
238
  fullScreenTitle?: ReactNode | (() => ReactNode);
@@ -214,6 +214,7 @@ export declare const fixColumnsLeft: <RecordType>(columns: ColumnTable<RecordTyp
214
214
  sumGroup?: boolean;
215
215
  getValue?: (row: any, rowIndex: number) => any;
216
216
  getCellProps?: (value: any, row: any, rowIndex: number) => import("./../../grid-component/type").CellProps;
217
+ headerCellProps?: import("./../../grid-component/type").CellProps;
217
218
  getSpanRect?: (value: any, row: any, rowIndex: number) => import("./../../grid-component/type").SpanRect;
218
219
  }[];
219
220
  export declare function sortColumnsByField<T extends ColumnTable>(columns: T[], priorityFields: string[]): T[];
@@ -2111,7 +2111,7 @@ function isTreeArray(arr) {
2111
2111
  if (!item) {
2112
2112
  return false;
2113
2113
  }
2114
- if (item.children?.length > 0) {
2114
+ if (Array.isArray(item.children)) {
2115
2115
  return true;
2116
2116
  }
2117
2117
  }
@@ -132,6 +132,10 @@ const Grid = props => {
132
132
  }
133
133
  return true;
134
134
  },
135
+ getRowCanExpand: row => {
136
+ // return Array.isArray(row.original.children) && row.original.children.length > 0
137
+ return Array.isArray(row.original.children);
138
+ },
135
139
  initialState: {
136
140
  rowSelection: {}
137
141
  },
@@ -1,4 +1,2 @@
1
1
  import InternalTable from './InternalTable';
2
- import type { ColumnsTable, TableProps, ColumnTable, ContextMenuItem } from './../grid-component/type';
3
- export type { ColumnsTable, TableProps, ColumnTable, ContextMenuItem };
4
2
  export default InternalTable;
@@ -6,4 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _InternalTable = _interopRequireDefault(require("./InternalTable"));
9
+ // import type { ColumnsTable, TableProps, ColumnTable, ContextMenuItem} from './../grid-component/type'
10
+ // export type {ColumnsTable, TableProps, ColumnTable, ContextMenuItem}
9
11
  var _default = exports.default = _InternalTable.default;
@@ -162,7 +162,8 @@ const Grid = props => {
162
162
  getGroupedRowModel: (0, _reactTable.getGroupedRowModel)(),
163
163
  // onExpandedChange: setExpanded,
164
164
  getRowCanExpand: row => {
165
- return Array.isArray(row.original.children) && row.original.children.length > 0;
165
+ // return Array.isArray(row.original.children) && row.original.children.length > 0
166
+ return Array.isArray(row.original.children);
166
167
  },
167
168
  getExpandedRowModel: (0, _reactTable.getExpandedRowModel)(),
168
169
  getPaginationRowModel: pagination && !infiniteScroll ? (0, _reactTable.getPaginationRowModel)() : undefined,
@@ -247,6 +247,10 @@ const InternalTable = props => {
247
247
  enableColumnResizing: allowResizing !== false,
248
248
  columnResizeMode,
249
249
  columnResizeDirection,
250
+ getRowCanExpand: row => {
251
+ // return Array.isArray(row.original.children) && row.original.children.length > 0
252
+ return Array.isArray(row.original.children);
253
+ },
250
254
  onColumnSizingChange: setColumnSizing,
251
255
  onColumnSizingInfoChange: setColumnSizingInfo,
252
256
  // ColumnSizing
@@ -52,7 +52,7 @@ const TableBodyRow = ({
52
52
  className: (0, _classnames.default)(`${prefix}-grid-row ${rowClass ?? ''}`, {
53
53
  [`${prefix}-grid-row-selected`]: row.getIsSelected(),
54
54
  [`${prefix}-grid-row-focus`]: row.id === focusedCell?.rowId,
55
- [`${prefix}-grid-row-parent`]: row.subRows && row.subRows.length > 0
55
+ [`${prefix}-grid-row-parent`]: row.getCanExpand()
56
56
  }),
57
57
  style: {
58
58
  ...rowStyles,
@@ -92,7 +92,9 @@ const TableBodyRow = ({
92
92
 
93
93
  // const colSpan = row.subRows && cell.column.id === firstNonGroupColumn?.id ? (groupSetting?.groupColumnSpan ?? 2)
94
94
  const colSpanGroup = row.subRows && row.subRows.length > 0 && cell.column.id === firstNonGroupColumn?.column.id ? 2 : row.subRows && nonGroupColumns[1].column.id === cell.column.id ? 0 : 1;
95
- if (row.subRows && row.subRows.length > 0 && colSpanGroup === 0 || onCellRowSpan === 0 || onCellColSpan === 0) {
95
+
96
+ // if (row.subRows && row.subRows.length > 0 && colSpanGroup === 0 || onCellRowSpan === 0 || onCellColSpan === 0) {
97
+ if (row.subRows && row.getCanExpand() && colSpanGroup === 0 || onCellRowSpan === 0 || onCellColSpan === 0) {
96
98
  return null;
97
99
  }
98
100
 
@@ -135,7 +137,9 @@ const TableBodyRow = ({
135
137
  groupValue: groupValue
136
138
  }));
137
139
  }
138
- if (row.subRows.length > 0 && originCol.sumGroup === true && originCol.type === 'number') {
140
+
141
+ // if (row.subRows.length > 0 && originCol.sumGroup === true && originCol.type === 'number') {
142
+ if (row.getCanExpand() && originCol.sumGroup === true && originCol.type === 'number') {
139
143
  const colFormat = typeof originCol.format === 'function' ? originCol.format({}) : originCol.format;
140
144
  const cellFormat = (0, _utils.getFormat)(colFormat, format);
141
145
  const thousandSeparator = cellFormat?.thousandSeparator;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "es-grid-template",
3
- "version": "1.8.99",
3
+ "version": "1.9.10",
4
4
  "description": "es-grid-template",
5
5
  "keywords": [
6
6
  "react",