import { SelectionModel } from '@angular/cdk/collections'; import { Component, Input, OnInit, ViewChild } from '@angular/core'; import { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { MatPaginator, MatSnackBar, MatSort } from '@angular/material'; import { ActivatedRoute, Params, Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { takeUntil } from 'rxjs/operators'; import { BaseComponent } from '../../../core/common/base/base.component'; import { DatasetCriteria } from '../../../models/criteria/dataset/DatasetCriteria'; import { DataTableRequest } from '../../../models/data-table/DataTableRequest'; import { DatasetListingModel } from '../../../models/datasets/DatasetListingModel'; import { DataManagementPlanService } from '../../../services/data-management-plan/data-management-plan.service'; import { DatasetService } from '../../../services/dataset/dataset.service'; import { DatasetCriteriaComponent } from '../../../shared/components/criteria/datasets/datasets-criteria.component'; import { JsonSerializer } from '../../../utilities/JsonSerializer'; @Component({ selector: 'app-dataset-wizard-listing-component', templateUrl: 'dataset-wizard-listing.component.html', styleUrls: ['./dataset-wizard-listing.component.scss'], }) export class DatasetWizardListingComponent extends BaseComponent implements OnInit { @ViewChild(MatPaginator) _paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; @ViewChild(DatasetCriteriaComponent) criteria: DatasetCriteriaComponent; titlePrefix: String; datasets: DatasetListingModel[] = []; @Input() dmpId: String; @Input() formGroup: FormGroup; selection = new SelectionModel(true, []); statuses = [ { value: '0', viewValue: 'Active' }, { value: '1', viewValue: 'Inactive' } ]; constructor( private datasetService: DatasetService, private router: Router, private languageService: TranslateService, public snackBar: MatSnackBar, public route: ActivatedRoute, public dataManagementPlanService: DataManagementPlanService ) { super(); } ngOnInit() { this.route.params .pipe(takeUntil(this._destroyed)) .subscribe((params: Params) => { if (this.dmpId != null) { if (params['dmpLabel'] !== undefined) { this.titlePrefix = 'for ' + params['dmpLabel']; } } }); const request: DataTableRequest = new DataTableRequest(null, null, null); request.criteria = new DatasetCriteria(); request.criteria.dmpIds = [this.dmpId]; this.datasetService.getPaged(request) .pipe(takeUntil(this._destroyed)) .subscribe(items => { this.datasets = JsonSerializer.fromJSONArray(items.data, DatasetListingModel); }); this.formGroup.addControl('datasets', new FormBuilder().array(new Array())); } selectionChanged(event, selectedItems) { this.formGroup.removeControl('datasets'); this.formGroup.addControl('datasets', new FormBuilder().array(new Array())); selectedItems.selectedOptions.selected.forEach(element => { (this.formGroup.get('datasets')).push(new FormBuilder().group({ id: element.value })); }); } }