Skip to content

Commit dc8b105

Browse files
117287: Removed remaining observable function calls from the HTML templates
1 parent 5ee721f commit dc8b105

File tree

38 files changed

+333
-516
lines changed

38 files changed

+333
-516
lines changed

src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div *ngIf="registryService.getActiveMetadataField() | async; then editheader; else createHeader"></div>
1+
<div *ngIf="activeMetadataField$ | async; then editheader; else createHeader"></div>
22

33
<ng-template #createHeader>
44
<h4>{{messagePrefix + '.create' | translate}}</h4>

src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts

Lines changed: 62 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { RegistryService } from '../../../../core/registry/registry.service';
1010
import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service';
1111
import { take } from 'rxjs/operators';
1212
import { TranslateService } from '@ngx-translate/core';
13-
import { combineLatest } from 'rxjs';
13+
import { Observable } from 'rxjs';
1414
import { MetadataSchema } from '../../../../core/metadata/metadata-schema.model';
1515
import { MetadataField } from '../../../../core/metadata/metadata-field.model';
1616

@@ -89,6 +89,8 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy {
8989
*/
9090
@Output() submitForm: EventEmitter<any> = new EventEmitter();
9191

92+
activeMetadataField$: Observable<MetadataField>;
93+
9294
constructor(public registryService: RegistryService,
9395
private formBuilderService: FormBuilderService,
9496
private translateService: TranslateService) {
@@ -97,70 +99,65 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy {
9799
/**
98100
* Initialize the component, setting up the necessary Models for the dynamic form
99101
*/
100-
ngOnInit() {
101-
combineLatest([
102-
this.translateService.get(`${this.messagePrefix}.element`),
103-
this.translateService.get(`${this.messagePrefix}.qualifier`),
104-
this.translateService.get(`${this.messagePrefix}.scopenote`)
105-
]).subscribe(([element, qualifier, scopenote]) => {
106-
this.element = new DynamicInputModel({
107-
id: 'element',
108-
label: element,
109-
name: 'element',
110-
validators: {
111-
required: null,
112-
pattern: '^[^. ,]*$',
113-
maxLength: 64,
114-
},
115-
required: true,
116-
errorMessages: {
117-
pattern: 'error.validation.metadata.element.invalid-pattern',
118-
maxLength: 'error.validation.metadata.element.max-length',
119-
},
120-
});
121-
this.qualifier = new DynamicInputModel({
122-
id: 'qualifier',
123-
label: qualifier,
124-
name: 'qualifier',
125-
validators: {
126-
pattern: '^[^. ,]*$',
127-
maxLength: 64,
128-
},
129-
required: false,
130-
errorMessages: {
131-
pattern: 'error.validation.metadata.qualifier.invalid-pattern',
132-
maxLength: 'error.validation.metadata.qualifier.max-length',
133-
},
134-
});
135-
this.scopeNote = new DynamicInputModel({
136-
id: 'scopeNote',
137-
label: scopenote,
138-
name: 'scopeNote',
139-
required: false,
140-
});
141-
this.formModel = [
142-
new DynamicFormGroupModel(
143-
{
144-
id: 'metadatadatafieldgroup',
145-
group:[this.element, this.qualifier, this.scopeNote]
146-
})
147-
];
148-
this.formGroup = this.formBuilderService.createFormGroup(this.formModel);
149-
this.registryService.getActiveMetadataField().subscribe((field: MetadataField): void => {
150-
if (field == null) {
151-
this.clearFields();
152-
} else {
153-
this.formGroup.patchValue({
154-
metadatadatafieldgroup: {
155-
element: field.element,
156-
qualifier: field.qualifier,
157-
scopeNote: field.scopeNote,
158-
},
159-
});
160-
this.element.disabled = true;
161-
this.qualifier.disabled = true;
162-
}
163-
});
102+
ngOnInit(): void {
103+
this.activeMetadataField$ = this.registryService.getActiveMetadataField();
104+
this.element = new DynamicInputModel({
105+
id: 'element',
106+
label: this.translateService.instant(`${this.messagePrefix}.element`),
107+
name: 'element',
108+
validators: {
109+
required: null,
110+
pattern: '^[^. ,]*$',
111+
maxLength: 64,
112+
},
113+
required: true,
114+
errorMessages: {
115+
pattern: 'error.validation.metadata.element.invalid-pattern',
116+
maxLength: 'error.validation.metadata.element.max-length',
117+
},
118+
});
119+
this.qualifier = new DynamicInputModel({
120+
id: 'qualifier',
121+
label: this.translateService.instant(`${this.messagePrefix}.qualifier`),
122+
name: 'qualifier',
123+
validators: {
124+
pattern: '^[^. ,]*$',
125+
maxLength: 64,
126+
},
127+
required: false,
128+
errorMessages: {
129+
pattern: 'error.validation.metadata.qualifier.invalid-pattern',
130+
maxLength: 'error.validation.metadata.qualifier.max-length',
131+
},
132+
});
133+
this.scopeNote = new DynamicInputModel({
134+
id: 'scopeNote',
135+
label: this.translateService.instant(`${this.messagePrefix}.scopenote`),
136+
name: 'scopeNote',
137+
required: false,
138+
});
139+
this.formModel = [
140+
new DynamicFormGroupModel(
141+
{
142+
id: 'metadatadatafieldgroup',
143+
group:[this.element, this.qualifier, this.scopeNote]
144+
})
145+
];
146+
this.formGroup = this.formBuilderService.createFormGroup(this.formModel);
147+
this.registryService.getActiveMetadataField().subscribe((field: MetadataField): void => {
148+
if (field == null) {
149+
this.clearFields();
150+
} else {
151+
this.formGroup.patchValue({
152+
metadatadatafieldgroup: {
153+
element: field.element,
154+
qualifier: field.qualifier,
155+
scopeNote: field.scopeNote,
156+
},
157+
});
158+
this.element.disabled = true;
159+
this.qualifier.disabled = true;
160+
}
164161
});
165162
}
166163

src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<div class="container">
2-
<ds-alert [type]="'alert-info'" [content]="'item.edit.authorizations.heading'"></ds-alert>
3-
<ds-resource-policies [resourceType]="'item'" [resourceName]="(getItemName() | async)"
4-
[resourceUUID]="(getItemUUID() | async)">
2+
<ds-alert [type]="AlertType.Info" [content]="'item.edit.authorizations.heading'"></ds-alert>
3+
<ds-resource-policies [resourceType]="'item'" [resourceName]="itemName$ | async"
4+
[resourceUUID]="(item$ | async)?.id">
55
</ds-resource-policies>
6-
<ng-container *ngFor="let bundle of (bundles$ | async); trackById">
6+
<ng-container *ngFor="let bundle of (bundles$ | async)">
77
<ds-resource-policies [resourceType]="'bundle'" [resourceUUID]="bundle.id" [resourceName]="bundle.name">
88
</ds-resource-policies>
99
<ng-container *ngIf="(bundleBitstreamsMap.get(bundle.id)?.bitstreams | async)?.length > 0">
@@ -16,7 +16,7 @@
1616
</div>
1717
<div class="card-body" [id]="bundle.id" [ngbCollapse]="bundleBitstreamsMap.get(bundle.id).isCollapsed">
1818
<ng-container
19-
*ngFor="let bitstream of (bundleBitstreamsMap.get(bundle.id).bitstreams | async); trackById">
19+
*ngFor="let bitstream of (bundleBitstreamsMap.get(bundle.id).bitstreams | async)">
2020
<ds-resource-policies [resourceType]="'bitstream'" [resourceUUID]="bitstream.id"
2121
[resourceName]="bitstream.name"></ds-resource-policies>
2222
</ng-container>

src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.spec.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -147,17 +147,9 @@ describe('ItemAuthorizationsComponent test suite', () => {
147147
}));
148148
});
149149

150-
it('should get the item UUID', () => {
151-
152-
expect(comp.getItemUUID()).toBeObservable(cold('(a|)', {
153-
a: item.id
154-
}));
155-
156-
});
157-
158150
it('should get the item\'s bundle', () => {
159151

160-
expect(comp.getItemBundles()).toBeObservable(cold('a', {
152+
expect(comp.bundles$).toBeObservable(cold('a', {
161153
a: bundles
162154
}));
163155

src/app/item-page/edit-item-page/item-authorizations/item-authorizations.component.ts

Lines changed: 13 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Component, OnDestroy, OnInit } from '@angular/core';
44
import { ActivatedRoute } from '@angular/router';
55

66
import { BehaviorSubject, Observable, of as observableOf, Subscription } from 'rxjs';
7-
import { catchError, filter, first, map, mergeMap, take } from 'rxjs/operators';
7+
import { catchError, filter, map, mergeMap, take } from 'rxjs/operators';
88

99
import { buildPaginatedList, PaginatedList } from '../../../core/data/paginated-list.model';
1010
import {
@@ -17,6 +17,7 @@ import { LinkService } from '../../../core/cache/builders/link.service';
1717
import { Bundle } from '../../../core/shared/bundle.model';
1818
import { hasValue, isNotEmpty } from '../../../shared/empty.util';
1919
import { Bitstream } from '../../../core/shared/bitstream.model';
20+
import { AlertType } from '../../../shared/alert/aletr-type';
2021

2122
/**
2223
* Interface for a bundle's bitstream map entry
@@ -52,7 +53,7 @@ export class ItemAuthorizationsComponent implements OnInit, OnDestroy {
5253
* The target editing item
5354
* @type {Observable<Item>}
5455
*/
55-
private item$: Observable<Item>;
56+
item$: Observable<Item>;
5657

5758
/**
5859
* Array to track all subscriptions and unsubscribe them onDestroy
@@ -91,16 +92,13 @@ export class ItemAuthorizationsComponent implements OnInit, OnDestroy {
9192
*/
9293
private bitstreamPageSize = 4;
9394

94-
/**
95-
* Initialize instance variables
96-
*
97-
* @param {LinkService} linkService
98-
* @param {ActivatedRoute} route
99-
* @param nameService
100-
*/
95+
itemName$: Observable<string>;
96+
97+
readonly AlertType = AlertType;
98+
10199
constructor(
102-
private linkService: LinkService,
103-
private route: ActivatedRoute,
100+
protected linkService: LinkService,
101+
protected route: ActivatedRoute,
104102
public nameService: DSONameService
105103
) {
106104
}
@@ -109,37 +107,19 @@ export class ItemAuthorizationsComponent implements OnInit, OnDestroy {
109107
* Initialize the component, setting up the bundle and bitstream within the item
110108
*/
111109
ngOnInit(): void {
112-
this.getBundlesPerItem();
110+
this.getBundlesPerItem();
111+
this.itemName$ = this.getItemName();
113112
}
114113

115114
/**
116-
* Return the item's UUID
115+
* Return the item's name
117116
*/
118-
getItemUUID(): Observable<string> {
119-
return this.item$.pipe(
120-
map((item: Item) => item.id),
121-
first((UUID: string) => isNotEmpty(UUID))
122-
);
123-
}
124-
125-
/**
126-
* Return the item's name
127-
*/
128-
getItemName(): Observable<string> {
117+
private getItemName(): Observable<string> {
129118
return this.item$.pipe(
130119
map((item: Item) => this.nameService.getName(item))
131120
);
132121
}
133122

134-
/**
135-
* Return all item's bundles
136-
*
137-
* @return an observable that emits all item's bundles
138-
*/
139-
getItemBundles(): Observable<Bundle[]> {
140-
return this.bundles$.asObservable();
141-
}
142-
143123
/**
144124
* Get all bundles per item
145125
* and all the bitstreams per bundle

src/app/item-page/edit-item-page/virtual-metadata/virtual-metadata.component.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@
55
</button>
66
</div>
77
<div class="modal-body">
8-
<ng-container *ngFor="let item of items; trackBy: trackItem">
9-
<div *ngVar="(isSelectedVirtualMetadataItem(item) | async) as selected"
10-
(click)="setSelectedVirtualMetadataItem(item, !selected)"
8+
<ng-container *ngFor="let itemDTO of itemDTOs; trackBy: trackItem">
9+
<div *ngVar="(itemDTO?.isSelectedVirtualMetadata$ | async) as selected"
10+
(click)="setSelectedVirtualMetadataItem(itemDTO?.item, !selected)"
1111
class="item d-flex flex-row">
1212
<div class="m-2">
1313
<label>
1414
<input class="select" type="checkbox" [checked]="selected">
1515
</label>
1616
</div>
1717
<div class="flex-column">
18-
<ds-listable-object-component-loader [object]="item">
18+
<ds-listable-object-component-loader [object]="itemDTO?.item">
1919
</ds-listable-object-component-loader>
20-
<div *ngFor="let metadata of virtualMetadata.get(item.uuid)">
20+
<div *ngFor="let metadata of virtualMetadata.get(itemDTO?.item?.uuid)">
2121
<div class="font-weight-bold">
2222
{{metadata.metadataField}}
2323
</div>

src/app/item-page/edit-item-page/virtual-metadata/virtual-metadata.component.spec.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ComponentFixture, TestBed } from '@angular/core/testing';
22
import { of as observableOf } from 'rxjs';
33
import { TranslateModule } from '@ngx-translate/core';
4-
import { DebugElement, NO_ERRORS_SCHEMA } from '@angular/core';
4+
import { DebugElement, NO_ERRORS_SCHEMA, SimpleChange } from '@angular/core';
55
import { By } from '@angular/platform-browser';
66
import { VirtualMetadataComponent } from './virtual-metadata.component';
77
import { Item } from '../../../core/shared/item.model';
@@ -62,6 +62,10 @@ describe('VirtualMetadataComponent', () => {
6262
comp.leftItem = item;
6363
comp.rightItem = relatedItem;
6464
comp.relationshipId = relationshipId;
65+
comp.ngOnChanges({
66+
leftItem: new SimpleChange(undefined, comp.leftItem, true),
67+
rightItem: new SimpleChange(undefined, comp.rightItem, true),
68+
});
6569

6670
fixture.detectChanges();
6771
});

0 commit comments

Comments
 (0)