diff --git a/src/pages/stock/screener/components/GatePanel.jsx b/src/pages/stock/screener/components/GatePanel.jsx
index ab0aa7e..1fb568d 100644
--- a/src/pages/stock/screener/components/GatePanel.jsx
+++ b/src/pages/stock/screener/components/GatePanel.jsx
@@ -1,3 +1,41 @@
export default function GatePanel({ meta, value, onChange }) {
- return {meta?.label ?? '게이트'}
TODO: 게이트 파라미터 폼 (Task 4.5)
;
+ if (!meta) return null;
+ const props = meta.param_schema?.properties || {};
+ return (
+
+ {meta.label}
+
+ 통과 조건 — 통과한 종목만 점수 노드에 전달
+
+ {Object.entries(props).map(([key, prop]) => (
+ onChange({ ...value, [key]: v })} />
+ ))}
+
+ );
+}
+
+function GateField({ paramKey, prop, value, onChange }) {
+ if (prop.type === 'integer') {
+ return (
+
+
+ onChange(parseInt(e.target.value, 10))}
+ style={{ flex: 1 }} />
+
+ );
+ }
+ if (prop.type === 'boolean') {
+ return (
+
+
+
+ );
+ }
+ return null;
}
diff --git a/src/pages/stock/screener/components/GlobalControls.jsx b/src/pages/stock/screener/components/GlobalControls.jsx
index dd8990c..b55c9aa 100644
--- a/src/pages/stock/screener/components/GlobalControls.jsx
+++ b/src/pages/stock/screener/components/GlobalControls.jsx
@@ -2,9 +2,42 @@ export default function GlobalControls({ settings, setSettings, onRun, onSave, o
return (
);
}