Source code for pysepal.solara.notifications.hook
"""Solara hook: use_notifications()."""
import logging
from typing import Optional, Union
import solara
from .bus import NotificationBus, get_current_bus
from .notifier import NoopNotifier, Notifier
logger = logging.getLogger(__name__)
[docs]
def use_notifications_from_bus(
bus: Optional[NotificationBus],
) -> Union[Notifier, NoopNotifier]:
"""Resolve a Notifier from a bus (testable without Solara context)."""
if bus is None:
logger.debug(
"use_notifications() called before NotificationProvider mounted. "
"Notifications will be silently dropped until next render."
)
return NoopNotifier()
return Notifier(bus)
[docs]
def use_notifications() -> Union[Notifier, NoopNotifier]:
"""Solara hook: returns a Notifier bound to the current kernel's bus.
Must be called inside a Solara component function.
If no NotificationProvider is mounted, returns a NoopNotifier.
"""
bus = get_current_bus()
return solara.use_memo(lambda: use_notifications_from_bus(bus), [bus])