diff --git a/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt b/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt
index 8c05bbd7b2..49f217bf18 100644
--- a/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt
+++ b/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt
@@ -9,6 +9,7 @@ import com.tangem.feature.stories.api.StoriesComponent
import com.tangem.feature.usedesk.api.UsedeskComponent
import com.tangem.feature.walletsettings.component.WalletSettingsComponent
import com.tangem.features.account.AccountCreateEditComponent
+import com.tangem.features.account.AccountDetailsComponent
import com.tangem.features.createwalletselection.CreateWalletSelectionComponent
import com.tangem.features.details.component.DetailsComponent
import com.tangem.features.disclaimer.api.components.DisclaimerComponent
@@ -88,6 +89,7 @@ internal class ChildFactory @Inject constructor(
private val sendComponentFactoryV2: SendComponent.Factory,
private val redesignedWalletConnectComponentFactory: WalletConnectEntryComponent.Factory,
private val accountCreateEditComponentFactory: AccountCreateEditComponent.Factory,
+ private val accountDetailsComponentFactory: AccountDetailsComponent.Factory,
private val nftComponentFactory: NFTComponent.Factory,
private val nftSendComponentFactory: NFTSendComponent.Factory,
private val usedeskComponentFactory: UsedeskComponent.Factory,
@@ -528,6 +530,15 @@ internal class ChildFactory @Inject constructor(
componentFactory = accountCreateEditComponentFactory,
)
}
+ is AppRoute.AccountDetails -> {
+ createComponentChild(
+ context = context,
+ params = AccountDetailsComponent.Params(
+ account = route.account,
+ ),
+ componentFactory = accountDetailsComponentFactory,
+ )
+ }
}
}
}
\ No newline at end of file
diff --git a/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt b/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt
index 304f1cb956..e0d6d80408 100644
--- a/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt
+++ b/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt
@@ -336,4 +336,9 @@ sealed class AppRoute(val path: String) : Route {
data class EditAccount(
val account: Account,
) : AppRoute(path = "/edit_account/${account.accountId.value}")
+
+ @Serializable
+ data class AccountDetails(
+ val account: Account,
+ ) : AppRoute(path = "/account_details/${account.accountId.value}")
}
\ No newline at end of file
diff --git a/core/ui/src/main/res/drawable/ic_archive_24.xml b/core/ui/src/main/res/drawable/ic_archive_24.xml
new file mode 100644
index 0000000000..919033523a
--- /dev/null
+++ b/core/ui/src/main/res/drawable/ic_archive_24.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/features/account/api/src/main/java/com/tangem/features/account/AccountDetailsComponent.kt b/features/account/api/src/main/java/com/tangem/features/account/AccountDetailsComponent.kt
new file mode 100644
index 0000000000..d1c47280ea
--- /dev/null
+++ b/features/account/api/src/main/java/com/tangem/features/account/AccountDetailsComponent.kt
@@ -0,0 +1,11 @@
+package com.tangem.features.account
+
+import com.tangem.core.decompose.factory.ComponentFactory
+import com.tangem.core.ui.decompose.ComposableContentComponent
+import com.tangem.domain.models.account.Account
+
+interface AccountDetailsComponent : ComposableContentComponent {
+ interface Factory : ComponentFactory
+
+ data class Params(val account: Account)
+}
\ No newline at end of file
diff --git a/features/account/impl/src/main/java/com/tangem/features/account/common/UM.kt b/features/account/impl/src/main/java/com/tangem/features/account/common/UM.kt
new file mode 100644
index 0000000000..299fb679dc
--- /dev/null
+++ b/features/account/impl/src/main/java/com/tangem/features/account/common/UM.kt
@@ -0,0 +1,18 @@
+package com.tangem.features.account.common
+
+import com.tangem.domain.models.account.CryptoPortfolioIcon
+import com.tangem.domain.models.account.CryptoPortfolioIcon.Color
+import com.tangem.domain.models.account.CryptoPortfolioIcon.Icon
+
+data class CryptoPortfolioIconUM(
+ val value: Icon,
+ val color: Color,
+) {
+ constructor(domainModel: CryptoPortfolioIcon) : this(
+ value = domainModel.value,
+ color = domainModel.color,
+ )
+}
+
+fun CryptoPortfolioIcon.toUM() = CryptoPortfolioIconUM(this)
+fun CryptoPortfolioIconUM.toDomain() = CryptoPortfolioIcon.ofCustomAccount(this.value, this.color)
\ No newline at end of file
diff --git a/features/account/impl/src/main/java/com/tangem/features/account/createedit/AccountCreateEditModel.kt b/features/account/impl/src/main/java/com/tangem/features/account/createedit/AccountCreateEditModel.kt
index ebd9dd3337..b4763b9c92 100644
--- a/features/account/impl/src/main/java/com/tangem/features/account/createedit/AccountCreateEditModel.kt
+++ b/features/account/impl/src/main/java/com/tangem/features/account/createedit/AccountCreateEditModel.kt
@@ -15,6 +15,7 @@ import com.tangem.domain.models.account.AccountName
import com.tangem.domain.models.account.CryptoPortfolioIcon
import com.tangem.domain.models.account.DerivationIndex
import com.tangem.features.account.AccountCreateEditComponent
+import com.tangem.features.account.common.toDomain
import com.tangem.features.account.createedit.entity.AccountCreateEditUM
import com.tangem.features.account.createedit.entity.AccountCreateEditUMBuilder
import com.tangem.features.account.createedit.entity.AccountCreateEditUMBuilder.Companion.portfolioIcon
@@ -74,7 +75,7 @@ internal class AccountCreateEditModel @Inject constructor(
private suspend fun createNewCryptoPortfolio(params: AccountCreateEditComponent.Params.Create) {
val state = uiState.value
val name = AccountName(state.account.name).getOrNull() ?: return
- val icon = state.account.portfolioIcon
+ val icon = state.account.portfolioIcon.toDomain()
addCryptoPortfolioUseCase(
userWalletId = params.userWalletId,
accountName = name,
@@ -86,7 +87,7 @@ internal class AccountCreateEditModel @Inject constructor(
private suspend fun editCryptoPortfolio(params: AccountCreateEditComponent.Params.Edit) {
val state = uiState.value
val name = AccountName(state.account.name).getOrNull() ?: return
- val icon = state.account.portfolioIcon
+ val icon = state.account.portfolioIcon.toDomain()
val isNewName = name != params.account.name
val isNewIcon = icon != params.account.portfolioIcon
updateCryptoPortfolioUseCase(
diff --git a/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUM.kt b/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUM.kt
index 2c7fd2d0f0..4b133a4d97 100644
--- a/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUM.kt
+++ b/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUM.kt
@@ -2,6 +2,7 @@ package com.tangem.features.account.createedit.entity
import com.tangem.core.ui.extensions.TextReference
import com.tangem.domain.models.account.CryptoPortfolioIcon
+import com.tangem.features.account.common.CryptoPortfolioIconUM
import kotlinx.collections.immutable.ImmutableList
data class AccountCreateEditUM(
@@ -15,7 +16,7 @@ data class AccountCreateEditUM(
data class Account(
val name: String,
- val portfolioIcon: CryptoPortfolioIcon,
+ val portfolioIcon: CryptoPortfolioIconUM,
val derivationInfo: TextReference,
val inputPlaceholder: TextReference,
val onNameChange: (String) -> Unit,
diff --git a/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUMBuilder.kt b/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUMBuilder.kt
index 75f31f86ac..41f12322bb 100644
--- a/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUMBuilder.kt
+++ b/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUMBuilder.kt
@@ -6,6 +6,7 @@ import com.tangem.core.ui.extensions.resourceReference
import com.tangem.domain.models.account.Account
import com.tangem.domain.models.account.CryptoPortfolioIcon
import com.tangem.features.account.AccountCreateEditComponent
+import com.tangem.features.account.common.toUM
import kotlinx.collections.immutable.toImmutableList
import javax.inject.Inject
@@ -15,7 +16,7 @@ internal class AccountCreateEditUMBuilder @Inject constructor(
private val accountColors = CryptoPortfolioIcon.Color.entries.toImmutableList()
private val accountIcons = CryptoPortfolioIcon.Icon.entries.toImmutableList()
- private val createIcon = CryptoPortfolioIcon.ofDefaultCustomAccount()
+ private val createIcon = CryptoPortfolioIcon.ofDefaultCustomAccount().toUM()
val toolbarTitle: TextReference
get() = when (params) {
@@ -34,7 +35,7 @@ internal class AccountCreateEditUMBuilder @Inject constructor(
)
is AccountCreateEditComponent.Params.Edit -> AccountCreateEditUM.Account(
name = params.account.name.value,
- portfolioIcon = params.account.portfolioIcon,
+ portfolioIcon = params.account.portfolioIcon.toUM(),
derivationInfo = TextReference.EMPTY, // todo account use Account.CryptoPortfolio.derivationIndex ?
inputPlaceholder = resourceReference(R.string.account_form_placeholder_edit_account),
onNameChange = onNameChange,
@@ -86,8 +87,7 @@ internal class AccountCreateEditUMBuilder @Inject constructor(
}
fun AccountCreateEditUM.updateColorSelect(color: CryptoPortfolioIcon.Color): AccountCreateEditUM {
- val newIcon = CryptoPortfolioIcon.ofCustomAccount(
- value = account.portfolioIcon.value,
+ val newIcon = this.account.portfolioIcon.copy(
color = color,
)
return this.copy(
@@ -97,9 +97,8 @@ internal class AccountCreateEditUMBuilder @Inject constructor(
}
fun AccountCreateEditUM.updateIconSelect(icon: CryptoPortfolioIcon.Icon): AccountCreateEditUM {
- val newIcon = CryptoPortfolioIcon.ofCustomAccount(
+ val newIcon = this.account.portfolioIcon.copy(
value = icon,
- color = account.portfolioIcon.color,
)
return this.copy(
account = this.account.copy(portfolioIcon = newIcon),
diff --git a/features/account/impl/src/main/java/com/tangem/features/account/createedit/ui/AccountCreateEditContent.kt b/features/account/impl/src/main/java/com/tangem/features/account/createedit/ui/AccountCreateEditContent.kt
index 725964567d..2f98a553bc 100644
--- a/features/account/impl/src/main/java/com/tangem/features/account/createedit/ui/AccountCreateEditContent.kt
+++ b/features/account/impl/src/main/java/com/tangem/features/account/createedit/ui/AccountCreateEditContent.kt
@@ -39,6 +39,7 @@ import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.domain.models.account.CryptoPortfolioIcon
+import com.tangem.features.account.common.toUM
import com.tangem.features.account.createedit.entity.AccountCreateEditUM
import com.tangem.features.account.createedit.entity.AccountCreateEditUM.Account
import kotlinx.collections.immutable.toImmutableList
@@ -298,7 +299,7 @@ private class PreviewStateProvider : CollectionPreviewParameterProvider()
+
+ val uiState: StateFlow get() = _uiState
+ private val _uiState: MutableStateFlow = MutableStateFlow(getInitialState())
+
+ private fun onEditAccountClick() {
+ router.push(AppRoute.EditAccount(params.account))
+ }
+
+ private fun onManageTokensClick() {
+ // todo account add account param
+ router.push(AppRoute.ManageTokens(source = AppRoute.ManageTokens.Source.SETTINGS))
+ }
+
+ private fun onArchiveAccountClick() {
+ confirmArchiveDialog()
+ }
+
+ private fun confirmArchiveDialog() {
+ val secondAction = EventMessageAction(
+ title = resourceReference(R.string.common_cancel),
+ onClick = {},
+ )
+ val firstAction = EventMessageAction(
+ title = resourceReference(R.string.account_details_archive_action),
+ warning = true,
+ onClick = ::archiveCryptoPortfolio,
+ )
+ messageSender.send(
+ DialogMessage(
+ title = resourceReference(R.string.account_details_archive),
+ message = resourceReference(R.string.account_details_archive_description),
+ firstActionBuilder = { firstAction },
+ secondActionBuilder = { secondAction },
+ ),
+ )
+ }
+
+ private fun archiveCryptoPortfolio() = modelScope.launch {
+ archiveCryptoPortfolioUseCase(params.account.accountId)
+ }
+
+ private fun getInitialState(): AccountDetailsUM {
+ return AccountDetailsUM(
+ accountName = params.account.name.value,
+ accountIcon = params.account.portfolioIcon.toUM(),
+ onCloseClick = { router.pop() },
+ onAccountEditClick = ::onEditAccountClick,
+ onManageTokensClick = ::onManageTokensClick,
+ onArchiveAccountClick = ::onArchiveAccountClick,
+ )
+ }
+}
\ No newline at end of file
diff --git a/features/account/impl/src/main/java/com/tangem/features/account/details/DefaultAccountDetailsComponent.kt b/features/account/impl/src/main/java/com/tangem/features/account/details/DefaultAccountDetailsComponent.kt
new file mode 100644
index 0000000000..5051ca3134
--- /dev/null
+++ b/features/account/impl/src/main/java/com/tangem/features/account/details/DefaultAccountDetailsComponent.kt
@@ -0,0 +1,40 @@
+package com.tangem.features.account.details
+
+import androidx.activity.compose.BackHandler
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.ui.Modifier
+import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import com.tangem.core.decompose.context.AppComponentContext
+import com.tangem.core.decompose.model.getOrCreateModel
+import com.tangem.features.account.AccountDetailsComponent
+import com.tangem.features.account.details.ui.AccountDetailsContent
+import dagger.assisted.Assisted
+import dagger.assisted.AssistedFactory
+import dagger.assisted.AssistedInject
+
+internal class DefaultAccountDetailsComponent @AssistedInject constructor(
+ @Assisted appComponentContext: AppComponentContext,
+ @Assisted params: AccountDetailsComponent.Params,
+) : AppComponentContext by appComponentContext, AccountDetailsComponent {
+
+ private val model: AccountDetailsModel = getOrCreateModel(params)
+
+ @Composable
+ override fun Content(modifier: Modifier) {
+ val state by model.uiState.collectAsStateWithLifecycle()
+ AccountDetailsContent(
+ modifier = modifier,
+ state = state,
+ )
+ BackHandler(onBack = state.onCloseClick)
+ }
+
+ @AssistedFactory
+ interface Factory : AccountDetailsComponent.Factory {
+ override fun create(
+ context: AppComponentContext,
+ params: AccountDetailsComponent.Params,
+ ): DefaultAccountDetailsComponent
+ }
+}
\ No newline at end of file
diff --git a/features/account/impl/src/main/java/com/tangem/features/account/details/di/AccountDetailsModule.kt b/features/account/impl/src/main/java/com/tangem/features/account/details/di/AccountDetailsModule.kt
new file mode 100644
index 0000000000..fdc4feda8a
--- /dev/null
+++ b/features/account/impl/src/main/java/com/tangem/features/account/details/di/AccountDetailsModule.kt
@@ -0,0 +1,27 @@
+package com.tangem.features.account.details.di
+
+import com.tangem.core.decompose.model.Model
+import com.tangem.features.account.AccountDetailsComponent
+import com.tangem.features.account.details.AccountDetailsModel
+import com.tangem.features.account.details.DefaultAccountDetailsComponent
+import dagger.Binds
+import dagger.Module
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import dagger.multibindings.ClassKey
+import dagger.multibindings.IntoMap
+
+@Module
+@InstallIn(SingletonComponent::class)
+internal interface AccountDetailsModule {
+
+ @Binds
+ fun bindAccountDetailsComponentFactory(
+ impl: DefaultAccountDetailsComponent.Factory,
+ ): AccountDetailsComponent.Factory
+
+ @Binds
+ @IntoMap
+ @ClassKey(AccountDetailsModel::class)
+ fun bindAccountDetailsModel(model: AccountDetailsModel): Model
+}
\ No newline at end of file
diff --git a/features/account/impl/src/main/java/com/tangem/features/account/details/entity/AccountDetailsUM.kt b/features/account/impl/src/main/java/com/tangem/features/account/details/entity/AccountDetailsUM.kt
new file mode 100644
index 0000000000..7b2bc9b44d
--- /dev/null
+++ b/features/account/impl/src/main/java/com/tangem/features/account/details/entity/AccountDetailsUM.kt
@@ -0,0 +1,12 @@
+package com.tangem.features.account.details.entity
+
+import com.tangem.features.account.common.CryptoPortfolioIconUM
+
+data class AccountDetailsUM(
+ val accountName: String,
+ val accountIcon: CryptoPortfolioIconUM,
+ val onCloseClick: () -> Unit,
+ val onAccountEditClick: () -> Unit,
+ val onManageTokensClick: () -> Unit,
+ val onArchiveAccountClick: () -> Unit,
+)
\ No newline at end of file
diff --git a/features/account/impl/src/main/java/com/tangem/features/account/details/ui/AccountDetailsContent.kt b/features/account/impl/src/main/java/com/tangem/features/account/details/ui/AccountDetailsContent.kt
new file mode 100644
index 0000000000..6234a1001b
--- /dev/null
+++ b/features/account/impl/src/main/java/com/tangem/features/account/details/ui/AccountDetailsContent.kt
@@ -0,0 +1,236 @@
+package com.tangem.features.account.details.ui
+
+import android.content.res.Configuration
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.Icon
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.res.vectorResource
+import androidx.compose.ui.text.style.TextOverflow
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.tooling.preview.PreviewParameter
+import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider
+import androidx.compose.ui.unit.dp
+import com.tangem.common.ui.R
+import com.tangem.common.ui.account.getResId
+import com.tangem.common.ui.account.getUiColor
+import com.tangem.core.ui.components.SpacerH
+import com.tangem.core.ui.components.SpacerH16
+import com.tangem.core.ui.components.appbar.AppBarWithBackButton
+import com.tangem.core.ui.components.buttons.SecondarySmallButton
+import com.tangem.core.ui.components.buttons.SmallButtonConfig
+import com.tangem.core.ui.components.fields.AutoSizeTextField
+import com.tangem.core.ui.extensions.resourceReference
+import com.tangem.core.ui.extensions.stringResourceSafe
+import com.tangem.core.ui.res.TangemTheme
+import com.tangem.core.ui.res.TangemThemePreview
+import com.tangem.domain.models.account.CryptoPortfolioIcon
+import com.tangem.features.account.common.CryptoPortfolioIconUM
+import com.tangem.features.account.common.toUM
+import com.tangem.features.account.details.entity.AccountDetailsUM
+
+@Composable
+internal fun AccountDetailsContent(state: AccountDetailsUM, modifier: Modifier = Modifier) {
+ Column(
+ modifier = modifier
+ .background(color = TangemTheme.colors.background.secondary)
+ .fillMaxSize()
+ .imePadding()
+ .systemBarsPadding(),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ AppBarWithBackButton(
+ onBackClick = state.onCloseClick,
+ modifier = Modifier.height(TangemTheme.dimens.size56),
+ )
+
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(horizontal = TangemTheme.dimens.spacing16)
+ .weight(1f),
+
+ ) {
+ Text(
+ modifier = Modifier.padding(top = TangemTheme.dimens.spacing12),
+ text = stringResourceSafe(R.string.account_details_title),
+ style = TangemTheme.typography.h1,
+ color = TangemTheme.colors.text.primary1,
+ )
+ SpacerH16()
+ AccountRow(state)
+ SpacerH16()
+ ManageTokensRow(state)
+ SpacerH16()
+ ArchiveAccountRow(state)
+ SpacerH(8.dp)
+ Text(
+ modifier = Modifier.padding(horizontal = 12.dp),
+ text = stringResourceSafe(R.string.account_details_archive_description),
+ style = TangemTheme.typography.caption2,
+ color = TangemTheme.colors.text.tertiary,
+ )
+ }
+ }
+}
+
+@Composable
+private fun ArchiveAccountRow(state: AccountDetailsUM) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clip(RoundedCornerShape(TangemTheme.dimens.radius12))
+ .background(TangemTheme.colors.background.primary)
+ .clickable(onClick = state.onArchiveAccountClick)
+ .padding(all = TangemTheme.dimens.spacing12),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing12),
+ ) {
+ Icon(
+ tint = TangemTheme.colors.icon.warning,
+ imageVector = ImageVector.vectorResource(id = R.drawable.ic_archive_24),
+ contentDescription = null,
+ )
+ Text(
+ text = stringResourceSafe(R.string.account_details_archive),
+ color = TangemTheme.colors.text.warning,
+ style = TangemTheme.typography.subtitle1,
+ )
+ }
+}
+
+@Composable
+private fun ManageTokensRow(state: AccountDetailsUM) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clip(RoundedCornerShape(TangemTheme.dimens.radius12))
+ .background(TangemTheme.colors.background.primary)
+ .clickable(onClick = state.onManageTokensClick)
+ .padding(all = TangemTheme.dimens.spacing12),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing12),
+ ) {
+ Icon(
+ imageVector = ImageVector.vectorResource(id = R.drawable.ic_group_24),
+ tint = TangemTheme.colors.icon.secondary,
+ contentDescription = null,
+ )
+ Text(
+ text = stringResourceSafe(R.string.main_manage_tokens),
+ color = TangemTheme.colors.text.primary1,
+ style = TangemTheme.typography.subtitle1,
+ maxLines = 1,
+ overflow = TextOverflow.Ellipsis,
+ )
+ }
+}
+
+@Composable
+private fun AccountRow(state: AccountDetailsUM) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clip(RoundedCornerShape(TangemTheme.dimens.radius12))
+ .background(TangemTheme.colors.background.primary)
+ .clickable(onClick = state.onAccountEditClick)
+ .padding(all = TangemTheme.dimens.spacing12),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing12),
+ ) {
+ AccountIcon(
+ modifier = Modifier
+ .size(36.dp)
+ .clip(RoundedCornerShape(9.dp)),
+ accountName = state.accountName,
+ accountIcon = state.accountIcon,
+ )
+ Column(
+ modifier = Modifier
+ .weight(1f),
+ verticalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing2),
+ ) {
+ Text(
+ text = stringResourceSafe(R.string.account_form_name),
+ color = TangemTheme.colors.text.tertiary,
+ style = TangemTheme.typography.caption2,
+ )
+ AutoSizeTextField(
+ textStyle = TangemTheme.typography.subtitle2,
+ color = TangemTheme.colors.text.primary1,
+ value = state.accountName,
+ singleLine = true,
+ readOnly = true,
+ onValueChange = {},
+ )
+ }
+
+ SecondarySmallButton(
+ config = SmallButtonConfig(
+ text = resourceReference(R.string.common_edit),
+ onClick = state.onAccountEditClick,
+ ),
+ )
+ }
+}
+
+// todo account make reusable
+@Composable
+private fun AccountIcon(accountName: String, accountIcon: CryptoPortfolioIconUM, modifier: Modifier = Modifier) {
+ Box(
+ contentAlignment = Alignment.Center,
+ modifier = modifier.background(accountIcon.color.getUiColor()),
+ ) {
+ val icon = accountIcon.value
+ val letter = accountName.first()
+ when {
+ icon == CryptoPortfolioIcon.Icon.Letter -> Text(
+ text = letter.uppercase(),
+ style = TangemTheme.typography.body2,
+ color = TangemTheme.colors.text.constantWhite,
+ )
+ else -> Icon(
+ modifier = Modifier.size(20.dp),
+ tint = TangemTheme.colors.text.constantWhite,
+ imageVector = ImageVector.vectorResource(id = icon.getResId()),
+ contentDescription = null,
+ )
+ }
+ }
+}
+
+@Preview(showBackground = true, widthDp = 360)
+@Preview(showBackground = true, widthDp = 360, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun WcConnectionsContentPreview(@PreviewParameter(PreviewStateProvider::class) params: AccountDetailsUM) {
+ TangemThemePreview {
+ AccountDetailsContent(state = params)
+ }
+}
+
+private class PreviewStateProvider : CollectionPreviewParameterProvider(
+ buildList {
+ var portfolioIcon = CryptoPortfolioIcon.ofDefaultCustomAccount().toUM()
+ val first = AccountDetailsUM(
+ onCloseClick = {},
+ onAccountEditClick = {},
+ onManageTokensClick = {},
+ onArchiveAccountClick = {},
+ accountName = "Main",
+ accountIcon = portfolioIcon,
+ )
+ add(first)
+ portfolioIcon = portfolioIcon.copy(
+ value = CryptoPortfolioIcon.Icon.Letter,
+ color = CryptoPortfolioIcon.Color.entries.random(),
+ )
+ add(first.copy(accountIcon = portfolioIcon))
+ },
+)
\ No newline at end of file