Skip to content

Commit

Permalink
[ENG-4383] Handle special float values on frontend (#4638)
Browse files Browse the repository at this point in the history
Add a test case to `test_computed_vars.py` which renders a list of special floats.

Fix #4637
  • Loading branch information
masenf authored Jan 15, 2025
1 parent f69be58 commit e8a7112
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
9 changes: 8 additions & 1 deletion reflex/.templates/web/utils/state.js
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,14 @@ export const connect = async (
autoUnref: false,
});
// Ensure undefined fields in events are sent as null instead of removed
socket.current.io.encoder.replacer = (k, v) => (v === undefined ? null : v)
socket.current.io.encoder.replacer = (k, v) => (v === undefined ? null : v);
socket.current.io.decoder.tryParse = (str) => {
try {
return JSON5.parse(str);
} catch (e) {
return false;
}
};

function checkVisibility() {
if (document.visibilityState === "visible") {
Expand Down
14 changes: 14 additions & 0 deletions tests/integration/test_computed_vars.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,11 @@ def depends_on_count1(self) -> int:
def depends_on_count3(self) -> int:
return self.count

# special floats should be properly decoded on the frontend
@rx.var(cache=True, initial_value=[])
def special_floats(self) -> list[float]:
return [42.9, float("nan"), float("inf"), float("-inf")]

@rx.event
def increment(self):
self.count += 1
Expand Down Expand Up @@ -103,6 +108,11 @@ def index() -> rx.Component:
State.depends_on_count3,
id="depends_on_count3",
),
rx.text("special_floats:"),
rx.text(
State.special_floats.join(", "),
id="special_floats",
),
),
)

Expand Down Expand Up @@ -224,6 +234,10 @@ async def test_computed_vars(
assert depends_on_count3
assert depends_on_count3.text == "0"

special_floats = driver.find_element(By.ID, "special_floats")
assert special_floats
assert special_floats.text == "42.9, NaN, Infinity, -Infinity"

increment = driver.find_element(By.ID, "increment")
assert increment.is_enabled()

Expand Down

0 comments on commit e8a7112

Please sign in to comment.