import { FC, 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 } from "@/hooks/store"; type TEstimatePointCreate = { workspaceSlug: string; projectId: string; estimateId: string; callback: () => void; }; export const EstimatePointCreate: FC = observer((props) => { const { workspaceSlug, projectId, estimateId, callback } = props; // hooks const { asJson: estimate, estimatePointIds, creteEstimatePoint } = useEstimate(estimateId); // states const [loader, setLoader] = useState(false); const [estimateInputValue, setEstimateInputValue] = useState(""); const [error, setError] = useState(undefined); 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 = { key: estimatePointIds?.length + 1, value: estimateInputValue, }; await creteEstimatePoint(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" placeholder="Enter estimate point" autoFocus /> {error && ( <>
)}
{loader ? (
) : (
)}
); });