diff --git a/src/app/admin/designs/[id]/edit/page.tsx b/src/app/admin/designs/[id]/edit/page.tsx index 5fe2cd6..cac3ddb 100644 --- a/src/app/admin/designs/[id]/edit/page.tsx +++ b/src/app/admin/designs/[id]/edit/page.tsx @@ -110,7 +110,13 @@ export default function EditDesignPage({ params }: { params: { id: string } }) { {/* Full Design Canvas */} - + ); diff --git a/src/components/DesignCanvas.tsx b/src/components/DesignCanvas.tsx index 2454e23..5e67076 100644 --- a/src/components/DesignCanvas.tsx +++ b/src/components/DesignCanvas.tsx @@ -487,9 +487,21 @@ function generateCurvePath(type: string, radius: number, reverse: boolean = fals return path; } -export default function DesignCanvas({ product, isAdminEditing = false }: { product: ProductDTO; isAdminEditing?: boolean }) { - const [color, setColor] = useState(product.colors[0]); - const [size, setSize] = useState(product.sizes[0] ?? null); +export default function DesignCanvas({ + product, + isAdminEditing = false, + initialDesignJson, + initialColor, + initialSize, +}: { + product: ProductDTO; + isAdminEditing?: boolean; + initialDesignJson?: string; + initialColor?: string; + initialSize?: string | null; +}) { + const [color, setColor] = useState(initialColor ?? product.colors[0]); + const [size, setSize] = useState(initialSize ?? (product.sizes[0] ?? null)); const [designWidthCm, setDesignWidthCm] = useState(null); const [designHeightCm, setDesignHeightCm] = useState(null); const [view, setView] = useState<'front' | 'back'>('front'); @@ -527,6 +539,26 @@ export default function DesignCanvas({ product, isAdminEditing = false }: { prod // touching that coordinate system. Konva reads the container's actual // rendered (post-transform) bounding box for pointer math, so clicks/drags // still line up correctly at any scale. + useEffect(() => { + // Load admin-provided design for editing + if (isAdminEditing && initialDesignJson) { + try { + const design = JSON.parse(initialDesignJson); + if (design.front && Array.isArray(design.front)) { + setElementsFront(design.front); + console.log('✓ Loaded', design.front.length, 'front elements from design approval'); + } + if (design.back && Array.isArray(design.back)) { + setElementsBack(design.back); + console.log('✓ Loaded', design.back.length, 'back elements from design approval'); + } + } catch (e) { + console.error('Failed to load design approval JSON:', e); + } + return; // Skip draft loading when editing approved design + } + }, [isAdminEditing, initialDesignJson]); + useEffect(() => { if (typeof window === 'undefined') return;