import { useGetIdentity, useGetList, useGetOne, useTranslate } from "ra-core"; import type { BusinessProfile, Contact, ContactNote } from "../types"; import { DashboardActivityLog } from "./DashboardActivityLog"; import { DashboardStepper } from "./DashboardStepper"; import { DealsChart } from "./DealsChart"; import { HotContacts } from "./HotContacts"; import { InvoicesChart } from "./InvoicesChart"; import { OutstandingInvoices } from "./OutstandingInvoices"; import { TasksList } from "./TasksList"; import { Welcome } from "./Welcome"; import { Tabs, TabsContent, TabsList, TabsTrigger, } from "@/components/ds/ui/tabs"; import { TrendingUp, DollarSign } from "lucide-react"; import { DailyBriefing } from "./DailyBriefing"; export const Dashboard = () => { const translate = useTranslate(); const { identity, isPending: isPendingIdentity } = useGetIdentity(); const { data: businessProfile, isPending: isPendingProfile, error: errorProfile, } = useGetOne("business_profile", { id: 1 }); const { data: dataContact, total: totalContact, isPending: isPendingContact, } = useGetList("contacts", { pagination: { page: 1, perPage: 1 }, }); const { total: totalContactNotes, isPending: isPendingContactNotes } = useGetList("contactNotes", { pagination: { page: 1, perPage: 1 }, }); const { isPending: isPendingDeal } = useGetList("deals", { pagination: { page: 1, perPage: 1 }, }); const isPending = isPendingContact || isPendingContactNotes || isPendingDeal || isPendingIdentity || isPendingProfile; if (isPending) { return null; } // Handle business_profile errors gracefully if (errorProfile) { console.error("[Dashboard] Failed to load business profile:", errorProfile); // Continue rendering dashboard even if business profile fails } // Only show onboarding to administrators if not completed const showOnboarding = identity?.administrator && !businessProfile?.onboarding_completed; if (showOnboarding) { if (!totalContact) { return ; } if (!totalContactNotes) { return ; } } return (
{import.meta.env.VITE_IS_DEMO === "true" ? : null}
{translate("crm.dashboard.invoice_revenue")} {translate("crm.dashboard.deal_pipeline")}
); };