@servicetitan/hash-browser-router 30.3.0 → 31.0.0
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createBrowserHistory
|
|
2
|
+
import { createBrowserHistory } from 'history';
|
|
3
3
|
import { useRef, useEffect } from 'react';
|
|
4
4
|
import { Router } from 'react-router-dom';
|
|
5
5
|
import { useDependencies } from '@servicetitan/react-ioc';
|
|
@@ -8,24 +8,35 @@ import { SingletonProvider } from './singleton-provider';
|
|
|
8
8
|
function useHistory(options) {
|
|
9
9
|
const history = useRef(createHashBrowserHistory(options)).current;
|
|
10
10
|
const [historyManager] = useDependencies(HistoryManager);
|
|
11
|
-
useEffect(()
|
|
11
|
+
useEffect(()=>{
|
|
12
12
|
historyManager.register(history);
|
|
13
|
-
return ()
|
|
13
|
+
return ()=>{
|
|
14
14
|
historyManager.unregister(history);
|
|
15
15
|
};
|
|
16
|
-
}, [
|
|
16
|
+
}, [
|
|
17
|
+
history,
|
|
18
|
+
historyManager
|
|
19
|
+
]);
|
|
17
20
|
return history;
|
|
18
21
|
}
|
|
19
|
-
const HashBrowserRouterUnwrapped = props
|
|
22
|
+
const HashBrowserRouterUnwrapped = (props)=>{
|
|
20
23
|
const history = useHistory(props);
|
|
21
24
|
const { children } = props;
|
|
22
|
-
return _jsx(Router, {
|
|
25
|
+
return /*#__PURE__*/ _jsx(Router, {
|
|
26
|
+
history: history,
|
|
27
|
+
children: children
|
|
28
|
+
});
|
|
23
29
|
};
|
|
24
|
-
export const HashBrowserRouter = props
|
|
30
|
+
export const HashBrowserRouter = (props)=>/*#__PURE__*/ _jsx(SingletonProvider, {
|
|
31
|
+
provide: HistoryManager,
|
|
32
|
+
children: /*#__PURE__*/ _jsx(HashBrowserRouterUnwrapped, {
|
|
33
|
+
...props
|
|
34
|
+
})
|
|
35
|
+
});
|
|
25
36
|
function createHashBrowserHistory({ basename = '', ...props }) {
|
|
26
|
-
function convertLocationToHashRouterView(
|
|
37
|
+
function convertLocationToHashRouterView(l1) {
|
|
27
38
|
let search = '';
|
|
28
|
-
let pathname =
|
|
39
|
+
let pathname = l1.hash ? l1.hash.substring(1) : '/';
|
|
29
40
|
if (basename) {
|
|
30
41
|
pathname = stripBasename(pathname, basename);
|
|
31
42
|
}
|
|
@@ -35,86 +46,79 @@ function createHashBrowserHistory({ basename = '', ...props }) {
|
|
|
35
46
|
pathname = pathname.substring(0, index);
|
|
36
47
|
}
|
|
37
48
|
return {
|
|
38
|
-
...
|
|
49
|
+
...l1,
|
|
39
50
|
search,
|
|
40
51
|
pathname,
|
|
41
|
-
hash: ''
|
|
52
|
+
hash: ''
|
|
42
53
|
};
|
|
43
54
|
}
|
|
44
55
|
const parent = createBrowserHistory(props);
|
|
45
56
|
const history = {
|
|
46
|
-
createHref: location
|
|
47
|
-
push: (path, state)
|
|
57
|
+
createHref: (location)=>'/#' + basename + parent.createHref(location),
|
|
58
|
+
push: (path, state)=>{
|
|
48
59
|
if (typeof path === 'string') {
|
|
49
60
|
if (path.startsWith('/#')) {
|
|
50
61
|
parent.push(path, state);
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
62
|
+
} else {
|
|
53
63
|
parent.push('/#' + basename + path, state);
|
|
54
64
|
}
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
65
|
+
} else {
|
|
57
66
|
if (path.hash) {
|
|
58
67
|
parent.push(path);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
68
|
+
} else {
|
|
61
69
|
parent.push({
|
|
62
70
|
...path,
|
|
63
71
|
pathname: '/',
|
|
64
|
-
hash: path.pathname !== undefined ? basename + path.pathname : undefined
|
|
72
|
+
hash: path.pathname !== undefined ? basename + path.pathname : undefined
|
|
65
73
|
});
|
|
66
74
|
}
|
|
67
75
|
}
|
|
68
76
|
triggerSammyLocationChange();
|
|
69
77
|
},
|
|
70
|
-
replace: (path, state)
|
|
78
|
+
replace: (path, state)=>{
|
|
71
79
|
if (typeof path === 'string') {
|
|
72
80
|
if (path.startsWith('/#')) {
|
|
73
81
|
parent.replace(path, state);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
82
|
+
} else {
|
|
76
83
|
parent.replace('/#' + basename + path, state);
|
|
77
84
|
}
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
85
|
+
} else {
|
|
80
86
|
if (path.hash) {
|
|
81
87
|
parent.replace(path);
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
88
|
+
} else {
|
|
84
89
|
parent.replace({
|
|
85
90
|
...path,
|
|
86
91
|
pathname: '/',
|
|
87
|
-
hash: path.pathname !== undefined ? basename + path.pathname : undefined
|
|
92
|
+
hash: path.pathname !== undefined ? basename + path.pathname : undefined
|
|
88
93
|
});
|
|
89
94
|
}
|
|
90
95
|
}
|
|
91
96
|
triggerSammyLocationChange();
|
|
92
97
|
},
|
|
93
|
-
block: prompt
|
|
98
|
+
block: (prompt)=>{
|
|
94
99
|
if (typeof prompt === 'function') {
|
|
95
|
-
return parent.block((origLocation, action)
|
|
100
|
+
return parent.block((origLocation, action)=>{
|
|
96
101
|
return prompt(convertLocationToHashRouterView(origLocation), action);
|
|
97
102
|
});
|
|
98
103
|
}
|
|
99
104
|
return parent.block(prompt);
|
|
100
105
|
},
|
|
101
|
-
listen: listener
|
|
102
|
-
return parent.listen((origLocation, action)
|
|
106
|
+
listen: (listener)=>{
|
|
107
|
+
return parent.listen((origLocation, action)=>{
|
|
103
108
|
listener(convertLocationToHashRouterView(origLocation), action);
|
|
104
109
|
});
|
|
105
110
|
},
|
|
106
|
-
get location() {
|
|
111
|
+
get location () {
|
|
107
112
|
return convertLocationToHashRouterView(parent.location);
|
|
108
113
|
},
|
|
109
|
-
set location(l)
|
|
114
|
+
set location (l){
|
|
110
115
|
parent.location = l;
|
|
111
|
-
}
|
|
116
|
+
}
|
|
112
117
|
};
|
|
113
118
|
return Object.setPrototypeOf(history, parent);
|
|
114
119
|
}
|
|
115
120
|
function hasBasename(path, prefix) {
|
|
116
|
-
return
|
|
117
|
-
'/?#'.indexOf(path.charAt(prefix.length)) !== -1);
|
|
121
|
+
return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;
|
|
118
122
|
}
|
|
119
123
|
function stripBasename(path, prefix) {
|
|
120
124
|
return hasBasename(path, prefix) ? path.substring(prefix.length) : path;
|
|
@@ -124,9 +128,9 @@ function triggerSammyLocationChange() {
|
|
|
124
128
|
* We have to skip ahead `componentWillUnmount` to avoid «race condition»
|
|
125
129
|
* e.g. in the SettingsLayout component "window.app.swap" could be fired after
|
|
126
130
|
* the new Sammy route load and it would hide that page.
|
|
127
|
-
*/
|
|
128
|
-
setTimeout(() => {
|
|
131
|
+
*/ setTimeout(()=>{
|
|
129
132
|
window.dispatchEvent(new HashChangeEvent('hashchange'));
|
|
130
133
|
});
|
|
131
134
|
}
|
|
135
|
+
|
|
132
136
|
//# sourceMappingURL=hash-browser-router.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/hash-browser-router.tsx"],"sourcesContent":["import {\n BrowserHistoryBuildOptions,\n History,\n Location,\n LocationState,\n createBrowserHistory,\n} from 'history';\nimport { useRef, FC, useEffect } from 'react';\nimport { BrowserRouterProps, Router } from 'react-router-dom';\n\nimport { useDependencies } from '@servicetitan/react-ioc';\nimport { HistoryManager } from '@servicetitan/web-components';\n\nimport { SingletonProvider } from './singleton-provider';\n\nfunction useHistory(options: BrowserHistoryBuildOptions) {\n const history = useRef(createHashBrowserHistory(options)).current;\n\n const [historyManager] = useDependencies(HistoryManager);\n\n useEffect(() => {\n historyManager.register(history);\n\n return () => {\n historyManager.unregister(history);\n };\n }, [history, historyManager]);\n\n return history;\n}\n\nconst HashBrowserRouterUnwrapped: FC<BrowserRouterProps> = props => {\n const history = useHistory(props);\n const { children } = props;\n\n return <Router history={history}>{children}</Router>;\n};\n\nexport const HashBrowserRouter: FC<BrowserRouterProps> = props => (\n <SingletonProvider provide={HistoryManager}>\n <HashBrowserRouterUnwrapped {...props} />\n </SingletonProvider>\n);\n\nfunction createHashBrowserHistory({\n basename = '',\n ...props\n}: BrowserHistoryBuildOptions): History {\n function convertLocationToHashRouterView(l: Location): Location {\n let search = '';\n let pathname = l.hash ? l.hash.substring(1) : '/';\n if (basename) {\n pathname = stripBasename(pathname, basename);\n }\n const index = pathname.indexOf('?');\n if (index !== -1) {\n search = pathname.substring(index);\n pathname = pathname.substring(0, index);\n }\n return {\n ...l,\n search,\n pathname,\n hash: '',\n };\n }\n\n const parent = createBrowserHistory(props);\n\n const history: Omit<History, 'length' | 'action' | 'go' | 'goBack' | 'goForward'> = {\n createHref: location => '/#' + basename + parent.createHref(location),\n\n push: (path, state?: LocationState) => {\n if (typeof path === 'string') {\n if (path.startsWith('/#')) {\n parent.push(path, state);\n } else {\n parent.push('/#' + basename + path, state);\n }\n } else {\n if (path.hash) {\n parent.push(path);\n } else {\n parent.push({\n ...path,\n pathname: '/',\n hash: path.pathname !== undefined ? basename + path.pathname : undefined,\n });\n }\n }\n\n triggerSammyLocationChange();\n },\n\n replace: (path, state?: LocationState) => {\n if (typeof path === 'string') {\n if (path.startsWith('/#')) {\n parent.replace(path, state);\n } else {\n parent.replace('/#' + basename + path, state);\n }\n } else {\n if (path.hash) {\n parent.replace(path);\n } else {\n parent.replace({\n ...path,\n pathname: '/',\n hash: path.pathname !== undefined ? basename + path.pathname : undefined,\n });\n }\n }\n\n triggerSammyLocationChange();\n },\n\n block: prompt => {\n if (typeof prompt === 'function') {\n return parent.block((origLocation, action) => {\n return prompt(convertLocationToHashRouterView(origLocation), action);\n });\n }\n\n return parent.block(prompt);\n },\n\n listen: listener => {\n return parent.listen((origLocation, action) => {\n listener(convertLocationToHashRouterView(origLocation), action);\n });\n },\n\n get location() {\n return convertLocationToHashRouterView(parent.location);\n },\n set location(l) {\n parent.location = l;\n },\n };\n\n return Object.setPrototypeOf(history, parent);\n}\n\nfunction hasBasename(path: string, prefix: string) {\n return (\n path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 &&\n '/?#'.indexOf(path.charAt(prefix.length)) !== -1\n );\n}\n\nfunction stripBasename(path: string, prefix: string) {\n return hasBasename(path, prefix) ? path.substring(prefix.length) : path;\n}\n\nfunction triggerSammyLocationChange() {\n /*\n * We have to skip ahead `componentWillUnmount` to avoid «race condition»\n * e.g. in the SettingsLayout component \"window.app.swap\" could be fired after\n * the new Sammy route load and it would hide that page.\n */\n setTimeout(() => {\n window.dispatchEvent(new HashChangeEvent('hashchange'));\n });\n}\n"],"names":["createBrowserHistory","useRef","useEffect","Router","useDependencies","HistoryManager","SingletonProvider","useHistory","options","history","createHashBrowserHistory","current","historyManager","register","unregister","HashBrowserRouterUnwrapped","props","children","HashBrowserRouter","provide","basename","convertLocationToHashRouterView","l","search","pathname","hash","substring","stripBasename","index","indexOf","parent","createHref","location","push","path","state","startsWith","undefined","triggerSammyLocationChange","replace","block","prompt","origLocation","action","listen","listener","Object","setPrototypeOf","hasBasename","prefix","toLowerCase","charAt","length","setTimeout","window","dispatchEvent","HashChangeEvent"],"mappings":"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"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './hash-browser-router';\n"],"names":[],"mappings":"AAAA,cAAc,wBAAwB"}
|
|
@@ -2,8 +2,17 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useOptionalDependencies, Provider } from '@servicetitan/react-ioc';
|
|
3
3
|
// Re-use instance if already exists
|
|
4
4
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
|
|
5
|
-
export const SingletonProvider = ({ provide, children
|
|
5
|
+
export const SingletonProvider = ({ provide, children })=>{
|
|
6
6
|
const [instance] = useOptionalDependencies(provide);
|
|
7
|
-
return
|
|
7
|
+
return /*#__PURE__*/ _jsx(Provider, {
|
|
8
|
+
singletons: [
|
|
9
|
+
instance ? {
|
|
10
|
+
provide,
|
|
11
|
+
useValue: instance
|
|
12
|
+
} : provide
|
|
13
|
+
],
|
|
14
|
+
children: children
|
|
15
|
+
});
|
|
8
16
|
};
|
|
17
|
+
|
|
9
18
|
//# sourceMappingURL=singleton-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/singleton-provider.tsx"],"sourcesContent":["import { interfaces, useOptionalDependencies, Provider } from '@servicetitan/react-ioc';\n\ninterface SingletonProviderProps<T> {\n provide: interfaces.Newable<T>;\n children: JSX.Element;\n}\n\n// Re-use instance if already exists\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint\nexport const SingletonProvider = <T extends any>({\n provide,\n children,\n}: SingletonProviderProps<T>) => {\n const [instance] = useOptionalDependencies(provide);\n\n return (\n <Provider singletons={[instance ? { provide, useValue: instance } : provide]}>\n {children}\n </Provider>\n );\n};\n"],"names":["useOptionalDependencies","Provider","SingletonProvider","provide","children","instance","singletons","useValue"],"mappings":";AAAA,SAAqBA,uBAAuB,EAAEC,QAAQ,QAAQ,0BAA0B;AAOxF,oCAAoC;AACpC,6EAA6E;AAC7E,OAAO,MAAMC,oBAAoB,CAAgB,EAC7CC,OAAO,EACPC,QAAQ,EACgB;IACxB,MAAM,CAACC,SAAS,GAAGL,wBAAwBG;IAE3C,qBACI,KAACF;QAASK,YAAY;YAACD,WAAW;gBAAEF;gBAASI,UAAUF;YAAS,IAAIF;SAAQ;kBACvEC;;AAGb,EAAE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/hash-browser-router",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "31.0.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"src"
|
|
16
16
|
],
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@servicetitan/react-ioc": "
|
|
19
|
-
"@servicetitan/web-components": "
|
|
18
|
+
"@servicetitan/react-ioc": "31.0.0",
|
|
19
|
+
"@servicetitan/web-components": "31.0.0",
|
|
20
20
|
"@testing-library/dom": "^10.4.0",
|
|
21
21
|
"@testing-library/react": "^16.3.0",
|
|
22
22
|
"@types/history": "~4.7.10",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"react-router-dom": "~5.3.0"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"@servicetitan/react-ioc": "
|
|
31
|
-
"@servicetitan/web-components": "
|
|
30
|
+
"@servicetitan/react-ioc": "31.0.0",
|
|
31
|
+
"@servicetitan/web-components": "31.0.0",
|
|
32
32
|
"history": "~4.10.1",
|
|
33
33
|
"react": ">=17.0.2",
|
|
34
34
|
"react-router-dom": "~5.3.0"
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"cli": {
|
|
40
40
|
"webpack": false
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "c52e188a1217df74052774a2eea6a5126089e3d5"
|
|
43
43
|
}
|