|
@@ -68,11 +68,19 @@ class ZLockSlotsOptionsFlow(OptionsFlow):
|
|
|
self._door_sensor_map: dict[str, str] = dict(
|
|
self._door_sensor_map: dict[str, str] = dict(
|
|
|
config_entry.options.get(CONF_DOOR_SENSOR_MAP, {})
|
|
config_entry.options.get(CONF_DOOR_SENSOR_MAP, {})
|
|
|
)
|
|
)
|
|
|
|
|
+ self._edit_group_name: str | None = None
|
|
|
|
|
|
|
|
async def async_step_init(self, user_input=None) -> ConfigFlowResult:
|
|
async def async_step_init(self, user_input=None) -> ConfigFlowResult:
|
|
|
return self.async_show_menu(
|
|
return self.async_show_menu(
|
|
|
step_id="init",
|
|
step_id="init",
|
|
|
- menu_options=["manage_locks", "associate_sensors", "add_group", "remove_group", "finish"],
|
|
|
|
|
|
|
+ menu_options=[
|
|
|
|
|
+ "manage_locks",
|
|
|
|
|
+ "associate_sensors",
|
|
|
|
|
+ "add_group",
|
|
|
|
|
+ "edit_group",
|
|
|
|
|
+ "remove_group",
|
|
|
|
|
+ "finish",
|
|
|
|
|
+ ],
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
async def async_step_manage_locks(self, user_input=None) -> ConfigFlowResult:
|
|
async def async_step_manage_locks(self, user_input=None) -> ConfigFlowResult:
|
|
@@ -159,6 +167,63 @@ class ZLockSlotsOptionsFlow(OptionsFlow):
|
|
|
})
|
|
})
|
|
|
return self.async_show_form(step_id="add_group", data_schema=schema, errors=errors)
|
|
return self.async_show_form(step_id="add_group", data_schema=schema, errors=errors)
|
|
|
|
|
|
|
|
|
|
+ async def async_step_edit_group(self, user_input=None) -> ConfigFlowResult:
|
|
|
|
|
+ if not self._groups:
|
|
|
|
|
+ return await self.async_step_init()
|
|
|
|
|
+
|
|
|
|
|
+ if len(self._groups) == 1:
|
|
|
|
|
+ self._edit_group_name = self._groups[0][CONF_GROUP_NAME]
|
|
|
|
|
+ return await self.async_step_edit_group_locks()
|
|
|
|
|
+
|
|
|
|
|
+ if user_input is not None:
|
|
|
|
|
+ self._edit_group_name = user_input["group"]
|
|
|
|
|
+ return await self.async_step_edit_group_locks()
|
|
|
|
|
+
|
|
|
|
|
+ schema = vol.Schema({
|
|
|
|
|
+ vol.Required("group"): selector.SelectSelector(
|
|
|
|
|
+ selector.SelectSelectorConfig(
|
|
|
|
|
+ options=[
|
|
|
|
|
+ selector.SelectOptionDict(value=g[CONF_GROUP_NAME], label=g[CONF_GROUP_NAME])
|
|
|
|
|
+ for g in self._groups
|
|
|
|
|
+ ],
|
|
|
|
|
+ )
|
|
|
|
|
+ ),
|
|
|
|
|
+ })
|
|
|
|
|
+ return self.async_show_form(step_id="edit_group", data_schema=schema)
|
|
|
|
|
+
|
|
|
|
|
+ async def async_step_edit_group_locks(self, user_input=None) -> ConfigFlowResult:
|
|
|
|
|
+ errors: dict[str, str] = {}
|
|
|
|
|
+ group = next(g for g in self._groups if g[CONF_GROUP_NAME] == self._edit_group_name)
|
|
|
|
|
+
|
|
|
|
|
+ if user_input is not None:
|
|
|
|
|
+ selected: list[str] = user_input.get(CONF_LOCK_ENTITY_IDS, [])
|
|
|
|
|
+ if not selected:
|
|
|
|
|
+ errors[CONF_LOCK_ENTITY_IDS] = "no_locks_selected"
|
|
|
|
|
+ else:
|
|
|
|
|
+ group[CONF_LOCK_ENTITY_IDS] = selected
|
|
|
|
|
+ return await self.async_step_init()
|
|
|
|
|
+
|
|
|
|
|
+ lock_options = [
|
|
|
|
|
+ selector.SelectOptionDict(
|
|
|
|
|
+ value=lid,
|
|
|
|
|
+ label=(self.hass.states.get(lid).name if self.hass.states.get(lid) else lid),
|
|
|
|
|
+ )
|
|
|
|
|
+ for lid in self._lock_ids
|
|
|
|
|
+ ]
|
|
|
|
|
+ schema = vol.Schema({
|
|
|
|
|
+ vol.Required(
|
|
|
|
|
+ CONF_LOCK_ENTITY_IDS, default=group[CONF_LOCK_ENTITY_IDS]
|
|
|
|
|
+ ): selector.SelectSelector(
|
|
|
|
|
+ selector.SelectSelectorConfig(options=lock_options, multiple=True)
|
|
|
|
|
+ ),
|
|
|
|
|
+ })
|
|
|
|
|
+ return self.async_show_form(
|
|
|
|
|
+ step_id="edit_group_locks",
|
|
|
|
|
+ description_placeholders={"group_name": self._edit_group_name},
|
|
|
|
|
+ data_schema=schema,
|
|
|
|
|
+ errors=errors,
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
async def async_step_remove_group(self, user_input=None) -> ConfigFlowResult:
|
|
async def async_step_remove_group(self, user_input=None) -> ConfigFlowResult:
|
|
|
if not self._groups:
|
|
if not self._groups:
|
|
|
return await self.async_step_init()
|
|
return await self.async_step_init()
|