mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-11 12:03:03 +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 { LdnServiceFormComponent } from './ldn-service-form/ldn-service-form.component';
|
||||||
import { LdnServiceFormEditComponent } from './ldn-service-form-edit/ldn-service-form-edit.component';
|
import { LdnServiceFormEditComponent } from './ldn-service-form-edit/ldn-service-form-edit.component';
|
||||||
import { FormsModule } from '@angular/forms';
|
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,
|
LdnServiceNewComponent,
|
||||||
LdnServiceFormComponent,
|
LdnServiceFormComponent,
|
||||||
LdnServiceFormEditComponent,
|
LdnServiceFormEditComponent,
|
||||||
]
|
],
|
||||||
|
providers: [LdnItemfiltersService]
|
||||||
})
|
})
|
||||||
export class AdminLdnServicesModule { }
|
export class AdminLdnServicesModule { }
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
<form (ngSubmit)="submitForm()" [formGroup]="formModel">
|
<form (ngSubmit)="onSubmit()" [formGroup]="formModel">
|
||||||
|
|
||||||
<!-- In the toggle section -->
|
<!-- In the toggle section -->
|
||||||
<div class="toggle-switch-container">
|
<div class="toggle-switch-container">
|
||||||
@@ -95,8 +95,8 @@
|
|||||||
<ng-container *ngIf="inboundPattern.value">
|
<ng-container *ngIf="inboundPattern.value">
|
||||||
<select formControlName="constraint" id="constraint{{i}}" name="constraint{{i}}">
|
<select formControlName="constraint" id="constraint{{i}}" name="constraint{{i}}">
|
||||||
<option value="">{{ 'ldn-new-service.form.label.placeholder.selectedItemFilter' | translate }}</option>
|
<option value="">{{ 'ldn-new-service.form.label.placeholder.selectedItemFilter' | translate }}</option>
|
||||||
<option *ngFor="let itemFilter of itemFilterList"
|
<option *ngFor="let itemFilter of (itemfiltersRD$ | async)?.payload?.page"
|
||||||
[value]="itemFilter.name">{{ itemFilter.name }}</option>
|
[value]="itemFilter.id">{{ itemFilter.id }}</option>
|
||||||
</select>
|
</select>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
@@ -159,12 +159,13 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<select *ngIf="outboundPattern.value" formControlName="constraint" id="constraint{{i}}"
|
<ng-container *ngIf="outboundPattern.value">
|
||||||
name="constraint{{i}}">
|
<select formControlName="constraint" id="constraint{{i}}" name="constraint{{i}}">
|
||||||
<option value="">{{ 'ldn-new-service.form.label.placeholder.selectedItemFilter' | translate }}</option>
|
<option value="">{{ 'ldn-new-service.form.label.placeholder.selectedItemFilter' | translate }}</option>
|
||||||
<option *ngFor="let itemFilter of itemFilterList"
|
<option *ngFor="let itemFilter of (itemfiltersRD$ | async)?.payload?.page"
|
||||||
[value]="itemFilter.name">{{ itemFilter.name }}</option>
|
[value]="itemFilter.id">{{ itemFilter.id }}</option>
|
||||||
</select>
|
</select>
|
||||||
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div [style.visibility]="'hidden'" class="col-sm1">
|
<div [style.visibility]="'hidden'" class="col-sm1">
|
||||||
@@ -249,7 +250,7 @@
|
|||||||
{{ 'service.overview.reset-form.body' | translate }}
|
{{ 'service.overview.reset-form.body' | translate }}
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-4">
|
<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>
|
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"
|
<button (click)="closeModal()" class="btn btn-danger"
|
||||||
id="reset-delete">{{ 'service.overview.reset-form.reset-return' | translate }}
|
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 { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||||
import { LDN_SERVICE } from '../ldn-services-model/ldn-service.resource-type';
|
import { LDN_SERVICE } from '../ldn-services-model/ldn-service.resource-type';
|
||||||
import { ActivatedRoute, Router } from '@angular/router';
|
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 { LdnServicesService } from '../ldn-services-data/ldn-services-data.service';
|
||||||
import { notifyPatterns } from '../ldn-services-patterns/ldn-service-coar-patterns';
|
import { notifyPatterns } from '../ldn-services-patterns/ldn-service-coar-patterns';
|
||||||
import { animate, state, style, transition, trigger } from '@angular/animations';
|
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 { RemoteData } from 'src/app/core/data/remote-data';
|
||||||
import { Operation } from 'fast-json-patch';
|
import { Operation } from 'fast-json-patch';
|
||||||
import { getFirstCompletedRemoteData } from '../../../core/shared/operators';
|
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({
|
@Component({
|
||||||
selector: 'ds-ldn-service-form-edit',
|
selector: 'ds-ldn-service-form-edit',
|
||||||
@@ -33,7 +39,14 @@ export class LdnServiceFormEditComponent implements OnInit {
|
|||||||
|
|
||||||
public inboundPatterns: object[] = notifyPatterns;
|
public inboundPatterns: object[] = notifyPatterns;
|
||||||
public outboundPatterns: 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 name: string;
|
||||||
@Input() public description: string;
|
@Input() public description: string;
|
||||||
@Input() public url: string;
|
@Input() public url: string;
|
||||||
@@ -51,7 +64,7 @@ export class LdnServiceFormEditComponent implements OnInit {
|
|||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
protected ldnServicesService: LdnServicesService,
|
protected ldnServicesService: LdnServicesService,
|
||||||
private ldnDirectoryService: LdnDirectoryService,
|
private ldnItemfiltersService: LdnItemfiltersService,
|
||||||
private formBuilder: FormBuilder,
|
private formBuilder: FormBuilder,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
@@ -59,6 +72,7 @@ export class LdnServiceFormEditComponent implements OnInit {
|
|||||||
protected modalService: NgbModal,
|
protected modalService: NgbModal,
|
||||||
private notificationService: NotificationsService,
|
private notificationService: NotificationsService,
|
||||||
private translateService: TranslateService,
|
private translateService: TranslateService,
|
||||||
|
protected paginationService: PaginationService
|
||||||
) {
|
) {
|
||||||
|
|
||||||
this.formModel = this.formBuilder.group({
|
this.formModel = this.formBuilder.group({
|
||||||
@@ -84,14 +98,23 @@ export class LdnServiceFormEditComponent implements OnInit {
|
|||||||
this.fetchServiceData(this.serviceId);
|
this.fetchServiceData(this.serviceId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.ldnDirectoryService.getItemFilters().subscribe((itemFilters) => {
|
this.setItemfilters();
|
||||||
this.itemFilterList = itemFilters._embedded.itemfilters.map((filter: { id: string; }) => ({
|
}
|
||||||
name: filter.id
|
|
||||||
}));
|
setItemfilters() {
|
||||||
this.cdRef.detectChanges();
|
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 {
|
fetchServiceData(serviceId: string): void {
|
||||||
this.ldnServicesService.findById(serviceId).pipe(
|
this.ldnServicesService.findById(serviceId).pipe(
|
||||||
getFirstCompletedRemoteData()
|
getFirstCompletedRemoteData()
|
||||||
@@ -100,8 +123,6 @@ export class LdnServiceFormEditComponent implements OnInit {
|
|||||||
if (data.hasSucceeded) {
|
if (data.hasSucceeded) {
|
||||||
this.service = data.payload;
|
this.service = data.payload;
|
||||||
|
|
||||||
console.log(this.service);
|
|
||||||
|
|
||||||
this.formModel.patchValue({
|
this.formModel.patchValue({
|
||||||
id: this.service.id,
|
id: this.service.id,
|
||||||
name: this.service.name,
|
name: this.service.name,
|
||||||
@@ -159,7 +180,7 @@ export class LdnServiceFormEditComponent implements OnInit {
|
|||||||
return patchOperations;
|
return patchOperations;
|
||||||
}
|
}
|
||||||
|
|
||||||
submitForm() {
|
onSubmit() {
|
||||||
this.openConfirmModal(this.confirmModal);
|
this.openConfirmModal(this.confirmModal);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,9 +315,11 @@ export class LdnServiceFormEditComponent implements OnInit {
|
|||||||
patchService() {
|
patchService() {
|
||||||
const patchOperations = this.generatePatchOperations();
|
const patchOperations = this.generatePatchOperations();
|
||||||
|
|
||||||
this.ldnServicesService.patch(this.service, patchOperations).subscribe(
|
this.ldnServicesService.patch(this.service, patchOperations).pipe(
|
||||||
(response) => {
|
getFirstCompletedRemoteData()
|
||||||
console.log('Service updated successfully:', response);
|
).subscribe(
|
||||||
|
() => {
|
||||||
|
|
||||||
this.closeModal();
|
this.closeModal();
|
||||||
this.sendBack();
|
this.sendBack();
|
||||||
this.notificationService.success(this.translateService.get('admin.registries.services-formats.modify.success.head'),
|
this.notificationService.success(this.translateService.get('admin.registries.services-formats.modify.success.head'),
|
||||||
|
@@ -86,8 +86,8 @@
|
|||||||
<ng-container *ngIf="inboundPattern.value">
|
<ng-container *ngIf="inboundPattern.value">
|
||||||
<select formControlName="constraint" id="constraint{{i}}" name="constraint{{i}}">
|
<select formControlName="constraint" id="constraint{{i}}" name="constraint{{i}}">
|
||||||
<option value="">{{ 'ldn-new-service.form.label.placeholder.selectedItemFilter' | translate }}</option>
|
<option value="">{{ 'ldn-new-service.form.label.placeholder.selectedItemFilter' | translate }}</option>
|
||||||
<option *ngFor="let itemFilter of itemFilterList"
|
<option *ngFor="let itemFilter of (itemfiltersRD$ | async)?.payload?.page"
|
||||||
[value]="itemFilter.name">{{ itemFilter.name }}</option>
|
[value]="itemFilter.id">{{ itemFilter.id }}</option>
|
||||||
</select>
|
</select>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
@@ -149,12 +149,13 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<select *ngIf="outboundPattern.value" formControlName="constraint" id="constraint{{i}}"
|
<ng-container *ngIf="outboundPattern.value">
|
||||||
name="constraint{{i}}">
|
<select formControlName="constraint" id="constraint{{i}}" name="constraint{{i}}">
|
||||||
<option value="">{{ 'ldn-new-service.form.label.placeholder.selectedItemFilter' | translate }}</option>
|
<option value="">{{ 'ldn-new-service.form.label.placeholder.selectedItemFilter' | translate }}</option>
|
||||||
<option *ngFor="let itemFilter of itemFilterList"
|
<option *ngFor="let itemFilter of (itemfiltersRD$ | async)?.payload?.page"
|
||||||
[value]="itemFilter.name">{{ itemFilter.name }}</option>
|
[value]="itemFilter.id">{{ itemFilter.id }}</option>
|
||||||
</select>
|
</select>
|
||||||
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div [style.visibility]="'hidden'" class="col-sm1">
|
<div [style.visibility]="'hidden'" class="col-sm1">
|
||||||
@@ -182,6 +183,69 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<button class="btn btn-primary" type="submit">{{ 'ldn-new-service.form.label.submit' | translate }}</button>
|
<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>
|
</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 { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||||
import { Router } from '@angular/router';
|
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 { LdnService } from '../ldn-services-model/ldn-services.model';
|
||||||
import { NotificationsService } from '../../../shared/notifications/notifications.service';
|
import { NotificationsService } from '../../../shared/notifications/notifications.service';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
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({
|
@Component({
|
||||||
@@ -28,11 +44,21 @@ import { TranslateService } from '@ngx-translate/core';
|
|||||||
})
|
})
|
||||||
export class LdnServiceFormComponent implements OnInit {
|
export class LdnServiceFormComponent implements OnInit {
|
||||||
formModel: FormGroup;
|
formModel: FormGroup;
|
||||||
|
private modalRef: any;
|
||||||
|
@ViewChild('confirmModal', {static: true}) confirmModal: TemplateRef<any>;
|
||||||
|
@ViewChild('resetFormModal', {static: true}) resetFormModal: TemplateRef<any>;
|
||||||
|
|
||||||
|
|
||||||
public inboundPatterns: object[] = notifyPatterns;
|
public inboundPatterns: object[] = notifyPatterns;
|
||||||
public outboundPatterns: 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(
|
constructor(
|
||||||
private ldnServicesService: LdnServicesService,
|
private ldnServicesService: LdnServicesService,
|
||||||
private ldnDirectoryService: LdnDirectoryService,
|
private ldnItemfiltersService: LdnItemfiltersService,
|
||||||
private formBuilder: FormBuilder,
|
private formBuilder: FormBuilder,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private notificationsService: NotificationsService,
|
private notificationsService: NotificationsService,
|
||||||
private translateService: TranslateService
|
private translateService: TranslateService,
|
||||||
|
private cdRef: ChangeDetectorRef,
|
||||||
|
protected modalService: NgbModal,
|
||||||
|
|
||||||
) {
|
) {
|
||||||
|
|
||||||
this.formModel = this.formBuilder.group({
|
this.formModel = this.formBuilder.group({
|
||||||
@@ -75,15 +104,19 @@ export class LdnServiceFormComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
this.ldnDirectoryService.getItemFilters().subscribe((itemFilters) => {
|
this.setItemfilters();
|
||||||
console.log(itemFilters);
|
|
||||||
this.itemFilterList = itemFilters._embedded.itemfilters.map((filter: { id: string; }) => ({
|
|
||||||
name: filter.id
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
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) {
|
/*createLdnService(values: any) {
|
||||||
this.formModel.get('name').markAsTouched();
|
this.formModel.get('name').markAsTouched();
|
||||||
this.formModel.get('url').markAsTouched();
|
this.formModel.get('url').markAsTouched();
|
||||||
@@ -106,7 +139,7 @@ export class LdnServiceFormComponent implements OnInit {
|
|||||||
).subscribe((rd: RemoteData<LdnService>) => {
|
).subscribe((rd: RemoteData<LdnService>) => {
|
||||||
if (rd.hasSucceeded) {
|
if (rd.hasSucceeded) {
|
||||||
this.notificationsService.success(this.translateService.get('notification.created.success'));
|
this.notificationsService.success(this.translateService.get('notification.created.success'));
|
||||||
this.submitForm.emit(values);
|
this.onSubmit.emit(values);
|
||||||
} else {
|
} else {
|
||||||
this.notificationsService.error(this.translateService.get('notification.created.failure', ));
|
this.notificationsService.error(this.translateService.get('notification.created.failure', ));
|
||||||
this.cancelForm.emit();
|
this.cancelForm.emit();
|
||||||
@@ -116,6 +149,17 @@ export class LdnServiceFormComponent implements OnInit {
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
onSubmit() {
|
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('name').markAsTouched();
|
||||||
this.formModel.get('url').markAsTouched();
|
this.formModel.get('url').markAsTouched();
|
||||||
this.formModel.get('ldnUrl').markAsTouched();
|
this.formModel.get('ldnUrl').markAsTouched();
|
||||||
@@ -125,6 +169,7 @@ export class LdnServiceFormComponent implements OnInit {
|
|||||||
const ldnUrl = this.formModel.get('ldnUrl').value;
|
const ldnUrl = this.formModel.get('ldnUrl').value;
|
||||||
|
|
||||||
if (!name || !url || !ldnUrl) {
|
if (!name || !url || !ldnUrl) {
|
||||||
|
this.closeModal();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,27 +177,29 @@ export class LdnServiceFormComponent implements OnInit {
|
|||||||
|
|
||||||
const ldnServiceData = this.ldnServicesService.create(values);
|
const ldnServiceData = this.ldnServicesService.create(values);
|
||||||
|
|
||||||
ldnServiceData.pipe(
|
|
||||||
getFirstCompletedRemoteData()
|
|
||||||
).subscribe((ldnNewService) => {
|
|
||||||
console.log(ldnNewService);
|
|
||||||
});
|
|
||||||
|
|
||||||
ldnServiceData.pipe(
|
ldnServiceData.pipe(
|
||||||
getFirstCompletedRemoteData()
|
getFirstCompletedRemoteData()
|
||||||
).subscribe((rd: RemoteData<LdnService>) => {
|
).subscribe((rd: RemoteData<LdnService>) => {
|
||||||
if (rd.hasSucceeded) {
|
if (rd.hasSucceeded) {
|
||||||
this.notificationsService.success(this.translateService.get('notification.created.success'));
|
this.notificationsService.success(this.translateService.get('notification.created.success'));
|
||||||
this.submitForm.emit();
|
|
||||||
this.sendBack();
|
this.sendBack();
|
||||||
} else {
|
} else {
|
||||||
this.notificationsService.error(this.translateService.get('notification.created.failure'));
|
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() {
|
addInboundPattern() {
|
||||||
const notifyServiceInboundPatternsArray = this.formModel.get('notifyServiceInboundPatterns') as FormArray;
|
const notifyServiceInboundPatternsArray = this.formModel.get('notifyServiceInboundPatterns') as FormArray;
|
||||||
notifyServiceInboundPatternsArray.push(this.createInboundPatternFormGroup());
|
notifyServiceInboundPatternsArray.push(this.createInboundPatternFormGroup());
|
||||||
@@ -184,6 +231,8 @@ export class LdnServiceFormComponent implements OnInit {
|
|||||||
this.router.navigateByUrl('admin/ldn/services');
|
this.router.navigateByUrl('admin/ldn/services');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private createOutboundPatternFormGroup(): FormGroup {
|
private createOutboundPatternFormGroup(): FormGroup {
|
||||||
return this.formBuilder.group({
|
return this.formBuilder.group({
|
||||||
pattern: [''],
|
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 { getFirstCompletedRemoteData } from 'src/app/core/shared/operators';
|
||||||
import { hasValue } from 'src/app/shared/empty.util';
|
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()
|
@Injectable()
|
||||||
@dataService(LDN_SERVICE)
|
@dataService(LDN_SERVICE)
|
||||||
export class LdnServicesService extends IdentifiableDataService<LdnService> implements FindAllData<LdnService>, DeleteData<LdnService>, PatchData<LdnService>, CreateData<LdnService> {
|
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 { FindListOptions } from '../../../core/data/find-list-options.model';
|
||||||
import { LdnService } from '../ldn-services-model/ldn-services.model';
|
import { LdnService } from '../ldn-services-model/ldn-services.model';
|
||||||
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.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 { 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 { PaginationService } from 'src/app/core/pagination/pagination.service';
|
||||||
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
||||||
import { hasValue } from '../../../shared/empty.util';
|
import { hasValue } from '../../../shared/empty.util';
|
||||||
import { Operation } from 'fast-json-patch';
|
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 { NotificationsService } from '../../../shared/notifications/notifications.service';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
@@ -55,8 +55,9 @@ export class LdnServicesOverviewComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
setLdnServices() {
|
setLdnServices() {
|
||||||
this.ldnServicesRD$ = this.paginationService.getFindListOptions(this.pageConfig.id, this.config).pipe(
|
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()
|
getFirstCompletedRemoteData()
|
||||||
|
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -96,6 +97,14 @@ export class LdnServicesOverviewComponent implements OnInit, OnDestroy {
|
|||||||
ldnServicesService.delete(serviceId).pipe(getFirstCompletedRemoteData()).subscribe((rd: RemoteData<LdnService>) => {
|
ldnServicesService.delete(serviceId).pipe(getFirstCompletedRemoteData()).subscribe((rd: RemoteData<LdnService>) => {
|
||||||
if (rd.hasSucceeded) {
|
if (rd.hasSucceeded) {
|
||||||
this.servicesData = this.servicesData.filter(service => service.id !== serviceId);
|
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.cdRef.detectChanges();
|
||||||
this.closeModal();
|
this.closeModal();
|
||||||
this.notificationService.success(this.translateService.get('notification.created.success'));
|
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';
|
import { ResourceType } from '../../../core/shared/resource-type';
|
||||||
|
|
||||||
export const LDN_SERVICE = new ResourceType('ldnservice');
|
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
|
@typedObject
|
||||||
@inheritSerialization(CacheableObject)
|
@inheritSerialization(CacheableObject)
|
||||||
export class LdnService extends CacheableObject {
|
export class LdnService extends CacheableObject {
|
||||||
|
@@ -1,57 +1,26 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { HttpClient } from '@angular/common/http';
|
import { HttpClient } from '@angular/common/http';
|
||||||
import { Observable, tap } from 'rxjs';
|
import { map, Observable } from 'rxjs';
|
||||||
import { LdnService } from '../ldn-services-model/ldn-services.model';
|
import { LdnServicesService } from "../ldn-services-data/ldn-services-data.service";
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root',
|
providedIn: 'root',
|
||||||
})
|
})
|
||||||
export class LdnDirectoryService {
|
export class LdnDirectoryService {
|
||||||
private baseUrl = 'http://localhost:8080/server/api/ldn/ldnservices';
|
|
||||||
private itemFilterEndpoint = 'http://localhost:8080/server/api/config/itemfilters';
|
private itemFilterEndpoint = 'http://localhost:8080/server/api/config/itemfilters';
|
||||||
|
|
||||||
|
|
||||||
constructor(private http: HttpClient) {}
|
constructor(private http: HttpClient,
|
||||||
|
private ldnServicesService: LdnServicesService) {}
|
||||||
|
public getItemFilters(): Observable<any> {
|
||||||
|
|
||||||
|
return this.ldnServicesService.findAll().pipe(
|
||||||
public listLdnServices(): Observable<LdnService[]> {
|
map((servicesData) => {
|
||||||
const endpoint = `${this.baseUrl}`;
|
return servicesData;
|
||||||
return this.http.get<LdnService[]>(endpoint).pipe(
|
|
||||||
tap(data => {
|
|
||||||
console.log('listLdnServices() Data:', data);
|
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
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 { 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 { 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 { 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
|
* When not in production, endpoint responses can be mocked for testing purposes
|
||||||
@@ -313,6 +315,7 @@ const PROVIDERS = [
|
|||||||
OrcidHistoryDataService,
|
OrcidHistoryDataService,
|
||||||
SupervisionOrderDataService,
|
SupervisionOrderDataService,
|
||||||
LdnServicesService,
|
LdnServicesService,
|
||||||
|
LdnItemfiltersService
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -394,7 +397,8 @@ export const models =
|
|||||||
BulkAccessConditionOptions,
|
BulkAccessConditionOptions,
|
||||||
SuggestionTarget,
|
SuggestionTarget,
|
||||||
SuggestionSource,
|
SuggestionSource,
|
||||||
LdnService
|
LdnService,
|
||||||
|
Itemfilter
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user