Skip to content

Commit 052e1c3

Browse files
authored
Merge pull request #4290 from alexandrevryghem/w2p-117573_remove-observable-function-calls-from-template-main
Removed observable function calls from template (part 2)
2 parents 19d4380 + f7b77a1 commit 052e1c3

File tree

37 files changed

+306
-569
lines changed

37 files changed

+306
-569
lines changed

src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ <h1 class="border-bottom pb-2">{{messagePrefix + '.create' | translate}}</h1>
3030
</div>
3131
}
3232
@if (canImpersonate$ | async) {
33-
<div between class="btn-group ms-1">
33+
<div between class="btn-group">
3434
@if (!isImpersonated) {
3535
<button class="btn btn-primary" type="button" (click)="impersonate()">
3636
<i class="fa fa-user-secret"></i> {{'admin.access-control.epeople.actions.impersonate' | translate}}

src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
import {
2-
AsyncPipe,
3-
NgClass,
4-
} from '@angular/common';
1+
import { AsyncPipe } from '@angular/common';
52
import {
63
ChangeDetectorRef,
74
Component,
@@ -84,7 +81,6 @@ import { ValidateEmailNotTaken } from './validators/email-taken.validator';
8481
FormComponent,
8582
AsyncPipe,
8683
TranslateModule,
87-
NgClass,
8884
ThemedLoadingComponent,
8985
PaginationComponent,
9086
RouterLink,

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-
@if (registryService.getActiveMetadataField() | async) {
1+
@if (activeMetadataField$ | async) {
22
<h2>{{messagePrefix + '.edit' | translate}}</h2>
33
} @else {
44
<h2>{{messagePrefix + '.create' | translate}}</h2>

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

Lines changed: 62 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {
1919
TranslateModule,
2020
TranslateService,
2121
} from '@ngx-translate/core';
22-
import { combineLatest } from 'rxjs';
22+
import { Observable } from 'rxjs';
2323
import { take } from 'rxjs/operators';
2424

2525
import { MetadataField } from '../../../../core/metadata/metadata-field.model';
@@ -109,6 +109,8 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy {
109109
*/
110110
@Output() submitForm: EventEmitter<any> = new EventEmitter();
111111

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

src/app/home-page/home-news/home-news.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div class="jumbotron py-4 px-2 py-sm-5 px-sm-0 mt-0 mb-4">
1+
<div class="jumbotron py-4 px-2 py-sm-5 px-sm-0 mt-ncs mb-4">
22
<div class="container">
33
<div class="d-flex flex-wrap">
44
<div>

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
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>
66
@for (bundle of (bundles$ | async); track bundle) {
77
<ds-resource-policies [resourceType]="'bundle'" [resourceUUID]="bundle.id" [resourceName]="bundle.name">

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
@@ -17,7 +17,6 @@ import {
1717
import {
1818
catchError,
1919
filter,
20-
first,
2120
map,
2221
mergeMap,
2322
take,
@@ -37,11 +36,11 @@ import {
3736
getFirstSucceededRemoteDataWithNotEmptyPayload,
3837
} from '../../../core/shared/operators';
3938
import { AlertComponent } from '../../../shared/alert/alert.component';
39+
import { AlertType } from '../../../shared/alert/alert-type';
4040
import {
4141
hasValue,
4242
isNotEmpty,
4343
} from '../../../shared/empty.util';
44-
import { NgForTrackByIdDirective } from '../../../shared/ng-for-track-by-id.directive';
4544
import { ResourcePoliciesComponent } from '../../../shared/resource-policies/resource-policies.component';
4645
import { followLink } from '../../../shared/utils/follow-link-config.model';
4746

@@ -61,7 +60,6 @@ interface BundleBitstreamsMapEntry {
6160
ResourcePoliciesComponent,
6261
NgbCollapseModule,
6362
TranslateModule,
64-
NgForTrackByIdDirective,
6563
AsyncPipe,
6664
AlertComponent,
6765
],
@@ -88,7 +86,7 @@ export class ItemAuthorizationsComponent implements OnInit, OnDestroy {
8886
* The target editing item
8987
* @type {Observable<Item>}
9088
*/
91-
private item$: Observable<Item>;
89+
item$: Observable<Item>;
9290

9391
/**
9492
* Array to track all subscriptions and unsubscribe them onDestroy
@@ -127,16 +125,13 @@ export class ItemAuthorizationsComponent implements OnInit, OnDestroy {
127125
*/
128126
private bitstreamPageSize = 4;
129127

130-
/**
131-
* Initialize instance variables
132-
*
133-
* @param {LinkService} linkService
134-
* @param {ActivatedRoute} route
135-
* @param nameService
136-
*/
128+
itemName$: Observable<string>;
129+
130+
readonly AlertType = AlertType;
131+
137132
constructor(
138-
private linkService: LinkService,
139-
private route: ActivatedRoute,
133+
protected linkService: LinkService,
134+
protected route: ActivatedRoute,
140135
public nameService: DSONameService,
141136
) {
142137
}
@@ -146,36 +141,18 @@ export class ItemAuthorizationsComponent implements OnInit, OnDestroy {
146141
*/
147142
ngOnInit(): void {
148143
this.getBundlesPerItem();
144+
this.itemName$ = this.getItemName();
149145
}
150146

151147
/**
152-
* Return the item's UUID
148+
* Return the item's name
153149
*/
154-
getItemUUID(): Observable<string> {
155-
return this.item$.pipe(
156-
map((item: Item) => item.id),
157-
first((UUID: string) => isNotEmpty(UUID)),
158-
);
159-
}
160-
161-
/**
162-
* Return the item's name
163-
*/
164-
getItemName(): Observable<string> {
150+
private getItemName(): Observable<string> {
165151
return this.item$.pipe(
166152
map((item: Item) => this.nameService.getName(item)),
167153
);
168154
}
169155

170-
/**
171-
* Return all item's bundles
172-
*
173-
* @return an observable that emits all item's bundles
174-
*/
175-
getItemBundles(): Observable<Bundle[]> {
176-
return this.bundles$.asObservable();
177-
}
178-
179156
/**
180157
* Get all bundles per item
181158
* and all the bitstreams per bundle

0 commit comments

Comments
 (0)