remove weird hacks

This commit is contained in:
Khaleel Al-Adhami 2024-11-21 11:34:33 -08:00
parent 0cf2605f38
commit 0319f3d671
3 changed files with 32 additions and 19 deletions

View File

@ -15,6 +15,8 @@ from reflex.utils.imports import ImportVar
from reflex.utils.serializers import serializer from reflex.utils.serializers import serializer
from reflex.vars import VarData from reflex.vars import VarData
from reflex.vars.base import LiteralVar, Var from reflex.vars.base import LiteralVar, Var
from reflex.vars.function import FunctionVar
from reflex.vars.object import ObjectVar
LiteralPosition = Literal[ LiteralPosition = Literal[
"top-left", "top-left",
@ -232,7 +234,9 @@ class Toaster(Component):
return [hook] return [hook]
@staticmethod @staticmethod
def send_toast(message: str = "", level: str | None = None, **props) -> EventSpec: def send_toast(
message: str | Var = "", level: str | None = None, **props
) -> EventSpec:
"""Send a toast message. """Send a toast message.
Args: Args:
@ -250,22 +254,27 @@ class Toaster(Component):
raise ValueError( raise ValueError(
"Toaster component must be created before sending a toast. (use `rx.toast.provider()`)" "Toaster component must be created before sending a toast. (use `rx.toast.provider()`)"
) )
toast_command = f"{toast_ref}.{level}" if level is not None else toast_ref
toast_command = (
ObjectVar.__getattr__(toast_ref.to(dict), level) if level else toast_ref
).to(FunctionVar)
if isinstance(message, Var): if isinstance(message, Var):
props.setdefault("title", message) props.setdefault("title", message)
message = ""
elif message == "" and "title" not in props and "description" not in props: elif message == "" and "title" not in props and "description" not in props:
raise ValueError("Toast message or title or description must be provided.") raise ValueError("Toast message or title or description must be provided.")
if props:
args = LiteralVar.create(ToastProps(component_name="rx.toast", **props)) # type: ignore
toast = f"{toast_command}(`{message}`, {str(args)})"
else:
toast = f"{toast_command}(`{message}`)"
toast_action = Var(_js_expr=toast) if props:
return run_script(toast_action) args = LiteralVar.create(ToastProps(component_name="rx.toast", **props)) # pyright: ignore [reportCallIssue]
toast = toast_command.call(message, args)
else:
toast = toast_command.call(message)
return run_script(toast)
@staticmethod @staticmethod
def toast_info(message: str = "", **kwargs): def toast_info(message: str | Var = "", **kwargs):
"""Display an info toast message. """Display an info toast message.
Args: Args:
@ -278,7 +287,7 @@ class Toaster(Component):
return Toaster.send_toast(message, level="info", **kwargs) return Toaster.send_toast(message, level="info", **kwargs)
@staticmethod @staticmethod
def toast_warning(message: str = "", **kwargs): def toast_warning(message: str | Var = "", **kwargs):
"""Display a warning toast message. """Display a warning toast message.
Args: Args:
@ -291,7 +300,7 @@ class Toaster(Component):
return Toaster.send_toast(message, level="warning", **kwargs) return Toaster.send_toast(message, level="warning", **kwargs)
@staticmethod @staticmethod
def toast_error(message: str = "", **kwargs): def toast_error(message: str | Var = "", **kwargs):
"""Display an error toast message. """Display an error toast message.
Args: Args:
@ -304,7 +313,7 @@ class Toaster(Component):
return Toaster.send_toast(message, level="error", **kwargs) return Toaster.send_toast(message, level="error", **kwargs)
@staticmethod @staticmethod
def toast_success(message: str = "", **kwargs): def toast_success(message: str | Var = "", **kwargs):
"""Display a success toast message. """Display a success toast message.
Args: Args:

View File

@ -59,16 +59,16 @@ class Toaster(Component):
def add_hooks(self) -> list[Var | str]: ... def add_hooks(self) -> list[Var | str]: ...
@staticmethod @staticmethod
def send_toast( def send_toast(
message: str = "", level: str | None = None, **props message: str | Var = "", level: str | None = None, **props
) -> EventSpec: ... ) -> EventSpec: ...
@staticmethod @staticmethod
def toast_info(message: str = "", **kwargs): ... def toast_info(message: str | Var = "", **kwargs): ...
@staticmethod @staticmethod
def toast_warning(message: str = "", **kwargs): ... def toast_warning(message: str | Var = "", **kwargs): ...
@staticmethod @staticmethod
def toast_error(message: str = "", **kwargs): ... def toast_error(message: str | Var = "", **kwargs): ...
@staticmethod @staticmethod
def toast_success(message: str = "", **kwargs): ... def toast_success(message: str | Var = "", **kwargs): ...
@staticmethod @staticmethod
def toast_dismiss(id: Var | str | None = None): ... def toast_dismiss(id: Var | str | None = None): ...
@overload @overload
@ -176,7 +176,7 @@ class ToastNamespace(ComponentNamespace):
@staticmethod @staticmethod
def __call__( def __call__(
message: str = "", level: Optional[str] = None, **props message: Union[str, Var] = "", level: Optional[str] = None, **props
) -> "Optional[EventSpec]": ) -> "Optional[EventSpec]":
"""Send a toast message. """Send a toast message.

View File

@ -576,6 +576,10 @@ def _isinstance(obj: Any, cls: GenericType, nested: bool = False) -> bool:
return does_obj_satisfy_typed_dict(obj, cls) return does_obj_satisfy_typed_dict(obj, cls)
return isinstance(obj, dict) return isinstance(obj, dict)
# cls is a float
if cls is float:
return isinstance(obj, (float, int))
# cls is a simple class # cls is a simple class
return isinstance(obj, cls) return isinstance(obj, cls)