Compare commits

...

1 Commits

Author SHA1 Message Date
Elijah
2320b3126b Form High Level API 2024-04-08 15:23:49 +00:00

View File

@ -7,9 +7,11 @@ from typing import Any, Dict, Literal
from reflex.components.component import Component, ComponentNamespace
from reflex.components.el.elements.forms import Form as HTMLForm
from reflex.components.radix.themes.components.text_field import TextFieldInput
from reflex.components.radix.themes.components.button import Button
from reflex.components.base.fragment import Fragment
from reflex.constants.event import EventTriggers
from reflex.vars import Var
from reflex.state import ComponentState
from .base import RadixPrimitiveComponentWithClassName
@ -169,10 +171,49 @@ class FormSubmit(FormComponent):
# This class is created mainly for reflex-web docs.
class Form(FormRoot):
"""The Form component."""
# class Form(FormRoot):
# """The Form component."""
#
# pass
pass
class Form(ComponentState):
"""The Form component."""
form_data: dict = {}
@classmethod
def has_submit_type(cls,component):
# Check if the component has 'type' attribute and its value is 'submit'
if hasattr(component, 'type') and component.type is not None and Var.create(component.type) ._var_name == 'submit':
return True
# Recursively check children
for child in component.children:
if cls.has_submit_type(child):
return True
return False
@classmethod
def get_component(cls, *children, **props) -> Component:
submit_present = cls.has_submit_type(Fragment.create(*children))
extras = []
if not submit_present:
extras.append(Button.create("Submit", type="submit"))
return Fragment.create(
FormRoot.create(
Fragment.create(
*children,
*extras
),
on_submit=cls.handle_submit if not "on_submit" in props else props.pop("on_submit"),
**props
),
)
def handle_submit(self, form_data: dict):
self.form_data = form_data
class FormNamespace(ComponentNamespace):
@ -189,3 +230,5 @@ class FormNamespace(ComponentNamespace):
form = FormNamespace()