dce-reactkit 3.6.2 → 3.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -60,6 +60,6 @@ export declare const addFatalErrorHandler: (handler: () => void) => void;
60
60
  * Show the "session expired" message
61
61
  * @author Gabe Abrams
62
62
  */
63
- export declare const showSessionExpiredMessage: () => void;
63
+ export declare const showSessionExpiredMessage: () => Promise<void>;
64
64
  declare const AppWrapper: React.FC<Props>;
65
65
  export default AppWrapper;
@@ -1,9 +1,3 @@
1
- /**
2
- * Set the session expiry handler
3
- * @author Gabe Abrams
4
- * @param handler new handler to use when session expires
5
- */
6
- export declare const setSessionExpiryHandler: (handler: () => void) => void;
7
1
  /**
8
2
  * Add a stub response
9
3
  * @author Gabe Abrams
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dce-reactkit",
3
- "version": "3.6.2",
3
+ "version": "3.6.4",
4
4
  "description": "Shared components for Harvard DCE apps",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -329,8 +329,21 @@ let setSessionHasExpired: (isExpired: boolean) => void;
329
329
  * Show the "session expired" message
330
330
  * @author Gabe Abrams
331
331
  */
332
- export const showSessionExpiredMessage = () => {
333
- setSessionHasExpired(true);
332
+ export const showSessionExpiredMessage = async () => {
333
+ // Wait for helper to exist
334
+ await waitForHelper(() => {
335
+ return !!setSessionHasExpired;
336
+ });
337
+
338
+ // Show session expired message
339
+ if (setSessionHasExpired) {
340
+ setSessionHasExpired(true);
341
+ } else {
342
+ showFatalError(
343
+ 'Your session has expired. Please start over.',
344
+ 'Session Expired',
345
+ );
346
+ }
334
347
  };
335
348
 
336
349
  /*------------------------------------------------------------------------*/
@@ -1,28 +1,14 @@
1
+ /* eslint-disable no-underscore-dangle */
2
+ /* eslint-disable @typescript-eslint/naming-convention */
1
3
  // Import custom error
2
4
  import ErrorWithCode from '../errors/ErrorWithCode';
3
5
  import ReactKitErrorCode from '../types/ReactKitErrorCode';
4
6
 
5
7
  // Import helpers
8
+ // TODO: fix dependency cycle
9
+ // eslint-disable-next-line import/no-cycle
6
10
  import { getSendRequest } from '../client/initClient';
7
-
8
- /*------------------------------------------------------------------------*/
9
- /* Listener */
10
- /*------------------------------------------------------------------------*/
11
-
12
- // Handler for session expiry
13
- let sessionExpiryHandler: () => void;
14
-
15
- // Keep track of whether or not session expiry has already been handled
16
- let sessionAlreadyExpired = false;
17
-
18
- /**
19
- * Set the session expiry handler
20
- * @author Gabe Abrams
21
- * @param handler new handler to use when session expires
22
- */
23
- export const setSessionExpiryHandler = (handler: () => void) => {
24
- sessionExpiryHandler = handler;
25
- };
11
+ import { showSessionExpiredMessage } from '../components/AppWrapper';
26
12
 
27
13
  /*------------------------------------------------------------------------*/
28
14
  /* Stub Logic */
@@ -155,28 +141,10 @@ const visitServerEndpoint = async (
155
141
  if (!response.body.success) {
156
142
  // Session expired
157
143
  if (response.body.code === ReactKitErrorCode.SessionExpired) {
158
- // Skip notice if session was already expired
159
- if (sessionAlreadyExpired) {
160
- // Never return (browser is already reloading)
161
- await new Promise<{ [key in string]: any }>(() => {
162
- // Promise that never returns
163
- });
164
- }
165
- sessionAlreadyExpired = true;
166
-
167
- // Show session expiration message
168
- if (sessionExpiryHandler) {
169
- // Use handler
170
- sessionExpiryHandler();
171
- } else {
172
- // Fallback to alert
173
-
174
- // eslint-disable-next-line no-alert
175
- alert('Your session has expired. Please start over.');
176
- }
144
+ showSessionExpiredMessage();
177
145
 
178
146
  // Never return (don't continue execution)
179
- await new Promise<{ [key in string]: any }>(() => {
147
+ await new Promise(() => {
180
148
  // Promise that never returns
181
149
  });
182
150
  }