Files
frontend/src/data/data_entry_flow.ts
2025-10-14 11:45:11 -10:00

132 lines
3.1 KiB
TypeScript

import type { Connection } from "home-assistant-js-websocket";
import type { HaFormSchema } from "../components/ha-form/types";
import type { ConfigEntry } from "./config_entries";
export type FlowType =
| "config_flow"
| "config_subentries_flow"
| "options_flow"
| "repair_flow";
export interface DataEntryFlowProgressedEvent {
type: "data_entry_flow_progressed";
data: {
handler: string;
flow_id: string;
refresh: boolean;
};
}
export interface DataEntryFlowProgressEvent {
type: "data_entry_flow_progress_update";
data: {
handler: string;
flow_id: string;
progress: number;
};
}
export interface DataEntryFlowProgress {
flow_id: string;
handler: string;
step_id: string;
context: {
title_placeholders: Record<string, string>;
[key: string]: any;
};
}
export interface DataEntryFlowStepForm {
type: "form";
flow_id: string;
handler: string;
step_id: string;
data_schema: HaFormSchema[];
errors: Record<string, string>;
description_placeholders?: Record<string, string>;
last_step: boolean | null;
preview?: string;
translation_domain?: string;
}
export interface DataEntryFlowStepExternal {
type: "external";
flow_id: string;
handler: string;
step_id: string;
url: string;
description_placeholders: Record<string, string>;
translation_domain?: string;
}
export interface DataEntryFlowStepCreateEntry {
type: "create_entry";
version: number;
flow_id: string;
next_flow?: [FlowType, string]; // [flow_type, flow_id]
handler: string;
title: string;
result?: ConfigEntry;
description: string;
description_placeholders?: Record<string, string>;
translation_domain?: string;
}
export interface DataEntryFlowStepAbort {
type: "abort";
flow_id: string;
handler: string;
reason: string;
description_placeholders?: Record<string, string>;
translation_domain?: string;
next_flow?: [FlowType, string]; // [flow_type, flow_id]
}
export interface DataEntryFlowStepProgress {
type: "progress";
flow_id: string;
handler: string;
step_id: string;
progress_action: string;
description_placeholders?: Record<string, string>;
translation_domain?: string;
}
export interface DataEntryFlowStepMenu {
type: "menu";
flow_id: string;
handler: string;
step_id: string;
/** If array, use value to lookup translations in strings.json */
menu_options: string[] | Record<string, string>;
sort?: boolean;
description_placeholders?: Record<string, string>;
translation_domain?: string;
}
export type DataEntryFlowStep =
| DataEntryFlowStepForm
| DataEntryFlowStepExternal
| DataEntryFlowStepCreateEntry
| DataEntryFlowStepAbort
| DataEntryFlowStepProgress
| DataEntryFlowStepMenu;
export const subscribeDataEntryFlowProgressed = (
conn: Connection,
callback: (ev: DataEntryFlowProgressedEvent) => void
) =>
conn.subscribeEvents<DataEntryFlowProgressedEvent>(
callback,
"data_entry_flow_progressed"
);
export const subscribeDataEntryFlowProgress = (
conn: Connection,
callback: (ev: DataEntryFlowProgressEvent) => void
) =>
conn.subscribeEvents<DataEntryFlowProgressEvent>(
callback,
"data_entry_flow_progress_update"
);