|
@@ -18,6 +18,7 @@ from reflex.event import (
|
|
|
prevent_default,
|
|
|
)
|
|
|
from reflex.utils.imports import ImportDict
|
|
|
+from reflex.utils.types import is_optional
|
|
|
from reflex.vars import VarData
|
|
|
from reflex.vars.base import LiteralVar, Var
|
|
|
|
|
@@ -382,6 +383,33 @@ class Input(BaseHTML):
|
|
|
# Fired when a key is released
|
|
|
on_key_up: EventHandler[key_event]
|
|
|
|
|
|
+ @classmethod
|
|
|
+ def create(cls, *children, **props):
|
|
|
+ """Create an Input component.
|
|
|
+
|
|
|
+ Args:
|
|
|
+ *children: The children of the component.
|
|
|
+ **props: The properties of the component.
|
|
|
+
|
|
|
+ Returns:
|
|
|
+ The component.
|
|
|
+ """
|
|
|
+ from reflex.vars.number import ternary_operation
|
|
|
+
|
|
|
+ value = props.get("value")
|
|
|
+
|
|
|
+ # React expects an empty string(instead of null) for controlled inputs.
|
|
|
+ if value is not None and is_optional(
|
|
|
+ (value_var := Var.create(value))._var_type
|
|
|
+ ):
|
|
|
+ props["value"] = ternary_operation(
|
|
|
+ (value_var != Var.create(None)) # pyright: ignore [reportGeneralTypeIssues]
|
|
|
+ & (value_var != Var(_js_expr="undefined")),
|
|
|
+ value,
|
|
|
+ Var.create(""),
|
|
|
+ )
|
|
|
+ return super().create(*children, **props)
|
|
|
+
|
|
|
|
|
|
class Label(BaseHTML):
|
|
|
"""Display the label element."""
|