|
@@ -0,0 +1,75 @@
|
|
|
+"""Add standard Hooks wrapper for React."""
|
|
|
+
|
|
|
+from reflex.utils.imports import ImportVar
|
|
|
+from reflex.vars import Var, VarData
|
|
|
+
|
|
|
+
|
|
|
+def _add_react_import(v: Var | None, tags: str | list):
|
|
|
+ if v is None:
|
|
|
+ return
|
|
|
+
|
|
|
+ if isinstance(tags, str):
|
|
|
+ tags = [tags]
|
|
|
+
|
|
|
+ v._var_data = VarData( # type: ignore
|
|
|
+ imports={"react": [ImportVar(tag=tag) for tag in tags]},
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def const(name, value) -> Var | None:
|
|
|
+ """Create a constant Var.
|
|
|
+
|
|
|
+ Args:
|
|
|
+ name: The name of the constant.
|
|
|
+ value: The value of the constant.
|
|
|
+
|
|
|
+ Returns:
|
|
|
+ The constant Var.
|
|
|
+ """
|
|
|
+ return Var.create(f"const {name} = {value}")
|
|
|
+
|
|
|
+
|
|
|
+def useCallback(func, deps) -> Var | None:
|
|
|
+ """Create a useCallback hook with a function and dependencies.
|
|
|
+
|
|
|
+ Args:
|
|
|
+ func: The function to wrap.
|
|
|
+ deps: The dependencies of the function.
|
|
|
+
|
|
|
+ Returns:
|
|
|
+ The useCallback hook.
|
|
|
+ """
|
|
|
+ if deps:
|
|
|
+ v = Var.create(f"useCallback({func}, {deps})")
|
|
|
+ else:
|
|
|
+ v = Var.create(f"useCallback({func})")
|
|
|
+ _add_react_import(v, "useCallback")
|
|
|
+ return v
|
|
|
+
|
|
|
+
|
|
|
+def useContext(context) -> Var | None:
|
|
|
+ """Create a useContext hook with a context.
|
|
|
+
|
|
|
+ Args:
|
|
|
+ context: The context to use.
|
|
|
+
|
|
|
+ Returns:
|
|
|
+ The useContext hook.
|
|
|
+ """
|
|
|
+ v = Var.create(f"useContext({context})")
|
|
|
+ _add_react_import(v, "useContext")
|
|
|
+ return v
|
|
|
+
|
|
|
+
|
|
|
+def useRef(default) -> Var | None:
|
|
|
+ """Create a useRef hook with a default value.
|
|
|
+
|
|
|
+ Args:
|
|
|
+ default: The default value of the ref.
|
|
|
+
|
|
|
+ Returns:
|
|
|
+ The useRef hook.
|
|
|
+ """
|
|
|
+ v = Var.create(f"useRef({default})")
|
|
|
+ _add_react_import(v, "useRef")
|
|
|
+ return v
|