import { useSortable } from "@dnd-kit/sortable"; import ChartComponent from "../../components/ui/sideBar/realTimeViz/chartComponent"; import { ProgressCard } from "./progressCard"; import { useWidgetStore } from "../../store/store"; import { useMemo, useState } from "react"; export const DraggableWidget = ({ widget }: { widget: any }) => { const { attributes, listeners, setNodeRef, transform, transition, isDragging, } = useSortable({ id: widget.id }); const { selectedChartId, setSelectedChartId } = useWidgetStore(); // State for managing the popup visibility and customization options const [isPopupOpen, setIsPopupOpen] = useState(false); const [customizationOptions, setCustomizationOptions] = useState({ templateBackground: "#ffffff", cardBackground: "#ffffff", cardOpacity: 1, cardBlur: 0, font: "Arial", margin: 0, radius: 5, shadow: "Low", }); const style = useMemo( () => ({ transform: transform ? `translate3d(${transform.x}px, ${transform.y}px, 0)` : undefined, transition: transition || "transform 200ms ease", }), [transform, transition] ); const handlePointerDown = () => { if (!isDragging) { setSelectedChartId(widget); } }; // Handle double-click to open the popup const handleDoubleClick = () => { setIsPopupOpen(true); }; // Close the popup const handleClosePopup = () => { setIsPopupOpen(false); }; // Save the changes made in the popup const handleSaveChanges = () => { // Here you can save the customizationOptions to your store or API console.log("Saved Customization Options:", customizationOptions); setIsPopupOpen(false); }; // Compute dynamic card styles based on customizationOptions const cardStyle = useMemo(() => { const shadowLevels = { Low: "0px 2px 4px rgba(0, 0, 0, 0.1)", Medium: "0px 4px 8px rgba(0, 0, 0, 0.2)", High: "0px 8px 16px rgba(0, 0, 0, 0.3)", }; return { backgroundColor: customizationOptions.cardBackground, opacity: customizationOptions.cardOpacity, filter: `blur(${customizationOptions.cardBlur}px)`, fontFamily: customizationOptions.font, margin: `${customizationOptions.margin}px`, borderRadius: `${customizationOptions.radius}px`, // boxShadow: shadowLevels[customizationOptions.shadow], }; }, [customizationOptions]); return ( <>