From b24b6c4a8ad8ba52707e433daf88f41e3fa98546 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Sun, 18 Sep 2022 21:46:42 +0300 Subject: [PATCH] Transactions --- lib/data/models/transaction_model.dart | 15 +++++++++++++++ lib/redux/transaction/transaction_actions.dart | 6 ++++++ lib/redux/transaction/transaction_reducer.dart | 13 +++++++++++++ lib/ui/transaction/transaction_screen.dart | 4 ++++ 4 files changed, 38 insertions(+) diff --git a/lib/data/models/transaction_model.dart b/lib/data/models/transaction_model.dart index 9cc25792b..9dd30b949 100644 --- a/lib/data/models/transaction_model.dart +++ b/lib/data/models/transaction_model.dart @@ -210,6 +210,21 @@ abstract class TransactionEntity extends Object return null; } + @override + bool matchesStatuses(BuiltList statuses) { + if (statuses.isEmpty) { + return true; + } + + for (final status in statuses) { + if (status.id == calculatedStatusId || status.id == calculatedStatusId) { + return true; + } + } + + return false; + } + @override bool matchesFilter(String filter) { return matchesStrings( diff --git a/lib/redux/transaction/transaction_actions.dart b/lib/redux/transaction/transaction_actions.dart index d936476bb..4a429f76d 100644 --- a/lib/redux/transaction/transaction_actions.dart +++ b/lib/redux/transaction/transaction_actions.dart @@ -212,6 +212,12 @@ class FilterTransactionsByState implements PersistUI { final EntityState state; } +class FilterTransactionsByStatus implements PersistUI { + FilterTransactionsByStatus(this.status); + + final TransactionStatusEntity status; +} + class FilterTransactionsByCustom1 implements PersistUI { FilterTransactionsByCustom1(this.value); diff --git a/lib/redux/transaction/transaction_reducer.dart b/lib/redux/transaction/transaction_reducer.dart index 9acf74fdb..96c9d9122 100644 --- a/lib/redux/transaction/transaction_reducer.dart +++ b/lib/redux/transaction/transaction_reducer.dart @@ -101,6 +101,8 @@ final transactionListReducer = combineReducers([ TypedReducer(_sortTransactions), TypedReducer( _filterTransactionsByState), + TypedReducer( + _filterTransactionsByStatus), TypedReducer(_filterTransactions), TypedReducer( _filterTransactionsByCustom1), @@ -155,6 +157,17 @@ ListUIState _filterTransactionsByState( } } +ListUIState _filterTransactionsByStatus( + ListUIState transactionListState, FilterTransactionsByStatus action) { + if (transactionListState.statusFilters.contains(action.status)) { + return transactionListState + .rebuild((b) => b..statusFilters.remove(action.status)); + } else { + return transactionListState + .rebuild((b) => b..statusFilters.add(action.status)); + } +} + ListUIState _filterTransactions( ListUIState transactionListState, FilterTransactions action) { return transactionListState.rebuild((b) => b diff --git a/lib/ui/transaction/transaction_screen.dart b/lib/ui/transaction/transaction_screen.dart index d3121836e..c2df3008d 100644 --- a/lib/ui/transaction/transaction_screen.dart +++ b/lib/ui/transaction/transaction_screen.dart @@ -64,6 +64,10 @@ class TransactionScreen extends StatelessWidget { onSelectedState: (EntityState state, value) { store.dispatch(FilterTransactionsByState(state)); }, + onSelectedStatus: (EntityStatus status, value) { + store.dispatch(FilterTransactionsByStatus(status)); + }, + statuses: statuses, ), onCheckboxPressed: () { if (store.state.transactionListState.isInMultiselect()) {