// ======================================== // DashboardWidgetConfig Component // ======================================== // Configuration panel for managing dashboard widgets visibility and layout import * as React from 'react'; import { useIntl } from 'react-intl'; import { ChevronDown, Eye, EyeOff, RotateCcw } from 'lucide-react'; import { Button } from '@/components/ui/Button'; import { Checkbox } from '@/components/ui/Checkbox'; import { cn } from '@/lib/utils'; import type { WidgetConfig } from '@/types/store'; export interface DashboardWidgetConfigProps { /** List of widget configurations */ widgets: WidgetConfig[]; /** Callback when widget visibility changes */ onWidgetToggle: (widgetId: string) => void; /** Callback when reset layout is requested */ onResetLayout: () => void; /** Whether the panel is currently open */ isOpen?: boolean; /** Callback when open state changes */ onOpenChange?: (open: boolean) => void; } /** * DashboardWidgetConfig - Widget configuration panel * * Allows users to: * - Toggle widget visibility * - Reset layout to defaults * - Quickly manage what widgets appear on dashboard */ export function DashboardWidgetConfig({ widgets, onWidgetToggle, onResetLayout, isOpen = false, onOpenChange, }: DashboardWidgetConfigProps) { const { formatMessage } = useIntl(); const [open, setOpen] = React.useState(isOpen); const handleOpenChange = (newOpen: boolean) => { setOpen(newOpen); onOpenChange?.(newOpen); }; const visibleCount = widgets.filter((w) => w.visible).length; const allVisible = visibleCount === widgets.length; const handleToggleAll = () => { // If all visible, hide all. If any hidden, show all. widgets.forEach((widget) => { if (allVisible) { onWidgetToggle(widget.i); } else if (!widget.visible) { onWidgetToggle(widget.i); } }); }; const handleResetLayout = () => { onResetLayout(); setOpen(false); }; return (
{/* Toggle button */} {/* Dropdown panel */} {open && (
{/* Header */}

{formatMessage({ id: 'common.dashboard.config.widgets' })}

{visibleCount}/{widgets.length}
{/* Toggle all button */}
{/* Widget list */}
{widgets.map((widget) => (
onWidgetToggle(widget.i)} className="h-4 w-4" />
))}
{/* Reset button */}
)}
); } export default DashboardWidgetConfig;