From 7111ff4da0e18427558157908eeb9df8525b83c5 Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal Date: Mon, 9 Sep 2024 18:36:31 +0530 Subject: [PATCH] chore: remove modal for creating a page --- .../[projectId]/pages/(list)/header.tsx | 57 ++++++++++++------- web/core/components/pages/editor/title.tsx | 1 + 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx index 57a85eb79d1..d42b87226f6 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx @@ -1,33 +1,62 @@ "use client"; +import { useState } from "react"; import { observer } from "mobx-react"; -import { useParams, useSearchParams } from "next/navigation"; +import { useParams, useRouter, useSearchParams } from "next/navigation"; import { FileText } from "lucide-react"; -// ui -import { Breadcrumbs, Button, Header } from "@plane/ui"; +// plane types +import { TPage } from "@plane/types"; +// plane ui +import { Breadcrumbs, Button, Header, setToast, TOAST_TYPE } from "@plane/ui"; // helpers import { BreadcrumbLink, Logo } from "@/components/common"; // constants import { EPageAccess } from "@/constants/page"; import { EUserProjectRoles } from "@/constants/project"; // hooks -import { useCommandPalette, useEventTracker, useProject, useUser } from "@/hooks/store"; +import { useEventTracker, useProject, useProjectPages, useUser } from "@/hooks/store"; export const PagesListHeader = observer(() => { + // states + const [isCreatingPage, setIsCreatingPage] = useState(false); // router + const router = useRouter(); const { workspaceSlug } = useParams(); const searchParams = useSearchParams(); const pageType = searchParams.get("type"); // store hooks - const { toggleCreatePageModal } = useCommandPalette(); const { membership: { currentProjectRole }, } = useUser(); const { currentProjectDetails, loader } = useProject(); + const { createPage } = useProjectPages(); const { setTrackElement } = useEventTracker(); - + // auth const canUserCreatePage = - currentProjectRole && [EUserProjectRoles.ADMIN, EUserProjectRoles.MEMBER].includes(currentProjectRole); + !!currentProjectRole && [EUserProjectRoles.ADMIN, EUserProjectRoles.MEMBER].includes(currentProjectRole); + // handle page create + const handleCreatePage = async () => { + setIsCreatingPage(true); + setTrackElement("Project pages page"); + + const payload: Partial = { + access: pageType === "private" ? EPageAccess.PRIVATE : EPageAccess.PUBLIC, + }; + + await createPage(payload) + .then((res) => { + const pageId = `/${workspaceSlug}/projects/${currentProjectDetails?.id}/pages/${res?.id}`; + router.push(pageId); + }) + .catch((err) => + setToast({ + type: TOAST_TYPE.ERROR, + title: "Error!", + message: err?.data?.error || "Page could not be created. Please try again.", + }) + ) + .finally(() => setIsCreatingPage(false)); + }; return (
@@ -59,18 +88,8 @@ export const PagesListHeader = observer(() => { {canUserCreatePage ? ( - ) : ( diff --git a/web/core/components/pages/editor/title.tsx b/web/core/components/pages/editor/title.tsx index 56d2f18f5ef..6792ebf0ac7 100644 --- a/web/core/components/pages/editor/title.tsx +++ b/web/core/components/pages/editor/title.tsx @@ -56,6 +56,7 @@ export const PageEditorTitle: React.FC = observer((props) => { maxLength={255} onFocus={() => setIsLengthVisible(true)} onBlur={() => setIsLengthVisible(false)} + autoFocus />