Skip to content

Commit

Permalink
feat: ✨ Add a control to check if UCO balance is not too low after ac…
Browse files Browse the repository at this point in the history
…tion validation
  • Loading branch information
redDwarf03 committed Nov 19, 2024
1 parent cb6ee88 commit 341c02b
Show file tree
Hide file tree
Showing 5 changed files with 180 additions and 8 deletions.
4 changes: 4 additions & 0 deletions lib/application/dex_token.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion lib/l10n/intl_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -481,5 +481,7 @@
"mobileInfoTxt5": "Thank you for your understanding.",
"maintenanceInfoGlobal": "aeSwap is currently undergoing maintenance to improve your experience.\nWe apologize for the inconvenience.\nPlease try again later.\nThank you for your understanding.",
"maintenanceInfoFarmLock": "Earn features are currently undergoing maintenance to improve your experience.\nWe apologize for the inconvenience.\nPlease try again later.\nThank you for your understanding.",
"swapControlTokenSwappedAmountExceedReserve": "The swapped amount exceeds the available reserve in the pool."
"swapControlTokenSwappedAmountExceedReserve": "The swapped amount exceeds the available reserve in the pool.",
"lowUCOWarningPopupTitle": "Warning",
"lowUCOWarningPopupDesc": "Once this action is confirmed, you will no longer have enough UCO to cover the transaction fees for other actions.\n\nAre you sure to confirm the action?"
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
/// SPDX-License-Identifier: AGPL-3.0-or-later
import 'dart:async';

import 'package:aedex/ui/views/liquidity_add/bloc/provider.dart';
import 'package:aedex/ui/views/liquidity_add/layouts/components/liquidity_add_confirm_infos.dart';
import 'package:aedex/ui/views/liquidity_add/layouts/components/liquidity_add_in_progress_popup.dart';
import 'package:aedex/ui/views/util/components/low_uco_warning_popup.dart';
import 'package:aedex/ui/views/util/consent_uri.dart';
import 'package:archethic_dapp_framework_flutter/archethic_dapp_framework_flutter.dart'
as aedappfm;
import 'package:decimal/decimal.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
Expand Down Expand Up @@ -75,15 +78,50 @@ class LiquidityAddConfirmSheetState
labelBtn: AppLocalizations.of(context)!.btn_confirm_liquidity_add,
disabled: !consentChecked && liquidityAdd.consentDateTime == null,
onPressed: () async {
if (liquidityAdd.token1 != null &&
liquidityAdd.token1!.isUCO &&
(Decimal.parse(
liquidityAdd.token1Balance.toString(),
) -
Decimal.parse(
liquidityAdd.token1Amount.toString(),
))
.toDouble() <
kLowUCOWarningValue) {
final result = await LowUCOWarningPopup.getDialog(context);
if (result != null && result == false) {
return;
}
}
if (liquidityAdd.token2 != null &&
liquidityAdd.token2!.isUCO &&
(Decimal.parse(
liquidityAdd.token2Balance.toString(),
) -
Decimal.parse(
liquidityAdd.token2Amount.toString(),
))
.toDouble() <
kLowUCOWarningValue) {
if (context.mounted) {
final result = await LowUCOWarningPopup.getDialog(context);
if (result != null && result == false) {
return;
}
}
}

final liquidityAddNotifier =
ref.read(liquidityAddFormNotifierProvider.notifier);
unawaited(
liquidityAddNotifier.add(AppLocalizations.of(context)!),
);
await LiquidityAddInProgressPopup.getDialog(
context,
ref,
);
if (context.mounted) {
unawaited(
liquidityAddNotifier.add(AppLocalizations.of(context)!),
);
await LiquidityAddInProgressPopup.getDialog(
context,
ref,
);
}
},
),
const SizedBox(
Expand Down
18 changes: 18 additions & 0 deletions lib/ui/views/swap/layouts/components/swap_confirm_sheet.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
/// SPDX-License-Identifier: AGPL-3.0-or-later
// ignore_for_file: use_build_context_synchronously

import 'dart:async';

import 'package:aedex/ui/views/swap/bloc/provider.dart';
import 'package:aedex/ui/views/swap/layouts/components/swap_confirm_infos.dart';
import 'package:aedex/ui/views/swap/layouts/components/swap_in_progress_popup.dart';
import 'package:aedex/ui/views/util/components/low_uco_warning_popup.dart';
import 'package:aedex/ui/views/util/consent_uri.dart';
import 'package:archethic_dapp_framework_flutter/archethic_dapp_framework_flutter.dart'
as aedappfm;
import 'package:decimal/decimal.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
Expand Down Expand Up @@ -73,6 +77,20 @@ class SwapConfirmSheetState extends ConsumerState<SwapConfirmSheet> {
labelBtn: AppLocalizations.of(context)!.btn_confirm_swap,
disabled: !consentChecked && swap.consentDateTime == null,
onPressed: () async {
if (swap.tokenToSwap != null &&
swap.tokenToSwap!.isUCO &&
(Decimal.parse(
swap.tokenToSwapBalance.toString(),
) -
Decimal.parse(swap.tokenToSwapAmount.toString()))
.toDouble() <
kLowUCOWarningValue) {
final result = await LowUCOWarningPopup.getDialog(context);
if (result != null && result == false) {
return;
}
}

final swapNotifier = ref.read(swapFormNotifierProvider.notifier);
unawaited(swapNotifier.swap(AppLocalizations.of(context)!));
await SwapInProgressPopup.getDialog(
Expand Down
110 changes: 110 additions & 0 deletions lib/ui/views/util/components/low_uco_warning_popup.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
import 'package:archethic_dapp_framework_flutter/archethic_dapp_framework_flutter.dart'
as aedappfm;
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/localizations.dart';
import 'package:go_router/go_router.dart';

const kLowUCOWarningValue = 5;

class LowUCOWarningPopup {
static Future<bool?> getDialog(
BuildContext context,
) async {
return showDialog<bool?>(
context: context,
builder: (context) {
return ScaffoldMessenger(
child: Builder(
builder: (context) {
return AlertDialog(
insetPadding: const EdgeInsets.symmetric(
horizontal: 10,
),
backgroundColor: aedappfm.AppThemeBase.backgroundPopupColor,
contentPadding: const EdgeInsets.only(
top: 10,
),
content: Container(
color: Colors.transparent,
padding: const EdgeInsets.symmetric(
horizontal: 10,
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(10),
child: Text(
AppLocalizations.of(context)!.lowUCOWarningPopupTitle,
style: Theme.of(context)
.textTheme
.titleMedium!
.copyWith(
fontSize:
aedappfm.Responsive.fontSizeFromTextStyle(
context,
Theme.of(context).textTheme.titleMedium!,
),
),
),
),
Padding(
padding: const EdgeInsets.all(10),
child: Text(
AppLocalizations.of(context)!.lowUCOWarningPopupDesc,
softWrap: true,
style: Theme.of(context)
.textTheme
.bodyMedium!
.copyWith(
fontSize:
aedappfm.Responsive.fontSizeFromTextStyle(
context,
Theme.of(context).textTheme.bodyMedium!,
),
),
),
),
const SizedBox(
height: 20,
),
Container(
constraints: const BoxConstraints(
minWidth: 100,
),
width: 300,
padding: const EdgeInsets.only(
bottom: 20,
),
child: Row(
children: [
Expanded(
child: aedappfm.AppButton(
labelBtn: AppLocalizations.of(context)!.no,
onPressed: () async {
context.pop(false);
},
),
),
Expanded(
child: aedappfm.AppButton(
labelBtn: AppLocalizations.of(context)!.yes,
onPressed: () async {
context.pop(true);
},
),
),
],
),
),
],
),
),
);
},
),
);
},
);
}
}

0 comments on commit 341c02b

Please sign in to comment.