remix-validated-form
Version:
Form component and utils for easy form validation in remix
344 lines (343 loc) • 20.6 kB
TypeScript
import { FieldErrors, TouchedFields } from "../validation/types";
import { InternalFormId } from "./state/atomUtils";
export declare const ATOM_SCOPE: unique symbol;
export declare type SyncedFormProps = {
formId?: string;
action?: string;
subaction?: string;
defaultValues: {
[fieldName: string]: any;
};
validateField: (fieldName: string) => Promise<string | null>;
registerReceiveFocus: (fieldName: string, handler: () => void) => () => void;
};
export declare const isHydratedAtom: {
(param: InternalFormId): import("jotai").Atom<boolean> & {
write: (get: {
<Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
<Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
<Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
} & {
<Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
unstable_promise: true;
}): Value_3 | Promise<Value_3>;
<Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
unstable_promise: true;
}): Value_4 | Promise<Value_4>;
<Value_5>(atom: import("jotai").Atom<Value_5>, options: {
unstable_promise: true;
}): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
}, set: {
<Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
<Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
}, update: boolean | ((prev: boolean) => boolean)) => void;
onMount?: (<S extends (update: boolean | ((prev: boolean) => boolean)) => void>(setAtom: S) => void | (() => void)) | undefined;
} & {
init: boolean;
};
remove(param: InternalFormId): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
};
export declare const isSubmittingAtom: {
(param: InternalFormId): import("jotai").Atom<boolean> & {
write: (get: {
<Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
<Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
<Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
} & {
<Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
unstable_promise: true;
}): Value_3 | Promise<Value_3>;
<Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
unstable_promise: true;
}): Value_4 | Promise<Value_4>;
<Value_5>(atom: import("jotai").Atom<Value_5>, options: {
unstable_promise: true;
}): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
}, set: {
<Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
<Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
}, update: boolean | ((prev: boolean) => boolean)) => void;
onMount?: (<S extends (update: boolean | ((prev: boolean) => boolean)) => void>(setAtom: S) => void | (() => void)) | undefined;
} & {
init: boolean;
};
remove(param: InternalFormId): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
};
export declare const hasBeenSubmittedAtom: {
(param: InternalFormId): import("jotai").Atom<boolean> & {
write: (get: {
<Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
<Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
<Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
} & {
<Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
unstable_promise: true;
}): Value_3 | Promise<Value_3>;
<Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
unstable_promise: true;
}): Value_4 | Promise<Value_4>;
<Value_5>(atom: import("jotai").Atom<Value_5>, options: {
unstable_promise: true;
}): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
}, set: {
<Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
<Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
}, update: boolean | ((prev: boolean) => boolean)) => void;
onMount?: (<S extends (update: boolean | ((prev: boolean) => boolean)) => void>(setAtom: S) => void | (() => void)) | undefined;
} & {
init: boolean;
};
remove(param: InternalFormId): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
};
export declare const fieldErrorsAtom: {
(param: InternalFormId): import("jotai").Atom<FieldErrors> & {
write: (get: {
<Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
<Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
<Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
} & {
<Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
unstable_promise: true;
}): Value_3 | Promise<Value_3>;
<Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
unstable_promise: true;
}): Value_4 | Promise<Value_4>;
<Value_5>(atom: import("jotai").Atom<Value_5>, options: {
unstable_promise: true;
}): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
}, set: {
<Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
<Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
}, update: FieldErrors | ((prev: FieldErrors) => FieldErrors)) => void;
onMount?: (<S extends (update: FieldErrors | ((prev: FieldErrors) => FieldErrors)) => void>(setAtom: S) => void | (() => void)) | undefined;
} & {
init: FieldErrors;
};
remove(param: InternalFormId): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
};
export declare const touchedFieldsAtom: {
(param: InternalFormId): import("jotai").Atom<TouchedFields> & {
write: (get: {
<Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
<Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
<Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
} & {
<Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
unstable_promise: true;
}): Value_3 | Promise<Value_3>;
<Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
unstable_promise: true;
}): Value_4 | Promise<Value_4>;
<Value_5>(atom: import("jotai").Atom<Value_5>, options: {
unstable_promise: true;
}): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
}, set: {
<Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
<Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
}, update: TouchedFields | ((prev: TouchedFields) => TouchedFields)) => void;
onMount?: (<S extends (update: TouchedFields | ((prev: TouchedFields) => TouchedFields)) => void>(setAtom: S) => void | (() => void)) | undefined;
} & {
init: TouchedFields;
};
remove(param: InternalFormId): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
};
export declare const formPropsAtom: {
(param: InternalFormId): import("jotai").Atom<SyncedFormProps> & {
write: (get: {
<Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
<Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
<Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
} & {
<Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
unstable_promise: true;
}): Value_3 | Promise<Value_3>;
<Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
unstable_promise: true;
}): Value_4 | Promise<Value_4>;
<Value_5>(atom: import("jotai").Atom<Value_5>, options: {
unstable_promise: true;
}): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
}, set: {
<Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
<Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
}, update: SyncedFormProps | ((prev: SyncedFormProps) => SyncedFormProps)) => void;
onMount?: (<S extends (update: SyncedFormProps | ((prev: SyncedFormProps) => SyncedFormProps)) => void>(setAtom: S) => void | (() => void)) | undefined;
} & {
init: SyncedFormProps;
};
remove(param: InternalFormId): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
};
export declare const formElementAtom: {
(param: InternalFormId): import("jotai").Atom<HTMLFormElement | null> & {
write: (get: {
<Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
<Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
<Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
} & {
<Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
unstable_promise: true;
}): Value_3 | Promise<Value_3>;
<Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
unstable_promise: true;
}): Value_4 | Promise<Value_4>;
<Value_5>(atom: import("jotai").Atom<Value_5>, options: {
unstable_promise: true;
}): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
}, set: {
<Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
<Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
}, update: HTMLFormElement | ((prev: HTMLFormElement | null) => HTMLFormElement | null) | null) => void;
onMount?: (<S extends (update: HTMLFormElement | ((prev: HTMLFormElement | null) => HTMLFormElement | null) | null) => void>(setAtom: S) => void | (() => void)) | undefined;
} & {
init: HTMLFormElement | null;
};
remove(param: InternalFormId): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
};
export declare const cleanupFormState: (formId: InternalFormId) => void;
export declare const isValidAtom: {
(param: InternalFormId): import("jotai").Atom<boolean>;
remove(param: InternalFormId): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
};
export declare const startSubmitAtom: {
(param: InternalFormId): import("jotai").Atom<null> & {
write: (get: {
<Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
<Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
<Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
} & {
<Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
unstable_promise: true;
}): Value_3 | Promise<Value_3>;
<Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
unstable_promise: true;
}): Value_4 | Promise<Value_4>;
<Value_5>(atom: import("jotai").Atom<Value_5>, options: {
unstable_promise: true;
}): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
}, set: {
<Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
<Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
}, update: unknown) => void;
onMount?: (<S extends (update?: unknown) => void>(setAtom: S) => void | (() => void)) | undefined;
} & {
init: null;
};
remove(param: InternalFormId): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
};
export declare const endSubmitAtom: {
(param: InternalFormId): import("jotai").Atom<null> & {
write: (get: {
<Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
<Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
<Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
} & {
<Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
unstable_promise: true;
}): Value_3 | Promise<Value_3>;
<Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
unstable_promise: true;
}): Value_4 | Promise<Value_4>;
<Value_5>(atom: import("jotai").Atom<Value_5>, options: {
unstable_promise: true;
}): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
}, set: {
<Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
<Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
}, update: unknown) => void;
onMount?: (<S extends (update?: unknown) => void>(setAtom: S) => void | (() => void)) | undefined;
} & {
init: null;
};
remove(param: InternalFormId): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
};
export declare const setTouchedAtom: {
(param: InternalFormId): import("jotai").Atom<null> & {
write: (get: {
<Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
<Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
<Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
} & {
<Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
unstable_promise: true;
}): Value_3 | Promise<Value_3>;
<Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
unstable_promise: true;
}): Value_4 | Promise<Value_4>;
<Value_5>(atom: import("jotai").Atom<Value_5>, options: {
unstable_promise: true;
}): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
}, set: {
<Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
<Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
}, update: {
field: string;
touched: boolean;
}) => void;
onMount?: (<S extends (update: {
field: string;
touched: boolean;
}) => void>(setAtom: S) => void | (() => void)) | undefined;
} & {
init: null;
};
remove(param: InternalFormId): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
};
export declare const setFieldErrorAtom: {
(param: InternalFormId): import("jotai").Atom<null> & {
write: (get: {
<Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
<Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
<Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
} & {
<Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
unstable_promise: true;
}): Value_3 | Promise<Value_3>;
<Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
unstable_promise: true;
}): Value_4 | Promise<Value_4>;
<Value_5>(atom: import("jotai").Atom<Value_5>, options: {
unstable_promise: true;
}): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
}, set: {
<Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
<Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
}, update: {
field: string;
error: string | undefined;
}) => void;
onMount?: (<S extends (update: {
field: string;
error: string | undefined;
}) => void>(setAtom: S) => void | (() => void)) | undefined;
} & {
init: null;
};
remove(param: InternalFormId): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
};
export declare const fieldTouchedAtom: {
(param: import("./state/atomUtils").FieldAtomKey): import("jotai").WritableAtom<boolean, boolean, void>;
remove(param: import("./state/atomUtils").FieldAtomKey): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: import("./state/atomUtils").FieldAtomKey) => boolean) | null): void;
};
export declare const fieldErrorAtom: {
(param: import("./state/atomUtils").FieldAtomKey): import("jotai").WritableAtom<string, string | undefined, void>;
remove(param: import("./state/atomUtils").FieldAtomKey): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: import("./state/atomUtils").FieldAtomKey) => boolean) | null): void;
};
export declare const fieldDefaultValueAtom: {
(param: import("./state/atomUtils").FieldAtomKey): import("jotai").Atom<any>;
remove(param: import("./state/atomUtils").FieldAtomKey): void;
setShouldRemove(shouldRemove: ((createdAt: number, param: import("./state/atomUtils").FieldAtomKey) => boolean) | null): void;
};