diff --git a/web/ce/constants/index.ts b/web/ce/constants/index.ts index 123db122c..9817300c0 100644 --- a/web/ce/constants/index.ts +++ b/web/ce/constants/index.ts @@ -2,6 +2,7 @@ export * from "./ai"; export * from "./estimates"; export * from "./gantt-chart"; export * from "./issues"; +export * from "./page"; export * from "./project"; export * from "./user-permissions"; export * from "./workspace"; diff --git a/web/ce/constants/page.ts b/web/ce/constants/page.ts new file mode 100644 index 000000000..bd4312fb7 --- /dev/null +++ b/web/ce/constants/page.ts @@ -0,0 +1 @@ +export const ENABLE_MOVE_PAGE = false; diff --git a/web/core/components/pages/dropdowns/actions.tsx b/web/core/components/pages/dropdowns/actions.tsx index 496ee14c9..410dda68d 100644 --- a/web/core/components/pages/dropdowns/actions.tsx +++ b/web/core/components/pages/dropdowns/actions.tsx @@ -28,6 +28,8 @@ import { cn } from "@/helpers/common.helper"; import { usePageOperations } from "@/hooks/use-page-operations"; // plane web components import { MovePageModal } from "@/plane-web/components/pages"; +// plane web constants +import { ENABLE_MOVE_PAGE } from "@/plane-web/constants"; // store types import { TPageInstance } from "@/store/pages/base-page"; @@ -132,7 +134,7 @@ export const PageActions: React.FC = observer((props) => { action: () => setMovePageModal(true), title: "Move", icon: FileOutput, - shouldRender: canCurrentUserMovePage, + shouldRender: canCurrentUserMovePage && ENABLE_MOVE_PAGE, }, ]; if (extraOptions) { diff --git a/web/core/components/pages/editor/header/options-dropdown.tsx b/web/core/components/pages/editor/header/options-dropdown.tsx index b3430ff9a..fb096ed2c 100644 --- a/web/core/components/pages/editor/header/options-dropdown.tsx +++ b/web/core/components/pages/editor/header/options-dropdown.tsx @@ -104,6 +104,7 @@ export const PageOptionsDropdown: React.FC = observer((props) => { "full-screen", "copy-link", "make-a-copy", + "move", "toggle-lock", "toggle-access", "archive-restore", diff --git a/web/core/services/page/project-page.service.ts b/web/core/services/page/project-page.service.ts index 748c1345d..cafee7621 100644 --- a/web/core/services/page/project-page.service.ts +++ b/web/core/services/page/project-page.service.ts @@ -171,4 +171,14 @@ export class ProjectPageService extends APIService { throw error?.response?.data; }); } + + async move(workspaceSlug: string, projectId: string, pageId: string, newProjectId: string): Promise { + return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/move/`, { + new_project_id: newProjectId, + }) + .then((response) => response?.data) + .catch((error) => { + throw error?.response?.data; + }); + } } diff --git a/web/core/store/pages/project-page.store.ts b/web/core/store/pages/project-page.store.ts index b5199249c..e962c0e8f 100644 --- a/web/core/store/pages/project-page.store.ts +++ b/web/core/store/pages/project-page.store.ts @@ -306,5 +306,15 @@ export class ProjectPageStore implements IProjectPageStore { * @param {string} pageId * @param {string} newProjectId */ - movePage = async (workspaceSlug: string, projectId: string, pageId: string, newProjectId: string) => {}; + movePage = async (workspaceSlug: string, projectId: string, pageId: string, newProjectId: string) => { + try { + await this.service.move(workspaceSlug, projectId, pageId, newProjectId); + runInAction(() => { + unset(this.data, [pageId]); + }); + } catch (error) { + console.error("Unable to move page", error); + throw error; + } + }; } diff --git a/web/ee/constants/page.ts b/web/ee/constants/page.ts new file mode 100644 index 000000000..12e6cb712 --- /dev/null +++ b/web/ee/constants/page.ts @@ -0,0 +1 @@ +export * from "ce/constants/page";