import React, { useState } from 'react' import { useNavigate } from 'react-router-dom' import { User, Check, X, ArrowRight, Trash2, CheckCheck } from 'lucide-react' import { useTranslation } from '../../i18n' import { useInAppNotificationStore, InAppNotification } from '../../store/inAppNotificationStore' import { useSettingsStore } from '../../store/settingsStore' function relativeTime(dateStr: string, locale: string): string { const diff = Date.now() - new Date(dateStr).getTime() const minutes = Math.floor(diff / 60000) if (minutes < 1) return locale === 'ar' ? 'الآن' : 'just now' if (minutes < 60) return `${minutes}m` const hours = Math.floor(minutes / 60) if (hours < 24) return `${hours}h` const days = Math.floor(hours / 24) return `${days}d` } interface NotificationItemProps { notification: InAppNotification onClose?: () => void } export default function InAppNotificationItem({ notification, onClose }: NotificationItemProps): React.ReactElement { const { t, locale } = useTranslation() const navigate = useNavigate() const { settings } = useSettingsStore() const darkMode = settings.dark_mode const dark = darkMode === true || darkMode === 'dark' || (darkMode === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) const [responding, setResponding] = useState(false) const { markRead, markUnread, deleteNotification, respondToBoolean } = useInAppNotificationStore() const handleNavigate = async () => { if (!notification.is_read) await markRead(notification.id) if (notification.navigate_target) { navigate(notification.navigate_target) onClose?.() } } const handleRespond = async (response: 'positive' | 'negative') => { if (responding || notification.response !== null) return setResponding(true) await respondToBoolean(notification.id, response) setResponding(false) } const titleText = t(notification.title_key, notification.title_params) const bodyText = t(notification.text_key, notification.text_params) const hasUnknownTitle = titleText === notification.title_key const hasUnknownBody = bodyText === notification.text_key return (
{hasUnknownTitle ? notification.title_key : titleText}
{hasUnknownBody ? notification.text_key : bodyText}
{/* Boolean actions */} {notification.type === 'boolean' && notification.positive_text_key && notification.negative_text_key && (