11"use client" ;
22
33import { WcxNode } from "@repo/ui/types/nodes" ;
4- import { useUpdateNode } from "@/stores/useEditorStore" ;
4+ import { useUpdateNode , useUpdateNodeLayout } from "@/stores/useEditorStore" ;
55import FieldRow from "../atoms/FieldRow" ;
66import NumberInput from "../atoms/NumberInput" ;
77import SelectInput from "../atoms/SelectInput" ;
@@ -14,14 +14,20 @@ type PositionType = "relative" | "absolute" | "fixed" | "sticky";
1414
1515export default function PositionSection ( { node } : PositionSectionProps ) {
1616 const updateNode = useUpdateNode ( ) ;
17+ const updateNodeLayout = useUpdateNodeLayout ( ) ;
1718 const positionType = ( node . style . position as PositionType ) || "relative" ;
1819
1920 const handleStyleChange = ( key : string , value : any ) => {
2021 updateNode ( node . id , { style : { ...node . style , [ key ] : value } } ) ;
2122 } ;
2223
24+ const handleLayoutChange = ( key : string , value : any ) => {
25+ updateNodeLayout ( node . id , { [ key ] : value } ) ;
26+ } ;
27+
2328 const handlePositionTypeChange = ( type : PositionType ) => {
2429 if ( type === "relative" ) {
30+ // relative ์ ํ ์ ์คํ์ผ์์ ์์น ์ ๋ณด ์ ๊ฑฐ
2531 updateNode ( node . id , {
2632 style : {
2733 ...node . style ,
@@ -32,6 +38,7 @@ export default function PositionSection({ node }: PositionSectionProps) {
3238 left : undefined ,
3339 } ,
3440 } ) ;
41+ // x, y ์ขํ๋ ์ ์งํ๊ฑฐ๋ ํ์์ ๋ฐ๋ผ ์ด๊ธฐํํ ์ ์์ง๋ง ์ผ๋จ ์ ์ง
3542 } else {
3643 handleStyleChange ( "position" , type ) ;
3744 }
@@ -42,42 +49,30 @@ export default function PositionSection({ node }: PositionSectionProps) {
4249
4350 return (
4451 < >
45- { /* Absolute / Fixed โ T R B L */ }
52+ { /* Absolute / Fixed โ Top(y) / Left(x) (Layout ํ๋ ์ฌ์ฉ) */ }
4653 { showOffsets && (
4754 < >
4855 < FieldRow label = "Top" >
4956 < NumberInput
50- value = { parseInt ( String ( node . style . top ) ) || 0 }
51- onChange = { ( v ) => handleStyleChange ( "top" , v ) }
52- />
53- </ FieldRow >
54- < FieldRow label = "Right" >
55- < NumberInput
56- value = { parseInt ( String ( node . style . right ) ) || 0 }
57- onChange = { ( v ) => handleStyleChange ( "right" , v ) }
58- />
59- </ FieldRow >
60- < FieldRow label = "Bottom" >
61- < NumberInput
62- value = { parseInt ( String ( node . style . bottom ) ) || 0 }
63- onChange = { ( v ) => handleStyleChange ( "bottom" , v ) }
57+ value = { node . layout . y ?? 0 }
58+ onChange = { ( v ) => handleLayoutChange ( "y" , v ) }
6459 />
6560 </ FieldRow >
6661 < FieldRow label = "Left" >
6762 < NumberInput
68- value = { parseInt ( String ( node . style . left ) ) || 0 }
69- onChange = { ( v ) => handleStyleChange ( "left ", v ) }
63+ value = { node . layout . x ?? 0 }
64+ onChange = { ( v ) => handleLayoutChange ( "x ", v ) }
7065 />
7166 </ FieldRow >
7267 </ >
7368 ) }
7469
75- { /* Sticky โ Top only */ }
70+ { /* Sticky โ Top only (y ์ฌ์ฉ) */ }
7671 { showStickyTop && (
7772 < FieldRow label = "Top" >
7873 < NumberInput
79- value = { parseInt ( String ( node . style . top ) ) || 0 }
80- onChange = { ( v ) => handleStyleChange ( "top ", v ) }
74+ value = { node . layout . y ?? 0 }
75+ onChange = { ( v ) => handleLayoutChange ( "y ", v ) }
8176 />
8277 </ FieldRow >
8378 ) }
0 commit comments