From 520f560f2f3393701c44c3a92a3b16617e4332b5 Mon Sep 17 00:00:00 2001 From: Grant Ellsworth Date: Thu, 2 Apr 2026 21:02:47 +0000 Subject: [PATCH 01/13] fix flowType in config subentry flows/next_flow --- src/dialogs/config-flow/show-dialog-sub-config-flow.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/dialogs/config-flow/show-dialog-sub-config-flow.ts b/src/dialogs/config-flow/show-dialog-sub-config-flow.ts index 30cbdac2efaf..0c49382e100e 100644 --- a/src/dialogs/config-flow/show-dialog-sub-config-flow.ts +++ b/src/dialogs/config-flow/show-dialog-sub-config-flow.ts @@ -39,6 +39,9 @@ export const showSubConfigFlowDialog = ( }, fetchFlow: async (hass, flowId) => { const step = await fetchSubConfigFlow(hass, flowId); + if (flowType !== step.handler[1]) { + flowType = step.handler[1]; + } await hass.loadFragmentTranslation("config"); await hass.loadBackendTranslation( "config_subentries", From 75f71ebadfd5c23fb52493f6ba3294d0c962e455 Mon Sep 17 00:00:00 2001 From: Grant Ellsworth Date: Mon, 6 Apr 2026 15:35:41 +0000 Subject: [PATCH 02/13] suggested changes --- src/dialogs/config-flow/dialog-data-entry-flow.ts | 2 +- src/dialogs/config-flow/show-dialog-sub-config-flow.ts | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/dialogs/config-flow/dialog-data-entry-flow.ts b/src/dialogs/config-flow/dialog-data-entry-flow.ts index d9bca76b247d..68b8804214a1 100644 --- a/src/dialogs/config-flow/dialog-data-entry-flow.ts +++ b/src/dialogs/config-flow/dialog-data-entry-flow.ts @@ -516,7 +516,7 @@ class DataEntryFlowDialog extends LitElement { } } else if (_step.next_flow[0] === "config_subentries_flow") { if (_step.type === "create_entry") { - showSubConfigFlowDialog(this, _step.result!, _step.next_flow[0], { + showSubConfigFlowDialog(this, _step.result!, "", { continueFlowId: _step.next_flow[1], navigateToResult: this._params!.navigateToResult, dialogClosedCallback: this._params!.dialogClosedCallback, diff --git a/src/dialogs/config-flow/show-dialog-sub-config-flow.ts b/src/dialogs/config-flow/show-dialog-sub-config-flow.ts index 0c49382e100e..5821ea53dab8 100644 --- a/src/dialogs/config-flow/show-dialog-sub-config-flow.ts +++ b/src/dialogs/config-flow/show-dialog-sub-config-flow.ts @@ -39,9 +39,7 @@ export const showSubConfigFlowDialog = ( }, fetchFlow: async (hass, flowId) => { const step = await fetchSubConfigFlow(hass, flowId); - if (flowType !== step.handler[1]) { - flowType = step.handler[1]; - } + flowType = (step.handler as unknown as [string, string])[1]; await hass.loadFragmentTranslation("config"); await hass.loadBackendTranslation( "config_subentries", From 06cfc004ca8c5172eb54b0b30db82a90a2ef8760 Mon Sep 17 00:00:00 2001 From: Grant Ellsworth Date: Fri, 17 Apr 2026 14:55:32 +0000 Subject: [PATCH 03/13] Repair Flow Next Flow Repair --- src/data/data_entry_flow.ts | 4 ++++ src/dialogs/config-flow/dialog-data-entry-flow.ts | 8 ++++++++ src/dialogs/config-flow/show-dialog-data-entry-flow.ts | 1 + src/panels/config/repairs/show-dialog-repair-flow.ts | 5 +++-- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/data/data_entry_flow.ts b/src/data/data_entry_flow.ts index 5a0aa7a66c7a..bcfc126b1c78 100644 --- a/src/data/data_entry_flow.ts +++ b/src/data/data_entry_flow.ts @@ -1,6 +1,7 @@ import type { Connection } from "home-assistant-js-websocket"; import type { HaFormSchema } from "../components/ha-form/types"; import type { ConfigEntry } from "./config_entries"; +import type { RepairsIssue } from "./repairs"; export type FlowType = | "config_flow" @@ -67,6 +68,7 @@ export interface DataEntryFlowStepCreateEntry { handler: string; title: string; result?: ConfigEntry; + issue?: RepairsIssue; description: string; description_placeholders?: Record; translation_domain?: string; @@ -79,6 +81,8 @@ export interface DataEntryFlowStepAbort { reason: string; description_placeholders?: Record; translation_domain?: string; + result?: ConfigEntry; + issue?: RepairsIssue; next_flow?: [FlowType, string]; // [flow_type, flow_id] } diff --git a/src/dialogs/config-flow/dialog-data-entry-flow.ts b/src/dialogs/config-flow/dialog-data-entry-flow.ts index 68b8804214a1..643ecc5da762 100644 --- a/src/dialogs/config-flow/dialog-data-entry-flow.ts +++ b/src/dialogs/config-flow/dialog-data-entry-flow.ts @@ -25,6 +25,7 @@ import type { } from "./show-dialog-data-entry-flow"; import { showOptionsFlowDialog } from "./show-dialog-options-flow"; import { showSubConfigFlowDialog } from "./show-dialog-sub-config-flow"; +import { showRepairsFlowDialog } from "../../panels/config/repairs/show-dialog-repair-flow"; import "./step-flow-abort"; import "./step-flow-create-entry"; import "./step-flow-external"; @@ -176,6 +177,7 @@ class DataEntryFlowDialog extends LitElement { flowFinished, entryId: "result" in this._step ? this._step.result?.entry_id : undefined, + issueId: "issue" in this._step ? this._step.issue?.issue_id : undefined, }); } @@ -522,6 +524,12 @@ class DataEntryFlowDialog extends LitElement { dialogClosedCallback: this._params!.dialogClosedCallback, }); } + } else if (_step.next_flow[0] === "repair_flow") { + showRepairsFlowDialog(this, _step.issue!, { + continueFlowId: _step.next_flow[1], + navigateToResult: this._params!.navigateToResult, + dialogClosedCallback: this._params!.dialogClosedCallback, + }); } else { this.closeDialog(); showAlertDialog(this, { diff --git a/src/dialogs/config-flow/show-dialog-data-entry-flow.ts b/src/dialogs/config-flow/show-dialog-data-entry-flow.ts index 9da48d31ff04..0615687e5af7 100644 --- a/src/dialogs/config-flow/show-dialog-data-entry-flow.ts +++ b/src/dialogs/config-flow/show-dialog-data-entry-flow.ts @@ -165,6 +165,7 @@ export interface DataEntryFlowDialogParams { dialogClosedCallback?: (params: { flowFinished: boolean; entryId?: string; + issueId?: string; }) => void; flowConfig: FlowConfig; showAdvanced?: boolean; diff --git a/src/panels/config/repairs/show-dialog-repair-flow.ts b/src/panels/config/repairs/show-dialog-repair-flow.ts index 2b2998e780fe..f11497afcba6 100644 --- a/src/panels/config/repairs/show-dialog-repair-flow.ts +++ b/src/panels/config/repairs/show-dialog-repair-flow.ts @@ -8,6 +8,7 @@ import { fetchRepairsFlow, handleRepairsFlowStep, } from "../../../data/repairs"; +import type { DataEntryFlowDialogParams } from "../../../dialogs/config-flow/show-dialog-data-entry-flow"; import { loadDataEntryFlowDialog, showFlowDialog, @@ -36,14 +37,14 @@ export const loadRepairFlowDialog = loadDataEntryFlowDialog; export const showRepairsFlowDialog = ( element: HTMLElement, issue: RepairsIssue, - dialogClosedCallback?: (params: { flowFinished: boolean }) => void + dialogParams?: Omit ): void => showFlowDialog( element, { startFlowHandler: issue.domain, domain: issue.domain, - dialogClosedCallback, + ...dialogParams, }, { flowType: "repair_flow", From ccb5bf405d4dd36f435d6400d646227857d3264a Mon Sep 17 00:00:00 2001 From: Grant Ellsworth Date: Fri, 17 Apr 2026 15:41:04 +0000 Subject: [PATCH 04/13] Add repair flow support a new repair flow as the next_flow --- src/dialogs/config-flow/dialog-data-entry-flow.ts | 1 - src/dialogs/config-flow/show-dialog-data-entry-flow.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/src/dialogs/config-flow/dialog-data-entry-flow.ts b/src/dialogs/config-flow/dialog-data-entry-flow.ts index 643ecc5da762..89aa4e972dc5 100644 --- a/src/dialogs/config-flow/dialog-data-entry-flow.ts +++ b/src/dialogs/config-flow/dialog-data-entry-flow.ts @@ -177,7 +177,6 @@ class DataEntryFlowDialog extends LitElement { flowFinished, entryId: "result" in this._step ? this._step.result?.entry_id : undefined, - issueId: "issue" in this._step ? this._step.issue?.issue_id : undefined, }); } diff --git a/src/dialogs/config-flow/show-dialog-data-entry-flow.ts b/src/dialogs/config-flow/show-dialog-data-entry-flow.ts index 0615687e5af7..9da48d31ff04 100644 --- a/src/dialogs/config-flow/show-dialog-data-entry-flow.ts +++ b/src/dialogs/config-flow/show-dialog-data-entry-flow.ts @@ -165,7 +165,6 @@ export interface DataEntryFlowDialogParams { dialogClosedCallback?: (params: { flowFinished: boolean; entryId?: string; - issueId?: string; }) => void; flowConfig: FlowConfig; showAdvanced?: boolean; From 1cb5f540e393b1115aa1fb3cc19fe292cebd18f9 Mon Sep 17 00:00:00 2001 From: Grant Ellsworth Date: Mon, 27 Apr 2026 16:23:29 +0000 Subject: [PATCH 05/13] Add support for the next_flow being another repair flow --- src/data/data_entry_flow.ts | 6 +-- .../config-flow/dialog-data-entry-flow.ts | 41 ++++++++++--------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/data/data_entry_flow.ts b/src/data/data_entry_flow.ts index bcfc126b1c78..59f98e2398e2 100644 --- a/src/data/data_entry_flow.ts +++ b/src/data/data_entry_flow.ts @@ -67,8 +67,7 @@ export interface DataEntryFlowStepCreateEntry { next_flow?: [FlowType, string]; // [flow_type, flow_id] handler: string; title: string; - result?: ConfigEntry; - issue?: RepairsIssue; + result?: ConfigEntry | RepairsIssue; description: string; description_placeholders?: Record; translation_domain?: string; @@ -81,8 +80,7 @@ export interface DataEntryFlowStepAbort { reason: string; description_placeholders?: Record; translation_domain?: string; - result?: ConfigEntry; - issue?: RepairsIssue; + result?: ConfigEntry | RepairsIssue; next_flow?: [FlowType, string]; // [flow_type, flow_id] } diff --git a/src/dialogs/config-flow/dialog-data-entry-flow.ts b/src/dialogs/config-flow/dialog-data-entry-flow.ts index 89aa4e972dc5..9e64c1a30154 100644 --- a/src/dialogs/config-flow/dialog-data-entry-flow.ts +++ b/src/dialogs/config-flow/dialog-data-entry-flow.ts @@ -8,12 +8,14 @@ import type { HASSDomEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event"; import "../../components/ha-dialog"; import "../../components/ha-icon-button"; +import type { ConfigEntry } from "../../data/config_entries"; import type { DataEntryFlowStep } from "../../data/data_entry_flow"; import { subscribeDataEntryFlowProgress, subscribeDataEntryFlowProgressed, } from "../../data/data_entry_flow"; import type { DeviceRegistryEntry } from "../../data/device/device_registry"; +import type { RepairsIssue } from "../../data/repairs"; import { haStyleDialog } from "../../resources/styles"; import type { HomeAssistant } from "../../types"; import { documentationUrl } from "../../util/documentation-url"; @@ -176,7 +178,9 @@ class DataEntryFlowDialog extends LitElement { this._params.dialogClosedCallback({ flowFinished, entryId: - "result" in this._step ? this._step.result?.entry_id : undefined, + "result" in this._step + ? (this._step.result as ConfigEntry)?.entry_id + : undefined, }); } @@ -236,7 +240,7 @@ class DataEntryFlowDialog extends LitElement { const devicesLength = this._devices( this._params.flowConfig.showDevices, Object.values(this.hass.devices), - this._step.result?.entry_id, + (this._step.result as ConfigEntry)?.entry_id, this._params.carryOverDevices ).length; return this.hass.localize( @@ -423,7 +427,8 @@ class DataEntryFlowDialog extends LitElement { .devices=${this._devices( this._params.flowConfig.showDevices, Object.values(this.hass.devices), - this._step.result?.entry_id, + (this._step.result as ConfigEntry) + ?.entry_id, this._params.carryOverDevices )} > @@ -502,29 +507,27 @@ class DataEntryFlowDialog extends LitElement { carryOverDevices: this._devices( this._params!.flowConfig.showDevices, Object.values(this.hass.devices), - _step.type === "create_entry" ? _step.result?.entry_id : undefined, + _step.type === "create_entry" + ? (_step.result as ConfigEntry)?.entry_id + : undefined, this._params!.carryOverDevices ).map((device) => device.id), dialogClosedCallback: this._params!.dialogClosedCallback, }); } else if (_step.next_flow[0] === "options_flow") { - if (_step.type === "create_entry") { - showOptionsFlowDialog(this, _step.result!, { - continueFlowId: _step.next_flow[1], - navigateToResult: this._params!.navigateToResult, - dialogClosedCallback: this._params!.dialogClosedCallback, - }); - } + showOptionsFlowDialog(this, (_step.result as ConfigEntry)!, { + continueFlowId: _step.next_flow[1], + navigateToResult: this._params!.navigateToResult, + dialogClosedCallback: this._params!.dialogClosedCallback, + }); } else if (_step.next_flow[0] === "config_subentries_flow") { - if (_step.type === "create_entry") { - showSubConfigFlowDialog(this, _step.result!, "", { - continueFlowId: _step.next_flow[1], - navigateToResult: this._params!.navigateToResult, - dialogClosedCallback: this._params!.dialogClosedCallback, - }); - } + showSubConfigFlowDialog(this, (_step.result as ConfigEntry)!, "", { + continueFlowId: _step.next_flow[1], + navigateToResult: this._params!.navigateToResult, + dialogClosedCallback: this._params!.dialogClosedCallback, + }); } else if (_step.next_flow[0] === "repair_flow") { - showRepairsFlowDialog(this, _step.issue!, { + showRepairsFlowDialog(this, (_step.result as RepairsIssue)!, { continueFlowId: _step.next_flow[1], navigateToResult: this._params!.navigateToResult, dialogClosedCallback: this._params!.dialogClosedCallback, From 0ea977c0a9e674a2162e0e85ec24d20556ab5faf Mon Sep 17 00:00:00 2001 From: Grant Ellsworth Date: Wed, 20 May 2026 22:17:57 +0000 Subject: [PATCH 06/13] fix lint errors --- src/data/data_entry_flow.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/data/data_entry_flow.ts b/src/data/data_entry_flow.ts index 59f98e2398e2..b12b55a392a0 100644 --- a/src/data/data_entry_flow.ts +++ b/src/data/data_entry_flow.ts @@ -60,14 +60,16 @@ export interface DataEntryFlowStepExternal { translation_domain?: string; } -export interface DataEntryFlowStepCreateEntry { +export interface DataEntryFlowStepCreateEntry< + T extends ConfigEntry | RepairsIssue = ConfigEntry, +> { type: "create_entry"; version: number; flow_id: string; next_flow?: [FlowType, string]; // [flow_type, flow_id] handler: string; title: string; - result?: ConfigEntry | RepairsIssue; + result?: T; description: string; description_placeholders?: Record; translation_domain?: string; From ade7bccf8f6e42ded74d87041f5e03c03034097a Mon Sep 17 00:00:00 2001 From: Grant Ellsworth Date: Thu, 21 May 2026 16:10:53 +0000 Subject: [PATCH 07/13] Reviewer response and fix linter error --- src/data/data_entry_flow.ts | 6 ++---- src/dialogs/config-flow/dialog-data-entry-flow.ts | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/data/data_entry_flow.ts b/src/data/data_entry_flow.ts index b12b55a392a0..59f98e2398e2 100644 --- a/src/data/data_entry_flow.ts +++ b/src/data/data_entry_flow.ts @@ -60,16 +60,14 @@ export interface DataEntryFlowStepExternal { translation_domain?: string; } -export interface DataEntryFlowStepCreateEntry< - T extends ConfigEntry | RepairsIssue = ConfigEntry, -> { +export interface DataEntryFlowStepCreateEntry { type: "create_entry"; version: number; flow_id: string; next_flow?: [FlowType, string]; // [flow_type, flow_id] handler: string; title: string; - result?: T; + result?: ConfigEntry | RepairsIssue; description: string; description_placeholders?: Record; translation_domain?: string; diff --git a/src/dialogs/config-flow/dialog-data-entry-flow.ts b/src/dialogs/config-flow/dialog-data-entry-flow.ts index c098fc43487c..ee6e6818c09e 100644 --- a/src/dialogs/config-flow/dialog-data-entry-flow.ts +++ b/src/dialogs/config-flow/dialog-data-entry-flow.ts @@ -531,7 +531,7 @@ class DataEntryFlowDialog extends LitElement { const devices = this._devices( this._params!.flowConfig.showDevices, Object.values(this.hass.devices), - this._step.result?.entry_id, + (this._step.result as ConfigEntry)?.entry_id, this._params!.carryOverDevices ); From 3ee48265fbecf95af2f2c6d03b218abdecd24be4 Mon Sep 17 00:00:00 2001 From: Grant Ellsworth Date: Thu, 21 May 2026 17:37:49 +0000 Subject: [PATCH 08/13] Revert to generics to avoid multiple casts --- src/data/data_entry_flow.ts | 12 ++++++---- .../config-flow/dialog-data-entry-flow.ts | 22 ++++++++++--------- .../config-flow/step-flow-create-entry.ts | 6 +++-- .../entity-registry-settings-editor.ts | 4 ++-- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/data/data_entry_flow.ts b/src/data/data_entry_flow.ts index 59f98e2398e2..158ce9d5df7d 100644 --- a/src/data/data_entry_flow.ts +++ b/src/data/data_entry_flow.ts @@ -60,27 +60,31 @@ export interface DataEntryFlowStepExternal { translation_domain?: string; } -export interface DataEntryFlowStepCreateEntry { +export interface DataEntryFlowStepCreateEntry< + Tresult extends ConfigEntry | RepairsIssue = ConfigEntry, +> { type: "create_entry"; version: number; flow_id: string; next_flow?: [FlowType, string]; // [flow_type, flow_id] handler: string; title: string; - result?: ConfigEntry | RepairsIssue; + result?: Tresult; description: string; description_placeholders?: Record; translation_domain?: string; } -export interface DataEntryFlowStepAbort { +export interface DataEntryFlowStepAbort< + Tresult extends ConfigEntry | RepairsIssue = ConfigEntry, +> { type: "abort"; flow_id: string; handler: string; reason: string; description_placeholders?: Record; translation_domain?: string; - result?: ConfigEntry | RepairsIssue; + result?: Tresult; next_flow?: [FlowType, string]; // [flow_type, flow_id] } diff --git a/src/dialogs/config-flow/dialog-data-entry-flow.ts b/src/dialogs/config-flow/dialog-data-entry-flow.ts index ee6e6818c09e..d54e7e720a0d 100644 --- a/src/dialogs/config-flow/dialog-data-entry-flow.ts +++ b/src/dialogs/config-flow/dialog-data-entry-flow.ts @@ -629,31 +629,33 @@ class DataEntryFlowDialog extends LitElement { carryOverDevices: this._devices( this._params!.flowConfig.showDevices, Object.values(this.hass.devices), - _step.type === "create_entry" - ? (_step.result as ConfigEntry)?.entry_id - : undefined, + _step.type === "create_entry" ? _step.result?.entry_id : undefined, this._params!.carryOverDevices ).map((device) => device.id), dialogClosedCallback: this._params!.dialogClosedCallback, }); } else if (_step.next_flow[0] === "options_flow") { - showOptionsFlowDialog(this, (_step.result as ConfigEntry)!, { + showOptionsFlowDialog(this, _step.result!, { continueFlowId: _step.next_flow[1], navigateToResult: this._params!.navigateToResult, dialogClosedCallback: this._params!.dialogClosedCallback, }); } else if (_step.next_flow[0] === "config_subentries_flow") { - showSubConfigFlowDialog(this, (_step.result as ConfigEntry)!, "", { + showSubConfigFlowDialog(this, _step.result!, "", { continueFlowId: _step.next_flow[1], navigateToResult: this._params!.navigateToResult, dialogClosedCallback: this._params!.dialogClosedCallback, }); } else if (_step.next_flow[0] === "repair_flow") { - showRepairsFlowDialog(this, (_step.result as RepairsIssue)!, { - continueFlowId: _step.next_flow[1], - navigateToResult: this._params!.navigateToResult, - dialogClosedCallback: this._params!.dialogClosedCallback, - }); + showRepairsFlowDialog( + this, + (_step.result as unknown as RepairsIssue)!, + { + continueFlowId: _step.next_flow[1], + navigateToResult: this._params!.navigateToResult, + dialogClosedCallback: this._params!.dialogClosedCallback, + } + ); } else { this.closeDialog(); showAlertDialog(this, { diff --git a/src/dialogs/config-flow/step-flow-create-entry.ts b/src/dialogs/config-flow/step-flow-create-entry.ts index 21b6964a4537..70d06e750de6 100644 --- a/src/dialogs/config-flow/step-flow-create-entry.ts +++ b/src/dialogs/config-flow/step-flow-create-entry.ts @@ -15,6 +15,7 @@ import type { HaInput } from "../../components/input/ha-input"; import { assistSatelliteSupportsSetupFlow } from "../../data/assist_satellite"; import { getConfigEntries } from "../../data/config_entries"; import type { DataEntryFlowStepCreateEntry } from "../../data/data_entry_flow"; +import type { ConfigEntry } from "../../data/config_entries"; import type { DeviceRegistryEntry } from "../../data/device/device_registry"; import { updateDeviceRegistryEntry } from "../../data/device/device_registry"; import { @@ -40,7 +41,8 @@ class StepFlowCreateEntry extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; - @property({ attribute: false }) public step!: DataEntryFlowStepCreateEntry; + @property({ attribute: false }) + public step!: DataEntryFlowStepCreateEntry; @property({ attribute: false }) public devices!: DeviceRegistryEntry[]; @@ -79,7 +81,7 @@ class StepFlowCreateEntry extends LitElement { if ( this.devices.length !== 1 || this.devices[0].primary_config_entry !== this.step.result?.entry_id || - this.step.result.domain === "voip" + this.step.result?.domain === "voip" ) { return; } diff --git a/src/panels/config/entities/entity-registry-settings-editor.ts b/src/panels/config/entities/entity-registry-settings-editor.ts index 0cb96fba2ca5..cad116993894 100644 --- a/src/panels/config/entities/entity-registry-settings-editor.ts +++ b/src/panels/config/entities/entity-registry-settings-editor.ts @@ -1209,7 +1209,7 @@ export class EntityRegistrySettingsEditor extends LitElement { invert: this._switchAsInvert, target_domain: this._switchAsDomain, } - )) as DataEntryFlowStepCreateEntry; + )) as DataEntryFlowStepCreateEntry; if (configFlowResult.result?.entry_id) { try { const entry = await this._waitForEntityRegistryUpdate( @@ -1275,7 +1275,7 @@ export class EntityRegistrySettingsEditor extends LitElement { invert: this._switchAsInvert, target_domain: this._switchAsDomain, } - )) as DataEntryFlowStepCreateEntry; + )) as DataEntryFlowStepCreateEntry; if (configFlowResult.result?.entry_id) { try { const entry = await this._waitForEntityRegistryUpdate( From 4b614b122fa0d96e3da2b96877b0a7b8c90cac43 Mon Sep 17 00:00:00 2001 From: Grant Ellsworth Date: Fri, 22 May 2026 16:20:51 +0000 Subject: [PATCH 09/13] Move show-dialog-repair-flows to dialogs --- src/dialogs/config-flow/dialog-data-entry-flow.ts | 2 +- .../repairs-flow}/dialog-repairs-issue-subtitle.ts | 6 +++--- .../repairs-flow}/show-dialog-repair-flow.ts | 14 +++++++------- src/panels/config/repairs/dialog-repairs-issue.ts | 2 +- src/panels/config/repairs/ha-config-repairs.ts | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) rename src/{panels/config/repairs => dialogs/repairs-flow}/dialog-repairs-issue-subtitle.ts (89%) rename src/{panels/config/repairs => dialogs/repairs-flow}/show-dialog-repair-flow.ts (95%) diff --git a/src/dialogs/config-flow/dialog-data-entry-flow.ts b/src/dialogs/config-flow/dialog-data-entry-flow.ts index d54e7e720a0d..07a0c0ce804c 100644 --- a/src/dialogs/config-flow/dialog-data-entry-flow.ts +++ b/src/dialogs/config-flow/dialog-data-entry-flow.ts @@ -30,7 +30,7 @@ import type { } from "./show-dialog-data-entry-flow"; import { showOptionsFlowDialog } from "./show-dialog-options-flow"; import { showSubConfigFlowDialog } from "./show-dialog-sub-config-flow"; -import { showRepairsFlowDialog } from "../../panels/config/repairs/show-dialog-repair-flow"; +import { showRepairsFlowDialog } from "../repairs-flow/show-dialog-repair-flow"; import "./step-flow-abort"; import "./step-flow-create-entry"; import "./step-flow-external"; diff --git a/src/panels/config/repairs/dialog-repairs-issue-subtitle.ts b/src/dialogs/repairs-flow/dialog-repairs-issue-subtitle.ts similarity index 89% rename from src/panels/config/repairs/dialog-repairs-issue-subtitle.ts rename to src/dialogs/repairs-flow/dialog-repairs-issue-subtitle.ts index bdaa68856184..1095771a02ad 100644 --- a/src/panels/config/repairs/dialog-repairs-issue-subtitle.ts +++ b/src/dialogs/repairs-flow/dialog-repairs-issue-subtitle.ts @@ -1,8 +1,8 @@ import { css, html, LitElement } from "lit"; import { customElement, property } from "lit/decorators"; -import type { HomeAssistant } from "../../../types"; -import { domainToName } from "../../../data/integration"; -import type { RepairsIssue } from "../../../data/repairs"; +import type { HomeAssistant } from "../../types"; +import { domainToName } from "../../data/integration"; +import type { RepairsIssue } from "../../data/repairs"; @customElement("dialog-repairs-issue-subtitle") class DialogRepairsIssueSubtitle extends LitElement { diff --git a/src/panels/config/repairs/show-dialog-repair-flow.ts b/src/dialogs/repairs-flow/show-dialog-repair-flow.ts similarity index 95% rename from src/panels/config/repairs/show-dialog-repair-flow.ts rename to src/dialogs/repairs-flow/show-dialog-repair-flow.ts index f11497afcba6..c148b2874099 100644 --- a/src/panels/config/repairs/show-dialog-repair-flow.ts +++ b/src/dialogs/repairs-flow/show-dialog-repair-flow.ts @@ -1,19 +1,19 @@ import { html, nothing } from "lit"; -import type { DataEntryFlowStep } from "../../../data/data_entry_flow"; -import { domainToName } from "../../../data/integration"; -import type { RepairsIssue } from "../../../data/repairs"; +import type { DataEntryFlowStep } from "../../data/data_entry_flow"; +import { domainToName } from "../../data/integration"; +import type { RepairsIssue } from "../../data/repairs"; import { createRepairsFlow, deleteRepairsFlow, fetchRepairsFlow, handleRepairsFlowStep, -} from "../../../data/repairs"; -import type { DataEntryFlowDialogParams } from "../../../dialogs/config-flow/show-dialog-data-entry-flow"; +} from "../../data/repairs"; +import type { DataEntryFlowDialogParams } from "../config-flow/show-dialog-data-entry-flow"; import { loadDataEntryFlowDialog, showFlowDialog, -} from "../../../dialogs/config-flow/show-dialog-data-entry-flow"; -import type { HomeAssistant } from "../../../types"; +} from "../config-flow/show-dialog-data-entry-flow"; +import type { HomeAssistant } from "../../types"; import "./dialog-repairs-issue-subtitle"; const mergePlaceholders = (issue: RepairsIssue, step: DataEntryFlowStep) => diff --git a/src/panels/config/repairs/dialog-repairs-issue.ts b/src/panels/config/repairs/dialog-repairs-issue.ts index 1813e7821a01..b0d02a846e97 100644 --- a/src/panels/config/repairs/dialog-repairs-issue.ts +++ b/src/panels/config/repairs/dialog-repairs-issue.ts @@ -9,7 +9,7 @@ import "../../../components/ha-dialog"; import "../../../components/ha-button"; import "../../../components/ha-svg-icon"; import "../../../components/ha-dialog-footer"; -import "./dialog-repairs-issue-subtitle"; +import "../../../dialogs/repairs-flow/dialog-repairs-issue-subtitle"; import "../../../components/ha-markdown"; import type { RepairsIssue } from "../../../data/repairs"; import { ignoreRepairsIssue } from "../../../data/repairs"; diff --git a/src/panels/config/repairs/ha-config-repairs.ts b/src/panels/config/repairs/ha-config-repairs.ts index 9f50e16fbb47..1ea2d20991f3 100644 --- a/src/panels/config/repairs/ha-config-repairs.ts +++ b/src/panels/config/repairs/ha-config-repairs.ts @@ -20,7 +20,7 @@ import type { HomeAssistant } from "../../../types"; import { brandsUrl } from "../../../util/brands-url"; import { fixStatisticsIssue } from "../developer-tools/statistics/fix-statistics"; import { showVacuumSegmentMappingDialog } from "../entities/dialogs/show-dialog-vacuum-segment-mapping"; -import { showRepairsFlowDialog } from "./show-dialog-repair-flow"; +import { showRepairsFlowDialog } from "../../../dialogs/repairs-flow/show-dialog-repair-flow"; import { showRepairsIssueDialog } from "./show-repair-issue-dialog"; @customElement("ha-config-repairs") From 5fa8508383b3a9d58ba935e7e2e87393c8717b68 Mon Sep 17 00:00:00 2001 From: Petar Petrov Date: Sat, 23 May 2026 16:15:13 +0300 Subject: [PATCH 10/13] Update src/dialogs/config-flow/dialog-data-entry-flow.ts --- src/dialogs/config-flow/dialog-data-entry-flow.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dialogs/config-flow/dialog-data-entry-flow.ts b/src/dialogs/config-flow/dialog-data-entry-flow.ts index 07a0c0ce804c..7ac14477c648 100644 --- a/src/dialogs/config-flow/dialog-data-entry-flow.ts +++ b/src/dialogs/config-flow/dialog-data-entry-flow.ts @@ -649,7 +649,7 @@ class DataEntryFlowDialog extends LitElement { } else if (_step.next_flow[0] === "repair_flow") { showRepairsFlowDialog( this, - (_step.result as unknown as RepairsIssue)!, + (_step.result as unknown as RepairsIssue), { continueFlowId: _step.next_flow[1], navigateToResult: this._params!.navigateToResult, From 8480e6a8d7b97ee15b3a2482880982e0c7757fa0 Mon Sep 17 00:00:00 2001 From: Petar Petrov Date: Sat, 23 May 2026 16:16:37 +0300 Subject: [PATCH 11/13] Apply suggestions from code review --- src/data/data_entry_flow.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data/data_entry_flow.ts b/src/data/data_entry_flow.ts index 158ce9d5df7d..e8dc6914aaba 100644 --- a/src/data/data_entry_flow.ts +++ b/src/data/data_entry_flow.ts @@ -69,14 +69,14 @@ export interface DataEntryFlowStepCreateEntry< next_flow?: [FlowType, string]; // [flow_type, flow_id] handler: string; title: string; - result?: Tresult; + result?: TResult; description: string; description_placeholders?: Record; translation_domain?: string; } export interface DataEntryFlowStepAbort< - Tresult extends ConfigEntry | RepairsIssue = ConfigEntry, + TResult extends ConfigEntry | RepairsIssue = ConfigEntry, > { type: "abort"; flow_id: string; @@ -84,7 +84,7 @@ export interface DataEntryFlowStepAbort< reason: string; description_placeholders?: Record; translation_domain?: string; - result?: Tresult; + result?: TResult; next_flow?: [FlowType, string]; // [flow_type, flow_id] } From 1df25b7468722839f819254d22e38983113c8ff5 Mon Sep 17 00:00:00 2001 From: Petar Petrov Date: Sat, 23 May 2026 16:20:01 +0300 Subject: [PATCH 12/13] Apply suggestion from @MindFreeze --- src/data/data_entry_flow.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/data_entry_flow.ts b/src/data/data_entry_flow.ts index e8dc6914aaba..ea0344617690 100644 --- a/src/data/data_entry_flow.ts +++ b/src/data/data_entry_flow.ts @@ -61,7 +61,7 @@ export interface DataEntryFlowStepExternal { } export interface DataEntryFlowStepCreateEntry< - Tresult extends ConfigEntry | RepairsIssue = ConfigEntry, + TResult extends ConfigEntry | RepairsIssue = ConfigEntry, > { type: "create_entry"; version: number; From 206744acb3b83fde664d1fe97bf1940b15b20fb6 Mon Sep 17 00:00:00 2001 From: Petar Petrov Date: Sat, 23 May 2026 16:32:37 +0300 Subject: [PATCH 13/13] format --- src/dialogs/config-flow/dialog-data-entry-flow.ts | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/dialogs/config-flow/dialog-data-entry-flow.ts b/src/dialogs/config-flow/dialog-data-entry-flow.ts index 7ac14477c648..e6895c12cfea 100644 --- a/src/dialogs/config-flow/dialog-data-entry-flow.ts +++ b/src/dialogs/config-flow/dialog-data-entry-flow.ts @@ -647,15 +647,11 @@ class DataEntryFlowDialog extends LitElement { dialogClosedCallback: this._params!.dialogClosedCallback, }); } else if (_step.next_flow[0] === "repair_flow") { - showRepairsFlowDialog( - this, - (_step.result as unknown as RepairsIssue), - { - continueFlowId: _step.next_flow[1], - navigateToResult: this._params!.navigateToResult, - dialogClosedCallback: this._params!.dialogClosedCallback, - } - ); + showRepairsFlowDialog(this, _step.result as unknown as RepairsIssue, { + continueFlowId: _step.next_flow[1], + navigateToResult: this._params!.navigateToResult, + dialogClosedCallback: this._params!.dialogClosedCallback, + }); } else { this.closeDialog(); showAlertDialog(this, {