@volverjs/form-vue 1.0.0-beta.26 → 1.0.0-beta.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -58,6 +58,10 @@ const form = createForm({
58
58
  // updateThrottle: number - default 500
59
59
  // continuousValidation: boolean - default false
60
60
  // sideEffects?: (data: any) => void
61
+ // scope?: string - Defines a unique scope for the form instance (singletons)
62
+ // class?: new (data?: any) => Type - Type constructor for form data
63
+ // Example:
64
+ // class: class User { constructor(data?: any) { Object.assign(this, data) } }
61
65
  })
62
66
 
63
67
  app.use(form)
@@ -161,6 +165,8 @@ const { VvForm, VvFormWrapper, VvFormField } = useForm(schema, {
161
165
  // updateThrottle: number - default 500
162
166
  // continuousValidation: boolean - default false
163
167
  // sideEffects?: (formData: any) => void
168
+ // scope?: string
169
+ // class?: new (data?: any) => Type
164
170
  })
165
171
  </script>
166
172
 
@@ -193,7 +199,8 @@ const {
193
199
  VvFormTemplate,
194
200
  formData,
195
201
  status,
196
- errors
202
+ errors,
203
+ wrappers
197
204
  } = useForm(schema, {
198
205
  lazyLoad: true
199
206
  })
@@ -206,7 +213,8 @@ export default {
206
213
  VvFormTemplate,
207
214
  formData,
208
215
  status,
209
- errors
216
+ errors,
217
+ wrappers
210
218
  }
211
219
  ```
212
220
 
@@ -218,13 +226,13 @@ The wrapper status is invalid if at least one of the fields inside it is invalid
218
226
  ```vue
219
227
  <template>
220
228
  <VvForm>
221
- <VvFormWrapper v-slot="{ invalid }">
229
+ <VvFormWrapper v-slot="{ invalid }" name="firstSection">
222
230
  <div class="form-section-1">
223
231
  <span v-if="invalid">There is a validation error</span>
224
232
  <!-- form fields of section 1 -->
225
233
  </div>
226
234
  </VvFormWrapper>
227
- <VvFormWrapper v-slot="{ invalid }">
235
+ <VvFormWrapper v-slot="{ invalid }" name="secondSection">
228
236
  <div class="form-section-2">
229
237
  <span v-if="invalid">There is a validation error</span>
230
238
  <!-- form fields of the section 2 -->
@@ -240,7 +248,7 @@ The wrapper status is invalid if at least one of the fields inside it is invalid
240
248
  <template>
241
249
  <VvForm>
242
250
  <!-- main VvFormWrapper -->
243
- <VvFormWrapper v-slot="{ invalid }">
251
+ <VvFormWrapper v-slot="{ invalid }" name="firstSection">
244
252
  <!-- add VvFormFields to wrapper -->
245
253
  <div class="form-section">
246
254
  <span v-if="invalid">There is a validation error</span>
@@ -257,6 +265,18 @@ The wrapper status is invalid if at least one of the fields inside it is invalid
257
265
  </template>
258
266
  ```
259
267
 
268
+ The `wrappers` map provides access to form wrapper data.
269
+ This allows for better control over form validation state and data management.
270
+
271
+ ```vue
272
+ <script setup>
273
+ const { wrappers } = useForm(schema)
274
+
275
+ // Access wrapper data
276
+ const isFirstSectionInvalid = computed(() => wrappers.get('firstSection').invalid)
277
+ </script>
278
+ ```
279
+
260
280
  ### VvFormField
261
281
 
262
282
  `VvFormField` allow you to render a form field or a [`@volverjs/ui-vue`](https://github.com/volverjs/ui-vue) input component inside a form.
package/dist/VvForm.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { Component, InjectionKey, PropType, SlotsType } from 'vue';
1
+ import { Component, InjectionKey, PropType, SlotsType, UnwrapRef } from 'vue';
2
2
  import { z } from 'zod';
3
- import { FormComponentOptions, FormSchema, FormTemplate, InjectedFormData } from './types';
3
+ import { FormComponentOptions, FormSchema, FormTemplate, InjectedFormData, InjectedFormWrapperData } from './types';
4
4
  import { FormStatus } from './enums';
5
- export declare function defineForm<Schema extends FormSchema, Type, FormTemplateComponent extends Component, FormWrapperComponent extends Component>(schema: Schema, provideKey: InjectionKey<InjectedFormData<Schema, Type>>, options: FormComponentOptions<Schema, Type>, VvFormTemplate: FormTemplateComponent, wrappers: Map<string, FormWrapperComponent>): {
5
+ export declare function defineForm<Schema extends FormSchema, Type, FormTemplateComponent extends Component>(schema: Schema, provideKey: InjectionKey<InjectedFormData<Schema, Type>>, options: FormComponentOptions<Schema, Type>, VvFormTemplate: FormTemplateComponent, wrappers: Map<string, InjectedFormWrapperData<Schema>>): {
6
6
  clear: () => void;
7
7
  errors: import('vue').Ref<z.inferFormattedError<Schema, string> | undefined, z.inferFormattedError<Schema, string> | undefined>;
8
8
  formData: import('vue').Ref<(undefined extends Type ? Partial<z.TypeOf<Schema>> : Type) | undefined, (undefined extends Type ? Partial<z.TypeOf<Schema>> : Type) | undefined>;
@@ -11,7 +11,7 @@ export declare function defineForm<Schema extends FormSchema, Type, FormTemplate
11
11
  readonly: import('vue').Ref<boolean, boolean>;
12
12
  reset: () => void;
13
13
  status: import('vue').Ref<FormStatus | undefined, FormStatus | undefined>;
14
- wrappers: Map<string, FormWrapperComponent>;
14
+ wrappers: Map<string, InjectedFormWrapperData<Schema>>;
15
15
  stopUpdatesWatch: import('vue').WatchStopHandle;
16
16
  submit: () => Promise<boolean>;
17
17
  validate: (value?: (undefined extends Type ? Partial<z.TypeOf<Schema>> : Type) | undefined, fields?: Set<string>) => Promise<boolean>;
@@ -48,7 +48,7 @@ export declare function defineForm<Schema extends FormSchema, Type, FormTemplate
48
48
  stopUpdatesWatch: import('vue').WatchStopHandle;
49
49
  submit: () => Promise<boolean>;
50
50
  validate: (value?: (undefined extends Type ? Partial<z.TypeOf<Schema>> : Type) | undefined, fields?: Set<string>) => Promise<boolean>;
51
- wrappers: Map<string, FormWrapperComponent>;
51
+ wrappers: Map<string, InjectedFormWrapperData<Schema>>;
52
52
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("invalid" | "valid" | "reset" | "submit" | "update:modelValue" | "update:readonly")[], "invalid" | "valid" | "reset" | "submit" | "update:modelValue" | "update:readonly", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
53
53
  continuousValidation: {
54
54
  type: BooleanConstructor;
@@ -85,18 +85,18 @@ export declare function defineForm<Schema extends FormSchema, Type, FormTemplate
85
85
  modelValue: Record<string, any>;
86
86
  }, SlotsType<{
87
87
  default: {
88
- errors: Readonly<import('vue').Ref<import('vue').DeepReadonly<z.inferFormattedError<Schema, string>> | undefined, import('vue').DeepReadonly<z.inferFormattedError<Schema, string>> | undefined>>;
89
- formData: import('vue').Ref<(undefined extends Type ? Partial<z.TypeOf<Schema>> : Type) | undefined, (undefined extends Type ? Partial<z.TypeOf<Schema>> : Type) | undefined>;
88
+ errors: UnwrapRef<Readonly<import('vue').Ref<import('vue').DeepReadonly<z.inferFormattedError<Schema, string>> | undefined, import('vue').DeepReadonly<z.inferFormattedError<Schema, string>> | undefined>>>;
89
+ formData: UnwrapRef<import('vue').Ref<(undefined extends Type ? Partial<z.TypeOf<Schema>> : Type) | undefined, (undefined extends Type ? Partial<z.TypeOf<Schema>> : Type) | undefined>>;
90
+ invalid: UnwrapRef<import('vue').ComputedRef<boolean>>;
91
+ readonly: UnwrapRef<import('vue').Ref<boolean, boolean>>;
92
+ status: UnwrapRef<Readonly<import('vue').Ref<FormStatus | undefined, FormStatus | undefined>>>;
93
+ wrappers: typeof wrappers;
94
+ clear: () => void;
90
95
  ignoreUpdates: import('@vueuse/core').IgnoredUpdater;
91
- invalid: import('vue').ComputedRef<boolean>;
92
- readonly: import('vue').Ref<boolean, boolean>;
93
- status: Readonly<import('vue').Ref<FormStatus | undefined, FormStatus | undefined>>;
96
+ reset: () => void;
94
97
  stopUpdatesWatch: import('vue').WatchStopHandle;
95
98
  submit: () => Promise<boolean>;
96
99
  validate: (value?: (undefined extends Type ? Partial<z.TypeOf<Schema>> : Type) | undefined, fields?: Set<string>) => Promise<boolean>;
97
- clear: () => void;
98
- reset: () => void;
99
- wrappers: typeof wrappers;
100
100
  };
101
101
  }>, {}, {}, "invalid" | "valid" | "reset" | "status" | "readonly" | "clear" | "submit" | "errors" | "tag" | "template" | "validate", import('vue').ComponentProvideOptions, true, {}, any>;
102
102
  };
@@ -122,8 +122,8 @@ export declare function defineFormField<Schema extends FormSchema, Type>(formPro
122
122
  invalid: boolean;
123
123
  invalidLabel?: string[];
124
124
  modelValue: any;
125
- onUpdate: (value: unknown) => void;
126
125
  readonly: boolean;
126
+ onUpdate: (value: unknown) => void;
127
127
  submit?: InjectedFormData<Schema, Type>["submit"];
128
128
  validate?: InjectedFormData<Schema, Type>["validate"];
129
129
  };
@@ -11,12 +11,12 @@ export declare function defineFormWrapper<Schema extends FormSchema, Type>(formP
11
11
  default: undefined;
12
12
  };
13
13
  }>, {
14
- clear: (() => void) | undefined;
15
14
  errors: Readonly<Ref<DeepReadonly<inferFormattedError<Schema, string>> | undefined, DeepReadonly<inferFormattedError<Schema, string>> | undefined>> | undefined;
16
15
  fields: Ref<Map<string, string> & Omit<Map<string, string>, keyof Map<any, any>>, Map<string, string> | (Map<string, string> & Omit<Map<string, string>, keyof Map<any, any>>)>;
17
16
  fieldsErrors: Ref<Map<string, inferFormattedError<Schema, string>>, Map<string, inferFormattedError<Schema, string>>>;
18
17
  formData: Ref<(undefined extends Type ? Partial<z.TypeOf<Schema>> : Type) | undefined, (undefined extends Type ? Partial<z.TypeOf<Schema>> : Type) | undefined> | undefined;
19
18
  invalid: import('vue').ComputedRef<boolean>;
19
+ clear: (() => void) | undefined;
20
20
  reset: (() => void) | undefined;
21
21
  submit: (() => Promise<boolean>) | undefined;
22
22
  validate: ((formData?: (undefined extends Type ? Partial<z.TypeOf<Schema>> : Type) | undefined, fields?: Set<string>) => Promise<boolean>) | undefined;
@@ -38,14 +38,14 @@ export declare function defineFormWrapper<Schema extends FormSchema, Type>(formP
38
38
  }, SlotsType<{
39
39
  default: {
40
40
  errors?: DeepReadonly<z.inferFormattedError<Schema>>;
41
+ fieldsErrors: Map<string, inferFormattedError<Schema, string>>;
41
42
  formData?: undefined extends Type ? Partial<z.infer<Schema>> : Type;
42
43
  formErrors?: DeepReadonly<inferFormattedError<Schema, string>>;
43
44
  invalid: boolean;
45
+ clear?: InjectedFormData<Schema, Type>["clear"];
46
+ reset?: InjectedFormData<Schema, Type>["reset"];
44
47
  submit?: InjectedFormData<Schema, Type>["submit"];
45
48
  validate?: InjectedFormData<Schema, Type>["validate"];
46
49
  validateWrapper?: () => Promise<boolean>;
47
- fieldsErrors: Map<string, inferFormattedError<Schema, string>>;
48
- clear?: InjectedFormData<Schema, Type>["clear"];
49
- reset?: InjectedFormData<Schema, Type>["reset"];
50
50
  };
51
51
  }>, {}, {}, "invalid" | "reset" | "clear" | "submit" | "errors" | "tag" | "validate" | "formData" | "fields" | "fieldsErrors" | "validateWrapper", import('vue').ComponentProvideOptions, true, {}, any>;