136 lines
4.9 KiB
TypeScript
136 lines
4.9 KiB
TypeScript
import {Component, OnInit} from '@angular/core';
|
|
import {ActivatedRoute, Router} from '@angular/router';
|
|
import {HelperFunctions} from '../../../../openaireLibrary/utils/HelperFunctions.class';
|
|
import {SearchCommunityDataprovidersService} from '../../../../openaireLibrary/connect/contentProviders/searchDataproviders.service';
|
|
import {EnvProperties} from '../../../../openaireLibrary/utils/properties/env-properties';
|
|
import {ContentProvider} from '../../../../openaireLibrary/utils/entities/contentProvider';
|
|
import {FormArray, FormBuilder, FormGroup, Validators} from '@angular/forms';
|
|
import {ManageCommunityContentProvidersService} from '../../../../services/manageContentProviders.service';
|
|
|
|
@Component({
|
|
selector: 'criteria',
|
|
templateUrl: './criteria.component.html'
|
|
})
|
|
|
|
export class CriteriaComponent implements OnInit {
|
|
public community: string = '';
|
|
public openaireId: string = '';
|
|
public dataProvider: ContentProvider = null;
|
|
public selectioncriteria: FormGroup;
|
|
private properties: EnvProperties;
|
|
showLoading = true;
|
|
public errorMessage: string;
|
|
|
|
constructor(private route: ActivatedRoute, private _router: Router,
|
|
private searchCommunityDataprovidersService: SearchCommunityDataprovidersService,
|
|
private manageCommunityContentProvidersService: ManageCommunityContentProvidersService,
|
|
private fb: FormBuilder) {
|
|
}
|
|
|
|
ngOnInit() {
|
|
this.route.data.subscribe((data: { envSpecific: EnvProperties }) => {
|
|
this.properties = data.envSpecific;
|
|
this.route.queryParams.subscribe(params => {
|
|
if (params['communityId']) {
|
|
this.community = params['communityId'];
|
|
}
|
|
if (params['openaireId']) {
|
|
this.openaireId = params['openaireId'];
|
|
}
|
|
this.searchCommunityDataprovidersService.searchDataproviders(this.properties, this.community).subscribe(dataProviders => {
|
|
dataProviders.forEach(dataProvider => {
|
|
if (dataProvider.openaireId == this.openaireId) {
|
|
this.dataProvider = dataProvider;
|
|
}
|
|
});
|
|
if (!this.dataProvider) {
|
|
this._router.navigate(['manage-content-providers'],
|
|
{queryParams: {'communityId': this.community}});
|
|
}
|
|
this.buildForm();
|
|
this.showLoading = false;
|
|
});
|
|
HelperFunctions.scroll();
|
|
});
|
|
});
|
|
}
|
|
|
|
public ngOnDestroy() {
|
|
}
|
|
|
|
buildForm() {
|
|
this.selectioncriteria = this.fb.group({
|
|
criteria: this.fb.array([])
|
|
});
|
|
let selectionCriteria = this.dataProvider.selectioncriteria;
|
|
if (selectionCriteria) {
|
|
selectionCriteria.criteria.forEach(criterion => {
|
|
let constraintArray: FormArray = this.fb.array([]);
|
|
criterion.constraint.forEach(constraint => {
|
|
constraintArray.push(this.fb.group({
|
|
field: this.fb.control(constraint.field, Validators.required),
|
|
verb: this.fb.control(constraint.verb, Validators.required),
|
|
value: this.fb.control(constraint.value, Validators.required)
|
|
}));
|
|
});
|
|
this.criteria.push(this.fb.group({
|
|
constraint: constraintArray
|
|
}));
|
|
});
|
|
}
|
|
}
|
|
|
|
public get criteria(): FormArray {
|
|
return this.selectioncriteria.get('criteria') as FormArray;
|
|
}
|
|
|
|
public getConstraint(i: number): FormArray {
|
|
return this.criteria.at(i).get('constraint') as FormArray;
|
|
}
|
|
|
|
public addCriteria() {
|
|
let constraintArray: FormArray = this.fb.array([
|
|
this.fb.group({
|
|
field: this.fb.control('', Validators.required),
|
|
verb: this.fb.control('contains', Validators.required),
|
|
value: this.fb.control('', Validators.required)
|
|
})
|
|
]);
|
|
this.criteria.push(this.fb.group({
|
|
constraint: constraintArray
|
|
}));
|
|
}
|
|
|
|
public addConstraint(i: number) {
|
|
let constraintArray: FormArray = this.criteria.at(i).get('constraint') as FormArray;
|
|
constraintArray.push(this.fb.group({
|
|
field: this.fb.control('', Validators.required),
|
|
verb: this.fb.control('contains', Validators.required),
|
|
value: this.fb.control('', Validators.required)
|
|
}));
|
|
}
|
|
|
|
public removeConstraint(i: number, j: number) {
|
|
let constraintArray: FormArray = this.criteria.at(i).get('constraint') as FormArray;
|
|
constraintArray.removeAt(j);
|
|
if (constraintArray.length === 0) {
|
|
this.criteria.removeAt(i);
|
|
}
|
|
}
|
|
|
|
save() {
|
|
this.errorMessage = null;
|
|
if (this.selectioncriteria.status === 'VALID') {
|
|
this.dataProvider.selectioncriteria = this.selectioncriteria.value;
|
|
this.manageCommunityContentProvidersService.
|
|
saveContentProvider(this.properties, this.dataProvider).subscribe( () => {
|
|
this._router.navigate(['manage-content-providers'], {
|
|
queryParams: {communityId: this.dataProvider.communityId}
|
|
});
|
|
});
|
|
} else {
|
|
this.errorMessage = 'Please fill all fields of each constraint or remove all constraints with empty fields.';
|
|
}
|
|
}
|
|
}
|