diff --git a/web/components/headers/cycle-issues.tsx b/web/components/headers/cycle-issues.tsx index 5ee80d68c2..9002313f0f 100644 --- a/web/components/headers/cycle-issues.tsx +++ b/web/components/headers/cycle-issues.tsx @@ -21,6 +21,7 @@ import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOption import { ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; import { EFilterType } from "store/issues/types"; import { EProjectStore } from "store/command-palette.store"; +import { EUserWorkspaceRoles } from "constants/workspace"; export const CycleIssuesHeader: React.FC = observer(() => { const [analyticsModal, setAnalyticsModal] = useState(false); @@ -42,6 +43,7 @@ export const CycleIssuesHeader: React.FC = observer(() => { commandPalette: commandPaletteStore, trackEvent: { setTrackElement }, cycleIssuesFilter: { issueFilters, updateFilters }, + user: { currentProjectRole }, } = useMobxStore(); const activeLayout = projectIssueFiltersStore.issueFilters?.displayFilters?.layout; @@ -99,6 +101,9 @@ export const CycleIssuesHeader: React.FC = observer(() => { const cyclesList = cycleStore.projectCycles; const cycleDetails = cycleId ? cycleStore.getCycleById(cycleId.toString()) : undefined; + const canUserCreateIssue = + currentProjectRole && [EUserWorkspaceRoles.ADMIN, EUserWorkspaceRoles.MEMBER].includes(currentProjectRole); + return ( <> { - + {canUserCreateIssue && ( + + )} - + {canUserCreateCycle && ( +
+ +
+ )} ); }); diff --git a/web/components/headers/module-issues.tsx b/web/components/headers/module-issues.tsx index e1f0e11844..b3ec8cd595 100644 --- a/web/components/headers/module-issues.tsx +++ b/web/components/headers/module-issues.tsx @@ -21,6 +21,7 @@ import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOption import { ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; import { EFilterType } from "store/issues/types"; import { EProjectStore } from "store/command-palette.store"; +import { EUserWorkspaceRoles } from "constants/workspace"; export const ModuleIssuesHeader: React.FC = observer(() => { const [analyticsModal, setAnalyticsModal] = useState(false); @@ -41,6 +42,7 @@ export const ModuleIssuesHeader: React.FC = observer(() => { trackEvent: { setTrackElement }, projectLabel: { projectLabels }, moduleIssuesFilter: { issueFilters, updateFilters }, + user: { currentProjectRole }, } = useMobxStore(); const { currentProjectDetails } = projectStore; @@ -100,6 +102,9 @@ export const ModuleIssuesHeader: React.FC = observer(() => { const modulesList = projectId ? moduleStore.modules[projectId.toString()] : undefined; const moduleDetails = moduleId ? moduleStore.getModuleById(moduleId.toString()) : undefined; + const canUserCreateIssue = + currentProjectRole && [EUserWorkspaceRoles.ADMIN, EUserWorkspaceRoles.MEMBER].includes(currentProjectRole); + return ( <> { - + {canUserCreateIssue && ( + + )} + {canUserCreateModule && ( + + )} ); diff --git a/web/components/headers/project-issues.tsx b/web/components/headers/project-issues.tsx index 4f64dbb082..5b3fe0ef80 100644 --- a/web/components/headers/project-issues.tsx +++ b/web/components/headers/project-issues.tsx @@ -18,6 +18,7 @@ import { ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; import { renderEmoji } from "helpers/emoji.helper"; import { EFilterType } from "store/issues/types"; import { EProjectStore } from "store/command-palette.store"; +import { EUserWorkspaceRoles } from "constants/workspace"; export const ProjectIssuesHeader: React.FC = observer(() => { const [analyticsModal, setAnalyticsModal] = useState(false); @@ -36,6 +37,7 @@ export const ProjectIssuesHeader: React.FC = observer(() => { // issue filters projectIssuesFilter: { issueFilters, updateFilters }, projectIssues: {}, + user: { currentProjectRole }, } = useMobxStore(); const activeLayout = issueFilters?.displayFilters?.layout; @@ -87,6 +89,9 @@ export const ProjectIssuesHeader: React.FC = observer(() => { const deployUrl = process.env.NEXT_PUBLIC_DEPLOY_URL; + const canUserCreateIssue = + currentProjectRole && [EUserWorkspaceRoles.ADMIN, EUserWorkspaceRoles.MEMBER].includes(currentProjectRole); + return ( <> { - + {canUserCreateIssue && ( + + )} diff --git a/web/components/headers/project-view-issues.tsx b/web/components/headers/project-view-issues.tsx index 2ba54ad34c..57b9444366 100644 --- a/web/components/headers/project-view-issues.tsx +++ b/web/components/headers/project-view-issues.tsx @@ -1,6 +1,7 @@ import { useCallback } from "react"; import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { Plus } from "lucide-react"; // mobx store import { useMobxStore } from "lib/mobx/store-provider"; // components @@ -16,7 +17,7 @@ import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOption import { ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; import { EFilterType } from "store/issues/types"; import { EProjectStore } from "store/command-palette.store"; -import { Plus } from "lucide-react"; +import { EUserWorkspaceRoles } from "constants/workspace"; export const ProjectViewIssuesHeader: React.FC = observer(() => { const router = useRouter(); @@ -35,6 +36,7 @@ export const ProjectViewIssuesHeader: React.FC = observer(() => { viewIssuesFilter: { issueFilters, updateFilters }, commandPalette: commandPaletteStore, trackEvent: { setTrackElement }, + user: { currentProjectRole }, } = useMobxStore(); const activeLayout = issueFilters?.displayFilters?.layout; @@ -85,6 +87,9 @@ export const ProjectViewIssuesHeader: React.FC = observer(() => { const viewsList = projectId ? projectViewsStore.viewsList[projectId.toString()] : undefined; const viewDetails = viewId ? projectViewsStore.viewDetails[viewId.toString()] : undefined; + const canUserCreateIssue = + currentProjectRole && [EUserWorkspaceRoles.ADMIN, EUserWorkspaceRoles.MEMBER].includes(currentProjectRole); + return (
@@ -170,16 +175,18 @@ export const ProjectViewIssuesHeader: React.FC = observer(() => { handleDisplayPropertiesUpdate={handleDisplayProperties} /> - + { + + }
);