mirror of
https://github.com/makeplane/plane.git
synced 2025-12-22 14:49:37 +01:00
* refactor: remove barrel exports from some compoennt modules * refactor: remove barrel exports from issue components * refactor: remove barrel exports from page components * chore: update type improts * refactor: remove barrel exports from cycle components * refactor: remove barrel exports from dropdown components * refactor: remove barrel exports from ce components * refactor: remove barrel exports from some more components * refactor: remove barrel exports from profile and sidebar components * chore: update type imports * refactor: remove barrel exports from store hooks * chore: dynamically load sticky editor * fix: lint * chore: revert sticky dynamic import * refactor: remove barrel exports from ce issue components * refactor: remove barrel exports from ce issue components * refactor: remove barrel exports from ce issue components --------- Co-authored-by: sriramveeraghanta <veeraghanta.sriram@gmail.com>
115 lines
3.9 KiB
TypeScript
115 lines
3.9 KiB
TypeScript
"use client";
|
|
|
|
// types
|
|
import { Briefcase, FileText, Layers, LayoutGrid } from "lucide-react";
|
|
import {
|
|
IWorkspaceDefaultSearchResult,
|
|
IWorkspaceIssueSearchResult,
|
|
IWorkspacePageSearchResult,
|
|
IWorkspaceProjectSearchResult,
|
|
IWorkspaceSearchResult,
|
|
} from "@plane/types";
|
|
// ui
|
|
import { ContrastIcon, DiceIcon } from "@plane/ui";
|
|
// helpers
|
|
import { generateWorkItemLink } from "@plane/utils";
|
|
// plane web components
|
|
import { IssueIdentifier } from "@/plane-web/components/issues/issue-details/issue-identifier";
|
|
|
|
export type TCommandGroups = {
|
|
[key: string]: {
|
|
icon: React.ReactNode | null;
|
|
itemName: (item: any) => React.ReactNode;
|
|
path: (item: any, projectId: string | undefined) => string;
|
|
title: string;
|
|
};
|
|
};
|
|
|
|
export const commandGroups: TCommandGroups = {
|
|
cycle: {
|
|
icon: <ContrastIcon className="h-3 w-3" />,
|
|
itemName: (cycle: IWorkspaceDefaultSearchResult) => (
|
|
<h6>
|
|
<span className="text-xs text-custom-text-300">{cycle.project__identifier}</span> {cycle.name}
|
|
</h6>
|
|
),
|
|
path: (cycle: IWorkspaceDefaultSearchResult) =>
|
|
`/${cycle?.workspace__slug}/projects/${cycle?.project_id}/cycles/${cycle?.id}`,
|
|
title: "Cycles",
|
|
},
|
|
issue: {
|
|
icon: null,
|
|
itemName: (issue: IWorkspaceIssueSearchResult) => (
|
|
<div className="flex gap-2">
|
|
<IssueIdentifier
|
|
projectId={issue.project_id}
|
|
issueTypeId={issue.type_id}
|
|
projectIdentifier={issue.project__identifier}
|
|
issueSequenceId={issue.sequence_id}
|
|
textContainerClassName="text-xs"
|
|
/>{" "}
|
|
{issue.name}
|
|
</div>
|
|
),
|
|
path: (issue: IWorkspaceIssueSearchResult) =>
|
|
generateWorkItemLink({
|
|
workspaceSlug: issue?.workspace__slug,
|
|
projectId: issue?.project_id,
|
|
issueId: issue?.id,
|
|
projectIdentifier: issue.project__identifier,
|
|
sequenceId: issue?.sequence_id,
|
|
}),
|
|
title: "Work items",
|
|
},
|
|
issue_view: {
|
|
icon: <Layers className="h-3 w-3" />,
|
|
itemName: (view: IWorkspaceDefaultSearchResult) => (
|
|
<h6>
|
|
<span className="text-xs text-custom-text-300">{view.project__identifier}</span> {view.name}
|
|
</h6>
|
|
),
|
|
path: (view: IWorkspaceDefaultSearchResult) =>
|
|
`/${view?.workspace__slug}/projects/${view?.project_id}/views/${view?.id}`,
|
|
title: "Views",
|
|
},
|
|
module: {
|
|
icon: <DiceIcon className="h-3 w-3" />,
|
|
itemName: (module: IWorkspaceDefaultSearchResult) => (
|
|
<h6>
|
|
<span className="text-xs text-custom-text-300">{module.project__identifier}</span> {module.name}
|
|
</h6>
|
|
),
|
|
path: (module: IWorkspaceDefaultSearchResult) =>
|
|
`/${module?.workspace__slug}/projects/${module?.project_id}/modules/${module?.id}`,
|
|
title: "Modules",
|
|
},
|
|
page: {
|
|
icon: <FileText className="h-3 w-3" />,
|
|
itemName: (page: IWorkspacePageSearchResult) => (
|
|
<h6>
|
|
<span className="text-xs text-custom-text-300">{page.project__identifiers?.[0]}</span> {page.name}
|
|
</h6>
|
|
),
|
|
path: (page: IWorkspacePageSearchResult, projectId: string | undefined) => {
|
|
let redirectProjectId = page?.project_ids?.[0];
|
|
if (!!projectId && page?.project_ids?.includes(projectId)) redirectProjectId = projectId;
|
|
return redirectProjectId
|
|
? `/${page?.workspace__slug}/projects/${redirectProjectId}/pages/${page?.id}`
|
|
: `/${page?.workspace__slug}/pages/${page?.id}`;
|
|
},
|
|
title: "Pages",
|
|
},
|
|
project: {
|
|
icon: <Briefcase className="h-3 w-3" />,
|
|
itemName: (project: IWorkspaceProjectSearchResult) => project?.name,
|
|
path: (project: IWorkspaceProjectSearchResult) => `/${project?.workspace__slug}/projects/${project?.id}/issues/`,
|
|
title: "Projects",
|
|
},
|
|
workspace: {
|
|
icon: <LayoutGrid className="h-3 w-3" />,
|
|
itemName: (workspace: IWorkspaceSearchResult) => workspace?.name,
|
|
path: (workspace: IWorkspaceSearchResult) => `/${workspace?.slug}/`,
|
|
title: "Workspaces",
|
|
},
|
|
};
|