import { useMemo, useState } from "react"; import ChartComponent from "../../layout/sidebarLeft/visualization/widgets/ChartComponent"; import { useWidgetStore } from "../../../store/useWidgetStore"; export const DraggableWidget = ({ widget }: { widget: any }) => { 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", }); // Handle pointer down to select the chart const handlePointerDown = () => { if (selectedChartId?.id !== widget.id) { 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 ( <>
{widget.type === "progress" ? ( // <> ) : ( )}
{/* Popup for Customizing Template Theme */} {isPopupOpen && (

Customize Template Theme

setCustomizationOptions((prev) => ({ ...prev, templateBackground: e.target.value, })) } />
setCustomizationOptions((prev) => ({ ...prev, cardBackground: e.target.value, })) } />
setCustomizationOptions((prev) => ({ ...prev, cardOpacity: parseFloat(e.target.value), })) } />
setCustomizationOptions((prev) => ({ ...prev, cardBlur: parseInt(e.target.value), })) } />
setCustomizationOptions((prev) => ({ ...prev, margin: parseInt(e.target.value), })) } />
setCustomizationOptions((prev) => ({ ...prev, radius: parseInt(e.target.value), })) } />
)} ); };