@apparently/formular
Version:
Form library for SolidJS
89 lines (88 loc) • 3.37 kB
TypeScript
import { Accessor } from "solid-js";
export declare type FieldValidator = (value: any, values: any) => Promise<string | void>;
declare type FormElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
interface NamePathPart {
value: string | number;
arrayIndex: boolean;
}
declare type Field = {
path: NamePathPart[];
ref?: FormElement;
value: any;
touched: boolean;
errors: string[];
validators: FieldValidator[];
};
declare type Data = {
[key: string]: Field;
};
export interface FormControl {
data: Data;
addField: (name: string, validators: FieldValidator[], defaultValue: any, element?: FormElement) => void;
removeField: (name: string) => void;
touch: (name: string) => void;
isFieldDirty: (name: string) => boolean;
setField: (name: string, value: any, updateElementValue?: boolean) => void;
addError: (name: string, error: string, focus?: boolean) => void;
setFieldRef: (name: string, ref: FormElement) => void;
validate: (name: string) => void;
focus: (name: string) => void;
clearErrors: (name: string) => void;
}
export declare function required(message: string): (value: any) => Promise<string | undefined>;
export declare function FinalValue<T>(data: T): () => T;
export declare function createArrayController<T>(name: string, control: FormControl, validators?: FieldValidator[]): {
errors: Accessor<string[]>;
invalid: Accessor<boolean>;
items: Accessor<T[]>;
add: (item: T) => void;
update: (index: number, newItem: T) => void;
set: (items: T[]) => void;
remove: (index: number) => void;
swap: (a: number, b: number) => void;
};
export declare function createController<T = any>(name: string, control: FormControl, validators?: FieldValidator[], defaultValue?: any): {
value: Accessor<T>;
ref: (el: FormElement) => void;
touched: Accessor<boolean>;
dirty: Accessor<boolean>;
errors: Accessor<string[]>;
change: (newValue: T, validateOnChange?: boolean, updateRefValue?: boolean) => void;
onFocus: () => void;
onBlur: () => void;
focus: () => void;
invalid: Accessor<boolean>;
trigger: () => void;
addError: (error: string, focus?: boolean) => void;
clearErrors: () => void;
};
export declare function createForm<T extends {
[name: string]: any;
}>(): {
reset: () => void;
handleSubmit: (callback: (data: T) => void) => (event: SubmitEvent) => Promise<void>;
control: FormControl;
focus: (name: string) => void;
field: (name: string, validators?: FieldValidator[]) => {
onInput: (e: any) => void;
onFocus: (e: any) => void;
onBlur: (e: any) => void;
name: string;
ref: (element: FormElement) => void;
};
addError: (name: string, error: string, focus?: boolean) => void;
setValues: (values: Partial<T>) => void;
setInitialValues: (values: Partial<T>) => void;
setField: (name: string, value: any, updateElementValue?: boolean) => void;
trigger: (name?: string | string[], focusOnError?: boolean) => Promise<boolean>;
clearErrors: (name?: string | string[]) => void;
values: Accessor<any>;
isValid: Accessor<boolean>;
isDirty: Accessor<boolean>;
touched: Accessor<any>;
dirty: Accessor<{
[name: string]: boolean;
}>;
errors: Accessor<any>;
};
export {};