es-grid-template 1.2.0 → 1.2.2
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.
- package/assets/index.css +695 -0
- package/assets/index.scss +1063 -0
- package/es/grid-component/ColumnsChoose.d.ts +1 -0
- package/es/grid-component/ColumnsChoose.js +63 -28
- package/es/grid-component/ColumnsGroup/ColumnsGroup.d.ts +12 -0
- package/es/grid-component/ColumnsGroup/ColumnsGroup.js +223 -0
- package/es/grid-component/ColumnsGroup/index.d.ts +1 -0
- package/es/grid-component/ColumnsGroup/index.js +1 -0
- package/es/grid-component/ConvertColumnTable.d.ts +7 -0
- package/es/grid-component/ConvertColumnTable.js +143 -0
- package/es/grid-component/EditableCell.js +1 -1
- package/es/grid-component/GridStyle.js +1 -1
- package/es/grid-component/InternalTable.d.ts +1 -0
- package/es/grid-component/InternalTable.js +150 -249
- package/es/grid-component/TableGrid.d.ts +4 -1
- package/es/grid-component/TableGrid.js +31 -70
- package/es/grid-component/hooks/{useColumns → columns}/index.d.ts +2 -2
- package/es/grid-component/hooks/{useColumns → columns}/index.js +20 -16
- package/es/grid-component/hooks/content/HeaderContent.d.ts +11 -0
- package/es/grid-component/hooks/content/HeaderContent.js +79 -0
- package/es/grid-component/hooks/content/TooltipContent.d.ts +13 -0
- package/es/grid-component/hooks/content/TooltipContent.js +74 -0
- package/es/grid-component/hooks/useColumns.d.ts +16 -0
- package/es/grid-component/hooks/useColumns.js +280 -0
- package/es/grid-component/hooks/utils.d.ts +26 -1
- package/es/grid-component/hooks/utils.js +331 -1
- package/es/grid-component/index.js +3 -1
- package/es/grid-component/styles.scss +365 -68
- package/es/grid-component/table/Grid.d.ts +2 -0
- package/es/grid-component/table/Grid.js +18 -6
- package/es/grid-component/table/GridEdit.d.ts +4 -1
- package/es/grid-component/table/GridEdit.js +941 -307
- package/es/grid-component/table/Group.d.ts +13 -0
- package/es/grid-component/table/Group.js +154 -0
- package/es/grid-component/type.d.ts +39 -2
- package/lib/grid-component/ColumnsChoose.d.ts +1 -0
- package/lib/grid-component/ColumnsChoose.js +62 -27
- package/lib/grid-component/ColumnsGroup/ColumnsGroup.d.ts +12 -0
- package/lib/grid-component/ColumnsGroup/ColumnsGroup.js +234 -0
- package/lib/grid-component/ColumnsGroup/index.d.ts +1 -0
- package/lib/grid-component/ColumnsGroup/index.js +16 -0
- package/lib/grid-component/ConvertColumnTable.d.ts +7 -0
- package/lib/grid-component/ConvertColumnTable.js +152 -0
- package/lib/grid-component/EditableCell.js +1 -1
- package/lib/grid-component/GridStyle.js +1 -1
- package/lib/grid-component/InternalTable.d.ts +1 -0
- package/lib/grid-component/InternalTable.js +144 -249
- package/lib/grid-component/TableGrid.d.ts +4 -1
- package/lib/grid-component/TableGrid.js +26 -68
- package/lib/grid-component/hooks/{useColumns → columns}/index.d.ts +2 -2
- package/lib/grid-component/hooks/{useColumns → columns}/index.js +20 -16
- package/lib/grid-component/hooks/content/HeaderContent.d.ts +11 -0
- package/lib/grid-component/hooks/content/HeaderContent.js +86 -0
- package/lib/grid-component/hooks/content/TooltipContent.d.ts +13 -0
- package/lib/grid-component/hooks/content/TooltipContent.js +81 -0
- package/lib/grid-component/hooks/useColumns.d.ts +16 -0
- package/lib/grid-component/hooks/useColumns.js +291 -0
- package/lib/grid-component/hooks/utils.d.ts +26 -1
- package/lib/grid-component/hooks/utils.js +347 -5
- package/lib/grid-component/index.js +2 -1
- package/lib/grid-component/styles.scss +365 -68
- package/lib/grid-component/table/Grid.d.ts +2 -0
- package/lib/grid-component/table/Grid.js +18 -6
- package/lib/grid-component/table/GridEdit.d.ts +4 -1
- package/lib/grid-component/table/GridEdit.js +939 -305
- package/lib/grid-component/table/Group.d.ts +13 -0
- package/lib/grid-component/table/Group.js +163 -0
- package/lib/grid-component/type.d.ts +39 -2
- package/package.json +106 -105
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ColumnsTable, GridTableProps } from "../type";
|
|
3
|
+
import type { GetRowKey } from "../type";
|
|
4
|
+
type Props<T> = GridTableProps<T> & {
|
|
5
|
+
tableRef: any;
|
|
6
|
+
triggerChangeColumns?: (columns: ColumnsTable<T>, type: string) => void;
|
|
7
|
+
triggerChangeData?: (newData: T[], type: string) => void;
|
|
8
|
+
getRowKey: GetRowKey<T>;
|
|
9
|
+
triggerGroupColumns?: (groupedColumns: string[]) => void;
|
|
10
|
+
triggerPaste?: (pastedRows: T[], pastedColumnsArray: string[], newData: T[]) => void;
|
|
11
|
+
};
|
|
12
|
+
declare const Group: <RecordType extends object>(props: Props<RecordType>) => React.JSX.Element;
|
|
13
|
+
export default Group;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import React, { Fragment } from 'react';
|
|
3
|
+
import { GridStyle } from "../GridStyle";
|
|
4
|
+
import TableGrid from "../TableGrid";
|
|
5
|
+
// import type {ColumnsTable} from "../type";
|
|
6
|
+
|
|
7
|
+
import { findAllChildrenKeys } from "../hooks";
|
|
8
|
+
import { ColumnsGroup } from "../ColumnsGroup/ColumnsGroup";
|
|
9
|
+
import { flatColumns2 } from "../hooks/columns";
|
|
10
|
+
import { Collapse2, Expand2 } from "becoxy-icons";
|
|
11
|
+
const Group = props => {
|
|
12
|
+
const {
|
|
13
|
+
t,
|
|
14
|
+
columns,
|
|
15
|
+
height,
|
|
16
|
+
style,
|
|
17
|
+
rowHoverable,
|
|
18
|
+
groupAble,
|
|
19
|
+
expandable,
|
|
20
|
+
dataSource,
|
|
21
|
+
getRowKey,
|
|
22
|
+
groupSetting,
|
|
23
|
+
groupColumns,
|
|
24
|
+
triggerGroupColumns,
|
|
25
|
+
...rest
|
|
26
|
+
} = props;
|
|
27
|
+
const {
|
|
28
|
+
defaultExpandedRowKeys,
|
|
29
|
+
defaultExpandAllRows
|
|
30
|
+
} = expandable || {};
|
|
31
|
+
const childrenColumnName = 'children';
|
|
32
|
+
const [innerExpandedKeys, setInnerExpandedKeys] = React.useState(() => {
|
|
33
|
+
if (defaultExpandedRowKeys) {
|
|
34
|
+
return defaultExpandedRowKeys;
|
|
35
|
+
}
|
|
36
|
+
if (defaultExpandAllRows) {
|
|
37
|
+
return findAllChildrenKeys(dataSource, getRowKey, childrenColumnName) ?? [];
|
|
38
|
+
}
|
|
39
|
+
return [];
|
|
40
|
+
});
|
|
41
|
+
const mergedExpandedKeys = React.useMemo(() => new Set(innerExpandedKeys || []), [innerExpandedKeys]);
|
|
42
|
+
const onTriggerExpand = React.useCallback(record => {
|
|
43
|
+
const key = getRowKey(record, dataSource.indexOf(record));
|
|
44
|
+
let newExpandedKeys;
|
|
45
|
+
const hasKey = mergedExpandedKeys.has(key);
|
|
46
|
+
if (hasKey) {
|
|
47
|
+
mergedExpandedKeys.delete(key);
|
|
48
|
+
newExpandedKeys = [...mergedExpandedKeys];
|
|
49
|
+
} else {
|
|
50
|
+
newExpandedKeys = [...mergedExpandedKeys, key];
|
|
51
|
+
}
|
|
52
|
+
setInnerExpandedKeys(newExpandedKeys);
|
|
53
|
+
}, [getRowKey, mergedExpandedKeys, dataSource]);
|
|
54
|
+
const handleExpandAllGroup = () => {
|
|
55
|
+
setInnerExpandedKeys(findAllChildrenKeys(dataSource, getRowKey, childrenColumnName) ?? []);
|
|
56
|
+
};
|
|
57
|
+
const handleCollapseAllGroup = () => {
|
|
58
|
+
setInnerExpandedKeys([]);
|
|
59
|
+
};
|
|
60
|
+
const handleOnGroup = value => {
|
|
61
|
+
triggerGroupColumns?.(value);
|
|
62
|
+
};
|
|
63
|
+
const groupToolbar = () => {
|
|
64
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
65
|
+
style: {
|
|
66
|
+
display: 'flex',
|
|
67
|
+
gap: '10px',
|
|
68
|
+
marginRight: 10
|
|
69
|
+
}
|
|
70
|
+
}, /*#__PURE__*/React.createElement(ColumnsGroup, {
|
|
71
|
+
t: t
|
|
72
|
+
// defaultGroupColumns={['name']}
|
|
73
|
+
,
|
|
74
|
+
unClearableLevel: groupSetting?.unClearableLevel
|
|
75
|
+
// unClearableLevel={2}
|
|
76
|
+
,
|
|
77
|
+
columns: columns ? flatColumns2(columns) : [],
|
|
78
|
+
columnsGrouped: groupColumns,
|
|
79
|
+
onSubmit: handleOnGroup
|
|
80
|
+
}), /*#__PURE__*/React.createElement(Fragment, null, innerExpandedKeys.length > 0 ? /*#__PURE__*/React.createElement(Collapse2, {
|
|
81
|
+
fontSize: 18,
|
|
82
|
+
color: '#555555',
|
|
83
|
+
onClick: handleCollapseAllGroup
|
|
84
|
+
}) : /*#__PURE__*/React.createElement(Expand2, {
|
|
85
|
+
fontSize: 18,
|
|
86
|
+
color: '#555555',
|
|
87
|
+
onClick: handleExpandAllGroup
|
|
88
|
+
})));
|
|
89
|
+
};
|
|
90
|
+
return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(GridStyle, {
|
|
91
|
+
heightTable: height,
|
|
92
|
+
style: {
|
|
93
|
+
position: 'relative'
|
|
94
|
+
}
|
|
95
|
+
}, /*#__PURE__*/React.createElement(TableGrid, _extends({}, rest, {
|
|
96
|
+
t: t,
|
|
97
|
+
columns: columns,
|
|
98
|
+
style: {
|
|
99
|
+
...style,
|
|
100
|
+
minHeight: height
|
|
101
|
+
},
|
|
102
|
+
rowHoverable: rowHoverable ?? true,
|
|
103
|
+
dataSource: dataSource,
|
|
104
|
+
getRowKey: getRowKey,
|
|
105
|
+
groupAble: groupAble,
|
|
106
|
+
groupSetting: groupSetting,
|
|
107
|
+
expandable: {
|
|
108
|
+
expandIconColumnIndex: 3,
|
|
109
|
+
defaultExpandAllRows: true,
|
|
110
|
+
indentSize: 25,
|
|
111
|
+
expandIcon: args => {
|
|
112
|
+
const {
|
|
113
|
+
record,
|
|
114
|
+
expanded,
|
|
115
|
+
onExpand
|
|
116
|
+
} = args;
|
|
117
|
+
|
|
118
|
+
// @ts-ignore
|
|
119
|
+
if (record?.children?.length > 0 || record?.isChildren) {
|
|
120
|
+
return expanded ? /*#__PURE__*/React.createElement("button", {
|
|
121
|
+
onClick: e => {
|
|
122
|
+
e.preventDefault();
|
|
123
|
+
e.stopPropagation();
|
|
124
|
+
onExpand(record, e);
|
|
125
|
+
if (groupAble) {
|
|
126
|
+
onTriggerExpand(record);
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
className: 'ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-expanded'
|
|
130
|
+
}) : /*#__PURE__*/React.createElement("button", {
|
|
131
|
+
onClick: e => {
|
|
132
|
+
e.preventDefault();
|
|
133
|
+
e.stopPropagation();
|
|
134
|
+
onExpand(record, e);
|
|
135
|
+
if (groupAble) {
|
|
136
|
+
onTriggerExpand(record);
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
className: 'ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-collapsed'
|
|
140
|
+
});
|
|
141
|
+
} else {
|
|
142
|
+
return /*#__PURE__*/React.createElement("button", {
|
|
143
|
+
className: 'ui-rc-table-row-expand-icon ui-rc-table-row-expand-icon-spaced'
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
expandedRowKeys: groupAble ? innerExpandedKeys : undefined,
|
|
148
|
+
...expandable
|
|
149
|
+
},
|
|
150
|
+
groupToolbar: groupToolbar,
|
|
151
|
+
groupColumns: groupColumns
|
|
152
|
+
}))));
|
|
153
|
+
};
|
|
154
|
+
export default Group;
|
|
@@ -82,8 +82,9 @@ export type ToolbarClick = {
|
|
|
82
82
|
item: any;
|
|
83
83
|
column: any;
|
|
84
84
|
};
|
|
85
|
-
export type ColumnType<RecordType> = Omit<RcColumnType<RecordType>, 'headerTemplate'> & {
|
|
85
|
+
export type ColumnType<RecordType> = Omit<RcColumnType<RecordType>, 'headerTemplate' | 'title'> & {
|
|
86
86
|
field?: string;
|
|
87
|
+
key?: any;
|
|
87
88
|
type?: IColumnType;
|
|
88
89
|
isSummary?: boolean;
|
|
89
90
|
summaryTemplate?: (data: number, key: string) => ReactElement | ReactNode;
|
|
@@ -96,8 +97,11 @@ export type ColumnType<RecordType> = Omit<RcColumnType<RecordType>, 'headerTempl
|
|
|
96
97
|
placeholder?: string;
|
|
97
98
|
showInColumnChoose?: boolean;
|
|
98
99
|
typeFilter?: TypeFilter;
|
|
100
|
+
source?: any[];
|
|
99
101
|
showFilterSearch?: boolean;
|
|
100
102
|
headerText?: string;
|
|
103
|
+
headerTooltip?: boolean | string | (() => ReactNode | ReactElement);
|
|
104
|
+
columnGroupText?: string;
|
|
101
105
|
textAlign?: ITextAlign;
|
|
102
106
|
frozen?: Frozen;
|
|
103
107
|
template?: ReactNode | ReactElement | ((value: any, record: RecordType, index: number) => ReactNode | ReactElement);
|
|
@@ -107,7 +111,7 @@ export type ColumnType<RecordType> = Omit<RcColumnType<RecordType>, 'headerTempl
|
|
|
107
111
|
commandItems?: CommandItem[];
|
|
108
112
|
children?: ColumnType<RecordType>[];
|
|
109
113
|
};
|
|
110
|
-
export type ColumnEditType<RecordType> = Omit<ColumnType<RecordType>, 'children'> & {
|
|
114
|
+
export type ColumnEditType<RecordType = AnyObject> = Omit<ColumnType<RecordType>, 'children'> & {
|
|
111
115
|
editType?: EditType | ((rowData?: RecordType) => EditType);
|
|
112
116
|
disable?: boolean | ((rowData: any) => boolean);
|
|
113
117
|
isClearable?: boolean;
|
|
@@ -126,6 +130,11 @@ export type ColumnTable<RecordType = AnyObject> = ColumnEditType<RecordType> | C
|
|
|
126
130
|
export type ColumnsTable<RecordType = AnyObject> = (ColumnType<RecordType> | ColumnEditType<RecordType>)[];
|
|
127
131
|
export interface TableProps<RecordType> extends Omit<RcTableProps<RecordType>, 'columns' | 'rowSelection' | 'loading' | 'dataSource' | 'summary'> {
|
|
128
132
|
editAble?: boolean;
|
|
133
|
+
groupAble?: boolean;
|
|
134
|
+
groupColumns?: string[];
|
|
135
|
+
groupSetting?: IGroupSetting;
|
|
136
|
+
onChooseColumns?: (props: IOnChooseColumns) => void;
|
|
137
|
+
showCustomTooltip?: boolean;
|
|
129
138
|
sortMultiple?: boolean;
|
|
130
139
|
dataSource: RecordType[];
|
|
131
140
|
columns: ColumnsTable<RecordType>;
|
|
@@ -167,13 +176,24 @@ export interface TableProps<RecordType> extends Omit<RcTableProps<RecordType>, '
|
|
|
167
176
|
allowResizing?: boolean;
|
|
168
177
|
showToolbar?: boolean;
|
|
169
178
|
onDataChange?: (data: RecordType[]) => void;
|
|
179
|
+
defaultValue?: AnyObject | (() => AnyObject);
|
|
170
180
|
summary?: boolean | ((data: readonly RecordType[]) => React.ReactNode);
|
|
171
181
|
}
|
|
172
182
|
export interface TableEditProps<RecordType = AnyObject> extends Omit<TableProps<RecordType>, 'columns'> {
|
|
173
183
|
columns: ColumnsTable<RecordType>;
|
|
174
184
|
onCellPaste?: ICellPasteModel<RecordType>;
|
|
175
185
|
onCellChange?: (args: CellChangeArgs<RecordType>, handleCallback: (rowData: any, index: any, value?: any) => void) => void;
|
|
186
|
+
onCellClick?: (args: ICellClick, callback?: any) => void;
|
|
176
187
|
}
|
|
188
|
+
export type ICellClick = {
|
|
189
|
+
index: number;
|
|
190
|
+
indexCol?: number;
|
|
191
|
+
rowId: string | number;
|
|
192
|
+
type: 'Editing' | 'Default';
|
|
193
|
+
field: string;
|
|
194
|
+
cellValue: any;
|
|
195
|
+
rowData: any;
|
|
196
|
+
};
|
|
177
197
|
export type GridTableProps<RecordType = AnyObject> = TableProps<RecordType> | TableEditProps<RecordType>;
|
|
178
198
|
export interface CommandItem {
|
|
179
199
|
id: string;
|
|
@@ -187,6 +207,22 @@ export interface CommandItem {
|
|
|
187
207
|
client?: boolean;
|
|
188
208
|
confirmDialog?: boolean;
|
|
189
209
|
}
|
|
210
|
+
export type IGroupSetting = {
|
|
211
|
+
client?: boolean;
|
|
212
|
+
onGroup?: (props: IOnGroup) => void;
|
|
213
|
+
hiddenColumnGroup?: boolean;
|
|
214
|
+
unClearableLevel?: 1 | 2 | 3 | undefined;
|
|
215
|
+
};
|
|
216
|
+
type IOnGroup = {
|
|
217
|
+
columnGrouped: string[];
|
|
218
|
+
columns: ColumnsTable;
|
|
219
|
+
flattenColumns: ColumnsTable;
|
|
220
|
+
};
|
|
221
|
+
export type IOnChooseColumns = {
|
|
222
|
+
columns: ColumnsTable;
|
|
223
|
+
showColumns: ColumnsTable;
|
|
224
|
+
flattenColumns: ColumnsTable;
|
|
225
|
+
};
|
|
190
226
|
export type CellChangeArgs<T> = {
|
|
191
227
|
type: 'onPaste' | 'onChange' | 'onCellPaste';
|
|
192
228
|
value: any;
|
|
@@ -250,3 +286,4 @@ export type IFormat = {
|
|
|
250
286
|
};
|
|
251
287
|
export type GetRowKey<RecordType> = (record: RecordType, index?: number) => Key;
|
|
252
288
|
export type Presets = Required<ColorPickerProps>['presets'][number];
|
|
289
|
+
export {};
|
|
@@ -2,6 +2,7 @@ import React from "react";
|
|
|
2
2
|
import type { ColumnsTable } from "./type";
|
|
3
3
|
export type IColumnsChoose<RecordType> = {
|
|
4
4
|
columns: ColumnsTable<RecordType>;
|
|
5
|
+
columnsGroup?: string[];
|
|
5
6
|
triggerChangeColumns?: (columns: ColumnsTable<RecordType>, type: string) => void;
|
|
6
7
|
t?: any;
|
|
7
8
|
};
|
|
@@ -12,6 +12,7 @@ var _icons = require("@ant-design/icons");
|
|
|
12
12
|
var _hooks = require("./hooks");
|
|
13
13
|
var _tree = _interopRequireDefault(require("rc-master-ui/es/tree"));
|
|
14
14
|
var _SearchOutlined = _interopRequireDefault(require("@ant-design/icons/SearchOutlined"));
|
|
15
|
+
var _useMergedState = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
|
|
15
16
|
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); }
|
|
16
17
|
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; }
|
|
17
18
|
// import type {TableColumnsType} from "rc-master-ui";
|
|
@@ -24,7 +25,8 @@ const ColumnsChoose = props => {
|
|
|
24
25
|
const {
|
|
25
26
|
columns: propsColumns,
|
|
26
27
|
triggerChangeColumns,
|
|
27
|
-
t
|
|
28
|
+
t,
|
|
29
|
+
columnsGroup
|
|
28
30
|
} = props;
|
|
29
31
|
|
|
30
32
|
// const dataList: { key: React.Key; title: string }[] = [];
|
|
@@ -37,8 +39,10 @@ const ColumnsChoose = props => {
|
|
|
37
39
|
// const searchRef: any = useRef()
|
|
38
40
|
|
|
39
41
|
// const [columns, setColumns] = useState<TableColumnsType>([])
|
|
40
|
-
|
|
41
|
-
const [
|
|
42
|
+
|
|
43
|
+
// const [selectedKeys, setSelectedKeys] = useState<string[]>([]);
|
|
44
|
+
|
|
45
|
+
// const [isManualUpdate, setIsManualUpdate] = useState(false);
|
|
42
46
|
|
|
43
47
|
// useEffect(() => {
|
|
44
48
|
//
|
|
@@ -48,24 +52,42 @@ const ColumnsChoose = props => {
|
|
|
48
52
|
// }, [propsColumns])
|
|
49
53
|
|
|
50
54
|
const columns = (0, _react.useMemo)(() => {
|
|
51
|
-
return
|
|
55
|
+
// return propsColumns.filter((it) => (it.key || it.dataIndex) && it.showInColumnChoose !== false && !columnsGroup?.includes(it.field as string))
|
|
56
|
+
return propsColumns.filter(it => (it.key || it.dataIndex) && it.showInColumnChoose !== false);
|
|
52
57
|
// setColumns(defaultColumns as TableColumnsType)
|
|
53
|
-
}, [propsColumns]);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
58
|
+
}, [columnsGroup, propsColumns]);
|
|
59
|
+
|
|
60
|
+
// useEffect(() => {
|
|
61
|
+
//
|
|
62
|
+
// const defaultColumns = propsColumns.filter((it) => it.key || it.dataIndex && it.showInColumnChoose !== false)
|
|
63
|
+
//
|
|
64
|
+
// const defaultSelectedKeys = getVisibleColumnKeys(defaultColumns)
|
|
65
|
+
//
|
|
66
|
+
// if (!isManualUpdate) {
|
|
67
|
+
// setSelectedKeys(defaultSelectedKeys)
|
|
68
|
+
// }
|
|
69
|
+
// setIsManualUpdate(false);
|
|
70
|
+
//
|
|
71
|
+
//
|
|
72
|
+
// }, [isManualUpdate, propsColumns])
|
|
73
|
+
|
|
74
|
+
const defaultSelectedKeys = _react.default.useMemo(() => {
|
|
75
|
+
const rs = propsColumns.filter(it => (it.key || it.dataIndex) && it.showInColumnChoose !== false && !columnsGroup?.includes(it.field));
|
|
76
|
+
return (0, _hooks.getVisibleColumnKeys)(rs);
|
|
77
|
+
}, [columnsGroup, propsColumns]);
|
|
78
|
+
const [mergedSelectedKeys, setMergedSelectedKeys] = (0, _useMergedState.default)(defaultSelectedKeys || [], {
|
|
79
|
+
value: defaultSelectedKeys
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
//
|
|
83
|
+
// const defaultSelectedKeys = useMemo(() => {
|
|
84
|
+
//
|
|
85
|
+
// return getVisibleColumnKeys(propsColumns)
|
|
86
|
+
//
|
|
87
|
+
// }, [propsColumns])
|
|
88
|
+
|
|
65
89
|
const [clicked, setClicked] = (0, _react.useState)(false);
|
|
66
90
|
const [autoExpandParent, setAutoExpandParent] = (0, _react.useState)(true);
|
|
67
|
-
// const [expandedKeys, setExpandedKeys] = useState<React.Key[]>([]);
|
|
68
|
-
// const [searchValue, setSearchValue] = useState('');
|
|
69
91
|
|
|
70
92
|
// const treeData = useMemo(() => {
|
|
71
93
|
// const loop = (data: TreeDataNode[]): TreeDataNode[] =>
|
|
@@ -141,16 +163,19 @@ const ColumnsChoose = props => {
|
|
|
141
163
|
setAutoExpandParent(true);
|
|
142
164
|
};
|
|
143
165
|
const onCheck = keys => {
|
|
144
|
-
|
|
145
|
-
|
|
166
|
+
console.log('keys', keys);
|
|
167
|
+
// setSelectedKeys(keys)
|
|
168
|
+
setMergedSelectedKeys(keys);
|
|
169
|
+
// setIsManualUpdate(true)
|
|
146
170
|
};
|
|
147
171
|
const handleAccept = () => {
|
|
148
|
-
const rs1
|
|
172
|
+
// const rs1 = updateColumns(propsColumns, selectedKeys)
|
|
173
|
+
const rs1 = (0, _hooks.updateColumns)(propsColumns, mergedSelectedKeys);
|
|
149
174
|
triggerChangeColumns?.(rs1, 'columnChoose');
|
|
150
175
|
hide();
|
|
151
176
|
};
|
|
152
177
|
const handleCancel = () => {
|
|
153
|
-
setSelectedKeys(defaultSelectedKeys)
|
|
178
|
+
// setSelectedKeys(defaultSelectedKeys)
|
|
154
179
|
hide();
|
|
155
180
|
};
|
|
156
181
|
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_antd.Popover, {
|
|
@@ -197,12 +222,15 @@ const ColumnsChoose = props => {
|
|
|
197
222
|
// }}
|
|
198
223
|
,
|
|
199
224
|
onCheck: keys => onCheck(keys),
|
|
200
|
-
multiple: true
|
|
201
|
-
checkedKeys
|
|
202
|
-
|
|
225
|
+
multiple: true
|
|
226
|
+
// checkedKeys={selectedKeys}
|
|
227
|
+
,
|
|
228
|
+
|
|
229
|
+
defaultCheckedKeys: mergedSelectedKeys
|
|
203
230
|
// defaultCheckedKeys={defaultSelectedKeys}
|
|
231
|
+
// selectedKeys={[]}
|
|
204
232
|
,
|
|
205
|
-
|
|
233
|
+
|
|
206
234
|
height: window.innerHeight - 200
|
|
207
235
|
}), /*#__PURE__*/_react.default.createElement(BoxAction, {
|
|
208
236
|
className: 'px-1'
|
|
@@ -224,6 +252,13 @@ const ColumnsChoose = props => {
|
|
|
224
252
|
}, /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
|
|
225
253
|
arrow: false,
|
|
226
254
|
title: 'Cài đặt'
|
|
227
|
-
}, /*#__PURE__*/_react.default.createElement(_icons.SettingOutlined,
|
|
255
|
+
}, /*#__PURE__*/_react.default.createElement(_icons.SettingOutlined, {
|
|
256
|
+
size: 16,
|
|
257
|
+
color: '#555555',
|
|
258
|
+
style: {
|
|
259
|
+
fontSize: 16,
|
|
260
|
+
color: '#555555'
|
|
261
|
+
}
|
|
262
|
+
}))));
|
|
228
263
|
};
|
|
229
264
|
exports.ColumnsChoose = ColumnsChoose;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
type IColumnsGroup = {
|
|
3
|
+
columns: any[];
|
|
4
|
+
dataSource?: string[];
|
|
5
|
+
onSubmit: (value: any) => void;
|
|
6
|
+
t?: any;
|
|
7
|
+
columnsGrouped?: string[];
|
|
8
|
+
unClearableLevel?: number;
|
|
9
|
+
defaultGroupColumns?: string[];
|
|
10
|
+
};
|
|
11
|
+
export declare const ColumnsGroup: (props: IColumnsGroup) => React.JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.ColumnsGroup = void 0;
|
|
8
|
+
var _becoxyIcons = require("becoxy-icons");
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _antd = require("antd");
|
|
11
|
+
var _rcMasterUi = require("rc-master-ui");
|
|
12
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
|
+
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); }
|
|
14
|
+
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; }
|
|
15
|
+
// import {
|
|
16
|
+
// // groupArrayByColumns,
|
|
17
|
+
// // ungroupArray,
|
|
18
|
+
// // useOnClickOutside
|
|
19
|
+
// } from "../../hooks"
|
|
20
|
+
|
|
21
|
+
// import {SettingOutlined} from "@ant-design/icons";
|
|
22
|
+
|
|
23
|
+
const BoxAction = _styledComponents.default.div.withConfig({
|
|
24
|
+
displayName: "BoxAction",
|
|
25
|
+
componentId: "es-grid-template__sc-1uj3tyy-0"
|
|
26
|
+
})(["border-top:1px solid #c4c4c4;padding-top:.75rem;display:flex;justify-content:end;gap:10px;.btn-action{background:none !important;border:none !important;&.btn-action-submit{color:#df4318;&:disabled{background-color:#f0f0f0 !important;}&:hover{color:#df4318 !important;}}&:hover{background-color:#f0f0f0 !important;}}"]);
|
|
27
|
+
const ColumnsGroup = props => {
|
|
28
|
+
const {
|
|
29
|
+
columns,
|
|
30
|
+
columnsGrouped,
|
|
31
|
+
onSubmit,
|
|
32
|
+
unClearableLevel,
|
|
33
|
+
defaultGroupColumns,
|
|
34
|
+
t
|
|
35
|
+
} = props;
|
|
36
|
+
const menuRef = (0, _react.useRef)();
|
|
37
|
+
const [tempGroup, setTempGroup] = (0, _react.useState)([]);
|
|
38
|
+
const [clicked, setClicked] = (0, _react.useState)(false);
|
|
39
|
+
const rsCol = _react.default.useMemo(() => {
|
|
40
|
+
return columns.filter(it => it.hidden !== true && !tempGroup.includes(it.field));
|
|
41
|
+
}, [columns, tempGroup]);
|
|
42
|
+
const options = _react.default.useMemo(() => {
|
|
43
|
+
return rsCol.map(it => ({
|
|
44
|
+
...it,
|
|
45
|
+
value: it.field,
|
|
46
|
+
label: t ? t(it.columnGroupText ?? it.headerText ?? it.title) : it.columnGroupText ?? it.headerText ?? it.title
|
|
47
|
+
}));
|
|
48
|
+
}, [rsCol, t]);
|
|
49
|
+
|
|
50
|
+
// React.useEffect(() => {
|
|
51
|
+
// if(columnsGrouped) {
|
|
52
|
+
// setTempGroup([...columnsGrouped])
|
|
53
|
+
// }
|
|
54
|
+
//
|
|
55
|
+
// }, [!!columnsGrouped])
|
|
56
|
+
|
|
57
|
+
const onChangeGroupColumns = (option, index) => {
|
|
58
|
+
// if (option) {
|
|
59
|
+
// tempGroup[index] = option
|
|
60
|
+
// } else {
|
|
61
|
+
// tempGroup.splice(index, 1)
|
|
62
|
+
// }
|
|
63
|
+
// setTempGroup([...tempGroup])
|
|
64
|
+
|
|
65
|
+
const cloneTemp = [...tempGroup];
|
|
66
|
+
if (option) {
|
|
67
|
+
cloneTemp[index] = option;
|
|
68
|
+
} else {
|
|
69
|
+
cloneTemp.splice(index, 1);
|
|
70
|
+
}
|
|
71
|
+
setTempGroup([...cloneTemp]);
|
|
72
|
+
};
|
|
73
|
+
const handleGroup = () => {
|
|
74
|
+
// setColumnsGrouped([...tempGroup])
|
|
75
|
+
setClicked(false);
|
|
76
|
+
// const dt = ungroupArray(dataSource)
|
|
77
|
+
|
|
78
|
+
// const rs = groupArrayByColumns(dt, [...tempGroup])
|
|
79
|
+
|
|
80
|
+
// setResource([...rs])
|
|
81
|
+
onSubmit([...tempGroup]);
|
|
82
|
+
};
|
|
83
|
+
const handleClear = () => {
|
|
84
|
+
// setColumnsGrouped([])
|
|
85
|
+
setTempGroup(defaultGroupColumns ? defaultGroupColumns : []);
|
|
86
|
+
// setIsOpen(false)
|
|
87
|
+
setClicked(false);
|
|
88
|
+
// const dt = ungroupArray(dataSource)
|
|
89
|
+
|
|
90
|
+
// const rs = groupArrayByColumns(dt, [])
|
|
91
|
+
|
|
92
|
+
// setResource([...rs])
|
|
93
|
+
onSubmit(defaultGroupColumns ? defaultGroupColumns : []);
|
|
94
|
+
};
|
|
95
|
+
const handleClickChange = open => {
|
|
96
|
+
console.log('open', open);
|
|
97
|
+
setClicked(open);
|
|
98
|
+
if (open) {
|
|
99
|
+
if (columnsGrouped) {
|
|
100
|
+
setTempGroup([...columnsGrouped]);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (!open) {
|
|
104
|
+
setTempGroup([]);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_antd.Popover, {
|
|
108
|
+
placement: 'bottomLeft',
|
|
109
|
+
content: /*#__PURE__*/_react.default.createElement("div", {
|
|
110
|
+
style: {
|
|
111
|
+
minWidth: 250
|
|
112
|
+
}
|
|
113
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
114
|
+
ref: menuRef,
|
|
115
|
+
style: {
|
|
116
|
+
position: 'relative'
|
|
117
|
+
}
|
|
118
|
+
}, /*#__PURE__*/_react.default.createElement("p", {
|
|
119
|
+
className: 'fw-bold'
|
|
120
|
+
}, "Nh\xF3m d\u1EEF li\u1EC7u theo c\u1ED9t"), /*#__PURE__*/_react.default.createElement("div", {
|
|
121
|
+
className: 'mb-1',
|
|
122
|
+
style: {
|
|
123
|
+
marginBottom: '1rem'
|
|
124
|
+
}
|
|
125
|
+
}, /*#__PURE__*/_react.default.createElement("p", {
|
|
126
|
+
className: 'm-0',
|
|
127
|
+
style: {
|
|
128
|
+
margin: 0
|
|
129
|
+
}
|
|
130
|
+
}, "M\u1EE9c 1"), /*#__PURE__*/_react.default.createElement(_rcMasterUi.Select, {
|
|
131
|
+
style: {
|
|
132
|
+
width: '100%'
|
|
133
|
+
}
|
|
134
|
+
// labelInValue={true}
|
|
135
|
+
// options={columns.filter((it: any) => !tempGroup.includes(it.field))}
|
|
136
|
+
// options={columns && columns.length > 0 ? options : []}
|
|
137
|
+
,
|
|
138
|
+
options: options,
|
|
139
|
+
value: tempGroup?.[0],
|
|
140
|
+
onChange: val => onChangeGroupColumns(val, 0),
|
|
141
|
+
allowClear: !tempGroup?.[1] && !(unClearableLevel && unClearableLevel - 1 >= 0)
|
|
142
|
+
// fieldNames={{
|
|
143
|
+
// value: 'field',
|
|
144
|
+
// label: 'headerText'
|
|
145
|
+
// }}
|
|
146
|
+
,
|
|
147
|
+
labelRender: labelProps => {
|
|
148
|
+
const it = columns.find(col => col.field === labelProps.value);
|
|
149
|
+
return t ? t(it.columnGroupText ?? it.headerText ?? it.title) : it.columnGroupText ?? it.headerText ?? it.title;
|
|
150
|
+
}
|
|
151
|
+
// hideSelectedOptions
|
|
152
|
+
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
153
|
+
className: 'mb-1',
|
|
154
|
+
style: {
|
|
155
|
+
marginBottom: '1rem'
|
|
156
|
+
}
|
|
157
|
+
}, /*#__PURE__*/_react.default.createElement("p", {
|
|
158
|
+
className: 'm-0',
|
|
159
|
+
style: {
|
|
160
|
+
margin: 0
|
|
161
|
+
}
|
|
162
|
+
}, "M\u1EE9c 2"), /*#__PURE__*/_react.default.createElement(_rcMasterUi.Select, {
|
|
163
|
+
style: {
|
|
164
|
+
width: '100%'
|
|
165
|
+
},
|
|
166
|
+
options: options,
|
|
167
|
+
value: tempGroup?.[1],
|
|
168
|
+
onChange: val => onChangeGroupColumns(val, 1),
|
|
169
|
+
allowClear: !tempGroup?.[2] && !(unClearableLevel && unClearableLevel - 2 >= 0)
|
|
170
|
+
// hideSelectedOptions
|
|
171
|
+
// fieldNames={{
|
|
172
|
+
// value: 'field',
|
|
173
|
+
// label: 'headerText'
|
|
174
|
+
// }}
|
|
175
|
+
,
|
|
176
|
+
labelRender: labelProps => {
|
|
177
|
+
const it = columns.find(col => col.field === labelProps.value);
|
|
178
|
+
return t ? t(it.columnGroupText ?? it.headerText ?? it.title) : it.columnGroupText ?? it.headerText ?? it.title;
|
|
179
|
+
}
|
|
180
|
+
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
181
|
+
className: 'mb-1',
|
|
182
|
+
style: {
|
|
183
|
+
marginBottom: '1rem'
|
|
184
|
+
}
|
|
185
|
+
}, /*#__PURE__*/_react.default.createElement("p", {
|
|
186
|
+
className: 'm-0',
|
|
187
|
+
style: {
|
|
188
|
+
margin: 0
|
|
189
|
+
}
|
|
190
|
+
}, "M\u1EE9c 3"), /*#__PURE__*/_react.default.createElement(_rcMasterUi.Select, {
|
|
191
|
+
style: {
|
|
192
|
+
width: '100%'
|
|
193
|
+
},
|
|
194
|
+
options: options,
|
|
195
|
+
value: tempGroup?.[2],
|
|
196
|
+
onChange: val => onChangeGroupColumns(val, 2),
|
|
197
|
+
allowClear: !!tempGroup?.[2] && !(unClearableLevel && unClearableLevel - 3 >= 0)
|
|
198
|
+
// fieldNames={{
|
|
199
|
+
// value: 'field',
|
|
200
|
+
// label: 'headerText'
|
|
201
|
+
// }}
|
|
202
|
+
,
|
|
203
|
+
labelRender: labelProps => {
|
|
204
|
+
const it = columns.find(col => col.field === labelProps.value);
|
|
205
|
+
return t ? t(it.columnGroupText ?? it.headerText ?? it.title) : it.columnGroupText ?? it.headerText ?? it.title;
|
|
206
|
+
}
|
|
207
|
+
}))), /*#__PURE__*/_react.default.createElement(BoxAction, {
|
|
208
|
+
className: 'px-1'
|
|
209
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Button
|
|
210
|
+
// className={classnames('btn-action btn-action-submit', {
|
|
211
|
+
// // disable: !columns.find((item) => item.visible !== false || item.visible)
|
|
212
|
+
// })}
|
|
213
|
+
, {
|
|
214
|
+
onClick: handleGroup
|
|
215
|
+
// disabled={!columns.find((item) => item.visible !== false || item.visible)}
|
|
216
|
+
}, t ? t('Thực hiện') : 'Thực hiện'), /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
217
|
+
className: 'btn-action btn-action-cancel',
|
|
218
|
+
onClick: handleClear
|
|
219
|
+
}, t ? t('Clear') : 'Clear'))),
|
|
220
|
+
trigger: "click",
|
|
221
|
+
open: clicked,
|
|
222
|
+
onOpenChange: handleClickChange,
|
|
223
|
+
arrow: false
|
|
224
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
|
|
225
|
+
arrow: false,
|
|
226
|
+
title: 'Nhóm dữ liệu'
|
|
227
|
+
}, /*#__PURE__*/_react.default.createElement(_becoxyIcons.Group, {
|
|
228
|
+
fontSize: 18,
|
|
229
|
+
style: {
|
|
230
|
+
cursor: 'pointer'
|
|
231
|
+
}
|
|
232
|
+
}))));
|
|
233
|
+
};
|
|
234
|
+
exports.ColumnsGroup = ColumnsGroup;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ColumnsGroup';
|