import React, { useRef } from "react"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // icons import { Check, Info } from "lucide-react"; // ui import { CircularProgressIndicator } from "@plane/ui"; // components import { ListItem } from "@/components/core/list"; import { ModuleListItemAction } from "@/components/modules"; // hooks import { useModule } from "@/hooks/store"; import { usePlatformOS } from "@/hooks/use-platform-os"; type Props = { moduleId: string; }; export const ModuleListItem: React.FC = observer((props) => { const { moduleId } = props; // refs const parentRef = useRef(null); // router const router = useRouter(); const { workspaceSlug } = router.query; // store hooks const { getModuleById } = useModule(); const { isMobile } = usePlatformOS(); // derived values const moduleDetails = getModuleById(moduleId); if (!moduleDetails) return null; const completionPercentage = ((moduleDetails.completed_issues + moduleDetails.cancelled_issues) / moduleDetails.total_issues) * 100; const progress = isNaN(completionPercentage) ? 0 : Math.floor(completionPercentage); const completedModuleCheck = moduleDetails.status === "completed"; // handlers const openModuleOverview = (e: React.MouseEvent) => { e.stopPropagation(); e.preventDefault(); const { query } = router; if (query.peekModule) { delete query.peekModule; router.push({ pathname: router.pathname, query: { ...query }, }); } else { router.push({ pathname: router.pathname, query: { ...query, peekModule: moduleId }, }); } }; return ( { if (moduleDetails.archived_at) openModuleOverview(e); }} prependTitleElement={ {completedModuleCheck ? ( progress === 100 ? ( ) : ( {`!`} ) ) : progress === 100 ? ( ) : ( {`${progress}%`} )} } appendTitleElement={ } actionableItems={ } isMobile={isMobile} parentRef={parentRef} /> ); });