import { Component, OnInit } from '@angular/core'; import { FormBuilder } from '@angular/forms'; import { TranslateService } from '@ngx-translate/core'; import { takeUntil } from 'rxjs/operators'; import { DatasetCriteria } from '../../../../models/criteria/dataset/DatasetCriteria'; import { DatasetCriteriaErrorModel } from '../../../../models/criteria/dataset/DatasetCriteriaErrorModel'; import { RequestItem } from '../../../../models/criteria/RequestItem'; import { TagsCriteria } from '../../../../models/criteria/tags/TagsCriteria'; import { ExternalSourcesItemModel } from '../../../../models/external-sources/ExternalSourcesItemModel'; import { ExternalSourcesService } from '../../../../services/external-sources/external-sources.service'; import { BaseCriteriaComponent } from '../base/base-criteria.component'; @Component({ selector: 'app-datasets-criteria-component', templateUrl: './datasets-criteria.component.html', styleUrls: ['./datasets-criteria.component.scss'], providers: [ ExternalSourcesService ] }) export class DatasetCriteriaComponent extends BaseCriteriaComponent implements OnInit { public criteria: any; public filteringTagsAsync = false; public filteredTags: ExternalSourcesItemModel[]; statuses = [ { value: '0', viewValue: 'Draft' }, { value: '1', viewValue: 'Finalised' } ]; constructor( public language: TranslateService, public formBuilder: FormBuilder, public externalSourcesService: ExternalSourcesService ) { super(new DatasetCriteriaErrorModel()); } ngOnInit() { super.ngOnInit(); if (this.criteria == null) { this.criteria = {}; } } setCriteria(criteria: DatasetCriteria): void { this.criteria = criteria; } onCallbackError(error: any) { this.setErrorModel(error.error); } controlModified(): void { this.clearErrorModel(); if (this.refreshCallback != null && (this.criteria.like == null || this.criteria.like.length === 0 || this.criteria.like.length > 2) ) { this.refreshCallback(); } } filterTags(value: string): void { this.filteredTags = undefined; if (value) { this.filteringTagsAsync = true; const requestItem: RequestItem = new RequestItem(); const criteria: TagsCriteria = new TagsCriteria(); criteria.like = value; requestItem.criteria = criteria; this.externalSourcesService.searchDatasetTags(requestItem) .pipe(takeUntil(this._destroyed)) .subscribe(items => { this.filteredTags = items; this.filteringTagsAsync = false; }); } } }