naive-ui
Version:
A Vue 3 Component Library. Fairly Complete, Theme Customizable, Uses TypeScript, Fast
71 lines (70 loc) • 3.26 kB
TypeScript
import type { RuleItem, ValidateError, ValidateMessages, ValidateOption } from 'async-validator';
import type { Ref, VNodeChild } from 'vue';
import type { FormSetupProps } from './Form';
export interface FormRules {
[path: string]: FormRules | FormItemRule | FormItemRule[];
}
type SetRule<T, R> = T extends (rule: any, ...args: infer K) => infer P ? (rule: R, ...args: K) => P : never;
export type FormItemRuleValidatorParams = Parameters<SetRule<NonNullable<RuleItem['validator']>, FormItemRule>>;
export type FormItemRuleValidator = (...args: FormItemRuleValidatorParams) => boolean | Error | Error[] | Promise<void> | undefined;
export type FormItemRuleAsyncValidator = (...args: FormItemRuleValidatorParams) => Promise<void> | undefined;
export type FormItemRule = Omit<RuleItem, 'validator' | 'asyncValidator'> & {
key?: string;
trigger?: ValidationTrigger | string | Array<ValidationTrigger | string>;
validator?: FormItemRuleValidator;
asyncValidator?: FormItemRuleAsyncValidator;
renderMessage?: () => VNodeChild;
level?: 'warning' | 'error';
};
export interface FormItemValidateOptions {
trigger?: ValidationTrigger | string;
callback?: ValidateCallback;
shouldRuleBeApplied?: ShouldRuleBeApplied;
options?: ValidateOption;
}
export interface FormItemInternalValidateResult {
valid: boolean;
errors: ValidateError[] | undefined;
warnings: ValidateError[] | undefined;
}
export type FormItemInternalValidate = (trigger: ValidationTrigger | string | null | undefined, shouldRuleBeApplied?: ShouldRuleBeApplied, options?: ValidateOption) => Promise<FormItemInternalValidateResult>;
export type FormItemValidate = ((options: FormItemValidateOptions) => Promise<{
warnings: ValidateError[] | undefined;
}>) & ((trigger?: string, callback?: ValidateCallback) => Promise<{
warnings: ValidateError[] | undefined;
}>);
export interface FormItemInst {
validate: FormItemValidate;
restoreValidation: () => void;
path?: string;
internalValidate: FormItemInternalValidate;
}
export type FormItemColRef = FormItemInst;
export type FormItemRowRef = FormItemInst;
export interface FormInjection {
props: FormSetupProps;
maxChildLabelWidthRef: Ref<number | undefined>;
deriveMaxChildLabelWidth: (currentWidth: number) => void;
}
export type LabelAlign = 'left' | 'center' | 'right';
export type LabelPlacement = 'left' | 'top';
export type Size = 'small' | 'medium' | 'large';
export type ValidationTrigger = 'input' | 'change' | 'blur' | 'focus';
export type ShouldRuleBeApplied = (rule: FormItemRule) => boolean;
export type ValidateCallback = (errors: ValidateError[] | undefined, extra: {
warnings: ValidateError[] | undefined;
}) => void;
export type FormValidateCallback = (errors: ValidateError[][] | undefined, extra: {
warnings: ValidateError[][] | undefined;
}) => void;
export type FormValidate = (callback?: FormValidateCallback, shouldRuleBeApplied?: ShouldRuleBeApplied) => Promise<{
warnings: ValidateError[][] | undefined;
}>;
export type FormValidationError = ValidateError[];
export interface FormInst {
validate: FormValidate;
restoreValidation: () => void;
}
export interface FormValidateMessages extends ValidateMessages {
}
export {};