Skip to content

Commit 8af3c4b

Browse files
FrancescoMolinarovins01-4science
authored andcommitted
Merged in task/ux-plus-2023_02_x/UXP-87 (pull request #34)
[UXP-87] port canvasId implementation from [IIIF-110] Approved-by: Andrea Barbasso
2 parents 077e067 + ead1fce commit 8af3c4b

4 files changed

Lines changed: 44 additions & 13 deletions

File tree

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
@@ -22,6 +22,11 @@ import { Bitstream } from '../../../../../../../../../../../core/shared/bitstrea
2222
})
2323
@AttachmentTypeRendering(AttachmentRenderingType.IIIF, true)
2424
export class IIIFToolbarComponent implements OnInit {
25+
private readonly MD_CANVASID = 'bitstream.iiif.canvasid';
26+
private readonly MD_BITSTREAMS_MAP = [{
27+
param: 'canvasId',
28+
metadata: this.MD_CANVASID
29+
}];
2530

2631
@Input()
2732
item: Item;
@@ -40,6 +45,9 @@ export class IIIFToolbarComponent implements OnInit {
4045

4146
isAuthorized$ = of(false);
4247

48+
queryParams: {[key: string]: string};
49+
50+
4351
getObjectUrl() {
4452
return isNotEmpty(this.bitstream) ? this.bitstream.self : undefined;
4553
}
@@ -57,13 +65,14 @@ export class IIIFToolbarComponent implements OnInit {
5765
this.manifestUrl = environment.rest.baseUrl + '/iiif/' + this.item.id + '/manifest';
5866
this.isAuthorized$ = this.authorizationService.isAuthorized(FeatureID.CanDownload, this.getObjectUrl());
5967
this.iiifEnabled = this.isIIIFEnabled();
68+
this.queryParams = this.getQueryParams();
6069
}
6170

6271
async openMiradorViewer() {
6372
if (environment.advancedAttachmentRendering.showViewerOnSameItemPage) {
64-
await this.router.navigate([ getItemViewerDetailsPath(this.item, 'iiif', this.tabName) ], { fragment: 'viewer' });
73+
await this.router.navigate([ getItemViewerDetailsPath(this.item, 'iiif', this.tabName) ], { fragment: 'viewer', queryParams: this.queryParams });
6574
} else {
66-
await this.router.navigate([ getItemViewerPath(this.item, 'iiif') ]);
75+
await this.router.navigate([ getItemViewerPath(this.item, 'iiif') ], {queryParams: this.queryParams});
6776
}
6877
}
6978

@@ -87,4 +96,11 @@ export class IIIFToolbarComponent implements OnInit {
8796
return regexIIIFItem.test(this.item.firstMetadataValue('dspace.iiif.enabled'));
8897
}
8998

99+
private getQueryParams() {
100+
return this.MD_BITSTREAMS_MAP
101+
.filter(({metadata}) => this.bitstream?.metadata[`${metadata}`]?.length > 0)
102+
.map(({param, metadata}) => ({ [`${param}`]: this.bitstream?.metadata[`${metadata}`][0]?.value }))
103+
.reduce((acc, curr) => ({ ...acc, ...curr }), {});
104+
}
105+
90106
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,12 @@ export class MiradorViewerComponent implements OnInit {
9292
if (this.notMobile) {
9393
viewerPath += '&notMobile=true';
9494
}
95-
if (environment.mirador.enableDownloadPlugin) {
96-
viewerPath += '&enableDownloadPlugin=true';
97-
}
9895
if (this.canvasId) {
9996
viewerPath += `&canvasId=${this.canvasId}`;
10097
}
98+
if (environment.mirador.enableDownloadPlugin) {
99+
viewerPath += '&enableDownloadPlugin=true';
100+
}
101101

102102
// TODO: Should the query term be trusted here?
103103
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>
Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { Component, OnInit } from '@angular/core';
22
import { BaseItemViewerComponent } from '../base-item-viewer.component';
33
import { RouteService } from '../../../../../core/services/route.service';
4-
import { filter, map, switchMap, withLatestFrom } from 'rxjs/operators';
5-
import { Observable } from 'rxjs';
6-
import { getDSpaceQuery, isIiifSearchEnabled } from '../../../shared/viewer-provider.utils';
4+
import { filter, map, switchMap } from 'rxjs/operators';
5+
import { Observable, OperatorFunction } from 'rxjs';
6+
import { isIiifSearchEnabled } from '../../../shared/viewer-provider.utils';
7+
import { ActivatedRoute, ParamMap } from '@angular/router';
78

89
@Component({
910
selector: 'ds-iiif-item-viewer',
@@ -12,24 +13,37 @@ import { getDSpaceQuery, isIiifSearchEnabled } from '../../../shared/viewer-prov
1213
})
1314
export class IIIFItemViewerComponent extends BaseItemViewerComponent implements OnInit {
1415

16+
private readonly CANVAS_PARAM: string = 'canvasId';
17+
private readonly QUERY_PARAM: string = 'query';
18+
1519
isSearchable$: Observable<boolean>;
1620
query$: Observable<string>;
21+
canvasId$: Observable<string>;
1722

1823
constructor(
19-
private readonly routeService: RouteService
24+
private readonly routeService: RouteService,
25+
private route: ActivatedRoute
2026
) {
2127
super();
2228
}
2329

2430
ngOnInit(): void {
31+
const queryParams$ = this.route.queryParamMap.pipe(
32+
filter(queryMap => queryMap != null),
33+
);
34+
this.canvasId$ = queryParams$.pipe(
35+
this.extractParam(queryMap => queryMap.get(this.CANVAS_PARAM))
36+
);
2537
this.isSearchable$ = this.item$.pipe(
2638
map((item) => isIiifSearchEnabled(item))
2739
);
28-
this.query$ = this.item$.pipe(
29-
withLatestFrom(this.isSearchable$),
30-
filter(([, isSearchable]) => !!isSearchable),
31-
switchMap(([item]) => getDSpaceQuery(item, this.routeService))
40+
this.query$ = this.isSearchable$.pipe(
41+
filter((isSearchable) => !!isSearchable),
42+
switchMap(() => queryParams$.pipe(this.extractParam(queryMap => queryMap.get(this.QUERY_PARAM))))
3243
);
3344
}
3445

46+
private extractParam<T>(mapper: (queryMap: ParamMap) => T): OperatorFunction<ParamMap, T> {
47+
return map(mapper);
48+
}
3549
}

0 commit comments

Comments
 (0)