This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
"""UI configuration and options flow for Up Banking."""
|
||||
from __future__ import annotations
|
||||
|
||||
import voluptuous as vol
|
||||
from homeassistant import config_entries
|
||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||
from homeassistant.helpers import config_validation as cv
|
||||
|
||||
from .api import UpApi
|
||||
from .const import CONF_ACCOUNTS, CONF_TOKEN, DOMAIN
|
||||
from .exceptions import UpApiError
|
||||
from .models import account_label
|
||||
|
||||
|
||||
class UpBankingConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
"""Configure a single Up personal access token."""
|
||||
VERSION = 1
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._token: str | None = None
|
||||
self._accounts: list[dict] = []
|
||||
|
||||
async def async_step_user(self, user_input=None):
|
||||
errors = {}
|
||||
if user_input:
|
||||
self._token = user_input[CONF_TOKEN].strip()
|
||||
try:
|
||||
self._accounts = await UpApi(async_get_clientsession(self.hass), self._token).accounts()
|
||||
except UpApiError:
|
||||
errors["base"] = "cannot_connect"
|
||||
else:
|
||||
await self.async_set_unique_id("up_banking")
|
||||
self._abort_if_unique_id_configured()
|
||||
return await self.async_step_accounts()
|
||||
return self.async_show_form(step_id="user", data_schema=vol.Schema({vol.Required(CONF_TOKEN): str}), errors=errors)
|
||||
|
||||
async def async_step_accounts(self, user_input=None):
|
||||
choices = {item["id"]: account_label(item) for item in self._accounts}
|
||||
if user_input is not None:
|
||||
return self.async_create_entry(title="Up Banking", data={CONF_TOKEN: self._token, CONF_ACCOUNTS: user_input[CONF_ACCOUNTS]})
|
||||
return self.async_show_form(step_id="accounts", data_schema=vol.Schema({vol.Required(CONF_ACCOUNTS, default=list(choices)): cv.multi_select(choices)}))
|
||||
|
||||
@staticmethod
|
||||
def async_get_options_flow(config_entry):
|
||||
return UpBankingOptionsFlow()
|
||||
|
||||
|
||||
class UpBankingOptionsFlow(config_entries.OptionsFlow):
|
||||
async def async_step_init(self, user_input=None):
|
||||
try:
|
||||
accounts = await UpApi(async_get_clientsession(self.hass), self.config_entry.data[CONF_TOKEN]).accounts()
|
||||
except UpApiError:
|
||||
return self.async_abort(reason="cannot_connect")
|
||||
choices = {item["id"]: account_label(item) for item in accounts}
|
||||
if user_input is not None:
|
||||
return self.async_create_entry(title="", data=user_input)
|
||||
selected = self.config_entry.options.get(CONF_ACCOUNTS, self.config_entry.data.get(CONF_ACCOUNTS, []))
|
||||
return self.async_show_form(step_id="init", data_schema=vol.Schema({vol.Required(CONF_ACCOUNTS, default=selected): cv.multi_select(choices)}))
|
||||
Reference in New Issue
Block a user