es-grid-template 1.2.5 → 1.2.7
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/es/grid-component/AdvanceFilter.d.ts +10 -0
- package/es/grid-component/AdvanceFilter.js +544 -0
- package/es/grid-component/ColumnsChoose.js +2 -1
- package/es/grid-component/ContextMenu.js +2 -1
- package/es/grid-component/EditableCell.d.ts +1 -0
- package/es/grid-component/EditableCell.js +22 -4
- package/es/grid-component/InternalTable.js +128 -2
- package/es/grid-component/TableGrid.js +8 -5
- package/es/grid-component/hooks/columns/index.js +2 -1
- package/es/grid-component/hooks/content/HeaderContent.js +1 -1
- package/es/grid-component/hooks/useColumns.js +5 -2
- package/es/grid-component/hooks/utils.d.ts +1 -1
- package/es/grid-component/hooks/utils.js +1 -1
- package/es/grid-component/styles.scss +13 -3
- package/es/grid-component/table/GridEdit.js +43 -18
- package/es/grid-component/type.d.ts +34 -7
- package/lib/grid-component/AdvanceFilter.d.ts +10 -0
- package/lib/grid-component/AdvanceFilter.js +554 -0
- package/lib/grid-component/ColumnsChoose.js +2 -1
- package/lib/grid-component/ContextMenu.js +2 -1
- package/lib/grid-component/EditableCell.d.ts +1 -0
- package/lib/grid-component/EditableCell.js +22 -4
- package/lib/grid-component/InternalTable.js +127 -1
- package/lib/grid-component/TableGrid.js +8 -5
- package/lib/grid-component/hooks/columns/index.js +2 -1
- package/lib/grid-component/hooks/content/HeaderContent.js +1 -1
- package/lib/grid-component/hooks/useColumns.js +5 -2
- package/lib/grid-component/hooks/utils.d.ts +1 -1
- package/lib/grid-component/hooks/utils.js +1 -1
- package/lib/grid-component/styles.scss +13 -3
- package/lib/grid-component/table/GridEdit.js +43 -18
- package/lib/grid-component/type.d.ts +34 -7
- package/package.json +108 -106
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ColumnsTable } from "./type";
|
|
3
|
+
export type IColumnsChoose<RecordType> = {
|
|
4
|
+
columns: ColumnsTable<RecordType>;
|
|
5
|
+
columnsGroup?: string[];
|
|
6
|
+
triggerChangeColumns?: (columns: ColumnsTable<RecordType>, type: string) => void;
|
|
7
|
+
t?: any;
|
|
8
|
+
triggerChangeKeys?: any;
|
|
9
|
+
};
|
|
10
|
+
export declare const ColumnsChoose: <RecordType extends object>(props: IColumnsChoose<RecordType>) => React.JSX.Element;
|
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
// import React, {Fragment, useMemo, useState} from "react"
|
|
2
|
+
//
|
|
3
|
+
// import styled from "styled-components"
|
|
4
|
+
// import {Button, Input, Popover, Tooltip} from "antd";
|
|
5
|
+
// import {SettingOutlined} from "@ant-design/icons";
|
|
6
|
+
// import {
|
|
7
|
+
// getVisibleColumnKeys,
|
|
8
|
+
// updateColumns
|
|
9
|
+
// } from "./hooks";
|
|
10
|
+
//
|
|
11
|
+
// // import type {TableColumnsType} from "rc-master-ui";
|
|
12
|
+
// import Tree from "rc-master-ui/es/tree";
|
|
13
|
+
// import SearchOutlined from "@ant-design/icons/SearchOutlined";
|
|
14
|
+
// import type {ColumnsTable} from "./type";
|
|
15
|
+
// import useMergedState from "rc-util/lib/hooks/useMergedState";
|
|
16
|
+
//
|
|
17
|
+
//
|
|
18
|
+
// const BoxAction = styled.div`
|
|
19
|
+
// border-top: 1px solid #c4c4c4;
|
|
20
|
+
// padding-top: .75rem;
|
|
21
|
+
// display: flex;
|
|
22
|
+
// justify-content: end;
|
|
23
|
+
// gap: 10px;
|
|
24
|
+
//
|
|
25
|
+
// .btn-action {
|
|
26
|
+
// background: none !important;
|
|
27
|
+
// border: none !important;
|
|
28
|
+
// &.btn-action-submit {
|
|
29
|
+
// color: #df4318;
|
|
30
|
+
// &:disabled {
|
|
31
|
+
// background-color: #f0f0f0 !important;
|
|
32
|
+
// }
|
|
33
|
+
// &:hover {
|
|
34
|
+
// color: #df4318 !important;
|
|
35
|
+
// }
|
|
36
|
+
// }
|
|
37
|
+
//
|
|
38
|
+
// &:hover {
|
|
39
|
+
// background-color: #f0f0f0 !important;
|
|
40
|
+
// }
|
|
41
|
+
// }
|
|
42
|
+
// `
|
|
43
|
+
//
|
|
44
|
+
// export type IColumnsChoose<RecordType> = {
|
|
45
|
+
// columns: ColumnsTable<RecordType>
|
|
46
|
+
// columnsGroup?: string[]
|
|
47
|
+
// triggerChangeColumns?: (columns: ColumnsTable<RecordType>, type: string) => void
|
|
48
|
+
// t?: any
|
|
49
|
+
//
|
|
50
|
+
// }
|
|
51
|
+
//
|
|
52
|
+
//
|
|
53
|
+
// export const ColumnsChoose = <RecordType extends object>(props: IColumnsChoose<RecordType>) => {
|
|
54
|
+
// const {
|
|
55
|
+
// columns: propsColumns,
|
|
56
|
+
// triggerChangeColumns,
|
|
57
|
+
// t,
|
|
58
|
+
// columnsGroup,
|
|
59
|
+
// } = props
|
|
60
|
+
//
|
|
61
|
+
// // const dataList: { key: React.Key; title: string }[] = [];
|
|
62
|
+
//
|
|
63
|
+
// // const defaultColumns = useMemo(() => {
|
|
64
|
+
// // return propsColumns.filter((it) => it.key || it.dataIndex && it.showColumnChoose !== false)
|
|
65
|
+
// // }, [propsColumns])
|
|
66
|
+
//
|
|
67
|
+
//
|
|
68
|
+
// // const columnsChooseRef: any = useRef()
|
|
69
|
+
// // const searchRef: any = useRef()
|
|
70
|
+
//
|
|
71
|
+
//
|
|
72
|
+
//
|
|
73
|
+
// // const [columns, setColumns] = useState<TableColumnsType>([])
|
|
74
|
+
//
|
|
75
|
+
// // const [selectedKeys, setSelectedKeys] = useState<string[]>([]);
|
|
76
|
+
//
|
|
77
|
+
// // const [isManualUpdate, setIsManualUpdate] = useState(false);
|
|
78
|
+
//
|
|
79
|
+
//
|
|
80
|
+
// // useEffect(() => {
|
|
81
|
+
// //
|
|
82
|
+
// // const defaultColumns = propsColumns.filter((it) => it.key || it.dataIndex && it.showInColumnChoose !== false)
|
|
83
|
+
// // setColumns(defaultColumns as TableColumnsType)
|
|
84
|
+
// //
|
|
85
|
+
// // }, [propsColumns])
|
|
86
|
+
//
|
|
87
|
+
// const columns = useMemo(() => {
|
|
88
|
+
//
|
|
89
|
+
// // return propsColumns.filter((it) => (it.key || it.dataIndex) && it.showInColumnChoose !== false && !columnsGroup?.includes(it.field as string))
|
|
90
|
+
// return propsColumns.filter((it) => (it.key || it.dataIndex) && it.showInColumnChoose !== false)
|
|
91
|
+
// // setColumns(defaultColumns as TableColumnsType)
|
|
92
|
+
// }, [columnsGroup, propsColumns])
|
|
93
|
+
//
|
|
94
|
+
//
|
|
95
|
+
// // useEffect(() => {
|
|
96
|
+
// //
|
|
97
|
+
// // const defaultColumns = propsColumns.filter((it) => it.key || it.dataIndex && it.showInColumnChoose !== false)
|
|
98
|
+
// //
|
|
99
|
+
// // const defaultSelectedKeys = getVisibleColumnKeys(defaultColumns)
|
|
100
|
+
// //
|
|
101
|
+
// // if (!isManualUpdate) {
|
|
102
|
+
// // setSelectedKeys(defaultSelectedKeys)
|
|
103
|
+
// // }
|
|
104
|
+
// // setIsManualUpdate(false);
|
|
105
|
+
// //
|
|
106
|
+
// //
|
|
107
|
+
// // }, [isManualUpdate, propsColumns])
|
|
108
|
+
//
|
|
109
|
+
// const defaultSelectedKeys = React.useMemo(() => {
|
|
110
|
+
//
|
|
111
|
+
// const rs = propsColumns.filter((it) => (it.key || it.dataIndex) && it.showInColumnChoose !== false && !columnsGroup?.includes(it.field as string))
|
|
112
|
+
// return getVisibleColumnKeys(rs)
|
|
113
|
+
//
|
|
114
|
+
// }, [columnsGroup, propsColumns])
|
|
115
|
+
//
|
|
116
|
+
// const [mergedSelectedKeys, setMergedSelectedKeys] = useMergedState(
|
|
117
|
+
// defaultSelectedKeys || [],
|
|
118
|
+
// {
|
|
119
|
+
// value: defaultSelectedKeys,
|
|
120
|
+
// },
|
|
121
|
+
// );
|
|
122
|
+
//
|
|
123
|
+
// //
|
|
124
|
+
// // const defaultSelectedKeys = useMemo(() => {
|
|
125
|
+
// //
|
|
126
|
+
// // return getVisibleColumnKeys(propsColumns)
|
|
127
|
+
// //
|
|
128
|
+
// // }, [propsColumns])
|
|
129
|
+
//
|
|
130
|
+
//
|
|
131
|
+
// const [clicked, setClicked] = useState(false);
|
|
132
|
+
// const [autoExpandParent, setAutoExpandParent] = useState(true);
|
|
133
|
+
//
|
|
134
|
+
//
|
|
135
|
+
// // const treeData = useMemo(() => {
|
|
136
|
+
// // const loop = (data: TreeDataNode[]): TreeDataNode[] =>
|
|
137
|
+
// // data.map((item) => {
|
|
138
|
+
// // const strTitle = item.title as string;
|
|
139
|
+
// // const index = strTitle.indexOf(searchValue);
|
|
140
|
+
// // const beforeStr = strTitle.substring(0, index);
|
|
141
|
+
// // const afterStr = strTitle.slice(index + searchValue.length);
|
|
142
|
+
// // const title =
|
|
143
|
+
// // index > -1 ? (
|
|
144
|
+
// // <span key={item.key}>
|
|
145
|
+
// // {beforeStr}
|
|
146
|
+
// // <span className="site-tree-search-value">{searchValue}</span>
|
|
147
|
+
// // {afterStr}
|
|
148
|
+
// // </span>
|
|
149
|
+
// // ) : (
|
|
150
|
+
// // <span key={item.key}>{strTitle}</span>
|
|
151
|
+
// // );
|
|
152
|
+
// // if (item.children) {
|
|
153
|
+
// // return { title, key: item.key, children: loop(item.children) };
|
|
154
|
+
// // }
|
|
155
|
+
// //
|
|
156
|
+
// // return {
|
|
157
|
+
// // title,
|
|
158
|
+
// // key: item.key,
|
|
159
|
+
// // };
|
|
160
|
+
// // });
|
|
161
|
+
// //
|
|
162
|
+
// // // return loop(defaultData);
|
|
163
|
+
// // return loop(columns as any);
|
|
164
|
+
// // }, [searchValue, columns]);
|
|
165
|
+
//
|
|
166
|
+
//
|
|
167
|
+
// const hide = () => {
|
|
168
|
+
// setClicked(false)
|
|
169
|
+
// }
|
|
170
|
+
//
|
|
171
|
+
// const handleClickChange = (open: boolean) => {
|
|
172
|
+
// setClicked(open)
|
|
173
|
+
// }
|
|
174
|
+
//
|
|
175
|
+
// const onExpand = () => {
|
|
176
|
+
// // setExpandedKeys(newExpandedKeys)
|
|
177
|
+
// setAutoExpandParent(false)
|
|
178
|
+
// }
|
|
179
|
+
//
|
|
180
|
+
// // const getParentKey = (key: React.Key, tree: TreeDataNode[]): React.Key => {
|
|
181
|
+
// // let parentKey: React.Key
|
|
182
|
+
// // for (let i = 0; i < tree.length; i++) {
|
|
183
|
+
// // const node = tree[i]
|
|
184
|
+
// // if (node.children) {
|
|
185
|
+
// // if (node.children.some((item) => item.key === key)) {
|
|
186
|
+
// // parentKey = node.key
|
|
187
|
+
// // } else if (getParentKey(key, node.children)) {
|
|
188
|
+
// // parentKey = getParentKey(key, node.children)
|
|
189
|
+
// // }
|
|
190
|
+
// // }
|
|
191
|
+
// // }
|
|
192
|
+
// // return parentKey!
|
|
193
|
+
// // }
|
|
194
|
+
//
|
|
195
|
+
// // const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
196
|
+
// const onChange = () => {
|
|
197
|
+
// // const { value } = e.target
|
|
198
|
+
// // const newExpandedKeys = dataList
|
|
199
|
+
// // .map((item) => {
|
|
200
|
+
// // if (item.title.indexOf(value) > -1) {
|
|
201
|
+
// // return getParentKey(item.key, defaultData)
|
|
202
|
+
// // }
|
|
203
|
+
// // return null
|
|
204
|
+
// // })
|
|
205
|
+
// // .filter((item, i, self): item is React.Key => !!(item && self.indexOf(item) === i))
|
|
206
|
+
// // setExpandedKeys(newExpandedKeys)
|
|
207
|
+
//
|
|
208
|
+
// // setSearchValue(value)
|
|
209
|
+
// setAutoExpandParent(true)
|
|
210
|
+
// };
|
|
211
|
+
//
|
|
212
|
+
// const onCheck = (keys: string[]) => {
|
|
213
|
+
//
|
|
214
|
+
// console.log('keys', keys)
|
|
215
|
+
// // setSelectedKeys(keys)
|
|
216
|
+
// setMergedSelectedKeys(keys)
|
|
217
|
+
// // setIsManualUpdate(true)
|
|
218
|
+
//
|
|
219
|
+
// }
|
|
220
|
+
//
|
|
221
|
+
// const handleAccept = () => {
|
|
222
|
+
//
|
|
223
|
+
// console.log('mergedSelectedKeys', mergedSelectedKeys)
|
|
224
|
+
//
|
|
225
|
+
// // const rs1 = updateColumns(propsColumns, selectedKeys)
|
|
226
|
+
// const rs1 = updateColumns(propsColumns, mergedSelectedKeys)
|
|
227
|
+
//
|
|
228
|
+
// console.log('rs1', rs1)
|
|
229
|
+
//
|
|
230
|
+
// triggerChangeColumns?.(rs1, 'columnChoose')
|
|
231
|
+
//
|
|
232
|
+
// hide()
|
|
233
|
+
//
|
|
234
|
+
// }
|
|
235
|
+
//
|
|
236
|
+
// const handleCancel = () => {
|
|
237
|
+
// // setSelectedKeys(defaultSelectedKeys)
|
|
238
|
+
// hide()
|
|
239
|
+
// }
|
|
240
|
+
//
|
|
241
|
+
//
|
|
242
|
+
// return (
|
|
243
|
+
// <Fragment>
|
|
244
|
+
// <Popover
|
|
245
|
+
// placement={'bottomLeft'}
|
|
246
|
+
// content={
|
|
247
|
+
// <div style={{minWidth: 250}}>
|
|
248
|
+
// <Input style={{ marginBottom: 8 }} placeholder={t ? t("Search") : 'Search'} prefix={<SearchOutlined />} onChange={onChange} />
|
|
249
|
+
//
|
|
250
|
+
// <Tree
|
|
251
|
+
// onExpand={onExpand}
|
|
252
|
+
// // expandedKeys={expandedKeys}
|
|
253
|
+
// autoExpandParent={autoExpandParent}
|
|
254
|
+
// // treeData={treeData}
|
|
255
|
+
// treeData={columns}
|
|
256
|
+
// defaultExpandAll={true}
|
|
257
|
+
// checkable={true}
|
|
258
|
+
// // onSelect={(keys, info) => {
|
|
259
|
+
// // const key = info.node.key
|
|
260
|
+
// //
|
|
261
|
+
// // const find = findItemByKey(columns, 'key', key)
|
|
262
|
+
// //
|
|
263
|
+
// // // const tmpColumn
|
|
264
|
+
// //
|
|
265
|
+
// // // if (selectedKeys.includes(key as string)) {
|
|
266
|
+
// // // const rssss = findKeyPath(columns, key as string)
|
|
267
|
+
// // // const rs = selectedKeys.filter(item => !rssss.includes(item));
|
|
268
|
+
// // //
|
|
269
|
+
// // // setSelectedKeys(rs)
|
|
270
|
+
// // // } else {
|
|
271
|
+
// //
|
|
272
|
+
// // // const rs = [...selectedKeys, keys[0]]
|
|
273
|
+
// //
|
|
274
|
+
// // // setSelectedKeys(keys)
|
|
275
|
+
// // // }
|
|
276
|
+
// // }}
|
|
277
|
+
// onCheck={(keys) => onCheck(keys as string[])}
|
|
278
|
+
//
|
|
279
|
+
//
|
|
280
|
+
// multiple={true}
|
|
281
|
+
// // checkedKeys={selectedKeys}
|
|
282
|
+
//
|
|
283
|
+
// defaultCheckedKeys={mergedSelectedKeys}
|
|
284
|
+
// // defaultCheckedKeys={defaultSelectedKeys}
|
|
285
|
+
// // selectedKeys={[]}
|
|
286
|
+
//
|
|
287
|
+
// height={window.innerHeight - 200}
|
|
288
|
+
//
|
|
289
|
+
// />
|
|
290
|
+
//
|
|
291
|
+
//
|
|
292
|
+
// <BoxAction className={'px-1'}>
|
|
293
|
+
// <Button
|
|
294
|
+
// // className={classnames('btn-action btn-action-submit', {
|
|
295
|
+
// // // disable: !columns.find((item) => item.visible !== false || item.visible)
|
|
296
|
+
// // })}
|
|
297
|
+
// onClick={handleAccept}
|
|
298
|
+
// // disabled={!columns.find((item) => item.visible !== false || item.visible)}
|
|
299
|
+
// >
|
|
300
|
+
// {t ? t('OK') : 'OK'}
|
|
301
|
+
// {/*{'OK'}*/}
|
|
302
|
+
// </Button>
|
|
303
|
+
//
|
|
304
|
+
// {/*<Button className={'btn-action btn-action-cancel'} onClick={hide} >{('Cancel') }</Button>*/}
|
|
305
|
+
// <Button className={'btn-action btn-action-cancel'} onClick={handleCancel} >{t ? t('Cancel') : 'Cancel' }</Button>
|
|
306
|
+
// </BoxAction>
|
|
307
|
+
// </div>
|
|
308
|
+
// }
|
|
309
|
+
// trigger="click"
|
|
310
|
+
// open={clicked}
|
|
311
|
+
// onOpenChange={handleClickChange}
|
|
312
|
+
// arrow={false}
|
|
313
|
+
// >
|
|
314
|
+
// <Tooltip arrow={false} title={'Cài đặt'} >
|
|
315
|
+
// <SettingOutlined size={16} color={'#555555'} style={{fontSize: 16, color: '#555555'}} />
|
|
316
|
+
// </Tooltip>
|
|
317
|
+
//
|
|
318
|
+
// </Popover>
|
|
319
|
+
// </Fragment>
|
|
320
|
+
// )
|
|
321
|
+
// }
|
|
322
|
+
|
|
323
|
+
import React, { Fragment, useEffect, useMemo, useState } from "react";
|
|
324
|
+
import styled from "styled-components";
|
|
325
|
+
import { Button, Input, Popover, Tooltip } from "antd";
|
|
326
|
+
import { SettingOutlined } from "@ant-design/icons";
|
|
327
|
+
import { getVisibleColumnKeys, updateColumns } from "./hooks";
|
|
328
|
+
|
|
329
|
+
// import type {TableColumnsType} from "rc-master-ui";
|
|
330
|
+
import Tree from "rc-master-ui/es/tree";
|
|
331
|
+
import SearchOutlined from "@ant-design/icons/SearchOutlined";
|
|
332
|
+
const BoxAction = styled.div.withConfig({
|
|
333
|
+
displayName: "BoxAction",
|
|
334
|
+
componentId: "es-grid-template__sc-zdl2xa-0"
|
|
335
|
+
})(["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;}}"]);
|
|
336
|
+
export const ColumnsChoose = props => {
|
|
337
|
+
const {
|
|
338
|
+
columns: propsColumns,
|
|
339
|
+
triggerChangeColumns,
|
|
340
|
+
triggerChangeKeys,
|
|
341
|
+
t,
|
|
342
|
+
columnsGroup
|
|
343
|
+
} = props;
|
|
344
|
+
|
|
345
|
+
// const dataList: { key: React.Key; title: string }[] = [];
|
|
346
|
+
|
|
347
|
+
// const defaultColumns = useMemo(() => {
|
|
348
|
+
// return propsColumns.filter((it) => it.key || it.dataIndex && it.showColumnChoose !== false)
|
|
349
|
+
// }, [propsColumns])
|
|
350
|
+
|
|
351
|
+
// const columnsChooseRef: any = useRef()
|
|
352
|
+
// const searchRef: any = useRef()
|
|
353
|
+
|
|
354
|
+
// const [columns, setColumns] = useState<TableColumnsType>([])
|
|
355
|
+
const [selectedKeys, setSelectedKeys] = useState([]);
|
|
356
|
+
const [isManualUpdate, setIsManualUpdate] = useState(false);
|
|
357
|
+
|
|
358
|
+
// useEffect(() => {
|
|
359
|
+
//
|
|
360
|
+
// const defaultColumns = propsColumns.filter((it) => it.key || it.dataIndex && it.showInColumnChoose !== false)
|
|
361
|
+
// setColumns(defaultColumns as TableColumnsType)
|
|
362
|
+
//
|
|
363
|
+
// }, [propsColumns])
|
|
364
|
+
|
|
365
|
+
const columns = useMemo(() => {
|
|
366
|
+
return propsColumns.filter(it => it.key || it.dataIndex && it.showInColumnChoose !== false);
|
|
367
|
+
// setColumns(defaultColumns as TableColumnsType)
|
|
368
|
+
}, [propsColumns]);
|
|
369
|
+
useEffect(() => {
|
|
370
|
+
// const defaultColumns = propsColumns.filter((it) => it.key || it.dataIndex && it.showInColumnChoose !== false)
|
|
371
|
+
const defaultColumns = propsColumns.filter(it => (it.key || it.dataIndex) && it.showInColumnChoose !== false && !columnsGroup?.includes(it.field));
|
|
372
|
+
const defaultSelectedKeys = getVisibleColumnKeys(defaultColumns);
|
|
373
|
+
if (!isManualUpdate) {
|
|
374
|
+
setSelectedKeys(defaultSelectedKeys);
|
|
375
|
+
}
|
|
376
|
+
setIsManualUpdate(false);
|
|
377
|
+
}, [propsColumns]);
|
|
378
|
+
const defaultSelectedKeys = useMemo(() => {
|
|
379
|
+
const defaultColumns = propsColumns.filter(it => (it.key || it.dataIndex) && it.showInColumnChoose !== false && !columnsGroup?.includes(it.field));
|
|
380
|
+
return getVisibleColumnKeys(defaultColumns);
|
|
381
|
+
}, [propsColumns]);
|
|
382
|
+
const [clicked, setClicked] = useState(false);
|
|
383
|
+
const [autoExpandParent, setAutoExpandParent] = useState(true);
|
|
384
|
+
|
|
385
|
+
// const treeData = useMemo(() => {
|
|
386
|
+
// const loop = (data: TreeDataNode[]): TreeDataNode[] =>
|
|
387
|
+
// data.map((item) => {
|
|
388
|
+
// const strTitle = item.title as string;
|
|
389
|
+
// const index = strTitle.indexOf(searchValue);
|
|
390
|
+
// const beforeStr = strTitle.substring(0, index);
|
|
391
|
+
// const afterStr = strTitle.slice(index + searchValue.length);
|
|
392
|
+
// const title =
|
|
393
|
+
// index > -1 ? (
|
|
394
|
+
// <span key={item.key}>
|
|
395
|
+
// {beforeStr}
|
|
396
|
+
// <span className="site-tree-search-value">{searchValue}</span>
|
|
397
|
+
// {afterStr}
|
|
398
|
+
// </span>
|
|
399
|
+
// ) : (
|
|
400
|
+
// <span key={item.key}>{strTitle}</span>
|
|
401
|
+
// );
|
|
402
|
+
// if (item.children) {
|
|
403
|
+
// return { title, key: item.key, children: loop(item.children) };
|
|
404
|
+
// }
|
|
405
|
+
//
|
|
406
|
+
// return {
|
|
407
|
+
// title,
|
|
408
|
+
// key: item.key,
|
|
409
|
+
// };
|
|
410
|
+
// });
|
|
411
|
+
//
|
|
412
|
+
// // return loop(defaultData);
|
|
413
|
+
// return loop(columns as any);
|
|
414
|
+
// }, [searchValue, columns]);
|
|
415
|
+
|
|
416
|
+
const hide = () => {
|
|
417
|
+
setClicked(false);
|
|
418
|
+
};
|
|
419
|
+
const handleClickChange = open => {
|
|
420
|
+
setClicked(open);
|
|
421
|
+
};
|
|
422
|
+
const onExpand = () => {
|
|
423
|
+
// setExpandedKeys(newExpandedKeys)
|
|
424
|
+
setAutoExpandParent(false);
|
|
425
|
+
};
|
|
426
|
+
|
|
427
|
+
// const getParentKey = (key: React.Key, tree: TreeDataNode[]): React.Key => {
|
|
428
|
+
// let parentKey: React.Key
|
|
429
|
+
// for (let i = 0; i < tree.length; i++) {
|
|
430
|
+
// const node = tree[i]
|
|
431
|
+
// if (node.children) {
|
|
432
|
+
// if (node.children.some((item) => item.key === key)) {
|
|
433
|
+
// parentKey = node.key
|
|
434
|
+
// } else if (getParentKey(key, node.children)) {
|
|
435
|
+
// parentKey = getParentKey(key, node.children)
|
|
436
|
+
// }
|
|
437
|
+
// }
|
|
438
|
+
// }
|
|
439
|
+
// return parentKey!
|
|
440
|
+
// }
|
|
441
|
+
|
|
442
|
+
// const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
443
|
+
const onChange = () => {
|
|
444
|
+
// const { value } = e.target
|
|
445
|
+
// const newExpandedKeys = dataList
|
|
446
|
+
// .map((item) => {
|
|
447
|
+
// if (item.title.indexOf(value) > -1) {
|
|
448
|
+
// return getParentKey(item.key, defaultData)
|
|
449
|
+
// }
|
|
450
|
+
// return null
|
|
451
|
+
// })
|
|
452
|
+
// .filter((item, i, self): item is React.Key => !!(item && self.indexOf(item) === i))
|
|
453
|
+
// setExpandedKeys(newExpandedKeys)
|
|
454
|
+
|
|
455
|
+
// setSearchValue(value)
|
|
456
|
+
setAutoExpandParent(true);
|
|
457
|
+
};
|
|
458
|
+
const onCheck = keys => {
|
|
459
|
+
setSelectedKeys(keys);
|
|
460
|
+
setIsManualUpdate(true);
|
|
461
|
+
};
|
|
462
|
+
const handleAccept = () => {
|
|
463
|
+
const rs1 = updateColumns(propsColumns, selectedKeys);
|
|
464
|
+
triggerChangeKeys?.(selectedKeys);
|
|
465
|
+
triggerChangeColumns?.(rs1, 'columnChoose');
|
|
466
|
+
hide();
|
|
467
|
+
};
|
|
468
|
+
const handleCancel = () => {
|
|
469
|
+
setSelectedKeys(defaultSelectedKeys);
|
|
470
|
+
hide();
|
|
471
|
+
};
|
|
472
|
+
return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Popover, {
|
|
473
|
+
placement: 'bottomLeft',
|
|
474
|
+
content: /*#__PURE__*/React.createElement("div", {
|
|
475
|
+
style: {
|
|
476
|
+
minWidth: 250
|
|
477
|
+
}
|
|
478
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
479
|
+
style: {
|
|
480
|
+
marginBottom: 8
|
|
481
|
+
},
|
|
482
|
+
placeholder: t ? t("Search") : 'Search',
|
|
483
|
+
prefix: /*#__PURE__*/React.createElement(SearchOutlined, null),
|
|
484
|
+
onChange: onChange
|
|
485
|
+
}), /*#__PURE__*/React.createElement(Tree, {
|
|
486
|
+
onExpand: onExpand
|
|
487
|
+
// expandedKeys={expandedKeys}
|
|
488
|
+
,
|
|
489
|
+
autoExpandParent: autoExpandParent
|
|
490
|
+
// treeData={treeData}
|
|
491
|
+
,
|
|
492
|
+
treeData: columns,
|
|
493
|
+
defaultExpandAll: true,
|
|
494
|
+
checkable: true
|
|
495
|
+
// onSelect={(keys, info) => {
|
|
496
|
+
// const key = info.node.key
|
|
497
|
+
//
|
|
498
|
+
// const find = findItemByKey(columns, 'key', key)
|
|
499
|
+
//
|
|
500
|
+
// // const tmpColumn
|
|
501
|
+
//
|
|
502
|
+
// // if (selectedKeys.includes(key as string)) {
|
|
503
|
+
// // const rssss = findKeyPath(columns, key as string)
|
|
504
|
+
// // const rs = selectedKeys.filter(item => !rssss.includes(item));
|
|
505
|
+
// //
|
|
506
|
+
// // setSelectedKeys(rs)
|
|
507
|
+
// // } else {
|
|
508
|
+
//
|
|
509
|
+
// // const rs = [...selectedKeys, keys[0]]
|
|
510
|
+
//
|
|
511
|
+
// // setSelectedKeys(keys)
|
|
512
|
+
// // }
|
|
513
|
+
// }}
|
|
514
|
+
,
|
|
515
|
+
onCheck: keys => onCheck(keys),
|
|
516
|
+
multiple: true,
|
|
517
|
+
checkedKeys: selectedKeys,
|
|
518
|
+
defaultCheckedKeys: selectedKeys
|
|
519
|
+
// defaultCheckedKeys={defaultSelectedKeys}
|
|
520
|
+
,
|
|
521
|
+
selectedKeys: [],
|
|
522
|
+
height: window.innerHeight - 200
|
|
523
|
+
}), /*#__PURE__*/React.createElement(BoxAction, {
|
|
524
|
+
className: 'px-1'
|
|
525
|
+
}, /*#__PURE__*/React.createElement(Button
|
|
526
|
+
// className={classnames('btn-action btn-action-submit', {
|
|
527
|
+
// // disable: !columns.find((item) => item.visible !== false || item.visible)
|
|
528
|
+
// })}
|
|
529
|
+
, {
|
|
530
|
+
onClick: handleAccept
|
|
531
|
+
// disabled={!columns.find((item) => item.visible !== false || item.visible)}
|
|
532
|
+
}, t ? t('OK') : 'OK'), /*#__PURE__*/React.createElement(Button, {
|
|
533
|
+
className: 'btn-action btn-action-cancel',
|
|
534
|
+
onClick: handleCancel
|
|
535
|
+
}, t ? t('Cancel') : 'Cancel'))),
|
|
536
|
+
trigger: "click",
|
|
537
|
+
open: clicked,
|
|
538
|
+
onOpenChange: handleClickChange,
|
|
539
|
+
arrow: false
|
|
540
|
+
}, /*#__PURE__*/React.createElement(Tooltip, {
|
|
541
|
+
arrow: false,
|
|
542
|
+
title: 'Cài đặt'
|
|
543
|
+
}, /*#__PURE__*/React.createElement(SettingOutlined, null))));
|
|
544
|
+
};
|
|
@@ -536,7 +536,8 @@ export const ColumnsChoose = props => {
|
|
|
536
536
|
trigger: "click",
|
|
537
537
|
open: clicked,
|
|
538
538
|
onOpenChange: handleClickChange,
|
|
539
|
-
arrow: false
|
|
539
|
+
arrow: false,
|
|
540
|
+
zIndex: 1065
|
|
540
541
|
}, /*#__PURE__*/React.createElement(Tooltip, {
|
|
541
542
|
arrow: false,
|
|
542
543
|
title: 'Cài đặt'
|
|
@@ -14,6 +14,7 @@ interface EditableCellProps<DataType> extends React.HTMLAttributes<HTMLElement>
|
|
|
14
14
|
indexRow: number;
|
|
15
15
|
indexCol: number;
|
|
16
16
|
rowKey: any;
|
|
17
|
+
cellEditing: any;
|
|
17
18
|
}
|
|
18
19
|
declare const EditableCell: <T>(props: React.PropsWithChildren<EditableCellProps<T>>) => React.JSX.Element;
|
|
19
20
|
export default EditableCell;
|
|
@@ -48,6 +48,7 @@ const EditableCell = props => {
|
|
|
48
48
|
column,
|
|
49
49
|
indexRow,
|
|
50
50
|
indexCol,
|
|
51
|
+
cellEditing,
|
|
51
52
|
...restProps
|
|
52
53
|
} = props;
|
|
53
54
|
const {
|
|
@@ -87,6 +88,9 @@ const EditableCell = props => {
|
|
|
87
88
|
const selectOptions = typeof propsOptions === 'function' ? propsOptions(record, column.dataIndex) : propsOptions;
|
|
88
89
|
const options = validateOption ? validateOption(record, column.dataIndex) : selectOptions ?? [];
|
|
89
90
|
const optionsTree = validateOption ? convertArrayWithIndent(validateOption(record, column.dataIndex)) : selectOptions ? convertArrayWithIndent(selectOptions) : [];
|
|
91
|
+
|
|
92
|
+
// const currt = flatColumns2()
|
|
93
|
+
|
|
90
94
|
switch (editType) {
|
|
91
95
|
case 'date':
|
|
92
96
|
return /*#__PURE__*/React.createElement(DatePicker, {
|
|
@@ -263,15 +267,15 @@ const EditableCell = props => {
|
|
|
263
267
|
const columnsTable = rr.map(colSelect => {
|
|
264
268
|
return {
|
|
265
269
|
title: colSelect.headerTemplate ? colSelect.headerTemplate : t ? t(colSelect.headerText) : colSelect.headerText,
|
|
266
|
-
dataIndex: colSelect.dataIndex,
|
|
270
|
+
dataIndex: colSelect.field ?? colSelect.dataIndex,
|
|
267
271
|
key: colSelect.dataIndex,
|
|
268
272
|
render: colSelect.template ? (text, recd, ind) => /*#__PURE__*/React.createElement(React.Fragment, null, colSelect.template?.({
|
|
269
273
|
value: text,
|
|
270
274
|
rowData: recd,
|
|
271
275
|
column: colSelect,
|
|
272
|
-
field: colSelect.
|
|
276
|
+
field: colSelect.field,
|
|
273
277
|
index: ind,
|
|
274
|
-
[colSelect.
|
|
278
|
+
[colSelect.field]: text
|
|
275
279
|
})) : undefined,
|
|
276
280
|
width: colSelect.width,
|
|
277
281
|
ellipsis: true,
|
|
@@ -319,6 +323,9 @@ const EditableCell = props => {
|
|
|
319
323
|
width: '100%',
|
|
320
324
|
height: '100%'
|
|
321
325
|
},
|
|
326
|
+
defaultOpen: column.field === cellEditing?.column.field
|
|
327
|
+
// autoFocus={true}
|
|
328
|
+
,
|
|
322
329
|
placeholder: t ? t('Select') : 'Select',
|
|
323
330
|
allowClear: column.isClearable ?? false,
|
|
324
331
|
maxTagCount: 'responsive',
|
|
@@ -391,6 +398,10 @@ const EditableCell = props => {
|
|
|
391
398
|
showSearch: true,
|
|
392
399
|
mode: isMulti || selectMode === 'checkbox' ? 'multiple' : undefined,
|
|
393
400
|
valueSelectAble: true,
|
|
401
|
+
defaultOpen: column.field === cellEditing?.column.field
|
|
402
|
+
// autoFocus={true}
|
|
403
|
+
,
|
|
404
|
+
|
|
394
405
|
style: {
|
|
395
406
|
width: '100%',
|
|
396
407
|
height: '100%'
|
|
@@ -440,6 +451,9 @@ const EditableCell = props => {
|
|
|
440
451
|
});
|
|
441
452
|
},
|
|
442
453
|
showSearch: true,
|
|
454
|
+
defaultOpen: column.field === cellEditing?.column.field
|
|
455
|
+
// autoFocus={true}
|
|
456
|
+
,
|
|
443
457
|
mode: isMulti || selectMode === 'checkbox' ? 'multiple' : undefined,
|
|
444
458
|
valueSelectAble: true,
|
|
445
459
|
style: {
|
|
@@ -518,6 +532,9 @@ const EditableCell = props => {
|
|
|
518
532
|
treeData: newTreeData,
|
|
519
533
|
placeholder: t ? t('Select') : 'Select',
|
|
520
534
|
treeDefaultExpandAll: true,
|
|
535
|
+
defaultOpen: column.field === cellEditing?.column.field
|
|
536
|
+
// autoFocus={true}
|
|
537
|
+
,
|
|
521
538
|
virtual: true,
|
|
522
539
|
allowClear: true
|
|
523
540
|
// maxTagTextLength={column?.editSelectSettings?.showItems}
|
|
@@ -552,7 +569,8 @@ const EditableCell = props => {
|
|
|
552
569
|
alignItems: 'center',
|
|
553
570
|
justifyContent: column.align ?? 'left',
|
|
554
571
|
paddingInline: 5,
|
|
555
|
-
height: '100%'
|
|
572
|
+
height: '100%',
|
|
573
|
+
width: '100%'
|
|
556
574
|
}
|
|
557
575
|
}, /*#__PURE__*/React.createElement(Checkbox, {
|
|
558
576
|
checked: Boolean(value)
|