import { Text } from "../../tremor/Text"; import { LanguageIcon, PhotoIcon, DivideIcon, } from "@heroicons/react/20/solid"; import { Tooltip } from "../../tremor/Tooltip/Tooltip"; import React from "react"; import { useTextWidgetModal } from "../TextWidgetModal"; import { useImageWidgetModal } from "../ImageWidgetModal"; import { useDashboard } from "../../layouts/Dashboard/useDashboard"; import { useBackend } from "../../layouts/Wrapper"; import { useMaxHeight } from "../../lib/useMaxHeight"; import { CubeTransparentIcon, LightBulbIcon, PlusIcon } from "@heroicons/react/24/outline"; import { ChartBarIcon } from "@heroicons/react/24/solid"; import { useEditWidgetModal } from "../EditWidgetModal"; import { useWidgetSuggestionsModal } from "../WidgetSuggestionsModal"; import { Popover, PopoverContent, PopoverTrigger } from "../../tremor/Popover"; const BLANK_CODE = `def main(): return [] `; export const CreateToolbar: React.FC<{}> = ({ }) => { const { setOpen: setTextModalOpen } = useTextWidgetModal(); const { setOpen: setImageModalOpen } = useImageWidgetModal(); const { setOpen: setAdvancedModalOpen } = useEditWidgetModal(); const { setOpen: setSuggestionsModalOpen, open: suggestionsModalOpen } = useWidgetSuggestionsModal(); const { setOpen: setEditModalOpen } = useEditWidgetModal(); const { dashboard, refreshWidgets, tab } = useDashboard(); const { backend, adminMode } = useBackend(); const { lg, sm } = useMaxHeight(); const createWidget = async () => { if (!dashboard || !backend) return; const widget = await backend.widgets.create({ dashboard: dashboard.id, layouts: { lg: { x: 0, y: lg, w: 4, h: 20, }, sm: { x: 0, y: sm, w: 3, h: 20, }, }, use_in_library: false, use_in_chat: false, title: "New widget", type: "", team: dashboard.team, code: "", messages: [], settings: {}, error: null, tab: tab || 0, engine: "python-v1", config: {}, drilldown_widget: null, }); setEditModalOpen(true, widget); } const addDividerWidget = async () => { if (!dashboard || !backend) return; let cache = { type: "divider", data: { datasets: [{ data: [], label: "" }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { divider: { display: true, }, title: { display: false, }, legend: { display: false, }, subtitle: { display: false, }, } }, }; await backend.widgets.create({ dashboard: dashboard.id, layouts: { lg: { x: 0, y: lg, w: 12, h: 4, }, sm: { x: 0, y: sm, w: 3, h: 4, }, }, use_in_library: false, use_in_chat: false, title: "Divider", type: "divider", team: dashboard.team, code: "", messages: [], settings: {}, error: null, tab: tab || 0, engine: "manual-v1", config: cache, drilldown_widget: null, }); refreshWidgets(backend); }; const addAdvancedWidget = async () => { if (!dashboard || !backend) return; let cache = { type: "line", data: { datasets: [{ data: [], label: "" }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { title: { display: true, text: "New Widget" }, legend: { display: false, }, subtitle: { display: false, }, }, scales: { x: { display: true }, y: { display: true } } }, }; let wid = await backend.widgets.create({ dashboard: dashboard.id, layouts: { lg: { x: 0, y: lg, w: 4, h: 4, }, sm: { x: 0, y: sm, w: 3, h: 4, }, }, use_in_library: false, use_in_chat: false, type: "bar", title: "New widget", team: dashboard.team, code: BLANK_CODE, messages: [], settings: {}, error: null, tab: tab || 0, engine: "manual-v1", config: cache, drilldown_widget: null, }); refreshWidgets(backend); setAdvancedModalOpen(true, wid); }; if ( !dashboard?.settings?.can_ask_questions && !dashboard?.settings?.can_create_widgets && !adminMode ) { return <>; } return ( <>
{(dashboard?.settings?.can_ask_questions || adminMode) && (
Create chart
Create chart
)}
{(dashboard?.settings?.can_create_widgets || adminMode) && dashboard?.settings?.enable_advanced_widget_creator && (
{ e.preventDefault(); addAdvancedWidget(); }} className="onvo-p-1 onvo-flex onvo-flex-row onvo-gap-2 onvo-items-center onvo-rounded-full onvo-transition-all onvo-cursor-pointer hover:onvo-bg-blue-500/10">
Manual widget creator
)} {(dashboard?.settings?.can_create_widgets || adminMode) && ( <>
{ e.preventDefault(); setImageModalOpen(true); }} className="onvo-p-1 onvo-flex onvo-flex-row onvo-gap-2 onvo-items-center onvo-rounded-full onvo-transition-all onvo-cursor-pointer hover:onvo-bg-blue-500/10">
Add image widget
{ e.preventDefault(); setTextModalOpen(true); }} className="onvo-p-1 onvo-flex onvo-flex-row onvo-gap-2 onvo-items-center onvo-rounded-full onvo-transition-all onvo-cursor-pointer hover:onvo-bg-blue-500/10">
Add text widget
{ e.preventDefault(); addDividerWidget(); }} className="onvo-p-1 onvo-flex onvo-flex-row onvo-gap-2 onvo-items-center onvo-rounded-full onvo-transition-all onvo-cursor-pointer hover:onvo-bg-blue-500/10">
Add divider widget
)}
{adminMode && (
{ setSuggestionsModalOpen(!suggestionsModalOpen); }} className={"onvo-group onvo-transition-all onvo-h-10 onvo-w-10 hover:onvo-bg-blue-500 onvo-rounded-full onvo-text-white onvo-flex onvo-justify-center onvo-items-center onvo-border-solid onvo-border onvo-border-black/10 dark:onvo-border-white/10 " + (suggestionsModalOpen ? "onvo-bg-blue-500" : "onvo-bg-transparent")}>
)}
); };