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(