Skip to content

Commit 81712aa

Browse files
FrancescoMolinarovins01-4science
authored andcommitted
Merged in task/ux-plus-cris/UXP-87 (pull request #35)
Task/ux plus cris/UXP-87 Approved-by: Andrea Barbasso
2 parents 52f3918 + 4427ec2 commit 81712aa

File tree

4 files changed

+48
-15
lines changed

4 files changed

+48
-15
lines changed

src/app/cris-layout/cris-layout-matrix/cris-layout-box-container/boxes/metadata/rendering-types/advanced-attachment/bitstream-attachment/attachment-render/types/iiif-toolbar/iiif-toolbar.component.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ import { NotificationsService } from '../../../../../../../../../../../shared/no
4343
standalone: true,
4444
})
4545
export class IIIFToolbarComponent implements OnInit {
46+
private readonly MD_CANVASID = 'bitstream.iiif.canvasid';
47+
private readonly MD_BITSTREAMS_MAP = [{
48+
param: 'canvasId',
49+
metadata: this.MD_CANVASID,
50+
}];
4651

4752
@Input()
4853
item: Item;
@@ -61,6 +66,9 @@ export class IIIFToolbarComponent implements OnInit {
6166

6267
isAuthorized$ = of(false);
6368

69+
queryParams: {[key: string]: string};
70+
71+
6472
getObjectUrl() {
6573
return isNotEmpty(this.bitstream) ? this.bitstream.self : undefined;
6674
}
@@ -78,13 +86,14 @@ export class IIIFToolbarComponent implements OnInit {
7886
this.manifestUrl = environment.rest.baseUrl + '/iiif/' + this.item.id + '/manifest';
7987
this.isAuthorized$ = this.authorizationService.isAuthorized(FeatureID.CanDownload, this.getObjectUrl());
8088
this.iiifEnabled = this.isIIIFEnabled();
89+
this.queryParams = this.getQueryParams();
8190
}
8291

8392
async openMiradorViewer() {
8493
if (environment.advancedAttachmentRendering.showViewerOnSameItemPage) {
85-
await this.router.navigate([ getItemViewerDetailsPath(this.item, 'iiif', this.tabName) ], { fragment: 'viewer' });
94+
await this.router.navigate([ getItemViewerDetailsPath(this.item, 'iiif', this.tabName) ], { fragment: 'viewer', queryParams: this.queryParams });
8695
} else {
87-
await this.router.navigate([ getItemViewerPath(this.item, 'iiif') ]);
96+
await this.router.navigate([ getItemViewerPath(this.item, 'iiif') ], { queryParams: this.queryParams });
8897
}
8998
}
9099

@@ -108,4 +117,11 @@ export class IIIFToolbarComponent implements OnInit {
108117
return regexIIIFItem.test(this.item.firstMetadataValue('dspace.iiif.enabled'));
109118
}
110119

120+
private getQueryParams() {
121+
return this.MD_BITSTREAMS_MAP
122+
.filter(({ metadata }) => this.bitstream?.metadata[`${metadata}`]?.length > 0)
123+
.map(({ param, metadata }) => ({ [`${param}`]: this.bitstream?.metadata[`${metadata}`][0]?.value }))
124+
.reduce((acc, curr) => ({ ...acc, ...curr }), {});
125+
}
126+
111127
}

src/app/item-page/mirador-viewer/mirador-viewer.component.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,12 @@ export class MiradorViewerComponent implements OnInit {
122122
if (this.notMobile) {
123123
viewerPath += '&notMobile=true';
124124
}
125-
if (environment.mirador.enableDownloadPlugin) {
126-
viewerPath += '&enableDownloadPlugin=true';
127-
}
128125
if (this.canvasId) {
129126
viewerPath += `&canvasId=${this.canvasId}`;
130127
}
128+
if (environment.mirador.enableDownloadPlugin) {
129+
viewerPath += '&enableDownloadPlugin=true';
130+
}
131131

132132
// TODO: Should the query term be trusted here?
133133
return this.sanitizer.bypassSecurityTrustResourceUrl(viewerPath);

src/app/item-page/viewer-provider/viewers/item-viewers/iiif-item-viewer/iiif-item-viewer.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
[object]="item$ | async"
55
[searchable]="isSearchable$ | async"
66
[query]="query$ | async"
7+
[canvasId]="canvasId$ | async"
78
></ds-mirador-viewer>
89
</div>

src/app/item-page/viewer-provider/viewers/item-viewers/iiif-item-viewer/iiif-item-viewer.component.ts

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,23 @@ import {
33
Component,
44
OnInit,
55
} from '@angular/core';
6-
import { Observable } from 'rxjs';
6+
import {
7+
ActivatedRoute,
8+
ParamMap,
9+
} from '@angular/router';
10+
import {
11+
Observable,
12+
OperatorFunction,
13+
} from 'rxjs';
714
import {
815
filter,
916
map,
1017
switchMap,
11-
withLatestFrom,
1218
} from 'rxjs/operators';
1319

1420
import { RouteService } from '../../../../../core/services/route.service';
1521
import { MiradorViewerComponent } from '../../../../mirador-viewer/mirador-viewer.component';
16-
import {
17-
getDSpaceQuery,
18-
isIiifSearchEnabled,
19-
} from '../../../shared/viewer-provider.utils';
22+
import { isIiifSearchEnabled } from '../../../shared/viewer-provider.utils';
2023
import { BaseItemViewerComponent } from '../base-item-viewer.component';
2124

2225
@Component({
@@ -31,24 +34,37 @@ import { BaseItemViewerComponent } from '../base-item-viewer.component';
3134
})
3235
export class IIIFItemViewerComponent extends BaseItemViewerComponent implements OnInit {
3336

37+
private readonly CANVAS_PARAM: string = 'canvasId';
38+
private readonly QUERY_PARAM: string = 'query';
39+
3440
isSearchable$: Observable<boolean>;
3541
query$: Observable<string>;
42+
canvasId$: Observable<string>;
3643

3744
constructor(
3845
private readonly routeService: RouteService,
46+
private route: ActivatedRoute,
3947
) {
4048
super();
4149
}
4250

4351
ngOnInit(): void {
52+
const queryParams$ = this.route.queryParamMap.pipe(
53+
filter(queryMap => queryMap != null),
54+
);
55+
this.canvasId$ = queryParams$.pipe(
56+
this.extractParam(queryMap => queryMap.get(this.CANVAS_PARAM)),
57+
);
4458
this.isSearchable$ = this.item$.pipe(
4559
map((item) => isIiifSearchEnabled(item)),
4660
);
47-
this.query$ = this.item$.pipe(
48-
withLatestFrom(this.isSearchable$),
49-
filter(([, isSearchable]) => !!isSearchable),
50-
switchMap(([item]) => getDSpaceQuery(item, this.routeService)),
61+
this.query$ = this.isSearchable$.pipe(
62+
filter((isSearchable) => !!isSearchable),
63+
switchMap(() => queryParams$.pipe(this.extractParam(queryMap => queryMap.get(this.QUERY_PARAM)))),
5164
);
5265
}
5366

67+
private extractParam<T>(mapper: (queryMap: ParamMap) => T): OperatorFunction<ParamMap, T> {
68+
return map(mapper);
69+
}
5470
}

0 commit comments

Comments
 (0)