From eeae338cd4d7303323dccbbbd61f067e4b731964 Mon Sep 17 00:00:00 2001 From: kjs Date: Tue, 28 Oct 2025 18:41:45 +0900 Subject: [PATCH] =?UTF-8?q?=ED=8C=A8=EB=84=90=20=EC=A0=95=EB=A6=AC?= =?UTF-8?q?=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config-panels/ButtonConfigPanel.tsx | 58 +- .../FlowVisibilityConfigPanel.tsx | 19 +- .../table-list/SingleTableWithSticky.tsx | 47 +- .../table-list/TableListComponent.tsx | 28 +- .../table-list/TableListConfigPanel.tsx | 1197 +++++------------ 5 files changed, 457 insertions(+), 892 deletions(-) diff --git a/frontend/components/screen/config-panels/ButtonConfigPanel.tsx b/frontend/components/screen/config-panels/ButtonConfigPanel.tsx index bfa4fd14..cd7aa8d3 100644 --- a/frontend/components/screen/config-panels/ButtonConfigPanel.tsx +++ b/frontend/components/screen/config-panels/ButtonConfigPanel.tsx @@ -61,6 +61,24 @@ export const ButtonConfigPanel: React.FC = ({ const [displayColumnOpen, setDisplayColumnOpen] = useState(false); const [displayColumnSearch, setDisplayColumnSearch] = useState(""); + // ๐ŸŽฏ ํ”Œ๋กœ์šฐ ์œ„์ ฏ์ด ํ™”๋ฉด์— ์žˆ๋Š”์ง€ ํ™•์ธ + const hasFlowWidget = useMemo(() => { + const found = allComponents.some((comp: any) => { + // ScreenDesigner์—์„œ ์ €์žฅํ•˜๋Š” componentType ์†์„ฑ ํ™•์ธ! + const compType = comp.componentType || comp.widgetType || ""; + + // "flow-widget" ์ฒดํฌ + const isFlow = compType === "flow-widget" || compType?.toLowerCase().includes("flow"); + + if (isFlow) { + console.log("โœ… ํ”Œ๋กœ์šฐ ์œ„์ ฏ ๋ฐœ๊ฒฌ!", { id: comp.id, componentType: comp.componentType }); + } + return isFlow; + }); + console.log("๐ŸŽฏ ํ”Œ๋กœ์šฐ ์œ„์ ฏ ์กด์žฌ ์—ฌ๋ถ€:", found); + return found; + }, [allComponents]); + // ์ปดํฌ๋„ŒํŠธ prop ๋ณ€๊ฒฝ ์‹œ ๋กœ์ปฌ ์ƒํƒœ ๋™๊ธฐํ™” (Input๋งŒ) useEffect(() => { const latestConfig = component.componentConfig || {}; @@ -298,7 +316,8 @@ export const ButtonConfigPanel: React.FC = ({ variant="outline" role="combobox" aria-expanded={modalScreenOpen} - className="h-6 w-full px-2 py-0 justify-between" style={{ fontSize: "12px" }} + className="h-6 w-full justify-between px-2 py-0" + style={{ fontSize: "12px" }} disabled={screensLoading} > {config.action?.targetScreenId @@ -372,7 +391,8 @@ export const ButtonConfigPanel: React.FC = ({ variant="outline" role="combobox" aria-expanded={modalScreenOpen} - className="h-6 w-full px-2 py-0 justify-between" style={{ fontSize: "12px" }} + className="h-6 w-full justify-between px-2 py-0" + style={{ fontSize: "12px" }} disabled={screensLoading} > {config.action?.targetScreenId @@ -526,7 +546,8 @@ export const ButtonConfigPanel: React.FC = ({ variant="outline" role="combobox" aria-expanded={displayColumnOpen} - className="mt-2 h-8 w-full justify-between text-xs" style={{ fontSize: "12px" }} + className="mt-2 h-8 w-full justify-between text-xs" + style={{ fontSize: "12px" }} disabled={columnsLoading || tableColumns.length === 0} > {columnsLoading @@ -543,7 +564,9 @@ export const ButtonConfigPanel: React.FC = ({ - ์ปฌ๋Ÿผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. + + ์ปฌ๋Ÿผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. + {tableColumns.map((column) => ( = ({ onUpdateProperty("componentConfig.action.historyDisplayColumn", currentValue); setDisplayColumnOpen(false); }} - className="text-xs" style={{ fontSize: "12px" }} + className="text-xs" + style={{ fontSize: "12px" }} > = ({ variant="outline" role="combobox" aria-expanded={navScreenOpen} - className="h-6 w-full px-2 py-0 justify-between" style={{ fontSize: "12px" }} + className="h-6 w-full justify-between px-2 py-0" + style={{ fontSize: "12px" }} disabled={screensLoading} > {config.action?.targetScreenId @@ -659,7 +684,8 @@ export const ButtonConfigPanel: React.FC = ({ setLocalInputs((prev) => ({ ...prev, targetUrl: newValue })); onUpdateProperty("componentConfig.action.targetUrl", newValue); }} - className="h-6 w-full px-2 py-0 text-xs" style={{ fontSize: "12px" }} + className="h-6 w-full px-2 py-0 text-xs" + style={{ fontSize: "12px" }} />

URL์„ ์ž…๋ ฅํ•˜๋ฉด ํ™”๋ฉด ์„ ํƒ๋ณด๋‹ค ์šฐ์„  ์ ์šฉ๋ฉ๋‹ˆ๋‹ค

@@ -671,14 +697,16 @@ export const ButtonConfigPanel: React.FC = ({ - {/* ๐Ÿ†• ํ”Œ๋กœ์šฐ ๋‹จ๊ณ„๋ณ„ ํ‘œ์‹œ ์ œ์–ด ์„น์…˜ */} -
- -
+ {/* ๐Ÿ†• ํ”Œ๋กœ์šฐ ๋‹จ๊ณ„๋ณ„ ํ‘œ์‹œ ์ œ์–ด ์„น์…˜ (ํ”Œ๋กœ์šฐ ์œ„์ ฏ์ด ์žˆ์„ ๋•Œ๋งŒ ํ‘œ์‹œ) */} + {hasFlowWidget && ( +
+ +
+ )} ); }; diff --git a/frontend/components/screen/config-panels/FlowVisibilityConfigPanel.tsx b/frontend/components/screen/config-panels/FlowVisibilityConfigPanel.tsx index d583a065..c9ae4e6a 100644 --- a/frontend/components/screen/config-panels/FlowVisibilityConfigPanel.tsx +++ b/frontend/components/screen/config-panels/FlowVisibilityConfigPanel.tsx @@ -9,6 +9,7 @@ import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; import { Badge } from "@/components/ui/badge"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Input } from "@/components/ui/input"; +import { Card, CardHeader, CardTitle, CardDescription, CardContent } from "@/components/ui/card"; import { Workflow, Info, CheckCircle, XCircle, Loader2, ArrowRight, ArrowDown } from "lucide-react"; import { ComponentData } from "@/types/screen"; import { FlowVisibilityConfig } from "@/types/control-management"; @@ -344,7 +345,11 @@ export const FlowVisibilityConfigPanel: React.FC checked={isChecked} onCheckedChange={() => toggleStep(step.id)} /> -