bell: notify a chat's page and list row, any chat, any time
Client half of the per-chat notification preference — DetailBar gets a bell
dropdown (every end of turn / only when input is needed / none), a global
useChatNotifications hook holds one connection to /api/chat/notify/ws for
the whole session so a background chat can still ring the bell and fire a
browser Notification, and the session list shows a badge on any row set to
notify. The server side (schema, the notify-delivery socket, the sidecar
signal at turn-end/plan-gate/question-gate) landed already in 5cba1b65,
swept in from a concurrent session sharing this working tree.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { useMemo, useRef } from 'react';
|
||||
import { useLocation } from 'react-router';
|
||||
import { useDock, usePanelFullscreen } from 'officerdev';
|
||||
import { useDock, usePanelFullscreen, useChatNotifications } from 'officerdev';
|
||||
import { usePermissions } from 'hooks/usePermissions';
|
||||
import { ErrorBoundary } from '@/components/ErrorBoundary';
|
||||
import { ScreenErrorFallback } from './ScreenErrorFallback';
|
||||
@@ -33,6 +33,7 @@ export function DashboardLayout({ children }: DashboardLayoutProps) {
|
||||
const isTouch = useIsTouch();
|
||||
const { pathname } = useLocation();
|
||||
usePageTitleSync();
|
||||
useChatNotifications();
|
||||
// A panel can maximize into the content region on its own, but it cannot paint over this header — the
|
||||
// region below is an `absolute z-2` stacking context and the header is a `fixed z-10` sibling of it. So
|
||||
// "full screen" is cooperative: the panel asks, and the chrome steps aside.
|
||||
|
||||
Reference in New Issue
Block a user