mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-11 03:53:02 +00:00
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:
@@ -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 { }
|
||||
|
@@ -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 }}
|
||||
|
@@ -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'),
|
||||
|
@@ -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 @@
|
||||
|
||||
</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>
|
||||
|
||||
|
||||
|
@@ -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: [''],
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
@@ -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> {
|
||||
|
@@ -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'));
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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');
|
||||
|
@@ -8,7 +8,7 @@ import { NotifyServicePattern } from './ldn-service-patterns.model';
|
||||
|
||||
|
||||
|
||||
|
||||
/** An LdnService and its properties. */
|
||||
@typedObject
|
||||
@inheritSerialization(CacheableObject)
|
||||
export class LdnService extends CacheableObject {
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@@ -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
|
||||
|
||||
];
|
||||
|
||||
|
Reference in New Issue
Block a user