mirror of
https://github.com/home-assistant/core.git
synced 2025-07-31 01:07:10 +00:00
Allow use of Selector in ObjectSelector fields
This commit is contained in:
parent
afb247c907
commit
0ccabe9f2c
@ -3,6 +3,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from collections.abc import Callable, Mapping, Sequence
|
from collections.abc import Callable, Mapping, Sequence
|
||||||
|
from copy import deepcopy
|
||||||
from enum import StrEnum
|
from enum import StrEnum
|
||||||
from functools import cache
|
from functools import cache
|
||||||
import importlib
|
import importlib
|
||||||
@ -1133,7 +1134,7 @@ class ObjectSelectorField(TypedDict):
|
|||||||
|
|
||||||
label: str
|
label: str
|
||||||
required: bool
|
required: bool
|
||||||
selector: dict[str, Any]
|
selector: Required[Selector | dict[str, Any]]
|
||||||
|
|
||||||
|
|
||||||
class ObjectSelectorConfig(BaseSelectorConfig):
|
class ObjectSelectorConfig(BaseSelectorConfig):
|
||||||
@ -1142,7 +1143,7 @@ class ObjectSelectorConfig(BaseSelectorConfig):
|
|||||||
fields: dict[str, ObjectSelectorField]
|
fields: dict[str, ObjectSelectorField]
|
||||||
multiple: bool
|
multiple: bool
|
||||||
label_field: str
|
label_field: str
|
||||||
description_field: bool
|
description_field: str
|
||||||
translation_key: str
|
translation_key: str
|
||||||
|
|
||||||
|
|
||||||
@ -1156,7 +1157,7 @@ class ObjectSelector(Selector[ObjectSelectorConfig]):
|
|||||||
{
|
{
|
||||||
vol.Optional("fields"): {
|
vol.Optional("fields"): {
|
||||||
str: {
|
str: {
|
||||||
vol.Required("selector"): dict,
|
vol.Required("selector"): vol.Any(Selector, dict),
|
||||||
vol.Optional("required"): bool,
|
vol.Optional("required"): bool,
|
||||||
vol.Optional("label"): str,
|
vol.Optional("label"): str,
|
||||||
}
|
}
|
||||||
@ -1172,6 +1173,17 @@ class ObjectSelector(Selector[ObjectSelectorConfig]):
|
|||||||
"""Instantiate a selector."""
|
"""Instantiate a selector."""
|
||||||
super().__init__(config)
|
super().__init__(config)
|
||||||
|
|
||||||
|
def serialize(self) -> dict[str, dict[str, ObjectSelectorConfig]]:
|
||||||
|
"""Serialize ObjectSelector for voluptuous_serialize."""
|
||||||
|
_config = deepcopy(self.config)
|
||||||
|
if "fields" in _config:
|
||||||
|
for items in _config["fields"].values():
|
||||||
|
if isinstance(items["selector"], Selector):
|
||||||
|
items["selector"] = {
|
||||||
|
items["selector"].selector_type: items["selector"].config
|
||||||
|
}
|
||||||
|
return {"selector": {self.selector_type: _config}}
|
||||||
|
|
||||||
def __call__(self, data: Any) -> Any:
|
def __call__(self, data: Any) -> Any:
|
||||||
"""Validate the passed selection."""
|
"""Validate the passed selection."""
|
||||||
return data
|
return data
|
||||||
|
Loading…
x
Reference in New Issue
Block a user