dev
dart 46 lines 1.48 KB
Raw
1 import 'dart:async';
2
3 import 'package:cake_wallet/view_model/dashboard/payjoin_transaction_list_item.dart';
4 import 'package:cw_core/payjoin_session.dart';
5 import 'package:flutter/foundation.dart';
6 import 'package:hive/hive.dart';
7 import 'package:mobx/mobx.dart';
8
9 part 'payjoin_transactions_store.g.dart';
10
11 class PayjoinTransactionsStore = PayjoinTransactionsStoreBase with _$PayjoinTransactionsStore;
12
13 abstract class PayjoinTransactionsStoreBase with Store {
14 PayjoinTransactionsStoreBase({
15 required this.payjoinSessionSource,
16 }) : transactions = <PayjoinTransactionListItem>[] {
17 payjoinSessionSource.watch().listen((_) => updateTransactionList());
18 updateTransactionList();
19 }
20
21 Box<PayjoinSession> payjoinSessionSource;
22
23 @observable
24 List<PayjoinTransactionListItem> transactions;
25
26 @action
27 Future<void> updateTransactionList() async {
28 final updatedTransactions = <PayjoinTransactionListItem>[];
29 payjoinSessionSource.toMap().forEach((dynamic key, PayjoinSession session) {
30 if ([
31 PayjoinSessionStatus.inProgress.name,
32 PayjoinSessionStatus.success.name,
33 PayjoinSessionStatus.unrecoverable.name
34 ].contains(session.status) &&
35 session.inProgressSince != null) {
36 updatedTransactions.add(PayjoinTransactionListItem(
37 sessionId: key as String,
38 session: session,
39 key: ValueKey('payjoin_transaction_list_item_${key}_key'),
40 ));
41 }
42 });
43
44 transactions = updatedTransactions;
45 }
46 }