summaryrefslogtreecommitdiff
path: root/client/app.jsx
diff options
context:
space:
mode:
authorJoseph Ditton <jditton.atomic@gmail.com>2021-11-23 14:04:12 -0700
committerJoseph Ditton <jditton.atomic@gmail.com>2021-11-23 14:04:12 -0700
commit8d0b32f8dfe45291426e58f6bf20cffac8dab6e7 (patch)
treeec4c1e08e8698d7118641612b67bce940019b3dc /client/app.jsx
parent4ae4e874689a71e33cdd7a5799fc0c85c4861367 (diff)
downloadlocchat-8d0b32f8dfe45291426e58f6bf20cffac8dab6e7.tar.gz
locchat-8d0b32f8dfe45291426e58f6bf20cffac8dab6e7.zip
adds api, guard, tailwind
Diffstat (limited to 'client/app.jsx')
-rw-r--r--client/app.jsx47
1 files changed, 31 insertions, 16 deletions
diff --git a/client/app.jsx b/client/app.jsx
index 6414fad..a7de3cf 100644
--- a/client/app.jsx
+++ b/client/app.jsx
@@ -1,25 +1,40 @@
-import { useReducer } from 'react';
+import { useState, useEffect } from 'react';
import { HashRouter } from 'react-router-dom';
import { Router } from './components/router';
-import { SettingsContext } from './utils/settings_context';
+import { ApiContext } from './utils/api_context';
+import { AuthContext } from './utils/auth_context';
+import { useApi } from './utils/use_api';
+import { useJwtRefresh } from './utils/use_jwt_refresh';
+import './app.css';
-const settingsReducer = (state, action) => {
- switch (action.type) {
- case 'update': {
- return { ...state, ...action.payload };
+export const App = () => {
+ const [authToken, setAuthToken] = useState(null);
+ const [loading, setLoading] = useState(true);
+
+ // Refresh the jwt token automatically
+ useJwtRefresh(authToken, setAuthToken);
+
+ // api instance
+ const api = useApi(authToken);
+
+ // get initial jwt using refresh token
+ useEffect(async () => {
+ const result = await api.get('/refresh_token');
+ if (result.token) {
+ setAuthToken(result.token);
}
- }
- return state;
-};
+ setLoading(false);
+ }, []);
-export const App = () => {
- const [settings, dispatch] = useReducer(settingsReducer, window.SETTINGS);
+ if (loading) return null;
return (
- <SettingsContext.Provider value={[settings, dispatch]}>
- <HashRouter>
- <Router />
- </HashRouter>
- </SettingsContext.Provider>
+ <AuthContext.Provider value={[authToken, setAuthToken]}>
+ <ApiContext.Provider value={api}>
+ <HashRouter>
+ <Router />
+ </HashRouter>
+ </ApiContext.Provider>
+ </AuthContext.Provider>
);
};