CST-12174 created new remotadata service for itemfilters, pages are updated in real time when editing/creating/deleting services related stuff, added modals to confirm/reset

This commit is contained in:
Mattia Vianelli
2023-10-18 18:46:06 +02:00
parent ba0b110647
commit 2eb71604ee
13 changed files with 304 additions and 98 deletions

View File

@@ -7,6 +7,7 @@ import { LdnServiceNewComponent } from './ldn-service-new/ldn-service-new.compon
import { LdnServiceFormComponent } from './ldn-service-form/ldn-service-form.component';
import { LdnServiceFormEditComponent } from './ldn-service-form-edit/ldn-service-form-edit.component';
import { FormsModule } from '@angular/forms';
import { LdnItemfiltersService } from './ldn-services-data/ldn-itemfilters-data.service';
@@ -22,6 +23,7 @@ import { FormsModule } from '@angular/forms';
LdnServiceNewComponent,
LdnServiceFormComponent,
LdnServiceFormEditComponent,
]
],
providers: [LdnItemfiltersService]
})
export class AdminLdnServicesModule { }

View File

@@ -1,4 +1,4 @@
<form (ngSubmit)="submitForm()" [formGroup]="formModel">
<form (ngSubmit)="onSubmit()" [formGroup]="formModel">
<!-- In the toggle section -->
<div class="toggle-switch-container">
@@ -95,8 +95,8 @@
<ng-container *ngIf="inboundPattern.value">
<select formControlName="constraint" id="constraint{{i}}" name="constraint{{i}}">
<option value="">{{ 'ldn-new-service.form.label.placeholder.selectedItemFilter' | translate }}</option>
<option *ngFor="let itemFilter of itemFilterList"
[value]="itemFilter.name">{{ itemFilter.name }}</option>
<option *ngFor="let itemFilter of (itemfiltersRD$ | async)?.payload?.page"
[value]="itemFilter.id">{{ itemFilter.id }}</option>
</select>
</ng-container>
</div>
@@ -159,12 +159,13 @@
</select>
</div>
<div class="col">
<select *ngIf="outboundPattern.value" formControlName="constraint" id="constraint{{i}}"
name="constraint{{i}}">
<ng-container *ngIf="outboundPattern.value">
<select formControlName="constraint" id="constraint{{i}}" name="constraint{{i}}">
<option value="">{{ 'ldn-new-service.form.label.placeholder.selectedItemFilter' | translate }}</option>
<option *ngFor="let itemFilter of itemFilterList"
[value]="itemFilter.name">{{ itemFilter.name }}</option>
<option *ngFor="let itemFilter of (itemfiltersRD$ | async)?.payload?.page"
[value]="itemFilter.id">{{ itemFilter.id }}</option>
</select>
</ng-container>
</div>
<div [style.visibility]="'hidden'" class="col-sm1">
@@ -249,7 +250,7 @@
{{ 'service.overview.reset-form.body' | translate }}
</div>
<div class="mt-4">
<button (click)="this.resetFormAndLeave()"
<button (click)="resetFormAndLeave()"
class="btn btn-primary mr-2 custom-btn" id="reset-confirm">{{ 'service.overview.reset-form.reset-confirm' | translate }}</button>
<button (click)="closeModal()" class="btn btn-danger"
id="reset-delete">{{ 'service.overview.reset-form.reset-return' | translate }}

View File

@@ -2,7 +2,6 @@ import { ChangeDetectorRef, Component, Input, OnInit, TemplateRef, ViewChild } f
import { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';
import { LDN_SERVICE } from '../ldn-services-model/ldn-service.resource-type';
import { ActivatedRoute, Router } from '@angular/router';
import { LdnDirectoryService } from '../ldn-services-services/ldn-directory.service';
import { LdnServicesService } from '../ldn-services-data/ldn-services-data.service';
import { notifyPatterns } from '../ldn-services-patterns/ldn-service-coar-patterns';
import { animate, state, style, transition, trigger } from '@angular/animations';
@@ -13,6 +12,13 @@ import { LdnService } from '../ldn-services-model/ldn-services.model';
import { RemoteData } from 'src/app/core/data/remote-data';
import { Operation } from 'fast-json-patch';
import { getFirstCompletedRemoteData } from '../../../core/shared/operators';
import { LdnItemfiltersService } from '../ldn-services-data/ldn-itemfilters-data.service';
import { Itemfilter } from '../ldn-services-model/ldn-service-itemfilters';
import { PaginatedList } from '../../../core/data/paginated-list.model';
import { Observable } from 'rxjs';
import { PaginationService } from '../../../core/pagination/pagination.service';
import { FindListOptions } from '../../../core/data/find-list-options.model';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
@Component({
selector: 'ds-ldn-service-form-edit',
@@ -33,7 +39,14 @@ export class LdnServiceFormEditComponent implements OnInit {
public inboundPatterns: object[] = notifyPatterns;
public outboundPatterns: object[] = notifyPatterns;
public itemFilterList: any[];
itemfiltersRD$: Observable<RemoteData<PaginatedList<Itemfilter>>>;
config: FindListOptions = Object.assign(new FindListOptions(), {
elementsPerPage: 20
});
pageConfig: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), {
id: 'po',
pageSize: 20
});
@Input() public name: string;
@Input() public description: string;
@Input() public url: string;
@@ -51,7 +64,7 @@ export class LdnServiceFormEditComponent implements OnInit {
constructor(
protected ldnServicesService: LdnServicesService,
private ldnDirectoryService: LdnDirectoryService,
private ldnItemfiltersService: LdnItemfiltersService,
private formBuilder: FormBuilder,
private router: Router,
private route: ActivatedRoute,
@@ -59,6 +72,7 @@ export class LdnServiceFormEditComponent implements OnInit {
protected modalService: NgbModal,
private notificationService: NotificationsService,
private translateService: TranslateService,
protected paginationService: PaginationService
) {
this.formModel = this.formBuilder.group({
@@ -84,14 +98,23 @@ export class LdnServiceFormEditComponent implements OnInit {
this.fetchServiceData(this.serviceId);
}
});
this.ldnDirectoryService.getItemFilters().subscribe((itemFilters) => {
this.itemFilterList = itemFilters._embedded.itemfilters.map((filter: { id: string; }) => ({
name: filter.id
}));
this.cdRef.detectChanges();
});
this.setItemfilters();
}
setItemfilters() {
this.itemfiltersRD$ = this.ldnItemfiltersService.findAll().pipe(
getFirstCompletedRemoteData());
console.log(this.itemfiltersRD$);
this.itemfiltersRD$.subscribe((rd: RemoteData<PaginatedList<Itemfilter>>) => {
if (rd.hasSucceeded) {
console.log(rd);
}
});
}
fetchServiceData(serviceId: string): void {
this.ldnServicesService.findById(serviceId).pipe(
getFirstCompletedRemoteData()
@@ -100,8 +123,6 @@ export class LdnServiceFormEditComponent implements OnInit {
if (data.hasSucceeded) {
this.service = data.payload;
console.log(this.service);
this.formModel.patchValue({
id: this.service.id,
name: this.service.name,
@@ -159,7 +180,7 @@ export class LdnServiceFormEditComponent implements OnInit {
return patchOperations;
}
submitForm() {
onSubmit() {
this.openConfirmModal(this.confirmModal);
}
@@ -294,9 +315,11 @@ export class LdnServiceFormEditComponent implements OnInit {
patchService() {
const patchOperations = this.generatePatchOperations();
this.ldnServicesService.patch(this.service, patchOperations).subscribe(
(response) => {
console.log('Service updated successfully:', response);
this.ldnServicesService.patch(this.service, patchOperations).pipe(
getFirstCompletedRemoteData()
).subscribe(
() => {
this.closeModal();
this.sendBack();
this.notificationService.success(this.translateService.get('admin.registries.services-formats.modify.success.head'),

View File

@@ -86,8 +86,8 @@
<ng-container *ngIf="inboundPattern.value">
<select formControlName="constraint" id="constraint{{i}}" name="constraint{{i}}">
<option value="">{{ 'ldn-new-service.form.label.placeholder.selectedItemFilter' | translate }}</option>
<option *ngFor="let itemFilter of itemFilterList"
[value]="itemFilter.name">{{ itemFilter.name }}</option>
<option *ngFor="let itemFilter of (itemfiltersRD$ | async)?.payload?.page"
[value]="itemFilter.id">{{ itemFilter.id }}</option>
</select>
</ng-container>
</div>
@@ -149,12 +149,13 @@
</select>
</div>
<div class="col">
<select *ngIf="outboundPattern.value" formControlName="constraint" id="constraint{{i}}"
name="constraint{{i}}">
<ng-container *ngIf="outboundPattern.value">
<select formControlName="constraint" id="constraint{{i}}" name="constraint{{i}}">
<option value="">{{ 'ldn-new-service.form.label.placeholder.selectedItemFilter' | translate }}</option>
<option *ngFor="let itemFilter of itemFilterList"
[value]="itemFilter.name">{{ itemFilter.name }}</option>
<option *ngFor="let itemFilter of (itemfiltersRD$ | async)?.payload?.page"
[value]="itemFilter.id">{{ itemFilter.id }}</option>
</select>
</ng-container>
</div>
<div [style.visibility]="'hidden'" class="col-sm1">
@@ -182,6 +183,69 @@
&nbsp;
</div>
<button class="btn btn-primary" type="submit">{{ 'ldn-new-service.form.label.submit' | translate }}</button>
<div class="">
<button type="button" class="btn btn-danger" (click)="this.openResetFormModal(this.resetFormModal)">
<i class="fas fa-trash"></i> {{ 'submission.general.discard.submit' | translate }}
</button>
</div>
</form>
<ng-template #confirmModal>
<div>
<div class="modal-header">
<div>
<h4>{{'service.create..modal' | translate }}</h4>
</div>
<button (click)="closeModal()" aria-label="Close"
class="close" type="button">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div>
{{ 'service.create.body' | translate }}
</div>
<div class="mt-4">
<button (click)="createService()"
class="btn btn-primary mr-2 custom-btn">{{ 'service.confirm.create' | translate }}</button>
<button (click)="closeModal()" class="btn btn-danger"
id="delete-confirm">{{ 'service.refuse.create' | translate }}
</button>
</div>
</div>
</div>
</ng-template>
<ng-template #resetFormModal>
<div>
<div class="modal-header">
<div>
<h4>{{'service.create.reset-form.modal' | translate }}</h4>
</div>
<button (click)="closeModal()" aria-label="Close"
class="close" type="button">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div>
{{ 'service.create.reset-form.body' | translate }}
</div>
<div class="mt-4">
<button (click)="resetFormAndLeave()"
class="btn btn-primary mr-2 custom-btn" id="reset-confirm">{{ 'service.overview.reset-form.reset-confirm' | translate }}</button>
<button (click)="closeModal()" class="btn btn-danger"
id="reset-delete">{{ 'service.overview.reset-form.reset-return' | translate }}
</button>
</div>
</div>
</div>
</ng-template>

View File

@@ -1,4 +1,13 @@
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import {
ChangeDetectorRef,
Component,
EventEmitter,
Input,
OnInit,
Output,
TemplateRef,
ViewChild
} from '@angular/core';
import { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Router } from '@angular/router';
@@ -12,6 +21,13 @@ import { RemoteData } from '../../../core/data/remote-data';
import { LdnService } from '../ldn-services-model/ldn-services.model';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { TranslateService } from '@ngx-translate/core';
import { PaginatedList } from '../../../core/data/paginated-list.model';
import { Itemfilter } from '../ldn-services-model/ldn-service-itemfilters';
import { Observable } from 'rxjs';
import { FindListOptions } from '../../../core/data/find-list-options.model';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
import { LdnItemfiltersService } from '../ldn-services-data/ldn-itemfilters-data.service';
import { NgbModal } from "@ng-bootstrap/ng-bootstrap";
@Component({
@@ -28,11 +44,21 @@ import { TranslateService } from '@ngx-translate/core';
})
export class LdnServiceFormComponent implements OnInit {
formModel: FormGroup;
private modalRef: any;
@ViewChild('confirmModal', {static: true}) confirmModal: TemplateRef<any>;
@ViewChild('resetFormModal', {static: true}) resetFormModal: TemplateRef<any>;
public inboundPatterns: object[] = notifyPatterns;
public outboundPatterns: object[] = notifyPatterns;
public itemFilterList: any[];
itemfiltersRD$: Observable<RemoteData<PaginatedList<Itemfilter>>>;
config: FindListOptions = Object.assign(new FindListOptions(), {
elementsPerPage: 20
});
pageConfig: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), {
id: 'po',
pageSize: 20
});
@@ -51,11 +77,14 @@ export class LdnServiceFormComponent implements OnInit {
constructor(
private ldnServicesService: LdnServicesService,
private ldnDirectoryService: LdnDirectoryService,
private ldnItemfiltersService: LdnItemfiltersService,
private formBuilder: FormBuilder,
private router: Router,
private notificationsService: NotificationsService,
private translateService: TranslateService
private translateService: TranslateService,
private cdRef: ChangeDetectorRef,
protected modalService: NgbModal,
) {
this.formModel = this.formBuilder.group({
@@ -75,15 +104,19 @@ export class LdnServiceFormComponent implements OnInit {
}
ngOnInit(): void {
this.ldnDirectoryService.getItemFilters().subscribe((itemFilters) => {
console.log(itemFilters);
this.itemFilterList = itemFilters._embedded.itemfilters.map((filter: { id: string; }) => ({
name: filter.id
}));
});
this.setItemfilters();
}
setItemfilters() {
this.itemfiltersRD$ = this.ldnItemfiltersService.findAll().pipe(
getFirstCompletedRemoteData());
console.log(this.itemfiltersRD$);
this.itemfiltersRD$.subscribe((rd: RemoteData<PaginatedList<Itemfilter>>) => {
if (rd.hasSucceeded) {
console.log(rd);
}
});
}
/*createLdnService(values: any) {
this.formModel.get('name').markAsTouched();
this.formModel.get('url').markAsTouched();
@@ -106,7 +139,7 @@ export class LdnServiceFormComponent implements OnInit {
).subscribe((rd: RemoteData<LdnService>) => {
if (rd.hasSucceeded) {
this.notificationsService.success(this.translateService.get('notification.created.success'));
this.submitForm.emit(values);
this.onSubmit.emit(values);
} else {
this.notificationsService.error(this.translateService.get('notification.created.failure', ));
this.cancelForm.emit();
@@ -116,6 +149,17 @@ export class LdnServiceFormComponent implements OnInit {
}*/
onSubmit() {
this.openConfirmModal(this.confirmModal);
}
openConfirmModal(content) {
this.modalRef = this.modalService.open(content);
}
openResetFormModal(content) {
this.modalRef = this.modalService.open(content);
}
createService(){
this.formModel.get('name').markAsTouched();
this.formModel.get('url').markAsTouched();
this.formModel.get('ldnUrl').markAsTouched();
@@ -125,6 +169,7 @@ export class LdnServiceFormComponent implements OnInit {
const ldnUrl = this.formModel.get('ldnUrl').value;
if (!name || !url || !ldnUrl) {
this.closeModal();
return;
}
@@ -132,27 +177,29 @@ export class LdnServiceFormComponent implements OnInit {
const ldnServiceData = this.ldnServicesService.create(values);
ldnServiceData.pipe(
getFirstCompletedRemoteData()
).subscribe((ldnNewService) => {
console.log(ldnNewService);
});
ldnServiceData.pipe(
getFirstCompletedRemoteData()
).subscribe((rd: RemoteData<LdnService>) => {
if (rd.hasSucceeded) {
this.notificationsService.success(this.translateService.get('notification.created.success'));
this.submitForm.emit();
this.sendBack();
} else {
this.notificationsService.error(this.translateService.get('notification.created.failure'));
this.cancelForm.emit();
}
});
}
resetFormAndLeave() {
this.sendBack();
this.closeModal();
}
closeModal() {
this.modalRef.close();
this.cdRef.detectChanges();
}
addInboundPattern() {
const notifyServiceInboundPatternsArray = this.formModel.get('notifyServiceInboundPatterns') as FormArray;
notifyServiceInboundPatternsArray.push(this.createInboundPatternFormGroup());
@@ -184,6 +231,8 @@ export class LdnServiceFormComponent implements OnInit {
this.router.navigateByUrl('admin/ldn/services');
}
private createOutboundPatternFormGroup(): FormGroup {
return this.formBuilder.group({
pattern: [''],

View File

@@ -0,0 +1,48 @@
import { Injectable } from '@angular/core';
import { dataService } from '../../../core/data/base/data-service.decorator';
import { LDN_SERVICE_CONSTRAINT_FILTERS } from '../ldn-services-model/ldn-service.resource-type';
import { IdentifiableDataService } from '../../../core/data/base/identifiable-data.service';
import { FindAllData, FindAllDataImpl } from '../../../core/data/base/find-all-data';
import { RequestService } from '../../../core/data/request.service';
import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../../../core/cache/object-cache.service';
import { HALEndpointService } from '../../../core/shared/hal-endpoint.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { FindListOptions } from '../../../core/data/find-list-options.model';
import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model';
import { Observable } from 'rxjs';
import { RemoteData } from '../../../core/data/remote-data';
import { Itemfilter } from '../ldn-services-model/ldn-service-itemfilters';
import { PaginatedList } from '../../../core/data/paginated-list.model';
/**
* A service responsible for fetching/sending data from/to the REST API on the itemfilters endpoint
*/
@Injectable()
@dataService(LDN_SERVICE_CONSTRAINT_FILTERS)
export class LdnItemfiltersService extends IdentifiableDataService<Itemfilter> implements FindAllData<Itemfilter> {
private findAllData: FindAllDataImpl<Itemfilter>;
constructor(
protected requestService: RequestService,
protected rdbService: RemoteDataBuildService,
protected objectCache: ObjectCacheService,
protected halService: HALEndpointService,
protected notificationsService: NotificationsService,
) {
super('itemfilters', requestService, rdbService, objectCache, halService);
this.findAllData = new FindAllDataImpl(this.linkPath, requestService, rdbService, objectCache, halService, this.responseMsToLive);
}
getEndpoint() {
return this.halService.getEndpoint(this.linkPath);
}
findAll(options?: FindListOptions, useCachedVersionIfAvailable?: boolean, reRequestOnStale?: boolean, ...linksToFollow: FollowLinkConfig<Itemfilter>[]): Observable<RemoteData<PaginatedList<Itemfilter>>> {
return this.findAllData.findAll(options, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow);
}
}

View File

@@ -32,6 +32,9 @@ import { ldnServiceConstrain } from '../ldn-services-model/ldn-service.constrain
import { getFirstCompletedRemoteData } from 'src/app/core/shared/operators';
import { hasValue } from 'src/app/shared/empty.util';
/**
* A service responsible for fetching/sending data from/to the REST API on the ldnservices endpoint
*/
@Injectable()
@dataService(LDN_SERVICE)
export class LdnServicesService extends IdentifiableDataService<LdnService> implements FindAllData<LdnService>, DeleteData<LdnService>, PatchData<LdnService>, CreateData<LdnService> {

View File

@@ -5,13 +5,13 @@ import { PaginatedList } from '../../../core/data/paginated-list.model';
import { FindListOptions } from '../../../core/data/find-list-options.model';
import { LdnService } from '../ldn-services-model/ldn-services.model';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
import { switchMap } from 'rxjs/operators';
import { map, switchMap } from 'rxjs/operators';
import { LdnServicesService } from 'src/app/admin/admin-ldn-services/ldn-services-data/ldn-services-data.service';
import { PaginationService } from 'src/app/core/pagination/pagination.service';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { hasValue } from '../../../shared/empty.util';
import { Operation } from 'fast-json-patch';
import { getFirstCompletedRemoteData } from '../../../core/shared/operators';
import { getAllCompletedRemoteData, getFirstCompletedRemoteData } from '../../../core/shared/operators';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { TranslateService } from '@ngx-translate/core';
import { Router } from '@angular/router';
@@ -55,8 +55,9 @@ export class LdnServicesOverviewComponent implements OnInit, OnDestroy {
setLdnServices() {
this.ldnServicesRD$ = this.paginationService.getFindListOptions(this.pageConfig.id, this.config).pipe(
switchMap((config) => this.ldnServicesService.findAll(config, true, false).pipe(
switchMap((config) => this.ldnServicesService.findAll(config, false, false).pipe(
getFirstCompletedRemoteData()
))
);
@@ -96,6 +97,14 @@ export class LdnServicesOverviewComponent implements OnInit, OnDestroy {
ldnServicesService.delete(serviceId).pipe(getFirstCompletedRemoteData()).subscribe((rd: RemoteData<LdnService>) => {
if (rd.hasSucceeded) {
this.servicesData = this.servicesData.filter(service => service.id !== serviceId);
this.ldnServicesRD$ = this.ldnServicesRD$.pipe(
map((remoteData: RemoteData<PaginatedList<LdnService>>) => {
if (remoteData.hasSucceeded) {
remoteData.payload.page = remoteData.payload.page.filter(service => service.id.toString() !== serviceId);
}
return remoteData;
})
);
this.cdRef.detectChanges();
this.closeModal();
this.notificationService.success(this.translateService.get('notification.created.success'));

View File

@@ -0,0 +1,32 @@
import { autoserialize, inheritSerialization, deserialize } from 'cerialize';
import { LDN_SERVICE_CONSTRAINT_FILTER } from './ldn-service.resource-type';
import { CacheableObject } from '../../../core/cache/cacheable-object.model';
import { HALLink } from '../../../core/shared/hal-link.model';
import { typedObject } from '../../../core/cache/builders/build-decorators';
import { excludeFromEquals } from '../../../core/utilities/equals.decorators';
import { ResourceType } from '../../../core/shared/resource-type';
/** A single filter value and its properties. */
@typedObject
@inheritSerialization(CacheableObject)
export class Itemfilter extends CacheableObject {
static type = LDN_SERVICE_CONSTRAINT_FILTER;
@excludeFromEquals
@autoserialize
type: ResourceType;
@autoserialize
id: string;
@deserialize
_links: {
self: {
href: string;
};
};
get self(): string {
return this._links.self.href;
}
}

View File

@@ -7,4 +7,6 @@
import { ResourceType } from '../../../core/shared/resource-type';
export const LDN_SERVICE = new ResourceType('ldnservice');
export const LDN_SERVICE_CONSTRAINT = new ResourceType('ldnservice');
export const LDN_SERVICE_CONSTRAINT_FILTERS = new ResourceType('itemfilters');
export const LDN_SERVICE_CONSTRAINT_FILTER = new ResourceType('itemfilter');

View File

@@ -8,7 +8,7 @@ import { NotifyServicePattern } from './ldn-service-patterns.model';
/** An LdnService and its properties. */
@typedObject
@inheritSerialization(CacheableObject)
export class LdnService extends CacheableObject {

View File

@@ -1,57 +1,26 @@
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable, tap } from 'rxjs';
import { LdnService } from '../ldn-services-model/ldn-services.model';
import { map, Observable } from 'rxjs';
import { LdnServicesService } from "../ldn-services-data/ldn-services-data.service";
@Injectable({
providedIn: 'root',
})
export class LdnDirectoryService {
private baseUrl = 'http://localhost:8080/server/api/ldn/ldnservices';
private itemFilterEndpoint = 'http://localhost:8080/server/api/config/itemfilters';
constructor(private http: HttpClient) {}
constructor(private http: HttpClient,
private ldnServicesService: LdnServicesService) {}
public getItemFilters(): Observable<any> {
public listLdnServices(): Observable<LdnService[]> {
const endpoint = `${this.baseUrl}`;
return this.http.get<LdnService[]>(endpoint).pipe(
tap(data => {
console.log('listLdnServices() Data:', data);
return this.ldnServicesService.findAll().pipe(
map((servicesData) => {
return servicesData;
})
);
}
public getLdnServiceById(id: string): Observable<LdnService> {
const endpoint = `${this.baseUrl}/${id}`;
return this.http.get<LdnService>(endpoint);
}
public createLdnService(ldnService: LdnService): Observable<LdnService> {
return this.http.post<LdnService>(this.baseUrl, ldnService);
}
public updateLdnService(id: string, ldnService: LdnService): Observable<LdnService> {
const endpoint = `${this.baseUrl}/${id}`;
return this.http.put<LdnService>(endpoint, ldnService);
}
public deleteLdnService(id: string): Observable<void> {
const endpoint = `${this.baseUrl}/${id}`;
return this.http.delete<void>(endpoint);
}
public searchLdnServicesByLdnUrl(ldnUrl: string): Observable<LdnService[]> {
const endpoint = `${this.baseUrl}/search/byLdnUrl?ldnUrl=${ldnUrl}`;
return this.http.get<LdnService[]>(endpoint);
}
public getItemFilters(): Observable<any> {
const itemFiltersEndpoint = `${this.itemFilterEndpoint}`;
return this.http.get(itemFiltersEndpoint);
}
}

View File

@@ -189,6 +189,8 @@ import { SuggestionTarget } from './suggestion-notifications/reciter-suggestions
import { SuggestionSource } from './suggestion-notifications/reciter-suggestions/models/suggestion-source.model';
import { LdnServicesService } from '../admin/admin-ldn-services/ldn-services-data/ldn-services-data.service';
import { LdnService } from '../admin/admin-ldn-services/ldn-services-model/ldn-services.model';
import { LdnItemfiltersService } from '../admin/admin-ldn-services/ldn-services-data/ldn-itemfilters-data.service';
import { Itemfilter } from "../admin/admin-ldn-services/ldn-services-model/ldn-service-itemfilters";
/**
* When not in production, endpoint responses can be mocked for testing purposes
@@ -313,6 +315,7 @@ const PROVIDERS = [
OrcidHistoryDataService,
SupervisionOrderDataService,
LdnServicesService,
LdnItemfiltersService
];
/**
@@ -394,7 +397,8 @@ export const models =
BulkAccessConditionOptions,
SuggestionTarget,
SuggestionSource,
LdnService
LdnService,
Itemfilter
];