react-forminate
Version:
React.js + Typescript package that creates dynamic UI forms based on the JSON schema
42 lines (41 loc) • 2.34 kB
TypeScript
import { ValidationPatternType, MessageType, MinType, MaxType, MinLengthType, MaxLengthType, ValidationCustomRuleType } from './primitiveTypes';
export type DateTimePatternType = `${number}-${number}-${number}` | `${number}-${number}-${number}T${number}:${number}:${number}Z` | `${number}-${number}-${number}T${number}:${number}` | `${number}-${number}-${number}T${number}:${number}:${number}` | `${number}-${number}-${number}T${number}:${number}:${number}.${number}Z` | `${number}/${number}/${number}` | `${number}.${number}.${number}` | `${string} ${number}, ${number}` | `${number} ${string} ${number}` | `${number}${number}${number}` | `${number}-${number}` | `${number}:${number}` | `${number}:${number}:${number}` | `${number}/${number}/${number} ${number}:${number}` | `${number}-${number}-${number} ${number}:${number}` | `${number}-${number}-${number} ${number}:${number}:${number}` | `${number}.${number}.${number} ${number}:${number}` | `${string} ${number}, ${number} ${number}:${number}`;
export interface ValidationStrategy {
validate(value: any, rule: ValidationRule, context?: any): ValidationResponseType | Promise<ValidationResponseType>;
}
export interface ValidationRule {
pattern?: ValidationPatternType;
message?: MessageType;
min?: MinType;
max?: MaxType;
minLength?: MinLengthType;
maxLength?: MaxLengthType;
custom?: ValidationCustomRuleType;
type?: "password" | "required" | "email" | "equalTo" | "url" | (string & {});
minDate?: DateTimePatternType;
maxDate?: DateTimePatternType;
minItems?: number;
maxItems?: number;
requireUpperCase?: boolean;
requireLowerCase?: boolean;
requireNumber?: boolean;
requireSpecialChar?: boolean;
specialCharsPattern?: string | RegExp;
caseSensitive?: boolean;
equalTo?: string | ((context: any) => string);
requireAbsolute?: boolean;
requireHttps?: boolean;
allowRelative?: boolean;
validateAs?: "ip" | "ipPort";
}
export interface ValidationResponseType {
isValid: boolean;
message?: string;
}
export type SetErrorsFn = (update: (prev: Record<string, string>) => Record<string, string>) => void;
export type ValidationContext = {
values: Record<string, any>;
touchedFields?: Record<string, boolean>;
forceValidate: boolean;
validateFieldsOnBlur?: boolean;
};