import React, { useEffect } from 'react'; import { DashboardGrid } from './Grid'; import { DashboardItemAddButton } from './AddButton'; import { defaultBlankLayouts, useDashboardStore } from '../../store/dashboard'; import { useEvent } from '../../hooks/useEvent'; import { Layouts } from 'react-grid-layout'; import { Button, Empty, message } from 'antd'; import { DateFilter } from '../DateFilter'; import { trpc } from '../../api/trpc'; import { useCurrentWorkspace, useCurrentWorkspaceId } from '../../store/user'; import clsx from 'clsx'; import { useTranslation } from '@i18next-toolkit/react'; export const Dashboard: React.FC = React.memo(() => { const { t } = useTranslation(); const { isEditMode, switchEditMode, layouts, items } = useDashboardStore(); const mutation = trpc.workspace.saveDashboardLayout.useMutation(); const workspaceId = useCurrentWorkspaceId(); const workspace = useCurrentWorkspace(); useEffect(() => { // Init on mount const { items = [], layouts = defaultBlankLayouts } = workspace.dashboardLayout ?? {}; useDashboardStore.setState({ items, layouts, }); }, []); const handleChangeLayouts = useEvent((layouts: Layouts) => { useDashboardStore.setState({ layouts, }); }); const handleSaveDashboardLayout = useEvent(async () => { await mutation.mutateAsync({ workspaceId, dashboardLayout: { layouts, items, }, }); switchEditMode(); message.success(t('Layout saved success')); }); return (
{isEditMode ? ( <> ) : ( <> )}
{items.length === 0 && ( )}
); }); Dashboard.displayName = 'Dashboard';