From 45f533db27c6cebd08f42b9bc7d6f35c9bef1b94 Mon Sep 17 00:00:00 2001 From: Nikhil Rao Date: Mon, 10 Apr 2023 21:29:23 -0700 Subject: [PATCH] Fix event handler lambdas (#804) --- pynecone/app.py | 2 ++ pynecone/state.py | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pynecone/app.py b/pynecone/app.py index 70fb2f94a..42539d06e 100644 --- a/pynecone/app.py +++ b/pynecone/app.py @@ -397,6 +397,7 @@ class App(Base): compiler.compile_theme(self.style) # Compile the pages. + self.state.set_handlers() custom_components = set() for route, component in self.pages.items(): component.add_style(self.style) @@ -408,6 +409,7 @@ class App(Base): # Compile the custom components. compiler.compile_components(custom_components) + # To support calling event handlers from other handlers. self.state.convert_handlers_to_fns() diff --git a/pynecone/state.py b/pynecone/state.py index d8a5f1db3..19d152672 100644 --- a/pynecone/state.py +++ b/pynecone/state.py @@ -185,7 +185,8 @@ class State(Base, ABC): for name, fn in events.items(): event_handler = EventHandler(fn=fn) cls.event_handlers[name] = event_handler - setattr(cls, name, event_handler) + + cls.set_handlers() @classmethod def convert_handlers_to_fns(cls): @@ -196,6 +197,12 @@ class State(Base, ABC): for name, event_handler in cls.event_handlers.items(): setattr(cls, name, event_handler.fn) + @classmethod + def set_handlers(cls): + """Set the state class handlers.""" + for name, event_handler in cls.event_handlers.items(): + setattr(cls, name, event_handler) + @classmethod @functools.lru_cache() def get_parent_state(cls) -> Optional[Type[State]]: