import React from "react"; // next imports import Link from "next/link"; import { useRouter } from "next/router"; // lucide icons import { ChevronDown, ChevronRight, X, Pencil, Trash, Link as LinkIcon, Loader, } from "lucide-react"; // components import { SubIssuesRootList } from "./issues-list"; import { IssueProperty } from "./properties"; // ui import { Tooltip, CustomMenu } from "components/ui"; // types import { ICurrentUserResponse, IIssue } from "types"; import { ISubIssuesRootLoaders, ISubIssuesRootLoadersHandler } from "./root"; export interface ISubIssues { workspaceSlug: string; projectId: string; parentIssue: IIssue; issue: any; spacingLeft?: number; user: ICurrentUserResponse | undefined; editable: boolean; removeIssueFromSubIssues: (parentIssueId: string, issue: IIssue) => void; issuesLoader: ISubIssuesRootLoaders; handleIssuesLoader: ({ key, issueId }: ISubIssuesRootLoadersHandler) => void; copyText: (text: string) => void; handleIssueCrudOperation: ( key: "create" | "existing" | "edit" | "delete", issueId: string, issue?: IIssue | null ) => void; setPeekParentId: (id: string) => void; } export const SubIssues: React.FC = ({ workspaceSlug, projectId, parentIssue, issue, spacingLeft = 0, user, editable, removeIssueFromSubIssues, issuesLoader, handleIssuesLoader, copyText, handleIssueCrudOperation, setPeekParentId, }) => { const router = useRouter(); const openPeekOverview = (issue_id: string) => { const { query } = router; setPeekParentId(parentIssue?.id); router.push({ pathname: router.pathname, query: { ...query, peekIssue: issue_id }, }); }; return (
{issue && (
{issue?.sub_issues_count > 0 && ( <> {issuesLoader.sub_issues.includes(issue?.id) ? (
) : (
handleIssuesLoader({ key: "visibility", issueId: issue?.id })} > {issuesLoader && issuesLoader.visibility.includes(issue?.id) ? ( ) : ( )}
)} )}
openPeekOverview(issue?.id)} >
{issue.project_detail.identifier}-{issue?.sequence_id}
{issue?.name}
{editable && ( handleIssueCrudOperation("edit", parentIssue?.id, issue)} >
Edit issue
)} {editable && ( handleIssueCrudOperation("delete", parentIssue?.id, issue)} >
Delete issue
)} copyText(`${workspaceSlug}/projects/${issue.project}/issues/${issue.id}`) } >
Copy issue link
{editable && ( <> {issuesLoader.delete.includes(issue?.id) ? (
) : (
{ handleIssuesLoader({ key: "delete", issueId: issue?.id }); removeIssueFromSubIssues(parentIssue?.id, issue); }} >
)} )}
)} {issuesLoader.visibility.includes(issue?.id) && issue?.sub_issues_count > 0 && ( )}
); };