import { useState, useMemo, useRef } from "react"; import { Button, IconButton, Box, Text, Flex, Grid, Dialog, Tabs, Badge, Menu, HStack } from "@chakra-ui/react"; import { Settings, Plus, LayoutGrid, Move, Save, X } from 'lucide-react'; import { useDashboardStore } from "../../store/useDashboardStore.jsx"; import { WIDGET_REGISTRY } from "../../constants/widgetRegistry.jsx"; export function SettingsButton() { // 1. ☁Store connections const isEditing = useDashboardStore(state => state.isEditing); const enterEditMode = useDashboardStore(state => state.enterEditMode); // This now handles both local UI lock AND database saving! const saveEdit = useDashboardStore(state => state.saveEdit); const cancelEdit = useDashboardStore(state => state.cancelEdit); const addWidget = useDashboardStore(state => state.addWidget); const [isLibraryOpen, setIsLibraryOpen] = useState(false); // Smart Add Handler const handleAddWidget = (widgetId, sizeKey) => { enterEditMode(); addWidget(widgetId, sizeKey); }; const categorizedWidgets = useMemo(() => { return Object.entries(WIDGET_REGISTRY).reduce((acc, [id, widget]) => { const cat = widget.category || 'General'; if (!acc[cat]) acc[cat] = []; acc[cat].push({ id, ...widget }); return acc; }, {}); }, []); const categories = Object.keys(categorizedWidgets); // use ref to capture html node for placing menu accordingly const menuRef = useRef(null); const getAnchorRect = () => { if (!menuRef.current) return null; return menuRef.current.getBoundingClientRect(); }; return ( <> {/* THE STATIC DROPDOWN MENU */}