|
1 |
| -import { Divider, Stack, Switch, Tabs, Text, Textarea } from '@mantine/core'; |
| 1 | +import { Switch, Textarea } from '@mantine/core'; |
2 | 2 | import { randomId } from '@mantine/hooks';
|
3 |
| -import { Control, Controller, UseFormWatch, useFieldArray } from 'react-hook-form'; |
4 |
| -import { Plus } from 'tabler-icons-react'; |
| 3 | +import { Control, Controller, UseFormWatch } from 'react-hook-form'; |
| 4 | +import { useTranslation } from 'react-i18next'; |
| 5 | +import { FieldArrayTabs } from '~/components/plugins/editor-components'; |
5 | 6 | import { IColumnConf, ITableConf, ValueType } from '../../type';
|
6 | 7 | import { ColumnField } from './column';
|
7 |
| -import { useTranslation } from 'react-i18next'; |
8 | 8 |
|
9 | 9 | interface IColumnsField {
|
10 | 10 | control: Control<ITableConf, $TSFixMe>;
|
11 | 11 | watch: UseFormWatch<ITableConf>;
|
12 | 12 | }
|
13 | 13 | export const ColumnsField = ({ control, watch }: IColumnsField) => {
|
14 | 14 | const { t } = useTranslation();
|
15 |
| - const { fields, append, remove, update } = useFieldArray({ |
16 |
| - control, |
17 |
| - name: 'columns', |
18 |
| - }); |
19 | 15 |
|
20 |
| - const addColumn = () => { |
| 16 | + const getItem = () => { |
21 | 17 | const id = randomId();
|
22 |
| - append({ |
| 18 | + return { |
23 | 19 | id,
|
24 | 20 | label: id,
|
25 | 21 | align: 'center',
|
26 | 22 | value_field: '',
|
27 | 23 | value_type: ValueType.string,
|
28 | 24 | width: '',
|
29 |
| - } as IColumnConf); |
| 25 | + } as IColumnConf; |
| 26 | + }; |
| 27 | + |
| 28 | + const renderTabName = (field: IColumnConf, index: number) => { |
| 29 | + const n = field.label.trim(); |
| 30 | + return n ? n : index + 1; |
30 | 31 | };
|
31 | 32 |
|
32 | 33 | watch(['columns', 'ignored_column_keys']);
|
@@ -63,38 +64,17 @@ export const ColumnsField = ({ control, watch }: IColumnsField) => {
|
63 | 64 | />
|
64 | 65 | )}
|
65 | 66 | {!use_raw_columns && (
|
66 |
| - <Stack> |
67 |
| - <Tabs |
68 |
| - defaultValue={'0'} |
69 |
| - styles={{ |
70 |
| - tab: { |
71 |
| - paddingTop: '0px', |
72 |
| - paddingBottom: '0px', |
73 |
| - }, |
74 |
| - panel: { |
75 |
| - padding: '0px', |
76 |
| - paddingTop: '6px', |
77 |
| - }, |
78 |
| - }} |
79 |
| - > |
80 |
| - <Tabs.List> |
81 |
| - {fields.map((_item, index) => ( |
82 |
| - <Tabs.Tab key={_item.id} value={index.toString()}> |
83 |
| - {index + 1} |
84 |
| - {/* {field.name.trim() ? field.name : index + 1} */} |
85 |
| - </Tabs.Tab> |
86 |
| - ))} |
87 |
| - <Tabs.Tab onClick={addColumn} value="add"> |
88 |
| - <Plus size={18} color="#228be6" /> |
89 |
| - </Tabs.Tab> |
90 |
| - </Tabs.List> |
91 |
| - {fields.map((column, index) => ( |
92 |
| - <Tabs.Panel key={column.id} value={index.toString()}> |
93 |
| - <ColumnField control={control} watch={watch} index={index} column={column} remove={remove} /> |
94 |
| - </Tabs.Panel> |
95 |
| - ))} |
96 |
| - </Tabs> |
97 |
| - </Stack> |
| 67 | + <FieldArrayTabs<ITableConf, IColumnConf> |
| 68 | + control={control} |
| 69 | + watch={watch} |
| 70 | + name="columns" |
| 71 | + getItem={getItem} |
| 72 | + addButtonText={t('viz.table.column.add')} |
| 73 | + deleteButtonText={t('viz.table.column.delete')} |
| 74 | + renderTabName={renderTabName} |
| 75 | + > |
| 76 | + {({ field, index }) => <ColumnField control={control} watch={watch} index={index} />} |
| 77 | + </FieldArrayTabs> |
98 | 78 | )}
|
99 | 79 | </>
|
100 | 80 | );
|
|
0 commit comments