import React, { useEffect, useRef } from "react"; import { Card } from "../../tremor/Card"; import { Title, Text, Label } from "../../tremor/Text"; import { useDashboard } from "./useDashboard"; import { useBackend } from "../Wrapper"; import { useTheme } from "./useTheme"; import { DashboardHeader } from "../../components/DashboardHeader"; import { DashboardGrid } from "../../components/DashboardGrid"; import { Copilot, CopilotButton, useCopilot } from "../Copilot"; import { CreateToolbar } from "../../components/CreateToolbar"; import { LogType } from "@onvo-ai/js"; import { Toaster } from "sonner"; import { Root } from "@radix-ui/react-tabs"; import { AutomationsModal } from "../../components/AutomationsModal"; import { useWidgetSuggestionsModal, WidgetSuggestionsModal } from "../../components/WidgetSuggestionsModal"; import { useIsMobile } from "../../lib/utils"; import { Panel, PanelGroup, PanelResizeHandle } from "react-resizable-panels"; export const DashboardWrapper: React.FC<{ id: string; children: React.ReactNode; }> = ({ id: dashboardId, children }) => { const { backend } = useBackend(); const { setId, refreshWidgets } = useDashboard(); const theme = useTheme(); useEffect(() => { if (dashboardId && backend) { setId(dashboardId, backend); refreshWidgets(backend); } }, [dashboardId, backend]); return children; }; export const Dashboard: React.FC<{ id: string; className?: string; variant?: "default" | "pdf" | "pptx" }> = ({ id: dashboardId, className, variant = "default" }): React.ReactNode => { const { backend, setContainerRef } = useBackend(); const theme = useTheme(); const { dashboard, unauthorized, queue, tab } = useDashboard(); const isMobile = useIsMobile(); const localRef = useRef(null); const style = dashboard?.settings?.custom_css || ""; const { open: suggestionsModalOpen, setOpen: setSuggestionsModalOpen } = useWidgetSuggestionsModal(); const { open: copilotOpen, setOpen: setCopilotOpen, variant: copilotVariant } = useCopilot(); useEffect(() => { if (dashboardId && backend) { backend.logs.create({ type: LogType.ViewDashboard, dashboard: dashboardId, }) } return () => { queue.flush(); } }, [dashboardId, backend]); useEffect(() => { if (localRef?.current) { setContainerRef(localRef); } }, [localRef]) let initialTab = 0; if (dashboard?.tabs && dashboard?.tabs.length > 0) { initialTab = Math.min(...(dashboard?.tabs.map(a => a.id))) || 0; } return (
{unauthorized && (
Dashboard unavailable The dashboard you are trying to access is currently unavailable. If you are the administrator, click{" "} here {" "} to update your billing.
)}
{(!variant || variant === "default") && ( )}
{suggestionsModalOpen && ( <>
{ if (size === 0) { setSuggestionsModalOpen(false); } }}>
)} {(copilotOpen && copilotVariant === "default" && !isMobile && dashboard?.settings?.copilot_enabled) && ( <>
{ if (size === 0) { setCopilotOpen(false); } }}> )} {((copilotVariant === "modal" || isMobile) && dashboard?.settings?.copilot_enabled) && ( )} {!copilotOpen && dashboard?.settings?.copilot_enabled && ( )}
); };