import React, { useState, lazy, Suspense } from 'react'; import { Link } from 'react-router-dom'; import './Screener.css'; import { useScreenerMeta } from './hooks/useScreenerMeta'; import { useScreenerSettings } from './hooks/useScreenerSettings'; import { useScreenerRun } from './hooks/useScreenerRun'; import { useScreenerHistory } from './hooks/useScreenerHistory'; import { useScreenerMode } from './hooks/useScreenerMode'; import { useIsMobile } from '../../../hooks/useIsMobile'; import GatePanel from './components/GatePanel'; import NodePanel from './components/NodePanel'; import GlobalControls from './components/GlobalControls'; import ResultTable from './components/ResultTable'; import TelegramPreview from './components/TelegramPreview'; import RunHistoryList from './components/RunHistoryList'; import ModeToggle from './components/ModeToggle'; const CanvasLayout = lazy(() => import('./components/canvas/CanvasLayout')); export default function Screener() { const { meta, loading: metaLoading } = useScreenerMeta(); const { settings, dirty, setLocal, save } = useScreenerSettings(); const { result, running, previewHistory, runPreview, runSave, selectPreview } = useScreenerRun(); const { runs, runs_loading, selectRun, selectedRun } = useScreenerHistory(); const { mode, setMode } = useScreenerMode(); const isMobile = useIsMobile(); const effectiveMode = isMobile ? 'form' : mode; const [compareId, setCompareId] = useState(null); const compareItem = previewHistory.find((p) => p.id === compareId); const compareResult = compareItem?.result ?? null; const activeResult = selectedRun || result; if (metaLoading || !meta || !settings) { return
로딩 중…
; } return (

스크리너

최근 자동 잡: {runs?.find(r => r.mode === 'auto')?.asof ?? '-'} · 분석 기준일: {activeResult?.asof ?? settings.asof ?? '-'}

{!isMobile && }
{effectiveMode === 'form' ? (
) : ( 캔버스 로딩 중…
}> )} ); }