From cbdaca75969d4f567cc9ec211e44805f649cb9c1 Mon Sep 17 00:00:00 2001 From: Khaleel Al-Adhami Date: Mon, 28 Oct 2024 18:10:29 -0700 Subject: [PATCH] accept dict str str --- reflex/components/el/elements/forms.py | 11 ++++++++++- reflex/components/el/elements/forms.pyi | 5 ++++- reflex/components/radix/primitives/form.pyi | 12 +++++++++--- reflex/event.py | 7 ++++++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/reflex/components/el/elements/forms.py b/reflex/components/el/elements/forms.py index 7cb776ee9..4caf14b41 100644 --- a/reflex/components/el/elements/forms.py +++ b/reflex/components/el/elements/forms.py @@ -111,6 +111,15 @@ def on_submit_event_spec() -> Tuple[Var[Dict[str, Any]]]: return (FORM_DATA,) +def on_submit_string_event_spec() -> Tuple[Var[Dict[str, str]]]: + """Event handler spec for the on_submit event. + + Returns: + The event handler spec. + """ + return (FORM_DATA,) + + class Form(BaseHTML): """Display the form element.""" @@ -150,7 +159,7 @@ class Form(BaseHTML): handle_submit_unique_name: Var[str] # Fired when the form is submitted - on_submit: EventHandler[on_submit_event_spec] + on_submit: EventHandler[on_submit_event_spec, on_submit_string_event_spec] @classmethod def create(cls, *children, **props): diff --git a/reflex/components/el/elements/forms.pyi b/reflex/components/el/elements/forms.pyi index 2f889bc38..8d8945aa1 100644 --- a/reflex/components/el/elements/forms.pyi +++ b/reflex/components/el/elements/forms.pyi @@ -271,6 +271,7 @@ class Fieldset(Element): ... def on_submit_event_spec() -> Tuple[Var[Dict[str, Any]]]: ... +def on_submit_string_event_spec() -> Tuple[Var[Dict[str, str]]]: ... class Form(BaseHTML): @overload @@ -337,7 +338,9 @@ class Form(BaseHTML): on_mouse_over: Optional[EventType[[]]] = None, on_mouse_up: Optional[EventType[[]]] = None, on_scroll: Optional[EventType[[]]] = None, - on_submit: Optional[EventType[Dict[str, Any]]] = None, + on_submit: Optional[ + Union[EventType[Dict[str, Any]], EventType[Dict[str, str]]] + ] = None, on_unmount: Optional[EventType[[]]] = None, **props, ) -> "Form": diff --git a/reflex/components/radix/primitives/form.pyi b/reflex/components/radix/primitives/form.pyi index 2139f0c23..8e41d8fd7 100644 --- a/reflex/components/radix/primitives/form.pyi +++ b/reflex/components/radix/primitives/form.pyi @@ -129,7 +129,9 @@ class FormRoot(FormComponent, HTMLForm): on_mouse_over: Optional[EventType[[]]] = None, on_mouse_up: Optional[EventType[[]]] = None, on_scroll: Optional[EventType[[]]] = None, - on_submit: Optional[EventType[Dict[str, Any]]] = None, + on_submit: Optional[ + Union[EventType[Dict[str, Any]], EventType[Dict[str, str]]] + ] = None, on_unmount: Optional[EventType[[]]] = None, **props, ) -> "FormRoot": @@ -594,7 +596,9 @@ class Form(FormRoot): on_mouse_over: Optional[EventType[[]]] = None, on_mouse_up: Optional[EventType[[]]] = None, on_scroll: Optional[EventType[[]]] = None, - on_submit: Optional[EventType[Dict[str, Any]]] = None, + on_submit: Optional[ + Union[EventType[Dict[str, Any]], EventType[Dict[str, str]]] + ] = None, on_unmount: Optional[EventType[[]]] = None, **props, ) -> "Form": @@ -716,7 +720,9 @@ class FormNamespace(ComponentNamespace): on_mouse_over: Optional[EventType[[]]] = None, on_mouse_up: Optional[EventType[[]]] = None, on_scroll: Optional[EventType[[]]] = None, - on_submit: Optional[EventType[Dict[str, Any]]] = None, + on_submit: Optional[ + Union[EventType[Dict[str, Any]], EventType[Dict[str, str]]] + ] = None, on_unmount: Optional[EventType[[]]] = None, **props, ) -> "Form": diff --git a/reflex/event.py b/reflex/event.py index ece60772b..04476da5f 100644 --- a/reflex/event.py +++ b/reflex/event.py @@ -1104,7 +1104,7 @@ def call_event_handler( if event_spec_return_types: failures = [] - for event_spec_return_type in event_spec_return_types: + for i, event_spec_return_type in enumerate(event_spec_return_types): args = get_args(event_spec_return_type) args_types_without_vars = [ @@ -1146,6 +1146,11 @@ def call_event_handler( break if not failed_type_check: + if i: + console.warn( + f"Event handler {key} expects {args_types_without_vars} but got {type_hints_of_provided_callback} as annotated in {event_handler.fn.__qualname__} instead. " + f"This may lead to unexpected behavior but is intentionally ignored for {key}." + ) return event_handler(*parsed_args) if failures: