oxform-core 0.1.0 → 0.1.1
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/dist/index.cjs +751 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +443 -0
- package/dist/index.d.ts +443 -0
- package/dist/index.js +747 -0
- package/dist/index.js.map +1 -0
- package/package.json +20 -15
- package/export/index.ts +0 -7
- package/export/schema.ts +0 -1
- package/src/field-api.constants.ts +0 -15
- package/src/field-api.ts +0 -139
- package/src/form-api.ts +0 -84
- package/src/form-api.types.ts +0 -148
- package/src/form-array-field-api.ts +0 -233
- package/src/form-context-api.ts +0 -232
- package/src/form-field-api.ts +0 -174
- package/src/more-types.ts +0 -178
- package/src/tests/array/append.spec.ts +0 -138
- package/src/tests/array/insert.spec.ts +0 -182
- package/src/tests/array/move.spec.ts +0 -175
- package/src/tests/array/prepend.spec.ts +0 -138
- package/src/tests/array/remove.spec.ts +0 -174
- package/src/tests/array/swap.spec.ts +0 -152
- package/src/tests/array/update.spec.ts +0 -148
- package/src/tests/field/change.spec.ts +0 -226
- package/src/tests/field/reset.spec.ts +0 -617
- package/src/tests/field/set-errors.spec.ts +0 -254
- package/src/tests/field-api/field-api.spec.ts +0 -341
- package/src/tests/form-api/reset.spec.ts +0 -535
- package/src/tests/form-api/submit.spec.ts +0 -409
- package/src/types.ts +0 -5
- package/src/utils/get.ts +0 -5
- package/src/utils/testing/sleep.ts +0 -1
- package/src/utils/testing/tests.ts +0 -18
- package/src/utils/update.ts +0 -6
- package/src/utils/validate.ts +0 -8
- package/tsconfig.json +0 -3
- package/tsdown.config.ts +0 -10
- package/vitest.config.ts +0 -3
|
@@ -1,535 +0,0 @@
|
|
|
1
|
-
import { FormApi } from '#form-api';
|
|
2
|
-
import { describe, expect, it } from 'vitest';
|
|
3
|
-
import z from 'zod';
|
|
4
|
-
|
|
5
|
-
const schema = z.object({
|
|
6
|
-
name: z.string(),
|
|
7
|
-
email: z.string().email('Invalid email format'),
|
|
8
|
-
nested: z.object({
|
|
9
|
-
deep: z.object({
|
|
10
|
-
value: z.string(),
|
|
11
|
-
array: z.string().array(),
|
|
12
|
-
}),
|
|
13
|
-
}),
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
const defaultValues = {
|
|
17
|
-
name: 'Default Name',
|
|
18
|
-
email: 'default@example.com',
|
|
19
|
-
nested: {
|
|
20
|
-
deep: {
|
|
21
|
-
value: 'default value',
|
|
22
|
-
array: ['default1', 'default2'],
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const changedValues = {
|
|
28
|
-
name: 'Changed Name',
|
|
29
|
-
email: 'changed@example.com',
|
|
30
|
-
nested: {
|
|
31
|
-
deep: {
|
|
32
|
-
value: 'changed value',
|
|
33
|
-
array: ['changed1', 'changed2', 'changed3'],
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const setup = async ({ values }: { values: z.infer<typeof schema> }) => {
|
|
39
|
-
const form = new FormApi({
|
|
40
|
-
schema,
|
|
41
|
-
defaultValues,
|
|
42
|
-
values,
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
form['~mount']();
|
|
46
|
-
|
|
47
|
-
return { form };
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
describe('resets form values', () => {
|
|
51
|
-
it('should reset all values to defaultValues', async () => {
|
|
52
|
-
const { form } = await setup({ values: changedValues });
|
|
53
|
-
|
|
54
|
-
expect(form.values).toEqual(changedValues);
|
|
55
|
-
|
|
56
|
-
form.reset();
|
|
57
|
-
|
|
58
|
-
expect(form.values).toEqual(defaultValues);
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it('should reset nested values to defaults', async () => {
|
|
62
|
-
const { form } = await setup({ values: defaultValues });
|
|
63
|
-
|
|
64
|
-
form.field.change('nested.deep.value', 'modified nested value');
|
|
65
|
-
form.field.change('nested.deep.array', ['modified1', 'modified2']);
|
|
66
|
-
|
|
67
|
-
expect(form.field.get('nested.deep.value')).toBe('modified nested value');
|
|
68
|
-
expect(form.field.get('nested.deep.array')).toEqual(['modified1', 'modified2']);
|
|
69
|
-
|
|
70
|
-
form.reset();
|
|
71
|
-
|
|
72
|
-
expect(form.field.get('nested.deep.value')).toBe('default value');
|
|
73
|
-
expect(form.field.get('nested.deep.array')).toEqual(['default1', 'default2']);
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
it('should reset to defaultValues regardless of initial values option', async () => {
|
|
77
|
-
const partialValues = {
|
|
78
|
-
name: 'Partial Name',
|
|
79
|
-
email: 'partial@example.com',
|
|
80
|
-
nested: {
|
|
81
|
-
deep: {
|
|
82
|
-
value: 'partial value',
|
|
83
|
-
array: ['partial1'],
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
|
-
const form = new FormApi({
|
|
88
|
-
schema,
|
|
89
|
-
defaultValues,
|
|
90
|
-
values: partialValues,
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
form['~mount']();
|
|
94
|
-
|
|
95
|
-
expect(form.values).toEqual(partialValues);
|
|
96
|
-
|
|
97
|
-
form.field.change('email', 'modified@example.com');
|
|
98
|
-
|
|
99
|
-
form.reset();
|
|
100
|
-
|
|
101
|
-
expect(form.values).toEqual(defaultValues);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
describe('resets field metadata', () => {
|
|
106
|
-
it('should reset all field meta to defaults', async () => {
|
|
107
|
-
const { form } = await setup({ values: defaultValues });
|
|
108
|
-
|
|
109
|
-
form.field.change('name', 'New Name');
|
|
110
|
-
form.field.focus('email');
|
|
111
|
-
form.field.blur('email');
|
|
112
|
-
|
|
113
|
-
expect(form.field.meta('name').dirty).toBe(true);
|
|
114
|
-
expect(form.field.meta('name').touched).toBe(true);
|
|
115
|
-
expect(form.field.meta('email').touched).toBe(true);
|
|
116
|
-
expect(form.field.meta('email').blurred).toBe(true);
|
|
117
|
-
|
|
118
|
-
form.reset();
|
|
119
|
-
|
|
120
|
-
expect(form.field.meta('name').dirty).toBe(false);
|
|
121
|
-
expect(form.field.meta('name').touched).toBe(false);
|
|
122
|
-
expect(form.field.meta('email').touched).toBe(false);
|
|
123
|
-
expect(form.field.meta('email').blurred).toBe(false);
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
it('should reset computed metadata properties', async () => {
|
|
127
|
-
const { form } = await setup({ values: defaultValues });
|
|
128
|
-
|
|
129
|
-
form.field.change('name', 'Modified Name');
|
|
130
|
-
|
|
131
|
-
expect(form.field.meta('name').pristine).toBe(false);
|
|
132
|
-
expect(form.field.meta('name').default).toBe(false);
|
|
133
|
-
|
|
134
|
-
form.reset();
|
|
135
|
-
|
|
136
|
-
expect(form.field.meta('name').pristine).toBe(true);
|
|
137
|
-
expect(form.field.meta('name').default).toBe(true);
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
describe('resets form status', () => {
|
|
142
|
-
it('should reset form status to defaults', async () => {
|
|
143
|
-
const { form } = await setup({ values: defaultValues });
|
|
144
|
-
|
|
145
|
-
const onSuccess = () => {};
|
|
146
|
-
await form.submit(onSuccess)();
|
|
147
|
-
|
|
148
|
-
expect(form.status.submits).toBe(1);
|
|
149
|
-
expect(form.status.submitted).toBe(true);
|
|
150
|
-
expect(form.status.successful).toBe(true);
|
|
151
|
-
expect(form.status.dirty).toBe(true);
|
|
152
|
-
|
|
153
|
-
form.reset();
|
|
154
|
-
|
|
155
|
-
expect(form.status.submits).toBe(0);
|
|
156
|
-
expect(form.status.submitted).toBe(false);
|
|
157
|
-
expect(form.status.successful).toBe(false);
|
|
158
|
-
expect(form.status.dirty).toBe(false);
|
|
159
|
-
expect(form.status.submitting).toBe(false);
|
|
160
|
-
expect(form.status.validating).toBe(false);
|
|
161
|
-
expect(form.status.valid).toBe(true);
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
describe('clears errors', () => {
|
|
166
|
-
it('should clear all field errors', async () => {
|
|
167
|
-
const { form } = await setup({ values: { ...defaultValues, email: 'invalid-email' } });
|
|
168
|
-
|
|
169
|
-
await form.validate();
|
|
170
|
-
|
|
171
|
-
expect(form.field.errors('email')).not.toHaveLength(0);
|
|
172
|
-
|
|
173
|
-
form.reset();
|
|
174
|
-
|
|
175
|
-
expect(form.field.errors('email')).toHaveLength(0);
|
|
176
|
-
expect(form.field.errors('name')).toHaveLength(0);
|
|
177
|
-
expect(form.field.errors('nested.deep.value')).toHaveLength(0);
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
it('should clear errors after making invalid changes and then resetting', async () => {
|
|
181
|
-
const { form } = await setup({ values: defaultValues });
|
|
182
|
-
|
|
183
|
-
form.field.change('email', 'invalid-email');
|
|
184
|
-
|
|
185
|
-
await form.validate();
|
|
186
|
-
|
|
187
|
-
expect(form.field.errors('email')).not.toHaveLength(0);
|
|
188
|
-
|
|
189
|
-
form.reset();
|
|
190
|
-
|
|
191
|
-
expect(form.field.errors('email')).toHaveLength(0);
|
|
192
|
-
expect(form.status.valid).toBe(true);
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
describe('clears refs', () => {
|
|
197
|
-
it('should clear all element references', async () => {
|
|
198
|
-
const { form } = await setup({ values: defaultValues });
|
|
199
|
-
|
|
200
|
-
const nameElement = document.createElement('input');
|
|
201
|
-
const emailElement = document.createElement('input');
|
|
202
|
-
|
|
203
|
-
form.field.register('name')(nameElement);
|
|
204
|
-
form.field.register('email')(emailElement);
|
|
205
|
-
|
|
206
|
-
expect(form.store.state.refs.name).toBe(nameElement);
|
|
207
|
-
expect(form.store.state.refs.email).toBe(emailElement);
|
|
208
|
-
|
|
209
|
-
form.reset();
|
|
210
|
-
|
|
211
|
-
expect(form.store.state.refs.name).toBeUndefined();
|
|
212
|
-
expect(form.store.state.refs.email).toBeUndefined();
|
|
213
|
-
expect(Object.keys(form.store.state.refs)).toHaveLength(0);
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
describe('integration scenarios', () => {
|
|
218
|
-
it('should completely reset form after complex interactions', async () => {
|
|
219
|
-
const { form } = await setup({ values: defaultValues });
|
|
220
|
-
|
|
221
|
-
form.field.change('name', 'Modified Name');
|
|
222
|
-
form.field.change('email', 'invalid-email');
|
|
223
|
-
form.field.focus('nested.deep.value');
|
|
224
|
-
form.field.change('nested.deep.value', 'modified nested');
|
|
225
|
-
form.field.blur('nested.deep.value');
|
|
226
|
-
|
|
227
|
-
const element = document.createElement('input');
|
|
228
|
-
form.field.register('name')(element);
|
|
229
|
-
|
|
230
|
-
const onSuccess = () => {};
|
|
231
|
-
const onError = () => {};
|
|
232
|
-
await form.submit(onSuccess, onError)();
|
|
233
|
-
|
|
234
|
-
expect(form.values.name).toBe('Modified Name');
|
|
235
|
-
expect(form.values.email).toBe('invalid-email');
|
|
236
|
-
expect(form.field.meta('name').dirty).toBe(true);
|
|
237
|
-
expect(form.field.meta('nested.deep.value').blurred).toBe(true);
|
|
238
|
-
expect(form.field.errors('email')).not.toHaveLength(0);
|
|
239
|
-
expect(form.status.submitted).toBe(true);
|
|
240
|
-
expect(form.status.valid).toBe(false);
|
|
241
|
-
expect(form.store.state.refs.name).toBe(element);
|
|
242
|
-
|
|
243
|
-
form.reset();
|
|
244
|
-
|
|
245
|
-
expect(form.values).toEqual(defaultValues);
|
|
246
|
-
expect(form.field.meta('name').dirty).toBe(false);
|
|
247
|
-
expect(form.field.meta('name').touched).toBe(false);
|
|
248
|
-
expect(form.field.meta('nested.deep.value').blurred).toBe(false);
|
|
249
|
-
expect(form.field.errors('email')).toHaveLength(0);
|
|
250
|
-
expect(form.status.submits).toBe(0);
|
|
251
|
-
expect(form.status.submitted).toBe(false);
|
|
252
|
-
expect(form.status.dirty).toBe(false);
|
|
253
|
-
expect(form.status.valid).toBe(true);
|
|
254
|
-
expect(Object.keys(form.store.state.refs)).toHaveLength(0);
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
it('should allow normal form operations after reset', async () => {
|
|
258
|
-
const { form } = await setup({ values: defaultValues });
|
|
259
|
-
|
|
260
|
-
form.field.change('name', 'Modified');
|
|
261
|
-
form.reset();
|
|
262
|
-
|
|
263
|
-
form.field.change('name', 'New Name');
|
|
264
|
-
expect(form.values.name).toBe('New Name');
|
|
265
|
-
expect(form.field.meta('name').dirty).toBe(true);
|
|
266
|
-
|
|
267
|
-
const onSuccess = () => {};
|
|
268
|
-
await form.submit(onSuccess)();
|
|
269
|
-
expect(form.status.successful).toBe(true);
|
|
270
|
-
});
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
describe('reset with arguments', () => {
|
|
274
|
-
describe('custom values', () => {
|
|
275
|
-
it('should reset to custom values when provided', async () => {
|
|
276
|
-
const { form } = await setup({ values: defaultValues });
|
|
277
|
-
|
|
278
|
-
const customValues = {
|
|
279
|
-
name: 'Custom Name',
|
|
280
|
-
email: 'custom@example.com',
|
|
281
|
-
nested: {
|
|
282
|
-
deep: {
|
|
283
|
-
value: 'custom value',
|
|
284
|
-
array: ['custom1', 'custom2'],
|
|
285
|
-
},
|
|
286
|
-
},
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
form.field.change('name', 'Changed Name');
|
|
290
|
-
form.field.change('email', 'changed@example.com');
|
|
291
|
-
|
|
292
|
-
form.reset({ values: customValues });
|
|
293
|
-
|
|
294
|
-
expect(form.values).toEqual(customValues);
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
it('should reset to custom values that replace defaultValues entirely', async () => {
|
|
298
|
-
const { form } = await setup({ values: defaultValues });
|
|
299
|
-
|
|
300
|
-
const customValues = {
|
|
301
|
-
name: 'Custom Name',
|
|
302
|
-
email: 'custom@example.com',
|
|
303
|
-
nested: {
|
|
304
|
-
deep: {
|
|
305
|
-
value: 'custom nested value',
|
|
306
|
-
array: ['custom1'],
|
|
307
|
-
},
|
|
308
|
-
},
|
|
309
|
-
};
|
|
310
|
-
|
|
311
|
-
form.field.change('name', 'Changed Name');
|
|
312
|
-
|
|
313
|
-
form.reset({ values: customValues });
|
|
314
|
-
|
|
315
|
-
expect(form.values.name).toBe('Custom Name');
|
|
316
|
-
expect(form.values.email).toBe('custom@example.com');
|
|
317
|
-
expect(form.values.nested.deep.value).toBe('custom nested value');
|
|
318
|
-
expect(form.values.nested.deep.array).toEqual(['custom1']);
|
|
319
|
-
});
|
|
320
|
-
});
|
|
321
|
-
|
|
322
|
-
describe('custom status', () => {
|
|
323
|
-
it('should reset with custom status values', async () => {
|
|
324
|
-
const { form } = await setup({ values: defaultValues });
|
|
325
|
-
|
|
326
|
-
const onSuccess = () => {};
|
|
327
|
-
await form.submit(onSuccess)();
|
|
328
|
-
|
|
329
|
-
form.reset({
|
|
330
|
-
status: {
|
|
331
|
-
submits: 5,
|
|
332
|
-
dirty: true,
|
|
333
|
-
successful: true,
|
|
334
|
-
},
|
|
335
|
-
});
|
|
336
|
-
|
|
337
|
-
expect(form.status.submits).toBe(5);
|
|
338
|
-
expect(form.status.dirty).toBe(true);
|
|
339
|
-
expect(form.status.successful).toBe(true);
|
|
340
|
-
expect(form.status.submitting).toBe(false);
|
|
341
|
-
expect(form.status.validating).toBe(false);
|
|
342
|
-
});
|
|
343
|
-
|
|
344
|
-
it('should merge custom status with defaults', async () => {
|
|
345
|
-
const { form } = await setup({ values: defaultValues });
|
|
346
|
-
|
|
347
|
-
form.reset({
|
|
348
|
-
status: {
|
|
349
|
-
submits: 3,
|
|
350
|
-
},
|
|
351
|
-
});
|
|
352
|
-
|
|
353
|
-
expect(form.status.submits).toBe(3);
|
|
354
|
-
expect(form.status.dirty).toBe(false);
|
|
355
|
-
expect(form.status.submitting).toBe(false);
|
|
356
|
-
expect(form.status.validating).toBe(false);
|
|
357
|
-
expect(form.status.successful).toBe(false);
|
|
358
|
-
});
|
|
359
|
-
});
|
|
360
|
-
|
|
361
|
-
describe('keep options', () => {
|
|
362
|
-
it('should keep errors when keep.errors is true', async () => {
|
|
363
|
-
const { form } = await setup({ values: defaultValues });
|
|
364
|
-
|
|
365
|
-
form.field.change('email', 'invalid-email');
|
|
366
|
-
await form.validate();
|
|
367
|
-
|
|
368
|
-
expect(form.field.errors('email')).not.toHaveLength(0);
|
|
369
|
-
|
|
370
|
-
form.reset({ keep: { errors: true } });
|
|
371
|
-
|
|
372
|
-
expect(form.field.errors('email')).not.toHaveLength(0);
|
|
373
|
-
expect(form.values).toEqual(defaultValues);
|
|
374
|
-
});
|
|
375
|
-
|
|
376
|
-
it('should keep refs when keep.refs is true', async () => {
|
|
377
|
-
const { form } = await setup({ values: defaultValues });
|
|
378
|
-
|
|
379
|
-
const nameElement = document.createElement('input');
|
|
380
|
-
const emailElement = document.createElement('input');
|
|
381
|
-
form.field.register('name')(nameElement);
|
|
382
|
-
form.field.register('email')(emailElement);
|
|
383
|
-
|
|
384
|
-
form.field.change('name', 'Changed Name');
|
|
385
|
-
|
|
386
|
-
form.reset({ keep: { refs: true } });
|
|
387
|
-
|
|
388
|
-
expect(form.store.state.refs.name).toBe(nameElement);
|
|
389
|
-
expect(form.store.state.refs.email).toBe(emailElement);
|
|
390
|
-
expect(form.values.name).toBe('Default Name');
|
|
391
|
-
});
|
|
392
|
-
|
|
393
|
-
it('should keep fields when keep.fields is true', async () => {
|
|
394
|
-
const { form } = await setup({ values: defaultValues });
|
|
395
|
-
|
|
396
|
-
form.field.change('name', 'New Name');
|
|
397
|
-
form.field.focus('email');
|
|
398
|
-
form.field.blur('email');
|
|
399
|
-
|
|
400
|
-
expect(form.field.meta('name').dirty).toBe(true);
|
|
401
|
-
expect(form.field.meta('name').touched).toBe(true);
|
|
402
|
-
expect(form.field.meta('email').touched).toBe(true);
|
|
403
|
-
expect(form.field.meta('email').blurred).toBe(true);
|
|
404
|
-
|
|
405
|
-
form.reset({ keep: { fields: true } });
|
|
406
|
-
|
|
407
|
-
expect(form.field.meta('name').dirty).toBe(true);
|
|
408
|
-
expect(form.field.meta('name').touched).toBe(true);
|
|
409
|
-
expect(form.field.meta('email').touched).toBe(true);
|
|
410
|
-
expect(form.field.meta('email').blurred).toBe(true);
|
|
411
|
-
expect(form.values.name).toBe('Default Name');
|
|
412
|
-
});
|
|
413
|
-
|
|
414
|
-
it('should keep multiple things when multiple keep options are true', async () => {
|
|
415
|
-
const { form } = await setup({ values: defaultValues });
|
|
416
|
-
|
|
417
|
-
form.field.change('name', 'Changed Name');
|
|
418
|
-
form.field.change('email', 'invalid-email');
|
|
419
|
-
await form.validate();
|
|
420
|
-
|
|
421
|
-
const nameElement = document.createElement('input');
|
|
422
|
-
form.field.register('name')(nameElement);
|
|
423
|
-
|
|
424
|
-
form.reset({
|
|
425
|
-
keep: {
|
|
426
|
-
errors: true,
|
|
427
|
-
refs: true,
|
|
428
|
-
},
|
|
429
|
-
});
|
|
430
|
-
|
|
431
|
-
expect(form.field.errors('email')).not.toHaveLength(0);
|
|
432
|
-
expect(form.store.state.refs.name).toBe(nameElement);
|
|
433
|
-
expect(form.values.name).toBe('Default Name');
|
|
434
|
-
expect(form.field.meta('name').dirty).toBe(false);
|
|
435
|
-
});
|
|
436
|
-
});
|
|
437
|
-
|
|
438
|
-
describe('combined options', () => {
|
|
439
|
-
it('should handle custom values, status, and keep options together', async () => {
|
|
440
|
-
const { form } = await setup({ values: defaultValues });
|
|
441
|
-
|
|
442
|
-
form.field.change('name', 'Changed Name');
|
|
443
|
-
form.field.change('email', 'invalid-email');
|
|
444
|
-
await form.validate();
|
|
445
|
-
|
|
446
|
-
const element = document.createElement('input');
|
|
447
|
-
form.field.register('name')(element);
|
|
448
|
-
|
|
449
|
-
const onError = () => {};
|
|
450
|
-
await form.submit(() => {}, onError)();
|
|
451
|
-
|
|
452
|
-
const customValues = {
|
|
453
|
-
name: 'Reset Name',
|
|
454
|
-
email: 'reset@example.com',
|
|
455
|
-
nested: {
|
|
456
|
-
deep: {
|
|
457
|
-
value: 'reset value',
|
|
458
|
-
array: ['reset1'],
|
|
459
|
-
},
|
|
460
|
-
},
|
|
461
|
-
};
|
|
462
|
-
|
|
463
|
-
form.reset({
|
|
464
|
-
values: customValues,
|
|
465
|
-
status: { submits: 10 },
|
|
466
|
-
keep: { refs: true },
|
|
467
|
-
});
|
|
468
|
-
|
|
469
|
-
expect(form.values).toEqual(customValues);
|
|
470
|
-
expect(form.status.submits).toBe(10);
|
|
471
|
-
expect(form.status.dirty).toBe(false);
|
|
472
|
-
expect(form.store.state.refs.name).toBe(element);
|
|
473
|
-
expect(form.field.errors('email')).toHaveLength(0);
|
|
474
|
-
expect(form.field.meta('name').dirty).toBe(false);
|
|
475
|
-
});
|
|
476
|
-
|
|
477
|
-
it('should work with no options (same as original reset)', async () => {
|
|
478
|
-
const { form } = await setup({ values: defaultValues });
|
|
479
|
-
|
|
480
|
-
form.field.change('name', 'Changed Name');
|
|
481
|
-
form.field.change('email', 'changed@example.com');
|
|
482
|
-
|
|
483
|
-
const element = document.createElement('input');
|
|
484
|
-
form.field.register('name')(element);
|
|
485
|
-
|
|
486
|
-
form.reset();
|
|
487
|
-
|
|
488
|
-
expect(form.values).toEqual(defaultValues);
|
|
489
|
-
expect(form.status.submits).toBe(0);
|
|
490
|
-
expect(form.status.dirty).toBe(false);
|
|
491
|
-
expect(Object.keys(form.store.state.refs)).toHaveLength(0);
|
|
492
|
-
expect(form.field.meta('name').dirty).toBe(false);
|
|
493
|
-
});
|
|
494
|
-
});
|
|
495
|
-
|
|
496
|
-
describe('edge cases', () => {
|
|
497
|
-
it('should handle undefined values gracefully', async () => {
|
|
498
|
-
const { form } = await setup({ values: defaultValues });
|
|
499
|
-
|
|
500
|
-
form.reset({ values: undefined });
|
|
501
|
-
|
|
502
|
-
expect(form.values).toEqual(defaultValues);
|
|
503
|
-
});
|
|
504
|
-
|
|
505
|
-
it('should handle empty keep object', async () => {
|
|
506
|
-
const { form } = await setup({ values: defaultValues });
|
|
507
|
-
|
|
508
|
-
form.field.change('name', 'Changed');
|
|
509
|
-
|
|
510
|
-
form.reset({ keep: {} });
|
|
511
|
-
|
|
512
|
-
expect(form.values.name).toBe('Default Name');
|
|
513
|
-
expect(form.field.meta('name').dirty).toBe(false);
|
|
514
|
-
});
|
|
515
|
-
|
|
516
|
-
it('should handle keep options as false explicitly', async () => {
|
|
517
|
-
const { form } = await setup({ values: defaultValues });
|
|
518
|
-
|
|
519
|
-
form.field.change('email', 'invalid-email');
|
|
520
|
-
await form.validate();
|
|
521
|
-
|
|
522
|
-
form.reset({
|
|
523
|
-
keep: {
|
|
524
|
-
errors: false,
|
|
525
|
-
refs: false,
|
|
526
|
-
fields: false,
|
|
527
|
-
},
|
|
528
|
-
});
|
|
529
|
-
|
|
530
|
-
expect(form.field.errors('email')).toHaveLength(0);
|
|
531
|
-
expect(form.values).toEqual(defaultValues);
|
|
532
|
-
expect(form.field.meta('email').dirty).toBe(false);
|
|
533
|
-
});
|
|
534
|
-
});
|
|
535
|
-
});
|