Skip to content

Commit d8b5447

Browse files
committed
Using context to get the necessery services.
1 parent 591ea0a commit d8b5447

File tree

4 files changed

+64
-20
lines changed

4 files changed

+64
-20
lines changed

web/src/app.tsx

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,50 @@ import { Routes, Route, Navigate } from "react-router-dom";
33
import SecureRoute from './components/secureRoute';
44
import { SigninCallback } from "./components/signinCallback";
55
import { UserInvitations } from './components/user/userInvitations';
6+
import { SettingsService } from './services/settingsService';
7+
import { AuthenticationService } from './services/authenticationService';
8+
import { InviterService } from './services/inviterService';
9+
import { ApplicationContext } from './utilities/applicationContext';
610

711
function App() {
8-
12+
const context = new AppContext();
913
return (
10-
<Routes>
11-
<Route path='/' element={<Navigate to="/index" />}>
12-
</Route>
13-
<Route path="signin-callback" element={<SigninCallback />} />
14-
<Route path='index' element={<SecureRoute><UserInvitations /></SecureRoute>} />
15-
</Routes>
14+
<ApplicationContext.Provider value={context}>
15+
<Routes>
16+
<Route path='/' element={<Navigate to="/index" />}>
17+
</Route>
18+
<Route path="signin-callback" element={<SigninCallback />} />
19+
<Route path='index' element={<SecureRoute><UserInvitations /></SecureRoute>} />
20+
</Routes>
21+
</ApplicationContext.Provider>
1622
);
1723
}
1824

19-
export default App;
25+
export default App;
26+
27+
class AppContext {
28+
private settingsService: SettingsService;
29+
private authenticationService: AuthenticationService;
30+
private inviterService: InviterService;
31+
32+
public getAuthenticationService(): AuthenticationService {
33+
if (!this.authenticationService) {
34+
this.authenticationService = new AuthenticationService(this.getSettingsService().getAuthenticationSettings());
35+
}
36+
return this.authenticationService;
37+
}
38+
39+
public getSettingsService(): SettingsService {
40+
if (!this.settingsService) {
41+
this.settingsService = new SettingsService();
42+
}
43+
return this.settingsService;
44+
}
45+
46+
public getInviterService(): InviterService {
47+
if (!this.inviterService) {
48+
this.inviterService = new InviterService(this.getSettingsService().getServerUrl(), this.getAuthenticationService().userManager);
49+
}
50+
return this.inviterService;
51+
}
52+
}

web/src/components/secureRoute.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import * as React from 'react';
22
import { useEffect } from 'react';
3-
import { AuthenticationService } from '../services/authenticationService';
4-
import { SettingsService } from '../services/settingsService';
3+
import { useApplicationContext } from '../utilities/applicationContext';
54

65
export default function SecureRoute(props: any) {
7-
let authSettings = new SettingsService().getAuthenticationSettings();
8-
let authService = new AuthenticationService(authSettings);
6+
const context = useApplicationContext();
7+
const authService = context.getAuthenticationService();
98
useEffect(() => {
109
authService.getUser().then(user => {
1110
if (!user) {

web/src/components/user/userInvitations.tsx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,16 @@
22
import * as React from 'react';
33
import { Invitation } from '../../models/invitation';
44
import Moment from 'react-moment';
5-
import { SettingsService } from '../../services/settingsService';
6-
import { AuthenticationService } from '../../services/authenticationService';
7-
import { InviterService } from '../../services/inviterService';
5+
import { useApplicationContext } from '../../utilities/applicationContext';
86

97
export function UserInvitations() {
108
const [userInvitations, setUserInvitations] = React.useState([] as Invitation[]);
9+
const context = useApplicationContext();
1110

1211
React.useEffect(() => {
13-
const settingsService = new SettingsService();
14-
let authSettings = settingsService.getAuthenticationSettings();
15-
let authService = new AuthenticationService(authSettings);
16-
let inviterService = new InviterService(settingsService.getServerUrl(), authService.userManager);
12+
const inviterService = context.getInviterService();
1713
inviterService.getInvitations()
18-
.then(r => setUserInvitations(r));
14+
.then(r => setUserInvitations(r));
1915
}, userInvitations);
2016

2117
const renderRows = function () {
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import * as React from 'react';
2+
import { AuthenticationService } from '../services/authenticationService';
3+
import { InviterService } from '../services/inviterService';
4+
import { SettingsService } from '../services/settingsService';
5+
6+
export interface IApplicationContext {
7+
getAuthenticationService(): AuthenticationService;
8+
getSettingsService(): SettingsService;
9+
getInviterService(): InviterService;
10+
}
11+
12+
export const ApplicationContext = React.createContext({} as IApplicationContext);
13+
14+
export function useApplicationContext(): IApplicationContext {
15+
return React.useContext(ApplicationContext);
16+
}

0 commit comments

Comments
 (0)