Skip to content

Commit 0df0e20

Browse files
author
Jovert Lota Palonpon
authored
Converted Class-based Components to Functional (#45)
* wip * wip * wip * wip * wip
1 parent 3e4dd64 commit 0df0e20

File tree

15 files changed

+1683
-1901
lines changed

15 files changed

+1683
-1901
lines changed

app/Http/Controllers/Api/V1/Auth/ResetPasswordController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function reset(Request $request, string $token) : JsonResponse
3636

3737
$user = User::where('email', $password_reset->email)->first();
3838

39-
if (! $password_reset) {
39+
if (! $user) {
4040
return response()->json('User does not exist!', 422);
4141
}
4242

resources/js/App.js

Lines changed: 101 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { Component } from 'react';
1+
import React, { useState, useEffect } from 'react';
22
import { HashRouter as Router } from 'react-router-dom';
33
import PropTypes from 'prop-types';
44

@@ -8,33 +8,29 @@ import { Navigator } from './core';
88
import { ROUTES } from './config';
99
import { Loading } from './views';
1010

11-
class App extends Component {
12-
state = {
13-
loading: true,
14-
authenticated: false,
15-
nightMode: false,
16-
token: {},
17-
user: {},
18-
username: '',
19-
20-
monitoringEnabled: false,
21-
responseInterceptor: null,
22-
};
11+
function App(props) {
12+
const [initialized, setInitialized] = useState(false);
13+
const [loading, setLoading] = useState(true);
14+
const [authenticated, setAuthenticated] = useState(false);
15+
const [nightMode, setNightMode] = useState(false);
16+
const [token, setToken] = useState({});
17+
const [user, setUser] = useState({});
18+
const [username, setUsername] = useState('');
19+
const [monitoringEnabled, setMonitoringEnabled] = useState(false);
20+
const [responseInterceptor, setResponseInterceptor] = useState(null);
2321

2422
/**
2523
* Determine if monitoring is enabled.
2624
*
2725
* @return {undefined}
2826
*/
29-
monitoringEnabled = () => {
27+
const monitor = () => {
3028
const configItem = document.querySelector(
3129
'meta[name=TELESCOPE_ENABLED]',
3230
);
3331

3432
if (configItem) {
35-
this.setState({
36-
monitoringEnabled: Boolean(configItem.content),
37-
});
33+
setMonitoringEnabled(Boolean(configItem.content));
3834
}
3935
};
4036

@@ -45,7 +41,7 @@ class App extends Component {
4541
*
4642
* @param {undefined}
4743
*/
48-
removeResponseInterceptor = interceptor => {
44+
const removeResponseInterceptor = interceptor => {
4945
axios.interceptors.response.eject(interceptor);
5046
};
5147

@@ -56,7 +52,7 @@ class App extends Component {
5652
*
5753
* @param {undefined}
5854
*/
59-
addResponseInterceptor = () => {
55+
const addResponseInterceptor = () => {
6056
const responseInterceptor = axios.interceptors.response.use(
6157
response => {
6258
return response;
@@ -66,16 +62,14 @@ class App extends Component {
6662
// In occasions of Unauthorized requests (401),
6763
// Remove the stored tokens.
6864
if (error.response.status === 401) {
69-
this.removeToken();
65+
removeToken();
7066
}
7167

7268
return Promise.reject(error);
7369
},
7470
);
7571

76-
this.setState({
77-
responseInterceptor,
78-
});
72+
setResponseInterceptor(responseInterceptor);
7973
};
8074

8175
/**
@@ -85,57 +79,49 @@ class App extends Component {
8579
*
8680
* @return {undefined}
8781
*/
88-
authenticate = async tokenString => {
82+
const authenticate = async tokenString => {
8983
const token = JSON.parse(tokenString);
9084

9185
if (token === {}) {
9286
return;
9387
}
9488

95-
this.setToken(token);
89+
storeToken(token);
9690

97-
await this.fetchUser();
91+
await fetchUser();
9892
};
9993

10094
/**
10195
* Sign out user.
10296
*
10397
* @return {undefined}
10498
*/
105-
signout = async () => {
106-
this.setState({ loading: true });
99+
const signOut = async () => {
100+
setLoading(true);
107101

108102
try {
109-
const response = await axios.post('/api/v1/auth/signout');
103+
await axios.post('/api/v1/auth/signout');
110104

111-
if (response.status === 200) {
112-
this.removeToken();
105+
removeToken();
113106

114-
this.setState({
115-
loading: false,
116-
authenticated: false,
117-
user: {},
118-
});
119-
}
107+
setLoading(false);
108+
setAuthenticated(false);
109+
setUser({});
120110
} catch (error) {
121111
//
122112
}
123113
};
124114

125115
/**
126-
* Handle nightmode toggle.
116+
* Handle nightMode toggle.
127117
* Store boolean value in persistent storage.
128118
*
129119
* @return {undefined}
130120
*/
131-
handleNightmodeToggled = () => {
132-
this.setState(prevState => {
133-
return {
134-
nightMode: !prevState.nightMode,
135-
};
136-
});
137-
138-
if (!this.state.nightMode) {
121+
const handleNightModeToggled = () => {
122+
setNightMode(!nightMode);
123+
124+
if (!nightMode) {
139125
window.localStorage.setItem('nightMode', true);
140126
} else {
141127
window.localStorage.removeItem('nightMode');
@@ -149,42 +135,38 @@ class App extends Component {
149135
*
150136
* @return {undefined}
151137
*/
152-
handleLock = async username => {
153-
await this.setState({
154-
username,
155-
});
138+
const handleLock = username => {
139+
setUsername(username);
156140

157-
await this.signout();
141+
signOut();
158142
};
159143

160144
/**
161145
* Sign out user completely.
162146
*
163147
* @return {undefined}
164148
*/
165-
handleSignout = async () => {
166-
await this.signout();
149+
const handleSignOut = () => {
150+
signOut();
167151
};
168152

169153
/**
170-
* Set nightmode based on stored value in persistent storage.
154+
* Set nightMode based on stored value in persistent storage.
171155
*
172156
* @return {undefined}
173157
*/
174-
setNightMode = () => {
158+
const night = () => {
175159
const nightMode = window.localStorage.getItem('nightMode');
176160

177-
this.setState({
178-
nightMode: nightMode ? true : false,
179-
});
161+
setNightMode(nightMode ? true : false);
180162
};
181163

182164
/**
183165
* Get the Authentication Data from the persistent storage.
184166
*
185167
* @return {object}
186168
*/
187-
token = () => {
169+
const getToken = () => {
188170
const tokenString = window.localStorage.getItem('token');
189171

190172
if (!tokenString) {
@@ -193,7 +175,7 @@ class App extends Component {
193175

194176
const token = JSON.parse(tokenString);
195177

196-
this.setState({ token });
178+
setToken(token);
197179

198180
return token;
199181
};
@@ -205,7 +187,7 @@ class App extends Component {
205187
*
206188
* @return {undefined}
207189
*/
208-
setToken = token => {
190+
const storeToken = token => {
209191
// We will set a default Authorization header, this will
210192
// eliminate the need to include the Authorization header
211193
// for almost every AJAX requests.
@@ -222,7 +204,7 @@ class App extends Component {
222204
*
223205
* @return {undefined}
224206
*/
225-
removeToken = () => {
207+
const removeToken = () => {
226208
localStorage.removeItem('token');
227209
};
228210

@@ -231,88 +213,88 @@ class App extends Component {
231213
*
232214
* @return {any}
233215
*/
234-
fetchUser = async () => {
235-
this.setState({ loading: true });
216+
const fetchUser = async () => {
217+
setLoading(true);
236218

237219
try {
238220
const response = await axios.post('/api/v1/auth/user');
239221

240-
if (response.status !== 200) {
241-
return;
242-
}
243-
244-
this.setState({
245-
loading: false,
246-
authenticated: true,
247-
user: response.data,
248-
});
222+
setAuthenticated(true);
223+
setUser(response.data);
224+
setLoading(false);
249225

250226
return response.data;
251227
} catch (error) {
252228
//
253229
}
254230
};
255231

256-
async componentDidMount() {
257-
// Toggle monitoring.
258-
this.monitoringEnabled();
232+
useEffect(() => {
233+
if (initialized) {
234+
return;
235+
}
236+
237+
monitor();
259238

260-
// Listen for all API responses.
261-
this.addResponseInterceptor();
239+
addResponseInterceptor();
262240

263-
// Setup Night Mode via Persistent Storage.
264-
this.setNightMode();
241+
night();
265242

266-
// Authenticate via Persistent Storage.
267-
const token = this.token();
243+
const token = getToken();
268244

269245
if (Object.keys(token).length > 0) {
270-
await this.authenticate(JSON.stringify(token));
246+
authenticate(JSON.stringify(token));
247+
} else {
248+
setLoading(false);
271249
}
272250

273-
this.setState({ loading: false });
274-
}
275-
276-
componentWillUnmount() {
277-
const { responseInterceptor } = this.state;
251+
if (responseInterceptor !== null) {
252+
removeResponseInterceptor(responseInterceptor);
253+
}
278254

279-
this.removeResponseInterceptor(responseInterceptor);
280-
}
255+
setInitialized(true);
256+
}, [initialized]);
281257

282-
render() {
283-
const { width, environment, darkTheme, lightTheme } = this.props;
284-
const { loading, nightMode } = this.state;
258+
const { width, environment, darkTheme, lightTheme } = props;
285259

286-
return (
287-
<MuiThemeProvider theme={nightMode ? darkTheme : lightTheme}>
288-
<CssBaseline />
260+
const pageProps = {
261+
loading,
262+
authenticated,
263+
nightMode,
264+
user,
265+
token,
266+
username,
267+
monitoringEnabled,
268+
};
289269

290-
{loading ? (
291-
<Loading
270+
return (
271+
<MuiThemeProvider theme={nightMode ? darkTheme : lightTheme}>
272+
<CssBaseline />
273+
274+
{loading ? (
275+
<Loading
276+
pageProps={{
277+
...pageProps,
278+
}}
279+
/>
280+
) : (
281+
<Router>
282+
<Navigator
292283
pageProps={{
293-
...this.state,
284+
...pageProps,
285+
width,
286+
environment: environment,
287+
routes: ROUTES,
288+
handleNightModeToggled: handleNightModeToggled,
289+
authenticate: authenticate,
290+
handleLock: handleLock,
291+
handleSignOut: handleSignOut,
294292
}}
295293
/>
296-
) : (
297-
<Router>
298-
<Navigator
299-
pageProps={{
300-
...this.state,
301-
width,
302-
environment: environment,
303-
routes: ROUTES,
304-
handleNightmodeToggled: this
305-
.handleNightmodeToggled,
306-
authenticate: this.authenticate,
307-
handleLock: this.handleLock,
308-
handleSignout: this.handleSignout,
309-
}}
310-
/>
311-
</Router>
312-
)}
313-
</MuiThemeProvider>
314-
);
315-
}
294+
</Router>
295+
)}
296+
</MuiThemeProvider>
297+
);
316298
}
317299

318300
App.propTypes = {

0 commit comments

Comments
 (0)