Skip to content

Commit

Permalink
Add institution icon to account picker
Browse files Browse the repository at this point in the history
  • Loading branch information
tillh-stripe committed May 1, 2024
1 parent c2f015d commit 75c945d
Show file tree
Hide file tree
Showing 9 changed files with 35 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.LazyListState
Expand All @@ -34,12 +35,14 @@ import com.stripe.android.financialconnections.features.accountpicker.AccountPic
import com.stripe.android.financialconnections.features.accountpicker.AccountPickerState.SelectionMode
import com.stripe.android.financialconnections.features.accountpicker.AccountPickerState.ViewEffect.OpenUrl
import com.stripe.android.financialconnections.features.common.AccountItem
import com.stripe.android.financialconnections.features.common.InstitutionIcon
import com.stripe.android.financialconnections.features.common.LoadingShimmerEffect
import com.stripe.android.financialconnections.features.common.MerchantDataAccessModel
import com.stripe.android.financialconnections.features.common.MerchantDataAccessText
import com.stripe.android.financialconnections.features.common.NoAccountsAvailableErrorContent
import com.stripe.android.financialconnections.features.common.NoSupportedPaymentMethodTypeAccountsErrorContent
import com.stripe.android.financialconnections.features.common.UnclassifiedErrorContent
import com.stripe.android.financialconnections.model.FinancialConnectionsInstitution
import com.stripe.android.financialconnections.model.PartnerAccount
import com.stripe.android.financialconnections.presentation.Async
import com.stripe.android.financialconnections.presentation.Async.Fail
Expand Down Expand Up @@ -154,7 +157,7 @@ private fun AccountPickerLoaded(
state = state,
onAccountClicked = onAccountClicked
)
} ?: run { loadingContent() }
} ?: run { loadingContent(state.institution()) }
},
footer = {
payload()
Expand All @@ -179,6 +182,12 @@ private fun LazyListScope.loadedContent(
state: AccountPickerState,
onAccountClicked: (PartnerAccount) -> Unit
) {
item {
InstitutionIcon(
institutionIcon = state.institution()?.icon?.default,
modifier = Modifier.padding(top = 16.dp),
)
}
item {
Text(
modifier = Modifier.fillMaxWidth(),
Expand All @@ -201,7 +210,13 @@ private fun LazyListScope.loadedContent(
}
}

private fun LazyListScope.loadingContent() {
private fun LazyListScope.loadingContent(institution: FinancialConnectionsInstitution?) {
item {
InstitutionIcon(
institutionIcon = institution?.icon?.default,
modifier = Modifier.padding(top = 16.dp),
)
}
item {
Text(
modifier = Modifier.fillMaxWidth(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import com.stripe.android.financialconnections.features.common.isDataFlow
import com.stripe.android.financialconnections.features.notice.NoticeSheetState.NoticeSheetContent.DataAccess
import com.stripe.android.financialconnections.features.notice.PresentNoticeSheet
import com.stripe.android.financialconnections.model.DataAccessNotice
import com.stripe.android.financialconnections.model.FinancialConnectionsInstitution
import com.stripe.android.financialconnections.model.FinancialConnectionsSessionManifest.Pane
import com.stripe.android.financialconnections.model.PartnerAccount
import com.stripe.android.financialconnections.model.PartnerAccountsList
Expand Down Expand Up @@ -71,6 +72,7 @@ internal class AccountPickerViewModel @AssistedInject constructor(
init {
logErrors()
onPayloadLoaded()
loadInstitution()
loadAccounts()
}

Expand All @@ -82,6 +84,16 @@ internal class AccountPickerViewModel @AssistedInject constructor(
)
}

private fun loadInstitution() {
suspend {
val sync = getOrFetchSync()
val manifest = sync.manifest
requireNotNull(manifest.activeInstitution)
}.execute {
copy(institution = it)
}
}

private fun loadAccounts() {
suspend {
val state = stateFlow.value
Expand Down Expand Up @@ -370,6 +382,7 @@ internal class AccountPickerViewModel @AssistedInject constructor(
}

internal data class AccountPickerState(
val institution: Async<FinancialConnectionsInstitution> = Uninitialized,
val payload: Async<Payload> = Uninitialized,
val canRetry: Boolean = true,
val selectAccounts: Async<PartnerAccountsList> = Uninitialized,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,12 @@ import com.stripe.android.financialconnections.ui.theme.FinancialConnectionsThem
import com.stripe.android.uicore.image.StripeImage

@Composable
internal fun InstitutionIcon(institutionIcon: String?) {
internal fun InstitutionIcon(
institutionIcon: String?,
modifier: Modifier = Modifier,
) {
val previewMode = LocalInspectionMode.current
val iconModifier = Modifier
val iconModifier = modifier
.size(56.dp)
.shadow(1.dp, RoundedCornerShape(12.dp), clip = true)
when {
Expand Down
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 75c945d

Please sign in to comment.