1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| import type { BasicColumn } from '/@/components/Table/src/types/table';
|
| import { h } from 'vue';
|
| import EditableCell from './EditableCell.vue';
|
| interface Params {
| text: string;
| record: Recordable;
| index: number;
| }
|
| export function renderEditCell(column: BasicColumn) {
| return ({ text: value, record, index }: Params) => {
| record.onEdit = async (edit: boolean, submit = false) => {
| if (!submit) {
| record.editable = edit;
| }
|
| if (!edit && submit) {
| const res = await record.onSubmitEdit?.();
| if (res) {
| record.editable = false;
| return true;
| }
| return false;
| }
| // cancel
| if (!edit && !submit) {
| record.onCancelEdit?.();
| }
| return true;
| };
|
| return h(EditableCell, {
| value,
| record,
| column,
| index,
| });
| };
| }
|
| export type EditRecordRow<T = Hash<any>> = {
| onEdit: (editable: boolean, submit?: boolean) => Promise<boolean>;
| editable: boolean;
| onCancel: Fn;
| onSubmit: Fn;
| submitCbs: Fn[];
| cancelCbs: Fn[];
| validCbs: Fn[];
| } & T;
|
|