import { FC, useEffect, useState } from "react"; import { observer } from "mobx-react"; import { Check, Info, X } from "lucide-react"; import { Spinner, Tooltip } from "@plane/ui"; // constants import { EEstimateSystem } from "@/constants/estimates"; // helpers import { cn } from "@/helpers/common.helper"; // hooks import { useEstimate, useEstimatePoint } from "@/hooks/store"; type TEstimatePointUpdate = { workspaceSlug: string; projectId: string; estimateId: string; estimatePointId: string; callback: () => void; }; export const EstimatePointUpdate: FC = observer((props) => { const { workspaceSlug, projectId, estimateId, estimatePointId, callback } = props; // hooks const { asJson: estimate, estimatePointIds } = useEstimate(estimateId); const { asJson: estimatePoint, updateEstimatePoint } = useEstimatePoint(estimateId, estimatePointId); // states const [loader, setLoader] = useState(false); const [estimateInputValue, setEstimateInputValue] = useState(undefined); const [error, setError] = useState(undefined); useEffect(() => { if (estimateInputValue === undefined && estimatePoint) setEstimateInputValue(estimatePoint?.value || ""); }, [estimateInputValue, estimatePoint]); const handleClose = () => { setEstimateInputValue(""); callback(); }; const handleCreate = async () => { if (!workspaceSlug || !projectId || !projectId || !estimatePointIds) return; if (estimateInputValue) try { setLoader(true); setError(undefined); const estimateType: EEstimateSystem | undefined = estimate?.type; let isEstimateValid = false; if (estimateType && [(EEstimateSystem.TIME, EEstimateSystem.POINTS)].includes(estimateType)) { if (estimateInputValue && Number(estimateInputValue) && Number(estimateInputValue) >= 0) { isEstimateValid = true; } } else if (estimateType && estimateType === EEstimateSystem.CATEGORIES) { if (estimateInputValue && estimateInputValue.length > 0) { isEstimateValid = true; } } if (isEstimateValid) { const payload = { value: estimateInputValue, }; await updateEstimatePoint(workspaceSlug, projectId, payload); setLoader(false); setError(undefined); handleClose(); } else { setLoader(false); setError("please enter a valid estimate value"); } } catch { setLoader(false); setError("something went wrong. please try again later"); } else { setError("Please fill the input field"); } }; return (
setEstimateInputValue(e.target.value)} className="border-none focus:ring-0 focus:border-0 focus:outline-none p-2.5 w-full bg-transparent" autoFocus /> {error && ( <>
)}
{loader ? (
) : (
)}
); });