|
7 | 7 | from typing import Any, Callable, Optional, Tuple, Type, Union |
8 | 8 | from urllib.parse import urlencode, urlunparse |
9 | 9 |
|
10 | | -from idom import component, use_effect, use_state |
11 | 10 | from idom.backend import default as default_server |
12 | 11 | from idom.backend.types import BackendImplementation |
13 | 12 | from idom.backend.utils import find_available_port |
14 | | -from idom.core.hooks import use_callback |
| 13 | +from idom.core.component import component |
| 14 | +from idom.core.hooks import use_callback, use_effect, use_state |
15 | 15 | from idom.core.types import ComponentConstructor |
16 | 16 | from idom.utils import Ref |
17 | 17 |
|
@@ -190,28 +190,39 @@ def DivTwo(self): |
190 | 190 | """ |
191 | 191 | constructor_ref: Ref[Callable[[], Any]] = Ref(lambda: None) |
192 | 192 |
|
193 | | - set_constructor_callbacks: set[Callable[[Callable[[], Any]], None]] = set() |
| 193 | + if update_on_change: |
| 194 | + set_constructor_callbacks: set[Callable[[Callable[[], Any]], None]] = set() |
194 | 195 |
|
195 | | - @component |
196 | | - def HotSwap() -> Any: |
197 | | - # new displays will adopt the latest constructor and arguments |
198 | | - constructor, _set_constructor = use_state(lambda: constructor_ref.current) |
199 | | - set_constructor = use_callback(lambda new: _set_constructor(lambda _: new)) |
| 196 | + @component |
| 197 | + def HotSwap() -> Any: |
| 198 | + # new displays will adopt the latest constructor and arguments |
| 199 | + constructor, _set_constructor = use_state(lambda: constructor_ref.current) |
| 200 | + set_constructor = use_callback(lambda new: _set_constructor(lambda _: new)) |
200 | 201 |
|
201 | | - def add_callback() -> Callable[[], None]: |
202 | | - set_constructor_callbacks.add(set_constructor) |
203 | | - return lambda: set_constructor_callbacks.remove(set_constructor) |
| 202 | + def add_callback() -> Callable[[], None]: |
| 203 | + set_constructor_callbacks.add(set_constructor) |
| 204 | + return lambda: set_constructor_callbacks.remove(set_constructor) |
204 | 205 |
|
205 | | - use_effect(add_callback) |
| 206 | + use_effect(add_callback) |
206 | 207 |
|
207 | | - return constructor() |
| 208 | + return constructor() |
208 | 209 |
|
209 | | - def swap(constructor: Callable[[], Any] | None) -> None: |
210 | | - constructor = constructor_ref.current = constructor or (lambda: None) |
| 210 | + def swap(constructor: Callable[[], Any] | None) -> None: |
| 211 | + constructor = constructor_ref.current = constructor or (lambda: None) |
211 | 212 |
|
212 | | - for set_constructor in set_constructor_callbacks: |
213 | | - set_constructor(constructor) |
| 213 | + for set_constructor in set_constructor_callbacks: |
| 214 | + set_constructor(constructor) |
214 | 215 |
|
215 | | - return None |
| 216 | + return None |
| 217 | + |
| 218 | + else: |
| 219 | + |
| 220 | + @component |
| 221 | + def HotSwap() -> Any: |
| 222 | + return constructor_ref.current() |
| 223 | + |
| 224 | + def swap(constructor: Callable[[], Any] | None) -> None: |
| 225 | + constructor_ref.current = constructor or (lambda: None) |
| 226 | + return None |
216 | 227 |
|
217 | 228 | return swap, HotSwap |
0 commit comments