Files
brewman/overlord/src/app/journal/journal-dialog.component.ts
T
tanshu 1350870f9e Moved from tslint to eslint as tslint was depreciated.
Added prettier and also prettied all the typescript files using prettier

ESLint is using the AirBnB rules which are the most strict to lint the files.
2020-10-01 21:28:12 +05:30

81 lines
2.4 KiB
TypeScript

import { Component, Inject, OnInit } from '@angular/core';
import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { debounceTime, distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators';
import { Account } from '../core/account';
import { AccountService } from '../core/account.service';
import { FormBuilder, FormGroup } from '@angular/forms';
import { Observable, of as observableOf } from 'rxjs';
@Component({
selector: 'app-journal-dialog',
templateUrl: './journal-dialog.component.html',
styleUrls: ['./journal-dialog.component.css'],
})
export class JournalDialogComponent implements OnInit {
accounts: Observable<Account[]>;
form: FormGroup;
account: Account;
accBal: any;
constructor(
public dialogRef: MatDialogRef<JournalDialogComponent>,
@Inject(MAT_DIALOG_DATA) public data: any,
private fb: FormBuilder,
private accountSer: AccountService,
) {
this.createForm();
this.setupAccountAutocomplete();
}
ngOnInit() {
this.form.setValue({
debit: '' + this.data.journal.debit,
account: this.data.journal.account,
amount: this.data.journal.amount,
});
this.account = this.data.journal.account;
}
createForm() {
this.form = this.fb.group({
debit: '1',
account: '',
amount: '',
});
this.accBal = null;
}
setupAccountAutocomplete(): void {
const control = this.form.get('account');
this.accounts = control.valueChanges.pipe(
startWith(null),
map((x) => (x !== null && x.length >= 1 ? x : null)),
debounceTime(150),
distinctUntilChanged(),
switchMap((x) => (x === null ? observableOf([]) : this.accountSer.autocomplete(x))),
);
}
displayAccount(account?: Account): string | undefined {
return account ? account.name : undefined;
}
accountSelected(event: MatAutocompleteSelectedEvent): void {
this.account = event.option.value;
this.accountSer.balance(this.account.id, this.data.date).subscribe((v) => {
this.accBal = v;
});
}
accept(): void {
const formValue = this.form.value;
const debit = +formValue.debit;
const amount = +formValue.amount;
this.data.journal.debit = debit;
this.data.journal.account = this.account;
this.data.journal.amount = amount;
this.dialogRef.close(this.data.journal);
}
}