SEND044 #429
@@ -1 +0,0 @@
|
||||
enum RecipientFilter { all, ready, registered, notRegistered }
|
||||
@@ -104,6 +104,11 @@ RouteBase payoutShellRoute() => ShellRoute(
|
||||
wallet,
|
||||
returnTo: PayoutDestination.dashboard,
|
||||
),
|
||||
onWalletTap: (wallet) => _openWalletEdit(
|
||||
context,
|
||||
wallet,
|
||||
returnTo: PayoutDestination.dashboard,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
@@ -120,10 +125,8 @@ RouteBase payoutShellRoute() => ShellRoute(
|
||||
returnTo: PayoutDestination.recipients,
|
||||
),
|
||||
onAddRecipient: () => _openAddRecipient(context),
|
||||
onEditRecipient: (recipient) => _openAddRecipient(
|
||||
context,
|
||||
recipient: recipient,
|
||||
),
|
||||
onEditRecipient: (recipient) =>
|
||||
_openAddRecipient(context, recipient: recipient),
|
||||
onDeleteRecipient: (recipient) async {
|
||||
final confirmed = await showConfirmationDialog(
|
||||
context: context,
|
||||
@@ -192,22 +195,13 @@ RouteBase payoutShellRoute() => ShellRoute(
|
||||
GoRoute(
|
||||
name: PayoutRoutes.reports,
|
||||
path: PayoutRoutes.reportsPath,
|
||||
pageBuilder: (_, _) => const NoTransitionPage(
|
||||
child: OperationHistoryPage(),
|
||||
),
|
||||
pageBuilder: (_, _) =>
|
||||
const NoTransitionPage(child: OperationHistoryPage()),
|
||||
),
|
||||
GoRoute(
|
||||
name: PayoutRoutes.methods,
|
||||
path: PayoutRoutes.methodsPath,
|
||||
pageBuilder: (context, _) => NoTransitionPage(
|
||||
child: PaymentConfigPage(
|
||||
onWalletTap: (wallet) => _openWalletEdit(
|
||||
context,
|
||||
wallet,
|
||||
returnTo: PayoutDestination.methods,
|
||||
),
|
||||
),
|
||||
),
|
||||
redirect: (_, state) => PayoutRoutes.dashboardPath,
|
||||
),
|
||||
GoRoute(
|
||||
name: PayoutRoutes.editWallet,
|
||||
|
||||
@@ -422,7 +422,7 @@
|
||||
"selectPaymentType": "Please select a payment method type",
|
||||
|
||||
"paymentTypeCard": "Russian bank card",
|
||||
"paymentTypeBankAccount": "Russian Bank Account",
|
||||
"paymentTypeBankAccount": "Russian bank account",
|
||||
"paymentTypeIban": "IBAN",
|
||||
"paymentTypeWallet": "Wallet",
|
||||
"paymentTypeCryptoWallet": "Crypto Wallet",
|
||||
|
||||
@@ -15,10 +15,12 @@ import 'package:pweb/generated/i18n/app_localizations.dart';
|
||||
|
||||
class BalanceWidget extends StatelessWidget {
|
||||
final ValueChanged<Wallet> onTopUp;
|
||||
final ValueChanged<Wallet> onWalletTap;
|
||||
|
||||
const BalanceWidget({
|
||||
super.key,
|
||||
required this.onTopUp,
|
||||
required this.onWalletTap,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -74,6 +76,7 @@ class BalanceWidget extends StatelessWidget {
|
||||
}
|
||||
},
|
||||
onTopUp: onTopUp,
|
||||
onWalletTap: onWalletTap,
|
||||
);
|
||||
|
||||
if (wallets.isEmpty && accounts.isEmpty) {
|
||||
|
||||
@@ -19,11 +19,13 @@ import 'package:pweb/generated/i18n/app_localizations.dart';
|
||||
class WalletCard extends StatelessWidget {
|
||||
final Wallet wallet;
|
||||
final VoidCallback onTopUp;
|
||||
final VoidCallback onTap;
|
||||
|
||||
const WalletCard({
|
||||
super.key,
|
||||
required this.wallet,
|
||||
required this.onTopUp,
|
||||
required this.onTap,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -40,6 +42,9 @@ class WalletCard extends StatelessWidget {
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(WalletCardConfig.borderRadius),
|
||||
),
|
||||
child: InkWell(
|
||||
borderRadius: BorderRadius.circular(WalletCardConfig.borderRadius),
|
||||
onTap: onTap,
|
||||
child: SizedBox.expand(
|
||||
child: Padding(
|
||||
padding: WalletCardConfig.contentPadding,
|
||||
@@ -70,7 +75,7 @@ class WalletCard extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ class BalanceCarousel extends StatefulWidget {
|
||||
final int currentIndex;
|
||||
final ValueChanged<int> onIndexChanged;
|
||||
final ValueChanged<Wallet> onTopUp;
|
||||
final ValueChanged<Wallet> onWalletTap;
|
||||
|
||||
const BalanceCarousel({
|
||||
super.key,
|
||||
@@ -23,6 +24,7 @@ class BalanceCarousel extends StatefulWidget {
|
||||
required this.currentIndex,
|
||||
required this.onIndexChanged,
|
||||
required this.onTopUp,
|
||||
required this.onWalletTap,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -101,6 +103,7 @@ class _BalanceCarouselState extends State<BalanceCarousel> {
|
||||
BalanceItemType.wallet => WalletCard(
|
||||
wallet: item.wallet!,
|
||||
onTopUp: () => widget.onTopUp(item.wallet!),
|
||||
onTap: () => widget.onWalletTap(item.wallet!),
|
||||
),
|
||||
BalanceItemType.ledger => LedgerAccountCard(account: item.account!),
|
||||
BalanceItemType.addAction => const AddBalanceCard(),
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
||||
|
||||
|
||||
abstract class WalletCardConfig {
|
||||
static const double cardHeight = 130.0;
|
||||
static const double cardHeight = 145.0;
|
||||
static const double elevation = 4.0;
|
||||
static const double borderRadius = 16.0;
|
||||
static const double viewportFraction = 0.9;
|
||||
|
||||
@@ -27,12 +27,14 @@ class DashboardPage extends StatefulWidget {
|
||||
final ValueChanged<Recipient> onRecipientSelected;
|
||||
final void Function(PaymentType type) onGoToPaymentWithoutRecipient;
|
||||
final ValueChanged<Wallet> onTopUp;
|
||||
final ValueChanged<Wallet> onWalletTap;
|
||||
|
||||
const DashboardPage({
|
||||
super.key,
|
||||
required this.onRecipientSelected,
|
||||
required this.onGoToPaymentWithoutRecipient,
|
||||
required this.onTopUp,
|
||||
required this.onWalletTap,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -88,6 +90,7 @@ class _DashboardPageState extends State<DashboardPage> {
|
||||
create: (_) => CarouselIndexController(),
|
||||
child: BalanceWidget(
|
||||
onTopUp: widget.onTopUp,
|
||||
onWalletTap: widget.onWalletTap,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: AppSpacing.small),
|
||||
|
||||
@@ -1,25 +1,11 @@
|
||||
import 'package:pshared/models/recipient/filter.dart';
|
||||
import 'package:pshared/models/recipient/recipient.dart';
|
||||
import 'package:pshared/models/recipient/status.dart';
|
||||
|
||||
|
||||
List<Recipient> filterRecipients({
|
||||
required List<Recipient> recipients,
|
||||
RecipientFilter filter = RecipientFilter.all,
|
||||
String query = '',
|
||||
}) {
|
||||
var filtered = recipients.where((r) {
|
||||
switch (filter) {
|
||||
case RecipientFilter.ready:
|
||||
return r.status == RecipientStatus.ready;
|
||||
case RecipientFilter.registered:
|
||||
return r.status == RecipientStatus.registered;
|
||||
case RecipientFilter.notRegistered:
|
||||
return r.status == RecipientStatus.notRegistered;
|
||||
case RecipientFilter.all:
|
||||
return true;
|
||||
}
|
||||
}).toList();
|
||||
final filtered = recipients;
|
||||
|
||||
final normalizedQuery = query.trim().toLowerCase();
|
||||
if (normalizedQuery.isEmpty) return filtered;
|
||||
|
||||
@@ -28,7 +28,6 @@ class PayoutSidebar extends StatelessWidget {
|
||||
final String? avatarUrl;
|
||||
final List<PayoutDestination>? items;
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final accountName = context.select<AccountProvider, String?>(
|
||||
@@ -40,13 +39,15 @@ class PayoutSidebar extends StatelessWidget {
|
||||
final resolvedUserName = userName ?? accountName;
|
||||
final resolvedAvatarUrl = avatarUrl ?? accountAvatar;
|
||||
|
||||
final menuItems = items ??
|
||||
final menuItems =
|
||||
items ??
|
||||
<PayoutDestination>[
|
||||
PayoutDestination.dashboard,
|
||||
PayoutDestination.recipients,
|
||||
PayoutDestination.invitations,
|
||||
PayoutDestination.methods,
|
||||
//PayoutDestination.reports,
|
||||
// PayoutDestination.methods,
|
||||
// PayoutDestination.reports,
|
||||
// PayoutDestination.organizationSettings,
|
||||
//TODO Add when ready
|
||||
];
|
||||
|
||||
@@ -56,11 +57,11 @@ class PayoutSidebar extends StatelessWidget {
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
UserProfileCard(
|
||||
theme: theme,
|
||||
avatarUrl: resolvedAvatarUrl,
|
||||
userName: resolvedUserName,
|
||||
selected: selected,
|
||||
onSelected: onSelected
|
||||
theme: theme,
|
||||
avatarUrl: resolvedAvatarUrl,
|
||||
userName: resolvedUserName,
|
||||
selected: selected,
|
||||
onSelected: onSelected,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
SideMenuColumn(
|
||||
|
||||
Reference in New Issue
Block a user