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.
81 lines
2.4 KiB
TypeScript
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);
|
|
}
|
|
}
|