@@ -297,15 +297,55 @@ export function useTemplateWizard({
297297 } else if ( opt . type === 'boolean' ) {
298298 defaults [ opt . id ] = false ;
299299 }
300+ if (
301+ opt . type === 'subsection' &&
302+ Array . isArray ( ( opt as any ) . subOptions )
303+ ) {
304+ const subDefaults : Record < string , any > = { } ;
305+ for ( const sub of ( opt as any ) . subOptions as Option [ ] ) {
306+ if ( sub . default !== undefined ) {
307+ subDefaults [ sub . id ] = sub . default ;
308+ } else if ( sub . type === 'boolean' ) {
309+ subDefaults [ sub . id ] = false ;
310+ }
311+ }
312+ if ( Object . keys ( subDefaults ) . length > 0 ) {
313+ defaults [ opt . id ] = { ...subDefaults , ...( defaults [ opt . id ] ?? { } ) } ;
314+ }
315+ }
300316 }
301317 const saved = getLocalStorageTemplateInputs ( template . metadata . id ) ;
302318
319+ const mergeWithDefaults = (
320+ base : Record < string , any > ,
321+ overrides : Record < string , any >
322+ ) : Record < string , any > => {
323+ const result = { ...base } ;
324+ for ( const key of Object . keys ( overrides ) ) {
325+ if (
326+ overrides [ key ] !== null &&
327+ typeof overrides [ key ] === 'object' &&
328+ ! Array . isArray ( overrides [ key ] ) &&
329+ typeof base [ key ] === 'object' &&
330+ base [ key ] !== null &&
331+ ! Array . isArray ( base [ key ] )
332+ ) {
333+ result [ key ] = { ...base [ key ] , ...overrides [ key ] } ;
334+ } else {
335+ result [ key ] = overrides [ key ] ;
336+ }
337+ }
338+ return result ;
339+ } ;
340+
341+ const initialValues = mergeWithDefaults ( defaults , saved ) ;
342+
303343 const processed = processTemplate ( template , status , userData ) ;
304344 if ( processed . showServiceSelection ) {
305345 setProcessedTemplate ( processed ) ;
306346 setPendingTemplate ( template ) ;
307347 setTemplateInputOptions ( options ) ;
308- setTemplateInputValues ( { ... defaults , ... saved } ) ;
348+ setTemplateInputValues ( initialValues ) ;
309349 setSelectedServices ( [ ] ) ;
310350 setCurrentStep ( 'selectService' ) ;
311351 return ;
@@ -314,7 +354,7 @@ export function useTemplateWizard({
314354 setProcessedTemplate ( null ) ;
315355 setPendingTemplate ( template ) ;
316356 setTemplateInputOptions ( options ) ;
317- setTemplateInputValues ( { ... defaults , ... saved } ) ;
357+ setTemplateInputValues ( initialValues ) ;
318358 setCurrentStep ( 'templateInputs' ) ;
319359 return ;
320360 }
0 commit comments