diff --git a/web/components/headers/cycle-issues.tsx b/web/components/headers/cycle-issues.tsx index e5b1167b2..241259648 100644 --- a/web/components/headers/cycle-issues.tsx +++ b/web/components/headers/cycle-issues.tsx @@ -192,20 +192,23 @@ export const CycleIssuesHeader: React.FC = observer(() => { handleDisplayPropertiesUpdate={handleDisplayProperties} /> - setAnalyticsModal(true)} variant="neutral-primary" size="sm"> - Analytics - + {canUserCreateIssue && ( - { - setTrackElement("CYCLE_PAGE_HEADER"); - commandPaletteStore.toggleCreateIssueModal(true, EProjectStore.CYCLE); - }} - size="sm" - prependIcon={} - > - Add Issue - + <> + setAnalyticsModal(true)} variant="neutral-primary" size="sm"> + Analytics + + { + setTrackElement("CYCLE_PAGE_HEADER"); + commandPaletteStore.toggleCreateIssueModal(true, EProjectStore.CYCLE); + }} + size="sm" + prependIcon={} + > + Add Issue + + > )} { handleDisplayPropertiesUpdate={handleDisplayProperties} /> - setAnalyticsModal(true)} variant="neutral-primary" size="sm"> - Analytics - + {canUserCreateIssue && ( - { - setTrackElement("MODULE_PAGE_HEADER"); - commandPaletteStore.toggleCreateIssueModal(true, EProjectStore.MODULE); - }} - size="sm" - prependIcon={} - > - Add Issue - + <> + setAnalyticsModal(true)} variant="neutral-primary" size="sm"> + Analytics + + { + setTrackElement("MODULE_PAGE_HEADER"); + commandPaletteStore.toggleCreateIssueModal(true, EProjectStore.MODULE); + }} + size="sm" + prependIcon={} + > + Add Issue + + > )} { )} - setAnalyticsModal(true)} variant="neutral-primary" size="sm"> - Analytics - + {canUserCreateIssue && ( - { - setTrackElement("PROJECT_PAGE_HEADER"); - commandPaletteStore.toggleCreateIssueModal(true, EProjectStore.PROJECT); - }} - size="sm" - prependIcon={} - > - Add Issue - + <> + setAnalyticsModal(true)} variant="neutral-primary" size="sm"> + Analytics + + { + setTrackElement("PROJECT_PAGE_HEADER"); + commandPaletteStore.toggleCreateIssueModal(true, EProjectStore.PROJECT); + }} + size="sm" + prependIcon={} + > + Add Issue + + > )} diff --git a/web/components/workspace/sidebar-menu.tsx b/web/components/workspace/sidebar-menu.tsx index 792e7e6a0..573b10541 100644 --- a/web/components/workspace/sidebar-menu.tsx +++ b/web/components/workspace/sidebar-menu.tsx @@ -9,6 +9,8 @@ import { BarChart2, Briefcase, CheckCircle, LayoutGrid } from "lucide-react"; // mobx store import { useMobxStore } from "lib/mobx/store-provider"; import { observer } from "mobx-react-lite"; +// constants +import { EUserWorkspaceRoles } from "constants/workspace"; const workspaceLinks = (workspaceSlug: string) => [ { @@ -34,16 +36,21 @@ const workspaceLinks = (workspaceSlug: string) => [ ]; export const WorkspaceSidebarMenu = observer(() => { - const { theme: themeStore } = useMobxStore(); + const { + theme: themeStore, + user: { currentWorkspaceRole }, + } = useMobxStore(); // router const router = useRouter(); const { workspaceSlug } = router.query; + const isAuthorizedUser = !!currentWorkspaceRole && currentWorkspaceRole >= EUserWorkspaceRoles.MEMBER; + return ( {workspaceLinks(workspaceSlug as string).map((link, index) => { const isActive = link.name === "Settings" ? router.asPath.includes(link.href) : router.asPath === link.href; - + if (!isAuthorizedUser && link.name === "Analytics") return; return ( diff --git a/web/components/workspace/sidebar-quick-action.tsx b/web/components/workspace/sidebar-quick-action.tsx index 6427e4692..d2245090f 100644 --- a/web/components/workspace/sidebar-quick-action.tsx +++ b/web/components/workspace/sidebar-quick-action.tsx @@ -10,6 +10,8 @@ import { CreateUpdateDraftIssueModal } from "components/issues"; import { useMobxStore } from "lib/mobx/store-provider"; import { observer } from "mobx-react-lite"; import { EProjectStore } from "store/command-palette.store"; +// constants +import { EUserWorkspaceRoles } from "constants/workspace"; export const WorkspaceSidebarQuickAction = observer(() => { // states @@ -19,12 +21,15 @@ export const WorkspaceSidebarQuickAction = observer(() => { theme: themeStore, commandPalette: commandPaletteStore, trackEvent: { setTrackElement }, + user: { currentWorkspaceRole }, } = useMobxStore(); const { storedValue, clearValue } = useLocalStorage("draftedIssue", JSON.stringify({})); const isSidebarCollapsed = themeStore.sidebarCollapsed; + const isAuthorizedUser = !!currentWorkspaceRole && currentWorkspaceRole >= EUserWorkspaceRoles.MEMBER; + return ( <> { isSidebarCollapsed ? "flex-col gap-1" : "gap-2" }`} > - - { - setTrackElement("APP_SIDEBAR_QUICK_ACTIONS"); - commandPaletteStore.toggleCreateIssueModal(true, EProjectStore.PROJECT); - }} > - - {!isSidebarCollapsed && New Issue} - + { + setTrackElement("APP_SIDEBAR_QUICK_ACTIONS"); + commandPaletteStore.toggleCreateIssueModal(true, EProjectStore.PROJECT); + }} + > + + {!isSidebarCollapsed && New Issue} + - {storedValue && Object.keys(JSON.parse(storedValue)).length > 0 && ( - <> - + {storedValue && Object.keys(JSON.parse(storedValue)).length > 0 && ( + <> + - - - + + + - - - setIsDraftIssueModalOpen(true)} - className="flex w-full flex-shrink-0 items-center rounded border-[0.5px] border-custom-border-300 bg-custom-background-100 px-3 py-[10px] text-sm text-custom-text-300 shadow" - > - - Last Drafted Issue - + + + setIsDraftIssueModalOpen(true)} + className="flex w-full flex-shrink-0 items-center rounded border-[0.5px] border-custom-border-300 bg-custom-background-100 px-3 py-[10px] text-sm text-custom-text-300 shadow" + > + + Last Drafted Issue + + - - > - )} - + > + )} + + )} { onClick={() => commandPaletteStore.toggleCommandPaletteModal(true)} > + Open command menu >