forked from HSLdevcom/digitransit-ui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhistory.js
60 lines (56 loc) · 1.68 KB
/
history.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { createHistory, createMemoryHistory, useQueries } from 'history';
import { useRouterHistory } from 'react-router';
import createLocalStorageHistory from './localStorageHistory';
import { isIOSApp, isBrowser } from './util/browser';
const ROOT_PATH = '/';
/**
* Gives the proper function to create a history object for the application.
*
* @param {string} path the current url path.
* @param {boolean} browser whether the code is currently running in a browser.
* @param {boolean} iosApp whether the code is currently running as an iOS PWA.
*/
export const getCreateHistoryFunction = (
path = ROOT_PATH,
browser = isBrowser,
iosApp = isIOSApp,
) => {
if (iosApp) {
if (path !== ROOT_PATH) {
return createHistory;
}
return createLocalStorageHistory;
}
if (browser) {
try {
if (window.sessionStorage) {
return createHistory;
}
} catch (error) {
return createMemoryHistory;
}
}
return createMemoryHistory;
};
/**
* Constructs a router with a suitable history handler for the application.
*
* @param {{ APP_PATH: string }} config the current configuration.
* @param {string} path the current url path.
* @param {boolean} browser whether the code is currently running in a browser.
*/
const history = (config, path = ROOT_PATH, browser = isBrowser) => {
const historyCreator = getCreateHistoryFunction(path, browser);
const router = useRouterHistory(useQueries(historyCreator))({
basename: config.APP_PATH,
});
if (
path !== ROOT_PATH &&
(historyCreator === createMemoryHistory ||
historyCreator === createLocalStorageHistory)
) {
router.replace(path);
}
return router;
};
export default history;