You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cake_wallet/lib/store/dashboard/transaction_filter_store.dart

69 lines
1.8 KiB

import 'package:mobx/mobx.dart';
import 'package:cw_core/transaction_direction.dart';
import 'package:cake_wallet/view_model/dashboard/transaction_list_item.dart';
part 'transaction_filter_store.g.dart';
class TransactionFilterStore = TransactionFilterStoreBase
with _$TransactionFilterStore;
abstract class TransactionFilterStoreBase with Store {
TransactionFilterStoreBase(
{this.displayIncoming = true, this.displayOutgoing = true});
@observable
bool displayIncoming;
@observable
bool displayOutgoing;
@observable
DateTime startDate;
@observable
DateTime endDate;
@action
void toggleIncoming() => displayIncoming = !displayIncoming;
@action
void toggleOutgoing() => displayOutgoing = !displayOutgoing;
@action
void changeStartDate(DateTime date) => startDate = date;
@action
void changeEndDate(DateTime date) => endDate = date;
List<TransactionListItem> filtered({List<TransactionListItem> transactions}) {
var _transactions = <TransactionListItem>[];
final needToFilter = !displayOutgoing ||
!displayIncoming ||
(startDate != null && endDate != null);
if (needToFilter) {
_transactions = transactions.where((item) {
var allowed = true;
if (allowed && startDate != null && endDate != null) {
allowed = startDate.isBefore(item.transaction.date) &&
endDate.isAfter(item.transaction.date);
}
if (allowed && (!displayOutgoing || !displayIncoming)) {
allowed = (displayOutgoing &&
item.transaction.direction ==
TransactionDirection.outgoing) ||
(displayIncoming &&
item.transaction.direction == TransactionDirection.incoming);
}
return allowed;
}).toList();
} else {
_transactions = transactions;
}
return _transactions;
}
}