feat: view customize on member's role

This commit is contained in:
Takeshi Kimata
2024-06-02 19:57:46 +09:00
parent d7b870ae0d
commit 016a8d07c5
10 changed files with 113 additions and 31 deletions

View File

@@ -6,7 +6,8 @@ import { useRouter, usePathname } from '@/src/navigation';
import {
isSignedIn as tokenIsSinedIn,
isAdmin as tokenIsAdmin,
isProjectEditable as tokenIsProjectEditable,
isProjectManager as tokenIsProjectManager,
isProjectDeveloper as tokenIsProjectDeveloper,
checkSignInPage as tokenCheckSignInPage,
fetchMyRoles,
} from './token';
@@ -28,6 +29,12 @@ const defaultContext = {
},
isSignedIn: () => false,
isAdmin: () => false,
isProjectManager: (projectId: number) => {
return false;
},
isProjectDeveloper: (projectId: number) => {
return false;
},
setToken: (token: TokenType) => {},
storeTokenToLocalStorage,
removeTokenFromLocalStorage,
@@ -55,8 +62,12 @@ const TokenProvider = ({ toastMessages, locale, children }: TokenProps) => {
return tokenIsAdmin(token);
};
const isProjectEditable = (projectId: number) => {
return tokenIsProjectEditable(projectRoles, projectId);
const isProjectManager = (projectId: number) => {
return tokenIsProjectManager(projectRoles, projectId);
};
const isProjectDeveloper = (projectId: number) => {
return tokenIsProjectDeveloper(projectRoles, projectId);
};
const tokenContext = {
@@ -64,7 +75,8 @@ const TokenProvider = ({ toastMessages, locale, children }: TokenProps) => {
projectRoles,
isSignedIn,
isAdmin,
isProjectEditable,
isProjectManager,
isProjectDeveloper,
setToken,
storeTokenToLocalStorage,
removeTokenFromLocalStorage,

View File

@@ -61,7 +61,28 @@ async function fetchMyRoles(jwt: string) {
}
}
function isProjectEditable(projectRoles: ProjectRoleType[], projectId: number) {
function isProjectManager(projectRoles: ProjectRoleType[], projectId: number) {
const found = projectRoles.find((role) => {
return role.projectId === projectId;
});
if (!found) {
return false;
}
if (found.isOwner === true) {
return true;
}
const managerRoleIndex = memberRoles.findIndex((entry) => entry.uid === 'manager');
if (found.role === managerRoleIndex) {
return true;
}
return false;
}
function isProjectDeveloper(projectRoles: ProjectRoleType[], projectId: number) {
const found = projectRoles.find((role) => {
return role.projectId === projectId;
});
@@ -113,4 +134,4 @@ function checkSignInPage(token: TokenType, pathname: string) {
return ret;
}
export { isSignedIn, isAdmin, isProjectEditable, isPrivatePath, checkSignInPage, fetchMyRoles };
export { isSignedIn, isAdmin, isProjectManager, isProjectDeveloper, isPrivatePath, checkSignInPage, fetchMyRoles };