mirror of
https://github.com/makeplane/plane.git
synced 2025-12-23 15:19:37 +01:00
* feat: add project shortcut in command palette * feat: global project switcher shortcut * refactor: generalize command palette entity handling * feat: extend command palette navigation * feat: add issue shortcut to command palette * feat: add modular project selection for cycle navigation * chore: add reusable command palette utilities * fix: update key sequence handling to use window methods for timeout management * fix: build errors * chore: minor ux copy improvements * feat: implement a new command registry and renderer for enhanced command palette functionality * feat: introduce new command palette components and enhance search functionality * feat: enhance command palette components with improved initialization and loading indicators * feat: Implement new command palette architecture with multi-step commands, context-aware filtering, and reusable components. Add comprehensive documentation and integration guides. Enhance command execution with a dedicated executor and context provider. Introduce new command types and improve existing command definitions for better usability and maintainability. * refactor: hook arguments * refactor: folder structure * refactor: update import paths * fix: context prop drilling * refactor: update search components * refactor: create actions * chore: add type to pages * chore: init contextual actions * refactor: context based actions code split * chore: module context-based actions * refactor: streamline command execution flow and enhance multi-step handling in command palette * refactor: remove placeholder management from command execution and implement centralized placeholder mapping * chore: cycle context based actions * refactor: simplify command execution by consolidating selection steps and adding page change handling * chore: added more options to work item contextual actions * chore: page context actions * refactor: update step type definitions and enhance page mapping for command execution * feat: implement Command Palette V2 with global shortcuts and enhanced context handling * refactor: power k v2 * refactor: creation commands * feat: add navigation utility for Power K context handling * feat: implement comprehensive navigation commands for Power K * refactor: work item contextual actions * fix: build errors * refactor: remaining contextual actions * refactor: remove old code * chore: update placeholder * refactor: enhance command registry with observable properties and context-aware shortcut handling * refactor: improve command filtering logic in CommandPaletteModal * chore: context indicator * chore: misc actions * style: shortcut badge * feat: add open entity actions and enhance navigation commands for Power K * refactor: rename and reorganize Power K components for improved clarity and structure * refactor: update CommandPalette components and streamline global shortcuts handling * refactor: adjust debounce timing in CommandPaletteModal for improved responsiveness * feat: implement shortcuts modal and enhance command registry for better shortcut management * fix: search implemented * refactor: search results code split * refactor: search results code split * feat: introduce creation and navigation command modules for Power K, enhancing command organization and functionality * chore: update menu logos * refactor: remove unused PowerKOpenEntityActionsExtended component from command palette * refactor: search menu * fix: clear context on backspace and manual clear * refactor: rename creation command keys for consistency and clarity in Power K * chore: added intake in global search * chore: preferences menu * chore: removed the empty serach params * revert: command palette changes * cleanup * refactor: update command IDs to use underscores for consistency across Power K components * refactor: extended context based actions * chore: modal command item status props * refactor: replace CommandPalette with CommandPaletteProvider in settings and profile layouts * refactor: update settings menu to use translated labels instead of i18n labels * refactor: update command titles to use translation keys for creation actions * refactor: update navigation command titles to use translation keys for consistency * chore: minor cleanup * chore: misc commands added * chore: code split for no search results command * chore: state menu items for work item context based commands * chore: add more props to no search results command * chore: add more props to no search results command * refactor: remove shortcut key for create workspace command * Refactor command palette to use PowerK store - Replaced instances of `useCommandPalette` with `usePowerK` across various components, including `AppSearch`, `CommandModal`, and `CommandPalette`. - Introduced `PowerKStore` to manage modal states and commands, enhancing the command palette functionality. - Updated modal handling to toggle `PowerKModal` and `ShortcutsListModal` instead of the previous command palette modals. - Refactored related components to ensure compatibility with the new store structure and maintain functionality. * Refactor PowerK command handling to remove context dependency - Updated `usePowerKCommands` and `usePowerKCreationCommands` to eliminate the need for a context parameter, simplifying their usage. - Adjusted related command records to utilize the new structure, ensuring consistent access to command configurations. - Enhanced permission checks in creation commands to utilize user project roles for better access control. * chore: add context indicator * chore: update type import * chore: migrate toast implementation from @plane/ui to @plane/propel/toast across multiple command files * refactor: power k modal wrapper and provider * fix: type imports * chore: update creation command shortcuts * fix: page context commands * chore: update navigation and open command shortcuts * fix: work item standalone page modals * fix: context indicator visibility * fix: potential error points * fix: build errors * fix: lint errors * fix: import order --------- Co-authored-by: Vihar Kurama <vihar.kurama@gmail.com> Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com> Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
113 lines
3.9 KiB
TypeScript
113 lines
3.9 KiB
TypeScript
"use client";
|
|
|
|
import { LayoutGrid } from "lucide-react";
|
|
// plane imports
|
|
import { CycleIcon, ModuleIcon, PageIcon, ProjectIcon, ViewsIcon } from "@plane/propel/icons";
|
|
import type {
|
|
IWorkspaceDefaultSearchResult,
|
|
IWorkspaceIssueSearchResult,
|
|
IWorkspacePageSearchResult,
|
|
IWorkspaceProjectSearchResult,
|
|
IWorkspaceSearchResult,
|
|
} from "@plane/types";
|
|
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: <CycleIcon 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: <ViewsIcon 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: <ModuleIcon 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: <PageIcon 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}/wiki/${page?.id}`;
|
|
},
|
|
title: "Pages",
|
|
},
|
|
project: {
|
|
icon: <ProjectIcon 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",
|
|
},
|
|
};
|