"use client"; import type { TFunction } from "i18next"; import { useQueryState } from "nuqs"; import { type ReactNode, useMemo, useRef, useState } from "react"; import posthog from "posthog-js"; import { downloadAsCsv } from "@calcom/lib/csvUtils"; import { useDebounce } from "@calcom/lib/hooks/useDebounce"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import type { RouterOutputs } from "@calcom/trpc/react"; import classNames from "@calcom/ui/classNames"; import { Avatar } from "@calcom/ui/components/avatar"; import { Badge } from "@calcom/ui/components/badge"; import { Button } from "@calcom/ui/components/button"; import { ToggleGroup, Input } from "@calcom/ui/components/form"; import { HoverCard, HoverCardContent, HoverCardTrigger } from "@calcom/ui/components/hover-card"; import { TableNew, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@calcom/ui/components/table"; import { Tooltip } from "@calcom/ui/components/tooltip"; import { useInsightsRoutingParameters } from "@calcom/web/modules/insights/hooks/useInsightsRoutingParameters"; import { ChartCard } from "../ChartCard"; interface DownloadButtonProps { selectedPeriod: "perDay" | "perWeek" | "perMonth"; searchQuery?: string; } function DownloadButton({ selectedPeriod, searchQuery }: DownloadButtonProps) { const [isDownloading, setIsDownloading] = useState(false); const routingParams = useInsightsRoutingParameters(); const utils = trpc.useContext(); const handleDownload = async (e: React.MouseEvent) => { e.preventDefault(); // Prevent default form submission try { posthog.capture("insights_routing_download_clicked", { teamId: routingParams.selectedTeamId }); const result = await utils.viewer.insights.routedToPerPeriodCsv.fetch({ ...routingParams, period: selectedPeriod, searchQuery: searchQuery || undefined, }); if (!result?.data) { throw new Error("No data received"); } downloadAsCsv(result.data, result.filename || "routing-data.csv"); } catch (error) { console.error("Download failed:", error); } finally { setIsDownloading(false); } }; return (