import { ComputedRef, VNodeChild } from 'vue'; import { MaybePromise, Narrowable, RemoveNeverProps, UnionToIntersection } from '../../_shared/types/utils'; export type PrimitiveValue = string | boolean | number | null; export type ImportSchemaField = { key: FieldKey; transformKey?: string; label: string; ignoreOnReference?: boolean; multiple?: boolean; multipleSeparator?: string; required?: boolean; matchPattern?: RegExp; caseInsensitive?: boolean; enum?: (PrimitiveValue)[] | (() => MaybePromise); format?: Array<'trim' | 'lowercase' | 'uppercase' | 'number' | 'date'>; transform?: (value: PrimitiveValue) => any; cellRenderer?: (value: string | string[], field: ImportSchemaField) => VNodeChild; } & ({ enum: (PrimitiveValue)[] | (() => MaybePromise); example?: PrimitiveValue; } | { example: PrimitiveValue; }); export type ImportSchema = { fields: ImportSchemaField[]; onData?: (data: Record[]) => MaybePromise[]>; }; export interface ExportColumnsSchema { label: string; value: string | (() => string); } export type ImportInfoReturnType['fields'][number]> = RemoveNeverProps> : ResolveFieldType; } | { [K in T as K extends { required: true; } ? never : K extends { transformKey: string; } ? K['transformKey'] : K['key']]?: K extends { multiple: true; } ? Array> : ResolveFieldType; }>>; export type ResolveFieldType> = T extends { transform: (value: any) => any; } ? ReturnType : T extends { enum: any; } ? ExtractEnumType : T extends { format: infer F; } ? F extends [...any, infer Type] ? Type extends 'number' ? number : Type extends 'date' ? Date : string : string : string; export type ExtractEnumType ? T[number] : T extends (...args: any) => Promise> | Array ? Awaited>[number] : string | number> = V extends { value: unknown; } ? V['value'] : V extends { key: unknown; } ? V['key'] : V; export type ExcelInstanceType = { invalidRows: ComputedRef[]>; validRows: ComputedRef[]>; exportInvalidRows: () => void; downloadReferenceFile: () => void; };