Skip to content

Commit 4348c60

Browse files
authored
feat(gene-next): routing - handle start and error in $routeChanged observable (#57)
1 parent 1bc7ed9 commit 4348c60

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

packages/gene-apollo/src/apollo/useApolloObservableQuery.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export function useApolloObservableQuery<TData, TVariables>(
3838
newObservable
3939
);
4040

41-
const isRouterEvent = response?.type === 'routeChanged';
41+
const isRouterEvent = response?.type === 'routeChangeComplete';
4242
const isServerValueOrRouterEventOrObservableValueIsEmpty =
4343
isRouterEvent || isServer() || !response?.data;
4444

packages/gene-next/src/routing/routers/next.ts

+32-5
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,46 @@ export function useTransformedNextRouter(): Router {
3636
const $routeChanged = React.useMemo(
3737
() =>
3838
new Observable<RouterEvent>((observer) => {
39-
const handler = ([currentPathname]: [string]) => {
39+
const handleStart = (path: string, options?: NavigateOptions) => {
4040
observer.next({
41-
type: 'routeChanged',
41+
type: 'routeChangeStart',
4242
payload: {
43-
currentPathname,
43+
path,
44+
options
45+
},
46+
});
47+
};
48+
49+
const handleComplete = (path: string, options?: NavigateOptions) => {
50+
observer.next({
51+
type: 'routeChangeComplete',
52+
payload: {
53+
path,
54+
options
55+
},
56+
});
57+
};
58+
59+
const handleError = (path: string, options?: NavigateOptions) => {
60+
observer.next({
61+
type: 'routeChangeError',
62+
payload: {
63+
path,
64+
options
4465
},
4566
});
4667
};
4768

4869
if (events) {
49-
events.on('routeChangeComplete', handler);
70+
events.on('routeChangeStart', handleStart);
71+
events.on('routeChangeComplete', handleComplete);
72+
events.on('routeChangeError', handleError);
5073

51-
return () => events.off('routeChangeComplete', handler);
74+
return () => {
75+
events.off('routeChangeStart', handleStart);
76+
events.off('routeChangeComplete', handleComplete);
77+
events.off('routeChangeError', handleError);
78+
}
5279
}
5380
return () => null;
5481
}),

packages/gene/src/routing/types.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ export interface UrlObject {
3131
}
3232

3333
export interface RouterEvent {
34-
type: 'routeChanged';
34+
type: 'routeChangeStart' | 'routeChangeComplete' | 'routeChangeError';
3535
payload: {
36-
currentPathname: string;
36+
path: string;
37+
options?: NavigateOptions;
3738
};
3839
}
3940

0 commit comments

Comments
 (0)