diff --git a/cypress/integration/init.spec.ts b/cypress/integration/init.spec.ts deleted file mode 100644 index bef7a6c..0000000 --- a/cypress/integration/init.spec.ts +++ /dev/null @@ -1,11 +0,0 @@ -describe('Cypress', () => { - it('is working', () => { - expect(true).to.equal(true); - }); - - it('visits the app', () => { - cy.visit('/'); - - cy.findByTestId('app-main-heading').should('be.visible'); - }); -}); diff --git a/src/adapters/authAdapter.ts b/src/adapters/authAdapter.ts index 9b646f7..c648015 100644 --- a/src/adapters/authAdapter.ts +++ b/src/adapters/authAdapter.ts @@ -35,6 +35,10 @@ class AuthAdapter extends BaseAdapter { return this.prototype.postRequest('oauth/token', { data: requestParams }); } + + static getUser() { + return this.prototype.getRequest('me', {}); + } } export default AuthAdapter; diff --git a/src/components/PrivateRoutes/index.tsx b/src/components/PrivateRoutes/index.tsx index 7d8bd64..6adbad1 100644 --- a/src/components/PrivateRoutes/index.tsx +++ b/src/components/PrivateRoutes/index.tsx @@ -1,11 +1,45 @@ -import { Navigate, Outlet } from 'react-router-dom'; +import { useState, useEffect } from 'react'; +import { Navigate, Outlet, useOutletContext } from 'react-router-dom'; -import useUser from 'hooks/useUser'; +import AuthAdapter from 'adapters/authAdapter'; +import { getToken } from 'helpers/userToken'; +import type { User } from 'types/User'; + +type ContextType = User; + +import { LOGIN_URL } from '../../constants'; function PrivateRoutes() { - const { currentUser } = useUser(); + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const fetchCurrentUser = async () => { + const token = getToken().access_token; + + if (!token) { + setLoading(false); + } else { + const response = await AuthAdapter.getUser(); + + const data = await response.data; - return currentUser ? : ; + setUser(data.attributes); + setLoading(false); + } + }; + fetchCurrentUser(); + }, []); + + if (loading) { + return null; + } + + return user ? : ; } export default PrivateRoutes; + +export function useUser() { + return useOutletContext(); +} diff --git a/src/hooks/useUser.ts b/src/hooks/useUser.ts deleted file mode 100644 index 55e5481..0000000 --- a/src/hooks/useUser.ts +++ /dev/null @@ -1,15 +0,0 @@ -export default useUser; - -import { useEffect, useState } from 'react'; -import { useLocation } from 'react-router-dom'; - -export const useUser = () => { - const location = useLocation(); - - const [currentUser, setCurrentUser] = useState(); - - useEffect(() => { - // functionality to call the API again and set toked and current user? - return; - }, [location); -}; diff --git a/src/screens/Home/index.tsx b/src/screens/Home/index.tsx index a1efcda..9dfc31d 100644 --- a/src/screens/Home/index.tsx +++ b/src/screens/Home/index.tsx @@ -1,7 +1,16 @@ -import React from 'react'; +import { useUser } from 'components/PrivateRoutes'; const HomeScreen = (): JSX.Element => { - return
Home Screen
; + const user = useUser(); + + return ( + <> +
+ Home Screen +
+
{user && user.email}
+ + ); }; export default HomeScreen; diff --git a/src/types/User.ts b/src/types/User.ts new file mode 100644 index 0000000..44f3208 --- /dev/null +++ b/src/types/User.ts @@ -0,0 +1,5 @@ +export type User = { + email: string; + name: string; + avatarUrl: string; +};