mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 15:11:13 -05:00
47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
import { lazy, Suspense } from 'react';
|
|
import { useNovuNotifications } from '@/hooks/useNovuNotifications';
|
|
import { useNovuTheme } from '@/hooks/useNovuTheme';
|
|
import { useNavigate } from 'react-router-dom';
|
|
import { Bell } from 'lucide-react';
|
|
import { Button } from '@/components/ui/button';
|
|
|
|
// Lazy load Novu Inbox to prevent React instance conflicts
|
|
const Inbox = lazy(() =>
|
|
import('@novu/react').then(module => ({ default: module.Inbox }))
|
|
);
|
|
|
|
export function NotificationCenter() {
|
|
const { applicationIdentifier, subscriberId, isEnabled } = useNovuNotifications();
|
|
const appearance = useNovuTheme();
|
|
const navigate = useNavigate();
|
|
|
|
if (!isEnabled) {
|
|
return null;
|
|
}
|
|
|
|
const handleNotificationClick = (notification: { data?: Record<string, unknown> }) => {
|
|
// Handle navigation based on notification payload
|
|
const data = notification.data as { url?: string } | undefined;
|
|
if (data?.url) {
|
|
navigate(data.url);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<Suspense
|
|
fallback={
|
|
<Button variant="ghost" size="icon" className="h-9 w-9" disabled>
|
|
<Bell className="h-5 w-5" />
|
|
</Button>
|
|
}
|
|
>
|
|
<Inbox
|
|
applicationIdentifier={applicationIdentifier}
|
|
subscriber={subscriberId || ''}
|
|
appearance={appearance}
|
|
onNotificationClick={handleNotificationClick}
|
|
/>
|
|
</Suspense>
|
|
);
|
|
}
|