feat: implement UI config flow with single-instance enforcement

This commit is contained in:
Joshua King
2026-09-13 14:39:12 -04:00
parent ec888b6426
commit 30fc3eb1d3
5 changed files with 271 additions and 0 deletions
+2
View File
@@ -19,9 +19,11 @@ async def async_setup(hass: HomeAssistant, config: dict[str, Any]) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up NestQuest from a config entry."""
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = entry
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry."""
hass.data.setdefault(DOMAIN, {}).pop(entry.entry_id, None)
return True
@@ -0,0 +1,31 @@
"""Config flow for NestQuest."""
from __future__ import annotations
from typing import Any
from homeassistant import config_entries
from homeassistant.data_entry_flow import FlowResult
from .const import DOMAIN
class NestQuestConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
"""Handle a config flow for NestQuest."""
VERSION = 1
async def async_step_user(
self, user_input: dict[str, Any] | None = None
) -> FlowResult:
"""Handle the user step of the config flow."""
existing = any(
entry.domain == DOMAIN
for entry in self.hass.config_entries.async_entries(DOMAIN)
)
if existing:
return self.async_abort(reason="single_instance_allowed")
if user_input is None:
return self.async_show_form(step_id="user")
return self.async_create_entry(title="NestQuest", data=user_input)
+17
View File
@@ -0,0 +1,17 @@
{
"title": "NestQuest",
"config": {
"step": {
"user": {
"title": "Add NestQuest",
"description": "Set up NestQuest to start coordinating the household. No additional configuration is required."
}
},
"abort": {
"single_instance_allowed": "NestQuest is already configured. Only a single instance is allowed."
},
"create_entry": {
"default": "NestQuest was successfully configured."
}
}
}
@@ -0,0 +1,17 @@
{
"title": "NestQuest",
"config": {
"step": {
"user": {
"title": "Add NestQuest",
"description": "Set up NestQuest to start coordinating the household. No additional configuration is required."
}
},
"abort": {
"single_instance_allowed": "NestQuest is already configured. Only a single instance is allowed."
},
"create_entry": {
"default": "NestQuest was successfully configured."
}
}
}