@furystack/shades-common-components
Version:
38 lines • 1.5 kB
TypeScript
import type { ChildrenList, PartialElement } from '@furystack/shades';
import { ObservableValue } from '@furystack/utils';
import type { InputValidationResult } from './inputs/input.js';
type UnknownFormValidationResult = {
isValid: null;
};
type ValidFormValidationResult = {
isValid: true;
};
type InvalidFormValidationResult = {
isValid: false;
reason: 'validation-failed' | 'input-validation-failed' | 'unknown';
};
type FormValidationResult = ValidFormValidationResult | InvalidFormValidationResult | UnknownFormValidationResult;
export declare class FormService<T> {
validatedFormData: ObservableValue<T | null>;
rawFormData: ObservableValue<{
[k: string]: FormDataEntryValue;
} | null>;
validationResult: ObservableValue<FormValidationResult>;
fieldErrors: ObservableValue<{
[x: string]: {
validationResult: InputValidationResult;
validity: ValidityState;
} | undefined;
}>;
inputs: Set<HTMLInputElement>;
setFieldState: (key: keyof T, validationResult: InputValidationResult, validity: ValidityState) => void;
[Symbol.dispose](): void;
}
type FormProps<T> = {
onSubmit: (formData: T) => void;
onReset?: () => void;
validate: (formData: any) => formData is T;
} & PartialElement<Omit<HTMLFormElement, 'onsubmit' | 'onchange' | 'onreset'>>;
export declare const Form: <T>(props: FormProps<T>, children: ChildrenList) => JSX.Element;
export {};
//# sourceMappingURL=form.d.ts.map