UNPKG

jb-form

Version:

form web component with extended feature like validation and dirty check

94 lines 3.58 kB
import type { ValidationResult, ValidationResultSummary, WithValidation, ValidationHelper } from "jb-validation"; import { type JBFormWebComponent } from "./jb-form"; import { type VirtualElement } from "./virtual-element"; import type { EventTypeWithTarget } from 'jb-core'; export interface JBFormInputStandards<TValue = string> { disabled: boolean; required: boolean; name: string; value: TValue; /** * @description check if user change the value of component based on value provided from outside and return true if user change a initial value */ readonly isDirty: boolean; initialValue: TValue; } export type TraverseResult<T> = { [key: string]: T; }; export type FormValidationMessages = { [key: string]: string; }; export type FormValidationSummary = { [key: string]: ValidationResultSummary | null; }; export type FormValidationResult = { [key: string]: ValidationResult<any> | null; }; export type FormValues<TValue = any> = { [key: string]: TValue; }; export type ValidationValue = FormValues; export type ExtractFunction<T> = (formElement: Partial<WithValidation & JBFormInputStandards>) => T; export type FormExtractFunction<T> = (formElement: JBFormWebComponent) => T; export type VirtualExtractFunction<T> = (formElement: VirtualElement<any, any>) => T; export type VirtualElementConfig<TValue, TValidationValue> = { /** * @requires * @property name of your virtual element */ name: string; /** * @property jb-validation ValidationHelper instance. if not provided, this virtual element will not be participated in validation methods and results */ validation?: ValidationHelper<TValidationValue>; /** * @property help you spot your virtual elements DOM so you could scroll to, in invalidate cases or use it any other way you see fit. */ dom?: HTMLElement; /** * @property we need your component value for value oriented methods like isDirty */ getValue?: () => TValue; /** * @property function that return true if your component value is changed from initialValue (write deep compare functions of value compare here) */ getDirtyStatus?: () => boolean; /** * @property this callback function will be called in case of form setValue called. */ setValue?: (value: TValue) => void; /** * @property this callback function will be called in case of form setInitialValue called. */ setInitialValue?: (value: TValue) => void; }; export type VirtualElementCallbacks = { onChange: () => void; }; export type JBCheckValidityParameter = { /** * @property in case of error do you want to show it or you just want to get result. true will show error */ showError: boolean; }; export type CheckValidityAsyncResult = { /** * @property result of all validations */ isAllValid: boolean; /** * @property keep validation result of standard jb-validation form elements (nested elements not included) */ elements: Map<HTMLElement & WithValidation, ValidationResult<any>>; /** * @property keep validation result of virtual elements (nested elements not included) */ virtualElements: Map<VirtualElement<any, any>, ValidationResult<any>>; /** * @property keep validation result of sub forms and sub forms (you can access nested elements from here) */ subForms: Map<JBFormWebComponent, CheckValidityAsyncResult>; }; export type JBFormEventType<TEvent> = EventTypeWithTarget<TEvent, JBFormWebComponent>; //# sourceMappingURL=types.d.ts.map