From 4699ed75c35ca1e8c2a3088b456ee55f0f972a77 Mon Sep 17 00:00:00 2001 From: philippilievskibearingpointcom Date: Fri, 3 Apr 2026 13:23:30 +0200 Subject: [PATCH 1/3] fix(wizard-dialog): handle deep selection of inputs in act method --- packages/openscd/src/wizard-dialog.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/openscd/src/wizard-dialog.ts b/packages/openscd/src/wizard-dialog.ts index b1a5f502a4..e80b96741c 100644 --- a/packages/openscd/src/wizard-dialog.ts +++ b/packages/openscd/src/wizard-dialog.ts @@ -198,6 +198,23 @@ export class WizardDialog extends LitElement { /** Commits `action` if all inputs are valid, reports validity otherwise. */ async act(action?: WizardActor, primary = true): Promise { if (action === undefined) return false; + + const allInputs = dialogInputs(this.dialog); + for (const input of allInputs) { + const root = input.shadowRoot; + if (!root) continue; + let nativeInput = root.querySelector('input'); + if (!nativeInput) { + const inner = root.querySelector('mwc-textfield, mwc-select'); + if (inner?.shadowRoot) { + nativeInput = inner.shadowRoot.querySelector('input'); + } + } + if (nativeInput) { + (input as Element & { value: string }).value = nativeInput.value; + } + } + const wizardInputs = Array.from(this.inputs); const wizardList = ( this.dialog?.querySelector('filtered-list,mwc-list') From 6ee00c9b3f0731c568913b56e8dfc5e236835e16 Mon Sep 17 00:00:00 2001 From: philippilievskibearingpointcom Date: Tue, 7 Apr 2026 14:21:53 +0200 Subject: [PATCH 2/3] fix(wizard-dialog): update input values using ensureValueUpdated method --- packages/openscd/src/wizard-dialog.ts | 17 +++-------------- packages/openscd/src/wizard-textfield.ts | 4 ++++ 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/packages/openscd/src/wizard-dialog.ts b/packages/openscd/src/wizard-dialog.ts index e80b96741c..7780c24890 100644 --- a/packages/openscd/src/wizard-dialog.ts +++ b/packages/openscd/src/wizard-dialog.ts @@ -199,21 +199,10 @@ export class WizardDialog extends LitElement { async act(action?: WizardActor, primary = true): Promise { if (action === undefined) return false; - const allInputs = dialogInputs(this.dialog); - for (const input of allInputs) { - const root = input.shadowRoot; - if (!root) continue; - let nativeInput = root.querySelector('input'); - if (!nativeInput) { - const inner = root.querySelector('mwc-textfield, mwc-select'); - if (inner?.shadowRoot) { - nativeInput = inner.shadowRoot.querySelector('input'); - } + for (const input of dialogInputs(this.dialog)) + if('ensureValueUpdated' in input) { + (input as { ensureValueUpdated(): void }).ensureValueUpdated(); } - if (nativeInput) { - (input as Element & { value: string }).value = nativeInput.value; - } - } const wizardInputs = Array.from(this.inputs); const wizardList = ( diff --git a/packages/openscd/src/wizard-textfield.ts b/packages/openscd/src/wizard-textfield.ts index c690a7111e..779e8bd0b9 100644 --- a/packages/openscd/src/wizard-textfield.ts +++ b/packages/openscd/src/wizard-textfield.ts @@ -149,6 +149,10 @@ export class WizardTextField extends LitElement { (this.multiplierButton as HTMLElement) ?? null; } + ensureValueUpdated(): void { + if (this.textfield) this.value = this.textfield.value; + } + checkValidity(): boolean { if ( this.reservedValues && From c49ba8477006bdeec93078dc814840f23d4e29ea Mon Sep 17 00:00:00 2001 From: philippilievskibearingpointcom Date: Tue, 7 Apr 2026 16:18:20 +0200 Subject: [PATCH 3/3] fix(wizard-dialog): ensure value update for WizardTextField inputs --- packages/openscd/src/wizard-dialog.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/openscd/src/wizard-dialog.ts b/packages/openscd/src/wizard-dialog.ts index 7780c24890..e5d6d330e5 100644 --- a/packages/openscd/src/wizard-dialog.ts +++ b/packages/openscd/src/wizard-dialog.ts @@ -28,6 +28,7 @@ import 'ace-custom-element'; import './wizard-checkbox.js'; import './wizard-textfield.js'; import './wizard-select.js'; +import { WizardTextField } from './wizard-textfield.js'; import { newActionEvent, @@ -200,8 +201,8 @@ export class WizardDialog extends LitElement { if (action === undefined) return false; for (const input of dialogInputs(this.dialog)) - if('ensureValueUpdated' in input) { - (input as { ensureValueUpdated(): void }).ensureValueUpdated(); + if(input instanceof WizardTextField) { + input.ensureValueUpdated(); } const wizardInputs = Array.from(this.inputs);