Feature/improve filter search in transactions table (#85)
* Improve filter search style * Update changelog
This commit is contained in:
parent
45516311f5
commit
42b9178d96
@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Harmonized the style of various tables
|
- Harmonized the style of various tables
|
||||||
- Keep the color per type when switching between _Initial_ and _Current_ in pie charts
|
- Keep the color per type when switching between _Initial_ and _Current_ in pie charts
|
||||||
- Upgraded `chart.js` from version `3.0.2` to `3.2.1`
|
- Upgraded `chart.js` from version `3.0.2` to `3.2.1`
|
||||||
|
- Improved the style of the transaction filtering component
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
<mat-chip-list #chipList aria-label="Search keywords">
|
<mat-chip-list #chipList aria-label="Search keywords">
|
||||||
<mat-chip
|
<mat-chip
|
||||||
*ngFor="let searchKeyword of searchKeywords"
|
*ngFor="let searchKeyword of searchKeywords"
|
||||||
|
class="mx-1 my-0 px-2 py-0"
|
||||||
matChipRemove
|
matChipRemove
|
||||||
[removable]="true"
|
[removable]="true"
|
||||||
(removed)="removeKeyword(searchKeyword)"
|
(removed)="removeKeyword(searchKeyword)"
|
||||||
@ -13,11 +14,11 @@
|
|||||||
<input
|
<input
|
||||||
#searchInput
|
#searchInput
|
||||||
name="close-outline"
|
name="close-outline"
|
||||||
placeholder="Search for account, currency, symbol or type..."
|
|
||||||
[formControl]="searchControl"
|
[formControl]="searchControl"
|
||||||
[matAutocomplete]="autocomplete"
|
[matAutocomplete]="autocomplete"
|
||||||
[matChipInputFor]="chipList"
|
[matChipInputFor]="chipList"
|
||||||
[matChipInputSeparatorKeyCodes]="separatorKeysCodes"
|
[matChipInputSeparatorKeyCodes]="separatorKeysCodes"
|
||||||
|
[placeholder]="placeholder"
|
||||||
(matChipInputTokenEnd)="addKeyword($event)"
|
(matChipInputTokenEnd)="addKeyword($event)"
|
||||||
/>
|
/>
|
||||||
</mat-chip-list>
|
</mat-chip-list>
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
.mat-chip {
|
.mat-chip {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
min-height: 1.5rem !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-table {
|
.mat-table {
|
||||||
|
@ -28,6 +28,7 @@ import { takeUntil } from 'rxjs/operators';
|
|||||||
|
|
||||||
import { PositionDetailDialog } from '../position/position-detail-dialog/position-detail-dialog.component';
|
import { PositionDetailDialog } from '../position/position-detail-dialog/position-detail-dialog.component';
|
||||||
|
|
||||||
|
const SEARCH_PLACEHOLDER = 'Search for account, currency, symbol or type...';
|
||||||
const SEARCH_STRING_SEPARATOR = ',';
|
const SEARCH_STRING_SEPARATOR = ',';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@ -60,6 +61,7 @@ export class TransactionsTableComponent
|
|||||||
string[]
|
string[]
|
||||||
> = this.filteredTransactions$.asObservable();
|
> = this.filteredTransactions$.asObservable();
|
||||||
public isLoading = true;
|
public isLoading = true;
|
||||||
|
public placeholder = '';
|
||||||
public routeQueryParams: Subscription;
|
public routeQueryParams: Subscription;
|
||||||
public searchControl = new FormControl();
|
public searchControl = new FormControl();
|
||||||
public searchKeywords: string[] = [];
|
public searchKeywords: string[] = [];
|
||||||
@ -151,7 +153,7 @@ export class TransactionsTableComponent
|
|||||||
if (this.transactions) {
|
if (this.transactions) {
|
||||||
this.dataSource = new MatTableDataSource(this.transactions);
|
this.dataSource = new MatTableDataSource(this.transactions);
|
||||||
this.dataSource.filterPredicate = (data, filter) => {
|
this.dataSource.filterPredicate = (data, filter) => {
|
||||||
const dataString = TransactionsTableComponent.getFilterableValues(data)
|
const dataString = this.getFilterableValues(data)
|
||||||
.join(' ')
|
.join(' ')
|
||||||
.toLowerCase();
|
.toLowerCase();
|
||||||
let contains = true;
|
let contains = true;
|
||||||
@ -232,27 +234,35 @@ export class TransactionsTableComponent
|
|||||||
const lowercaseSearchKeywords = this.searchKeywords.map((keyword) =>
|
const lowercaseSearchKeywords = this.searchKeywords.map((keyword) =>
|
||||||
keyword.trim().toLowerCase()
|
keyword.trim().toLowerCase()
|
||||||
);
|
);
|
||||||
this.allFilteredTransactions = TransactionsTableComponent.getSearchableFieldValues(
|
|
||||||
|
this.placeholder =
|
||||||
|
lowercaseSearchKeywords.length <= 0 ? SEARCH_PLACEHOLDER : '';
|
||||||
|
|
||||||
|
this.allFilteredTransactions = this.getSearchableFieldValues(
|
||||||
this.transactions
|
this.transactions
|
||||||
).filter((item) => {
|
).filter((item) => {
|
||||||
return !lowercaseSearchKeywords.includes(item.trim().toLowerCase());
|
return !lowercaseSearchKeywords.includes(item.trim().toLowerCase());
|
||||||
});
|
});
|
||||||
|
|
||||||
this.filteredTransactions$.next(this.allFilteredTransactions);
|
this.filteredTransactions$.next(this.allFilteredTransactions);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static getSearchableFieldValues(
|
private getSearchableFieldValues(transactions: OrderWithAccount[]): string[] {
|
||||||
transactions: OrderWithAccount[]
|
|
||||||
): string[] {
|
|
||||||
const fieldValues = new Set<string>();
|
const fieldValues = new Set<string>();
|
||||||
|
|
||||||
for (const transaction of transactions) {
|
for (const transaction of transactions) {
|
||||||
this.getFilterableValues(transaction, fieldValues);
|
this.getFilterableValues(transaction, fieldValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
return [...fieldValues].filter((item) => item != undefined).sort();
|
return [...fieldValues]
|
||||||
|
.filter((item) => {
|
||||||
|
return item !== undefined;
|
||||||
|
})
|
||||||
|
.sort();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static getFilterableValues(
|
private getFilterableValues(
|
||||||
transaction,
|
transaction: OrderWithAccount,
|
||||||
fieldValues: Set<string> = new Set<string>()
|
fieldValues: Set<string> = new Set<string>()
|
||||||
): string[] {
|
): string[] {
|
||||||
fieldValues.add(transaction.currency);
|
fieldValues.add(transaction.currency);
|
||||||
@ -260,6 +270,9 @@ export class TransactionsTableComponent
|
|||||||
fieldValues.add(transaction.type);
|
fieldValues.add(transaction.type);
|
||||||
fieldValues.add(transaction.Account?.name);
|
fieldValues.add(transaction.Account?.name);
|
||||||
fieldValues.add(transaction.Account?.Platform?.name);
|
fieldValues.add(transaction.Account?.Platform?.name);
|
||||||
return [...fieldValues].filter((item) => item != undefined);
|
|
||||||
|
return [...fieldValues].filter((item) => {
|
||||||
|
return item !== undefined;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user