diff --git a/src/onboarding/onboarding-integrations.ts b/src/onboarding/onboarding-integrations.ts index aba84e9d76..337896b43a 100644 --- a/src/onboarding/onboarding-integrations.ts +++ b/src/onboarding/onboarding-integrations.ts @@ -15,7 +15,6 @@ import { stringCompare } from "../common/string/compare"; import { LocalizeFunc } from "../common/translations/localize"; import { ConfigEntry, subscribeConfigEntries } from "../data/config_entries"; import { subscribeConfigFlowInProgress } from "../data/config_flow"; -import { DataEntryFlowProgress } from "../data/data_entry_flow"; import { domainToName } from "../data/integration"; import { scanUSBDevices } from "../data/usb"; import { SubscribeMixin } from "../mixins/subscribe-mixin"; @@ -41,19 +40,20 @@ class OnboardingIntegrations extends SubscribeMixin(LitElement) { @state() private _entries: ConfigEntry[] = []; - @state() private _discovered?: DataEntryFlowProgress[]; + @state() private _discoveredDomains?: Set; public hassSubscribe(): Array> { return [ subscribeConfigFlowInProgress(this.hass, (flows) => { - this._discovered = flows.filter( - (flow) => !HIDDEN_DOMAINS.has(flow.handler) + this._discoveredDomains = new Set( + flows + .filter((flow) => !HIDDEN_DOMAINS.has(flow.handler)) + .map((flow) => flow.handler) + ); + this.hass.loadBackendTranslation( + "title", + Array.from(this._discoveredDomains) ); - const integrations: Set = new Set(); - for (const flow of this._discovered) { - integrations.add(flow.handler); - } - this.hass.loadBackendTranslation("title", Array.from(integrations)); }), subscribeConfigEntries( this.hass, @@ -98,41 +98,27 @@ class OnboardingIntegrations extends SubscribeMixin(LitElement) { } protected render() { - if (!this._discovered) { + if (!this._discoveredDomains) { return nothing; } // Render discovered and existing entries together sorted by localized title. - const entries: Array<[string, string]> = this._entries.map((entry) => [ - entry.domain, - domainToName(this.hass.localize, entry.domain), - ]); - const discovered: Array<[string, string]> = this._discovered.map((flow) => [ - flow.handler, - domainToName(this.hass.localize, flow.handler), - ]); - let domains = [...entries, ...discovered].sort((a, b) => + let uniqueDomains: Set = new Set(); + this._entries.forEach((entry) => { + uniqueDomains.add(entry.domain); + }); + uniqueDomains = new Set([...uniqueDomains, ...this._discoveredDomains]); + let domains: Array<[string, string]> = []; + for (const domain of uniqueDomains.values()) { + domains.push([domain, domainToName(this.hass.localize, domain)]); + } + domains = domains.sort((a, b) => stringCompare(a[0], b[0], this.hass.locale.language) ); - const foundDevices = domains.length; + const foundIntegrations = domains.length; if (domains.length > 12) { - const uniqueDomains: Set = new Set(); - domains.forEach(([domain]) => { - uniqueDomains.add(domain); - }); - if (uniqueDomains.size < domains.length) { - domains = domains.filter(([domain]) => { - if (uniqueDomains.has(domain)) { - uniqueDomains.delete(domain); - return true; - } - return false; - }); - } - if (domains.length > 12) { - domains = domains.slice(0, 11); - } + domains = domains.slice(0, 11); } return html` @@ -153,11 +139,11 @@ class OnboardingIntegrations extends SubscribeMixin(LitElement) { .darkOptimizedIcon=${this.hass.themes?.darkMode} >` )} - ${foundDevices > domains.length + ${foundIntegrations > domains.length ? html`
${this.onboardingLocalize( "ui.panel.page-onboarding.integration.more_integrations", - { count: foundDevices - domains.length } + { count: foundIntegrations - domains.length } )}
` : nothing}