Skip to content

Commit 6a9e97d

Browse files
Fix primary button visibility when no payment method selected (#7059)
1 parent fe4a989 commit 6a9e97d

File tree

4 files changed

+23
-8
lines changed

4 files changed

+23
-8
lines changed

paymentsheet/src/main/java/com/stripe/android/customersheet/CustomerSheetViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ internal class CustomerSheetViewModel @Inject constructor(
220220
val isEditing = !it.isEditing
221221
it.copy(
222222
isEditing = isEditing,
223-
primaryButtonVisible = !isEditing,
223+
primaryButtonVisible = !isEditing && originalPaymentSelection != it.paymentSelection,
224224
)
225225
}
226226
}

paymentsheet/src/main/java/com/stripe/android/paymentsheet/ui/PaymentSheetTopBarState.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ internal object PaymentSheetTopBarStateFactory {
2121

2222
fun create(
2323
screen: PaymentSheetScreen,
24-
paymentMethods: List<PaymentMethod>?,
24+
paymentMethods: List<PaymentMethod>,
2525
isLiveMode: Boolean,
2626
isProcessing: Boolean,
2727
isEditing: Boolean,
@@ -50,7 +50,7 @@ internal object PaymentSheetTopBarStateFactory {
5050
icon = icon,
5151
contentDescription = contentDescription,
5252
showTestModeLabel = !isLiveMode,
53-
showEditMenu = showOptionsMenu && !paymentMethods.isNullOrEmpty(),
53+
showEditMenu = showOptionsMenu && paymentMethods.isNotEmpty(),
5454
editMenuLabel = editMenuLabel,
5555
isEnabled = !isProcessing,
5656
)

paymentsheet/src/main/java/com/stripe/android/paymentsheet/viewmodels/BaseSheetViewModel.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,16 @@ internal abstract class BaseSheetViewModel(
204204
paymentMethods,
205205
stripeIntent.map { it?.isLiveMode ?: true },
206206
processing,
207-
editing,
208-
PaymentSheetTopBarStateFactory::create,
209-
).stateIn(
207+
editing
208+
) { currentScreen, paymentMethods, isLiveMode, isProcessing, isEditing ->
209+
PaymentSheetTopBarStateFactory.create(
210+
screen = currentScreen,
211+
paymentMethods = paymentMethods ?: emptyList(),
212+
isLiveMode = isLiveMode,
213+
isProcessing = isProcessing,
214+
isEditing = isEditing,
215+
)
216+
}.stateIn(
210217
scope = viewModelScope,
211218
started = SharingStarted.WhileSubscribed(),
212219
initialValue = PaymentSheetTopBarStateFactory.createDefault(),

paymentsheet/src/test/java/com/stripe/android/customersheet/CustomerSheetViewModelTest.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,7 +1070,15 @@ class CustomerSheetViewModelTest {
10701070
)
10711071

10721072
viewState = awaitItem() as CustomerSheetViewState.SelectPaymentMethod
1073-
assertThat((viewState).primaryButtonVisible)
1073+
assertThat(viewState.primaryButtonVisible)
1074+
.isFalse()
1075+
1076+
viewModel.handleViewAction(
1077+
CustomerSheetViewAction.OnEditPressed
1078+
)
1079+
1080+
viewState = awaitItem() as CustomerSheetViewState.SelectPaymentMethod
1081+
assertThat(viewState.primaryButtonVisible)
10741082
.isFalse()
10751083

10761084
viewModel.handleViewAction(
@@ -1082,7 +1090,7 @@ class CustomerSheetViewModelTest {
10821090
)
10831091

10841092
viewState = awaitItem() as CustomerSheetViewState.SelectPaymentMethod
1085-
assertThat((viewState).primaryButtonVisible)
1093+
assertThat(viewState.primaryButtonVisible)
10861094
.isTrue()
10871095
}
10881096
}

0 commit comments

Comments
 (0)