From bb00042bff0fc6ab00cf0a7e674d0cd90b4261fc Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal Date: Wed, 20 Nov 2024 13:03:27 +0530 Subject: [PATCH] chore: add customizable page actions --- .../ui/src/dropdowns/context-menu/item.tsx | 4 +- packages/ui/src/dropdowns/custom-menu.tsx | 4 +- .../[projectId]/pages/(list)/header.tsx | 15 +- web/ce/components/pages/index.ts | 1 + web/ce/components/pages/modals/index.ts | 1 + .../pages/modals/move-page-modal.tsx | 10 + web/ce/types/page.ts | 1 - .../components/pages/dropdowns/actions.tsx | 243 +++++++-------- .../pages/editor/header/options-dropdown.tsx | 277 ++++++++++++++---- .../pages/list/block-item-action.tsx | 194 +++++++++++- web/core/components/pages/list/block.tsx | 4 +- web/core/store/pages/page.ts | 15 + web/core/store/pages/project-page.store.ts | 37 ++- 13 files changed, 584 insertions(+), 222 deletions(-) create mode 100644 web/ce/components/pages/modals/index.ts create mode 100644 web/ce/components/pages/modals/move-page-modal.tsx delete mode 100644 web/ce/types/page.ts diff --git a/packages/ui/src/dropdowns/context-menu/item.tsx b/packages/ui/src/dropdowns/context-menu/item.tsx index 6f332d0569..8312439208 100644 --- a/packages/ui/src/dropdowns/context-menu/item.tsx +++ b/packages/ui/src/dropdowns/context-menu/item.tsx @@ -36,9 +36,7 @@ export const ContextMenuItem: React.FC = (props) => { onMouseEnter={handleActiveItem} disabled={item.disabled} > - {item.customContent ? ( - item.customContent - ) : ( + {item.customContent ?? ( <> {item.icon && }
diff --git a/packages/ui/src/dropdowns/custom-menu.tsx b/packages/ui/src/dropdowns/custom-menu.tsx index 274601822e..e75c43230c 100644 --- a/packages/ui/src/dropdowns/custom-menu.tsx +++ b/packages/ui/src/dropdowns/custom-menu.tsx @@ -54,7 +54,7 @@ const CustomMenu = (props: ICustomMenuDropdownProps) => { if (referenceElement) referenceElement.focus(); }; const closeDropdown = () => { - isOpen && onMenuClose && onMenuClose(); + if (isOpen) onMenuClose?.(); setIsOpen(false); }; @@ -209,7 +209,7 @@ const MenuItem: React.FC = (props) => { )} onClick={(e) => { close(); - onClick && onClick(e); + onClick?.(e); }} disabled={disabled} > 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 f98bd9db47..b5fc0f8caf 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 @@ -13,9 +13,7 @@ import { BreadcrumbLink, Logo } from "@/components/common"; // constants import { EPageAccess } from "@/constants/page"; // hooks -import { useEventTracker, useProject, useProjectPages, useUserPermissions } from "@/hooks/store"; -// plane web hooks -import { EUserPermissions, EUserPermissionsLevel } from "@/plane-web/constants/user-permissions"; +import { useEventTracker, useProject, useProjectPages } from "@/hooks/store"; export const PagesListHeader = observer(() => { // states @@ -25,17 +23,10 @@ export const PagesListHeader = observer(() => { const { workspaceSlug } = useParams(); const searchParams = useSearchParams(); const pageType = searchParams.get("type"); - // store hooks - const { allowPermissions } = useUserPermissions(); const { currentProjectDetails, loader } = useProject(); - const { createPage } = useProjectPages(); + const { canCurrentUserCreatePage, createPage } = useProjectPages(); const { setTrackElement } = useEventTracker(); - // auth - const canUserCreatePage = allowPermissions( - [EUserPermissions.ADMIN, EUserPermissions.MEMBER, EUserPermissions.GUEST], - EUserPermissionsLevel.PROJECT - ); // handle page create const handleCreatePage = async () => { setIsCreatingPage(true); @@ -88,7 +79,7 @@ export const PagesListHeader = observer(() => {
- {canUserCreatePage ? ( + {canCurrentUserCreatePage ? (