From 6af374e0244e54c089983a700cc192e840464019 Mon Sep 17 00:00:00 2001 From: LumiaGG <59308965+LumiaGG@users.noreply.github.com> Date: Sun, 5 Feb 2023 02:46:31 +0800 Subject: [PATCH] Fix event chain bugs (#413) --- pynecone/components/component.py | 9 ++++++++- pynecone/utils.py | 5 +++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pynecone/components/component.py b/pynecone/components/component.py index c9b4e3456..fa46b68e4 100644 --- a/pynecone/components/component.py +++ b/pynecone/components/component.py @@ -176,7 +176,14 @@ class Component(Base, ABC): # If the input is a list of event handlers, create an event chain. if isinstance(value, List): - events = [utils.call_event_handler(v, arg) for v in value] + events = [] + for v in value: + if isinstance(v, EventHandler): + events.append(utils.call_event_handler(v, arg)) + elif isinstance(v, Callable): + events.extend(utils.call_event_fn(v, arg)) + else: + raise ValueError(f"Invalid event: {v}") # If the input is a callable, create an event chain. elif isinstance(value, Callable): diff --git a/pynecone/utils.py b/pynecone/utils.py index 67bd545f2..1a7653056 100644 --- a/pynecone/utils.py +++ b/pynecone/utils.py @@ -1293,6 +1293,11 @@ 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(