@@ -532,6 +532,23 @@ const createFieldPresetSchema = <T extends z.ZodTypeAny>(fieldSchema: T) =>
532
532
)
533
533
} , "Label is required if value is not a string." )
534
534
535
+ const createFieldPresetsSchema = < T extends z . ZodTypeAny > ( fieldSchema : T ) =>
536
+ createFieldPresetSchema ( fieldSchema )
537
+ . array ( )
538
+ . superRefine ( ( arg , ctx ) =>
539
+ refineNoDuplicates (
540
+ arg as { label ?: string ; value : unknown } [ ] ,
541
+ ctx ,
542
+ "label" ,
543
+ ( v : { label ?: string ; value : unknown } ) => {
544
+ if ( typeof v . value === "string" && v . value && ! v . label ) {
545
+ return v . value
546
+ }
547
+ return v . label
548
+ } ,
549
+ ) ,
550
+ )
551
+
535
552
const createFieldArrayPresetSingleSchema = < T extends z . ZodTypeAny > (
536
553
fieldSchema : z . ZodArray < T , any > ,
537
554
) => createFieldPresetSchema ( fieldSchema . element )
@@ -565,48 +582,77 @@ const createFieldArrayPresetMultipleSchema = <T extends z.ZodTypeAny>(
565
582
value : fieldSchema ,
566
583
} )
567
584
568
- function createFieldArrayPresetSchema < T extends z . ZodTypeAny > (
585
+ function createFieldArrayPresetsSchema < T extends z . ZodTypeAny > (
569
586
fieldSchema : z . ZodArray < T , any > ,
570
587
multiple : true ,
571
- ) : ReturnType < typeof createFieldArrayPresetMultipleSchema < T > >
588
+ ) : z . ZodEffects <
589
+ z . ZodArray < ReturnType < typeof createFieldArrayPresetMultipleSchema < T > > >
590
+ >
572
591
573
- function createFieldArrayPresetSchema < T extends z . ZodTypeAny > (
592
+ function createFieldArrayPresetsSchema < T extends z . ZodTypeAny > (
574
593
fieldSchema : z . ZodArray < T , any > ,
575
594
multiple ?: false | undefined ,
576
- ) : ReturnType < typeof createFieldArrayPresetSingleSchema < T > >
595
+ ) : z . ZodEffects <
596
+ z . ZodArray < ReturnType < typeof createFieldArrayPresetSingleSchema < T > > >
597
+ >
577
598
578
- function createFieldArrayPresetSchema < T extends z . ZodTypeAny > (
599
+ function createFieldArrayPresetsSchema < T extends z . ZodTypeAny > (
579
600
fieldSchema : z . ZodArray < T , any > ,
580
601
multiple ?: boolean ,
581
602
) :
582
- | ReturnType < typeof createFieldArrayPresetMultipleSchema < T > >
583
- | ReturnType < typeof createFieldArrayPresetSingleSchema < T > > {
603
+ | z . ZodEffects <
604
+ z . ZodArray < ReturnType < typeof createFieldArrayPresetMultipleSchema < T > > >
605
+ >
606
+ | z . ZodEffects <
607
+ z . ZodArray < ReturnType < typeof createFieldArrayPresetSingleSchema < T > > >
608
+ > {
584
609
if ( multiple ) {
585
610
return createFieldArrayPresetMultipleSchema ( fieldSchema )
611
+ . array ( )
612
+ . superRefine ( ( arg , ctx ) =>
613
+ refineNoDuplicates (
614
+ arg ,
615
+ ctx ,
616
+ "label" ,
617
+ ( v : GetElementType < typeof arg > ) => v . label ,
618
+ ) ,
619
+ )
586
620
} else {
587
621
return createFieldArrayPresetSingleSchema ( fieldSchema )
622
+ . array ( )
623
+ . superRefine ( ( arg , ctx ) =>
624
+ refineNoDuplicates (
625
+ arg as { label ?: string ; value : unknown } [ ] ,
626
+ ctx ,
627
+ "label" ,
628
+ ( v : { label ?: string ; value : unknown } ) => {
629
+ if ( typeof v . value === "string" && v . label === undefined ) {
630
+ return v . value
631
+ }
632
+ return v . label
633
+ } ,
634
+ ) ,
635
+ )
588
636
}
589
637
}
590
638
591
639
export const settingsSchema = z . object ( {
592
640
id : z . number ( ) . int ( ) . optional ( ) ,
593
641
//TODO: Implement creating field preset schemas dynamically
594
642
mfrFieldPresets : z . object ( {
595
- requiredEquipment : createFieldArrayPresetSchema (
643
+ requiredEquipment : createFieldArrayPresetsSchema (
596
644
mfrSchema . shape . requiredEquipment ,
597
- ) . array ( ) ,
598
- compoundingMethod : createFieldPresetSchema (
645
+ ) ,
646
+ compoundingMethod : createFieldPresetsSchema (
599
647
mfrSchema . shape . compoundingMethod ,
600
- ) . array ( ) ,
601
- qualityControls : createFieldArrayPresetSchema (
648
+ ) ,
649
+ qualityControls : createFieldArrayPresetsSchema (
602
650
mfrSchema . shape . qualityControls ,
603
651
true ,
604
- ) . array ( ) ,
605
- packaging : createFieldPresetSchema ( mfrSchema . shape . packaging ) . array ( ) ,
606
- labelling : createFieldArrayPresetSchema ( mfrSchema . shape . labelling ) . array ( ) ,
607
- references : createFieldArrayPresetSchema (
608
- mfrSchema . shape . references ,
609
- ) . array ( ) ,
652
+ ) ,
653
+ packaging : createFieldPresetsSchema ( mfrSchema . shape . packaging ) ,
654
+ labelling : createFieldArrayPresetsSchema ( mfrSchema . shape . labelling ) ,
655
+ references : createFieldArrayPresetsSchema ( mfrSchema . shape . references ) ,
610
656
} ) ,
611
657
} )
612
658
0 commit comments