import { useEffect, useState } from "react"; import { observer } from "mobx-react-lite"; // hooks import { StateGroupIcon } from "@plane/ui"; import { IssueAttachmentRoot, IssueUpdateStatus } from "@/components/issues"; import { useIssueDetail, useProjectState, useUser } from "@/hooks/store"; import useReloadConfirmations from "@/hooks/use-reload-confirmation"; // components import { IssueDescriptionInput } from "../description-input"; import { SubIssuesRoot } from "../sub-issues"; import { IssueTitleInput } from "../title-input"; import { IssueActivity } from "./issue-activity"; import { IssueParentDetail } from "./parent"; import { IssueReaction } from "./reactions"; // ui // types import { TIssueOperations } from "./root"; type Props = { workspaceSlug: string; projectId: string; issueId: string; issueOperations: TIssueOperations; is_editable: boolean; }; export const IssueMainContent: React.FC = observer((props) => { const { workspaceSlug, projectId, issueId, issueOperations, is_editable } = props; // states const [isSubmitting, setIsSubmitting] = useState<"submitting" | "submitted" | "saved">("saved"); const [issueDescription, setIssueDescription] = useState(undefined); // hooks const { currentUser } = useUser(); const { projectStates } = useProjectState(); const { issue: { getIssueById }, } = useIssueDetail(); const { setShowAlert } = useReloadConfirmations(isSubmitting === "submitting"); useEffect(() => { if (isSubmitting === "submitted") { setShowAlert(false); setTimeout(async () => { setIsSubmitting("saved"); }, 2000); } else if (isSubmitting === "submitting") { setShowAlert(true); } }, [isSubmitting, setShowAlert, setIsSubmitting]); const issue = issueId ? getIssueById(issueId) : undefined; if (!issue) return <>; const currentIssueState = projectStates?.find((s) => s.id === issue.state_id); useEffect(() => { setIssueDescription( issue.description_html !== undefined || issue.description_html !== null ? issue.description_html != "" ? issue.description_html : "

" : undefined ); return () => setIssueDescription(undefined); }, [issue.description_html]); return ( <>
{issue.parent_id && ( )}
{currentIssueState && ( )}
setIsSubmitting(value)} issueOperations={issueOperations} disabled={!is_editable} value={issue.name} /> {issue?.description_html === issueDescription && ( setIsSubmitting(value)} /> )} {currentUser && ( )} {currentUser && ( )}
); });