Skip to content

Commit 58d0e7f

Browse files
committed
Request-a-copy: Using a resolver to grab the RequestItem
1 parent ce93b84 commit 58d0e7f

2 files changed

Lines changed: 51 additions & 2 deletions

File tree

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { inject } from '@angular/core';
2+
import {
3+
ResolveFn,
4+
Router,
5+
} from '@angular/router';
6+
import { Observable } from 'rxjs';
7+
import { tap } from 'rxjs/operators';
8+
9+
import { getForbiddenRoute } from '../../app-routing-paths';
10+
import { hasValue } from '../../shared/empty.util';
11+
import { ItemRequestDataService } from '../data/item-request-data.service';
12+
import { redirectOn4xx } from '../shared/authorized.operators';
13+
import { ItemRequest } from '../shared/item-request.model';
14+
import {
15+
getFirstCompletedRemoteData,
16+
getFirstSucceededRemoteDataPayload,
17+
} from '../shared/operators';
18+
import { AuthService } from './auth.service';
19+
20+
export const accessTokenResolver: ResolveFn<ItemRequest> = (
21+
route,
22+
state,
23+
router: Router = inject(Router),
24+
authService: AuthService = inject(AuthService),
25+
itemRequestDataService: ItemRequestDataService = inject(ItemRequestDataService),
26+
): Observable<ItemRequest> => {
27+
const accessToken = route.queryParams.accessToken;
28+
if ( !hasValue(accessToken) ) {
29+
return null;
30+
}
31+
// Get
32+
return itemRequestDataService.getSanitizedRequestByAccessToken(accessToken).pipe(
33+
getFirstCompletedRemoteData(),
34+
redirectOn4xx(router, authService),
35+
getFirstSucceededRemoteDataPayload(),
36+
tap(request => {
37+
if (!hasValue(request)) {
38+
console.dir('no request found for access token', accessToken);
39+
router.navigateByUrl(getForbiddenRoute());
40+
}
41+
console.dir('found request: ', request);
42+
console.dir(request);
43+
return request;
44+
}),
45+
);
46+
};

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { itemBreadcrumbResolver } from '../core/breadcrumbs/item-breadcrumb.reso
66
import { dsoEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver';
77
import { LinkMenuItemModel } from '../shared/menu/menu-item/models/link.model';
88
import { MenuItemType } from '../shared/menu/menu-item-type.model';
9-
import { ItemAccessByTokenPageComponent } from './access-by-token/item-access-by-token-page.component';
109
import { BitstreamRequestACopyPageComponent } from './bitstreams/request-a-copy/bitstream-request-a-copy-page.component';
1110
import { UploadBitstreamComponent } from './bitstreams/upload/upload-bitstream.component';
1211
import { ThemedFullItemPageComponent } from './full/themed-full-item-page.component';
@@ -22,6 +21,7 @@ import { orcidPageGuard } from './orcid-page/orcid-page.guard';
2221
import { ThemedItemPageComponent } from './simple/themed-item-page.component';
2322
import { versionResolver } from './version-page/version.resolver';
2423
import { VersionPageComponent } from './version-page/version-page/version-page.component';
24+
import { accessTokenResolver } from '../core/auth/access-token.resolver';
2525

2626
export const ROUTES: Route[] = [
2727
{
@@ -68,7 +68,10 @@ export const ROUTES: Route[] = [
6868
},
6969
{
7070
path: ITEM_ACCESS_BY_TOKEN_PATH,
71-
component: ItemAccessByTokenPageComponent,
71+
component: ThemedFullItemPageComponent,
72+
resolve: {
73+
menu: accessTokenResolver,
74+
},
7275
},
7376
],
7477
data: {

0 commit comments

Comments
 (0)