From 355e3d79115eab789934261c771ab8ba186d9fa7 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 19 Aug 2019 15:12:57 -0700 Subject: [PATCH] Migrate integrations page to TypeScript (#3500) --- src/data/config_entries.ts | 116 +---------- src/data/config_flow.ts | 83 ++++++++ src/data/options_flow.ts | 31 +++ .../config-flow/show-dialog-config-flow.ts | 2 +- .../config-flow/show-dialog-options-flow.ts | 4 +- src/onboarding/onboarding-integrations.ts | 11 +- .../ha-config-entries-dashboard.js | 6 +- .../integrations/ha-config-entry-page.js | 184 ----------------- .../integrations/ha-config-entry-page.ts | 189 ++++++++++++++++++ .../integrations/ha-config-integrations.js | 161 --------------- .../integrations/ha-config-integrations.ts | 140 +++++++++++++ 11 files changed, 457 insertions(+), 470 deletions(-) create mode 100644 src/data/config_flow.ts create mode 100644 src/data/options_flow.ts delete mode 100644 src/panels/config/integrations/ha-config-entry-page.js create mode 100644 src/panels/config/integrations/ha-config-entry-page.ts delete mode 100644 src/panels/config/integrations/ha-config-integrations.js create mode 100644 src/panels/config/integrations/ha-config-integrations.ts diff --git a/src/data/config_entries.ts b/src/data/config_entries.ts index c8119f1983..a7d3017a48 100644 --- a/src/data/config_entries.ts +++ b/src/data/config_entries.ts @@ -1,8 +1,4 @@ import { HomeAssistant } from "../types"; -import { createCollection } from "home-assistant-js-websocket"; -import { debounce } from "../common/util/debounce"; -import { LocalizeFunc } from "../common/translations/localize"; -import { DataEntryFlowStep, DataEntryFlowProgress } from "./data_entry_flow"; export interface ConfigEntry { entry_id: string; @@ -14,114 +10,10 @@ export interface ConfigEntry { supports_options: boolean; } -export const createConfigFlow = (hass: HomeAssistant, handler: string) => - hass.callApi("POST", "config/config_entries/flow", { - handler, - }); - -export const fetchConfigFlow = (hass: HomeAssistant, flowId: string) => - hass.callApi( - "GET", - `config/config_entries/flow/${flowId}` - ); - -export const handleConfigFlowStep = ( - hass: HomeAssistant, - flowId: string, - data: { [key: string]: any } -) => - hass.callApi( - "POST", - `config/config_entries/flow/${flowId}`, - data - ); - -export const deleteConfigFlow = (hass: HomeAssistant, flowId: string) => - hass.callApi("DELETE", `config/config_entries/flow/${flowId}`); - -export const getConfigFlowsInProgress = (hass: HomeAssistant) => - hass.callApi("GET", "config/config_entries/flow"); - -export const getConfigFlowHandlers = (hass: HomeAssistant) => - hass.callApi("GET", "config/config_entries/flow_handlers"); - -const fetchConfigFlowInProgress = (conn) => - conn.sendMessagePromise({ - type: "config/entity_registry/list", - }); - -const subscribeConfigFlowInProgressUpdates = (conn, store) => - debounce( - conn.subscribeEvents( - () => - fetchConfigFlowInProgress(conn).then((flows) => - store.setState(flows, true) - ), - 500, - true - ), - "config_entry_discovered" - ); - -export const subscribeConfigFlowInProgress = ( - hass: HomeAssistant, - onChange: (flows: DataEntryFlowProgress[]) => void -) => - createCollection( - "_configFlowProgress", - fetchConfigFlowInProgress, - subscribeConfigFlowInProgressUpdates, - hass.connection, - onChange - ); - export const getConfigEntries = (hass: HomeAssistant) => hass.callApi("GET", "config/config_entries/entry"); -export const localizeConfigFlowTitle = ( - localize: LocalizeFunc, - flow: DataEntryFlowProgress -) => { - const placeholders = flow.context.title_placeholders || {}; - const placeholderKeys = Object.keys(placeholders); - if (placeholderKeys.length === 0) { - return localize(`component.${flow.handler}.config.title`); - } - const args: string[] = []; - placeholderKeys.forEach((key) => { - args.push(key); - args.push(placeholders[key]); - }); - return localize(`component.${flow.handler}.config.flow_title`, ...args); -}; - -// Options flow - -export const createOptionsFlow = (hass: HomeAssistant, handler: string) => - hass.callApi( - "POST", - "config/config_entries/options/flow", - { - handler, - } - ); - -export const fetchOptionsFlow = (hass: HomeAssistant, flowId: string) => - hass.callApi( - "GET", - `config/config_entries/options/flow/${flowId}` - ); - -export const handleOptionsFlowStep = ( - hass: HomeAssistant, - flowId: string, - data: { [key: string]: any } -) => - hass.callApi( - "POST", - `config/config_entries/options/flow/${flowId}`, - data - ); - -export const deleteOptionsFlow = (hass: HomeAssistant, flowId: string) => - hass.callApi("DELETE", `config/config_entries/options/flow/${flowId}`); +export const deleteConfigEntry = (hass: HomeAssistant, configEntryId: string) => + hass.callApi<{ + require_restart: boolean; + }>("DELETE", `config/config_entries/entry/${configEntryId}`); diff --git a/src/data/config_flow.ts b/src/data/config_flow.ts new file mode 100644 index 0000000000..0c92295df5 --- /dev/null +++ b/src/data/config_flow.ts @@ -0,0 +1,83 @@ +import { HomeAssistant } from "../types"; +import { DataEntryFlowStep, DataEntryFlowProgress } from "./data_entry_flow"; +import { debounce } from "../common/util/debounce"; +import { createCollection } from "home-assistant-js-websocket"; +import { LocalizeFunc } from "../common/translations/localize"; + +export const createConfigFlow = (hass: HomeAssistant, handler: string) => + hass.callApi("POST", "config/config_entries/flow", { + handler, + }); + +export const fetchConfigFlow = (hass: HomeAssistant, flowId: string) => + hass.callApi( + "GET", + `config/config_entries/flow/${flowId}` + ); + +export const handleConfigFlowStep = ( + hass: HomeAssistant, + flowId: string, + data: { [key: string]: any } +) => + hass.callApi( + "POST", + `config/config_entries/flow/${flowId}`, + data + ); + +export const deleteConfigFlow = (hass: HomeAssistant, flowId: string) => + hass.callApi("DELETE", `config/config_entries/flow/${flowId}`); + +export const getConfigFlowsInProgress = (hass: HomeAssistant) => + hass.callApi("GET", "config/config_entries/flow"); + +export const getConfigFlowHandlers = (hass: HomeAssistant) => + hass.callApi("GET", "config/config_entries/flow_handlers"); + +const fetchConfigFlowInProgress = (conn) => + conn.sendMessagePromise({ + type: "config/config_entries/flow", + }); + +const subscribeConfigFlowInProgressUpdates = (conn, store) => + conn.subscribeEvents( + debounce( + () => + fetchConfigFlowInProgress(conn).then((flows) => + store.setState(flows, true) + ), + 500, + true + ), + "config_entry_discovered" + ); + +export const subscribeConfigFlowInProgress = ( + hass: HomeAssistant, + onChange: (flows: DataEntryFlowProgress[]) => void +) => + createCollection( + "_configFlowProgress", + fetchConfigFlowInProgress, + subscribeConfigFlowInProgressUpdates, + hass.connection, + onChange + ); + +export const localizeConfigFlowTitle = ( + localize: LocalizeFunc, + flow: DataEntryFlowProgress +) => { + const placeholders = flow.context.title_placeholders || {}; + const placeholderKeys = Object.keys(placeholders); + if (placeholderKeys.length === 0) { + return localize(`component.${flow.handler}.config.title`); + } + const args: string[] = []; + placeholderKeys.forEach((key) => { + args.push(key); + args.push(placeholders[key]); + }); + return localize(`component.${flow.handler}.config.flow_title`, ...args); +}; diff --git a/src/data/options_flow.ts b/src/data/options_flow.ts new file mode 100644 index 0000000000..52bb95e9b5 --- /dev/null +++ b/src/data/options_flow.ts @@ -0,0 +1,31 @@ +import { HomeAssistant } from "../types"; +import { DataEntryFlowStep } from "./data_entry_flow"; + +export const createOptionsFlow = (hass: HomeAssistant, handler: string) => + hass.callApi( + "POST", + "config/config_entries/options/flow", + { + handler, + } + ); + +export const fetchOptionsFlow = (hass: HomeAssistant, flowId: string) => + hass.callApi( + "GET", + `config/config_entries/options/flow/${flowId}` + ); + +export const handleOptionsFlowStep = ( + hass: HomeAssistant, + flowId: string, + data: { [key: string]: any } +) => + hass.callApi( + "POST", + `config/config_entries/options/flow/${flowId}`, + data + ); + +export const deleteOptionsFlow = (hass: HomeAssistant, flowId: string) => + hass.callApi("DELETE", `config/config_entries/options/flow/${flowId}`); diff --git a/src/dialogs/config-flow/show-dialog-config-flow.ts b/src/dialogs/config-flow/show-dialog-config-flow.ts index f8718393f4..601f522d05 100644 --- a/src/dialogs/config-flow/show-dialog-config-flow.ts +++ b/src/dialogs/config-flow/show-dialog-config-flow.ts @@ -4,7 +4,7 @@ import { handleConfigFlowStep, deleteConfigFlow, createConfigFlow, -} from "../../data/config_entries"; +} from "../../data/config_flow"; import { html } from "lit-element"; import { localizeKey } from "../../common/translations/localize"; import { diff --git a/src/dialogs/config-flow/show-dialog-options-flow.ts b/src/dialogs/config-flow/show-dialog-options-flow.ts index a4f8f5126c..740b364fbf 100644 --- a/src/dialogs/config-flow/show-dialog-options-flow.ts +++ b/src/dialogs/config-flow/show-dialog-options-flow.ts @@ -3,14 +3,14 @@ import { handleOptionsFlowStep, deleteOptionsFlow, createOptionsFlow, - ConfigEntry, -} from "../../data/config_entries"; +} from "../../data/options_flow"; import { html } from "lit-element"; import { localizeKey } from "../../common/translations/localize"; import { showFlowDialog, loadDataEntryFlowDialog, } from "./show-dialog-data-entry-flow"; +import { ConfigEntry } from "../../data/config_entries"; export const loadOptionsFlowDialog = loadDataEntryFlowDialog; diff --git a/src/onboarding/onboarding-integrations.ts b/src/onboarding/onboarding-integrations.ts index b8de3d44bb..1919b98d37 100644 --- a/src/onboarding/onboarding-integrations.ts +++ b/src/onboarding/onboarding-integrations.ts @@ -14,12 +14,7 @@ import { showConfigFlowDialog, } from "../dialogs/config-flow/show-dialog-config-flow"; import { HomeAssistant } from "../types"; -import { - getConfigFlowsInProgress, - getConfigEntries, - ConfigEntry, - localizeConfigFlowTitle, -} from "../data/config_entries"; +import { getConfigEntries, ConfigEntry } from "../data/config_entries"; import { compare } from "../common/string/compare"; import "./integration-badge"; import { LocalizeFunc } from "../common/translations/localize"; @@ -28,6 +23,10 @@ import { fireEvent } from "../common/dom/fire_event"; import { onboardIntegrationStep } from "../data/onboarding"; import { genClientId } from "home-assistant-js-websocket"; import { DataEntryFlowProgress } from "../data/data_entry_flow"; +import { + localizeConfigFlowTitle, + getConfigFlowsInProgress, +} from "../data/config_flow"; @customElement("onboarding-integrations") class OnboardingIntegrations extends LitElement { diff --git a/src/panels/config/integrations/ha-config-entries-dashboard.js b/src/panels/config/integrations/ha-config-entries-dashboard.js index 937fcc21f8..d7c6113afb 100644 --- a/src/panels/config/integrations/ha-config-entries-dashboard.js +++ b/src/panels/config/integrations/ha-config-entries-dashboard.js @@ -23,7 +23,7 @@ import { loadConfigFlowDialog, showConfigFlowDialog, } from "../../../dialogs/config-flow/show-dialog-config-flow"; -import { localizeConfigFlowTitle } from "../../../data/config_entries"; +import { localizeConfigFlowTitle } from "../../../data/config_flow"; /* * @appliesMixin LocalizeMixin @@ -113,7 +113,7 @@ class HaConfigManagerDashboard extends LocalizeMixin(