Skip to content

Commit

Permalink
feat(core): support for generics to define validated values (#27)
Browse files Browse the repository at this point in the history
* feat(core): support for generics to define validated values

* refactor(core): rename generics
  • Loading branch information
Mini-ghost authored Jun 23, 2023
1 parent bd0cf37 commit 8596ad0
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions packages/core/src/composables/useForm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,18 @@ export interface FormSubmitHelper<Values extends FormValues> {

export type ValidateMode = 'blur' | 'input' | 'change' | 'submit';

export interface UseFormOptions<Values extends FormValues> {
export interface UseFormOptions<
Values extends FormValues,
ValidatedValues extends FormValues | undefined = undefined,
> {
initialValues: Values;
initialErrors?: FormErrors<Values>;
initialTouched?: FormTouched<Values>;
validateMode?: ValidateMode;
reValidateMode?: ValidateMode;
validateOnMounted?: boolean;
onSubmit: (
values: Values,
values: ValidatedValues extends FormValues ? ValidatedValues : Values,
helper: FormSubmitHelper<Values>,
) => void | Promise<any>;
onInvalid?: (errors: FormErrors<Values>) => void;
Expand Down Expand Up @@ -195,9 +198,10 @@ const emptyTouched: FormTouched<unknown> = {};
* </template>
* ```
*/
export function useForm<Values extends FormValues = FormValues>(
options: UseFormOptions<Values>,
): UseFormReturn<Values> {
export function useForm<
Values extends FormValues = FormValues,
ValidatedValues extends FormValues | undefined = undefined,
>(options: UseFormOptions<Values, ValidatedValues>): UseFormReturn<Values> {
const {
validateOnMounted = false,
validateMode = 'submit',
Expand Down Expand Up @@ -521,7 +525,12 @@ export function useForm<Values extends FormValues = FormValues>(
const isValid = keysOf(errors).length === 0;

if (isValid) {
const maybePromise = onSubmit(deepClone(state.values), submitHelper);
const maybePromise = onSubmit(
deepClone(state.values) as ValidatedValues extends FormValues
? ValidatedValues
: Values,
submitHelper,
);
if (maybePromise == null) {
return;
}
Expand Down

0 comments on commit 8596ad0

Please sign in to comment.