Skip to content
Snippets Groups Projects
Commit 6cf03118 authored by poka's avatar poka
Browse files

add comment tx read

parent 559c28b5
Branches
Tags
No related merge requests found
......@@ -54,6 +54,10 @@ query ($address: String!, $first: Int!, $after: String) {
name
}
}
comment {
remark
type
}
}
}
pageInfo {
......
class Transaction {
final DateTime timestamp;
final String address;
final String username;
final double amount;
final String comment;
final bool isReceived;
Transaction({
required this.timestamp,
required this.address,
required this.username,
required this.amount,
required this.comment,
required this.isReceived,
});
}
......@@ -11,12 +11,13 @@ import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/utils.dart';
import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:provider/provider.dart';
import 'package:gecko/models/transaction.dart';
class DuniterIndexer with ChangeNotifier {
Map<String, String?> walletNameIndexer = {};
String? fetchMoreCursor;
Map? pageInfo;
List? transBC;
List<Transaction>? transBC;
List listIndexerEndpoints = [];
bool isLoadingIndexer = false;
Future<QueryResult<Object?>?> Function()? refetch;
......@@ -207,32 +208,44 @@ class DuniterIndexer with ChangeNotifier {
}
}
List parseHistory(List blockchainTX, String address) {
List transBC = [];
int i = 0;
List<Transaction> parseHistory(List blockchainTX, String address) {
// Create a list to store Transaction objects
List<Transaction> transactions = [];
for (final transactionNode in blockchainTX) {
final transaction = transactionNode['node'];
final direction = transaction['fromId'] != address ? 'RECEIVED' : 'SENT';
final isReceived = transaction['fromId'] != address;
transBC.add(i);
transBC[i] = [];
transBC[i].add(DateTime.parse(transaction['timestamp']));
// Calculate amount
final amountBrut = transaction['amount'];
final amount = removeDecimalZero(amountBrut / 100);
if (direction == "RECEIVED") {
transBC[i].add(transaction['fromId']);
transBC[i].add(transaction['from']['identity']?['name'] ?? '');
} else if (direction == "SENT") {
transBC[i].add(transaction['toId']);
transBC[i].add(transaction['to']['identity']?['name'] ?? '');
}
transBC[i].add(amount);
transBC[i].add(direction);
i++;
final comment = transaction['comment']?['remark'] ?? '';
final commentType = transaction['comment']?['type'] ?? '';
// Determine counterparty based on direction
final String counterPartyId;
final String counterPartyName;
if (isReceived) {
counterPartyId = transaction['fromId'];
counterPartyName = transaction['from']['identity']?['name'] ?? '';
} else {
counterPartyId = transaction['toId'];
counterPartyName = transaction['to']['identity']?['name'] ?? '';
}
// Create and add new Transaction object
transactions.add(
Transaction(
timestamp: DateTime.parse(transaction['timestamp']),
address: counterPartyId,
username: counterPartyName,
amount: amount,
comment: commentType == 'ASCII' ? comment : '',
isReceived: isReceived,
),
);
}
return transBC;
return transactions;
}
FetchMoreOptions? mergeQueryResult(QueryResult result, FetchMoreOptions? opts, String address, int nRepositories) {
......@@ -313,11 +326,11 @@ class DuniterIndexer with ChangeNotifier {
return indexerClient.subscribe(options);
}
Map computeHistoryView(repository, String address) {
Map computeHistoryView(Transaction transaction, String address) {
final bool isUdUnit = configBox.get('isUdUnit') ?? false;
late double amount;
late String finalAmount;
final DateTime date = repository[0];
final DateTime date = transaction.timestamp;
final dateForm = "${date.day} ${monthsInYear[date.month]!.substring(0, {1, 2, 7, 9}.contains(date.month) ? 4 : 3)}";
......@@ -352,7 +365,7 @@ class DuniterIndexer with ChangeNotifier {
final dateDelimiter = getDateDelimiter();
amount = repository[4] == 'RECEIVED' ? repository[3] : repository[3] * -1;
amount = transaction.isReceived ? transaction.amount : transaction.amount * -1;
if (isUdUnit) {
amount = round(amount / balanceRatio);
......
......@@ -41,8 +41,8 @@ class HistoryView extends StatelessWidget {
])
: Column(children: <Widget>[
Column(
children: duniterIndexer.transBC!.map((repository) {
final answer = duniterIndexer.computeHistoryView(repository, address);
children: duniterIndexer.transBC!.map((transaction) {
final answer = duniterIndexer.computeHistoryView(transaction, address);
pastDelimiters.add(answer['dateDelimiter']);
bool isMigrationTime = false;
......@@ -78,7 +78,7 @@ class HistoryView extends StatelessWidget {
TransactionTile(
keyID: keyID,
avatarSize: avatarSize,
repository: repository,
transaction: transaction,
dateForm: answer['dateForm'],
finalAmount: answer['finalAmount'],
duniterIndexer: duniterIndexer,
......
import 'package:flutter/material.dart';
import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/transaction.dart';
import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/screens/wallet_view.dart';
......@@ -12,7 +13,7 @@ class TransactionTile extends StatelessWidget {
super.key,
required this.keyID,
required this.avatarSize,
required this.repository,
required this.transaction,
required this.dateForm,
required this.finalAmount,
required this.duniterIndexer,
......@@ -21,7 +22,7 @@ class TransactionTile extends StatelessWidget {
final int keyID;
final double avatarSize;
final List repository;
final Transaction transaction;
final String dateForm;
final String finalAmount;
final DuniterIndexer duniterIndexer;
......@@ -30,7 +31,7 @@ class TransactionTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
final newKey = keyID + 1;
final String? username = repository[2] == '' ? null : repository[2];
final String? username = transaction.username == '' ? null : transaction.username;
return Container(
margin: EdgeInsets.symmetric(
......@@ -63,7 +64,7 @@ class TransactionTile extends StatelessWidget {
),
),
child: DatapodAvatar(
address: repository[1],
address: transaction.address,
size: avatarSize,
),
),
......@@ -71,7 +72,7 @@ class TransactionTile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
getShortPubkey(repository[1]),
getShortPubkey(transaction.address),
style: scaledTextStyle(
fontSize: 15,
fontFamily: 'Monospace',
......@@ -106,6 +107,19 @@ class TransactionTile extends StatelessWidget {
],
),
),
if (transaction.comment.isNotEmpty) ...[
ScaledSizedBox(height: 4),
Text(
transaction.comment,
style: scaledTextStyle(
fontSize: 12,
color: Colors.grey[600],
fontStyle: FontStyle.italic,
),
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
],
],
),
trailing: Text(
......@@ -113,7 +127,7 @@ class TransactionTile extends StatelessWidget {
style: scaledTextStyle(
fontSize: 15,
fontWeight: FontWeight.w600,
color: repository[4] == 'RECEIVED' ? const Color(0xFF4CAF50) : const Color(0xFF2196F3),
color: transaction.isReceived ? const Color(0xFF4CAF50) : const Color(0xFF2196F3),
),
),
onTap: () {
......@@ -121,7 +135,7 @@ class TransactionTile extends StatelessWidget {
context,
PageNoTransit(
builder: (context) => WalletViewScreen(
address: repository[1],
address: transaction.address,
username: username,
),
),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment