import React from "react"; import { useRouter } from "next/router"; import useSWR from "swr"; import { Disclosure, Transition } from "@headlessui/react"; // services import workspaceService from "lib/services/workspace.service"; // constants import { addSpaceIfCamelCase } from "constants/common"; import { WORKSPACE_MEMBERS, STATE_LIST } from "constants/fetch-keys"; // services import stateService from "lib/services/state.service"; // hooks import useUser from "lib/hooks/useUser"; // components import SingleListIssue from "components/common/list-view/single-issue"; // ui import { CustomMenu, Spinner } from "ui"; // icons import { PlusIcon, ChevronDownIcon } from "@heroicons/react/20/solid"; // types import { IIssue, IWorkspaceMember, NestedKeyOf, Properties } from "types"; type Props = { groupedByIssues: { [key: string]: (IIssue & { bridge?: string })[]; }; properties: Properties; selectedGroup: NestedKeyOf | null; openCreateIssueModal: (issue?: IIssue, actionType?: "create" | "edit" | "delete") => void; openIssuesListModal: () => void; removeIssueFromCycle: (bridgeId: string) => void; handleDeleteIssue: React.Dispatch>; setPreloadedData: React.Dispatch< React.SetStateAction< | (Partial & { actionType: "createIssue" | "edit" | "delete"; }) | undefined > >; }; const CyclesListView: React.FC = ({ groupedByIssues, selectedGroup, openCreateIssueModal, openIssuesListModal, properties, removeIssueFromCycle, handleDeleteIssue, setPreloadedData, }) => { const router = useRouter(); const { workspaceSlug, projectId } = router.query; const { data: people } = useSWR( workspaceSlug ? WORKSPACE_MEMBERS : null, workspaceSlug ? () => workspaceService.workspaceMembers(workspaceSlug as string) : null ); const { data: states } = useSWR( workspaceSlug && projectId ? STATE_LIST(projectId as string) : null, workspaceSlug && projectId ? () => stateService.getStates(workspaceSlug as string, projectId as string) : null ); return (
{Object.keys(groupedByIssues).map((singleGroup) => { const stateId = selectedGroup === "state_detail.name" ? states?.find((s) => s.name === singleGroup)?.id ?? null : null; return ( {({ open }) => (
{selectedGroup !== null ? (

{singleGroup === null || singleGroup === "null" ? selectedGroup === "priority" && "No priority" : addSpaceIfCamelCase(singleGroup)}

) : (

All Issues

)}

{groupedByIssues[singleGroup as keyof IIssue].length}

{groupedByIssues[singleGroup] ? ( groupedByIssues[singleGroup].length > 0 ? ( groupedByIssues[singleGroup].map((issue) => { const assignees = [ ...(issue?.assignees_list ?? []), ...(issue?.assignees ?? []), ]?.map((assignee) => { const tempPerson = people?.find( (p) => p.member.id === assignee )?.member; return { avatar: tempPerson?.avatar, first_name: tempPerson?.first_name, email: tempPerson?.email, }; }); return ( openCreateIssueModal(issue, "edit")} handleDeleteIssue={() => handleDeleteIssue(issue.id)} removeIssue={() => removeIssueFromCycle(issue.bridge ?? "")} /> ); }) ) : (

No issues.

) ) : (
)}
Add issue } optionsPosition="left" noBorder > { openCreateIssueModal(); if (selectedGroup !== null) { setPreloadedData({ state: stateId !== null ? stateId : undefined, [selectedGroup]: singleGroup, actionType: "createIssue", }); } }} > Create new openIssuesListModal()}> Add an existing issue
)}
); })}
); }; export default CyclesListView;