es-grid-template 1.9.0 → 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 (38) 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 +4 -3
  18. package/es/table-component/index.d.ts +0 -2
  19. package/es/table-component/index.js +4 -0
  20. package/lib/ali-table/Grid.d.ts +1 -1
  21. package/lib/ali-table/Grid.js +8 -4
  22. package/lib/ali-table/InternalTable.d.ts +1 -1
  23. package/lib/ali-table/InternalTable.js +27 -7
  24. package/lib/ali-table/base-table/styles.js +1 -1
  25. package/lib/ali-table/common-views.js +1 -1
  26. package/lib/ali-table/pipeline/features/ColumnsChoose.js +4 -3
  27. package/lib/ali-table/pipeline/features/columnCustom.d.ts +11 -2
  28. package/lib/ali-table/pipeline/features/columnCustom.js +27 -8
  29. package/lib/ali-table/pipeline/features/treeMode.d.ts +1 -0
  30. package/lib/ali-table/pipeline/features/treeMode.js +8 -1
  31. package/lib/ali-table/utils/convertColumnsChoose.d.ts +1 -1
  32. package/lib/ali-table/utils/convertColumnsChoose.js +2 -0
  33. package/lib/grid-component/TempTable.d.ts +1 -1
  34. package/lib/grid-component/type.d.ts +3 -0
  35. package/lib/group-component/hook/utils.d.ts +1 -0
  36. package/lib/table-component/index.d.ts +0 -2
  37. package/lib/table-component/index.js +2 -0
  38. 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);
@@ -208,12 +208,13 @@ export declare const fixColumnsLeft: <RecordType>(columns: ColumnTable<RecordTyp
208
208
  ellipsis?: boolean;
209
209
  allowResizing?: boolean;
210
210
  allowSelection?: boolean | ((rowData: RecordType) => boolean);
211
- onCellStyles?: Omit<CSSProperties, "position" | "left" | "right" | "display" | "width" | "minWidth"> | ((cellValue: any, cell: import("@tanstack/react-table").Cell<RecordType, unknown>) => Omit<CSSProperties, "position" | "left" | "right" | "display" | "width" | "minWidth">);
212
- onCellHeaderStyles?: Omit<CSSProperties, "position" | "left" | "right" | "display" | "width" | "minWidth"> | ((cell: import("@tanstack/react-table").Header<RecordType, unknown>) => Omit<CSSProperties, "position" | "left" | "right" | "display" | "width" | "minWidth">);
213
- onCellFooterStyles?: Omit<CSSProperties, "position" | "left" | "right" | "display" | "width" | "minWidth"> | ((cellValue: any, cell: import("@tanstack/react-table").Header<RecordType, unknown>) => Omit<CSSProperties, "position" | "left" | "right" | "display" | "width" | "minWidth">);
211
+ onCellStyles?: Omit<CSSProperties, "left" | "right" | "display" | "minWidth" | "position" | "width"> | ((cellValue: any, cell: import("@tanstack/react-table").Cell<RecordType, unknown>) => Omit<CSSProperties, "left" | "right" | "display" | "minWidth" | "position" | "width">);
212
+ onCellHeaderStyles?: Omit<CSSProperties, "left" | "right" | "display" | "minWidth" | "position" | "width"> | ((cell: import("@tanstack/react-table").Header<RecordType, unknown>) => Omit<CSSProperties, "left" | "right" | "display" | "minWidth" | "position" | "width">);
213
+ onCellFooterStyles?: Omit<CSSProperties, "left" | "right" | "display" | "minWidth" | "position" | "width"> | ((cellValue: any, cell: import("@tanstack/react-table").Header<RecordType, unknown>) => Omit<CSSProperties, "left" | "right" | "display" | "minWidth" | "position" | "width">);
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[];
@@ -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;
@@ -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[];
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "es-grid-template",
3
- "version": "1.9.0",
3
+ "version": "1.9.10",
4
4
  "description": "es-grid-template",
5
5
  "keywords": [
6
6
  "react",