From 739094283955801e3c1f088f422b08a3c78b73ba Mon Sep 17 00:00:00 2001 From: Cletus Razakou Date: Wed, 30 Nov 2022 17:31:09 -0500 Subject: [PATCH 1/4] fix: display vasp name correctly --- .../src/components/Collaborators/index.tsx | 12 ++++-------- .../dashboard/organization/SwitchOrganization.tsx | 5 ++--- web/gds-user-ui/src/utils/auth0.helper.ts | 2 ++ web/gds-user-ui/src/utils/permission.ts | 5 +++++ 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/web/gds-user-ui/src/components/Collaborators/index.tsx b/web/gds-user-ui/src/components/Collaborators/index.tsx index 2214d0808..a4bacaa0a 100644 --- a/web/gds-user-ui/src/components/Collaborators/index.tsx +++ b/web/gds-user-ui/src/components/Collaborators/index.tsx @@ -29,8 +29,8 @@ import { formatIsoDate } from 'utils/formate-date'; import { sortCollaboratorsByRecentDate } from './lib'; import Loader from 'components/Loader'; import { useFetchUserRoles } from 'hooks/useFetchUserRoles'; -import { USER_PERMISSION, COLLABORATOR_STATUS } from 'types/enums'; -import { hasPermission } from 'utils/permission'; +import { COLLABORATOR_STATUS } from 'types/enums'; +import { canInviteCollaborator } from 'utils/permission'; import { isDate } from 'utils/date'; // const rows: any[] = [ // { @@ -81,10 +81,6 @@ const getStatusBgColor = (joinedAt: string) => { } }; -const isAuthorizedToInvite = () => { - return hasPermission(USER_PERMISSION.UPDATE_COLLABORATOR); -}; - const RowItem: React.FC<{ children: React.ReactNode }> = ({ children }) => { return {children}; }; @@ -176,8 +172,8 @@ const CollaboratorsSection: React.FC = () => { - diff --git a/web/gds-user-ui/src/modules/dashboard/organization/SwitchOrganization.tsx b/web/gds-user-ui/src/modules/dashboard/organization/SwitchOrganization.tsx index 73c88621c..d15e2cc5a 100644 --- a/web/gds-user-ui/src/modules/dashboard/organization/SwitchOrganization.tsx +++ b/web/gds-user-ui/src/modules/dashboard/organization/SwitchOrganization.tsx @@ -29,12 +29,11 @@ const SwitchOrganization: React.FC = () => { orgid: id }); if (logged.status === APP_STATUS_CODE.NO_CONTENT) { - const PromiseArray = [refreshNewToken(), getUserCurrentOrganizationService()]; - const [, user] = await Promise.all(PromiseArray); + const token = (await refreshNewToken()) as any; + const user = token && (await getUserCurrentOrganizationService()); if (user?.status === APP_STATUS_CODE.OK) { dispatch(setUserOrganization(user?.data)); setIsLoading(false); - console.log('[should be redirected to dashboard]', APP_PATH.DASHBOARD); navigate(APP_PATH.DASHBOARD); } } diff --git a/web/gds-user-ui/src/utils/auth0.helper.ts b/web/gds-user-ui/src/utils/auth0.helper.ts index f550af5cb..9118f9bc3 100644 --- a/web/gds-user-ui/src/utils/auth0.helper.ts +++ b/web/gds-user-ui/src/utils/auth0.helper.ts @@ -128,8 +128,10 @@ export const getRefreshToken = async (hasRefreshToken: boolean) => { export const refreshNewToken = async () => { const user = (await refreshAndFetchUser()) as any; + console.log('[user?.accessToken]', user?.accessToken); if (user) { setCookie('access_token', user?.accessToken); + return !!user?.accessToken; } }; diff --git a/web/gds-user-ui/src/utils/permission.ts b/web/gds-user-ui/src/utils/permission.ts index 81f543214..61928181f 100644 --- a/web/gds-user-ui/src/utils/permission.ts +++ b/web/gds-user-ui/src/utils/permission.ts @@ -40,3 +40,8 @@ export const hasRole = (role: TUserRole | TUserRole[]) => { return userRole?.includes(role); }; + + +export const canInviteCollaborator = () => { + return hasPermission(USER_PERMISSION.UPDATE_COLLABORATOR); +}; From 5e9131190113faf2dab443aa160c88b7d125d037 Mon Sep 17 00:00:00 2001 From: Cletus Razakou Date: Wed, 30 Nov 2022 18:37:33 -0500 Subject: [PATCH 2/4] refact: improve useQuery hooks to be more testable --- web/gds-user-ui/src/hooks/useQuery.ts | 14 +++++++++++--- web/gds-user-ui/src/modules/verify/index.tsx | 5 +---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/web/gds-user-ui/src/hooks/useQuery.ts b/web/gds-user-ui/src/hooks/useQuery.ts index 01fcb9a49..17a9a154b 100644 --- a/web/gds-user-ui/src/hooks/useQuery.ts +++ b/web/gds-user-ui/src/hooks/useQuery.ts @@ -1,9 +1,17 @@ +/* eslint-disable @typescript-eslint/no-shadow */ import React from 'react'; import { useLocation } from 'react-router-dom'; -function useQuery() { - const { search } = useLocation(); - return React.useMemo(() => new URLSearchParams(search), [search]); +function useQuery() { + const { search } = useLocation(); + return React.useMemo(() => { + const params = new URLSearchParams(search); + const result: any = {} as QueryParams; + params.forEach((value, key) => { + result[key] = value as unknown; + }); + return result; + }, [search]); } export default useQuery; diff --git a/web/gds-user-ui/src/modules/verify/index.tsx b/web/gds-user-ui/src/modules/verify/index.tsx index 8f51f9281..b41096e89 100644 --- a/web/gds-user-ui/src/modules/verify/index.tsx +++ b/web/gds-user-ui/src/modules/verify/index.tsx @@ -8,14 +8,11 @@ import useAuth from 'hooks/useAuth'; import { useNavigate } from 'react-router-dom'; import TransparentLoader from 'components/Loader/TransparentLoader'; const VerifyPage: React.FC = () => { - const query = useQuery(); + const { vaspID, token, registered_directory } = useQuery(); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(); const [result, setResult] = useState(null); const [isRedirected, setIsRedirected] = useState(false); - const vaspID = query.get('vaspID'); - const token = query.get('token'); - const registered_directory = query.get('registered_directory'); const { isLoggedIn } = useAuth(); const navigate = useNavigate(); From 31f5a00cf616c3deb916fd3a7a11547598467e37 Mon Sep 17 00:00:00 2001 From: Cletus Razakou Date: Wed, 30 Nov 2022 18:43:22 -0500 Subject: [PATCH 3/4] refact: clean up & remove console log --- .../components/AddNewVaspModal/AddNewVaspModal.tsx | 2 +- .../EditCollaborator/useUpdateCollaborator.ts | 3 +-- web/gds-user-ui/src/hooks/useAuth.ts | 2 +- .../src/modules/auth/login/user.slice.ts | 2 +- .../modules/dashboard/certificate/registration.tsx | 2 -- .../dashboard/collaborator/CollaboratorService.ts | 1 - .../dashboard/organization/SwitchOrganization.tsx | 14 +++++++------- web/gds-user-ui/src/utils/permission.ts | 10 ++++------ 8 files changed, 15 insertions(+), 21 deletions(-) diff --git a/web/gds-user-ui/src/components/AddNewVaspModal/AddNewVaspModal.tsx b/web/gds-user-ui/src/components/AddNewVaspModal/AddNewVaspModal.tsx index 5c8ee336c..fbb0c35f7 100644 --- a/web/gds-user-ui/src/components/AddNewVaspModal/AddNewVaspModal.tsx +++ b/web/gds-user-ui/src/components/AddNewVaspModal/AddNewVaspModal.tsx @@ -55,7 +55,7 @@ function AddNewVaspModal() { closeModal(); }, onError: (error) => { - console.log('[mutate] error', error.response?.data.error); + // console.log('[mutate] error', error.response?.data.error); toast({ title: error.response?.data?.error || error.message, status: 'error', diff --git a/web/gds-user-ui/src/components/Collaborators/EditCollaborator/useUpdateCollaborator.ts b/web/gds-user-ui/src/components/Collaborators/EditCollaborator/useUpdateCollaborator.ts index 0057ace54..66921adff 100644 --- a/web/gds-user-ui/src/components/Collaborators/EditCollaborator/useUpdateCollaborator.ts +++ b/web/gds-user-ui/src/components/Collaborators/EditCollaborator/useUpdateCollaborator.ts @@ -5,8 +5,7 @@ import type { UpdateCollaboratorMutation } from 'components/Collaborators/EditCo export function useUpdateCollaborator(): UpdateCollaboratorMutation { const mutation = useMutation(['update-Collaborator'], updateCollaboratorService, { onError: (error: any) => { - console.log('update-Collaborator-error', error); - console.log('update-Collaborator-error-response', error?.response.data?.error); + console.log(error); }, }); return { diff --git a/web/gds-user-ui/src/hooks/useAuth.ts b/web/gds-user-ui/src/hooks/useAuth.ts index df16e09ca..5561b2185 100644 --- a/web/gds-user-ui/src/hooks/useAuth.ts +++ b/web/gds-user-ui/src/hooks/useAuth.ts @@ -51,7 +51,7 @@ const useAuth = () => { const currentTime = new Date().getTime() / 1000; if (currentTime > +getExpiryTime) { - console.log('token expired'); + // console.log('token expired'); clearCookies(); logoutUser(); return false; diff --git a/web/gds-user-ui/src/modules/auth/login/user.slice.ts b/web/gds-user-ui/src/modules/auth/login/user.slice.ts index a25b29491..dcfb4d725 100644 --- a/web/gds-user-ui/src/modules/auth/login/user.slice.ts +++ b/web/gds-user-ui/src/modules/auth/login/user.slice.ts @@ -73,7 +73,7 @@ export const getAuth0User: any = createAsyncThunk( try { // then login with auth0 const getUserInfo: any = hasToken && (await auth0Hash()); - console.log('[getUserInfo]', getUserInfo); + // console.log('[getUserInfo]', getUserInfo); if (getUserInfo && getUserInfo?.idTokenPayload?.email_verified) { const getUser = await logUserInBff(); diff --git a/web/gds-user-ui/src/modules/dashboard/certificate/registration.tsx b/web/gds-user-ui/src/modules/dashboard/certificate/registration.tsx index c07eeeb2e..478d5e9ba 100644 --- a/web/gds-user-ui/src/modules/dashboard/certificate/registration.tsx +++ b/web/gds-user-ui/src/modules/dashboard/certificate/registration.tsx @@ -112,7 +112,6 @@ const Certificate: React.FC = () => { async function handleNextStepClick() { if (hasErroredField()) { - console.log('has errored field'); // i think we should not use alert here , but we need to find a way to display the error message // eslint-disable-next-line no-alert if (window.confirm('Some elements required for registration are missing; continue anyway?')) { @@ -148,7 +147,6 @@ const Certificate: React.FC = () => { values: methods.getValues() }); if (isDirty) { - console.log('[isDirty at previous action]', getCurrentFormValue()); await postRegistrationValue({ ...methods.getValues(), state: { diff --git a/web/gds-user-ui/src/modules/dashboard/collaborator/CollaboratorService.ts b/web/gds-user-ui/src/modules/dashboard/collaborator/CollaboratorService.ts index 443157921..278d96e51 100644 --- a/web/gds-user-ui/src/modules/dashboard/collaborator/CollaboratorService.ts +++ b/web/gds-user-ui/src/modules/dashboard/collaborator/CollaboratorService.ts @@ -14,7 +14,6 @@ export const createCollaborator = async (data: any): Promise => { const response: any = await axiosInstance.post(`/collaborators`, { ...data }); - console.log('response', response); return response; }; diff --git a/web/gds-user-ui/src/modules/dashboard/organization/SwitchOrganization.tsx b/web/gds-user-ui/src/modules/dashboard/organization/SwitchOrganization.tsx index d15e2cc5a..f0d020584 100644 --- a/web/gds-user-ui/src/modules/dashboard/organization/SwitchOrganization.tsx +++ b/web/gds-user-ui/src/modules/dashboard/organization/SwitchOrganization.tsx @@ -13,8 +13,7 @@ import { APP_PATH, APP_STATUS_CODE } from 'utils/constants'; const SwitchOrganization: React.FC = () => { const toast = useToast(); const { id } = useParams<{ id: string }>(); - const query = useQuery(); - const vaspName = query.get('vaspName'); + const { vaspName } = useQuery<{ vaspName: string }>(); const dispatch = useDispatch(); const navigate = useNavigate(); const isCalled = useRef(false); @@ -33,8 +32,11 @@ const SwitchOrganization: React.FC = () => { const user = token && (await getUserCurrentOrganizationService()); if (user?.status === APP_STATUS_CODE.OK) { dispatch(setUserOrganization(user?.data)); - setIsLoading(false); - navigate(APP_PATH.DASHBOARD); + + setTimeout(() => { + navigate(APP_PATH.DASHBOARD); + setIsLoading(false); + }, 1000); } } } catch (error) { @@ -46,8 +48,6 @@ const SwitchOrganization: React.FC = () => { duration: 9000, isClosable: true }); - } finally { - setIsLoading(false); } }; @@ -75,7 +75,7 @@ const SwitchOrganization: React.FC = () => { ); }; - return <>{isLoading && }; + return <>{isLoading && !isError && }; }; export default SwitchOrganization; diff --git a/web/gds-user-ui/src/utils/permission.ts b/web/gds-user-ui/src/utils/permission.ts index 61928181f..b23548311 100644 --- a/web/gds-user-ui/src/utils/permission.ts +++ b/web/gds-user-ui/src/utils/permission.ts @@ -13,18 +13,13 @@ export const getUserPermissionFromStore = () => { export const hasPermission = (permission: TUserPermission | TUserPermission[]) => { const userPermission = getUserPermissionFromStore(); - console.log('userPermission', userPermission); if (isArray(permission)) { - // all permission element should be in userPermission return permission.every((p) => userPermission.includes(p)); } return userPermission?.includes(permission); }; -export const canCreateOrganization = () => { - return hasPermission(USER_PERMISSION.CREATE_ORGANIZATIONS); -}; /** hasRole function * @params role: string | string[] @@ -34,7 +29,6 @@ export const canCreateOrganization = () => { export const hasRole = (role: TUserRole | TUserRole[]) => { const userRole = Store.getState()?.user?.user?.role; if (isArray(role)) { - // all role element should be in userRole return role.every((r) => userRole.includes(r)); } @@ -45,3 +39,7 @@ export const hasRole = (role: TUserRole | TUserRole[]) => { export const canInviteCollaborator = () => { return hasPermission(USER_PERMISSION.UPDATE_COLLABORATOR); }; + +export const canCreateOrganization = () => { + return hasPermission(USER_PERMISSION.CREATE_ORGANIZATIONS); +}; From 7b3b5854801dcd5d721806e5bc621ce52bc32bd2 Mon Sep 17 00:00:00 2001 From: Cletus Razakou Date: Wed, 30 Nov 2022 18:56:08 -0500 Subject: [PATCH 4/4] clean up --- .../modules/dashboard/organization/SwitchOrganization.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/web/gds-user-ui/src/modules/dashboard/organization/SwitchOrganization.tsx b/web/gds-user-ui/src/modules/dashboard/organization/SwitchOrganization.tsx index f0d020584..3d1eac7c3 100644 --- a/web/gds-user-ui/src/modules/dashboard/organization/SwitchOrganization.tsx +++ b/web/gds-user-ui/src/modules/dashboard/organization/SwitchOrganization.tsx @@ -32,11 +32,8 @@ const SwitchOrganization: React.FC = () => { const user = token && (await getUserCurrentOrganizationService()); if (user?.status === APP_STATUS_CODE.OK) { dispatch(setUserOrganization(user?.data)); - - setTimeout(() => { - navigate(APP_PATH.DASHBOARD); - setIsLoading(false); - }, 1000); + setIsLoading(false); + navigate(APP_PATH.DASHBOARD); } } } catch (error) {