Spaces:
Runtime error
Runtime error
/** Angular Imports */ | |
import { Component, OnInit, ViewChild } from '@angular/core'; | |
import { MatPaginator } from '@angular/material/paginator'; | |
import { MatSort } from '@angular/material/sort'; | |
import { MatTableDataSource } from '@angular/material/table'; | |
import { ActivatedRoute } from '@angular/router'; | |
/** | |
* Accounting rules component. | |
*/ | |
({ | |
selector: 'mifosx-accounting-rules', | |
templateUrl: './accounting-rules.component.html', | |
styleUrls: ['./accounting-rules.component.scss'] | |
}) | |
export class AccountingRulesComponent implements OnInit { | |
/** Accounting rule data. */ | |
accountingRuleData: any; | |
/** Columns to be displayed in accounting rules table. */ | |
displayedColumns: string[] = ['name', 'officeName', 'debitTags', 'debitAccount', 'creditTags', 'creditAccount']; | |
/** Data source for accounting rules table. */ | |
dataSource: MatTableDataSource<any>; | |
/** Paginator for accounting rules table. */ | |
MatPaginator, { static: true }) paginator: MatPaginator; | (|
/** Sorter for accounting rules table. */ | |
MatSort, { static: true }) sort: MatSort; | (|
/** | |
* Retrieves the accounting rules data from `resolve`. | |
* @param {ActivatedRoute} route Activated Route. | |
*/ | |
constructor(private route: ActivatedRoute) { | |
// subscribe to the data from the route | |
this.route.data.subscribe((data: { accountingRules: any }) => { | |
// assign the accounting rules data to the component property | |
this.accountingRuleData = data.accountingRules; | |
}); | |
} | |
/** | |
* Sets the accounting rules table. | |
*/ | |
ngOnInit() { | |
// call the function to set the accounting rules table | |
this.setAccountingRules(); | |
} | |
/** | |
* Initializes the data source, paginator and sorter for accounting rules table. | |
*/ | |
setAccountingRules() { | |
// iterate over each accounting rule | |
this.accountingRuleData.forEach((accountingRule: any) => { | |
// join the debit tags into a comma-separated string if they exist | |
accountingRule.debitTags = accountingRule.debitTags ? accountingRule.debitTags.map((debitTag: any) => debitTag.tag.name).join(', ') : ''; | |
// join the credit tags into a comma-separated string if they exist | |
accountingRule.creditTags = accountingRule.creditTags ? accountingRule.creditTags.map((creditTag: any) => creditTag.tag.name).join(', ') : ''; | |
}); | |
// create a new MatTableDataSource instance and assign the accounting rule data | |
this.dataSource = new MatTableDataSource(this.accountingRuleData); | |
// set the paginator for the data source | |
this.dataSource.paginator = this.paginator; | |
// set the sorting data accessor for the data source | |
this.dataSource.sortingDataAccessor = (accountingRule: any, property: any) => { | |
// return the appropriate value for sorting based on the property | |
switch (property) { | |
case 'debitAccount': return accountingRule.debitAccounts[0].name; | |
case 'creditAccount': return accountingRule.creditAccounts[0].name; | |
default: return accountingRule[property]; | |
} | |
}; | |
// set the sorter for the data source | |
this.dataSource.sort = this.sort; | |
} | |
/** | |
* Filters data in accounting rules table based on passed value. | |
* @param {string} filterValue Value to filter data. | |
*/ | |
applyFilter(filterValue: string) { | |
// filter the data source based on the filter value | |
this.dataSource.filter = filterValue.trim().toLowerCase(); | |
} | |
} | |