Browse Source

Fix event chain bugs (#413)

LumiaGG 2 years ago
parent
commit
6af374e024
2 changed files with 13 additions and 1 deletions
  1. 8 1
      pynecone/components/component.py
  2. 5 0
      pynecone/utils.py

+ 8 - 1
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):

+ 5 - 0
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(