"use client"; import { FC, Fragment } from "react"; import { observer } from "mobx-react"; // plane imports import { useTranslation } from "@plane/i18n"; import { TCycleEstimateType } from "@plane/types"; import { Loader } from "@plane/ui"; import { getDate } from "@plane/utils"; // components import ProgressChart from "@/components/core/sidebar/progress-chart"; import { validateCycleSnapshot } from "@/components/cycles/analytics-sidebar/issue-progress"; import { EstimateTypeDropdown } from "@/components/cycles/dropdowns"; // hooks import { useCycle } from "@/hooks/store/use-cycle"; type ProgressChartProps = { workspaceSlug: string; projectId: string; cycleId: string; }; export const SidebarChart: FC = observer((props) => { const { workspaceSlug, projectId, cycleId } = props; // hooks const { getEstimateTypeByCycleId, getCycleById, fetchCycleDetails, fetchArchivedCycleDetails, setEstimateType } = useCycle(); const { t } = useTranslation(); // derived data const cycleDetails = validateCycleSnapshot(getCycleById(cycleId)); const cycleStartDate = getDate(cycleDetails?.start_date); const cycleEndDate = getDate(cycleDetails?.end_date); const totalEstimatePoints = cycleDetails?.total_estimate_points || 0; const totalIssues = cycleDetails?.total_issues || 0; const estimateType = getEstimateTypeByCycleId(cycleId); const chartDistributionData = estimateType === "points" ? cycleDetails?.estimate_distribution : cycleDetails?.distribution || undefined; const completionChartDistributionData = chartDistributionData?.completion_chart || undefined; if (!workspaceSlug || !projectId || !cycleId) return null; const isArchived = !!cycleDetails?.archived_at; // handlers const onChange = async (value: TCycleEstimateType) => { setEstimateType(cycleId, value); if (!workspaceSlug || !projectId || !cycleId) return; try { if (isArchived) { await fetchArchivedCycleDetails(workspaceSlug, projectId, cycleId); } else { await fetchCycleDetails(workspaceSlug, projectId, cycleId); } } catch (err) { console.error(err); setEstimateType(cycleId, estimateType); } }; return (
{cycleStartDate && cycleEndDate && completionChartDistributionData ? ( ) : ( )}
); });