Skip to content

Commit 2440b3d

Browse files
authored
deprecate overlay_component (#5544)
* deprecate overlay_component * fix deprecation message
1 parent 35da6a2 commit 2440b3d

File tree

5 files changed

+33
-23
lines changed

5 files changed

+33
-23
lines changed

reflex/app.py

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
Sequence,
2323
)
2424
from datetime import datetime
25+
from itertools import chain
2526
from pathlib import Path
2627
from timeit import default_timer as timer
2728
from types import SimpleNamespace
@@ -238,10 +239,6 @@ def default_error_boundary(*children: Component, **props) -> Component:
238239
)
239240

240241

241-
class OverlayFragment(Fragment):
242-
"""Alias for Fragment, used to wrap the overlay_component."""
243-
244-
245242
@dataclasses.dataclass(frozen=True)
246243
class UploadFile(StarletteUploadFile):
247244
"""A file uploaded to the server.
@@ -369,6 +366,11 @@ class App(MiddlewareMixin, LifespanMixin):
369366
)
370367
)
371368

369+
# Extra app wraps to be applied to the whole app.
370+
extra_app_wraps: dict[tuple[int, str], Callable[[bool], Component | None]] = (
371+
dataclasses.field(default_factory=dict)
372+
)
373+
372374
# Components to add to the head of every page.
373375
head_components: list[Component] = dataclasses.field(default_factory=list)
374376

@@ -1031,25 +1033,31 @@ def _should_compile(self) -> bool:
10311033
# By default, compile the app.
10321034
return True
10331035

1034-
def _add_overlay_to_component(self, component: Component) -> Component:
1035-
if self.overlay_component is None:
1036-
return component
1037-
1036+
def _add_overlay_to_component(
1037+
self, component: Component, overlay_component: Component
1038+
) -> Component:
10381039
children = component.children
1039-
overlay_component = self._generate_component(self.overlay_component)
10401040

10411041
if children[0] == overlay_component:
10421042
return component
10431043

1044-
# recreate OverlayFragment with overlay_component as first child
1045-
return OverlayFragment.create(overlay_component, *children)
1044+
return Fragment.create(overlay_component, *children)
10461045

10471046
def _setup_overlay_component(self):
10481047
"""If a State is not used and no overlay_component is specified, do not render the connection modal."""
1049-
if self._state is None and self.overlay_component is default_overlay_component:
1050-
self.overlay_component = None
1048+
if self.overlay_component is None:
1049+
return
1050+
console.deprecate(
1051+
feature_name="overlay_component",
1052+
reason="Use `extra_app_wraps` to add the overlay component instead.",
1053+
deprecation_version="0.8.2",
1054+
removal_version="0.9.0",
1055+
)
1056+
overlay_component = self._generate_component(self.overlay_component)
10511057
for k, component in self._pages.items():
1052-
self._pages[k] = self._add_overlay_to_component(component)
1058+
self._pages[k] = self._add_overlay_to_component(
1059+
component, overlay_component
1060+
)
10531061

10541062
def _setup_sticky_badge(self):
10551063
"""Add the sticky badge to the app."""
@@ -1261,7 +1269,10 @@ def memoized_toast_provider():
12611269
app_wrappers[(1, "ToasterProvider")] = toast_provider
12621270

12631271
# Add the app wraps to the app.
1264-
for key, app_wrap in self.app_wraps.items():
1272+
for key, app_wrap in chain(
1273+
self.app_wraps.items(), self.extra_app_wraps.items()
1274+
):
1275+
# If the app wrap is a callable, generate the component
12651276
component = app_wrap(self._state is not None)
12661277
if component is not None:
12671278
app_wrappers[key] = component

reflex/compiler/compiler.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -828,10 +828,9 @@ def compile_unevaluated_page(
828828
enable_state = True
829829
break
830830

831-
from reflex.app import OverlayFragment
832831
from reflex.utils.format import make_default_page_title
833832

834-
component = OverlayFragment.create(component)
833+
component = Fragment.create(component)
835834

836835
meta_args = {
837836
"title": (

reflex/istate/data.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ def page(self) -> PageData:
202202
The PageData object.
203203
"""
204204
console.deprecate(
205-
"RouterData.page",
206-
"Use RouterData.url instead",
205+
feature_name="RouterData.page",
206+
reason="Use RouterData.url instead",
207207
deprecation_version="0.8.1",
208208
removal_version="0.9.0",
209209
)

reflex/utils/console.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ def _get_first_non_framework_frame() -> FrameType | None:
269269

270270

271271
def deprecate(
272+
*,
272273
feature_name: str,
273274
reason: str,
274275
deprecation_version: str,

tests/units/test_app.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
from reflex.app import (
2525
App,
2626
ComponentCallable,
27-
OverlayFragment,
2827
default_overlay_component,
2928
process,
3029
upload,
@@ -1244,7 +1243,7 @@ async def test_process_events(mocker: MockerFixture, token: str):
12441243
@pytest.mark.parametrize(
12451244
("state", "overlay_component", "exp_page_child"),
12461245
[
1247-
(None, default_overlay_component, None),
1246+
(None, default_overlay_component, Fragment),
12481247
(None, None, None),
12491248
(None, Text.create("foo"), Text),
12501249
(State, default_overlay_component, Fragment),
@@ -1269,10 +1268,10 @@ def test_overlay_component(
12691268
app._setup_overlay_component()
12701269
if exp_page_child is None:
12711270
assert app.overlay_component is None
1272-
elif isinstance(exp_page_child, OverlayFragment):
1271+
elif isinstance(exp_page_child, Fragment):
12731272
assert app.overlay_component is not None
12741273
generated_component = app._generate_component(app.overlay_component)
1275-
assert isinstance(generated_component, OverlayFragment)
1274+
assert isinstance(generated_component, Fragment)
12761275
assert isinstance(
12771276
generated_component.children[0],
12781277
Cond, # ConnectionModal is a Cond under the hood

0 commit comments

Comments
 (0)