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,
},
});
};