From 206de4df7af09ef31148bd5f7896c4268b4aac4e Mon Sep 17 00:00:00 2001 From: Elijah Ahianyo Date: Fri, 13 Dec 2024 19:27:51 +0000 Subject: [PATCH] Unify `is_external` prop in `rx.redirect` and `rx.link` (#4389) * Unify `is_external` prop in `rx.redirect` and `rx.link` * default external to `None` * address PR comment * use a one-liner * reorder args for api stability Co-authored-by: Masen Furer * reorder doc args * external arg as deprecated in the docs * Update reflex/event.py Co-authored-by: Khaleel Al-Adhami * Fixup typing_extensions import and ruff --------- Co-authored-by: Masen Furer Co-authored-by: Khaleel Al-Adhami --- reflex/event.py | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/reflex/event.py b/reflex/event.py index 05a163d3e1..8342062441 100644 --- a/reflex/event.py +++ b/reflex/event.py @@ -25,6 +25,7 @@ overload, ) +import typing_extensions from typing_extensions import ( Concatenate, ParamSpec, @@ -714,26 +715,61 @@ def fn(): ) +@overload +def redirect( + path: str | Var[str], + is_external: Optional[bool] = None, + replace: bool = False, +) -> EventSpec: ... + + +@overload +@typing_extensions.deprecated("`external` is deprecated use `is_external` instead") +def redirect( + path: str | Var[str], + is_external: Optional[bool] = None, + replace: bool = False, + external: Optional[bool] = None, +) -> EventSpec: ... + + def redirect( path: str | Var[str], - external: Optional[bool] = False, - replace: Optional[bool] = False, + is_external: Optional[bool] = None, + replace: bool = False, + external: Optional[bool] = None, ) -> EventSpec: """Redirect to a new path. Args: path: The path to redirect to. - external: Whether to open in new tab or not. + is_external: Whether to open in new tab or not. replace: If True, the current page will not create a new history entry. + external(Deprecated): Whether to open in new tab or not. Returns: An event to redirect to the path. """ + if external is not None: + console.deprecate( + "The `external` prop in `rx.redirect`", + "use `is_external` instead.", + "0.6.6", + "0.7.0", + ) + + # is_external should take precedence over external. + is_external = ( + (False if external is None else external) + if is_external is None + else is_external + ) + return server_side( "_redirect", get_fn_signature(redirect), path=path, - external=external, + external=is_external, replace=replace, )