import { useEffect, useState } from "react"; import { Banknote, BriefcaseBusiness, FolderKanban, X } from "lucide-react"; import type { MyWorkspaceRatesResponse } from "../../api/rates"; import { useTranslation } from "../../hooks/useTranslation"; import { formatRateDisplay } from "../../lib/money"; import { Button } from "../ui/button"; export function WorkspaceRatesPanel({ open, data, isLoading, onClose, }: { open: boolean; data: MyWorkspaceRatesResponse | null; isLoading: boolean; onClose: () => void; }) { const { t, lang } = useTranslation(); const [shouldRender, setShouldRender] = useState(open); const [isVisible, setIsVisible] = useState(open); const isRtl = lang === "fa"; useEffect(() => { let timeoutId: ReturnType | null = null; let frameId: number | null = null; if (open) { setShouldRender(true); frameId = window.requestAnimationFrame(() => setIsVisible(true)); } else { setIsVisible(false); timeoutId = setTimeout(() => setShouldRender(false), 300); } return () => { if (timeoutId) clearTimeout(timeoutId); if (frameId) window.cancelAnimationFrame(frameId); }; }, [open]); if (!shouldRender) { return null; } return (
{isLoading ? (
{t.loading || "Loading..."}
) : !data ? (
{t.rates?.myRatesEmpty || "No rates are available for this workspace yet."}
) : (

{t.rates?.workspaceRate || "Workspace rate"}

{t.rates?.workspaceRateHint || "This is your default rate unless a project-specific rate overrides it."}

{data.workspace_rate ? formatRateDisplay( { hourly_rate: data.workspace_rate.hourly_rate, currency: data.workspace_rate.currency, price_unit: data.workspace_rate.price_unit, }, lang, ) : (t.rates?.noRate || "No rate")}
{t.rates?.accessibleProjects || "Accessible projects"}
{data.accessible_project_count}
{t.rates?.projectOverrides || "Project overrides"}
{data.project_override_count}
{t.rates?.workspaceFallbackProjects || "Using workspace rate"}
{data.workspace_fallback_project_count}

{t.rates?.projectSectionTitle || "Project user rates"}

{t.rates?.projectOverrideHint || "Only projects with custom overrides are listed here. Other accessible projects use your workspace rate."}

{data.project_rates.length ? (
{data.project_rates.map((projectRate) => (

{projectRate.project.name}

{projectRate.project.client ? ( {projectRate.project.client.name} ) : null}

{formatRateDisplay( { hourly_rate: projectRate.rate.hourly_rate, currency: projectRate.rate.currency, price_unit: projectRate.rate.price_unit, }, lang, )}

))}
) : (
{t.rates?.projectOverrideEmpty || "You do not have any project-specific rate overrides in this workspace."}
)}
)}
); }