1- import { useRef , ReactNode } from "react" ;
2- import { AnimatePresence , motion } from "framer-motion" ;
1+ import { memo } from "react" ;
32import { ReactElement } from "react" ;
3+ import { AnimatePresence , motion } from "framer-motion" ;
4+
5+ // Components
46import PrintBox from "./components/PrintBox/PrintBox" ;
57import ForBox from "./components/ForBox/ForBox" ;
68import IfBox from "./components/IfBox/IfBox" ;
@@ -14,39 +16,28 @@ import CallUserFuncBox from "./components/CallUserFuncBox/CallUserFuncBox";
1416import ReturnBox from "./components/ReturnBox/ReturnBox" ;
1517import FlowControlBox from "./components/FlowControlBox/FlowControlBox" ;
1618import InputBox from "./components/InputBox/InputBox" ;
17- // type import
18- import { ElseItem } from "@/pages/Visualization/types/codeFlow/elseItem" ;
19- import { ForItem } from "@/pages/Visualization/types/codeFlow/forItem" ;
19+ import CodeFlowItem from "./components/CodeFlowItem" ;
20+
21+ // Types
22+ import { CodeFlowItem as CodeFlowItemType } from "./types" ;
2023import { PrintItem } from "@/pages/Visualization/types/codeFlow/printItem" ;
24+ import { ForItem } from "@/pages/Visualization/types/codeFlow/forItem" ;
2125import { ConditionItem } from "@/pages/Visualization/types/codeFlow/conditionItem" ;
26+ import { ElseItem } from "@/pages/Visualization/types/codeFlow/elseItem" ;
2227import { CodeFlowVariableItem } from "@/pages/Visualization/types/codeFlow/codeFlowVariableItem" ;
2328import { CodeFlowListItem } from "@/pages/Visualization/types/codeFlow/codeFlowListItem" ;
2429import { CodeFlowTupleItem } from "@/pages/Visualization/types/codeFlow/codeFlowTupleItem" ;
2530import { WhileItem } from "@/pages/Visualization/types/codeFlow/whileItem" ;
2631import { CallUserFuncItem } from "@/pages/Visualization/types/codeFlow/callUserFuncItem" ;
2732import { ReturnItem } from "@/pages/Visualization/types/codeFlow/returnItem" ;
33+ import { FlowControlItem } from "@/pages/Visualization/types/codeFlow/flowControlItem" ;
2834import { InputItem } from "@/pages/Visualization/types/codeFlow/inputItem" ;
29- //zustand
30-
31- import { FlowControlItem } from "@/pages/Visualization/types/codeFlow/flowControlItem.ts" ;
32-
33- import { CodeFlowItem as CodeFlowItemType } from "./types" ;
3435
35- interface Props {
36- codeFlow : CodeFlowItemType ;
37- children ?: ReactNode ;
36+ interface CodeFlowRendererProps {
37+ codeFlows : CodeFlowItemType [ ] ;
3838}
39- const CodeFlowItem = ( { codeFlow, children } : Props ) => {
40- const ref = useRef < HTMLDivElement > ( null ) ;
4139
42- return (
43- < div style = { { width : "fit-content" } } ref = { ref } id = { codeFlow . isLight ? "highlighted-code-flow" : undefined } >
44- { children }
45- </ div >
46- ) ;
47- } ;
48-
49- export const renderingCodeFlow = ( codeFlows : CodeFlowItemType [ ] , width : number , height : number ) : ReactElement => {
40+ const CodeFlowRenderer = memo ( ( { codeFlows } : CodeFlowRendererProps ) : ReactElement => {
5041 return (
5142 < >
5243 { codeFlows . map ( ( codeFlow , index ) => {
@@ -57,16 +48,16 @@ export const renderingCodeFlow = (codeFlows: CodeFlowItemType[], width: number,
5748 return (
5849 < CodeFlowItem key = { printItem . id } codeFlow = { codeFlow } >
5950 < PrintBox key = { printItem . id } printItem = { printItem } />
60- { renderingCodeFlow ( codeFlow . child , width , height ) }
51+ < CodeFlowRenderer codeFlows = { codeFlow . child } />
6152 </ CodeFlowItem >
6253 ) ;
6354 }
6455 case "for" : {
6556 const forItem = codeFlow as ForItem ;
6657 return (
6758 < div key = { forItem . id } >
68- < ForBox key = { forItem . id } forItem = { forItem } width = { width } height = { height } >
69- { renderingCodeFlow ( codeFlow . child , width , height ) }
59+ < ForBox key = { forItem . id } forItem = { forItem } >
60+ < CodeFlowRenderer codeFlows = { codeFlow . child } />
7061 </ ForBox >
7162 </ div >
7263 ) ;
@@ -78,7 +69,7 @@ export const renderingCodeFlow = (codeFlows: CodeFlowItemType[], width: number,
7869 < motion . div key = { ifItem . id } layout >
7970 < CodeFlowItem key = { index } codeFlow = { codeFlow } >
8071 < IfBox isLight = { codeFlow . isLight } ifItem = { ifItem } >
81- { renderingCodeFlow ( codeFlow . child , width , height ) }
72+ < CodeFlowRenderer codeFlows = { codeFlow . child } />
8273 </ IfBox >
8374 </ CodeFlowItem >
8475 </ motion . div >
@@ -91,7 +82,7 @@ export const renderingCodeFlow = (codeFlows: CodeFlowItemType[], width: number,
9182 < motion . div key = { elifItem . id } layout >
9283 < CodeFlowItem key = { index } codeFlow = { codeFlow } >
9384 < ElifBox isLight = { codeFlow . isLight } elifItem = { elifItem } >
94- { renderingCodeFlow ( codeFlow . child , width , height ) }
85+ < CodeFlowRenderer codeFlows = { codeFlow . child } />
9586 </ ElifBox >
9687 </ CodeFlowItem >
9788 </ motion . div >
@@ -104,7 +95,7 @@ export const renderingCodeFlow = (codeFlows: CodeFlowItemType[], width: number,
10495 < motion . div key = { elseItem . id } layout >
10596 < CodeFlowItem key = { index } codeFlow = { codeFlow } >
10697 < ElseBox isLight = { codeFlow . isLight } elseItem = { elseItem } >
107- { renderingCodeFlow ( codeFlow . child , width , height ) }
98+ < CodeFlowRenderer codeFlows = { codeFlow . child } />
10899 </ ElseBox >
109100 </ CodeFlowItem >
110101 </ motion . div >
@@ -114,26 +105,21 @@ export const renderingCodeFlow = (codeFlows: CodeFlowItemType[], width: number,
114105 const variableItem = codeFlow as CodeFlowVariableItem ;
115106 return (
116107 < CodeFlowItem key = { variableItem . id } codeFlow = { codeFlow } >
117- < CodeFlowVariableBox
118- key = { variableItem . id }
119- codeFlowVariableItem = { variableItem }
120- width = { width }
121- height = { height }
122- />
108+ < CodeFlowVariableBox key = { variableItem . id } codeFlowVariableItem = { variableItem } />
123109 </ CodeFlowItem >
124110 ) ;
125111 case "list" :
126112 const listItem = codeFlow as CodeFlowListItem ;
127113 return (
128114 < CodeFlowItem key = { listItem . id } codeFlow = { codeFlow } >
129- < CodeFlowListWrapper codeFlowListItem = { listItem } width = { width } height = { height } />
115+ < CodeFlowListWrapper codeFlowListItem = { listItem } />
130116 </ CodeFlowItem >
131117 ) ;
132118 case "tuple" :
133119 const tupleItem = codeFlow as CodeFlowTupleItem ;
134120 return (
135121 < CodeFlowItem key = { tupleItem . id } codeFlow = { codeFlow } >
136- < CodeFlowTupleWrapper codeFlowTupleItem = { tupleItem } width = { width } height = { height } />
122+ < CodeFlowTupleWrapper codeFlowTupleItem = { tupleItem } />
137123 </ CodeFlowItem >
138124 ) ;
139125 case "while" :
@@ -142,7 +128,7 @@ export const renderingCodeFlow = (codeFlows: CodeFlowItemType[], width: number,
142128 < div key = { whileItem . id } >
143129 < CodeFlowItem key = { index } codeFlow = { codeFlow } >
144130 < WhileBox key = { index } whileItem = { whileItem } >
145- { renderingCodeFlow ( codeFlow . child , width , height ) }
131+ < CodeFlowRenderer codeFlows = { codeFlow . child } />
146132 </ WhileBox >
147133 </ CodeFlowItem >
148134 </ div >
@@ -153,7 +139,7 @@ export const renderingCodeFlow = (codeFlows: CodeFlowItemType[], width: number,
153139 < div key = { callUserFuncItem . id } >
154140 < CodeFlowItem key = { index } codeFlow = { codeFlow } >
155141 < CallUserFuncBox key = { index } callUserFuncItem = { callUserFuncItem } >
156- { renderingCodeFlow ( codeFlow . child , width , height ) }
142+ < CodeFlowRenderer codeFlows = { codeFlow . child } />
157143 </ CallUserFuncBox >
158144 </ CodeFlowItem >
159145 </ div >
@@ -168,11 +154,11 @@ export const renderingCodeFlow = (codeFlows: CodeFlowItemType[], width: number,
168154 </ div >
169155 ) ;
170156 case "flowcontrol" :
171- const FlowControlItem = codeFlow as FlowControlItem ;
157+ const flowControlItem = codeFlow as FlowControlItem ;
172158 return (
173- < div key = { FlowControlItem . id } >
159+ < div key = { flowControlItem . id } >
174160 < CodeFlowItem key = { index } codeFlow = { codeFlow } >
175- < FlowControlBox key = { index } flowControlItem = { FlowControlItem } />
161+ < FlowControlBox key = { index } flowControlItem = { flowControlItem } />
176162 </ CodeFlowItem >
177163 </ div >
178164 ) ;
@@ -192,4 +178,6 @@ export const renderingCodeFlow = (codeFlows: CodeFlowItemType[], width: number,
192178 } ) }
193179 </ >
194180 ) ;
195- } ;
181+ } ) ;
182+
183+ export default CodeFlowRenderer ;
0 commit comments