검증게시판 기능 추가

This commit is contained in:
Macbook
2026-05-27 15:41:19 +09:00
parent 7a0af36b9b
commit 63693d47c0
57 changed files with 4480 additions and 14 deletions
+22
View File
@@ -67,6 +67,7 @@ import BacktestPanel from './components/BacktestPanel';
import { useBacktest } from './hooks/useBacktest';
import LiveStrategyPanel from './components/LiveStrategyPanel';
import { TradeNotificationProvider } from './contexts/TradeNotificationContext';
import { VerificationIssueNotificationProvider } from './contexts/VerificationIssueNotificationContext';
import { LiveSignalNotifier, type LiveSignalNotifierHandle } from './components/LiveSignalNotifier';
import { NotifyTopMenuBar, ChartToolbarNotify } from './components/NotifyUiBindings';
import { AppNotificationLayer } from './components/AppNotificationLayer';
@@ -78,6 +79,7 @@ import SettingsPage from './components/SettingsPage';
import PaperTradingPage from './components/PaperTradingPage';
import VirtualTradingPage from './components/VirtualTradingPage';
import TrendSearchPage from './components/TrendSearchPage';
import VerificationBoardPage from './components/VerificationBoardPage';
import DashboardPage from './components/DashboardPage';
import { loadPaperSummary, resetPaperAccount, loadActiveLiveStrategySettings, expandLiveStrategySubscriptions } from './utils/backendApi';
import ChartLegendBar from './components/ChartLegendBar';
@@ -203,6 +205,7 @@ function App() {
const [mobileRightOpen, setMobileRightOpen] = useState(false);
const [mobileRightTab, setMobileRightTab] = useState<'trade' | 'orderbook'>('trade');
const [menuPage, setMenuPage] = useState<MenuPage>('chart');
const [verificationFocusIssueId, setVerificationFocusIssueId] = useState<number | null>(null);
const chartVisible = menuPage === 'chart';
const isMobile = useIsMobile();
@@ -1598,6 +1601,10 @@ function App() {
soundEnabled={appDefaults.tradeAlertSoundEnabled ?? true}
soundId={appDefaults.tradeAlertSound ?? 'bell'}
>
<VerificationIssueNotificationProvider
enabled={canMenu('verification-board')}
notifyEnabled={appDefaults.verificationIssueNotify}
>
<div className={`app ${theme} mode-${mode}${isMobile ? ' app--mobile' : ''}`}>
<LiveSignalNotifier
ref={liveNotifierRef}
@@ -1700,6 +1707,14 @@ function App() {
/>
)}
{menuPage === 'verification-board' && (
<VerificationBoardPage
theme={theme}
focusIssueId={verificationFocusIssueId}
onFocusIssueConsumed={() => setVerificationFocusIssueId(null)}
/>
)}
{/* ── 설정 화면 ──────────────────────────────────────────────────── */}
{menuPage === 'notifications' && (
<TradeNotificationListPage
@@ -1818,6 +1833,8 @@ function App() {
onFcmPushEnabled={v => saveAppDef({ fcmPushEnabled: v })}
displayTimezone={displayTimezone}
onDisplayTimezoneChange={handleTimezoneChange}
verificationIssueNotify={appDefaults.verificationIssueNotify}
onVerificationIssueNotify={v => saveAppDef({ verificationIssueNotify: v })}
onFcmTest={async () => {
const { sendFcmTest } = await import('./utils/backendApi');
const r = await sendFcmTest();
@@ -2563,6 +2580,10 @@ function App() {
menuPage={menuPage}
onPage={guardedSetMenuPage}
onGoToChart={goToMarketChart}
onGoToVerificationIssue={issueId => {
setVerificationFocusIssueId(issueId);
guardedSetMenuPage('verification-board');
}}
tradingMode={appDefaults.tradingMode}
hasUpbitKeys={appDefaults.hasUpbitKeys}
paperTradingEnabled={paperTradingEnabled}
@@ -2578,6 +2599,7 @@ function App() {
/>
</div>
</VerificationIssueNotificationProvider>
</TradeNotificationProvider>
);
}