import React, { ReactElement, useEffect } from "react"; import { useRouter } from "next/router"; import useSWR from "swr"; import { observer } from "mobx-react-lite"; // layouts import { AppLayout } from "layouts/app-layout"; // components import { ProjectIssueDetailsHeader } from "components/headers"; import { IssueDetailRoot } from "components/issues"; // ui import { Loader } from "@plane/ui"; // types import { NextPageWithLayout } from "lib/types"; // fetch-keys import { useApplication, useIssueDetail } from "hooks/store"; const IssueDetailsPage: NextPageWithLayout = observer(() => { // router const router = useRouter(); const { workspaceSlug, projectId, issueId } = router.query; // hooks const { fetchIssue, issue: { getIssueById }, } = useIssueDetail(); const { theme: themeStore } = useApplication(); const { isLoading } = useSWR( workspaceSlug && projectId && issueId ? `ISSUE_DETAIL_${workspaceSlug}_${projectId}_${issueId}` : null, workspaceSlug && projectId && issueId ? () => fetchIssue(workspaceSlug.toString(), projectId.toString(), issueId.toString()) : null ); const issue = getIssueById(issueId?.toString() || "") || undefined; const issueLoader = !issue || isLoading ? true : false; useEffect(() => { const handleToggleIssueDetailSidebar = () => { if (window && window.innerWidth < 768) { themeStore.toggleIssueDetailSidebar(true); } if (window && themeStore.issueDetailSidebarCollapsed && window.innerWidth >= 768) { themeStore.toggleIssueDetailSidebar(false); } }; window.addEventListener("resize", handleToggleIssueDetailSidebar); handleToggleIssueDetailSidebar(); return () => window.removeEventListener("resize", handleToggleIssueDetailSidebar); }, [themeStore]); return ( <> {issueLoader ? (
) : ( workspaceSlug && projectId && issueId && ( ) )} ); }); IssueDetailsPage.getLayout = function getLayout(page: ReactElement) { return ( } withProjectWrapper> {page} ); }; export default IssueDetailsPage;