@tanstack/vue-router 0.0.1 → 1.140.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.
- package/LICENSE +21 -0
- package/README.md +66 -45
- package/dist/esm/Asset.d.ts +2 -0
- package/dist/esm/Asset.js +33 -0
- package/dist/esm/Asset.js.map +1 -0
- package/dist/esm/CatchBoundary.d.ts +19 -0
- package/dist/esm/CatchBoundary.js +135 -0
- package/dist/esm/CatchBoundary.js.map +1 -0
- package/dist/esm/ClientOnly.d.ts +67 -0
- package/dist/esm/HeadContent.d.ts +10 -0
- package/dist/esm/HeadContent.js +116 -0
- package/dist/esm/HeadContent.js.map +1 -0
- package/dist/esm/Match.d.ts +25 -0
- package/dist/esm/Match.js +262 -0
- package/dist/esm/Match.js.map +1 -0
- package/dist/esm/Matches.d.ts +39 -0
- package/dist/esm/Matches.js +186 -0
- package/dist/esm/Matches.js.map +1 -0
- package/dist/esm/RouterProvider.d.ts +33 -0
- package/dist/esm/RouterProvider.js +65 -0
- package/dist/esm/RouterProvider.js.map +1 -0
- package/dist/esm/SafeFragment.d.ts +4 -0
- package/dist/esm/ScriptOnce.d.ts +5 -0
- package/dist/esm/ScriptOnce.js +21 -0
- package/dist/esm/ScriptOnce.js.map +1 -0
- package/dist/esm/Scripts.d.ts +1 -0
- package/dist/esm/Scripts.js +46 -0
- package/dist/esm/Scripts.js.map +1 -0
- package/dist/esm/ScrollRestoration.d.ts +14 -0
- package/dist/esm/ScrollRestoration.js +36 -0
- package/dist/esm/ScrollRestoration.js.map +1 -0
- package/dist/esm/Transitioner.d.ts +2 -0
- package/dist/esm/Transitioner.js +154 -0
- package/dist/esm/Transitioner.js.map +1 -0
- package/dist/esm/awaited.d.ts +12 -0
- package/dist/esm/awaited.js +40 -0
- package/dist/esm/awaited.js.map +1 -0
- package/dist/esm/fileRoute.d.ts +54 -0
- package/dist/esm/fileRoute.js +103 -0
- package/dist/esm/fileRoute.js.map +1 -0
- package/dist/esm/history.d.ts +8 -0
- package/dist/esm/index.d.ts +51 -0
- package/dist/esm/index.js +138 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lazyRouteComponent.d.ts +8 -0
- package/dist/esm/lazyRouteComponent.js +106 -0
- package/dist/esm/lazyRouteComponent.js.map +1 -0
- package/dist/esm/link.d.ts +61 -0
- package/dist/esm/link.js +376 -0
- package/dist/esm/link.js.map +1 -0
- package/dist/esm/matchContext.d.ts +20 -0
- package/dist/esm/matchContext.js +16 -0
- package/dist/esm/matchContext.js.map +1 -0
- package/dist/esm/not-found.d.ts +12 -0
- package/dist/esm/not-found.js +45 -0
- package/dist/esm/not-found.js.map +1 -0
- package/dist/esm/renderRouteNotFound.d.ts +11 -0
- package/dist/esm/renderRouteNotFound.js +19 -0
- package/dist/esm/renderRouteNotFound.js.map +1 -0
- package/dist/esm/route.d.ts +96 -0
- package/dist/esm/route.js +176 -0
- package/dist/esm/route.js.map +1 -0
- package/dist/esm/router.d.ts +69 -0
- package/dist/esm/router.js +14 -0
- package/dist/esm/router.js.map +1 -0
- package/dist/esm/routerContext.d.ts +21 -0
- package/dist/esm/routerContext.js +21 -0
- package/dist/esm/routerContext.js.map +1 -0
- package/dist/esm/scroll-restoration.d.ts +1 -0
- package/dist/esm/scroll-restoration.js +21 -0
- package/dist/esm/scroll-restoration.js.map +1 -0
- package/dist/esm/typePrimitives.d.ts +10 -0
- package/dist/esm/useBlocker.d.ts +66 -0
- package/dist/esm/useBlocker.js +295 -0
- package/dist/esm/useBlocker.js.map +1 -0
- package/dist/esm/useCanGoBack.d.ts +1 -0
- package/dist/esm/useCanGoBack.js +8 -0
- package/dist/esm/useCanGoBack.js.map +1 -0
- package/dist/esm/useLoaderData.d.ts +8 -0
- package/dist/esm/useLoaderData.js +14 -0
- package/dist/esm/useLoaderData.js.map +1 -0
- package/dist/esm/useLoaderDeps.d.ts +7 -0
- package/dist/esm/useLoaderDeps.js +17 -0
- package/dist/esm/useLoaderDeps.js.map +1 -0
- package/dist/esm/useLocation.d.ts +7 -0
- package/dist/esm/useLocation.js +10 -0
- package/dist/esm/useLocation.js.map +1 -0
- package/dist/esm/useMatch.d.ts +10 -0
- package/dist/esm/useMatch.js +39 -0
- package/dist/esm/useMatch.js.map +1 -0
- package/dist/esm/useNavigate.d.ts +5 -0
- package/dist/esm/useNavigate.js +29 -0
- package/dist/esm/useNavigate.js.map +1 -0
- package/dist/esm/useParams.d.ts +9 -0
- package/dist/esm/useParams.js +15 -0
- package/dist/esm/useParams.js.map +1 -0
- package/dist/esm/useRouteContext.d.ts +4 -0
- package/dist/esm/useRouteContext.js +11 -0
- package/dist/esm/useRouteContext.js.map +1 -0
- package/dist/esm/useRouter.d.ts +4 -0
- package/dist/esm/useRouter.js +12 -0
- package/dist/esm/useRouter.js.map +1 -0
- package/dist/esm/useRouterState.d.ts +8 -0
- package/dist/esm/useRouterState.js +20 -0
- package/dist/esm/useRouterState.js.map +1 -0
- package/dist/esm/useSearch.d.ts +9 -0
- package/dist/esm/useSearch.js +15 -0
- package/dist/esm/useSearch.js.map +1 -0
- package/dist/esm/utils.d.ts +40 -0
- package/dist/esm/utils.js +44 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/source/Asset.d.ts +2 -0
- package/dist/source/Asset.jsx +22 -0
- package/dist/source/Asset.jsx.map +1 -0
- package/dist/source/CatchBoundary.d.ts +19 -0
- package/dist/source/CatchBoundary.jsx +134 -0
- package/dist/source/CatchBoundary.jsx.map +1 -0
- package/dist/source/ClientOnly.d.ts +67 -0
- package/dist/source/ClientOnly.jsx +63 -0
- package/dist/source/ClientOnly.jsx.map +1 -0
- package/dist/source/HeadContent.d.ts +10 -0
- package/dist/source/HeadContent.jsx +133 -0
- package/dist/source/HeadContent.jsx.map +1 -0
- package/dist/source/Match.d.ts +25 -0
- package/dist/source/Match.jsx +316 -0
- package/dist/source/Match.jsx.map +1 -0
- package/dist/source/Matches.d.ts +39 -0
- package/dist/source/Matches.jsx +191 -0
- package/dist/source/Matches.jsx.map +1 -0
- package/dist/source/RouterProvider.d.ts +33 -0
- package/dist/source/RouterProvider.jsx +63 -0
- package/dist/source/RouterProvider.jsx.map +1 -0
- package/dist/source/SafeFragment.d.ts +4 -0
- package/dist/source/SafeFragment.jsx +10 -0
- package/dist/source/SafeFragment.jsx.map +1 -0
- package/dist/source/ScriptOnce.d.ts +5 -0
- package/dist/source/ScriptOnce.jsx +17 -0
- package/dist/source/ScriptOnce.jsx.map +1 -0
- package/dist/source/Scripts.d.ts +1 -0
- package/dist/source/Scripts.jsx +49 -0
- package/dist/source/Scripts.jsx.map +1 -0
- package/dist/source/ScrollRestoration.d.ts +14 -0
- package/dist/source/ScrollRestoration.jsx +37 -0
- package/dist/source/ScrollRestoration.jsx.map +1 -0
- package/dist/source/Transitioner.d.ts +2 -0
- package/dist/source/Transitioner.jsx +181 -0
- package/dist/source/Transitioner.jsx.map +1 -0
- package/dist/source/awaited.d.ts +12 -0
- package/dist/source/awaited.jsx +38 -0
- package/dist/source/awaited.jsx.map +1 -0
- package/dist/source/fileRoute.d.ts +54 -0
- package/dist/source/fileRoute.js +98 -0
- package/dist/source/fileRoute.js.map +1 -0
- package/dist/source/history.d.ts +8 -0
- package/dist/source/history.js +2 -0
- package/dist/source/history.js.map +1 -0
- package/dist/source/index.d.ts +51 -0
- package/dist/source/index.jsx +40 -0
- package/dist/source/index.jsx.map +1 -0
- package/dist/source/lazyRouteComponent.d.ts +8 -0
- package/dist/source/lazyRouteComponent.jsx +135 -0
- package/dist/source/lazyRouteComponent.jsx.map +1 -0
- package/dist/source/link.d.ts +61 -0
- package/dist/source/link.jsx +495 -0
- package/dist/source/link.jsx.map +1 -0
- package/dist/source/matchContext.d.ts +20 -0
- package/dist/source/matchContext.jsx +32 -0
- package/dist/source/matchContext.jsx.map +1 -0
- package/dist/source/not-found.d.ts +12 -0
- package/dist/source/not-found.jsx +48 -0
- package/dist/source/not-found.jsx.map +1 -0
- package/dist/source/renderRouteNotFound.d.ts +11 -0
- package/dist/source/renderRouteNotFound.jsx +24 -0
- package/dist/source/renderRouteNotFound.jsx.map +1 -0
- package/dist/source/route.d.ts +97 -0
- package/dist/source/route.js +167 -0
- package/dist/source/route.js.map +1 -0
- package/dist/source/router.d.ts +70 -0
- package/dist/source/router.js +10 -0
- package/dist/source/router.js.map +1 -0
- package/dist/source/routerContext.d.ts +21 -0
- package/dist/source/routerContext.jsx +37 -0
- package/dist/source/routerContext.jsx.map +1 -0
- package/dist/source/scroll-restoration.d.ts +1 -0
- package/dist/source/scroll-restoration.jsx +16 -0
- package/dist/source/scroll-restoration.jsx.map +1 -0
- package/dist/source/typePrimitives.d.ts +10 -0
- package/dist/source/typePrimitives.js +2 -0
- package/dist/source/typePrimitives.js.map +1 -0
- package/dist/source/useBlocker.d.ts +66 -0
- package/dist/source/useBlocker.jsx +308 -0
- package/dist/source/useBlocker.jsx.map +1 -0
- package/dist/source/useCanGoBack.d.ts +1 -0
- package/dist/source/useCanGoBack.js +5 -0
- package/dist/source/useCanGoBack.js.map +1 -0
- package/dist/source/useLoaderData.d.ts +8 -0
- package/dist/source/useLoaderData.jsx +11 -0
- package/dist/source/useLoaderData.jsx.map +1 -0
- package/dist/source/useLoaderDeps.d.ts +7 -0
- package/dist/source/useLoaderDeps.jsx +11 -0
- package/dist/source/useLoaderDeps.jsx.map +1 -0
- package/dist/source/useLocation.d.ts +7 -0
- package/dist/source/useLocation.jsx +7 -0
- package/dist/source/useLocation.jsx.map +1 -0
- package/dist/source/useMatch.d.ts +10 -0
- package/dist/source/useMatch.jsx +46 -0
- package/dist/source/useMatch.jsx.map +1 -0
- package/dist/source/useNavigate.d.ts +5 -0
- package/dist/source/useNavigate.jsx +18 -0
- package/dist/source/useNavigate.jsx.map +1 -0
- package/dist/source/useParams.d.ts +9 -0
- package/dist/source/useParams.jsx +12 -0
- package/dist/source/useParams.jsx.map +1 -0
- package/dist/source/useRouteContext.d.ts +4 -0
- package/dist/source/useRouteContext.js +8 -0
- package/dist/source/useRouteContext.js.map +1 -0
- package/dist/source/useRouter.d.ts +4 -0
- package/dist/source/useRouter.jsx +9 -0
- package/dist/source/useRouter.jsx.map +1 -0
- package/dist/source/useRouterState.d.ts +8 -0
- package/dist/source/useRouterState.jsx +19 -0
- package/dist/source/useRouterState.jsx.map +1 -0
- package/dist/source/useSearch.d.ts +9 -0
- package/dist/source/useSearch.jsx +12 -0
- package/dist/source/useSearch.jsx.map +1 -0
- package/dist/source/utils.d.ts +40 -0
- package/dist/source/utils.js +78 -0
- package/dist/source/utils.js.map +1 -0
- package/package.json +77 -7
- package/src/Asset.tsx +23 -0
- package/src/CatchBoundary.tsx +186 -0
- package/src/ClientOnly.tsx +75 -0
- package/src/HeadContent.tsx +159 -0
- package/src/Match.tsx +415 -0
- package/src/Matches.tsx +349 -0
- package/src/RouterProvider.tsx +117 -0
- package/src/SafeFragment.tsx +10 -0
- package/src/ScriptOnce.tsx +30 -0
- package/src/Scripts.tsx +65 -0
- package/src/ScrollRestoration.tsx +69 -0
- package/src/Transitioner.tsx +213 -0
- package/src/awaited.tsx +54 -0
- package/src/fileRoute.ts +271 -0
- package/src/history.ts +9 -0
- package/src/index.tsx +346 -0
- package/src/lazyRouteComponent.tsx +173 -0
- package/src/link.tsx +765 -0
- package/src/matchContext.tsx +41 -0
- package/src/not-found.tsx +55 -0
- package/src/renderRouteNotFound.tsx +35 -0
- package/src/route.ts +658 -0
- package/src/router.ts +103 -0
- package/src/routerContext.tsx +53 -0
- package/src/scroll-restoration.tsx +29 -0
- package/src/typePrimitives.ts +74 -0
- package/src/useBlocker.tsx +501 -0
- package/src/useCanGoBack.ts +5 -0
- package/src/useLoaderData.tsx +50 -0
- package/src/useLoaderDeps.tsx +46 -0
- package/src/useLocation.tsx +30 -0
- package/src/useMatch.tsx +127 -0
- package/src/useNavigate.tsx +40 -0
- package/src/useParams.tsx +71 -0
- package/src/useRouteContext.ts +31 -0
- package/src/useRouter.tsx +15 -0
- package/src/useRouterState.tsx +43 -0
- package/src/useSearch.tsx +71 -0
- package/src/utils.ts +111 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import * as Vue from 'vue';
|
|
2
|
+
import { useRouter } from './useRouter';
|
|
3
|
+
function _resolveBlockerOpts(opts, condition) {
|
|
4
|
+
if (opts === undefined) {
|
|
5
|
+
return {
|
|
6
|
+
shouldBlockFn: () => true,
|
|
7
|
+
withResolver: false,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
if ('shouldBlockFn' in opts) {
|
|
11
|
+
return opts;
|
|
12
|
+
}
|
|
13
|
+
if (typeof opts === 'function') {
|
|
14
|
+
const shouldBlock = Boolean(condition ?? true);
|
|
15
|
+
const _customBlockerFn = async () => {
|
|
16
|
+
if (shouldBlock)
|
|
17
|
+
return await opts();
|
|
18
|
+
return false;
|
|
19
|
+
};
|
|
20
|
+
return {
|
|
21
|
+
shouldBlockFn: _customBlockerFn,
|
|
22
|
+
enableBeforeUnload: shouldBlock,
|
|
23
|
+
withResolver: false,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const shouldBlock = Boolean(opts.condition ?? true);
|
|
27
|
+
const fn = opts.blockerFn;
|
|
28
|
+
const _customBlockerFn = async () => {
|
|
29
|
+
if (shouldBlock && fn !== undefined) {
|
|
30
|
+
return await fn();
|
|
31
|
+
}
|
|
32
|
+
return shouldBlock;
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
shouldBlockFn: _customBlockerFn,
|
|
36
|
+
enableBeforeUnload: shouldBlock,
|
|
37
|
+
withResolver: fn === undefined,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function useBlocker(opts, condition) {
|
|
41
|
+
const { shouldBlockFn, enableBeforeUnload = true, disabled = false, withResolver = false, } = _resolveBlockerOpts(opts, condition);
|
|
42
|
+
const router = useRouter();
|
|
43
|
+
const { history } = router;
|
|
44
|
+
const resolver = Vue.ref({
|
|
45
|
+
status: 'idle',
|
|
46
|
+
current: undefined,
|
|
47
|
+
next: undefined,
|
|
48
|
+
action: undefined,
|
|
49
|
+
proceed: undefined,
|
|
50
|
+
reset: undefined,
|
|
51
|
+
});
|
|
52
|
+
Vue.watchEffect((onCleanup) => {
|
|
53
|
+
const blockerFnComposed = async (blockerFnArgs) => {
|
|
54
|
+
function getLocation(location) {
|
|
55
|
+
const parsedLocation = router.parseLocation(location);
|
|
56
|
+
const matchedRoutes = router.getMatchedRoutes(parsedLocation.pathname);
|
|
57
|
+
if (matchedRoutes.foundRoute === undefined) {
|
|
58
|
+
return {
|
|
59
|
+
routeId: '__notFound__',
|
|
60
|
+
fullPath: parsedLocation.pathname,
|
|
61
|
+
pathname: parsedLocation.pathname,
|
|
62
|
+
params: matchedRoutes.routeParams,
|
|
63
|
+
search: parsedLocation.search,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
routeId: matchedRoutes.foundRoute.id,
|
|
68
|
+
fullPath: matchedRoutes.foundRoute.fullPath,
|
|
69
|
+
pathname: parsedLocation.pathname,
|
|
70
|
+
params: matchedRoutes.routeParams,
|
|
71
|
+
search: parsedLocation.search,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const current = getLocation(blockerFnArgs.currentLocation);
|
|
75
|
+
const next = getLocation(blockerFnArgs.nextLocation);
|
|
76
|
+
// Allow navigation away from 404 pages to valid routes
|
|
77
|
+
if (current.routeId === '__notFound__' &&
|
|
78
|
+
next.routeId !== '__notFound__') {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
const shouldBlock = await shouldBlockFn({
|
|
82
|
+
action: blockerFnArgs.action,
|
|
83
|
+
current,
|
|
84
|
+
next,
|
|
85
|
+
});
|
|
86
|
+
if (!withResolver) {
|
|
87
|
+
return shouldBlock;
|
|
88
|
+
}
|
|
89
|
+
if (!shouldBlock) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
const promise = new Promise((resolve) => {
|
|
93
|
+
resolver.value = {
|
|
94
|
+
status: 'blocked',
|
|
95
|
+
current,
|
|
96
|
+
next,
|
|
97
|
+
action: blockerFnArgs.action,
|
|
98
|
+
proceed: () => resolve(false),
|
|
99
|
+
reset: () => resolve(true),
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
const canNavigateAsync = await promise;
|
|
103
|
+
resolver.value = {
|
|
104
|
+
status: 'idle',
|
|
105
|
+
current: undefined,
|
|
106
|
+
next: undefined,
|
|
107
|
+
action: undefined,
|
|
108
|
+
proceed: undefined,
|
|
109
|
+
reset: undefined,
|
|
110
|
+
};
|
|
111
|
+
return canNavigateAsync;
|
|
112
|
+
};
|
|
113
|
+
if (disabled) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const unsubscribe = history.block({
|
|
117
|
+
blockerFn: blockerFnComposed,
|
|
118
|
+
enableBeforeUnload,
|
|
119
|
+
});
|
|
120
|
+
onCleanup(() => {
|
|
121
|
+
if (unsubscribe)
|
|
122
|
+
unsubscribe();
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
return withResolver ? resolver : undefined;
|
|
126
|
+
}
|
|
127
|
+
const _resolvePromptBlockerArgs = (props) => {
|
|
128
|
+
if ('shouldBlockFn' in props) {
|
|
129
|
+
return { ...props };
|
|
130
|
+
}
|
|
131
|
+
const shouldBlock = Boolean(props.condition ?? true);
|
|
132
|
+
const fn = props.blockerFn;
|
|
133
|
+
const _customBlockerFn = async () => {
|
|
134
|
+
if (shouldBlock && fn !== undefined) {
|
|
135
|
+
return await fn();
|
|
136
|
+
}
|
|
137
|
+
return shouldBlock;
|
|
138
|
+
};
|
|
139
|
+
return {
|
|
140
|
+
shouldBlockFn: _customBlockerFn,
|
|
141
|
+
enableBeforeUnload: shouldBlock,
|
|
142
|
+
withResolver: fn === undefined,
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
// Internal Block implementation as a proper Vue component for reactivity
|
|
146
|
+
const BlockImpl = Vue.defineComponent({
|
|
147
|
+
name: 'Block',
|
|
148
|
+
props: {
|
|
149
|
+
shouldBlockFn: {
|
|
150
|
+
type: Function,
|
|
151
|
+
required: false,
|
|
152
|
+
},
|
|
153
|
+
enableBeforeUnload: {
|
|
154
|
+
type: [Boolean, Function],
|
|
155
|
+
default: true,
|
|
156
|
+
},
|
|
157
|
+
disabled: {
|
|
158
|
+
type: Boolean,
|
|
159
|
+
default: false,
|
|
160
|
+
},
|
|
161
|
+
withResolver: {
|
|
162
|
+
type: Boolean,
|
|
163
|
+
default: false,
|
|
164
|
+
},
|
|
165
|
+
// Legacy props
|
|
166
|
+
blockerFn: {
|
|
167
|
+
type: Function,
|
|
168
|
+
required: false,
|
|
169
|
+
},
|
|
170
|
+
condition: {
|
|
171
|
+
type: [Boolean, Object],
|
|
172
|
+
required: false,
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
setup(props, { slots }) {
|
|
176
|
+
// Create a computed that resolves the blocker args reactively
|
|
177
|
+
const blockerArgs = Vue.computed(() => {
|
|
178
|
+
if (props.shouldBlockFn) {
|
|
179
|
+
return {
|
|
180
|
+
shouldBlockFn: props.shouldBlockFn,
|
|
181
|
+
enableBeforeUnload: props.enableBeforeUnload,
|
|
182
|
+
disabled: props.disabled,
|
|
183
|
+
withResolver: props.withResolver,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
// Legacy handling
|
|
187
|
+
const shouldBlock = Boolean(props.condition ?? true);
|
|
188
|
+
const fn = props.blockerFn;
|
|
189
|
+
const _customBlockerFn = async () => {
|
|
190
|
+
if (shouldBlock && fn !== undefined) {
|
|
191
|
+
return await fn();
|
|
192
|
+
}
|
|
193
|
+
return shouldBlock;
|
|
194
|
+
};
|
|
195
|
+
return {
|
|
196
|
+
shouldBlockFn: _customBlockerFn,
|
|
197
|
+
enableBeforeUnload: shouldBlock,
|
|
198
|
+
disabled: props.disabled,
|
|
199
|
+
withResolver: fn === undefined,
|
|
200
|
+
};
|
|
201
|
+
});
|
|
202
|
+
// Use a reactive useBlocker that re-subscribes when args change
|
|
203
|
+
const router = useRouter();
|
|
204
|
+
const { history } = router;
|
|
205
|
+
const resolver = Vue.ref({
|
|
206
|
+
status: 'idle',
|
|
207
|
+
current: undefined,
|
|
208
|
+
next: undefined,
|
|
209
|
+
action: undefined,
|
|
210
|
+
proceed: undefined,
|
|
211
|
+
reset: undefined,
|
|
212
|
+
});
|
|
213
|
+
Vue.watchEffect((onCleanup) => {
|
|
214
|
+
const args = blockerArgs.value;
|
|
215
|
+
if (args.disabled) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const blockerFnComposed = async (blockerFnArgs) => {
|
|
219
|
+
function getLocation(location) {
|
|
220
|
+
const parsedLocation = router.parseLocation(location);
|
|
221
|
+
const matchedRoutes = router.getMatchedRoutes(parsedLocation.pathname);
|
|
222
|
+
if (matchedRoutes.foundRoute === undefined) {
|
|
223
|
+
return {
|
|
224
|
+
routeId: '__notFound__',
|
|
225
|
+
fullPath: parsedLocation.pathname,
|
|
226
|
+
pathname: parsedLocation.pathname,
|
|
227
|
+
params: matchedRoutes.routeParams,
|
|
228
|
+
search: parsedLocation.search,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
routeId: matchedRoutes.foundRoute.id,
|
|
233
|
+
fullPath: matchedRoutes.foundRoute.fullPath,
|
|
234
|
+
pathname: parsedLocation.pathname,
|
|
235
|
+
params: matchedRoutes.routeParams,
|
|
236
|
+
search: parsedLocation.search,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
const current = getLocation(blockerFnArgs.currentLocation);
|
|
240
|
+
const next = getLocation(blockerFnArgs.nextLocation);
|
|
241
|
+
// Allow navigation away from 404 pages to valid routes
|
|
242
|
+
if (current.routeId === '__notFound__' &&
|
|
243
|
+
next.routeId !== '__notFound__') {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
const shouldBlock = await args.shouldBlockFn({
|
|
247
|
+
action: blockerFnArgs.action,
|
|
248
|
+
current,
|
|
249
|
+
next,
|
|
250
|
+
});
|
|
251
|
+
if (!args.withResolver) {
|
|
252
|
+
return shouldBlock;
|
|
253
|
+
}
|
|
254
|
+
if (!shouldBlock) {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
const promise = new Promise((resolve) => {
|
|
258
|
+
resolver.value = {
|
|
259
|
+
status: 'blocked',
|
|
260
|
+
current,
|
|
261
|
+
next,
|
|
262
|
+
action: blockerFnArgs.action,
|
|
263
|
+
proceed: () => resolve(false),
|
|
264
|
+
reset: () => resolve(true),
|
|
265
|
+
};
|
|
266
|
+
});
|
|
267
|
+
const canNavigateAsync = await promise;
|
|
268
|
+
resolver.value = {
|
|
269
|
+
status: 'idle',
|
|
270
|
+
current: undefined,
|
|
271
|
+
next: undefined,
|
|
272
|
+
action: undefined,
|
|
273
|
+
proceed: undefined,
|
|
274
|
+
reset: undefined,
|
|
275
|
+
};
|
|
276
|
+
return canNavigateAsync;
|
|
277
|
+
};
|
|
278
|
+
const unsubscribe = history.block({
|
|
279
|
+
blockerFn: blockerFnComposed,
|
|
280
|
+
enableBeforeUnload: args.enableBeforeUnload,
|
|
281
|
+
});
|
|
282
|
+
onCleanup(() => {
|
|
283
|
+
if (unsubscribe)
|
|
284
|
+
unsubscribe();
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
return () => {
|
|
288
|
+
const defaultSlot = slots.default;
|
|
289
|
+
if (!defaultSlot) {
|
|
290
|
+
return Vue.h(Vue.Fragment, null);
|
|
291
|
+
}
|
|
292
|
+
// If slot is a function that takes resolver, call it with the resolver
|
|
293
|
+
const slotContent = defaultSlot(resolver.value);
|
|
294
|
+
return Vue.h(Vue.Fragment, null, slotContent);
|
|
295
|
+
};
|
|
296
|
+
},
|
|
297
|
+
});
|
|
298
|
+
export function Block(opts) {
|
|
299
|
+
const { children, ...rest } = opts;
|
|
300
|
+
// Convert children to slot format for the component
|
|
301
|
+
const slots = children
|
|
302
|
+
? typeof children === 'function'
|
|
303
|
+
? { default: children }
|
|
304
|
+
: { default: () => children }
|
|
305
|
+
: undefined;
|
|
306
|
+
return Vue.h(BlockImpl, rest, slots);
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=useBlocker.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBlocker.jsx","sourceRoot":"","sources":["../../src/useBlocker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAkFvC,SAAS,mBAAmB,CAC1B,IAA2D,EAC3D,SAAyB;IAEzB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO;YACL,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;YACzB,YAAY,EAAE,KAAK;SACpB,CAAA;IACH,CAAC;IAED,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAA;QAE9C,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;YAClC,IAAI,WAAW;gBAAE,OAAO,MAAM,IAAI,EAAE,CAAA;YACpC,OAAO,KAAK,CAAA;QACd,CAAC,CAAA;QAED,OAAO;YACL,aAAa,EAAE,gBAAgB;YAC/B,kBAAkB,EAAE,WAAW;YAC/B,YAAY,EAAE,KAAK;SACpB,CAAA;IACH,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAA;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;IAEzB,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;QAClC,IAAI,WAAW,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,MAAM,EAAE,EAAE,CAAA;QACnB,CAAC;QACD,OAAO,WAAW,CAAA;IACpB,CAAC,CAAA;IAED,OAAO;QACL,aAAa,EAAE,gBAAgB;QAC/B,kBAAkB,EAAE,WAAW;QAC/B,YAAY,EAAE,EAAE,KAAK,SAAS;KAC/B,CAAA;AACH,CAAC;AAwBD,MAAM,UAAU,UAAU,CACxB,IAA2D,EAC3D,SAAyB;IAEzB,MAAM,EACJ,aAAa,EACb,kBAAkB,GAAG,IAAI,EACzB,QAAQ,GAAG,KAAK,EAChB,YAAY,GAAG,KAAK,GACrB,GAAG,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAExC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAE1B,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAkB;QACxC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,SAAS;KACjB,CAAC,CAAA;IAEF,GAAG,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,EAAE;QAC5B,MAAM,iBAAiB,GAAG,KAAK,EAAE,aAA4B,EAAE,EAAE;YAC/D,SAAS,WAAW,CAClB,QAAyB;gBAEzB,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;gBACrD,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;gBACtE,IAAI,aAAa,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC3C,OAAO;wBACL,OAAO,EAAE,cAAc;wBACvB,QAAQ,EAAE,cAAc,CAAC,QAAQ;wBACjC,QAAQ,EAAE,cAAc,CAAC,QAAQ;wBACjC,MAAM,EAAE,aAAa,CAAC,WAAW;wBACjC,MAAM,EAAE,cAAc,CAAC,MAAM;qBAC9B,CAAA;gBACH,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE;oBACpC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,QAAQ;oBAC3C,QAAQ,EAAE,cAAc,CAAC,QAAQ;oBACjC,MAAM,EAAE,aAAa,CAAC,WAAW;oBACjC,MAAM,EAAE,cAAc,CAAC,MAAM;iBAC9B,CAAA;YACH,CAAC;YAED,MAAM,OAAO,GAAG,WAAW,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;YAC1D,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;YAEpD,uDAAuD;YACvD,IACE,OAAO,CAAC,OAAO,KAAK,cAAc;gBAClC,IAAI,CAAC,OAAO,KAAK,cAAc,EAC/B,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC;gBACtC,MAAM,EAAE,aAAa,CAAC,MAAM;gBAC5B,OAAO;gBACP,IAAI;aACL,CAAC,CAAA;YACF,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,WAAW,CAAA;YACpB,CAAC;YAED,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,KAAK,CAAA;YACd,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;gBAC/C,QAAQ,CAAC,KAAK,GAAG;oBACf,MAAM,EAAE,SAAS;oBACjB,OAAO;oBACP,IAAI;oBACJ,MAAM,EAAE,aAAa,CAAC,MAAM;oBAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;oBAC7B,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;iBAC3B,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAA;YACtC,QAAQ,CAAC,KAAK,GAAG;gBACf,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,SAAS;gBAClB,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,SAAS;gBAClB,KAAK,EAAE,SAAS;aACjB,CAAA;YAED,OAAO,gBAAgB,CAAA;QACzB,CAAC,CAAA;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,OAAM;QACR,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;YAChC,SAAS,EAAE,iBAAiB;YAC5B,kBAAkB;SACnB,CAAC,CAAA;QAEF,SAAS,CAAC,GAAG,EAAE;YACb,IAAI,WAAW;gBAAE,WAAW,EAAE,CAAA;QAChC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AAC5C,CAAC;AAED,MAAM,yBAAyB,GAAG,CAChC,KAAsC,EACtB,EAAE;IAClB,IAAI,eAAe,IAAI,KAAK,EAAE,CAAC;QAC7B,OAAO,EAAE,GAAG,KAAK,EAAE,CAAA;IACrB,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,CAAA;IACpD,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAA;IAE1B,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;QAClC,IAAI,WAAW,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,MAAM,EAAE,EAAE,CAAA;QACnB,CAAC;QACD,OAAO,WAAW,CAAA;IACpB,CAAC,CAAA;IAED,OAAO;QACL,aAAa,EAAE,gBAAgB;QAC/B,kBAAkB,EAAE,WAAW;QAC/B,YAAY,EAAE,EAAE,KAAK,SAAS;KAC/B,CAAA;AACH,CAAC,CAAA;AAED,yEAAyE;AACzE,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC;IACpC,IAAI,EAAE,OAAO;IACb,KAAK,EAAE;QACL,aAAa,EAAE;YACb,IAAI,EAAE,QAA4C;YAClD,QAAQ,EAAE,KAAK;SAChB;QACD,kBAAkB,EAAE;YAClB,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,CAA4C;YACpE,OAAO,EAAE,IAAI;SACd;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK;SACf;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK;SACf;QACD,eAAe;QACf,SAAS,EAAE;YACT,IAAI,EAAE,QAAyC;YAC/C,QAAQ,EAAE,KAAK;SAChB;QACD,SAAS,EAAE;YACT,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAgC;YACtD,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;QACpB,8DAA8D;QAC9D,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAiB,GAAG,EAAE;YACpD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACxB,OAAO;oBACL,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;oBAC5C,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,YAAY,EAAE,KAAK,CAAC,YAAY;iBACjC,CAAA;YACH,CAAC;YAED,kBAAkB;YAClB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,CAAA;YACpD,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAA;YAE1B,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;gBAClC,IAAI,WAAW,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;oBACpC,OAAO,MAAM,EAAE,EAAE,CAAA;gBACnB,CAAC;gBACD,OAAO,WAAW,CAAA;YACpB,CAAC,CAAA;YAED,OAAO;gBACL,aAAa,EAAE,gBAAgB;gBAC/B,kBAAkB,EAAE,WAAW;gBAC/B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,YAAY,EAAE,EAAE,KAAK,SAAS;aAC/B,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,gEAAgE;QAChE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;QAE1B,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAkB;YACxC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAA;QAEF,GAAG,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAA;YAE9B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAM;YACR,CAAC;YAED,MAAM,iBAAiB,GAAG,KAAK,EAAE,aAA4B,EAAE,EAAE;gBAC/D,SAAS,WAAW,CAClB,QAAyB;oBAEzB,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;oBACrD,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;oBACtE,IAAI,aAAa,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;wBAC3C,OAAO;4BACL,OAAO,EAAE,cAAc;4BACvB,QAAQ,EAAE,cAAc,CAAC,QAAQ;4BACjC,QAAQ,EAAE,cAAc,CAAC,QAAQ;4BACjC,MAAM,EAAE,aAAa,CAAC,WAAW;4BACjC,MAAM,EAAE,cAAc,CAAC,MAAM;yBAC9B,CAAA;oBACH,CAAC;oBACD,OAAO;wBACL,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE;wBACpC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,QAAQ;wBAC3C,QAAQ,EAAE,cAAc,CAAC,QAAQ;wBACjC,MAAM,EAAE,aAAa,CAAC,WAAW;wBACjC,MAAM,EAAE,cAAc,CAAC,MAAM;qBAC9B,CAAA;gBACH,CAAC;gBAED,MAAM,OAAO,GAAG,WAAW,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;gBAC1D,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;gBAEpD,uDAAuD;gBACvD,IACE,OAAO,CAAC,OAAO,KAAK,cAAc;oBAClC,IAAI,CAAC,OAAO,KAAK,cAAc,EAC/B,CAAC;oBACD,OAAO,KAAK,CAAA;gBACd,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC;oBAC3C,MAAM,EAAE,aAAa,CAAC,MAAM;oBAC5B,OAAO;oBACP,IAAI;iBACL,CAAC,CAAA;gBACF,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBACvB,OAAO,WAAW,CAAA;gBACpB,CAAC;gBAED,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,OAAO,KAAK,CAAA;gBACd,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;oBAC/C,QAAQ,CAAC,KAAK,GAAG;wBACf,MAAM,EAAE,SAAS;wBACjB,OAAO;wBACP,IAAI;wBACJ,MAAM,EAAE,aAAa,CAAC,MAAM;wBAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;wBAC7B,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;qBAC3B,CAAA;gBACH,CAAC,CAAC,CAAA;gBAEF,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAA;gBACtC,QAAQ,CAAC,KAAK,GAAG;oBACf,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,SAAS;oBAClB,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,SAAS;oBAClB,KAAK,EAAE,SAAS;iBACjB,CAAA;gBAED,OAAO,gBAAgB,CAAA;YACzB,CAAC,CAAA;YAED,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;gBAChC,SAAS,EAAE,iBAAiB;gBAC5B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;aAC5C,CAAC,CAAA;YAEF,SAAS,CAAC,GAAG,EAAE;gBACb,IAAI,WAAW;oBAAE,WAAW,EAAE,CAAA;YAChC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE;YACV,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAA;YACjC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAClC,CAAC;YAED,uEAAuE;YACvE,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAY,CAAC,CAAA;YACtD,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;QAC/C,CAAC,CAAA;IACH,CAAC;CACF,CAAC,CAAA;AAYF,MAAM,UAAU,KAAK,CAAC,IAAqC;IACzD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IAElC,oDAAoD;IACpD,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAC,OAAO,QAAQ,KAAK,UAAU;YAC9B,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE;YACvB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC/B,CAAC,CAAC,SAAS,CAAA;IAEb,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAW,EAAE,KAAK,CAAC,CAAA;AAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useCanGoBack(): import("vue").Ref<boolean, boolean>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCanGoBack.js","sourceRoot":"","sources":["../../src/useCanGoBack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,UAAU,YAAY;IAC1B,OAAO,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC,CAAA;AAC9E,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type * as Vue from 'vue';
|
|
2
|
+
import type { AnyRouter, RegisteredRouter, ResolveUseLoaderData, StrictOrFrom, UseLoaderDataResult } from '@tanstack/router-core';
|
|
3
|
+
export interface UseLoaderDataBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> {
|
|
4
|
+
select?: (match: ResolveUseLoaderData<TRouter, TFrom, TStrict>) => TSelected;
|
|
5
|
+
}
|
|
6
|
+
export type UseLoaderDataOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected>;
|
|
7
|
+
export type UseLoaderDataRoute<out TId> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected>) => Vue.Ref<UseLoaderDataResult<TRouter, TId, true, TSelected>>;
|
|
8
|
+
export declare function useLoaderData<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSelected = unknown>(opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected>): Vue.Ref<UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useMatch } from './useMatch';
|
|
2
|
+
export function useLoaderData(opts) {
|
|
3
|
+
return useMatch({
|
|
4
|
+
from: opts.from,
|
|
5
|
+
strict: opts.strict,
|
|
6
|
+
select: (s) => {
|
|
7
|
+
return opts.select ? opts.select(s.loaderData) : s.loaderData;
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=useLoaderData.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLoaderData.jsx","sourceRoot":"","sources":["../../src/useLoaderData.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAkCrC,MAAM,UAAU,aAAa,CAM3B,IAA8D;IAE9D,OAAO,QAAQ,CAAC;QACd,IAAI,EAAE,IAAI,CAAC,IAAK;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,CAAC,CAAM,EAAE,EAAE;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;QAC/D,CAAC;KACK,CAAQ,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AnyRouter, RegisteredRouter, ResolveUseLoaderDeps, StrictOrFrom, UseLoaderDepsResult } from '@tanstack/router-core';
|
|
2
|
+
export interface UseLoaderDepsBaseOptions<TRouter extends AnyRouter, TFrom, TSelected> {
|
|
3
|
+
select?: (deps: ResolveUseLoaderDeps<TRouter, TFrom>) => TSelected;
|
|
4
|
+
}
|
|
5
|
+
export type UseLoaderDepsOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TSelected> = StrictOrFrom<TRouter, TFrom> & UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>;
|
|
6
|
+
export type UseLoaderDepsRoute<out TId> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>) => UseLoaderDepsResult<TRouter, TId, TSelected>;
|
|
7
|
+
export declare function useLoaderDeps<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TSelected = unknown>(opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>): UseLoaderDepsResult<TRouter, TFrom, TSelected>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useMatch } from './useMatch';
|
|
2
|
+
export function useLoaderDeps(opts) {
|
|
3
|
+
const { select, ...rest } = opts;
|
|
4
|
+
return useMatch({
|
|
5
|
+
...rest,
|
|
6
|
+
select: (s) => {
|
|
7
|
+
return select ? select(s.loaderDeps) : s.loaderDeps;
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=useLoaderDeps.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLoaderDeps.jsx","sourceRoot":"","sources":["../../src/useLoaderDeps.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA+BrC,MAAM,UAAU,aAAa,CAK3B,IAAqD;IAErD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IAChC,OAAO,QAAQ,CAAC;QACd,GAAG,IAAI;QACP,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACZ,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;QACrD,CAAC;KACF,CAAmD,CAAA;AACtD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AnyRouter, RegisteredRouter, RouterState } from '@tanstack/router-core';
|
|
2
|
+
import type * as Vue from 'vue';
|
|
3
|
+
export interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected> {
|
|
4
|
+
select?: (state: RouterState<TRouter['routeTree']>['location']) => TSelected;
|
|
5
|
+
}
|
|
6
|
+
export type UseLocationResult<TRouter extends AnyRouter, TSelected> = unknown extends TSelected ? RouterState<TRouter['routeTree']>['location'] : TSelected;
|
|
7
|
+
export declare function useLocation<TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLocationBaseOptions<TRouter, TSelected>): Vue.Ref<UseLocationResult<TRouter, TSelected>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLocation.jsx","sourceRoot":"","sources":["../../src/useLocation.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAmBjD,MAAM,UAAU,WAAW,CAIzB,IAAiD;IAEjD,OAAO,cAAc,CAAC;QACpB,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE,CACrB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;KACvD,CAAmD,CAAA;AAC7D,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as Vue from 'vue';
|
|
2
|
+
import type { AnyRouter, MakeRouteMatch, MakeRouteMatchUnion, RegisteredRouter, StrictOrFrom, ThrowConstraint, ThrowOrOptional } from '@tanstack/router-core';
|
|
3
|
+
export interface UseMatchBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> {
|
|
4
|
+
select?: (match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>) => TSelected;
|
|
5
|
+
shouldThrow?: TThrow;
|
|
6
|
+
}
|
|
7
|
+
export type UseMatchRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>) => Vue.Ref<UseMatchResult<TRouter, TFrom, true, TSelected>>;
|
|
8
|
+
export type UseMatchOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TThrow extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
|
|
9
|
+
export type UseMatchResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? TStrict extends true ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict> : MakeRouteMatchUnion<TRouter> : TSelected;
|
|
10
|
+
export declare function useMatch<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TThrow extends boolean = true, TSelected = unknown>(opts: UseMatchOptions<TRouter, TFrom, TStrict, ThrowConstraint<TStrict, TThrow>, TSelected>): Vue.Ref<ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as Vue from 'vue';
|
|
2
|
+
import { useRouterState } from './useRouterState';
|
|
3
|
+
import { injectDummyMatch, injectMatch } from './matchContext';
|
|
4
|
+
export function useMatch(opts) {
|
|
5
|
+
const nearestMatchId = opts.from ? injectDummyMatch() : injectMatch();
|
|
6
|
+
// Store to track pending error for deferred throwing
|
|
7
|
+
const pendingError = Vue.ref(null);
|
|
8
|
+
// Select the match from router state
|
|
9
|
+
const matchSelection = useRouterState({
|
|
10
|
+
select: (state) => {
|
|
11
|
+
const match = state.matches.find((d) => opts.from ? opts.from === d.routeId : d.id === nearestMatchId.value);
|
|
12
|
+
if (match === undefined) {
|
|
13
|
+
// During navigation transitions, check if the match exists in pendingMatches
|
|
14
|
+
const pendingMatch = state.pendingMatches?.find((d) => opts.from ? opts.from === d.routeId : d.id === nearestMatchId.value);
|
|
15
|
+
// If there's a pending match or we're transitioning, return undefined without throwing
|
|
16
|
+
if (pendingMatch || state.isTransitioning) {
|
|
17
|
+
pendingError.value = null;
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
// Store the error to throw later if shouldThrow is enabled
|
|
21
|
+
if (opts.shouldThrow ?? true) {
|
|
22
|
+
pendingError.value = new Error(`Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`);
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
pendingError.value = null;
|
|
27
|
+
return opts.select ? opts.select(match) : match;
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
// Throw the error if we have one - this happens after the selector runs
|
|
31
|
+
// Using a computed so the error is thrown when the return value is accessed
|
|
32
|
+
const result = Vue.computed(() => {
|
|
33
|
+
// Check for pending error first
|
|
34
|
+
if (pendingError.value) {
|
|
35
|
+
throw pendingError.value;
|
|
36
|
+
}
|
|
37
|
+
return matchSelection.value;
|
|
38
|
+
});
|
|
39
|
+
// Also immediately throw if there's already an error from initial render
|
|
40
|
+
// This ensures errors are thrown even if the returned ref is never accessed
|
|
41
|
+
if (pendingError.value) {
|
|
42
|
+
throw pendingError.value;
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=useMatch.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMatch.jsx","sourceRoot":"","sources":["../../src/useMatch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAmD9D,MAAM,UAAU,QAAQ,CAOtB,IAMC;IAID,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IAErE,qDAAqD;IACrD,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAe,IAAI,CAAC,CAAA;IAEhD,qCAAqC;IACrC,MAAM,cAAc,GAAG,cAAc,CAAC;QACpC,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE;YACrB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAC1C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,KAAK,CACpE,CAAA;YAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,6EAA6E;gBAC7E,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CACzD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,KAAK,CACpE,CAAA;gBAED,uFAAuF;gBACvF,IAAI,YAAY,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;oBAC1C,YAAY,CAAC,KAAK,GAAG,IAAI,CAAA;oBACzB,OAAO,SAAS,CAAA;gBAClB,CAAC;gBAED,2DAA2D;gBAC3D,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;oBAC7B,YAAY,CAAC,KAAK,GAAG,IAAI,KAAK,CAC5B,oCAAoC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAC7G,CAAA;gBACH,CAAC;gBAED,OAAO,SAAS,CAAA;YAClB,CAAC;YAED,YAAY,CAAC,KAAK,GAAG,IAAI,CAAA;YACzB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACjD,CAAC;KACK,CAAC,CAAA;IAET,wEAAwE;IACxE,4EAA4E;IAC5E,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC/B,gCAAgC;QAChC,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,YAAY,CAAC,KAAK,CAAA;QAC1B,CAAC;QACD,OAAO,cAAc,CAAC,KAAK,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,yEAAyE;IACzE,4EAA4E;IAC5E,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,YAAY,CAAC,KAAK,CAAA;IAC1B,CAAC;IAED,OAAO,MAAa,CAAA;AACtB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AnyRouter, FromPathOption, NavigateOptions, RegisteredRouter, UseNavigateResult } from '@tanstack/router-core';
|
|
2
|
+
export declare function useNavigate<TRouter extends AnyRouter = RegisteredRouter, TDefaultFrom extends string = string>(_defaultOpts?: {
|
|
3
|
+
from?: FromPathOption<TRouter, TDefaultFrom>;
|
|
4
|
+
}): UseNavigateResult<TDefaultFrom>;
|
|
5
|
+
export declare function Navigate<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string = string, const TTo extends string | undefined = undefined, const TMaskFrom extends string = TFrom, const TMaskTo extends string = ''>(props: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as Vue from 'vue';
|
|
2
|
+
import { useRouter } from './useRouter';
|
|
3
|
+
export function useNavigate(_defaultOpts) {
|
|
4
|
+
const { navigate } = useRouter();
|
|
5
|
+
return ((options) => {
|
|
6
|
+
return navigate({ from: _defaultOpts?.from, ...options });
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
export function Navigate(props) {
|
|
10
|
+
const { navigate } = useRouter();
|
|
11
|
+
Vue.onMounted(() => {
|
|
12
|
+
navigate({
|
|
13
|
+
...props,
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=useNavigate.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNavigate.jsx","sourceRoot":"","sources":["../../src/useNavigate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AASvC,MAAM,UAAU,WAAW,CAGzB,YAED;IACC,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAA;IAEhC,OAAO,CAAC,CAAC,OAAwB,EAAE,EAAE;QACnC,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;IAC3D,CAAC,CAAoC,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,QAAQ,CAMtB,KAA+D;IAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAA;IAEhC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,QAAQ,CAAC;YACP,GAAG,KAAK;SACT,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type * as Vue from 'vue';
|
|
2
|
+
import type { AnyRouter, RegisteredRouter, ResolveUseParams, StrictOrFrom, ThrowConstraint, ThrowOrOptional, UseParamsResult } from '@tanstack/router-core';
|
|
3
|
+
export interface UseParamsBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> {
|
|
4
|
+
select?: (params: ResolveUseParams<TRouter, TFrom, TStrict>) => TSelected;
|
|
5
|
+
shouldThrow?: TThrow;
|
|
6
|
+
}
|
|
7
|
+
export type UseParamsOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TThrow extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseParamsBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
|
|
8
|
+
export type UseParamsRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseParamsBaseOptions<TRouter, TFrom, true, true, TSelected>) => Vue.Ref<UseParamsResult<TRouter, TFrom, true, TSelected>>;
|
|
9
|
+
export declare function useParams<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TThrow extends boolean = true, TSelected = unknown>(opts: UseParamsOptions<TRouter, TFrom, TStrict, ThrowConstraint<TStrict, TThrow>, TSelected>): Vue.Ref<ThrowOrOptional<UseParamsResult<TRouter, TFrom, TStrict, TSelected>, TThrow>>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { useMatch } from './useMatch';
|
|
2
|
+
export function useParams(opts) {
|
|
3
|
+
return useMatch({
|
|
4
|
+
from: opts.from,
|
|
5
|
+
strict: opts.strict,
|
|
6
|
+
shouldThrow: opts.shouldThrow,
|
|
7
|
+
select: (match) => {
|
|
8
|
+
return opts.select ? opts.select(match.params) : match.params;
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=useParams.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useParams.jsx","sourceRoot":"","sources":["../../src/useParams.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA6CrC,MAAM,UAAU,SAAS,CAOvB,IAMC;IAID,OAAO,QAAQ,CAAC;QACd,IAAI,EAAE,IAAI,CAAC,IAAK;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE;YACrB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAA;QAC/D,CAAC;KACK,CAAQ,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type * as Vue from 'vue';
|
|
2
|
+
import type { AnyRouter, RegisteredRouter, UseRouteContextBaseOptions, UseRouteContextOptions, UseRouteContextResult } from '@tanstack/router-core';
|
|
3
|
+
export type UseRouteContextRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseRouteContextBaseOptions<TRouter, TFrom, true, TSelected>) => Vue.Ref<UseRouteContextResult<TRouter, TFrom, true, TSelected>>;
|
|
4
|
+
export declare function useRouteContext<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSelected = unknown>(opts: UseRouteContextOptions<TRouter, TFrom, TStrict, TSelected>): Vue.Ref<UseRouteContextResult<TRouter, TFrom, TStrict, TSelected>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRouteContext.js","sourceRoot":"","sources":["../../src/useRouteContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAiBrC,MAAM,UAAU,eAAe,CAM7B,IAAgE;IAEhE,OAAO,QAAQ,CAAC;QACd,GAAI,IAAY;QAChB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;KAC3D,CAAQ,CAAA;AACX,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as Vue from 'vue';
|
|
2
|
+
import warning from 'tiny-warning';
|
|
3
|
+
import { getRouterContext } from './routerContext';
|
|
4
|
+
export function useRouter(opts) {
|
|
5
|
+
const value = Vue.inject(getRouterContext(), null);
|
|
6
|
+
warning(!((opts?.warn ?? true) && !value), 'useRouter must be used inside a <RouterProvider> component!');
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=useRouter.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRouter.jsx","sourceRoot":"","sources":["../../src/useRouter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAGlD,MAAM,UAAU,SAAS,CAA+C,IAEvE;IACC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAS,EAAE,IAAI,CAAC,CAAA;IACzD,OAAO,CACL,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EACjC,6DAA6D,CAC9D,CAAA;IACD,OAAO,KAAY,CAAA;AACrB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as Vue from 'vue';
|
|
2
|
+
import type { AnyRouter, RegisteredRouter, RouterState } from '@tanstack/router-core';
|
|
3
|
+
export type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {
|
|
4
|
+
router?: TRouter;
|
|
5
|
+
select?: (state: RouterState<TRouter['routeTree']>) => TSelected;
|
|
6
|
+
};
|
|
7
|
+
export type UseRouterStateResult<TRouter extends AnyRouter, TSelected> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected;
|
|
8
|
+
export declare function useRouterState<TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseRouterStateOptions<TRouter, TSelected>): Vue.Ref<UseRouterStateResult<TRouter, TSelected>>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useStore } from '@tanstack/vue-store';
|
|
2
|
+
import * as Vue from 'vue';
|
|
3
|
+
import { useRouter } from './useRouter';
|
|
4
|
+
export function useRouterState(opts) {
|
|
5
|
+
const contextRouter = useRouter({
|
|
6
|
+
warn: opts?.router === undefined,
|
|
7
|
+
});
|
|
8
|
+
const router = opts?.router || contextRouter;
|
|
9
|
+
// Return a safe default if router is undefined
|
|
10
|
+
if (!router || !router.__store) {
|
|
11
|
+
return Vue.ref(undefined);
|
|
12
|
+
}
|
|
13
|
+
return useStore(router.__store, (state) => {
|
|
14
|
+
if (opts?.select)
|
|
15
|
+
return opts.select(state);
|
|
16
|
+
return state;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=useRouterState.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRouterState.jsx","sourceRoot":"","sources":["../../src/useRouterState.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAiBvC,MAAM,UAAU,cAAc,CAI5B,IAAgD;IAEhD,MAAM,aAAa,GAAG,SAAS,CAAU;QACvC,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS;KACjC,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,aAAa,CAAA;IAE5C,+CAA+C;IAC/C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,GAAG,CAAC,SAAS,CAEvB,CAAA;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACxC,IAAI,IAAI,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAE3C,OAAO,KAAK,CAAA;IACd,CAAC,CAAsD,CAAA;AACzD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type * as Vue from 'vue';
|
|
2
|
+
import type { AnyRouter, RegisteredRouter, ResolveUseSearch, StrictOrFrom, ThrowConstraint, ThrowOrOptional, UseSearchResult } from '@tanstack/router-core';
|
|
3
|
+
export interface UseSearchBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> {
|
|
4
|
+
select?: (state: ResolveUseSearch<TRouter, TFrom, TStrict>) => TSelected;
|
|
5
|
+
shouldThrow?: TThrow;
|
|
6
|
+
}
|
|
7
|
+
export type UseSearchOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseSearchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
|
|
8
|
+
export type UseSearchRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseSearchBaseOptions<TRouter, TFrom, true, true, TSelected>) => Vue.Ref<UseSearchResult<TRouter, TFrom, true, TSelected>>;
|
|
9
|
+
export declare function useSearch<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TThrow extends boolean = true, TSelected = unknown>(opts: UseSearchOptions<TRouter, TFrom, TStrict, ThrowConstraint<TStrict, TThrow>, TSelected>): Vue.Ref<ThrowOrOptional<UseSearchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>>;
|