Skip to content

Commit

Permalink
add test case and avoid concat var operation if it's not necessary
Browse files Browse the repository at this point in the history
  • Loading branch information
adhami3310 committed Sep 24, 2024
1 parent b4819d9 commit 2789a73
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 0 deletions.
3 changes: 3 additions & 0 deletions reflex/components/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,9 @@ def __init__(self, *args, **kwargs):
kwargs["class_name"] = LiteralArrayVar.create(
class_name, _var_type=List[str]
).join(" ")
elif isinstance(class_name, str) and class_name:
print("class_name", class_name)
kwargs["class_name"] = LiteralVar.create(class_name)

# Construct the component.
super().__init__(*args, **kwargs)
Expand Down
23 changes: 23 additions & 0 deletions reflex/vars/sequence.py
Original file line number Diff line number Diff line change
Expand Up @@ -592,6 +592,29 @@ def create(
else:
return only_string.to(StringVar, only_string._var_type)

if len(
literal_strings := [
s
for s in filtered_strings_and_vals
if isinstance(s, (str, LiteralStringVar))
]
) == len(filtered_strings_and_vals):
return LiteralStringVar.create(
"".join(
s._var_value if isinstance(s, LiteralStringVar) else s
for s in literal_strings
),
_var_type=_var_type,
_var_data=VarData.merge(
_var_data,
*(
s._get_all_var_data()
for s in filtered_strings_and_vals
if isinstance(s, Var)
),
),
)

concat_result = ConcatVarOperation.create(
*filtered_strings_and_vals,
_var_data=_var_data,
Expand Down
10 changes: 10 additions & 0 deletions tests/components/test_component.py
Original file line number Diff line number Diff line change
Expand Up @@ -1288,6 +1288,16 @@ def handler2(self, arg):
[FORMATTED_TEST_VAR],
id="fstring-class_name",
),
pytest.param(
rx.fragment(class_name=f"foo{TEST_VAR}bar other-class"),
[LiteralVar.create(f"{FORMATTED_TEST_VAR} other-class")],
id="fstring-dual-class_name",
),
pytest.param(
rx.fragment(class_name=[TEST_VAR, "other-class"]),
[LiteralVar.create([TEST_VAR, "other-class"]).join(" ")],
id="fstring-dual-class_name",
),
pytest.param(
rx.fragment(special_props=[TEST_VAR]),
[TEST_VAR],
Expand Down

0 comments on commit 2789a73

Please sign in to comment.