Skip to content

Commit 479ea50

Browse files
authored
Merge pull request #20 from mikelpmc/feature/extract-retrieve-user-to-query
feat: add useRetrieveUserQuery hook
2 parents bb3076f + 90f7595 commit 479ea50

File tree

3 files changed

+43
-41
lines changed

3 files changed

+43
-41
lines changed

client/src/pages/Dashboard/dashboard.js

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,22 @@
1-
import React, { useEffect } from 'react';
1+
import React from 'react';
2+
import useRetrieveUserQuery from './services/useRetrieveUserQuery';
23
import './index.css';
3-
import { useAuthDispatch, useAuthState } from '../../providers/authProvider';
44

55
const Dashboard = () => {
6-
const { onRetrieveUser } = useAuthDispatch();
7-
const { user } = useAuthState();
6+
const { loading, error, data } = useRetrieveUserQuery();
87

9-
useEffect(() => {
10-
onRetrieveUser();
11-
}, []);
8+
if (loading) return <p>Loading user info...</p>;
9+
if (error) return <p>Oops! something went wrong</p>;
10+
11+
const { name, email } = data;
1212

1313
return (
1414
<section className="dashboard">
1515
<h1 className="dashboard__title">Dashboard</h1>
16-
{user ? (
17-
<div className="dashboard__info">
18-
<p>Name: {user.name}</p>
19-
<p>Email: {user.email}</p>
20-
</div>
21-
) : (
22-
'Loading user info...'
23-
)}
16+
<div className="dashboard__info">
17+
<p>Name: {name}</p>
18+
<p>Email: {email}</p>
19+
</div>
2420
</section>
2521
);
2622
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { useEffect, useState } from 'react';
2+
import { AuthService } from '../../../services';
3+
4+
const STATUS = {
5+
LOADING: 'loading',
6+
SUCCESS: 'success',
7+
ERROR: 'error'
8+
};
9+
10+
const useRetrieveUserQuery = () => {
11+
const [user, setUser] = useState();
12+
const [status, setStatus] = useState(STATUS.LOADING);
13+
14+
useEffect(() => {
15+
setStatus(STATUS.LOADING);
16+
17+
AuthService.retrieveUser()
18+
.then(user => {
19+
setUser(user);
20+
setStatus(STATUS.SUCCESS);
21+
})
22+
.catch(() => setStatus(STATUS.ERROR));
23+
}, []);
24+
25+
return {
26+
loading: status === STATUS.LOADING,
27+
error: status === STATUS.ERROR ? status : '',
28+
data: user
29+
};
30+
};
31+
32+
export default useRetrieveUserQuery;

client/src/providers/authProvider.js

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ const EVENT_TYPES = {
99
LOGIN_SUCCESS: 'login_success',
1010
LOGIN_ERROR: 'login_error',
1111
LOGOUT: 'logout',
12-
RETRIEVE_USER: 'retrieve_user',
1312
CLEAR_ERRORS: 'clear_errors',
1413
ERROR: 'error'
1514
};
@@ -23,13 +22,6 @@ const EVENTS = {
2322
[name]: value
2423
};
2524
},
26-
[EVENT_TYPES.RETRIEVE_USER]: (state, event) => {
27-
const { user } = event.payload;
28-
return {
29-
...state,
30-
user
31-
};
32-
},
3325
[EVENT_TYPES.LOGIN_SUCCESS]: state => {
3426
return {
3527
...state,
@@ -67,7 +59,6 @@ const EVENTS = {
6759

6860
const INITIAL_STATE = {
6961
isLoggedIn: AuthService.isLoggedIn(),
70-
user: {},
7162
name: '',
7263
email: '',
7364
password: '',
@@ -121,29 +112,12 @@ const AuthProvider = ({ children }) => {
121112
});
122113
};
123114

124-
const handleRetrieveUser = () => {
125-
AuthService.retrieveUser()
126-
.then(user => {
127-
dispatch({
128-
type: EVENT_TYPES.RETRIEVE_USER,
129-
payload: { user }
130-
});
131-
})
132-
.catch(() => {
133-
dispatch({
134-
type: EVENT_TYPES.ERROR,
135-
payload: { error: 'retrieve_user_error' }
136-
});
137-
});
138-
};
139-
140115
const handleClearErrors = () => {
141116
dispatch({ type: EVENT_TYPES.CLEAR_ERRORS });
142117
};
143118

144119
const events = {
145120
onUpdate: handleUpdate,
146-
onRetrieveUser: handleRetrieveUser,
147121
onRegister: handleRegister,
148122
onLogin: handleLogin,
149123
onLogout: handleLogout,

0 commit comments

Comments
 (0)