mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-26 06:08:40 +01:00
CAKE-15 | created header row, transaction page, balance view model, formatted item list, wallet balance; applied new design to trade and transaction rows; applied transaction page to dashboard page; applied balance view model, trade store, trade filter store and transaction filter store to dashboard view model; changed trade list item and transaction list item
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
import 'package:cake_wallet/core/wallet_base.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:cake_wallet/src/domain/exchange/exchange_provider_description.dart';
|
||||
import 'package:cake_wallet/view_model/dashboard/trade_list_item.dart';
|
||||
|
||||
part 'trade_filter_store.g.dart';
|
||||
|
||||
class TradeFilterStore = TradeFilterStoreBase with _$TradeFilterStore;
|
||||
|
||||
abstract class TradeFilterStoreBase with Store {
|
||||
TradeFilterStoreBase(
|
||||
{this.displayXMRTO = true,
|
||||
this.displayChangeNow = true,
|
||||
this.displayMorphToken = true,
|
||||
this.wallet});
|
||||
|
||||
@observable
|
||||
bool displayXMRTO;
|
||||
|
||||
@observable
|
||||
bool displayChangeNow;
|
||||
|
||||
@observable
|
||||
bool displayMorphToken;
|
||||
|
||||
WalletBase wallet;
|
||||
|
||||
@action
|
||||
void toggleDisplayExchange(ExchangeProviderDescription provider) {
|
||||
switch (provider) {
|
||||
case ExchangeProviderDescription.changeNow:
|
||||
displayChangeNow = !displayChangeNow;
|
||||
break;
|
||||
case ExchangeProviderDescription.xmrto:
|
||||
displayXMRTO = !displayXMRTO;
|
||||
break;
|
||||
case ExchangeProviderDescription.morphToken:
|
||||
displayMorphToken = !displayMorphToken;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
List<TradeListItem> filtered({List<TradeListItem> trades}) {
|
||||
final _trades =
|
||||
trades.where((item) => item.trade.walletId == wallet.id).toList();
|
||||
final needToFilter = !displayChangeNow || !displayXMRTO || !displayMorphToken;
|
||||
|
||||
return needToFilter
|
||||
? trades
|
||||
.where((item) =>
|
||||
(displayXMRTO &&
|
||||
item.trade.provider == ExchangeProviderDescription.xmrto) ||
|
||||
(displayChangeNow &&
|
||||
item.trade.provider ==
|
||||
ExchangeProviderDescription.changeNow) ||
|
||||
(displayMorphToken &&
|
||||
item.trade.provider ==
|
||||
ExchangeProviderDescription.morphToken))
|
||||
.toList()
|
||||
: _trades;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
import 'dart:async';
|
||||
import 'package:cake_wallet/src/domain/exchange/trade.dart';
|
||||
import 'package:cake_wallet/view_model/dashboard/trade_list_item.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:cake_wallet/store/settings_store.dart';
|
||||
|
||||
part 'trades_store.g.dart';
|
||||
|
||||
class TradesStore = TradesStoreBase with _$TradesStore;
|
||||
|
||||
abstract class TradesStoreBase with Store {
|
||||
TradesStoreBase({this.tradesSource, this.settingsStore}) {
|
||||
trades = <TradeListItem>[];
|
||||
|
||||
_onTradesChanged =
|
||||
tradesSource.watch().listen((_) async => await updateTradeList());
|
||||
|
||||
updateTradeList();
|
||||
}
|
||||
|
||||
Box<Trade> tradesSource;
|
||||
StreamSubscription<BoxEvent> _onTradesChanged;
|
||||
SettingsStore settingsStore;
|
||||
|
||||
@observable
|
||||
List<TradeListItem> trades;
|
||||
|
||||
@action
|
||||
Future updateTradeList() async => trades =
|
||||
tradesSource.values.map((trade) => TradeListItem(
|
||||
trade: trade,
|
||||
displayMode: settingsStore.balanceDisplayMode)).toList();
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:cake_wallet/src/domain/common/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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user