1 """Support to help onboard new users."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from typing
import TYPE_CHECKING, TypedDict
28 CONFIG_SCHEMA = cv.empty_config_schema(DOMAIN)
33 """Container for onboarding data."""
35 listeners: list[Callable[[],
None]]
37 steps: OnboardingStoreData
41 """Onboarding store data."""
47 """Store onboarding data."""
51 old_major_version: int,
52 old_minor_version: int,
53 old_data: OnboardingStoreData,
54 ) -> OnboardingStoreData:
55 """Migrate to the new version."""
57 if old_major_version < 2:
58 old_data[
"done"].append(STEP_INTEGRATION)
59 if old_major_version < 3:
60 old_data[
"done"].append(STEP_CORE_CONFIG)
61 if old_major_version < 4:
62 old_data[
"done"].append(STEP_ANALYTICS)
69 """Return if Home Assistant has been onboarded."""
70 data: OnboardingData |
None = hass.data.get(DOMAIN)
71 return data
is None or data.onboarded
is True
77 """Return if a user has been created as part of onboarding."""
83 """Add a listener to be called when onboarding is complete."""
84 data: OnboardingData |
None = hass.data.get(DOMAIN)
94 data.listeners.append(listener)
97 async
def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
98 """Set up the onboarding component."""
100 data: OnboardingStoreData |
None
101 if (data := await store.async_load())
is None:
105 assert isinstance(data, dict)
107 if STEP_USER
not in data[
"done"]:
112 for user
in await hass.auth.async_get_users():
118 data[
"done"].append(STEP_USER)
119 await store.async_save(data)
121 if set(data[
"done"]) == set(STEPS):
126 await views.async_setup(hass, data, store)
OnboardingStoreData _async_migrate_func(self, int old_major_version, int old_minor_version, OnboardingStoreData old_data)
None async_add_listener(HomeAssistant hass, Callable[[], None] listener)
bool async_setup(HomeAssistant hass, ConfigType config)
bool async_is_user_onboarded(HomeAssistant hass)
bool async_is_onboarded(HomeAssistant hass)