luthor/otis/src/app/cases/case-list/case-list.component.ts

64 lines
2.0 KiB
TypeScript

import { Component, OnInit, ViewChild } from '@angular/core';
import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
import { MatPaginator } from '@angular/material/paginator';
import { ActivatedRoute } from '@angular/router';
import { Observable, of as observableOf } from 'rxjs';
import { distinctUntilChanged, startWith, switchMap, tap } from 'rxjs/operators';
import { Case } from '../../core/case';
import { CaseSource } from '../../core/case-source';
import { CaseService } from '../case.service';
import { CaseListDataSource } from './case-list-datasource';
@Component({
selector: 'app-case-list',
templateUrl: './case-list.component.html',
styleUrls: ['./case-list.component.css'],
})
export class CaseListComponent implements OnInit {
@ViewChild(MatPaginator, { static: true }) paginator?: MatPaginator;
form: FormGroup;
caseSources: CaseSource[] = [];
list: Observable<Case[]> = new Observable<Case[]>();
dataSource: CaseListDataSource = new CaseListDataSource(this.list);
/** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */
displayedColumns = [
'officeFileNumber',
'title',
'courtCaseNumber',
'caseConnectedWith',
'court',
'appearOnBehalfOf',
'nextHearingDate',
'courtStatus',
'officeStatus',
'remarks',
'receiptDate',
'office',
'lowerCourtCaseNumber',
];
constructor(private route: ActivatedRoute, private fb: FormBuilder, private ser: CaseService) {
// Create form
this.form = this.fb.group({
caseSource: '',
});
}
ngOnInit() {
this.route.data.subscribe((value) => {
const data = value as { list: Case[]; caseSources: CaseSource[] };
this.caseSources = data.caseSources;
this.list = observableOf(data.list);
this.list = (this.form.get('caseSource') as FormControl).valueChanges.pipe(
startWith(''),
distinctUntilChanged(),
switchMap((x) => this.ser.list(x)),
);
});
this.dataSource = new CaseListDataSource(this.list, this.paginator);
}
}