import { TemplateResult } from "lit-html"; import { fireEvent } from "../../common/dom/fire_event"; import { HaFormSchema } from "../../components/ha-form/ha-form"; import { DataEntryFlowStep, DataEntryFlowStepAbort, DataEntryFlowStepCreateEntry, DataEntryFlowStepExternal, DataEntryFlowStepForm, } from "../../data/data_entry_flow"; import { HomeAssistant } from "../../types"; export interface FlowConfig { loadDevicesAndAreas: boolean; getFlowHandlers?: (hass: HomeAssistant) => Promise; createFlow(hass: HomeAssistant, handler: string): Promise; fetchFlow(hass: HomeAssistant, flowId: string): Promise; handleFlowStep( hass: HomeAssistant, flowId: string, data: { [key: string]: any } ): Promise; deleteFlow(hass: HomeAssistant, flowId: string): Promise; renderAbortDescription( hass: HomeAssistant, step: DataEntryFlowStepAbort ): TemplateResult | ""; renderShowFormStepHeader( hass: HomeAssistant, step: DataEntryFlowStepForm ): string; renderShowFormStepDescription( hass: HomeAssistant, step: DataEntryFlowStepForm ): TemplateResult | ""; renderShowFormStepFieldLabel( hass: HomeAssistant, step: DataEntryFlowStepForm, field: HaFormSchema ): string; renderShowFormStepFieldError( hass: HomeAssistant, step: DataEntryFlowStepForm, error: string ): string; renderExternalStepHeader( hass: HomeAssistant, step: DataEntryFlowStepExternal ): string; renderExternalStepDescription( hass: HomeAssistant, step: DataEntryFlowStepExternal ): TemplateResult | ""; renderCreateEntryDescription( hass: HomeAssistant, step: DataEntryFlowStepCreateEntry ): TemplateResult | ""; } export interface DataEntryFlowDialogParams { startFlowHandler?: string; continueFlowId?: string; dialogClosedCallback?: (params: { flowFinished: boolean }) => void; flowConfig: FlowConfig; showAdvanced?: boolean; } export const loadDataEntryFlowDialog = () => import( /* webpackChunkName: "dialog-config-flow" */ "./dialog-data-entry-flow" ); export const showFlowDialog = ( element: HTMLElement, dialogParams: Omit, flowConfig: FlowConfig ): void => { fireEvent(element, "show-dialog", { dialogTag: "dialog-data-entry-flow", dialogImport: loadDataEntryFlowDialog, dialogParams: { ...dialogParams, flowConfig, }, }); };