Skip to content

Commit 9f80109

Browse files
committed
fix(frontend/templates): ensure defaults are applied for subsections
1 parent f84673c commit 9f80109

File tree

1 file changed

+42
-2
lines changed
  • packages/frontend/src/hooks/templates

1 file changed

+42
-2
lines changed

packages/frontend/src/hooks/templates/wizard.ts

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)