Skip to content

Commit

Permalink
feat(gene-next): routing - handle start and error in $routeChanged ob…
Browse files Browse the repository at this point in the history
…servable
  • Loading branch information
matzimowski committed Feb 10, 2025
1 parent 1bc7ed9 commit 000fa49
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export function useApolloObservableQuery<TData, TVariables>(
newObservable
);

const isRouterEvent = response?.type === 'routeChanged';
const isRouterEvent = response?.type === 'routeChangeComplete';
const isServerValueOrRouterEventOrObservableValueIsEmpty =
isRouterEvent || isServer() || !response?.data;

Expand Down
37 changes: 32 additions & 5 deletions packages/gene-next/src/routing/routers/next.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,19 +36,46 @@ export function useTransformedNextRouter(): Router {
const $routeChanged = React.useMemo(
() =>
new Observable<RouterEvent>((observer) => {
const handler = ([currentPathname]: [string]) => {
const handleStart = (path: string, options?: NavigateOptions) => {
observer.next({
type: 'routeChanged',
type: 'routeChangeStart',
payload: {
currentPathname,
path,
options
},
});
};

const handleComplete = (path: string, options?: NavigateOptions) => {
observer.next({
type: 'routeChangeComplete',
payload: {
path,
options
},
});
};

const handleError = (path: string, options?: NavigateOptions) => {
observer.next({
type: 'routeChangeError',
payload: {
path,
options
},
});
};

if (events) {
events.on('routeChangeComplete', handler);
events.on('routeChangeStart', handleStart);
events.on('routeChangeComplete', handleComplete);
events.on('routeChangeError', handleError);

return () => events.off('routeChangeComplete', handler);
return () => {
events.off('routeChangeStart', handleStart);
events.off('routeChangeComplete', handleComplete);
events.off('routeChangeError', handleError);
}
}
return () => null;
}),
Expand Down
5 changes: 3 additions & 2 deletions packages/gene/src/routing/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,10 @@ export interface UrlObject {
}

export interface RouterEvent {
type: 'routeChanged';
type: 'routeChangeStart' | 'routeChangeComplete' | 'routeChangeError';
payload: {
currentPathname: string;
path: string;
options?: NavigateOptions;
};
}

Expand Down

0 comments on commit 000fa49

Please # to comment.