Revision 60672
Added by Konstantinos Triantafyllou over 3 years ago
modules/uoa-admin-portal/branches/new-UI/src/app/pages/community/content-providers/criteria/criteria-routing.module.ts | ||
---|---|---|
1 |
import { NgModule } from '@angular/core';
|
|
1 |
import {NgModule} from '@angular/core';
|
|
2 | 2 |
import {RouterModule} from '@angular/router'; |
3 |
import {IsCommunity} from '../../../../openaireLibrary/connect/communityGuard/isCommunity.guard'; |
|
4 |
import {ConnectAdminLoginGuard} from '../../../../openaireLibrary/connect/communityGuard/connectAdminLoginGuard.guard'; |
|
5 | 3 |
import {CriteriaComponent} from './criteria.component'; |
6 | 4 |
|
7 | 5 |
@NgModule({ |
8 |
imports: [
|
|
9 |
RouterModule.forChild([
|
|
10 |
{ path: '', canActivate: [IsCommunity, ConnectAdminLoginGuard], component: CriteriaComponent}
|
|
11 |
])
|
|
12 |
]
|
|
6 |
imports: [ |
|
7 |
RouterModule.forChild([ |
|
8 |
{path: '', component: CriteriaComponent}
|
|
9 |
]) |
|
10 |
] |
|
13 | 11 |
}) |
14 |
export class CriteriaRoutingModule { } |
|
12 |
export class CriteriaRoutingModule { |
|
13 |
} |
modules/uoa-admin-portal/branches/new-UI/src/app/pages/community/content-providers/criteria/criteria.component.html | ||
---|---|---|
1 |
<div *ngIf="showLoading" class="uk-animation-fade uk-width-1-1" role="alert"> |
|
2 |
<span class="loading-gif uk-align-center"></span> |
|
3 |
</div> |
|
4 |
<div *ngIf="dataProvider" class="uk-padding uk-padding-remove-bottom"> |
|
5 |
<div class="uk-flex uk-flex-middle" uk-grid> |
|
6 |
<div class="uk-flex uk-flex-middle uk-width-4-5"> |
|
7 |
<a class="uk-icon uk-margin-right" uk-icon="icon: arrow-left; ratio: 2" |
|
8 |
routerLink="/manage-content-providers" [queryParams]="{communityId: community}"></a> |
|
9 |
<div class="uk-width-expand"> |
|
10 |
<span>Criteria for</span><br> |
|
11 |
<span class="uk-text-large uk-text-bold">{{dataProvider.officialname}}</span> |
|
12 |
</div> |
|
1 |
<div page-content> |
|
2 |
<div header> |
|
3 |
<div class="uk-margin-top"> |
|
4 |
<a routerLink="../" class="uk-text-secondary uk-text-uppercase uk-text-bold uk-text-small"> |
|
5 |
<span class="uk-icon-button uk-icon small uk-button-secondary"> |
|
6 |
<icon name="arrow_left"></icon> |
|
7 |
</span> |
|
8 |
<span class="space"> |
|
9 |
Go back to Content Providers |
|
10 |
</span> |
|
11 |
</a> |
|
13 | 12 |
</div> |
14 |
<div class="uk-width-expand uk-text-right"> |
|
15 |
<button class="uk-button uk-width-1-2@l uk-button-danger" |
|
16 |
(click)="save()">Save</button> |
|
17 |
</div> |
|
18 | 13 |
</div> |
19 |
<div class="uk-alert uk-alert-primary uk-flex uk-flex-middle uk-margin-medium-top"> |
|
20 |
<span class="uk-icon uk-margin-small-right" uk-icon="info"></span> |
|
21 |
<div class="uk-width-expand"> |
|
22 |
If no criteria are specified, all research results of this content provider will be included in your community. |
|
14 |
<div inner> |
|
15 |
<div class="uk-card-header"> |
|
16 |
<div class="uk-flex uk-flex-middle uk-child-width-1-1 uk-child-width-1-2@m uk-grid" uk-grid> |
|
17 |
<div> |
|
18 |
<div class="uk-text-small uk-text-muted">Criteria for</div> |
|
19 |
<div> |
|
20 |
<span *ngIf="dataProvider" class="uk-text-bold">{{dataProvider.officialname}}</span> |
|
21 |
<span *ngIf="dirty"> (unsaved changes)</span> |
|
22 |
</div> |
|
23 |
</div> |
|
24 |
<div class=" uk-flex uk-flex-right"> |
|
25 |
<button (click)="reset()" [disabled]="loading || !dirty" |
|
26 |
class="uk-button uk-button-secondary outlined uk-margin-small-right">Reset |
|
27 |
</button> |
|
28 |
<button (click)="save()" class="uk-button uk-button-secondary uk-margin-small-right" |
|
29 |
[disabled]="loading || !dirty || selectionCriteria.invalid ">Save |
|
30 |
</button> |
|
31 |
</div> |
|
32 |
</div> |
|
23 | 33 |
</div> |
24 |
</div> |
|
25 |
<div class="uk-margin-top uk-margin-bottom"> |
|
26 |
<span>Add criteria to limit research results.</span><br> |
|
27 |
<span>Results which satisfy any of the above criteria will be included in your community.</span> |
|
28 |
</div> |
|
29 |
<div *ngIf="errorMessage" class="uk-alert uk-alert-danger" role="alert">{{errorMessage}}</div> |
|
30 |
<div *ngIf="criteria.length === 0" |
|
31 |
class="uk-padding uk-position-relative"> |
|
32 |
<div class="uk-position-center"> |
|
33 |
No criteria are specified |
|
34 |
</div> |
|
35 |
</div> |
|
36 |
<div *ngIf="criteria.controls.length > 0" [formGroup]="selectioncriteria"> |
|
37 |
<div formArrayName="criteria"> |
|
38 |
<div class="uk-margin-top" *ngFor="let criterion of criteria.controls; let i=index" [formGroupName]="i"> |
|
39 |
<span class="uk-text-uppercase uk-text-large uk-margin-small-bottom">Criterion {{i + 1}}</span><br> |
|
40 |
<div class="uk-padding" style="border: solid 1px;" formArrayName="constraint"> |
|
41 |
<div class="uk-flex uk-flex-middle uk-grid-small uk-margin-small-bottom" uk-grid> |
|
42 |
<div class="uk-width-1-5"> |
|
43 |
<label class="uk-text-uppercase uk-text-muted">Constraint Field</label> |
|
44 |
</div> |
|
45 |
<div class="uk-width-1-5"> |
|
46 |
<label class="uk-text-uppercase uk-text-muted">Operator</label> |
|
47 |
</div> |
|
48 |
<div class="uk-width-2-5"> |
|
49 |
<label class="uk-text-uppercase uk-text-muted">Term</label> |
|
50 |
</div> |
|
34 |
<div class="uk-card uk-card-default uk-position-relative" style="min-height: 60vh"> |
|
35 |
<div *ngIf="!loading" class="uk-padding-large uk-padding-remove-bottom uk-overflow-auto" style="max-height: 60vh;"> |
|
36 |
<div *ngIf="criteria.length == 0" class="uk-padding-large uk-text-center uk-text-bold"> |
|
37 |
<div *ngIf="dataProvider">No criteria for {{dataProvider.officialname}}.</div> |
|
38 |
<div>If no criteria are specified, all research results of this content provider will be included in your |
|
39 |
community. |
|
51 | 40 |
</div> |
52 |
<div *ngFor="let constraint of getConstraint(i).controls; let j=index" |
|
53 |
[formGroupName]="j" class="uk-margin-bottom"> |
|
54 |
<div class="uk-flex uk-flex-middle uk-grid-small" uk-grid> |
|
55 |
<div class="uk-width-1-5"> |
|
56 |
<select formControlName="field" class="form-control uk-select" |
|
57 |
[class.uk-text-muted]="constraint.get('field').value === ''" |
|
58 |
[class.uk-form-danger]="constraint.get('field').status === 'INVALID'"> |
|
59 |
<option [value]="''" disabled selected hidden>Select a field...</option> |
|
60 |
<option [value]="'title'">title</option> |
|
61 |
<option [value]="'author'">author's name</option> |
|
62 |
<option [value]="'author ORCID'">author's ORCID</option> |
|
63 |
<option [value]="'contributor'">contributor</option> |
|
64 |
<option [value]="'description'">description</option> |
|
65 |
</select> |
|
41 |
</div> |
|
42 |
<form *ngIf="criteria.length > 0" [formGroup]="selectionCriteria"> |
|
43 |
<div formArrayName="criteria" class="uk-margin-bottom"> |
|
44 |
<div class="uk-margin-top" *ngFor="let criterion of criteria.controls; let i=index" [formGroupName]="i"> |
|
45 |
<h6 class="uk-text-bold uk-form-label uk-margin-small-bottom">Criterion {{i + 1}}</h6> |
|
46 |
<div class="uk-padding criterion" formArrayName="constraint"> |
|
47 |
<div class="uk-flex uk-flex-middle uk-grid-small uk-margin-small-bottom" uk-grid> |
|
48 |
<div class="uk-width-small uk-visible@m"></div> |
|
49 |
<div class="uk-width-1-4"> |
|
50 |
<label class="uk-text-uppercase uk-text-bold">Constraint Field</label> |
|
51 |
</div> |
|
52 |
<div class="uk-width-1-4"> |
|
53 |
<label class="uk-text-uppercase uk-text-bold">Operator</label> |
|
54 |
</div> |
|
55 |
<div class="uk-width-1-4"> |
|
56 |
<label class="uk-text-uppercase uk-text-bold">Term</label> |
|
57 |
</div> |
|
58 |
</div> |
|
59 |
<div *ngFor="let constraint of getConstraint(i).controls; let j=index" |
|
60 |
[formGroupName]="j" class="uk-margin-bottom"> |
|
61 |
<div class="uk-flex uk-flex-middle uk-grid-small" uk-grid> |
|
62 |
<div class="uk-width-small@m uk-width-1-1 uk-flex uk-flex-center"> |
|
63 |
<span *ngIf="j > 0">AND</span> |
|
64 |
</div> |
|
65 |
<div class="uk-width-1-4" dashboard-input type="select" placeholder="Select a field" [options]="fields" [formInput]="constraint.get('field')"></div> |
|
66 |
<div class="uk-width-1-4" dashboard-input type="select" placeholder="Select an operator" [options]="verbs" [formInput]="constraint.get('verb')"></div> |
|
67 |
<div class="uk-width-1-4" dashboard-input placeholder="Write a term" [formInput]="constraint.get('value')"></div> |
|
68 |
<div class="uk-width-expand uk-flex uk-flex-center"> |
|
69 |
<a class="remove" (click)="removeConstraint(i, j)"> |
|
70 |
<icon name="close" [attr.uk-tooltip]="(getConstraint(i).length === 1?'By removing this constraint, the criterion will be removed too':null)"></icon> |
|
71 |
</a> |
|
72 |
</div> |
|
73 |
</div> |
|
74 |
</div> |
|
75 |
<div class="uk-flex uk-flex-middle uk-grid-small" uk-grid> |
|
76 |
<div class="uk-width-small@m uk-width-1-1 uk-flex uk-flex-center"></div> |
|
77 |
<a (click)="addConstraint(i)" class="uk-flex uk-flex-middle uk-text-uppercase"> |
|
78 |
<button class="large uk-icon-button uk-button-secondary"> |
|
79 |
<icon name="add"></icon> |
|
80 |
</button> |
|
81 |
<button class="uk-button uk-button-link uk-margin-small-left uk-text-secondary"> |
|
82 |
Add Constraint |
|
83 |
</button> |
|
84 |
</a> |
|
85 |
</div> |
|
66 | 86 |
</div> |
67 |
<div class="uk-width-1-5"> |
|
68 |
<select formControlName="verb" class="form-control uk-select" |
|
69 |
[class.uk-form-danger]="constraint.get('verb').status === 'INVALID'"> |
|
70 |
<option [value]="'contains'">contains</option> |
|
71 |
<option [value]="'equals'">equals</option> |
|
72 |
<option [value]="'not_contains'">not contains</option> |
|
73 |
<option [value]="'not_equals'">not equals</option> |
|
74 |
</select> |
|
75 |
</div> |
|
76 |
<div class="uk-width-2-5"> |
|
77 |
<input type="text" class="uk-input" formControlName="value" placeholder="Type term..." |
|
78 |
[class.uk-form-danger]="constraint.get('value').status === 'INVALID'"> |
|
79 |
</div> |
|
80 |
<div class="uk-width-1-6"> |
|
81 |
<span *ngIf="getConstraint(i).length > j + 1">AND</span> |
|
82 |
</div> |
|
83 |
<div class="uk-width-expand" *ngIf="getConstraint(i).length > 1"> |
|
84 |
<button class="uk-icon-button uk-button-danger uk-icon uk-margin-small-right" |
|
85 |
uk-icon="minus" (click)="removeConstraint(i, j)"></button> |
|
86 |
</div> |
|
87 |
<div class="uk-width-expand" *ngIf="getConstraint(i).length === 1"> |
|
88 |
<button class="uk-icon-button uk-button-danger uk-icon uk-margin-small-right" |
|
89 |
uk-icon="minus" (click)="removeConstraint(i, j)" |
|
90 |
uk-tooltip="title: By removing this constraint, the criterion will be removed too."></button> |
|
91 |
</div> |
|
92 | 87 |
</div> |
93 | 88 |
</div> |
94 |
<div class="uk-margin-top uk-flex uk-flex-middle uk-flex-right"> |
|
95 |
<button class="uk-icon-button uk-button-danger uk-icon uk-margin-small-right" |
|
96 |
(click)="addConstraint(i)" uk-icon="plus"></button> |
|
97 |
<span class="uk-text-uppercase clickable" (click)="addConstraint(i)">Add Constraint</span> |
|
98 |
</div> |
|
89 |
</form> |
|
90 |
<div class="uk-flex uk-flex-center uk-margin-large-bottom"> |
|
91 |
<a (click)="addCriteria()" class="uk-flex uk-flex-middle uk-text-uppercase" |
|
92 |
uk-tooltip="<div class='uk-padding-small'>Add criteria to limit research results.<br>Results which satisfy any of the selected criteria will be included in your community.</div>"> |
|
93 |
<button class="large uk-icon-button uk-button-secondary"> |
|
94 |
<icon name="add"></icon> |
|
95 |
</button> |
|
96 |
<button class="uk-button uk-button-link uk-margin-small-left uk-text-secondary"> |
|
97 |
Add criterion |
|
98 |
</button> |
|
99 |
</a> |
|
99 | 100 |
</div> |
100 | 101 |
</div> |
102 |
<div *ngIf="loading" class="uk-position-center"> |
|
103 |
<loading></loading> |
|
104 |
</div> |
|
101 | 105 |
</div> |
102 | 106 |
</div> |
103 |
<div class="uk-margin-top uk-flex uk-flex-middle"> |
|
104 |
<button class="uk-icon-button uk-button-danger uk-icon uk-margin-small-right" |
|
105 |
(click)="addCriteria()" uk-icon="plus"></button> |
|
106 |
<span class="uk-text-uppercase clickable" (click)="addCriteria()">Add Criterion</span> |
|
107 |
</div> |
|
108 | 107 |
</div> |
modules/uoa-admin-portal/branches/new-UI/src/app/pages/community/content-providers/criteria/criteria.component.ts | ||
---|---|---|
1 |
import {Component, OnInit} from '@angular/core'; |
|
1 |
import {Component, OnDestroy, OnInit} from '@angular/core';
|
|
2 | 2 |
import {ActivatedRoute, Router} from '@angular/router'; |
3 |
import {HelperFunctions} from '../../../../openaireLibrary/utils/HelperFunctions.class'; |
|
4 | 3 |
import {SearchCommunityDataprovidersService} from '../../../../openaireLibrary/connect/contentProviders/searchDataproviders.service'; |
5 | 4 |
import {EnvProperties} from '../../../../openaireLibrary/utils/properties/env-properties'; |
6 |
import {ContentProvider} from '../../../../openaireLibrary/utils/entities/contentProvider'; |
|
5 |
import {ContentProvider, Criteria} from '../../../../openaireLibrary/utils/entities/contentProvider';
|
|
7 | 6 |
import {FormArray, FormBuilder, FormGroup, Validators} from '@angular/forms'; |
8 | 7 |
import {ManageCommunityContentProvidersService} from '../../../../services/manageContentProviders.service'; |
9 | 8 |
import {Title} from '@angular/platform-browser'; |
9 |
import {properties} from "../../../../../environments/environment"; |
|
10 |
import {Subscription} from "rxjs"; |
|
11 |
import {CommunityService} from "../../../../openaireLibrary/connect/community/community.service"; |
|
12 |
import {Option} from "../../../../openaireLibrary/sharedComponents/input/input.component"; |
|
10 | 13 |
|
14 |
declare var UIkit; |
|
15 |
|
|
11 | 16 |
@Component({ |
12 | 17 |
selector: 'criteria', |
13 |
templateUrl: './criteria.component.html' |
|
18 |
templateUrl: './criteria.component.html', |
|
19 |
styleUrls: ['criteria.component.css'] |
|
14 | 20 |
}) |
15 |
|
|
16 |
export class CriteriaComponent implements OnInit { |
|
21 |
export class CriteriaComponent implements OnInit, OnDestroy { |
|
17 | 22 |
public community: string = ''; |
18 | 23 |
public openaireId: string = ''; |
19 | 24 |
public dataProvider: ContentProvider = null; |
20 |
public selectioncriteria: FormGroup; |
|
21 |
private properties: EnvProperties; |
|
22 |
showLoading = true; |
|
23 |
public errorMessage: string; |
|
24 |
|
|
25 |
constructor(private route: ActivatedRoute, private _router: Router, |
|
25 |
public selectionCriteria: FormGroup; |
|
26 |
public properties: EnvProperties = properties; |
|
27 |
public fields: Option[] = [ |
|
28 |
{value: 'title', label: 'Title'}, |
|
29 |
{value: 'author', label: 'Author\'s name'}, |
|
30 |
{value: 'author ORCID', label: 'Author\'s ORCID'}, |
|
31 |
{value: 'contributor', label: 'Contributor'}, |
|
32 |
{value: 'description', label: 'Description'} |
|
33 |
] |
|
34 |
public verbs: Option[] = [ |
|
35 |
{value: 'contains', label: 'Contains'}, |
|
36 |
{value: 'equals', label: 'Equals'}, |
|
37 |
{value: 'not_contains', label: 'Not Contains'}, |
|
38 |
{value: 'not_equals', label: 'Not equals'} |
|
39 |
] |
|
40 |
public loading = true; |
|
41 |
private subs: any[] = []; |
|
42 |
|
|
43 |
constructor(private route: ActivatedRoute, private router: Router, |
|
26 | 44 |
private title: Title, |
45 |
private communityService: CommunityService, |
|
27 | 46 |
private searchCommunityDataprovidersService: SearchCommunityDataprovidersService, |
28 | 47 |
private manageCommunityContentProvidersService: ManageCommunityContentProvidersService, |
29 | 48 |
private fb: FormBuilder) { |
30 | 49 |
} |
31 |
|
|
50 |
|
|
32 | 51 |
ngOnInit() { |
33 |
this.route.data.subscribe((data: { envSpecific: EnvProperties }) => {
|
|
34 |
this.properties = data.envSpecific;
|
|
35 |
this.route.queryParams.subscribe(params => {
|
|
36 |
if (params['communityId']) {
|
|
37 |
this.community = params['communityId'];
|
|
52 |
this.subs.push(this.communityService.getCommunityAsObservable().subscribe(community => {
|
|
53 |
this.community = community.communityId;
|
|
54 |
this.route.params.subscribe(params => {
|
|
55 |
if (params['provider']) {
|
|
56 |
this.openaireId = params['provider'];
|
|
38 | 57 |
} |
39 |
if (params['openaireId']) { |
|
40 |
this.openaireId = params['openaireId']; |
|
41 |
} |
|
42 |
this.title.setTitle('Administration Dashboard | Criteria'); |
|
43 | 58 |
this.searchCommunityDataprovidersService.searchDataproviders(this.properties, this.community).subscribe(dataProviders => { |
44 | 59 |
dataProviders.forEach(dataProvider => { |
45 | 60 |
if (dataProvider.openaireId == this.openaireId) { |
46 | 61 |
this.dataProvider = dataProvider; |
62 |
this.title.setTitle(community.shortTitle + ' | Criteria for ' + this.dataProvider.officialname); |
|
47 | 63 |
} |
48 | 64 |
}); |
49 | 65 |
if (!this.dataProvider) { |
50 |
this._router.navigate(['manage-content-providers'], |
|
51 |
{queryParams: {'communityId': this.community}}); |
|
66 |
this.navigateToError(); |
|
67 |
} else { |
|
68 |
this.reset(); |
|
69 |
this.loading = false; |
|
52 | 70 |
} |
53 |
this.buildForm(); |
|
54 |
this.showLoading = false; |
|
55 | 71 |
}); |
56 |
HelperFunctions.scroll(); |
|
57 | 72 |
}); |
58 |
}); |
|
73 |
}));
|
|
59 | 74 |
} |
60 |
|
|
75 |
|
|
61 | 76 |
public ngOnDestroy() { |
77 |
this.subs.forEach(subscription => { |
|
78 |
if (subscription instanceof Subscription) { |
|
79 |
subscription.unsubscribe(); |
|
80 |
} |
|
81 |
}) |
|
62 | 82 |
} |
63 |
|
|
64 |
buildForm() { |
|
65 |
this.selectioncriteria = this.fb.group({ |
|
66 |
criteria: this.fb.array([]) |
|
67 |
}); |
|
68 |
let selectionCriteria = this.dataProvider.selectioncriteria; |
|
69 |
if (selectionCriteria) { |
|
70 |
selectionCriteria.criteria.forEach(criterion => { |
|
71 |
let constraintArray: FormArray = this.fb.array([]); |
|
72 |
criterion.constraint.forEach(constraint => { |
|
73 |
constraintArray.push(this.fb.group({ |
|
74 |
field: this.fb.control(constraint.field, Validators.required), |
|
75 |
verb: this.fb.control(constraint.verb, Validators.required), |
|
76 |
value: this.fb.control(constraint.value, Validators.required) |
|
83 |
|
|
84 |
private navigateToError() { |
|
85 |
this.router.navigate(['/error'], {queryParams: {'page': this.properties.baseLink + this.router.url}}); |
|
86 |
} |
|
87 |
|
|
88 |
reset() { |
|
89 |
if (this.dataProvider) { |
|
90 |
this.selectionCriteria = this.fb.group({ |
|
91 |
criteria: this.fb.array([]) |
|
92 |
}); |
|
93 |
let selectionCriteria = this.dataProvider.selectioncriteria; |
|
94 |
if (selectionCriteria) { |
|
95 |
selectionCriteria.criteria.forEach(criterion => { |
|
96 |
let constraintArray: FormArray = this.fb.array([]); |
|
97 |
criterion.constraint.forEach(constraint => { |
|
98 |
constraintArray.push(this.fb.group({ |
|
99 |
field: this.fb.control(constraint.field, Validators.required), |
|
100 |
verb: this.fb.control(constraint.verb, Validators.required), |
|
101 |
value: this.fb.control(constraint.value, Validators.required) |
|
102 |
})); |
|
103 |
}); |
|
104 |
this.criteria.push(this.fb.group({ |
|
105 |
constraint: constraintArray |
|
77 | 106 |
})); |
78 | 107 |
}); |
79 |
this.criteria.push(this.fb.group({ |
|
80 |
constraint: constraintArray |
|
81 |
})); |
|
82 |
}); |
|
108 |
} |
|
83 | 109 |
} |
84 | 110 |
} |
85 |
|
|
111 |
|
|
86 | 112 |
public get criteria(): FormArray { |
87 |
return this.selectioncriteria.get('criteria') as FormArray;
|
|
113 |
return this.selectionCriteria.get('criteria') as FormArray;
|
|
88 | 114 |
} |
89 |
|
|
115 |
|
|
90 | 116 |
public getConstraint(i: number): FormArray { |
91 | 117 |
return this.criteria.at(i).get('constraint') as FormArray; |
92 | 118 |
} |
93 |
|
|
119 |
|
|
94 | 120 |
public addCriteria() { |
95 | 121 |
let constraintArray: FormArray = this.fb.array([ |
96 | 122 |
this.fb.group({ |
... | ... | |
103 | 129 |
constraint: constraintArray |
104 | 130 |
})); |
105 | 131 |
} |
106 |
|
|
132 |
|
|
107 | 133 |
public addConstraint(i: number) { |
108 | 134 |
let constraintArray: FormArray = this.criteria.at(i).get('constraint') as FormArray; |
109 | 135 |
constraintArray.push(this.fb.group({ |
... | ... | |
112 | 138 |
value: this.fb.control('', Validators.required) |
113 | 139 |
})); |
114 | 140 |
} |
115 |
|
|
141 |
|
|
116 | 142 |
public removeConstraint(i: number, j: number) { |
117 | 143 |
let constraintArray: FormArray = this.criteria.at(i).get('constraint') as FormArray; |
118 | 144 |
constraintArray.removeAt(j); |
... | ... | |
120 | 146 |
this.criteria.removeAt(i); |
121 | 147 |
} |
122 | 148 |
} |
123 |
|
|
149 |
|
|
150 |
get dataProviderCriteria(): Criteria[] { |
|
151 |
return (this.dataProvider && this.dataProvider.selectioncriteria && this.dataProvider.selectioncriteria.criteria)?this.dataProvider.selectioncriteria.criteria:[]; |
|
152 |
} |
|
153 |
|
|
154 |
get dirty() { |
|
155 |
if(!this.dataProvider || !this.criteria) { |
|
156 |
return false; |
|
157 |
} else if(this.criteria.length !== this.dataProviderCriteria.length) { |
|
158 |
return true; |
|
159 |
} else { |
|
160 |
return this.dataProviderCriteria.filter((criterion, index) => { |
|
161 |
if(criterion.constraint.length !== this.getConstraint(index).length) { |
|
162 |
return true; |
|
163 |
} else { |
|
164 |
let temp = this.getConstraint(index).value; |
|
165 |
return criterion.constraint.filter(constraint => { |
|
166 |
return constraint.field !== temp.field || constraint.verb !== temp.verb || constraint.value !== temp.value; |
|
167 |
}).length > 0; |
|
168 |
} |
|
169 |
}).length > 0; |
|
170 |
} |
|
171 |
} |
|
172 |
|
|
124 | 173 |
save() { |
125 |
this.errorMessage = null;
|
|
126 |
if (this.selectioncriteria.status === 'VALID') {
|
|
127 |
this.dataProvider.selectioncriteria = this.selectioncriteria.value;
|
|
128 |
this.manageCommunityContentProvidersService.
|
|
129 |
saveContentProvider(this.properties, this.dataProvider).subscribe( () => {
|
|
130 |
this._router.navigate(['manage-content-providers'], {
|
|
131 |
queryParams: {communityId: this.dataProvider.communityId}
|
|
174 |
if (this.selectionCriteria.valid) {
|
|
175 |
this.dataProvider.selectioncriteria = this.selectionCriteria.value;
|
|
176 |
this.manageCommunityContentProvidersService.saveContentProvider(this.properties, this.dataProvider).subscribe(() => {
|
|
177 |
UIkit.notification('Criteria has been <b>successfully updated</b>', {
|
|
178 |
status: 'success',
|
|
179 |
timeout: 6000,
|
|
180 |
pos: 'bottom-right'
|
|
132 | 181 |
}); |
182 |
this.router.navigate(['../'], {relativeTo: this.route}); |
|
133 | 183 |
}); |
134 | 184 |
} else { |
135 |
this.errorMessage = 'Please fill all fields of each constraint or remove all constraints with empty fields.'; |
|
185 |
UIkit.notification('An error has been occurred. Try again later!', { |
|
186 |
status: 'danger', |
|
187 |
timeout: 6000, |
|
188 |
pos: 'bottom-right' |
|
189 |
}); |
|
136 | 190 |
} |
137 | 191 |
} |
138 | 192 |
} |
modules/uoa-admin-portal/branches/new-UI/src/app/pages/community/content-providers/criteria/criteria.component.css | ||
---|---|---|
1 |
.criterion { |
|
2 |
border: rgba(26,26,26,0.5) solid 1px; |
|
3 |
border-radius: 4px; |
|
4 |
max-height: 400px; |
|
5 |
overflow: auto; |
|
6 |
} |
|
7 |
|
|
8 |
a.remove { |
|
9 |
color: rgba(var(--text-color-rgb), 0.8); |
|
10 |
} |
|
11 |
|
|
12 |
a.remove:hover, a.remove:active { |
|
13 |
color: var(--primary-color); |
|
14 |
} |
modules/uoa-admin-portal/branches/new-UI/src/app/pages/community/content-providers/criteria/criteria.module.ts | ||
---|---|---|
1 | 1 |
import {NgModule} from '@angular/core'; |
2 |
|
|
3 |
import {EnvironmentSpecificResolver} from '../../../../openaireLibrary/utils/properties/environmentSpecificResolver'; |
|
4 |
import {EnvironmentSpecificService} from '../../../../openaireLibrary/utils/properties/environment-specific.service'; |
|
5 | 2 |
import {CommonModule} from '@angular/common'; |
6 | 3 |
import {CriteriaComponent} from './criteria.component'; |
7 | 4 |
import {CriteriaRoutingModule} from './criteria-routing.module'; |
... | ... | |
9 | 6 |
import {RouterModule} from '@angular/router'; |
10 | 7 |
import {FormsModule, ReactiveFormsModule} from '@angular/forms'; |
11 | 8 |
import {ManageCommunityContentProvidersService} from '../../../../services/manageContentProviders.service'; |
9 |
import {PageContentModule} from "../../../../openaireLibrary/dashboard/sharedComponents/page-content/page-content.module"; |
|
10 |
import {IconsModule} from "../../../../openaireLibrary/utils/icons/icons.module"; |
|
11 |
import {IconsService} from "../../../../openaireLibrary/utils/icons/icons.service"; |
|
12 |
import {add, arrow_left, close} from "../../../../openaireLibrary/utils/icons/icons"; |
|
13 |
import {LoadingModule} from "../../../../openaireLibrary/utils/loading/loading.module"; |
|
14 |
import {InputModule} from "../../../../openaireLibrary/sharedComponents/input/input.module"; |
|
12 | 15 |
|
13 | 16 |
@NgModule({ |
14 | 17 |
imports: [ |
... | ... | |
17 | 20 |
RouterModule, |
18 | 21 |
FormsModule, |
19 | 22 |
ReactiveFormsModule, |
23 |
PageContentModule, |
|
24 |
IconsModule, |
|
25 |
LoadingModule, |
|
26 |
InputModule, |
|
20 | 27 |
], |
21 | 28 |
declarations: [ |
22 | 29 |
CriteriaComponent |
23 | 30 |
], |
24 | 31 |
providers: [ |
25 | 32 |
SearchCommunityDataprovidersService, |
26 |
ManageCommunityContentProvidersService, |
|
27 |
EnvironmentSpecificResolver, EnvironmentSpecificService |
|
33 |
ManageCommunityContentProvidersService |
|
28 | 34 |
], |
29 | 35 |
exports: [CriteriaComponent] |
30 | 36 |
}) |
31 | 37 |
|
32 |
export class CriteriaModule { } |
|
38 |
export class CriteriaModule { |
|
39 |
constructor(private iconsService: IconsService) { |
|
40 |
this.iconsService.registerIcons([arrow_left, add, close]) |
|
41 |
} |
|
42 |
} |
modules/uoa-admin-portal/branches/new-UI/src/app/pages/community-info/community-info-routing.module.ts | ||
---|---|---|
9 | 9 |
{path: 'profile', loadChildren: './profile/profile.module#ProfileModule'}, |
10 | 10 |
{path: 'organizations', loadChildren: '../affiliations/affiliations.module#AffiliationsModule'}, |
11 | 11 |
{path: 'zenodo-communities', loadChildren: '../zenodo-communities/zenodo-communities.module#ZenodoCommunitiesModule'}, |
12 |
{path: 'subjects', canActivateChild: [ConnectCommunityGuard], loadChildren: '../subjects/subjects-edit-form/subjects-edit-form.module#SubjectsEditFormModule'} |
|
12 |
{path: 'subjects', canActivateChild: [ConnectCommunityGuard], loadChildren: '../subjects/subjects-edit-form/subjects-edit-form.module#SubjectsEditFormModule'}, |
|
13 |
{path: 'content-providers/:provider', loadChildren: '../community/content-providers/criteria/criteria.module#CriteriaModule'}, |
|
13 | 14 |
]) |
14 | 15 |
], |
15 | 16 |
providers: [ConnectCommunityGuard] |
modules/uoa-admin-portal/branches/new-UI/src/app/app.routing.ts | ||
---|---|---|
204 | 204 |
canActivateChild: [AdminLoginGuard], |
205 | 205 |
data: {portal: 'openaire'} |
206 | 206 |
}, |
207 |
{ path: 'icons', |
|
207 |
/*{ path: 'icons',
|
|
208 | 208 |
pathMatch: 'full', |
209 | 209 |
loadChildren: './openaireLibrary/utils/icons/icons-preview/icons-preview.module#IconsPreviewModule', |
210 | 210 |
data: {hasSidebar: false, hasHeader: false} |
211 |
}, |
|
211 |
},*/
|
|
212 | 212 |
{ |
213 | 213 |
path: 'admin-tools', |
214 | 214 |
loadChildren: './pages/admin-tools/portal-admin-tools-routing.module#PortalAdminToolsRoutingModule', |
Also available in: Unified diff
[Admin | New UI]: Add content providers criteria