Skip to content

Commit f7ccb19

Browse files
fix(mobile): collapse the sheet and show toast on fee selection in approver
1 parent 89cd8ce commit f7ccb19

File tree

6 files changed

+49
-36
lines changed

6 files changed

+49
-36
lines changed

apps/mobile/src/features/approver/components/fees/base-fee-option.tsx

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ReactElement } from 'react';
22

3-
import { Avatar, Box, ItemLayout, Pressable } from '@leather.io/ui/native';
3+
import { Avatar, ItemLayout, Pressable } from '@leather.io/ui/native';
44

55
interface BaseFeeOptionProps {
66
onPress(): void;
@@ -23,10 +23,15 @@ export function BaseFeeOption({
2323
formattedFeeAmount,
2424
formattedFiatFeeAmount,
2525
}: BaseFeeOptionProps) {
26+
const borderColor = {
27+
default: isSelected ? 'ink.text-primary' : 'ink.border-default',
28+
pressed: 'ink.action-primary-hover',
29+
} as const;
30+
2631
return (
2732
<>
2833
<Pressable
29-
borderColor={isSelected ? 'ink.text-primary' : 'ink.border-default'}
34+
borderColor={borderColor.default}
3035
borderWidth={1}
3136
borderRadius="xs"
3237
flexDirection="row"
@@ -35,6 +40,14 @@ export function BaseFeeOption({
3540
gap="3"
3641
onPress={onPress}
3742
disabled={disabled}
43+
opacity={disabled ? 0.5 : 1}
44+
pressEffects={{
45+
borderColor: {
46+
from: borderColor.default,
47+
to: borderColor.pressed,
48+
settings: { type: 'timing' },
49+
},
50+
}}
3851
>
3952
<Avatar icon={icon} />
4053
<ItemLayout
@@ -43,17 +56,6 @@ export function BaseFeeOption({
4356
titleRight={formattedFeeAmount}
4457
captionRight={formattedFiatFeeAmount}
4558
/>
46-
{disabled && (
47-
<Box
48-
top={0}
49-
bottom={0}
50-
right={0}
51-
left={0}
52-
position="absolute"
53-
backgroundColor="ink.background-overlay"
54-
opacity={0.1}
55-
/>
56-
)}
5759
</Pressable>
5860
</>
5961
);

apps/mobile/src/features/approver/components/fees/bitcoin-fee-sheet.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,15 @@ const feeTypes = [FeeTypes.Low, FeeTypes.Middle, FeeTypes.High, FeeTypes.Custom]
1515
interface FeesSheetProps {
1616
sheetRef: RefObject<SheetRef>;
1717
selectedFeeType: FeeTypes;
18-
setSelectedFeeType(feeType: FeeTypes): void;
1918
fees: AverageBitcoinFeeRates | undefined;
2019
txSize: number;
2120
currentFeeRate: number;
2221
onChangeFee(feeType: FeeTypes): void;
2322
}
2423

25-
export function FeesSheet({
24+
export function BitcoinFeesSheet({
2625
sheetRef,
2726
selectedFeeType,
28-
setSelectedFeeType,
2927
fees,
3028
txSize,
3129
currentFeeRate,
@@ -49,6 +47,11 @@ export function FeesSheet({
4947
return { feeRate, fee };
5048
}
5149

50+
function handleFeeChange(feeType: FeeTypes) {
51+
onChangeFee(feeType);
52+
sheetRef.current?.close();
53+
}
54+
5255
return (
5356
<FeeSheetLayout sheetRef={sheetRef}>
5457
{feeTypes.map(feeType => {
@@ -57,10 +60,7 @@ export function FeesSheet({
5760
<BitcoinFeeOption
5861
isSelected={selectedFeeType === feeType}
5962
disabled={feeType === FeeTypes.Custom}
60-
onPress={() => {
61-
setSelectedFeeType(feeType);
62-
onChangeFee(feeType);
63-
}}
63+
onPress={() => handleFeeChange(feeType)}
6464
key={feeType}
6565
feeType={feeType}
6666
feeRate={feeRate.toNumber()}

apps/mobile/src/features/approver/components/fees/fee-sheet.layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export function FeeSheetLayout({ sheetRef, children }: FeeSheetLayoutProps) {
2121
<Box
2222
style={{
2323
paddingBottom: theme.spacing[5] + bottom,
24-
paddingTop: theme.spacing[4],
24+
paddingTop: theme.spacing[5],
2525
}}
2626
gap="3"
2727
p="3"

apps/mobile/src/features/approver/components/fees/stacks-fee-sheet.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@ import { baseCurrencyAmountInQuoteWithFallback } from '@leather.io/utils';
99
import { FeeSheetLayout } from './fee-sheet.layout';
1010
import { StacksFeeOption } from './stacks-fee-option';
1111

12-
const feeTypeArr = [FeeTypes.Low, FeeTypes.Middle, FeeTypes.High, FeeTypes.Custom];
12+
const feeTypes = [FeeTypes.Low, FeeTypes.Middle, FeeTypes.High, FeeTypes.Custom];
1313

1414
interface FeesSheetProps {
1515
sheetRef: RefObject<SheetRef>;
1616
selectedFeeType: FeeTypes;
17-
setSelectedFeeType(feeType: FeeTypes): void;
1817
fees: Record<FeeTypes, Money>;
1918
currentFee: Money;
2019
onChangeFee(feeType: FeeTypes): void;
@@ -23,7 +22,6 @@ interface FeesSheetProps {
2322
export function StacksFeesSheet({
2423
sheetRef,
2524
selectedFeeType,
26-
setSelectedFeeType,
2725
fees,
2826
currentFee,
2927
onChangeFee,
@@ -34,18 +32,20 @@ export function StacksFeesSheet({
3432
return baseCurrencyAmountInQuoteWithFallback(fee, stxMarketData);
3533
}
3634

35+
function handleChangeFee(feeType: FeeTypes) {
36+
sheetRef.current?.close();
37+
onChangeFee(feeType);
38+
}
39+
3740
return (
3841
<FeeSheetLayout sheetRef={sheetRef}>
39-
{feeTypeArr.map(feeType => {
42+
{feeTypes.map(feeType => {
4043
const fee = feeType !== FeeTypes.Custom ? fees[feeType] : currentFee;
4144
return (
4245
<StacksFeeOption
4346
isSelected={selectedFeeType === feeType}
4447
disabled={feeType === FeeTypes.Custom}
45-
onPress={() => {
46-
setSelectedFeeType(feeType);
47-
onChangeFee(feeType);
48-
}}
48+
onPress={() => handleChangeFee(feeType)}
4949
key={feeType}
5050
feeType={feeType}
5151
fee={fee}

apps/mobile/src/features/psbt-signer/psbt-signer.tsx

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ import {
4444
} from '@leather.io/utils';
4545

4646
import { ApproverButtons } from '../approver/components/approver-buttons';
47-
import { FeesSheet } from '../approver/components/fees/bitcoin-fee-sheet';
47+
import { BitcoinFeesSheet } from '../approver/components/fees/bitcoin-fee-sheet';
4848
import { ApproverState } from '../approver/utils';
4949
import { usePsbtAccounts } from './use-psbt-accounts';
5050
import { usePsbtPayers } from './use-psbt-payers';
@@ -196,7 +196,15 @@ export function BasePsbtSigner({
196196
if (!tx) throw new Error('No tx');
197197
const psbtHex = bytesToHex(tx.psbt);
198198

199+
setSelectedFeeType(feeType);
199200
setPsbtHex(psbtHex);
201+
displayToast({
202+
title: t({
203+
id: 'approver.send.btc.success.change-fee',
204+
message: 'Fee updated',
205+
}),
206+
type: 'success',
207+
});
200208
}
201209
}
202210

@@ -275,9 +283,7 @@ export function BasePsbtSigner({
275283
<BitcoinFeeCard
276284
feeType={selectedFeeType}
277285
amount={psbtDetails.fee}
278-
onPress={() => {
279-
feeSheetRef.current?.present();
280-
}}
286+
onPress={() => feeSheetRef.current?.present()}
281287
/>
282288
</Approver.Section>
283289
<Approver.Advanced
@@ -327,10 +333,9 @@ export function BasePsbtSigner({
327333
/>
328334
)}
329335
</Approver>
330-
<FeesSheet
336+
<BitcoinFeesSheet
331337
sheetRef={feeSheetRef}
332338
selectedFeeType={selectedFeeType}
333-
setSelectedFeeType={setSelectedFeeType}
334339
onChangeFee={onChangeFee}
335340
fees={feeRates}
336341
txSize={txVBytes}

apps/mobile/src/features/stacks-tx-signer/stacks-tx-signer.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,13 @@ export function StacksTxSigner({
147147
const newTxHex = newTx.serialize();
148148
setTxHex(newTxHex);
149149
setSelectedFeeType(feeType);
150+
displayToast({
151+
title: t({
152+
id: 'approver.send.stx.success.change-fee',
153+
message: 'Fee updated',
154+
}),
155+
type: 'success',
156+
});
150157
}
151158
} catch {
152159
displayToast({
@@ -324,7 +331,6 @@ export function StacksTxSigner({
324331
<StacksFeesSheet
325332
sheetRef={feeSheetRef}
326333
selectedFeeType={selectedFeeType}
327-
setSelectedFeeType={setSelectedFeeType}
328334
onChangeFee={onChangeFee}
329335
fees={fees}
330336
currentFee={createMoney(tx.auth.spendingCondition.fee, 'STX')}

0 commit comments

Comments
 (0)