diff --git a/homeassistant/helpers/selector.py b/homeassistant/helpers/selector.py index 2d7fd51cac7..0b48658ac08 100644 --- a/homeassistant/helpers/selector.py +++ b/homeassistant/helpers/selector.py @@ -1113,9 +1113,21 @@ class NumberSelector(Selector[NumberSelectorConfig]): return value +class ObjectSchemaDict(TypedDict): + """Class to represent a select option dict.""" + + name: str + selector: dict[str, Any] + + class ObjectSelectorConfig(BaseSelectorConfig): """Class to represent an object selector config.""" + schema: list[ObjectSchemaDict] + multiple: bool + label_key: str + description: bool + @SELECTORS.register("object") class ObjectSelector(Selector[ObjectSelectorConfig]): @@ -1123,7 +1135,19 @@ class ObjectSelector(Selector[ObjectSelectorConfig]): selector_type = "object" - CONFIG_SCHEMA = BASE_SELECTOR_CONFIG_SCHEMA + CONFIG_SCHEMA = BASE_SELECTOR_CONFIG_SCHEMA.extend( + { + vol.Optional("schema"): [ + { + vol.Required("name"): str, + vol.Required("selector"): dict, + } + ], + vol.Optional("label_key"): str, + vol.Optional("description_key"): str, + vol.Optional("multiple", default=False): bool, + } + ) def __init__(self, config: ObjectSelectorConfig | None = None) -> None: """Instantiate a selector.""" diff --git a/tests/helpers/test_selector.py b/tests/helpers/test_selector.py index 3ddbecaf48d..aa797b9edff 100644 --- a/tests/helpers/test_selector.py +++ b/tests/helpers/test_selector.py @@ -590,7 +590,23 @@ def test_action_selector_schema(schema, valid_selections, invalid_selections) -> @pytest.mark.parametrize( ("schema", "valid_selections", "invalid_selections"), - [({}, ("abc123",), ())], + [ + ({}, ("abc123",), ()), + ( + { + "schema": [ + {"name": "name", "selector": {"text": {}}}, + {"name": "percentage", "selector": {"number": {}}}, + ], + "multiple": True, + "label_key": "name", + "description_key": "percentage", + }, + (), + (), + ), + ], + [], ) def test_object_selector_schema(schema, valid_selections, invalid_selections) -> None: """Test object selector."""