From 63de324224dc052311862bdcc1e9dedd64a16a2a Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 26 Apr 2023 12:02:50 +0200 Subject: [PATCH] Fix my link add integration: search for discovered items (#16315) * fix my link add integration * add confirm back * Update dialog-add-integration.ts --- .../integrations/dialog-add-integration.ts | 31 +++++++++++-------- .../integrations/ha-config-integrations.ts | 9 ++---- .../show-add-integration-dialog.ts | 1 + 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/panels/config/integrations/dialog-add-integration.ts b/src/panels/config/integrations/dialog-add-integration.ts index 2fe114e1bf..2b39555adb 100644 --- a/src/panels/config/integrations/dialog-add-integration.ts +++ b/src/panels/config/integrations/dialog-add-integration.ts @@ -92,14 +92,24 @@ class AddIntegrationDialog extends LitElement { private _height?: number; - public showDialog(params?: AddIntegrationDialogParams): void { - this._load(); + public async showDialog(params?: AddIntegrationDialogParams): Promise { + const loadPromise = this._load(); this._open = true; this._pickedBrand = params?.brand; this._initialFilter = params?.initialFilter; this._narrow = matchMedia( "all and (max-width: 450px), all and (max-height: 500px)" ).matches; + if (params?.domain) { + this._createFlow(params.domain); + } + if (params?.brand) { + await loadPromise; + const brand = this._integrations?.[params.brand]; + if (brand && "integrations" in brand && brand.integrations) { + this._fetchFlowsInProgress(Object.keys(brand.integrations)); + } + } } public closeDialog() { @@ -543,7 +553,7 @@ class AddIntegrationDialog extends LitElement { } if (integration.config_flow) { - this._createFlow(integration); + this._createFlow(integration.domain); return; } @@ -563,25 +573,20 @@ class AddIntegrationDialog extends LitElement { showYamlIntegrationDialog(this, { manifest }); } - private async _createFlow(integration: IntegrationListItem) { - const flowsInProgress = await this._fetchFlowsInProgress([ - integration.domain, - ]); + private async _createFlow(domain: string) { + const flowsInProgress = await this._fetchFlowsInProgress([domain]); if (flowsInProgress?.length) { - this._pickedBrand = integration.domain; + this._pickedBrand = domain; return; } - const manifest = await fetchIntegrationManifest( - this.hass, - integration.domain - ); + const manifest = await fetchIntegrationManifest(this.hass, domain); this.closeDialog(); showConfigFlowDialog(this, { - startFlowHandler: integration.domain, + startFlowHandler: domain, showAdvanced: this.hass.userData?.showAdvanced, manifest, }); diff --git a/src/panels/config/integrations/ha-config-integrations.ts b/src/panels/config/integrations/ha-config-integrations.ts index ddb989f79e..1243a04f57 100644 --- a/src/panels/config/integrations/ha-config-integrations.ts +++ b/src/panels/config/integrations/ha-config-integrations.ts @@ -731,13 +731,8 @@ class HaConfigIntegrations extends SubscribeMixin(LitElement) { }), }) ) { - showConfigFlowDialog(this, { - dialogClosedCallback: () => { - this._handleFlowUpdated(); - }, - startFlowHandler: domain, - manifest: await fetchIntegrationManifest(this.hass, domain), - showAdvanced: this.hass.userData?.showAdvanced, + showAddIntegrationDialog(this, { + domain, }); } return; diff --git a/src/panels/config/integrations/show-add-integration-dialog.ts b/src/panels/config/integrations/show-add-integration-dialog.ts index 0bfbf0cb76..6fdd6243ac 100644 --- a/src/panels/config/integrations/show-add-integration-dialog.ts +++ b/src/panels/config/integrations/show-add-integration-dialog.ts @@ -3,6 +3,7 @@ import { IntegrationManifest } from "../../../data/integration"; export interface AddIntegrationDialogParams { brand?: string; + domain?: string; initialFilter?: string; }