diff --git a/web/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx b/web/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx index affbab2d8..c1466140f 100644 --- a/web/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx +++ b/web/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx @@ -10,6 +10,7 @@ import { IIssue } from "types"; import { EIssueActions } from "../../types"; import { BaseKanBanRoot } from "../base-kanban-root"; import { EProjectStore } from "store/command-palette.store"; +import { EUserWorkspaceRoles } from "constants/workspace"; export const ProfileIssuesKanBanLayout: React.FC = observer(() => { const router = useRouter(); @@ -18,6 +19,7 @@ export const ProfileIssuesKanBanLayout: React.FC = observer(() => { const { workspaceProfileIssues: profileIssuesStore, workspaceProfileIssuesFilter: profileIssueFiltersStore, + workspaceMember: { currentWorkspaceUserProjectsRole }, issueKanBanView: issueKanBanViewStore, } = useMobxStore(); @@ -34,6 +36,12 @@ export const ProfileIssuesKanBanLayout: React.FC = observer(() => { }, }; + const canEditPropertiesBasedOnProject = (projectId: string) => { + const currentProjectRole = currentWorkspaceUserProjectsRole && currentWorkspaceUserProjectsRole[projectId]; + + return !!currentProjectRole && currentProjectRole >= EUserWorkspaceRoles.MEMBER; + }; + return ( { showLoader={true} QuickActions={ProjectIssueQuickActions} currentStore={EProjectStore.PROFILE} + canEditPropertiesBasedOnProject={canEditPropertiesBasedOnProject} /> ); }); diff --git a/web/components/issues/issue-layouts/list/roots/profile-issues-root.tsx b/web/components/issues/issue-layouts/list/roots/profile-issues-root.tsx index 933fef331..eedf7ae81 100644 --- a/web/components/issues/issue-layouts/list/roots/profile-issues-root.tsx +++ b/web/components/issues/issue-layouts/list/roots/profile-issues-root.tsx @@ -12,14 +12,18 @@ import { EIssueActions } from "../../types"; import { BaseListRoot } from "../base-list-root"; import { IProjectStore } from "store/project"; import { EProjectStore } from "store/command-palette.store"; +import { EUserWorkspaceRoles } from "constants/workspace"; export const ProfileIssuesListLayout: FC = observer(() => { const router = useRouter(); const { workspaceSlug, userId } = router.query as { workspaceSlug: string; userId: string }; // store - const { workspaceProfileIssuesFilter: profileIssueFiltersStore, workspaceProfileIssues: profileIssuesStore } = - useMobxStore(); + const { + workspaceProfileIssuesFilter: profileIssueFiltersStore, + workspaceProfileIssues: profileIssuesStore, + workspaceMember: { currentWorkspaceUserProjectsRole }, + } = useMobxStore(); const issueActions = { [EIssueActions.UPDATE]: async (group_by: string | null, issue: IIssue) => { @@ -36,6 +40,17 @@ export const ProfileIssuesListLayout: FC = observer(() => { const getProjects = (projectStore: IProjectStore) => projectStore.workspaceProjects; + const canEditPropertiesBasedOnProject = (projectId: string) => { + const currentProjectRole = currentWorkspaceUserProjectsRole && currentWorkspaceUserProjectsRole[projectId]; + + console.log( + projectId, + currentWorkspaceUserProjectsRole, + !!currentProjectRole && currentProjectRole >= EUserWorkspaceRoles.MEMBER + ); + return !!currentProjectRole && currentProjectRole >= EUserWorkspaceRoles.MEMBER; + }; + return ( { issueActions={issueActions} getProjects={getProjects} currentStore={EProjectStore.PROFILE} + canEditPropertiesBasedOnProject={canEditPropertiesBasedOnProject} /> ); }); diff --git a/web/components/issues/issue-layouts/roots/all-issue-layout-root.tsx b/web/components/issues/issue-layouts/roots/all-issue-layout-root.tsx index 940f0f707..84a8402d6 100644 --- a/web/components/issues/issue-layouts/roots/all-issue-layout-root.tsx +++ b/web/components/issues/issue-layouts/roots/all-issue-layout-root.tsx @@ -16,6 +16,7 @@ import { IIssueUnGroupedStructure } from "store/issue"; import { EIssueActions } from "../types"; import { EFilterType, TUnGroupedIssues } from "store/issues/types"; +import { EUserWorkspaceRoles } from "constants/workspace"; type Props = { type?: TStaticViewTypes | null; @@ -35,6 +36,7 @@ export const AllIssueLayoutRoot: React.FC = observer((props) => { globalViews: { fetchAllGlobalViews }, workspaceGlobalIssues: { loader, getIssues, getIssuesIds, fetchIssues, updateIssue, removeIssue }, workspaceGlobalIssuesFilter: { currentView, issueFilters, fetchFilters, updateFilters, setCurrentView }, + workspaceMember: { currentWorkspaceUserProjectsRole }, } = useMobxStore(); useSWR(workspaceSlug ? `WORKSPACE_GLOBAL_VIEWS${workspaceSlug}` : null, async () => { @@ -56,9 +58,11 @@ export const AllIssueLayoutRoot: React.FC = observer((props) => { ); const canEditProperties = (projectId: string | undefined) => { - const isEditingAllowedBasedOnProject = false; + if (!projectId) return false; - return isEditingAllowedBasedOnProject; + const currentProjectRole = currentWorkspaceUserProjectsRole && currentWorkspaceUserProjectsRole[projectId]; + + return !!currentProjectRole && currentProjectRole >= EUserWorkspaceRoles.MEMBER; }; const issuesResponse = getIssues; diff --git a/web/components/profile/profile-issues.tsx b/web/components/profile/profile-issues.tsx index 0b4af3da5..35d9cf7b3 100644 --- a/web/components/profile/profile-issues.tsx +++ b/web/components/profile/profile-issues.tsx @@ -27,11 +27,8 @@ export const ProfileIssuesPage = observer((props: IProfileIssuesPage) => { const { workspaceProfileIssues: { loader, getIssues, fetchIssues }, workspaceProfileIssuesFilter: { issueFilters, fetchFilters }, - workspaceMember: { currentWorkspaceUserProjectsRole }, }: RootStore = useMobxStore(); - console.log("currentWorkspaceUserProjectsRole", currentWorkspaceUserProjectsRole); - useSWR( workspaceSlug && userId ? `CURRENT_WORKSPACE_PROFILE_ISSUES_${workspaceSlug}_${userId}_${type}` : null, async () => { diff --git a/web/store/issues/profile/issue.store.ts b/web/store/issues/profile/issue.store.ts index 9283357b6..15d95c843 100644 --- a/web/store/issues/profile/issue.store.ts +++ b/web/store/issues/profile/issue.store.ts @@ -233,8 +233,8 @@ export class ProfileIssuesStore extends IssueBaseStore implements IProfileIssues let _issues = { ...this.issues }; if (!_issues) _issues = {}; if (!_issues[userId]) _issues[userId] = { assigned: {}, created: {}, subscribed: {} }; - _issues[userId][this.currentUserIssueTab][userId] = { - ..._issues[userId][this.currentUserIssueTab][userId], + _issues[userId][this.currentUserIssueTab][issueId] = { + ..._issues[userId][this.currentUserIssueTab][issueId], ...data, }; diff --git a/web/store/workspace/workspace-member.store.ts b/web/store/workspace/workspace-member.store.ts index 7a97c059b..e699cb467 100644 --- a/web/store/workspace/workspace-member.store.ts +++ b/web/store/workspace/workspace-member.store.ts @@ -56,6 +56,7 @@ export class WorkspaceMemberStore implements IWorkspaceMemberStore { // observables members: observable.ref, memberInvitations: observable.ref, + workspaceUserProjectsRole: observable.ref, // actions fetchWorkspaceUserProjectsRole: action, fetchWorkspaceMembers: action, diff --git a/web/types/users.d.ts b/web/types/users.d.ts index 7f1d452f7..301c1d7c0 100644 --- a/web/types/users.d.ts +++ b/web/types/users.d.ts @@ -163,7 +163,7 @@ export interface IUserProfileProjectSegregation { } export interface IUserProjectsRole { - [project_id: string]: boolean; + [project_id: string]: number; } // export interface ICurrentUser {