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