From 996174f7a1531c5dfdc0ffd5aeed0be7b3e7dac6 Mon Sep 17 00:00:00 2001 From: Takeshi Kimata <117462761+kimatata@users.noreply.github.com> Date: Tue, 11 Jun 2024 21:43:25 +0900 Subject: [PATCH] Refresh project roles after create project --- .../app/[locale]/projects/ProjectsPage.tsx | 3 +++ frontend/types/user.ts | 1 + frontend/utils/TokenProvider.tsx | 27 ++++++++++--------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/frontend/src/app/[locale]/projects/ProjectsPage.tsx b/frontend/src/app/[locale]/projects/ProjectsPage.tsx index 637fe80..a05d986 100644 --- a/frontend/src/app/[locale]/projects/ProjectsPage.tsx +++ b/frontend/src/app/[locale]/projects/ProjectsPage.tsx @@ -63,6 +63,9 @@ export default function ProjectsPage({ messages, locale }: Props) { } else { const newProject = await createProject(context.token.access_token, name, detail, isPublic); setProjects([...projects, newProject]); + + // refresh project roles + context.refreshProjectRoles(); } closeDialog(); }; diff --git a/frontend/types/user.ts b/frontend/types/user.ts index 387cf1a..975c8a7 100644 --- a/frontend/types/user.ts +++ b/frontend/types/user.ts @@ -31,6 +31,7 @@ export type TokenContextType = { isProjectManager: (projectId: number) => boolean; isProjectDeveloper: (projectId: number) => boolean; isProjectReporter: (projectId: number) => boolean; + refreshProjectRoles: () => void; setToken: (token: TokenType) => void; storeTokenToLocalStorage: (token: TokenType) => void; removeTokenFromLocalStorage: () => void; diff --git a/frontend/utils/TokenProvider.tsx b/frontend/utils/TokenProvider.tsx index dd4e1be..27cdbcf 100644 --- a/frontend/utils/TokenProvider.tsx +++ b/frontend/utils/TokenProvider.tsx @@ -75,6 +75,19 @@ const TokenProvider = ({ toastMessages, locale, children }: TokenProps) => { return tokenIsProjectReporter(projectRoles, projectId); }; + async function refreshProjectRoles() { + if (!hasRestoreFinished || !token || !token.access_token) { + return; + } + + try { + const data = await fetchMyRoles(token.access_token); + setProjectRoles(data); + } catch (error: any) { + console.error('Error in effect:', error.message); + } + } + const tokenContext = { token, projectRoles, @@ -84,6 +97,7 @@ const TokenProvider = ({ toastMessages, locale, children }: TokenProps) => { isProjectDeveloper, isProjectReporter, setToken, + refreshProjectRoles, storeTokenToLocalStorage, removeTokenFromLocalStorage, }; @@ -119,19 +133,6 @@ const TokenProvider = ({ toastMessages, locale, children }: TokenProps) => { }, [pathname, hasRestoreFinished]); useEffect(() => { - async function refreshProjectRoles() { - if (!hasRestoreFinished || !token || !token.access_token) { - return; - } - - try { - const data = await fetchMyRoles(token.access_token); - setProjectRoles(data); - } catch (error: any) { - console.error('Error in effect:', error.message); - } - } - refreshProjectRoles(); }, [hasRestoreFinished, token]);