Skip to content

Commit 1c720dc

Browse files
[DURACOM-413] add redirect on no-content response
1 parent ea0abcf commit 1c720dc

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

src/app/core/shared/authorized.operators.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,28 @@ export const redirectOn4xx = <T>(router: Router, authService: AuthService) =>
5656
}),
5757
map(([rd]: [RemoteData<T>, boolean]) => rd),
5858
);
59+
60+
61+
/**
62+
* Redirect to 404 if the requested content is not found (204 No Content)
63+
*
64+
* @param router
65+
* @param authService
66+
*/
67+
export const redirectOn204 = <T>(router: Router, authService: AuthService) =>
68+
(source: Observable<RemoteData<T>>): Observable<RemoteData<T>> =>
69+
source.pipe(
70+
withLatestFrom(authService.isAuthenticated()),
71+
filter(([rd, isAuthenticated]: [RemoteData<T>, boolean]) => {
72+
if (rd.hasNoContent) {
73+
router.navigateByUrl(getPageNotFoundRoute(), { skipLocationChange: true });
74+
return false;
75+
}
76+
return true;
77+
}),
78+
map(([rd]: [RemoteData<T>, boolean]) => rd),
79+
);
80+
5981
/**
6082
* Operator that returns a UrlTree to a forbidden page or the login page when the boolean received is false
6183
* @param router The router used to navigate to a forbidden page

src/app/item-page/item-page.resolver.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ import { RemoteData } from '@dspace/core/data/remote-data';
1515
import { ResolvedAction } from '@dspace/core/resolving/resolver.actions';
1616
import { getItemPageRoute } from '@dspace/core/router/utils/dso-route.utils';
1717
import { HardRedirectService } from '@dspace/core/services/hard-redirect.service';
18-
import { redirectOn4xx } from '@dspace/core/shared/authorized.operators';
18+
import {
19+
redirectOn4xx,
20+
redirectOn204,
21+
} from '@dspace/core/shared/authorized.operators';
1922
import {
2023
getItemPageLinksToFollow,
2124
Item,
@@ -56,6 +59,7 @@ export const itemPageResolver: ResolveFn<RemoteData<Item>> = (
5659
...getItemPageLinksToFollow(),
5760
).pipe(
5861
getFirstCompletedRemoteData(),
62+
redirectOn204<Item>(router, authService),
5963
redirectOn4xx(router, authService),
6064
);
6165

0 commit comments

Comments
 (0)