assert that .render returns jsonable values (#4708)

* assert that .render returns jsonable values

* render component default
This commit is contained in:
Khaleel Al-Adhami 2025-01-28 23:02:14 -08:00 committed by GitHub
parent 5beea25b31
commit 58e63f387f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 3 deletions

View File

@ -90,7 +90,7 @@
break;
{% endfor %}
default:
return {{ component.default }};
return {{ render(component.default) }};
break;
}
})()

View File

@ -65,7 +65,24 @@ class Tag:
Yields:
Tuple[str, Any]: The field name and value.
"""
from reflex.components.component import BaseComponent
for field in dataclasses.fields(self):
value = getattr(self, field.name)
if isinstance(value, list):
children = []
for child in value:
if isinstance(child, BaseComponent):
children.append(child.render())
else:
children.append(child)
yield field.name, children
continue
if isinstance(value, BaseComponent):
yield field.name, value.render()
continue
if callable(value) and not isinstance(value, Var):
continue
yield field.name, getattr(self, field.name)
def add_props(self, **kwargs: Optional[Any]) -> Tag:

View File

@ -78,7 +78,7 @@ def test_match_components():
assert fifth_return_value_render["name"] == "RadixThemesText"
assert fifth_return_value_render["children"][0]["contents"] == '{"sixth value"}'
default = match_child["default"].render()
default = match_child["default"]
assert default["name"] == "RadixThemesText"
assert default["children"][0]["contents"] == '{"default value"}'
@ -153,7 +153,7 @@ def test_match_on_component_without_default():
match_comp = Match.create(MatchState.value, *match_case_tuples)
default = match_comp.render()["children"][0]["default"]
assert isinstance(default, Fragment)
assert isinstance(default, dict) and default["name"] == Fragment.__name__
def test_match_on_var_no_default():