[REF-2636]Improve Error message for unsupported event trigger (#3147)
* Improve Error message for unsupported event trigger * typo fix * fix ci * add tests * Update reflex/components/component.py Co-authored-by: Masen Furer <m_github@0x26.net> * fix typo --------- Co-authored-by: Masen Furer <m_github@0x26.net>
This commit is contained in:
parent
25b84107da
commit
8e4d6a4781
@ -255,6 +255,7 @@ class Component(BaseComponent, ABC):
|
|||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
TypeError: If an invalid prop is passed.
|
TypeError: If an invalid prop is passed.
|
||||||
|
ValueError: If an event trigger passed is not valid.
|
||||||
"""
|
"""
|
||||||
# Set the id and children initially.
|
# Set the id and children initially.
|
||||||
children = kwargs.get("children", [])
|
children = kwargs.get("children", [])
|
||||||
@ -284,6 +285,12 @@ class Component(BaseComponent, ABC):
|
|||||||
|
|
||||||
# Iterate through the kwargs and set the props.
|
# Iterate through the kwargs and set the props.
|
||||||
for key, value in kwargs.items():
|
for key, value in kwargs.items():
|
||||||
|
if key.startswith("on_") and key not in triggers and key not in props:
|
||||||
|
raise ValueError(
|
||||||
|
f"The {(comp_name := type(self).__name__)} does not take in an `{key}` event trigger. If {comp_name}"
|
||||||
|
f" is a third party component make sure to add `{key}` to the component's event triggers. "
|
||||||
|
f"visit https://reflex.dev/docs/wrapping-react/logic/#event-triggers for more info."
|
||||||
|
)
|
||||||
if key in triggers:
|
if key in triggers:
|
||||||
# Event triggers are bound to event chains.
|
# Event triggers are bound to event chains.
|
||||||
field_type = EventChain
|
field_type = EventChain
|
||||||
|
@ -1569,3 +1569,28 @@ def test_custom_component_declare_event_handlers_in_fields():
|
|||||||
parse_args_spec(custom_triggers[trigger_name]),
|
parse_args_spec(custom_triggers[trigger_name]),
|
||||||
):
|
):
|
||||||
assert v1.equals(v2)
|
assert v1.equals(v2)
|
||||||
|
|
||||||
|
|
||||||
|
def test_invalid_event_trigger():
|
||||||
|
class TriggerComponent(Component):
|
||||||
|
on_push: Var[bool]
|
||||||
|
|
||||||
|
def get_event_triggers(self) -> Dict[str, Any]:
|
||||||
|
"""Test controlled triggers.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Test controlled triggers.
|
||||||
|
"""
|
||||||
|
return {
|
||||||
|
**super().get_event_triggers(),
|
||||||
|
"on_a": lambda: [],
|
||||||
|
}
|
||||||
|
|
||||||
|
trigger_comp = TriggerComponent.create
|
||||||
|
|
||||||
|
# test that these do not throw errors.
|
||||||
|
trigger_comp(on_push=True)
|
||||||
|
trigger_comp(on_a=rx.console_log("log"))
|
||||||
|
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
trigger_comp(on_b=rx.console_log("log"))
|
||||||
|
Loading…
Reference in New Issue
Block a user