Files
sendico/frontend/pweb/lib/controllers/dashboard/balance/source_actions.dart
2026-03-06 18:05:04 +03:00

118 lines
3.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import 'package:pshared/controllers/payment/source.dart';
import 'package:pshared/models/payment/type.dart';
import 'package:pweb/app/router/payout_routes.dart';
import 'package:pweb/generated/i18n/app_localizations.dart';
class BalanceActionButtonState {
final String label;
final IconData icon;
final VoidCallback onPressed;
const BalanceActionButtonState({
required this.label,
required this.icon,
required this.onPressed,
});
}
class BalanceActionsState {
final BalanceActionButtonState topLeading;
final BalanceActionButtonState topTrailing;
final BalanceActionButtonState bottom;
const BalanceActionsState({
required this.topLeading,
required this.topTrailing,
required this.bottom,
});
}
class BalanceSourceActionsController {
const BalanceSourceActionsController();
BalanceActionsState wallet({
required BuildContext context,
required String walletRef,
required VoidCallback onAddFunds,
}) {
final l10n = AppLocalizations.of(context)!;
return BalanceActionsState(
topLeading: BalanceActionButtonState(
label: l10n.operationfryTitle,
icon: Icons.history_rounded,
onPressed: () => _openWalletOperationHistory(context, walletRef),
),
topTrailing: BalanceActionButtonState(
label: l10n.send,
icon: Icons.send_rounded,
onPressed: () => _sendWalletPayout(context, walletRef),
),
bottom: BalanceActionButtonState(
label: '${l10n.details} / ${l10n.addFunds}',
icon: Icons.account_balance_wallet_rounded,
onPressed: onAddFunds,
),
);
}
BalanceActionsState ledger({
required BuildContext context,
required String ledgerAccountRef,
required VoidCallback onAddFunds,
required VoidCallback onWalletDetails,
}) {
final l10n = AppLocalizations.of(context)!;
return BalanceActionsState(
topLeading: BalanceActionButtonState(
label: '${l10n.operationfryTitle} / ${l10n.details}',
icon: Icons.receipt_long_rounded,
onPressed: onWalletDetails,
),
topTrailing: BalanceActionButtonState(
label: l10n.send,
icon: Icons.send_rounded,
onPressed: () => _sendLedgerPayout(context, ledgerAccountRef),
),
bottom: BalanceActionButtonState(
label: l10n.addFunds,
icon: Icons.add_card_rounded,
onPressed: onAddFunds,
),
);
}
void _openWalletOperationHistory(BuildContext context, String walletRef) {
context.read<PaymentSourceController>().selectWalletByRef(walletRef);
context.pushNamed(PayoutRoutes.editWallet);
}
void _sendWalletPayout(BuildContext context, String walletRef) {
context.read<PaymentSourceController>().selectWalletByRef(walletRef);
context.pushNamed(
PayoutRoutes.payment,
queryParameters: PayoutRoutes.buildQueryParameters(
paymentType: PaymentType.wallet,
),
);
}
void _sendLedgerPayout(BuildContext context, String ledgerAccountRef) {
context.read<PaymentSourceController>().selectLedgerByRef(ledgerAccountRef);
context.pushNamed(
PayoutRoutes.payment,
queryParameters: PayoutRoutes.buildQueryParameters(
paymentType: PaymentType.ledger,
),
);
}
}