import ActiveObjectContext from '@/components/Context/activeObject/ObjectContext'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { useContext, useEffect, useRef, useState } from 'react' import { Card, } from '@/components/ui/card'; import CanvasContext from '@/components/Context/canvasContext/CanvasContext'; import { Separator } from '@/components/ui/separator'; import { fabric } from 'fabric'; const SelectObjectFromGroup = () => { const [groupObjects, setGroupObjects] = useState([]) const [selectedObject, setSelectedObject] = useState(null) const { setActiveObject } = useContext(ActiveObjectContext) const { canvas } = useContext(CanvasContext) const previewCanvasRef = useRef(null) const activeObject = canvas?.getActiveObject() useEffect(() => { if (activeObject?.type === 'group') { setGroupObjects(activeObject._objects || []) setSelectedObject(null) } else { setGroupObjects([]) setSelectedObject(null) } }, [activeObject]) // useEffect(() => { // if (selectedObject && previewCanvasRef.current) { // const previewCanvas = new fabric.StaticCanvas(previewCanvasRef.current); // previewCanvas.setDimensions({ // width: 100, // height: 100 // }) // // Clone the active object to create a true deep copy // selectedObject.clone((clonedObject) => { // if (selectedObject?.width > 100 || selectedObject?.height > 100) { // clonedObject.set({ // scaleX: 0.2, // scaleY: 0.2, // }) // } // // Add the cloned object to the canvas // clonedObject.set({ // left: 50, // top: 50, // originX: 'center', // originY: 'center', // selectable: false, // evented: false, // }) // previewCanvas.add(clonedObject); // previewCanvas.renderAll(); // }); // return () => { // previewCanvas.dispose() // } // } // }, [selectedObject]) useEffect(() => { if (selectedObject && previewCanvasRef.current) { // Create a new static canvas const previewCanvas = new fabric.StaticCanvas(previewCanvasRef.current); previewCanvas.setDimensions({ width: 100, height: 100 }); // Clear previous objects (if any) previewCanvas.clear(); // Clone the active object for preview selectedObject.clone((clonedObject) => { const scaledWidth = selectedObject.width * selectedObject.scaleX; const scaledHeight = selectedObject.height * selectedObject.scaleY; if (scaledWidth > 100 || scaledHeight > 100) { clonedObject.scaleToWidth(100); // Scale to fit width clonedObject.scaleToHeight(100); // Scale to fit height } clonedObject.set({ left: 50, top: 50, originX: 'center', originY: 'center', }); // Add the cloned object to preview canvas previewCanvas.add(clonedObject); previewCanvas.renderAll(); }); // Cleanup function to dispose of the canvas return () => { previewCanvas.clear(); // Clear all objects previewCanvas.dispose(); // Properly dispose the canvas }; } }, [selectedObject, previewCanvasRef]); const handleSelectObject = (value) => { const selected = groupObjects[parseInt(value)] setSelectedObject(selected) setActiveObject(selected) } if (!activeObject || activeObject.type !== 'group') { return null } return (

Group Objects

{selectedObject && (
)}
) } export default SelectObjectFromGroup;