import { Component, OnInit, ViewChild } from '@angular/core'; import { MatPaginator, MatSort } from '@angular/material'; import { Router } from '@angular/router'; import { Observable } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { BaseComponent } from '../../../core/common/base/base.component'; import { ProjectStateType } from '../../../core/common/enum/project-state-type'; import { DataTableRequest } from '../../../core/model/data-table/data-table-request'; import { ProjectListingModel } from '../../../core/model/project/project-listing'; import { ProjectCriteria } from '../../../core/query/project/project-criteria'; import { ProjectService } from '../../../core/services/project/project.service'; import { BreadcrumbItem } from '../../misc/breadcrumb/definition/breadcrumb-item'; import { IBreadCrumbComponent } from '../../misc/breadcrumb/definition/IBreadCrumbComponent'; import { ProjectCriteriaComponent } from './criteria/project-criteria.component'; import { LanguageResolverService } from '../../../services/language-resolver/language-resolver.service'; @Component({ selector: 'app-project-listing-component', templateUrl: 'project-listing.component.html', styleUrls: ['./project-listing.component.scss'] }) export class ProjectListingComponent extends BaseComponent implements OnInit, IBreadCrumbComponent { @ViewChild(MatPaginator) _paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; @ViewChild(ProjectCriteriaComponent) criteria: ProjectCriteriaComponent; breadCrumbs: Observable = Observable.of([]); totalCount: number; listingItems: ProjectListingModel[] = []; constructor( private projectService: ProjectService, private router: Router, public languageResolverService: LanguageResolverService ) { super(); } ngOnInit() { this.breadCrumbs = Observable.of([]); this.criteria.setCriteria(this.getDefaultCriteria()); this.refresh(); this.criteria.setRefreshCallback((resetPages) => this.refresh(resetPages)); } 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.projectService.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(project: ProjectListingModel) { this.router.navigate(['/projects/edit/' + project.id]); } getDefaultCriteria(): ProjectCriteria { const defaultCriteria = new ProjectCriteria(); return defaultCriteria; } pageThisEvent(event) { this.refresh(); } }