From 2effc47593fac3edb0dc7f4061e5ef9c5149ce12 Mon Sep 17 00:00:00 2001
From: gahusb
Date: Wed, 13 May 2026 21:52:31 +0900
Subject: [PATCH] feat(screener): integrate mode toggle (form|canvas) with lazy
canvas
---
src/pages/stock/screener/Screener.jsx | 119 ++++++++++++++++++--------
1 file changed, 82 insertions(+), 37 deletions(-)
diff --git a/src/pages/stock/screener/Screener.jsx b/src/pages/stock/screener/Screener.jsx
index 41995ec..5db82ab 100644
--- a/src/pages/stock/screener/Screener.jsx
+++ b/src/pages/stock/screener/Screener.jsx
@@ -1,4 +1,4 @@
-import React, { useState } from 'react';
+import React, { useState, lazy, Suspense } from 'react';
import { Link } from 'react-router-dom';
import './Screener.css';
@@ -6,6 +6,8 @@ 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';
@@ -13,18 +15,22 @@ 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 { 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;
- // 비교 모드 — 미리보기 히스토리에서 선택된 항목 ID
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) {
@@ -41,44 +47,83 @@ export default function Screener() {
· 분석 기준일: {activeResult?.asof ?? settings.asof ?? '-'}
-
+
+ {!isMobile && }
+
+
-
-
-
-
-
-
-
-
-
+ ) : (
+ 캔버스 로딩 중…}>
+
-
-
+
+ )}
);
}