@@ -7,12 +7,16 @@ import VariableSectionRemove from './VariableSectionRemove';
77// This component assumes it's being used in the deployment step
88export default function KeyValueEntriesSection ( {
99 name,
10+ displayLabel = 'entries' ,
1011 label,
1112 maxEntries,
13+ defaultEntries,
1214} : {
1315 name : string ;
16+ displayLabel ?: string ;
1417 label ?: string ;
1518 maxEntries ?: number ;
19+ defaultEntries ?: { key : string ; value : string } [ ] ;
1620} ) {
1721 const { control, formState, trigger } = useFormContext ( ) ;
1822
@@ -24,7 +28,7 @@ export default function KeyValueEntriesSection({
2428 // Get array-level errors
2529 const key = name . split ( '.' ) [ 1 ] ;
2630 const deploymentErrors = formState . errors . deployment as any ;
27- const arrayError = deploymentErrors ?. [ key ] ;
31+ const errors = deploymentErrors ?. [ key ] ;
2832
2933 return (
3034 < div className = "col gap-4" >
@@ -36,16 +40,35 @@ export default function KeyValueEntriesSection({
3640 ) }
3741
3842 < div className = "col gap-2" >
43+ { ! ! defaultEntries && defaultEntries . length > 0 && (
44+ < >
45+ { defaultEntries . map ( ( entry , index ) => (
46+ < div key = { entry . key } className = "flex gap-3" >
47+ < VariableSectionIndex index = { index } />
48+
49+ < div className = "flex w-full gap-2" >
50+ < StyledInput value = { entry . key } isDisabled />
51+ < StyledInput value = { entry . value } isDisabled />
52+ </ div >
53+
54+ < div className = "invisible" >
55+ < VariableSectionRemove onClick = { ( ) => { } } />
56+ </ div >
57+ </ div >
58+ ) ) }
59+ </ >
60+ ) }
61+
3962 { fields . length === 0 ? (
40- < div className = "text-sm italic text-slate-500" > No entries added yet.</ div >
63+ < div className = "text-sm italic text-slate-500" > No { displayLabel } added yet.</ div >
4164 ) : (
4265 fields . map ( ( field , index ) => {
4366 // Get the error for this specific entry
44- const entryError = arrayError ?. [ index ] ;
67+ const entryError = errors ?. [ index ] ;
4568
4669 return (
47- < div className = "flex gap-3" key = { field . id } >
48- < VariableSectionIndex index = { index } />
70+ < div key = { field . id } className = "flex gap-3" >
71+ < VariableSectionIndex index = { index + ( defaultEntries ?. length ?? 0 ) } />
4972
5073 < div className = "flex w-full gap-2" >
5174 < Controller
@@ -55,7 +78,7 @@ export default function KeyValueEntriesSection({
5578 // Check for specific error on this key input or array-level error
5679 const specificKeyError = entryError ?. key ;
5780 const hasError =
58- ! ! fieldState . error || ! ! specificKeyError || ! ! arrayError ?. root ?. message ;
81+ ! ! fieldState . error || ! ! specificKeyError || ! ! errors ?. root ?. message ;
5982
6083 return (
6184 < StyledInput
@@ -77,8 +100,8 @@ export default function KeyValueEntriesSection({
77100 errorMessage = {
78101 fieldState . error ?. message ||
79102 specificKeyError ?. message ||
80- ( arrayError ?. root ?. message && index === 0
81- ? arrayError . root . message
103+ ( errors ?. root ?. message && index === 0
104+ ? errors . root . message
82105 : undefined )
83106 }
84107 />
0 commit comments