@@ -316,10 +316,11 @@ export function createForm<T>(options: FormOptions<T>): FormState<T> {
316
316
options . value
317
317
? refFromBind ( options . value as unknown as Bind < FormValue > )
318
318
: createValueRef (
319
- merger . mergeFormDataAndSchemaDefaults (
320
- options . initialValue as FormValue ,
321
- options . schema
322
- )
319
+ merger . mergeFormDataAndSchemaDefaults ( {
320
+ formData : options . initialValue as FormValue ,
321
+ schema : options . schema ,
322
+ initialDefaultsGenerated : false ,
323
+ } )
323
324
)
324
325
) ;
325
326
const errors = $derived (
@@ -383,6 +384,14 @@ export function createForm<T>(options: FormOptions<T>): FormState<T> {
383
384
const isSubmitted = $derived (
384
385
internalHasFieldState ( fieldsStateMap , rootPath , FIELD_SUBMITTED )
385
386
) ;
387
+ let isFirstRender = true
388
+ let initialDefaultsGenerated = $derived . by ( ( ) => {
389
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
390
+ options . schema ;
391
+ const result = isFirstRender
392
+ isFirstRender = false
393
+ return result
394
+ } ) ;
386
395
// STATE END
387
396
388
397
const validateForm : AsyncFormValueValidator [ "validateFormValueAsync" ] =
@@ -500,10 +509,11 @@ export function createForm<T>(options: FormOptions<T>): FormState<T> {
500
509
e . preventDefault ( ) ;
501
510
fieldsStateMap . clear ( ) ;
502
511
errors . clear ( ) ;
503
- valueRef . current = merger . mergeFormDataAndSchemaDefaults (
504
- options . initialValue as FormValue ,
505
- options . schema
506
- ) ;
512
+ valueRef . current = merger . mergeFormDataAndSchemaDefaults ( {
513
+ formData : options . initialValue as FormValue ,
514
+ schema : options . schema ,
515
+ initialDefaultsGenerated : false ,
516
+ } ) ;
507
517
options . onReset ?.( e ) ;
508
518
}
509
519
@@ -514,10 +524,11 @@ export function createForm<T>(options: FormOptions<T>): FormState<T> {
514
524
return getSnapshot ( ) as T | undefined ;
515
525
} ,
516
526
set value ( v ) {
517
- valueRef . current = merger . mergeFormDataAndSchemaDefaults (
518
- v as FormValue ,
519
- options . schema
520
- ) ;
527
+ valueRef . current = merger . mergeFormDataAndSchemaDefaults ( {
528
+ formData : v as FormValue ,
529
+ schema : options . schema ,
530
+ initialDefaultsGenerated : true ,
531
+ } ) ;
521
532
} ,
522
533
get isSubmitted ( ) {
523
534
return isSubmitted ;
@@ -606,10 +617,12 @@ export function createForm<T>(options: FormOptions<T>): FormState<T> {
606
617
let isDefaultsInjectionQueued = false ;
607
618
function injectSchemaDefaults ( ) {
608
619
isDefaultsInjectionQueued = false ;
609
- const nextValue = merger . mergeFormDataAndSchemaDefaults (
610
- valueRef . current ,
611
- options . schema
612
- ) ;
620
+ const nextValue = merger . mergeFormDataAndSchemaDefaults ( {
621
+ formData : valueRef . current ,
622
+ schema : options . schema ,
623
+ initialDefaultsGenerated,
624
+ } ) ;
625
+ initialDefaultsGenerated = true ;
613
626
const change = reconcileSchemaValues ( valueRef . current , nextValue ) ;
614
627
if ( change !== UNCHANGED ) {
615
628
valueRef . current = change ;
0 commit comments