From 51e04c2351b801bfedc4b70b270813897c25af2f Mon Sep 17 00:00:00 2001 From: Nikhil Rao Date: Mon, 6 Feb 2023 14:45:07 -0800 Subject: [PATCH 1/2] Fix server side events --- pynecone/.templates/web/utils/state.js | 15 +++++++++++---- pynecone/utils.py | 5 ----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/pynecone/.templates/web/utils/state.js b/pynecone/.templates/web/utils/state.js index ddc3308756..61bbc6743e 100644 --- a/pynecone/.templates/web/utils/state.js +++ b/pynecone/.templates/web/utils/state.js @@ -68,22 +68,24 @@ export const applyDelta = (state, delta) => { * @param event The event to send. * @param router The router object. * @param socket The socket object to send the event on. + * + * @returns True if the event was sent, false if it was handled locally. */ export const applyEvent = async (event, router, socket) => { // Handle special events if (event.name == "_redirect") { router.push(event.payload.path); - return; + return false; } if (event.name == "_console") { console.log(event.payload.message); - return; + return false; } if (event.name == "_alert") { alert(event.payload.message); - return; + return false; } // Send the event to the server. @@ -92,6 +94,7 @@ export const applyEvent = async (event, router, socket) => { if (socket) { socket.emit("event", JSON.stringify(event)); } + return true; }; /** @@ -119,7 +122,11 @@ export const updateState = async (state, setState, result, setResult, router, so setState({ ...state, events: state.events }); // Apply the event. - await applyEvent(event, router, socket); + const eventSent = await applyEvent(event, router, socket); + if (!eventSent) { + // If no event was sent, set processing to false and return. + setResult({...state, processing: false}) + } }; /** diff --git a/pynecone/utils.py b/pynecone/utils.py index 6d2a26392d..be7720cf19 100644 --- a/pynecone/utils.py +++ b/pynecone/utils.py @@ -1304,11 +1304,6 @@ def fix_events(events: Optional[List[Event]], token: str) -> List[Event]: name = format_event_handler(e.handler) payload = dict(e.args) - # Remove any extra quotes introduced by json.dumps(..) and escape the characters. - for k, v in payload.items(): - if isinstance(v, str): - payload[k] = json.loads(v) - # Create an event and append it to the list. out.append( Event( From a440aaf8acc6b32dc5ff3776a1fe41824054b15b Mon Sep 17 00:00:00 2001 From: Nikhil Rao Date: Mon, 6 Feb 2023 14:46:46 -0800 Subject: [PATCH 2/2] Fix logic --- pynecone/.templates/web/utils/state.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pynecone/.templates/web/utils/state.js b/pynecone/.templates/web/utils/state.js index 61bbc6743e..388b737a8d 100644 --- a/pynecone/.templates/web/utils/state.js +++ b/pynecone/.templates/web/utils/state.js @@ -93,8 +93,10 @@ export const applyEvent = async (event, router, socket) => { event.router_data = (({ pathname, query }) => ({ pathname, query }))(router); if (socket) { socket.emit("event", JSON.stringify(event)); + return true; } - return true; + + return false; }; /**