import flet as ft from typing import Any def send_browser_notification(page: ft.Page, title: str, body: str) -> None: """Broadcast a browser notification event to all connected sessions. This is typically called from the client (shop) side when a new chat is opened or the first message is sent. The actual visual notification will be displayed only on admin pages that handle the event. """ if page is None: return payload: dict[str, Any] = { "type": "browser_notification", "title": title, "body": body, } # Use PubSub so that admin sessions can react and show a snackbar/toast. try: # send_all so that any admin pages, and potentially this page, can receive it page.pubsub.send_all(payload) except Exception: # If PubSub is not available, we simply do nothing; email still covers notification. pass def show_local_browser_notification(page: ft.Page, title: str, body: str) -> None: """Show a visual notification (snackbar) on the current page for admin users. This is intended to be called from admin pages when a `browser_notification` event is received via PubSub. It will silently do nothing for non-admin users. """ if page is None: return user = page.session.get("user") if hasattr(page, "session") else None if not user or user.get("role") != "admin": # Only admins see these notifications in the browser return message = f"{title}: {body}" if title else body page.snack_bar = ft.SnackBar( content=ft.Text(message), open=True, action="OK", ) page.update()