From bbb5ffd3a3fcff085327c6737f27fb9f136487ea Mon Sep 17 00:00:00 2001 From: gakshita Date: Mon, 22 Jul 2024 18:04:15 +0530 Subject: [PATCH 1/5] fix: export button handled based on role --- web/core/components/exporter/export-modal.tsx | 33 +++++++++++-------- web/core/components/exporter/guide.tsx | 15 +++++++-- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/web/core/components/exporter/export-modal.tsx b/web/core/components/exporter/export-modal.tsx index 5a437bb17ae..8e5259502e5 100644 --- a/web/core/components/exporter/export-modal.tsx +++ b/web/core/components/exporter/export-modal.tsx @@ -9,7 +9,7 @@ import { IUser, IImporterService } from "@plane/types"; // ui import { Button, CustomSearchSelect, TOAST_TYPE, setToast } from "@plane/ui"; // hooks -import { useProject } from "@/hooks/store"; +import { useProject, useUser } from "@/hooks/store"; import { useAppRouter } from "@/hooks/use-app-router"; // services import { ProjectExportService } from "@/services/project"; @@ -35,21 +35,26 @@ export const Exporter: React.FC = observer((props) => { const { workspaceSlug } = useParams(); // store hooks const { workspaceProjectIds, getProjectById } = useProject(); + const { projectsWithCreatePermissions } = useUser(); - const options = workspaceProjectIds?.map((projectId) => { - const projectDetails = getProjectById(projectId); + const options = projectsWithCreatePermissions + ? workspaceProjectIds + ?.filter((projectId) => projectId in projectsWithCreatePermissions) + ?.map((projectId) => { + const projectDetails = getProjectById(projectId); - return { - value: projectDetails?.id, - query: `${projectDetails?.name} ${projectDetails?.identifier}`, - content: ( -
- {projectDetails?.identifier} - {projectDetails?.name} -
- ), - }; - }); + return { + value: projectDetails?.id, + query: `${projectDetails?.name} ${projectDetails?.identifier}`, + content: ( +
+ {projectDetails?.identifier} + {projectDetails?.name} +
+ ), + }; + }) + : []; const [value, setValue] = React.useState([]); const [multiple, setMultiple] = React.useState(false); diff --git a/web/core/components/exporter/guide.tsx b/web/core/components/exporter/guide.tsx index 1a576bd1bf3..7096555ec13 100644 --- a/web/core/components/exporter/guide.tsx +++ b/web/core/components/exporter/guide.tsx @@ -17,7 +17,7 @@ import { ImportExportSettingsLoader } from "@/components/ui"; // constants import { EmptyStateType } from "@/constants/empty-state"; import { EXPORT_SERVICES_LIST } from "@/constants/fetch-keys"; -import { EXPORTERS_LIST } from "@/constants/workspace"; +import { EUserWorkspaceRoles, EXPORTERS_LIST } from "@/constants/workspace"; // hooks import { useProject, useUser } from "@/hooks/store"; import { useAppRouter } from "@/hooks/use-app-router"; @@ -37,7 +37,11 @@ const IntegrationGuide = observer(() => { const searchParams = useSearchParams(); const provider = searchParams.get("provider"); // store hooks - const { data: currentUser } = useUser(); + const { + data: currentUser, + canPerformAnyCreateAction, + membership: { currentWorkspaceRole }, + } = useUser(); const { workspaceProjectIds } = useProject(); const { data: exporterServices } = useSWR( @@ -52,6 +56,7 @@ const IntegrationGuide = observer(() => { }; const hasProjects = workspaceProjectIds && workspaceProjectIds.length > 0; + const isAdmin = currentWorkspaceRole === EUserWorkspaceRoles.ADMIN; return ( <> @@ -76,7 +81,11 @@ const IntegrationGuide = observer(() => {
- From 7f5be4daa0c68fffa2169ebbe652d95c287aaddf Mon Sep 17 00:00:00 2001 From: gakshita Date: Tue, 23 Jul 2024 15:39:32 +0530 Subject: [PATCH 2/5] fix: formatting --- web/core/components/exporter/export-modal.tsx | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/web/core/components/exporter/export-modal.tsx b/web/core/components/exporter/export-modal.tsx index 8e5259502e5..482be5df451 100644 --- a/web/core/components/exporter/export-modal.tsx +++ b/web/core/components/exporter/export-modal.tsx @@ -1,6 +1,7 @@ "use client"; import React, { useState } from "react"; +import _ from "lodash"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Dialog, Transition } from "@headlessui/react"; @@ -13,7 +14,6 @@ import { useProject, useUser } from "@/hooks/store"; import { useAppRouter } from "@/hooks/use-app-router"; // services import { ProjectExportService } from "@/services/project"; - type Props = { isOpen: boolean; handleClose: () => void; @@ -37,25 +37,25 @@ export const Exporter: React.FC = observer((props) => { const { workspaceProjectIds, getProjectById } = useProject(); const { projectsWithCreatePermissions } = useUser(); - const options = projectsWithCreatePermissions - ? workspaceProjectIds - ?.filter((projectId) => projectId in projectsWithCreatePermissions) - ?.map((projectId) => { - const projectDetails = getProjectById(projectId); - - return { - value: projectDetails?.id, - query: `${projectDetails?.name} ${projectDetails?.identifier}`, - content: ( -
- {projectDetails?.identifier} - {projectDetails?.name} -
- ), - }; - }) + const wsProjectIdsWithCreatePermisisons = projectsWithCreatePermissions + ? _.intersection(workspaceProjectIds, Object.keys(projectsWithCreatePermissions)) : []; + const options = wsProjectIdsWithCreatePermisisons?.map((projectId) => { + const projectDetails = getProjectById(projectId); + + return { + value: projectDetails?.id, + query: `${projectDetails?.name} ${projectDetails?.identifier}`, + content: ( +
+ {projectDetails?.identifier} + {projectDetails?.name} +
+ ), + }; + }); + const [value, setValue] = React.useState([]); const [multiple, setMultiple] = React.useState(false); const onChange = (val: any) => { From b91f2f6d0c0abd0ab3bc670df68287afa3b2594f Mon Sep 17 00:00:00 2001 From: gakshita Date: Tue, 23 Jul 2024 18:54:27 +0530 Subject: [PATCH 3/5] fix: import optimization --- web/core/components/exporter/export-modal.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/core/components/exporter/export-modal.tsx b/web/core/components/exporter/export-modal.tsx index 482be5df451..74eb51851c8 100644 --- a/web/core/components/exporter/export-modal.tsx +++ b/web/core/components/exporter/export-modal.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useState } from "react"; -import _ from "lodash"; +import { intersection } from "lodash"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Dialog, Transition } from "@headlessui/react"; @@ -38,7 +38,7 @@ export const Exporter: React.FC = observer((props) => { const { projectsWithCreatePermissions } = useUser(); const wsProjectIdsWithCreatePermisisons = projectsWithCreatePermissions - ? _.intersection(workspaceProjectIds, Object.keys(projectsWithCreatePermissions)) + ? intersection(workspaceProjectIds, Object.keys(projectsWithCreatePermissions)) : []; const options = wsProjectIdsWithCreatePermisisons?.map((projectId) => { From 7feb67b056ab756f16825605e82363d5ef9e9529 Mon Sep 17 00:00:00 2001 From: gakshita Date: Tue, 23 Jul 2024 19:05:16 +0530 Subject: [PATCH 4/5] fix: border fix for cycles page --- web/core/components/cycles/active-cycle/root.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/core/components/cycles/active-cycle/root.tsx b/web/core/components/cycles/active-cycle/root.tsx index 6294ae3cfac..4fe052b704f 100644 --- a/web/core/components/cycles/active-cycle/root.tsx +++ b/web/core/components/cycles/active-cycle/root.tsx @@ -57,7 +57,7 @@ export const ActiveCycleRoot: React.FC = observer((props) = {!activeCycle ? ( ) : ( -
+
{currentProjectActiveCycleId && ( Date: Tue, 23 Jul 2024 19:16:41 +0530 Subject: [PATCH 5/5] fix: import optimization --- web/core/components/exporter/export-modal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/core/components/exporter/export-modal.tsx b/web/core/components/exporter/export-modal.tsx index 74eb51851c8..0c3d6cf0ba5 100644 --- a/web/core/components/exporter/export-modal.tsx +++ b/web/core/components/exporter/export-modal.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useState } from "react"; -import { intersection } from "lodash"; +import intersection from "lodash/intersection"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Dialog, Transition } from "@headlessui/react";