From d0334dfe90aafabbd030e5f4b7bb00aaf7e10990 Mon Sep 17 00:00:00 2001 From: Alexander Evtushenko Date: Tue, 26 Dec 2023 13:03:29 +0700 Subject: [PATCH] Add `submitCount` and `submitSucceded` to form meta --- packages/core/src/types/FormController.ts | 4 ++++ packages/core/src/types/FormMeta.ts | 3 +++ packages/core/src/utils/lenses.ts | 8 ++++++++ packages/react/src/hooks/useForm.ts | 3 +++ 4 files changed, 18 insertions(+) diff --git a/packages/core/src/types/FormController.ts b/packages/core/src/types/FormController.ts index 56f8c8c..17b3198 100644 --- a/packages/core/src/types/FormController.ts +++ b/packages/core/src/types/FormController.ts @@ -3,6 +3,8 @@ import { formChanged, formErrors, formMeta, + formSubmitCount, + formSubmitSucceded, formSubmitted, formSubmitting, formTouched, @@ -29,6 +31,8 @@ export class FormController { public readonly submitted: L.Lens, boolean> = formSubmitted(); public readonly submitting: L.Lens, boolean> = formSubmitting(); public readonly validating: L.Lens, boolean> = formValidating(); + public readonly submitCount: L.Lens, number> = formSubmitCount(); + public readonly submitSucceded: L.Lens, boolean> = formSubmitSucceded(); private current: FormState; private initial: FormState; diff --git a/packages/core/src/types/FormMeta.ts b/packages/core/src/types/FormMeta.ts index b11e81e..9c53ae2 100644 --- a/packages/core/src/types/FormMeta.ts +++ b/packages/core/src/types/FormMeta.ts @@ -5,4 +5,7 @@ export type FormMeta = { readonly submitted: boolean; readonly submitting: boolean; readonly validating: boolean; + + readonly submitCount: number; + readonly submitSucceded: boolean; }; diff --git a/packages/core/src/utils/lenses.ts b/packages/core/src/utils/lenses.ts index e652274..9fba716 100644 --- a/packages/core/src/utils/lenses.ts +++ b/packages/core/src/utils/lenses.ts @@ -32,6 +32,14 @@ export function formValidating(): L.Lens return pipe(formMeta(), L.prop('validating')); } +export function formSubmitSucceded(): L.Lens, boolean> { + return pipe(formMeta(), L.prop('submitSucceded')); +} + +export function formSubmitCount(): L.Lens, number> { + return pipe(formMeta(), L.prop('submitCount')); +} + export function formValues(): L.Lens, TData> { const form = L.id>(); return pipe(form, L.prop('values')); diff --git a/packages/react/src/hooks/useForm.ts b/packages/react/src/hooks/useForm.ts index ed5f0bc..80c6d6f 100644 --- a/packages/react/src/hooks/useForm.ts +++ b/packages/react/src/hooks/useForm.ts @@ -45,4 +45,7 @@ const DEFAULT_FORM_META: FormMeta = { submitted: false, submitting: false, validating: false, + + submitCount: 0, + submitSucceded: false, };