diff --git a/packages/reflex-components-internal/src/reflex_components_internal/blocks/demo_form.py b/packages/reflex-components-internal/src/reflex_components_internal/blocks/demo_form.py index cae1362ac7e..93c02952232 100644 --- a/packages/reflex-components-internal/src/reflex_components_internal/blocks/demo_form.py +++ b/packages/reflex-components-internal/src/reflex_components_internal/blocks/demo_form.py @@ -404,11 +404,9 @@ def demo_form_dialog( Returns: A Reflex dialog component containing the demo form """ - if trigger is None: - trigger = rx.fragment() class_name = cn("w-auto", props.pop("class_name", "")) return dialog.root( - dialog.trigger(render_=trigger), + dialog.trigger(render_=trigger) if trigger is not None else None, dialog.portal( dialog.backdrop(), dialog.popup( diff --git a/tests/units/reflex_components_internal/blocks/test_demo_form.py b/tests/units/reflex_components_internal/blocks/test_demo_form.py new file mode 100644 index 00000000000..4d8e058ad7f --- /dev/null +++ b/tests/units/reflex_components_internal/blocks/test_demo_form.py @@ -0,0 +1,32 @@ +"""Tests for the demo form block.""" + +import re + +from reflex_components_internal.blocks.demo_form import demo_form_dialog + +import reflex as rx + +RENDER_PROP_PATTERN = re.compile(r"render:\(jsx\((\w+)") +TRIGGER_LABEL = "Show me the demo form" + + +def test_demo_form_dialog_omits_trigger_when_not_given() -> None: + """A dialog without a trigger renders no trigger instead of an empty fragment.""" + rendered = str(demo_form_dialog()) + + assert "Dialog.Trigger" not in rendered + # A Fragment cannot receive the props and ref that a base-ui render prop + # forwards to it, which makes React complain at runtime. + assert "Fragment" not in RENDER_PROP_PATTERN.findall(rendered) + + +def test_demo_form_dialog_renders_given_trigger() -> None: + """A dialog with a trigger renders it through the trigger's render prop.""" + # The dialog body has fixed copy of its own, so the label must be one that + # only the trigger can contribute. + assert TRIGGER_LABEL not in str(demo_form_dialog()) + + rendered = str(demo_form_dialog(trigger=rx.el.button(TRIGGER_LABEL))) + + assert "Dialog.Trigger" in rendered + assert TRIGGER_LABEL in rendered