@antdv/pro-utils
Version:
@antdv/pro-utils
149 lines (148 loc) • 6.33 kB
TypeScript
import type { FormInstance, FormProps } from 'ant-design-vue';
import type { NamePath } from 'ant-design-vue/lib/form/interface';
import type { GetRowKey } from 'ant-design-vue/lib/table/interface';
import type { FunctionalComponent, Ref } from 'vue';
import type { AnyObject, Key, VueNode } from '..';
export type RowEditableType = 'single' | 'multiple';
export type RecordKey = Key | Key[];
export declare function recordKeyToString(rowKey: RecordKey): Key;
export interface AddLineOptions {
position?: 'top' | 'bottom';
recordKey?: RecordKey;
newRecordType?: 'dataSource' | 'cache';
parentKey?: RecordKey;
}
export interface NewLineConfig<T> {
defaultValue?: T;
options: AddLineOptions;
}
export type ActionRenderFunction<T> = (row: T, config: ActionRenderConfig<T, NewLineConfig<T>>, defaultDoms: {
save: VueNode;
delete: VueNode;
cancel: VueNode;
}) => VueNode[];
export interface RowEditableConfig<DataType> {
formProps?: Omit<FormProps & {
formRef?: Ref<FormInstance | undefined>;
onInit?: (values: DataType, form: FormInstance) => void;
}, 'onFinish'>;
form?: FormInstance;
type?: RowEditableType;
editableKeys?: Key[];
onChange?: (editableKeys: Key[], editableRows: DataType[] | DataType) => void;
onValuesChange?: (record: DataType, dataSource: DataType[]) => void;
actionRender?: ActionRenderFunction<DataType>;
onSave?: (key: RecordKey, record: DataType & {
index?: number;
}, originRow: DataType & {
index?: number;
}, newLineConfig?: NewLineConfig<DataType>) => Promise<any | void>;
onCancel?: (key: RecordKey, record: DataType & {
index?: number;
}, originRow: DataType & {
index?: number;
}, newLineConfig?: NewLineConfig<DataType>) => Promise<any | void>;
onDelete?: (key: RecordKey, row: DataType & {
index?: number;
}) => Promise<any | void>;
deletePopconfirmMessage?: string;
onlyOneLineEditorAlertMessage?: false | string;
onlyAddOneLineAlertMessage?: false | string;
tableName?: NamePath;
saveText?: string;
cancelText?: string;
deleteText?: string;
getRealIndex?: (record: DataType) => number;
}
export interface ActionTypeText<T> {
deleteText?: VueNode;
cancelText?: VueNode;
saveText?: VueNode;
editorType?: 'Array' | 'Map';
addEditRecord?: (row: T, options?: AddLineOptions) => boolean;
}
export type ActionRenderConfig<T, LineConfig = NewLineConfig<T>> = {
editableKeys?: RowEditableConfig<T>['editableKeys'];
recordKey: RecordKey;
preEditRowRef: Ref<T | null>;
index?: number;
cancelEditable: (key: RecordKey) => void;
onSave: RowEditableConfig<T>['onSave'];
onCancel: RowEditableConfig<T>['onCancel'];
onDelete?: RowEditableConfig<T>['onDelete'];
deletePopconfirmMessage: RowEditableConfig<T>['deletePopconfirmMessage'];
setEditableRowKeys: (value: Key[]) => void;
newLineConfig?: LineConfig;
tableName?: NamePath;
children?: VueNode;
} & ActionTypeText<T>;
export declare function editableRowByKey<RecordType>(keyProps: {
data: RecordType[];
childrenColumnName: string;
getRowKey: GetRowKey<RecordType>;
key: RecordKey;
row: RecordType;
}, action: 'update' | 'top' | 'delete'): RecordType[];
export interface SaveEditableActionRef<T = any> {
save: () => ReturnType<NonNullable<RowEditableConfig<T>['onSave']>> | Promise<void>;
}
export declare const SaveEditableAction: import("vue").DefineSetupFnComponent<SaveEditableActionProps, {}, {}, SaveEditableActionProps & {}, import("vue").PublicProps>;
export interface SaveEditableActionProps extends ActionRenderConfig<any> {
row: any;
children?: any;
}
export declare const DeleteEditableAction: FunctionalComponent<ActionRenderConfig<any> & {
row: any;
}>;
export declare function defaultActionRender<T>(row: T, config: ActionRenderConfig<T, NewLineConfig<T>>): {
save: import("vue/jsx-runtime").JSX.Element;
saveRef: Ref<SaveEditableActionRef<T> | undefined, SaveEditableActionRef<T> | undefined>;
delete: import("vue/jsx-runtime").JSX.Element | undefined;
cancel: import("vue/jsx-runtime").JSX.Element;
};
export declare function useEditableArray<RecordType extends AnyObject>(props: RowEditableConfig<RecordType> & {
getRowKey: GetRowKey<RecordType>;
dataSource: RecordType[];
onValuesChange?: (record: RecordType, dataSource: RecordType[]) => void;
childrenColumnName: string | undefined;
setDataSource: (dataSource: RecordType[]) => void;
}): {
editableKeys: import("vue").ComputedRef<Key[] | undefined>;
setEditableRowKeys: (val: Key[] | undefined) => void;
isEditable: (row: RecordType & {
index: number;
}) => {
recordKey: string;
isEditable: boolean | undefined;
preIsEditable: boolean;
};
actionRender: (row: RecordType & {
index: number;
}) => void | VueNode[];
startEditable: (recordKey: Key, record?: RecordType) => boolean;
cancelEditable: (recordKey: RecordKey, needReTry?: boolean) => Promise<true | undefined>;
addEditRecord: (row: RecordType, options?: AddLineOptions) => boolean;
saveEditable: (recordKey: RecordKey, needReTry?: boolean) => Promise<boolean>;
newLineRecord: Ref<{
defaultValue?: import("vue").UnwrapRef<RecordType> | undefined;
options: {
position?: "top" | "bottom" | undefined;
recordKey?: Key | Key[] | undefined;
newRecordType?: "dataSource" | "cache" | undefined;
parentKey?: Key | Key[] | undefined;
};
} | undefined, NewLineConfig<RecordType> | {
defaultValue?: import("vue").UnwrapRef<RecordType> | undefined;
options: {
position?: "top" | "bottom" | undefined;
recordKey?: Key | Key[] | undefined;
newRecordType?: "dataSource" | "cache" | undefined;
parentKey?: Key | Key[] | undefined;
};
} | undefined>;
preEditableKeys: Readonly<Ref<Key[] | undefined, Key[] | undefined>>;
onValuesChange: (value: RecordType, values: RecordType) => void;
getRealIndex: ((record: RecordType) => number) | undefined;
};
export type UseEditableType = typeof useEditableArray;
export type UseEditableUtilType = ReturnType<UseEditableType>;