Skip to content

Commit ea81165

Browse files
Merge branch 'w2p-117573_remove-observable-function-calls-from-template-7.6' into dspace-8_x
2 parents c608ba6 + e9061a4 commit ea81165

31 files changed

Lines changed: 307 additions & 456 deletions

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
<h2>{{messagePrefix + '.create' | translate}}</h2>

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

Lines changed: 63 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {
2222
TranslateModule,
2323
TranslateService,
2424
} from '@ngx-translate/core';
25-
import { combineLatest } from 'rxjs';
25+
import { Observable } from 'rxjs';
2626
import { take } from 'rxjs/operators';
2727

2828
import { MetadataField } from '../../../../core/metadata/metadata-field.model';
@@ -113,6 +113,8 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy {
113113
*/
114114
@Output() submitForm: EventEmitter<any> = new EventEmitter();
115115

116+
activeMetadataField$: Observable<MetadataField>;
117+
116118
constructor(public registryService: RegistryService,
117119
private formBuilderService: FormBuilderService,
118120
private translateService: TranslateService) {
@@ -121,71 +123,66 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy {
121123
/**
122124
* Initialize the component, setting up the necessary Models for the dynamic form
123125
*/
124-
ngOnInit() {
125-
combineLatest([
126-
this.translateService.get(`${this.messagePrefix}.element`),
127-
this.translateService.get(`${this.messagePrefix}.qualifier`),
128-
this.translateService.get(`${this.messagePrefix}.scopenote`),
129-
]).subscribe(([element, qualifier, scopenote]) => {
130-
this.element = new DynamicInputModel({
131-
id: 'element',
132-
label: element,
133-
name: 'element',
134-
validators: {
135-
required: null,
136-
pattern: '^[^. ,]*$',
137-
maxLength: 64,
138-
},
139-
required: true,
140-
errorMessages: {
141-
pattern: 'error.validation.metadata.element.invalid-pattern',
142-
maxLength: 'error.validation.metadata.element.max-length',
143-
},
144-
});
145-
this.qualifier = new DynamicInputModel({
146-
id: 'qualifier',
147-
label: qualifier,
148-
name: 'qualifier',
149-
validators: {
150-
pattern: '^[^. ,]*$',
151-
maxLength: 64,
152-
},
153-
required: false,
154-
errorMessages: {
155-
pattern: 'error.validation.metadata.qualifier.invalid-pattern',
156-
maxLength: 'error.validation.metadata.qualifier.max-length',
157-
},
158-
});
159-
this.scopeNote = new DynamicTextAreaModel({
160-
id: 'scopeNote',
161-
label: scopenote,
162-
name: 'scopeNote',
163-
required: false,
164-
rows: 5,
165-
});
166-
this.formModel = [
167-
new DynamicFormGroupModel(
168-
{
169-
id: 'metadatadatafieldgroup',
170-
group:[this.element, this.qualifier, this.scopeNote],
171-
}),
172-
];
173-
this.formGroup = this.formBuilderService.createFormGroup(this.formModel);
174-
this.registryService.getActiveMetadataField().subscribe((field: MetadataField): void => {
175-
if (field == null) {
176-
this.clearFields();
177-
} else {
178-
this.formGroup.patchValue({
179-
metadatadatafieldgroup: {
180-
element: field.element,
181-
qualifier: field.qualifier,
182-
scopeNote: field.scopeNote,
183-
},
184-
});
185-
this.element.disabled = true;
186-
this.qualifier.disabled = true;
187-
}
188-
});
126+
ngOnInit(): void {
127+
this.activeMetadataField$ = this.registryService.getActiveMetadataField();
128+
this.element = new DynamicInputModel({
129+
id: 'element',
130+
label: this.translateService.instant(`${this.messagePrefix}.element`),
131+
name: 'element',
132+
validators: {
133+
required: null,
134+
pattern: '^[^. ,]*$',
135+
maxLength: 64,
136+
},
137+
required: true,
138+
errorMessages: {
139+
pattern: 'error.validation.metadata.element.invalid-pattern',
140+
maxLength: 'error.validation.metadata.element.max-length',
141+
},
142+
});
143+
this.qualifier = new DynamicInputModel({
144+
id: 'qualifier',
145+
label: this.translateService.instant(`${this.messagePrefix}.qualifier`),
146+
name: 'qualifier',
147+
validators: {
148+
pattern: '^[^. ,]*$',
149+
maxLength: 64,
150+
},
151+
required: false,
152+
errorMessages: {
153+
pattern: 'error.validation.metadata.qualifier.invalid-pattern',
154+
maxLength: 'error.validation.metadata.qualifier.max-length',
155+
},
156+
});
157+
this.scopeNote = new DynamicTextAreaModel({
158+
id: 'scopeNote',
159+
label: this.translateService.instant(`${this.messagePrefix}.scopenote`),
160+
name: 'scopeNote',
161+
required: false,
162+
rows: 5,
163+
});
164+
this.formModel = [
165+
new DynamicFormGroupModel(
166+
{
167+
id: 'metadatadatafieldgroup',
168+
group:[this.element, this.qualifier, this.scopeNote],
169+
}),
170+
];
171+
this.formGroup = this.formBuilderService.createFormGroup(this.formModel);
172+
this.registryService.getActiveMetadataField().subscribe((field: MetadataField): void => {
173+
if (field == null) {
174+
this.clearFields();
175+
} else {
176+
this.formGroup.patchValue({
177+
metadatadatafieldgroup: {
178+
element: field.element,
179+
qualifier: field.qualifier,
180+
scopeNote: field.scopeNote,
181+
},
182+
});
183+
this.element.disabled = true;
184+
this.qualifier.disabled = true;
185+
}
189186
});
190187
}
191188

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
@@ -169,17 +169,9 @@ describe('ItemAuthorizationsComponent test suite', () => {
169169
}));
170170
});
171171

172-
it('should get the item UUID', () => {
173-
174-
expect(comp.getItemUUID()).toBeObservable(cold('(a|)', {
175-
a: item.id,
176-
}));
177-
178-
});
179-
180172
it('should get the item\'s bundle', () => {
181173

182-
expect(comp.getItemBundles()).toBeObservable(cold('a', {
174+
expect(comp.bundles$).toBeObservable(cold('a', {
183175
a: bundles,
184176
}));
185177

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

Lines changed: 11 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {
2121
import {
2222
catchError,
2323
filter,
24-
first,
2524
map,
2625
mergeMap,
2726
take,
@@ -41,11 +40,11 @@ import {
4140
getFirstSucceededRemoteDataWithNotEmptyPayload,
4241
} from '../../../core/shared/operators';
4342
import { AlertComponent } from '../../../shared/alert/alert.component';
43+
import { AlertType } from '../../../shared/alert/alert-type';
4444
import {
4545
hasValue,
4646
isNotEmpty,
4747
} from '../../../shared/empty.util';
48-
import { NgForTrackByIdDirective } from '../../../shared/ng-for-track-by-id.directive';
4948
import { ResourcePoliciesComponent } from '../../../shared/resource-policies/resource-policies.component';
5049
import { followLink } from '../../../shared/utils/follow-link-config.model';
5150

@@ -66,7 +65,6 @@ interface BundleBitstreamsMapEntry {
6665
NgbCollapseModule,
6766
TranslateModule,
6867
NgForOf,
69-
NgForTrackByIdDirective,
7068
AsyncPipe,
7169
NgIf,
7270
AlertComponent,
@@ -94,7 +92,7 @@ export class ItemAuthorizationsComponent implements OnInit, OnDestroy {
9492
* The target editing item
9593
* @type {Observable<Item>}
9694
*/
97-
private item$: Observable<Item>;
95+
item$: Observable<Item>;
9896

9997
/**
10098
* Array to track all subscriptions and unsubscribe them onDestroy
@@ -133,16 +131,13 @@ export class ItemAuthorizationsComponent implements OnInit, OnDestroy {
133131
*/
134132
private bitstreamPageSize = 4;
135133

136-
/**
137-
* Initialize instance variables
138-
*
139-
* @param {LinkService} linkService
140-
* @param {ActivatedRoute} route
141-
* @param nameService
142-
*/
134+
itemName$: Observable<string>;
135+
136+
readonly AlertType = AlertType;
137+
143138
constructor(
144-
private linkService: LinkService,
145-
private route: ActivatedRoute,
139+
protected linkService: LinkService,
140+
protected route: ActivatedRoute,
146141
public nameService: DSONameService,
147142
) {
148143
}
@@ -152,36 +147,18 @@ export class ItemAuthorizationsComponent implements OnInit, OnDestroy {
152147
*/
153148
ngOnInit(): void {
154149
this.getBundlesPerItem();
150+
this.itemName$ = this.getItemName();
155151
}
156152

157153
/**
158-
* Return the item's UUID
154+
* Return the item's name
159155
*/
160-
getItemUUID(): Observable<string> {
161-
return this.item$.pipe(
162-
map((item: Item) => item.id),
163-
first((UUID: string) => isNotEmpty(UUID)),
164-
);
165-
}
166-
167-
/**
168-
* Return the item's name
169-
*/
170-
getItemName(): Observable<string> {
156+
private getItemName(): Observable<string> {
171157
return this.item$.pipe(
172158
map((item: Item) => this.nameService.getName(item)),
173159
);
174160
}
175161

176-
/**
177-
* Return all item's bundles
178-
*
179-
* @return an observable that emits all item's bundles
180-
*/
181-
getItemBundles(): Observable<Bundle[]> {
182-
return this.bundles$.asObservable();
183-
}
184-
185162
/**
186163
* Get all bundles per item
187164
* and all the bitstreams per bundle

src/app/item-page/orcid-page/orcid-auth/orcid-auth.component.html

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
<div class="container mb-5">
22
<h1>{{'person.orcid.registry.auth' | translate}}</h1>
3-
<ng-container *ngIf="(isLinkedToOrcid() | async); then orcidLinked; else orcidNotLinked"></ng-container>
3+
<ng-container *ngIf="(isOrcidLinked$ | async); then orcidLinked; else orcidNotLinked"></ng-container>
44
</div>
55

66
<ng-template #orcidLinked>
77
<div data-test="orcidLinked">
88
<div class="row">
9-
<div *ngIf="(hasOrcidAuthorizations() | async)" class="col-sm-6 mb-3" data-test="hasOrcidAuthorizations">
9+
<div *ngIf="(hasOrcidAuthorizations$ | async)" class="col-sm-6 mb-3" data-test="hasOrcidAuthorizations">
1010
<div class="card h-100">
1111
<div class="card-header">{{ 'person.page.orcid.granted-authorizations'| translate }}</div>
1212
<div class="card-body">
1313
<div class="container p-0">
1414
<ul>
15-
<li *ngFor="let auth of (getOrcidAuthorizations() | async)" data-test="orcidAuthorization">
15+
<li *ngFor="let auth of profileAuthorizationScopes$ | async" data-test="orcidAuthorization">
1616
{{getAuthorizationDescription(auth) | translate}}
1717
</li>
1818
</ul>
@@ -25,13 +25,13 @@ <h1>{{'person.orcid.registry.auth' | translate}}</h1>
2525
<div class="card-header">{{ 'person.page.orcid.missing-authorizations'| translate }}</div>
2626
<div class="card-body">
2727
<div class="container">
28-
<ds-alert *ngIf="(hasMissingOrcidAuthorizations() | async) !== true" [type]="'alert-success'" data-test="noMissingOrcidAuthorizations">
28+
<ds-alert *ngIf="(hasMissingOrcidAuthorizations$ | async) !== true" [type]="AlertType.Success" data-test="noMissingOrcidAuthorizations">
2929
{{'person.page.orcid.no-missing-authorizations-message' | translate}}
3030
</ds-alert>
31-
<ds-alert *ngIf="(hasMissingOrcidAuthorizations() | async)" [type]="'alert-warning'" data-test="missingOrcidAuthorizations">
31+
<ds-alert *ngIf="(hasMissingOrcidAuthorizations$ | async)" [type]="AlertType.Warning" data-test="missingOrcidAuthorizations">
3232
{{'person.page.orcid.missing-authorizations-message' | translate}}
3333
<ul>
34-
<li *ngFor="let auth of (getMissingOrcidAuthorizations() | async)" data-test="missingOrcidAuthorization">
34+
<li *ngFor="let auth of profileAuthorizationScopes$ | async" data-test="missingOrcidAuthorization">
3535
{{getAuthorizationDescription(auth) | translate }}
3636
</li>
3737
</ul>
@@ -41,11 +41,11 @@ <h1>{{'person.orcid.registry.auth' | translate}}</h1>
4141
</div>
4242
</div>
4343
</div>
44-
<ds-alert *ngIf="(onlyAdminCanDisconnectProfileFromOrcid() | async) && (ownerCanDisconnectProfileFromOrcid() | async) !== true"
45-
[type]="'alert-warning'" data-test="unlinkOnlyAdmin">
44+
<ds-alert *ngIf="(onlyAdminCanDisconnectProfileFromOrcid$ | async) && (ownerCanDisconnectProfileFromOrcid$ | async) !== true"
45+
[type]="AlertType.Warning" data-test="unlinkOnlyAdmin">
4646
{{ 'person.page.orcid.remove-orcid-message' | translate}}
4747
</ds-alert>
48-
<div class="row" *ngIf="(ownerCanDisconnectProfileFromOrcid() | async)" data-test="unlinkOwner">
48+
<div class="row" *ngIf="(ownerCanDisconnectProfileFromOrcid$ | async)" data-test="unlinkOwner">
4949
<div class="col">
5050
<button type="submit" class="btn btn-danger float-right" (click)="unlinkOrcid()"
5151
[dsBtnDisabled]="(unlinkProcessing | async)">
@@ -54,7 +54,7 @@ <h1>{{'person.orcid.registry.auth' | translate}}</h1>
5454
<span *ngIf="(unlinkProcessing | async)"><i
5555
class='fas fa-circle-notch fa-spin'></i> {{'person.page.orcid.unlink.processing' | translate}}</span>
5656
</button>
57-
<button *ngIf="(hasMissingOrcidAuthorizations() | async)" type="submit"
57+
<button *ngIf="(hasMissingOrcidAuthorizations$ | async)" type="submit"
5858
class="btn btn-primary float-right" (click)="linkOrcid()">
5959
<span><i class="fas fa-check"></i> {{ 'person.page.orcid.grant-authorizations' | translate }}</span>
6060
</button>
@@ -68,7 +68,7 @@ <h1>{{'person.orcid.registry.auth' | translate}}</h1>
6868
<div class="row">
6969
<div class="col-2"><img alt="orcid-logo" src="../../../../assets/images/orcid.logo.icon.svg"/></div>
7070
<div class="col">
71-
<ds-alert [type]="'alert-info'">{{ getOrcidNotLinkedMessage() | async }}</ds-alert>
71+
<ds-alert [type]="AlertType.Info">{{ getOrcidNotLinkedMessage() }}</ds-alert>
7272
</div>
7373
</div>
7474
<div class="row">

0 commit comments

Comments
 (0)