import type { UnknownRecord } from 'type-fest'; import type { JsonFormProps } from '../json-form'; import type ModalComponent from '../modal/modal.vue'; import type { SpinProps } from '../spin'; import type { TableColumnData, TableData, TableInstance } from '../table'; import type { ToolbarProps } from '../toolbar'; export type MaybePromise = T | Promise; export type BasicCrudTableDataResult = TData[] | { data: TData[]; total?: number; count?: number; [key: string]: unknown; }; export type BasicCrudTableTableProps = Omit; export type BasicCrudTableToolbarProps = Omit; export type BasicCrudTableModalProps = Omit['$props'], 'visible' | 'title' | 'onBeforeOk' | 'onClose' | 'onUpdate:visible'>; export type BasicCrudTableModalFormProps = Omit; export interface BasicCrudTableProps { title?: string; columns: TableColumnData[]; tableProps?: BasicCrudTableTableProps; toolbarProps?: BasicCrudTableToolbarProps; spinProps?: SpinProps; modalProps?: BasicCrudTableModalProps; modalFormProps?: BasicCrudTableModalFormProps; fullHeight?: boolean; showCreate?: boolean; openCreateModal?: boolean; showEdit?: boolean; showDelete?: boolean; showToolbar?: boolean; showHeader?: boolean; showTitle?: boolean; showActionColumn?: boolean; fetchExcludeEmptyValues?: boolean; fetchTableOnMounted?: boolean; actionWidth?: number; fetchTableApi?: (params: UnknownRecord) => MaybePromise; tableDataTransformer?: (data: unknown) => MaybePromise>; createApi?: (data: UnknownRecord) => MaybePromise; updateApi?: (data: UnknownRecord) => MaybePromise; detailApi?: (row: TRow) => MaybePromise; valueTransformer?: (data: UnknownRecord) => UnknownRecord; beforeModalSubmit?: (context: BasicCrudTableModalSubmitContext) => MaybePromise; deleteContent?: string | ((row: TRow) => MaybePromise); deleteApi?: (row: TRow) => MaybePromise; beforeDelete?: (row: TRow) => MaybePromise; deleteNameKey?: string; } export type BasicCrudTableModalSubmitContext = { type: 'create' | 'edit'; row?: TRow; model: UnknownRecord; }; export type BasicCrudTableActionSlotProps = { record: TRow; column: TableColumnData; rowIndex: number; }; export type BasicCrudTableModalSlotProps = { type: 'create' | 'edit'; row?: TRow; model: UnknownRecord; }; export type InferBasicCrudTableRowFromValue = TValue extends readonly (infer TItem)[] ? TItem : TValue extends { data: infer TData; } ? InferBasicCrudTableRowFromValue : TValue extends { results: infer TResults; } ? InferBasicCrudTableRowFromValue : never; type AwaitedReturn = T extends (...args: never[]) => infer TResult ? Awaited : never; export type InferBasicCrudTableRow = TTableDataTransformer extends (...args: never[]) => unknown ? InferBasicCrudTableRowFromValue> : InferBasicCrudTableRowFromValue>; export {};