@tanstack/react-router 0.0.1-beta.166 → 0.0.1-beta.167
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/build/cjs/deferred.js +45 -0
- package/build/cjs/deferred.js.map +1 -0
- package/build/cjs/index.js +5 -4
- package/build/cjs/index.js.map +1 -1
- package/build/esm/index.js +29 -6
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +114 -76
- package/build/types/index.d.ts +52 -4
- package/build/umd/index.development.js +90 -19
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +3 -3
- package/src/deferred.tsx +40 -0
- package/src/index.tsx +105 -9
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/react-router",
|
|
3
3
|
"author": "Tanner Linsley",
|
|
4
|
-
"version": "0.0.1-beta.
|
|
4
|
+
"version": "0.0.1-beta.167",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "tanstack/router",
|
|
7
7
|
"homepage": "https://tanstack.com/router",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"tiny-invariant": "^1.3.1",
|
|
44
44
|
"tiny-warning": "^1.0.3",
|
|
45
45
|
"@gisatcz/cross-package-react-context": "^0.2.0",
|
|
46
|
-
"@tanstack/router-core": "0.0.1-beta.
|
|
47
|
-
"@tanstack/react-store": "0.0.1-beta.
|
|
46
|
+
"@tanstack/router-core": "0.0.1-beta.167",
|
|
47
|
+
"@tanstack/react-store": "0.0.1-beta.167"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
|
50
50
|
"build": "rollup --config rollup.config.js"
|
package/src/deferred.tsx
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { DeferredPromise, isDehydratedDeferred } from '@tanstack/router-core'
|
|
2
|
+
import { useRouter } from '.'
|
|
3
|
+
|
|
4
|
+
export type DeferredOptions<T> = {
|
|
5
|
+
promise: DeferredPromise<T>
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function useDeferred<T>({ promise }: DeferredOptions<T>): [T] {
|
|
9
|
+
const router = useRouter()
|
|
10
|
+
|
|
11
|
+
let state = promise.__deferredState
|
|
12
|
+
const key = `__TSR__DEFERRED__${state.uid}`
|
|
13
|
+
|
|
14
|
+
if (isDehydratedDeferred(promise)) {
|
|
15
|
+
state = router.hydrateData(key)!
|
|
16
|
+
promise = Promise.resolve(state.data) as DeferredPromise<any>
|
|
17
|
+
promise.__deferredState = state
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (state.status === 'pending') {
|
|
21
|
+
throw promise
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (state.status === 'error') {
|
|
25
|
+
throw state.error
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
router.dehydrateData(key, state)
|
|
29
|
+
|
|
30
|
+
return [state.data]
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function Deferred<T>(
|
|
34
|
+
props: DeferredOptions<T> & {
|
|
35
|
+
children: (result: T) => JSX.Element
|
|
36
|
+
},
|
|
37
|
+
) {
|
|
38
|
+
const awaited = useDeferred(props)
|
|
39
|
+
return props.children(...awaited)
|
|
40
|
+
}
|
package/src/index.tsx
CHANGED
|
@@ -36,21 +36,23 @@ import {
|
|
|
36
36
|
ParseRoute,
|
|
37
37
|
AllParams,
|
|
38
38
|
rootRouteId,
|
|
39
|
+
AnyPathParams,
|
|
39
40
|
} from '@tanstack/router-core'
|
|
40
41
|
|
|
41
42
|
//
|
|
42
43
|
|
|
43
44
|
export * from '@tanstack/router-core'
|
|
44
45
|
export * from './scroll-restoration'
|
|
46
|
+
export * from './deferred'
|
|
45
47
|
|
|
46
48
|
export { useStore }
|
|
47
49
|
|
|
48
50
|
declare module '@tanstack/router-core' {
|
|
49
|
-
interface RegisterRouteComponent<TProps
|
|
51
|
+
interface RegisterRouteComponent<TProps> {
|
|
50
52
|
RouteComponent: RouteComponent<TProps>
|
|
51
53
|
}
|
|
52
54
|
|
|
53
|
-
interface RegisterRouteErrorComponent<TProps
|
|
55
|
+
interface RegisterRouteErrorComponent<TProps> {
|
|
54
56
|
RouteErrorComponent: RouteComponent<TProps>
|
|
55
57
|
}
|
|
56
58
|
|
|
@@ -129,6 +131,102 @@ declare module '@tanstack/router-core' {
|
|
|
129
131
|
select?: (search: TAllParams) => TSelected
|
|
130
132
|
}) => TStrict extends true ? TSelected : TSelected | undefined
|
|
131
133
|
}
|
|
134
|
+
|
|
135
|
+
interface RegisterRouteProps<
|
|
136
|
+
TLoader = unknown,
|
|
137
|
+
TFullSearchSchema extends AnySearchSchema = AnySearchSchema,
|
|
138
|
+
TAllParams extends AnyPathParams = AnyPathParams,
|
|
139
|
+
TRouteContext extends AnyContext = AnyContext,
|
|
140
|
+
TAllContext extends AnyContext = AnyContext,
|
|
141
|
+
> {
|
|
142
|
+
RouteProps: RouteProps<
|
|
143
|
+
TLoader,
|
|
144
|
+
TFullSearchSchema,
|
|
145
|
+
TAllParams,
|
|
146
|
+
TRouteContext,
|
|
147
|
+
TAllContext
|
|
148
|
+
>
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
interface RegisterPendingRouteProps<
|
|
152
|
+
TFullSearchSchema extends AnySearchSchema = AnySearchSchema,
|
|
153
|
+
TAllParams extends AnyPathParams = AnyPathParams,
|
|
154
|
+
TRouteContext extends AnyContext = AnyContext,
|
|
155
|
+
TAllContext extends AnyContext = AnyContext,
|
|
156
|
+
> {
|
|
157
|
+
PendingRouteProps: Omit<
|
|
158
|
+
RouteProps<
|
|
159
|
+
unknown,
|
|
160
|
+
TFullSearchSchema,
|
|
161
|
+
TAllParams,
|
|
162
|
+
TRouteContext,
|
|
163
|
+
TAllContext
|
|
164
|
+
>,
|
|
165
|
+
'useLoader'
|
|
166
|
+
>
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
interface RegisterErrorRouteProps<
|
|
170
|
+
TFullSearchSchema extends AnySearchSchema = AnySearchSchema,
|
|
171
|
+
TAllParams extends AnyPathParams = AnyPathParams,
|
|
172
|
+
TRouteContext extends AnyContext = AnyContext,
|
|
173
|
+
TAllContext extends AnyContext = AnyContext,
|
|
174
|
+
> {
|
|
175
|
+
ErrorRouteProps: {
|
|
176
|
+
error: unknown
|
|
177
|
+
info: { componentStack: string }
|
|
178
|
+
} & Omit<
|
|
179
|
+
RouteProps<
|
|
180
|
+
unknown,
|
|
181
|
+
TFullSearchSchema,
|
|
182
|
+
TAllParams,
|
|
183
|
+
TRouteContext,
|
|
184
|
+
TAllContext
|
|
185
|
+
>,
|
|
186
|
+
'useLoader'
|
|
187
|
+
>
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export type RouteProps<
|
|
192
|
+
TLoader = unknown,
|
|
193
|
+
TFullSearchSchema extends AnySearchSchema = AnySearchSchema,
|
|
194
|
+
TAllParams extends AnyPathParams = AnyPathParams,
|
|
195
|
+
TRouteContext extends AnyContext = AnyContext,
|
|
196
|
+
TAllContext extends AnyContext = AnyContext,
|
|
197
|
+
> = {
|
|
198
|
+
useLoader: <TStrict extends boolean = true, TSelected = TLoader>(opts?: {
|
|
199
|
+
strict?: TStrict
|
|
200
|
+
select?: (search: TLoader) => TSelected
|
|
201
|
+
}) => TStrict extends true
|
|
202
|
+
? UseLoaderResult<TSelected>
|
|
203
|
+
: UseLoaderResult<TSelected> | undefined
|
|
204
|
+
useMatch: <TStrict extends boolean = true, TSelected = TAllContext>(opts?: {
|
|
205
|
+
strict?: TStrict
|
|
206
|
+
select?: (search: TAllContext) => TSelected
|
|
207
|
+
}) => TStrict extends true ? TSelected : TSelected | undefined
|
|
208
|
+
useContext: <TStrict extends boolean = true, TSelected = TAllContext>(opts?: {
|
|
209
|
+
strict?: TStrict
|
|
210
|
+
select?: (search: TAllContext) => TSelected
|
|
211
|
+
}) => TStrict extends true ? TSelected : TSelected | undefined
|
|
212
|
+
useRouteContext: <
|
|
213
|
+
TStrict extends boolean = true,
|
|
214
|
+
TSelected = TRouteContext,
|
|
215
|
+
>(opts?: {
|
|
216
|
+
strict?: TStrict
|
|
217
|
+
select?: (search: TRouteContext) => TSelected
|
|
218
|
+
}) => TStrict extends true ? TSelected : TSelected | undefined
|
|
219
|
+
useSearch: <
|
|
220
|
+
TStrict extends boolean = true,
|
|
221
|
+
TSelected = TFullSearchSchema,
|
|
222
|
+
>(opts?: {
|
|
223
|
+
strict?: TStrict
|
|
224
|
+
select?: (search: TFullSearchSchema) => TSelected
|
|
225
|
+
}) => TStrict extends true ? TSelected : TSelected | undefined
|
|
226
|
+
useParams: <TStrict extends boolean = true, TSelected = TAllParams>(opts?: {
|
|
227
|
+
strict?: TStrict
|
|
228
|
+
select?: (search: TAllParams) => TSelected
|
|
229
|
+
}) => TStrict extends true ? TSelected : TSelected | undefined
|
|
132
230
|
}
|
|
133
231
|
|
|
134
232
|
Route.__onInit = (route) => {
|
|
@@ -472,13 +570,11 @@ export function RouterProvider<
|
|
|
472
570
|
const Wrap = router.options.Wrap || React.Fragment
|
|
473
571
|
|
|
474
572
|
return (
|
|
475
|
-
<
|
|
476
|
-
<
|
|
477
|
-
<
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
</Wrap>
|
|
481
|
-
</React.Suspense>
|
|
573
|
+
<Wrap>
|
|
574
|
+
<routerContext.Provider value={router as any}>
|
|
575
|
+
<Matches />
|
|
576
|
+
</routerContext.Provider>
|
|
577
|
+
</Wrap>
|
|
482
578
|
)
|
|
483
579
|
}
|
|
484
580
|
|