import React, { useEffect, useState } from "react"; import RegularDropDown from "../../inputs/regularDropDown"; import { useWidgetStore } from "../../../../store/store"; import styles from "./Design.module.scss"; // Import SCSS file import ChartComponent from "./chartComponent"; type Side = "top" | "bottom" | "left" | "right"; // Define the Widget interface interface Widget { id: string; type: string; // Change this if the type is more specific panel: Side; // You should define or import 'Side' type if not already defined title: string; fontFamily?: string; fontSize?: string; fontWeight?: string; } const Design = () => { const [selectedName, setSelectedName] = useState("drop down"); const [selectedElement, setSelectedElement] = useState("drop down"); const [selectedFont, setSelectedFont] = useState("drop down"); const [selectedSize, setSelectedSize] = useState("drop down"); const [selectedWeight, setSelectedWeight] = useState("drop down"); const { selectedChartId, setSelectedChartId, widgets, setWidgets } = useWidgetStore(); // Get selected chart ID and list of widgets // Find the selected widget based on `selectedChartId` const selectedWidget = selectedChartId ? widgets.find((widget) => widget.id === selectedChartId.id) : null; // Function to update the selected widget const handleUpdateWidget = (updatedProperties: Partial<Widget>) => { if (!selectedWidget) { return; } // Update the widgets array const updatedWidgets = widgets.map((widget) => widget.id === selectedWidget.id ? { ...widget, ...updatedProperties } // Merge existing widget with updated properties : widget ); // Update the global state with the new widgets array setWidgets(updatedWidgets); // Update `selectedChartId` to reflect the changes if (selectedChartId) { const updatedChartId = { ...selectedChartId, ...updatedProperties, // Merge updated properties into `selectedChartId` }; setSelectedChartId(updatedChartId); } }; useEffect(() => { // Log the current state of widgets for debugging }, [widgets]); return ( <div className="design"> {/* Display the selected widget's title */} <div className="selectedWidget"> {selectedWidget ? selectedWidget.title : "Widget 1"} </div> <div className="reviewChart"> {/* Pass selectedWidget properties to ChartComponent */} {selectedWidget && ( <ChartComponent type={selectedWidget.type} title={selectedWidget.title} /> )} </div> {/* Design Options */} <div className="optionsContainer"> <div className="option"> <span>Name</span> <RegularDropDown header={selectedWidget ? selectedWidget.title : "Select Name"} options={["Option 1", "Option 2", "Option 3"]} onSelect={(value) => { setSelectedName(value); handleUpdateWidget({ title: value }); }} /> </div> <div className="option"> <span>Element</span> <RegularDropDown header={selectedElement} options={["Option 1", "Option 2", "Option 3"]} onSelect={(value) => { setSelectedElement(value); handleUpdateWidget({ type: value }); // Update element type }} /> </div> <div className="option"> <span>Font Family</span> <RegularDropDown header={selectedFont} options={["Arial", "Roboto", "Sans-serif"]} onSelect={(value) => { setSelectedFont(value); handleUpdateWidget({ fontFamily: value }); }} /> </div> <div className="option"> <span>Size</span> <RegularDropDown header={selectedSize} options={["12px", "14px", "16px", "18px"]} onSelect={(value) => { setSelectedSize(value); handleUpdateWidget({ fontSize: value }); }} /> </div> <div className="option"> <span>Weight</span> <RegularDropDown header={selectedWeight} options={["Light", "Regular", "Bold"]} onSelect={(value) => { setSelectedWeight(value); handleUpdateWidget({ fontWeight: value }); }} /> </div> </div> </div> ); }; export default Design;