Skip to content

Commit 90512dc

Browse files
authored
add str to callback for call_function (#5139)
1 parent 4347c30 commit 90512dc

File tree

2 files changed

+37
-23
lines changed

2 files changed

+37
-23
lines changed

reflex/.templates/web/utils/state.js

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -260,11 +260,15 @@ export const applyEvent = async (event, socket) => {
260260
try {
261261
const eval_result = event.payload.function();
262262
if (event.payload.callback) {
263-
if (!!eval_result && typeof eval_result.then === "function") {
264-
event.payload.callback(await eval_result);
265-
} else {
266-
event.payload.callback(eval_result);
267-
}
263+
const final_result =
264+
!!eval_result && typeof eval_result.then === "function"
265+
? await eval_result
266+
: eval_result;
267+
const callback =
268+
typeof event.payload.callback === "string"
269+
? eval(event.payload.callback)
270+
: event.payload.callback;
271+
callback(final_result);
268272
}
269273
} catch (e) {
270274
console.log("_call_function", e);
@@ -283,11 +287,15 @@ export const applyEvent = async (event, socket) => {
283287
: eval(event.payload.function)();
284288

285289
if (event.payload.callback) {
286-
if (!!eval_result && typeof eval_result.then === "function") {
287-
eval(event.payload.callback)(await eval_result);
288-
} else {
289-
eval(event.payload.callback)(eval_result);
290-
}
290+
const final_result =
291+
!!eval_result && typeof eval_result.then === "function"
292+
? await eval_result
293+
: eval_result;
294+
const callback =
295+
typeof event.payload.callback === "string"
296+
? eval(event.payload.callback)
297+
: event.payload.callback;
298+
callback(final_result);
291299
}
292300
} catch (e) {
293301
console.log("_call_script", e);
@@ -364,7 +372,7 @@ export const queueEvents = async (events, socket, prepend) => {
364372
),
365373
];
366374
}
367-
event_queue.push(...events);
375+
event_queue.push(...events.filter((e) => e !== undefined && e !== null));
368376
await processEvent(socket.current);
369377
};
370378

@@ -750,11 +758,13 @@ export const useEventLoop = (
750758

751759
// Function to add new events to the event queue.
752760
const addEvents = (events, args, event_actions) => {
761+
const _events = events.filter((e) => e !== undefined && e !== null);
762+
753763
if (!(args instanceof Array)) {
754764
args = [args];
755765
}
756766

757-
event_actions = events.reduce(
767+
event_actions = _events.reduce(
758768
(acc, e) => ({ ...acc, ...e.event_actions }),
759769
event_actions ?? {},
760770
);
@@ -767,7 +777,7 @@ export const useEventLoop = (
767777
if (event_actions?.stopPropagation && _e?.stopPropagation) {
768778
_e.stopPropagation();
769779
}
770-
const combined_name = events.map((e) => e.name).join("+++");
780+
const combined_name = _events.map((e) => e.name).join("+++");
771781
if (event_actions?.temporal) {
772782
if (!socket.current || !socket.current.connected) {
773783
return; // don't queue when the backend is not connected
@@ -783,11 +793,11 @@ export const useEventLoop = (
783793
// If debounce is used, queue the events after some delay
784794
debounce(
785795
combined_name,
786-
() => queueEvents(events, socket),
796+
() => queueEvents(_events, socket),
787797
event_actions.debounce,
788798
);
789799
} else {
790-
queueEvents(events, socket);
800+
queueEvents(_events, socket);
791801
}
792802
};
793803

reflex/event.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,10 +1157,12 @@ def call_script(
11571157
callback_kwargs = {}
11581158
if callback is not None:
11591159
callback_kwargs = {
1160-
"callback": format.format_queue_events(
1161-
callback,
1162-
args_spec=lambda result: [result],
1163-
)._js_expr,
1160+
"callback": str(
1161+
format.format_queue_events(
1162+
callback,
1163+
args_spec=lambda result: [result],
1164+
)
1165+
),
11641166
}
11651167
if isinstance(javascript_code, str):
11661168
# When there is VarData, include it and eval the JS code inline on the client.
@@ -1196,10 +1198,12 @@ def call_function(
11961198
callback_kwargs = {"callback": None}
11971199
if callback is not None:
11981200
callback_kwargs = {
1199-
"callback": format.format_queue_events(
1200-
callback,
1201-
args_spec=lambda result: [result],
1202-
),
1201+
"callback": str(
1202+
format.format_queue_events(
1203+
callback,
1204+
args_spec=lambda result: [result],
1205+
),
1206+
)
12031207
}
12041208

12051209
javascript_code = (

0 commit comments

Comments
 (0)