import { Component, OnInit, ViewChild } from '@angular/core'; import { MatPaginator, MatSort } from '@angular/material'; import { Router, ActivatedRoute, Params } from '@angular/router'; import { Observable } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { BaseComponent } from '../../../core/common/base/base.component'; import { GrantStateType } from '../../../core/common/enum/grant-state-type'; import { DataTableRequest } from '../../../core/model/data-table/data-table-request'; import { GrantListingModel } from '../../../core/model/grant/grant-listing'; import { GrantCriteria } from '../../../core/query/grant/grant-criteria'; import { GrantService } from '../../../core/services/grant/grant.service'; import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; import { GrantCriteriaComponent } from './criteria/grant-criteria.component'; import { LanguageResolverService } from '../../../services/language-resolver/language-resolver.service'; import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'app-grant-listing-component', templateUrl: 'grant-listing.component.html', styleUrls: ['./grant-listing.component.scss'] }) export class GrantListingComponent extends BaseComponent implements OnInit, IBreadCrumbComponent { @ViewChild(MatPaginator) _paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; @ViewChild(GrantCriteriaComponent) criteria: GrantCriteriaComponent; breadCrumbs: Observable; totalCount: number; listingItems: GrantListingModel[] = []; constructor( private grantService: GrantService, private router: Router, private route: ActivatedRoute, public language: TranslateService, public languageResolverService: LanguageResolverService ) { super(); } ngOnInit() { this.criteria.setCriteria(this.getDefaultCriteria()); this.refresh(); this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages)); this.breadCrumbs = Observable.of([{ parentComponentName: null, label: this.language.instant('NAV-BAR.GRANTS').toUpperCase(), url: '/grants' }]); } refresh(resetPages = false) { if (this._paginator.pageSize === undefined) this._paginator.pageSize = 10; if (resetPages) this._paginator.pageIndex = 0; const startIndex = this._paginator.pageIndex * this._paginator.pageSize; let fields: Array = new Array(); if (this.sort && this.sort.active) { fields = this.sort.direction === 'asc' ? ['+' + this.sort.active] : ['-' + this.sort.active]; } const request = new DataTableRequest(startIndex, this._paginator.pageSize, { fields: fields }); request.criteria = this.criteria.criteria; this.grantService.getPaged(request, "listing").pipe(takeUntil(this._destroyed)).subscribe(result => { if (!result) { return []; } if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; } this.listingItems = result.data; }); } rowClicked(grant: GrantListingModel) { this.router.navigate(['/grants/edit/' + grant.id]); } getDefaultCriteria(): GrantCriteria { const defaultCriteria = new GrantCriteria(); return defaultCriteria; } pageThisEvent(event) { this.refresh(); } }