// react import React from "react"; // next import Link from "next/link"; import type { NextPage } from "next"; // swr import useSWR from "swr"; // headless ui import { Transition, Popover } from "@headlessui/react"; // layouts import AppLayout from "layouts/app-layout"; // hooks import useUser from "lib/hooks/useUser"; // ui import { Spinner, HeaderButton, EmptySpace, EmptySpaceItem, Breadcrumbs, BreadcrumbItem, CustomMenu, } from "ui"; // constants import { USER_ISSUE } from "constants/fetch-keys"; import { classNames, replaceUnderscoreIfSnakeCase } from "constants/common"; // services import userService from "lib/services/user.service"; import issuesServices from "lib/services/issues.service"; // hoc import withAuth from "lib/hoc/withAuthWrapper"; import useMyIssuesProperties from "lib/hooks/useMyIssueFilter"; // components import ChangeStateDropdown from "components/project/issues/my-issues/ChangeStateDropdown"; // icons import { ChevronDownIcon, PlusIcon, RectangleStackIcon } from "@heroicons/react/24/outline"; // types import { IIssue, NestedKeyOf, Properties } from "types"; const groupByOptions: Array<{ name: string; key: NestedKeyOf | null }> = [ { name: "State", key: "state_detail.name" }, { name: "Priority", key: "priority" }, { name: "Cycle", key: "issue_cycle.cycle_detail.name" }, { name: "Created By", key: "created_by" }, { name: "None", key: null }, ]; const MyIssues: NextPage = () => { const { user, activeWorkspace } = useUser(); const { data: myIssues, mutate: mutateMyIssues } = useSWR( user && activeWorkspace ? USER_ISSUE(activeWorkspace.slug) : null, user && activeWorkspace ? () => userService.userIssues(activeWorkspace.slug) : null ); const updateMyIssues = ( workspaceSlug: string, projectId: string, issueId: string, issue: Partial ) => { mutateMyIssues((prevData) => { return prevData?.map((prevIssue) => { if (prevIssue.id === issueId) { return { ...prevIssue, ...issue, state_detail: { ...prevIssue.state_detail, ...issue.state_detail, }, }; } return prevIssue; }); }, false); issuesServices .patchIssue(workspaceSlug, projectId, issueId, issue) .then((response) => { console.log(response); }) .catch((error) => { console.log(error); }); }; const { filteredIssues, properties, setMyIssueGroupByProperty, setMyIssueProperty, groupByProperty, } = useMyIssuesProperties(myIssues); return ( } right={ <> {({ open }) => ( <> View

Group by

option.key === groupByProperty)?.name ?? "Select" } > {groupByOptions.map((option) => ( setMyIssueGroupByProperty(option.key)} > {option.name} ))}

Properties

{Object.keys(properties).map((key) => ( ))}
)}
{ const e = new KeyboardEvent("keydown", { key: "i", ctrlKey: true, }); document.dispatchEvent(e); }} /> } >
{myIssues ? ( <> {myIssues.length > 0 ? (
{myIssues.map((myIssue, index) => ( ))}
NAME DESCRIPTION PROJECT PRIORITY STATUS
{myIssue.name} {/* {myIssue.description} */} {myIssue.project_detail?.name}
{`(${myIssue.project_detail?.identifier}-${myIssue.sequence_id})`}
{myIssue.priority}
) : (
Use{" "}
Ctrl/Command + I
{" "} shortcut to create a new issue } Icon={PlusIcon} action={() => { const e = new KeyboardEvent("keydown", { key: "i", ctrlKey: true, }); document.dispatchEvent(e); }} />
)} ) : (
)}
); }; export default withAuth(MyIssues);