import React, { useMemo, useState } from 'react'; import { useTradeNotification } from '../../contexts/TradeNotificationContext'; import { useNavigation } from '../../contexts/NavigationContext'; import { useAuth } from '../../contexts/AuthContext'; import { useVirtualTradingCore } from '@frontend/hooks/useVirtualTradingCore'; import NotificationListRow from './NotificationListRow'; import NotificationDetailScreen from './NotificationDetailScreen'; import VirtualTradeScreen from '../virtual/VirtualTradeScreen'; export default function NotificationsScreen() { const { notifyNav, goNotifyList, goNotifyDetail, goNotifyTrade, goVirtualDetail, } = useNavigation(); const { sessionKey } = useAuth(); const { allNotifications, unreadCount, markAsRead, markAllAsRead, deleteNotification, deleteAllNotifications, refreshHistory, } = useTradeNotification(); const { summary, refreshPaperData } = useVirtualTradingCore({ settingsSessionKey: sessionKey }); const [refreshing, setRefreshing] = useState(false); const selectedItem = useMemo( () => allNotifications.find(n => n.id === notifyNav.notifyId) ?? null, [allNotifications, notifyNav.notifyId], ); const onRefresh = async () => { setRefreshing(true); await refreshHistory(); setRefreshing(false); }; if (notifyNav.view === 'detail' && selectedItem) { return ( { markAsRead(selectedItem.id); goNotifyList(); }} onTrade={side => goNotifyTrade(selectedItem.market, side)} onGoVirtual={() => { markAsRead(selectedItem.id); goVirtualDetail(selectedItem.market); }} /> ); } if (notifyNav.view === 'trade' && notifyNav.market && notifyNav.tradeSide) { return ( ); } return (

알림 {unreadCount > 0 && `(${unreadCount})`}

{allNotifications.length === 0 ? (

알림 없음

전략 조건 충족 시 알림이 표시됩니다

) : (
{allNotifications.map(item => ( { markAsRead(item.id); goNotifyDetail(item.id, item.market); }} onTrade={side => { markAsRead(item.id); goNotifyTrade(item.market, side); }} onDelete={() => void deleteNotification(item.id)} /> ))}
)} {allNotifications.length > 0 && (
)}
); }