argos/dmp-frontend/src/app/ui/dmp/editor/grant-tab/grant-tab.component.ts

169 lines
6.0 KiB
TypeScript
Raw Normal View History

2019-05-28 09:49:09 +02:00
import { Component, OnInit, Input } from '@angular/core';
import { FormGroup } from '@angular/forms';
import { SingleAutoCompleteConfiguration } from '../../../../library/auto-complete/single/single-auto-complete-configuration';
import { RequestItem } from '../../../../core/query/request-item';
import { GrantCriteria } from '../../../../core/query/grant/grant-criteria';
import { GrantService } from '../../../../core/services/grant/grant.service';
2019-05-28 09:49:09 +02:00
import { LanguageResolverService } from '../../../../services/language-resolver/language-resolver.service';
import { GrantTabModel } from './grant-tab-model';
2019-08-20 17:32:42 +02:00
import { ProjectService } from '../../../../core/services/project/project.service';
import { FunderService } from '../../../../core/services/funder/funder.service';
import { FunderCriteria } from '../../../../core/query/funder/funder-criteria';
import { ProjectCriteria } from '../../../../core/query/project/project-criteria';
2019-05-28 09:49:09 +02:00
@Component({
selector: 'app-grant-tab',
templateUrl: './grant-tab.component.html',
styleUrls: ['./grant-tab.component.scss']
2019-05-28 09:49:09 +02:00
})
export class GrantTabComponent implements OnInit {
2019-05-28 09:49:09 +02:00
@Input() grantformGroup: FormGroup;
2019-08-20 17:32:42 +02:00
@Input() projectFormGroup: FormGroup;
@Input() funderFormGroup: FormGroup;
@Input() isFinalized: boolean;
isCreateNew = false;
2019-08-20 17:32:42 +02:00
isCreateNewProject = false;
isCreateNewFunder = false;
grant: GrantTabModel;
2019-05-28 09:49:09 +02:00
grantAutoCompleteConfiguration: SingleAutoCompleteConfiguration;
2019-08-20 17:32:42 +02:00
projectAutoCompleteConfiguration: SingleAutoCompleteConfiguration;
funderAutoCompleteConfiguration: SingleAutoCompleteConfiguration;
2019-05-28 09:49:09 +02:00
constructor(
private grantService: GrantService,
2019-08-20 17:32:42 +02:00
private projectService: ProjectService,
private funderService: FunderService,
2019-05-28 09:49:09 +02:00
public languageResolverService: LanguageResolverService
) { }
ngOnInit() {
const grantRequestItem: RequestItem<GrantCriteria> = new RequestItem();
grantRequestItem.criteria = new GrantCriteria();
this.grantAutoCompleteConfiguration = {
filterFn: this.searchGrant.bind(this),
initialItems: (extraData) => this.searchGrant(''),
2019-05-28 09:49:09 +02:00
displayFn: (item) => item['label'],
titleFn: (item) => item['label'],
subtitleFn: (item) => item ? item['source'] : null
2019-05-28 09:49:09 +02:00
};
2019-08-20 17:32:42 +02:00
this.projectAutoCompleteConfiguration = {
filterFn: this.searchProject.bind(this),
initialItems: (extraData) => this.searchProject(''),
displayFn: (item) => item['label'],
titleFn: (item) => item['label']
}
this.funderAutoCompleteConfiguration = {
filterFn: this.searchFunder.bind(this),
initialItems: (extraData) => this.searchFunder(''),
displayFn: (item) => item['label'],
titleFn: (item) => item['label']
}
this.isCreateNew = (this.grantformGroup.get('label').value != null && this.grantformGroup.get('label').value.length > 0);
2019-08-20 17:32:42 +02:00
this.isCreateNewProject = (this.projectFormGroup.get('label').value != null && this.projectFormGroup.get('label').value.length > 0);
this.isCreateNewFunder = (this.funderFormGroup.get('label').value != null && this.funderFormGroup.get('label').value.length > 0);
2019-06-26 13:57:52 +02:00
this.setValidators();
2019-08-20 17:32:42 +02:00
this.setProjectValidators();
this.setFunderValidators();
2019-05-28 09:49:09 +02:00
}
searchGrant(query: any) {
const grantRequestItem: RequestItem<GrantCriteria> = new RequestItem();
grantRequestItem.criteria = new GrantCriteria();
grantRequestItem.criteria.like = query;
if (this.funderFormGroup.get('existFunder').value) {
grantRequestItem.criteria.funderReference = this.funderFormGroup.controls['existFunder'].value.reference;
}
return this.grantService.getWithExternal(grantRequestItem);
2019-05-28 09:49:09 +02:00
}
2019-08-20 17:32:42 +02:00
searchProject(query: string) {
const projectRequestItem: RequestItem<ProjectCriteria> = new RequestItem();
projectRequestItem.criteria = new ProjectCriteria();
2019-08-20 17:32:42 +02:00
projectRequestItem.criteria.like = query;
return this.projectService.getWithExternal(projectRequestItem);
}
searchFunder(query: string) {
const funderRequestItem: RequestItem<FunderCriteria> = new RequestItem();
funderRequestItem.criteria = new FunderCriteria();
funderRequestItem.criteria.like = query;
return this.funderService.getWithExternal(funderRequestItem)
2019-08-20 17:32:42 +02:00
}
create() {
this.isCreateNew = !this.isCreateNew;
2019-06-26 13:57:52 +02:00
this.setValidators();
}
2019-08-20 17:32:42 +02:00
createProject() {
this.isCreateNewProject = !this.isCreateNewProject;
this.setProjectValidators();
}
createFunder() {
this.isCreateNewFunder = !this.isCreateNewFunder;
this.setFunderValidators();
}
2019-06-26 13:57:52 +02:00
setValidators() {
if (this.isCreateNew) {
this.grantformGroup.get('existGrant').disable();
this.grantformGroup.get('label').enable();
this.grantformGroup.get('description').enable();
} else if (this.isFinalized) {
this.grantformGroup.get('existGrant').disable();
this.grantformGroup.get('label').disable();
this.grantformGroup.get('description').disable();
}
else {
this.grantformGroup.get('existGrant').enable();
this.grantformGroup.get('label').disable();
this.grantformGroup.get('label').reset();
this.grantformGroup.get('description').disable();
this.grantformGroup.get('description').reset();
}
}
2019-08-20 17:32:42 +02:00
setProjectValidators() {
if (this.isCreateNewProject) {
this.projectFormGroup.get('existProject').disable();
this.projectFormGroup.get('label').enable();
this.projectFormGroup.get('description').enable();
} else if (this.isFinalized) {
this.projectFormGroup.get('existProject').disable();
this.projectFormGroup.get('label').disable();
this.projectFormGroup.get('description').disable();
}
else {
this.projectFormGroup.get('existProject').enable();
this.projectFormGroup.get('label').disable();
this.projectFormGroup.get('label').reset();
this.projectFormGroup.get('description').disable();
this.projectFormGroup.get('description').reset();
}
}
setFunderValidators() {
if (this.isCreateNewFunder) {
this.funderFormGroup.get('existFunder').disable();
this.funderFormGroup.get('label').enable();
2019-08-20 17:32:42 +02:00
} else if (this.isFinalized) {
this.funderFormGroup.get('existFunder').disable();
this.funderFormGroup.get('label').disable();
2019-08-20 17:32:42 +02:00
}
else {
this.funderFormGroup.enable();
this.funderFormGroup.get('label').disable();
this.funderFormGroup.get('label').reset();
2019-08-20 17:32:42 +02:00
}
}
2019-05-28 09:49:09 +02:00
}