diff --git a/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsBlock.kt b/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsBlock.kt index 92a791ad8a..58cc324958 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsBlock.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsBlock.kt @@ -43,8 +43,6 @@ fun NavigationButtonsBlock(buttonState: NavigationButtonsState, modifier: Modifi PreviousButton(state?.prevButton) PrimaryButton(state?.primaryButton, modifier = Modifier.weight(1f)) } - - SecondaryButton(state?.secondaryButton) } } @@ -79,35 +77,6 @@ private fun PrimaryButton(primaryButton: NavigationButton?, modifier: Modifier = } } -@Composable -private fun SecondaryButton(secondaryButton: NavigationButton?) { - val wrappedButton by rememberNavigationButton(secondaryButton) - AnimatedContent( - targetState = wrappedButton, - transitionSpec = { navigationButtonsTransition() }, - contentAlignment = Alignment.Center, - label = "Animate show secondary button", - modifier = Modifier.fillMaxWidth(), - ) { button -> - if (button != null && button.textReference != TextReference.EMPTY) { - val icon = button.iconRes?.let { TangemButtonIconPosition.End(iconResId = it) } - ?: TangemButtonIconPosition.None - - TangemButton( - text = button.textReference.resolveReference(), - enabled = button.isEnabled, - onClick = button.onClick, - icon = icon, - showProgress = button.showProgress, - colors = TangemButtonsDefaults.secondaryButtonColors, - modifier = Modifier.padding(top = TangemTheme.dimens.spacing12), - ) - } else { - Spacer(modifier = Modifier.fillMaxWidth()) - } - } -} - @Composable private fun PreviousButton(prevButton: NavigationButton?) { AnimatedVisibility( diff --git a/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsState.kt b/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsState.kt index c125a871d1..e9a1fd8a83 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsState.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsState.kt @@ -10,7 +10,6 @@ sealed class NavigationButtonsState { data class Data( val primaryButton: NavigationButton, val prevButton: NavigationButton?, - val secondaryButton: NavigationButton?, val extraButtons: ImmutableList, val txUrl: String? = null, ) : NavigationButtonsState() diff --git a/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/preview/NavigationButtonsPreview.kt b/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/preview/NavigationButtonsPreview.kt index 738598de82..b98e5de371 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/preview/NavigationButtonsPreview.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/preview/NavigationButtonsPreview.kt @@ -30,14 +30,6 @@ internal object NavigationButtonsPreview { ), ) - private val next = NavigationButton( - textReference = resourceReference(R.string.common_next), - isSecondary = false, - isIconVisible = false, - showProgress = false, - isEnabled = true, - onClick = {}, - ) private val prev = NavigationButton( textReference = TextReference.EMPTY, iconRes = R.drawable.ic_back_24, @@ -60,7 +52,6 @@ internal object NavigationButtonsPreview { val allButtons = NavigationButtonsState.Data( primaryButton = finished, prevButton = prev, - secondaryButton = next, extraButtons = extraButtons, txUrl = "https://tangem.com", ) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 81ebcec61e..54492f5825 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -104,7 +104,6 @@ Erkunden Transaktionsverlauf einsehen Explorer - Gebühr Netzwerkgebühren sind Gebühren, die Nutzer für die Verarbeitung und Bestätigung von Transaktionen zahlen. Die Höhe der Gebühren kann von der Überlastung des Netzes, der Größe der Transaktion und der Ausführungspriorität abhängen. %s Schnell Markt @@ -114,6 +113,10 @@ Zum Anbieter gehen Zum Token Importieren + + in %d Tag + in %d Tagen + Später Gesperrt Hauptnetz @@ -169,7 +172,9 @@ Vertragsadresse Vertragsadresse ist ungültig Bitte wähle das Netzwerk - Dezimalzahl muss eine gültige Ganzzahl sein, bis zu %li + Dieses Token wurde bereits zur Liste hinzugefügt + Token existiert bereits + Dezimalzahl muss eine gültige Ganzzahl sein, bis zu %d Benutzerdefinierte Ableitung(derivation) E. g. m/00\'/0000\'/0\'/0/0 Benutzerdefinierte Ableitung (Derivation) eingeben @@ -339,12 +344,14 @@ Um mit dem Kauf, Tausch oder Erhalt dieses Vermögenswerts zu beginnen, füge diesen Token zu mindestens 1 Netzwerk hinzu Dieses Asset ist nicht verfügbar Zum Portfolio hinzufügen - Token hinzufügen + Hinzufügen Verfügbare Netzwerke Mein Portfolio Markt Um Adressen für ausgewählte Netzwerke zu generieren, musst du eine Tangem-Karte scannen + Die Daten dieses Abschnitts stammen aus den folgenden Netzwerken: %s Die Daten konnten nicht geladen werden... + Keine Daten Schnelle Aktionen Ergebnis Token unter 100k Marktkapitalisierung anzeigen @@ -370,7 +377,7 @@ Bewertung, basierend auf %d Bewertungen, basierend auf %d - Blockchain-Site + Webseite Kaufdruck Die Differenz zwischen Käufer- und Verkäufervolumen Umlaufmenge @@ -466,7 +473,7 @@ Seed-Phrase verwenden Ungültige Seed-Phrase. Bitte überprüfe die Wortreihenfolge. Ungültige Seed-Phrase. Bitte überprüfe die Rechtschreibung. - veralteter Standard + Veralteter Standard Um zu überprüfen, ob du deine Seed-Phrase richtig aufgeschrieben hast, gib bitte das 2., 7. und 11 Wort ein. Eine letzte Prüfung! Um den Sicherungsvorgang zu starten, füge bis zu zwei Sicherungskarten hinzu. @@ -572,18 +579,11 @@ Die Gebühr, die für die Nutzung jeder nicht ausgegebenen Transaktionsausgabe (UTXO) im Kaspa-Netzwerk erforderlich ist. Je mehr UTXOs du in einer Transaktion verwenden, desto höher ist die Gebühr. KAS per UTXO %1$s, %2$s - Adresse Ziel-Tag Adresse eingeben Die Adresse stimmt mit der Adresse Ihrer Brieftasche überein - Ungültiges Tag. Es wird der Transaktion nicht hinzugefügt. Ungültiges Memo. Sie wird der Transaktion nicht hinzugefügt. - Tag Memo - inkl. Gebühr - Niedrig - Normal - Priorität Überprüfe deine Netzwerkverbindung Informationen zur Netzwerkgebühr nicht erreichbar Von @@ -598,7 +598,7 @@ Abdeckung der Netzgebühren Unzureichende Mittel für die Überweisung, da die Summe aus Gebühr und Überweisungsbetrag das bestehende Guthaben übersteigt Gesamtbetrag übersteigt den Saldo - Das Konto wird von der Blockchain gelöscht, wenn der Kontostand unter die Mindesteinlage fällt. Bitte belasse %s auf deinem Konto. + Ein Guthaben von mindestens %s ist erforderlich, um dein Konto in der Blockchain aktiv zu halten und Sicherheitsrisiken zu vermeiden. Dieser Betrag verbleibt auf deinem Guthaben und kann nicht abgehoben werden. Mindesteinlage Der Kommissionsbetrag ist %s mal der empfohlene Betrag. Stelle sicher, dass die benutzerdefinierten Einstellungen korrekt sind. Die individuelle Gebühr ist hoch @@ -632,21 +632,15 @@ Versende %s Du sendest **%1$s** inklusive der Netzwerkgebühr %2$s Du sendest **%1$s** und %2$s - Senden %s - Gesamt - %1$s und %2$s werden gesendet - ≈ %1$s (inkl. Gebühr: %2$s) - %s wird gesendet Die Transaktion wurde erfolgreich signiert und an den Blockchain-Knoten gesendet. Die Walletbilanz wird aktualisiert %1$s ist ein Vermögenswert im Tron-Netzwerk. Um die Gebühr zu berechnen und eine Transaktion durchzuführen, musst du etwas Tron (TRX) auf deinem Konto einzahlen. - Ungültige Adresse Transaktion gesendet Bereite das Scannen der Karte vor, die du einrichten möchtest. Entferne diese Wallet Hiermit wird die Wallet aus der Anwendung entfernt. Die Wallet selbst kann wieder hinzugefügt werden. Name Aktiv - Um deine Kryptos zu unstaken, klick hier. + Um deine Vermögenswerte freizugeben, tippe auf den Block oben Die Anzahl der zu stakenden Krypros muss mindesten %s betragen Nicht gestakte beanspruche Jährliche prozentuale Rendite @@ -659,12 +653,12 @@ Marktbewertung Metriken Mindestanforderungen - Keine Belohnungen zu beanspruchen. + Keine Belohnungen Belohnungen beanspruchen Eine Möglichkeit, Staking-Belohnungen zu erhalten. Es kann automatisch oder manuell beansprucht werden. Belohnungszeitplan Dabei handelt es sich um einen Zeitplan, der festlegt, wann die Teilnehmer am Staking ihre Belohnungen erhalten. - Belohnungen, die du beanspruchen kannst: %s + Belohnungen %s Staking %s Entbindungsdauer Der Zeitraum, den du nach der Beantragung der Abhebung von Geldern aus dem Staking warten musst, bevor die Token verfügbar werden. @@ -678,6 +672,7 @@ Mit dem Staking kannst Du %1$s verdienen. Deine Staking-Belohnungen erhältst Du jede Woche. Verdiene Staking-Belohnungen Die Belohnungen werden sofort nach dem unstaken gestoppt. Der unstakingprozess dauert %s. + Bereit zum Abheben Erneut binden Erneut staken Belohnungen erneut staken @@ -698,6 +693,7 @@ Mehr staken Stake %s Staking beenden%s + Lösen der Bindungen Gelocktes unlocken Unstaken Prüfe, was nicht eingesetzt wurde, um dein Vermögen zu beanspruchen @@ -862,7 +858,7 @@ Um eine Transaktion durchzuführen, du etwas etwas einzahlen %1$s %2$s Die Gebühr %s kann nicht gedeckt werden Der zu erhaltende Betrag muss mindestens %s betragen - Dies kann passieren, weil der Anbieter derzeit nicht in der Lage ist, dein ausgewähltes Paar zu swappen. Bitte warte einen Moment und versuche es später erneut. (Code %@) + Dies kann passieren, weil der Anbieter derzeit nicht in der Lage ist, dein ausgewähltes Paar zu swappen. Bitte warte einen Moment und versuche es später erneut. (Code %s) Ausgewähltes Paar vorübergehend nicht verfügbar Service vorübergehend nicht verfügbar Die Menge der zu tauschenden Token darf folgende Werte nicht überschreiten %s diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 581c5d1af7..188ec9511e 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -101,7 +101,6 @@ Explorez Explorez l\'historique des transactions Explorateur - Commissions Les frais de réseau sont des charges que les utilisateurs paient pour traiter et confirmer les transactions. Le montant des frais peut être affecté par la congestion du réseau, la taille de la transaction et la priorité d\'exécution. %s Rapide Marché @@ -164,7 +163,7 @@ Adresse du contrat L\'adresse du contrat n\'est pas valide Veuillez sélectionner le réseau - Les décimales doivent être un entier valide, jusqu\'à %li + Les décimales doivent être un entier valide, jusqu\'à %d Dérivation personnalisée Par exemple m/00\'/0000\'/0\'/0/0 Entrez une dérivation personnalisée @@ -508,18 +507,11 @@ Les frais requis pour l\'utilisation de chaque sortie de transaction non dépensée (UTXO) dans le réseau Kaspa. Plus vous utilisez d’UTXO dans une transaction, plus les frais seront élevés. KAS pour UTXO %1$s, %2$s - Adresse ID de destination Entrez l\'adresse L\'adresse est la même que celle de votre portefeuille - Tag invalide. Il ne sera pas ajouté à la transaction. Mémo invalide. Il ne sera pas ajouté à la transaction. - Tag Memo - Inclure les commissions - Bas - Normal - Priorité Vérifiez votre connexion réseau Informations sur les frais de réseau inaccessibles De @@ -534,7 +526,7 @@ Couverture des frais de réseau Fonds insuffisants pour le transfert, car le total des frais et du montant du transfert dépasse le solde existant Le total dépasse le solde - Le compte sera effacé de la blockchain si un solde descend en dessous du dépôt existentiel. Veuillez en laisser %s sur votre solde. + Un solde d\'au moins %s est requis pour conserver votre compte sur la blockchain afin d\'éviter les risques de sécurité. Ce montant restera sur votre solde et ne pourra pas être retiré. Dépôt existentiel Le montant de la commission est %s fois le montant recommandé. Assurez-vous que les paramètres personnalisés sont corrects. Les frais de douane sont élevés @@ -568,21 +560,16 @@ Envoyer %s Vous envoyez **%1$s** incluant des frais de réseau de %2$s Vous envoyez **%1$s** et %2$s - Envoi de %s - Total - Sera envoyé %1$s et %2$s - ≈ %1$s (incl. les commissions : %2$s) - Sera envoyé %s La transaction a été signée avec succès et envoyée au nœud de blockchain. Le solde du portefeuille sera mis à jour après un certain temps %1$s est un actif du réseau Tron. Pour calculer les frais et effectuer une transaction, déposez du Tron (TRX) sur votre compte. - Adresse incorrecte Transaction envoyée Scannez la carte que vous souhaitez configurer. Oublier le portefeuille Cela supprimera le portefeuille de l\'application. Le portefeuille lui-même peut être ajouté à nouveau. Nom Actif - Afin d\'unstaker vos actifs, cliquez ici. + Afin d\'unstaker vos actifs, appuyez sur le bloc ci-dessus + Pourcentage de rendement annuel Le pourcentage de rendement annuel que vous pouvez gagner en participant au staking. APR Disponible @@ -604,6 +591,7 @@ Le temps imparti pour activer la participation au staking. Native staking Gagnez des récompenses de staking + Les récompenses cessent de s\'accumuler immédiatement après que vous ayez commencé le unstaking. Le processus de unstaking prend %s. Récompenses Stake verrouillé Staker plus @@ -761,7 +749,8 @@ Pour effectuer une transaction, vous devez déposer %1$s %2$s Impossible de couvrir %s frais Le montant à recevoir doit être d\'au moins %s - Cela peut se produire car le fournisseur n\'est actuellement pas en mesure d\'échanger la paire que vous avez sélectionnée. Veuillez patienter un instant et réessayer. (Code %@) + Cela peut se produire car le fournisseur n\'est actuellement pas en mesure d\'échanger la paire que vous avez sélectionnée. Veuillez patienter un instant et réessayer. (Code %s) + La paire sélectionnée est temporairement indisponible Service temporairement indisponible Le nombre de jetons à échanger ne doit pas dépasser %s Le montant à échanger doit être d\'au moins %s diff --git a/core/res/src/main/res/values-it/strings.xml b/core/res/src/main/res/values-it/strings.xml index e7caa7829e..900ef94aa5 100644 --- a/core/res/src/main/res/values-it/strings.xml +++ b/core/res/src/main/res/values-it/strings.xml @@ -8,7 +8,6 @@ Rimuovere Fatto Errore - Commissione Costi della rete OK Mantieni le modifiche @@ -35,21 +34,10 @@ Avvicina la carta Crea portafoglio Importo - Indirizzo L\'indirizzo corrisponde all\'indirizzo del tuo portafoglio - Tag Memo - Includi commissione - Insufficiente - Normale - Prioritario Importo totale - Totale - Sarà inviato %1$s e %2$s - ≈ %1$s (inc. commissione: %2$s) - Sarà inviato %s La transazione è stata firmata con successo e inviata al nodo blockchain. Il saldo del portafoglio verrà aggiornato dopo un po\' di tempo - Indirizzo non valido Tangem Twin WalletConnect L\'indirizzo è stato copiato con successo diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index f27b090b8a..025170ee41 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -39,7 +39,7 @@ 試行回数が多すぎます お使いの携帯電話で生体認証が無効になっているため、アプリにウォレットを保存できません。ウォレットを保存するには、携帯電話の設定で生体認証機能を有効にしてください。 バックアップ処理を開始する - 法定通貨カードまたは銀行口座から + 銀行カードまたは銀行口座から %d カード @@ -102,7 +102,6 @@ 移動する 取引履歴を調べる エクスプローラー - 手数料 ネットワーク手数料は、取引の処理と確認のためにユーザーが支払う料金です。手数料の額は、ネットワークの混雑さ、取引のサイズ、実行の優先度によって左右されます。 %s 速い マーケット @@ -112,6 +111,9 @@ プロバイダーへ移動 トークンへ移動 インポート + + %d日で + 後で ロックされています メインネットワーク @@ -167,7 +169,9 @@ コントラクトアドレス コントラクトアドレスが無効です ネットワークを選択してください - 小数は%liまでの有効な整数である必要があります + このトークンはすでにリストに追加されています + トークンはすでに存在します + 小数は%dまでの有効な整数である必要があります カスタム派生パス 例:m/00\'/0000\'/0\'/0/0 カスタム派生パスを入力 @@ -333,15 +337,17 @@ 賛成票を投じる ウォレットを選択 ウォレットは複数のネットワークをサポートしていません。 - このアセットの購入、交換、受け取りを開始するには、このトークンを少なくとも1つのネットワークに追加してください。 + このアセットの購入、交換、受け取りを開始するには、ポートフォリオに追加してください。 このアセットは利用できません ポートフォリオに追加 - トークンを追加 + 追加 利用可能なネットワーク 私のポートフォリオ マーケット 選択したネットワークのアドレスを生成するには、Tangemカードをスキャンする必要があります。 + このセクションのデータは、次のネットワークから取得されています: %s データを読み込めません… + データなし クイックアクション 結果 時価総額10万ドル以下のトークンを見る @@ -366,7 +372,7 @@ %d のレーティングに基づいて - ブロックチェーンサイト + ウェブサイト 買い圧力 買い手と売り手の取引量の差 循環供給量 @@ -447,7 +453,7 @@ あなたのシードフレーズ - %d 単語 + %d 単語 ウォレットをインポートするには、下のフィールドにシードフレーズを入力してください。 シードフレーズを生成する @@ -498,7 +504,7 @@ カメラへのアクセスが拒否されました %3$sネットワーク上の%1$s ( %2$s ) このアドレスには%sのみを送金してください。他のトークンを送信すると、取り返しのつかない損失が発生します。 - QRコードを表示するか、アドレスを共有します + QRコードを表示するか、アドレスを共有してください 参加する 紹介プログラムに関する情報を読み込めませんでした。しばらくしてからもう一度お試しください。 紹介プログラムに関する情報を読み込めませんでした。エラー コード: %s 。しばらくしてからもう一度お試しください。 @@ -560,18 +566,11 @@ Kaspaネットワークで未使用の取引出力(UTXO)を使用するために必要な手数料です。取引で使用するUTXOが多ければ多いほど、手数料は高くなります。 UTXOあたりのKAS %1$s 、 %2$s - アドレス 宛先タグ アドレスを入力 アドレスはウォレットアドレスと同じです - 無効なタグです。取引には追加されません。 無効なメモです。取引には追加されません。 - タグ メモ - 手数料込み - 低い - 普通 - 優先 ネットワーク接続を確認してください ネットワーク手数料についての情報にアクセスできません より @@ -586,7 +585,7 @@ ネットワーク手数料のカバー 手数料と送金額の合計が残高を超えているため、送金に必要な資金が不足しています。 合計が残高を超えています - 残高が最低量を下回ると、当アカウントはブロックチェーンから消去されます。残高に%sを残しておいてください。 + セキュリティリスクを防ぐため、ブロックチェーン上にアカウントを維持するには、少なくとも%s の残高が必要です。この金額は残高に残り、引き出すことはできません。 アカウント維持に必要な最低残高 手数料額が推奨額の%s倍となっています。カスタム設定が正しいことを再度確認してください。 カスタム手数料が高くなっています @@ -620,21 +619,15 @@ %sを送金する **%1$s** を送金する (ネットワーク手数料%2$sを含む) **%1$s** と %2$s を送金しています。 - %sを送信しています - 合計 - %1$sと%2$sが送信されます - ≈ %1$s (%2$s: 手数料を含む) - %sが送信されます 取引は正常に署名され、ブロックチェーンノードに送信されました。ウォレットの残高はしばらくして更新されます。 %1$sはTronネットワークのアセットです。手数料を計算して取引を行うには、アカウントにTron(TRX)を入金する必要があります。 - 無効なアドレス 取引が送信されました セットアップしたいカードをスキャンするために準備してください。 ウォレット削除 これにより、ウォレットがアプリから削除されます。ウォレットは再度追加できます。 名前 アクティブ - 資産のステーキングを解除するには、ここをクリックしてください。 + 資産のステーキングを解除するには、上のブロックをタップしてください ステーキング金額は %s 以上である必要があります ステーキング解除分を請求する 年率 @@ -647,25 +640,27 @@ 市場評価 指標 最低要件 - 請求できる報酬はありません + 報酬なし 請求中の報酬 - ステーキング報酬を受け取る方法。自動または手動で請求できます。 + ステーキング報酬の受け取り方法。\n自動であなたのアドレスに報酬が入金される方法と、手動で取引を生成して報酬を引き出す方法があります。 報酬スケジュール これは、ステーキングの参加者がいつ報酬を受け取るかを決定するスケジュールです。 - 受け取る報酬: %s + 報酬: %s ステーキング%s 解約完了までの期間 ステーキングから資金の引き出しを要求した後、トークンが利用可能になるまでの待機期間。 ウォームアップ期間 ステーキングへの参加を有効にするために割り当てられた時間。 + ロック中 移行 ネイティブステーキング ステーキングにより%1$sを獲得できます。ステーキング報酬は毎日受け取れます。 - ステーキングにより%1$sを獲得できます。ステーキング報酬は1時間ごとに受け取れます。 + ステーキングにより%1$sを獲得できます。ステーキング報酬は毎時間受け取れます。 ステーキングにより%1$sを獲得できます。ステーキング報酬は毎月受け取れます。 ステーキングにより%1$sを獲得できます。ステーキング報酬は毎週受け取れます。 ステーキング報酬を獲得 - ステーキング解除後、報酬の獲得はすぐに停止します。ステーキング解除プロセスには%sかかります。 + ステーキング解除プロセスの開始後、報酬の獲得はすぐに停止します。ステーキング解除には%sかかります。 + 引き出し準備完了 再結束 再度ステーキングする 報酬をステーキングする @@ -686,8 +681,9 @@ もっとステーキングする %sをステーキングする %sのステーキング解除 + ステーキング解約中 ステーキング解除はロックされています - スタックされていない + ステーキングされていない 資産を請求するために、unstakedを確認してください ステーキング解除 バリデーター @@ -842,7 +838,7 @@ ネットワークには最低残高が必要です スワップは、%s の取引完了後に利用可能となります。 アクティブな取引があります - スワップの承認は現在進行中で、まもなく完了する予定です。 + スワップ承認は現在進行中で、まもなく完了する予定です。 承認が進行中 最低のスワップ金額は%1$s です。スワップ後の残金が%2$s を下回らないようにしてください。 あなたのリストには、交換可能な %s トークンがありません。 @@ -850,7 +846,7 @@ 取引を行うには、 %1$s %2$sを入金する必要があります。 %s 手数料を支払えません 受け取る金額は、 %s 以上である必要があります。 - これは、選択したペアがプロバイダーでは現在交換できないために発生する可能性があります。しばらく待ってからもう一度お試しください。(コード%@ ) + これは、選択したペアがプロバイダーでは現在交換できないために発生する可能性があります。しばらく待ってからもう一度お試しください。(コード%s ) 選択されたペアは一時的に利用できません サービスは一時的に利用できません スワップするトークンの量は %s を超えないでください @@ -866,6 +862,8 @@ このカードには%sの署名のみが残っています。資金をすべて引き出す必要があります。 署名数が少ないです 異なるネットワーク上のトークンは、異なるアドレスを持つ場合があります。資金を送金する際には、アドレスがネットワークと一致していることを再確認してください。 + MATICはPOLに移行中です。ただし、期限は設定されておらず、MATICはまだ廃止されていません。MATICトークンを引き続き安全に使用することも、取引所でPOLに交換することもできます。 + MATICからPOLへの移行 %d ネットワークのアドレスを取得するために、カードを利用してください diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 0a7ca9ff35..50e75be7a4 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -71,6 +71,7 @@ Доступ запрещен Все Разрешить + Аналитика Применить Одобрение Подтвердить @@ -177,7 +178,7 @@ Адрес контракта Адрес контракта некорректен Пожалуйста, выберите сеть - Десятичное число должно быть действительным целым числом, до %li + Десятичное число должно быть действительным целым числом, до %d Своя деривация Например m/00\'/0000\'/0\'/0/0 Введите свою деривацию @@ -353,6 +354,7 @@ Рынок Чтобы создать адреса для выбранных сетей, отсканируйте вашу карту Tangem кошелька Данные раздела получены из следующих сетей: %s + Нет данных Быстрые действия Результат Токены с капитализацией меньше 100к @@ -647,7 +649,7 @@ Для завершения стейкинга нажмите на блок выше Сумма для стейкинга должна быть не менее %s Забрать средства - Годовая процентная ставка + Процентная ставка Годовой процентный доход, который вы можете получить от участия в стейкинге. APR Доступно @@ -668,6 +670,7 @@ Период, который необходимо подождать после запроса на вывод средств из стейкинга, прежде чем токены станут доступны. Период прогрева Время, необходимое для начала процесса стейкинга и активации процесса начисления наград + Заблокировано Переместить Нативный стейкинг Стейкинг дает возможность вам получать %1$s. Награда будет зачисляться каждый день. @@ -696,7 +699,7 @@ Застейкать %s Вывести %s Разблокировать - Выведено из стейкинга + Вывод из стейкинга Проверьте процесс завершения стейкинга, чтобы вывести свои средства. Завершение стейкинга Валидатор @@ -860,7 +863,7 @@ Чтобы совершить транзакцию, вам необходимо внести немного %1$s %2$s Невозможно покрыть комиссию %s Сумма получения не может быть менее %s - Это может произойти из-за того, что провайдер временно не предоставляет обмен выбранной вами пары. Пожалуйста, подождите некоторое время и попробуйте снова. (Код %@) + Это может произойти из-за того, что провайдер временно не предоставляет обмен выбранной вами пары. Пожалуйста, подождите некоторое время и попробуйте снова. (Код %s) Выбранная пара временно недоступна Cервис временно недоступен Сумма для обмена должна быть не более %s diff --git a/core/res/src/main/res/values-uk-rUA/strings.xml b/core/res/src/main/res/values-uk-rUA/strings.xml index d0ff9d566d..767c26f4fd 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -78,8 +78,8 @@ Увага Баланс: %s Баланс - біометрична автентифікація - біометрією + біометричну автентифікацію + біометрії Купити Перейдіть до %1$s Ви не надали доступ до камери, будь ласка, змініть налаштування конфіденційності @@ -107,7 +107,6 @@ Оглядач Переглянути історію транзакцій Оглядач - Комісія Мережеві комісії – це збори, які користувачі сплачують за обробку та підтвердження транзакцій. На розмір комісії може впливати перевантаження мережі, розмір транзакції та пріоритет виконання. %s Швидко За ринком @@ -152,7 +151,7 @@ Застейкати Стейкінг Почати - Надіслати + Продовжити Успіх Підтримка Обмін @@ -172,7 +171,7 @@ Адреса контракту Адреса контракту недійсна Будь ласка, оберіть мережу - Десяткове число повинно бути дійсним цілим числом, до %li + Десяткове число повинно бути дійсним цілим числом, до %d Власна деривація Наприклад, m/00\'/0000\'/0\'/0/0 Введіть власну деривацію @@ -377,7 +376,7 @@ На основі %d оцінок На основі %d оцінок - Блокчейн сайт + Веб-сайт Давлення покупця Різниця між обсягом покупців та обсягом продавців Циркуляційний запас @@ -473,7 +472,7 @@ Використовувати seed-фразу Невірна seed-фраза. Будь ласка, перевірте порядок слів. Невірна seed-фраза. Будь ласка, перевірте правопис. - Застарілий + Застаріло Щоб перевірити чи правильно ви записали seed-фразу, введіть 2-е, 7-е та 11-те слова Отже, давайте перевіримо Щоб почати процес резервного копіювання, додайте одну або дві резервні картки. @@ -530,7 +529,7 @@ за %d гаманців за %d гаманців - Отримайте ^^%1$s^^ на вашу адресу в мережі %2$s%3$s ^^через 30 днів^^ за кожен гаманець, який придбає ваш друг + Отримаєте ^^%1$s^^ на вашу адресу в мережі %2$s %3$s ^^через 30 днів^^ за кожен гаманець, який придбає ваш друг Ви Отримає при купівлі гаманця на сайті tangem.com @@ -583,18 +582,11 @@ Комісія, необхідна за використання кожної невитраченої транзакції (UTXO) у мережі Kaspa. Чим більше UTXO ви використовуєте в транзакції, тим вищою буде комісія. KAS за UTXO %1$s, %2$s - Адреса Тег призначення Введіть адресу Адреса збігається з адресою гаманця - Недопустимий Tag. Він не буде доданий у транзакцію. Недопустимий Memo. Він не буде доданий до транзакції. - Tag Memo - Включаючи комісію - Низька - Нормальна - Пріоритетна Перевірте підключення до мережі Інформація щодо комісії в мережі недоступна Із @@ -609,7 +601,7 @@ Покриття мережевої комісії Недостатньо коштів для здійснення переказу, оскільки загальна сума комісії та переказу перевищує наявний баланс Сума перевищує баланс - Рахунок буде видалено з блокчейну, якщо баланс стане нижчим за екзистенційний депозит. Будь ласка, залиште %s на своєму балансі. + Для збереження вашого акаунту у блокчейні та захисту від можливих ризиків необхідний баланс не менше %s. Ця сума залишиться на вашому рахунку та не може бути знята. Екзистенційний депозит Сума комісії в %s разів перевищує рекомендовану. Переконайтеся, що користувацькі налаштування вірні. Встановлена комісія завелика @@ -643,23 +635,18 @@ Надіслати %s Ви надсилаєте **%1$s**, включно з комісію мережі %2$s Ви надсилаєте **%1$s** і %2$s - Надсилання %s - Всього - %1$s та %2$s буде надіслано - ≈ %1$s (вкл. комісію: %2$s ) - %s буде надіслано Транзакція успішно підписана і відправлена до блокчейну. Баланс гаманця буде оновлено через деякий час %1$s — це монета у мережі Tron. Щоб розрахувати комісію та здійснити транзакцію, вам необхідно внести певну кількість Tron (TRX) на свій рахунок. - Недійсна адреса Трансакцію надіслано - Підготуйтеся до сканування картку, яку потрібно налаштувати. + Підготуйте до сканування картку, яку потрібно налаштувати. Забути гаманець Це призведе до видалення гаманця з застосунку. Сам гаманець можна додати знову. Ім\'я Активний - Щоб вивести активи зі стейкінгу, натисніть тут. + Для завершення стейкінгу натисніть на блок вище Сума для стейкінгу має бути не менше %s Зняти кошти + Процентна ставка Річний відсоток, який ви можете отримати, беручи участь у стейкінгу. APR Доступно @@ -843,8 +830,6 @@ Налаштування гаманця Tangem Використовуйте %s або відскануйте картку, щоб розблокувати доступ до гаманця - Затвердження обміну триває і незабаром буде завершено - Затвердження в процесі Схоже, що активація картки була виконана неправильно. Це може бути пов\'язано з проблемою з модулем NFC вашого пристрою або неправильним прикладанням картки до пристрою. Зверніться за допомогою до нашої служби підтримки. Помилка активації За рішенням розробників мережі BNB стандарт BEP-2 перестане підтримуватись у червні 2024 року. Щоб не втратити свої активи, їх необхідно конвертувати у стандарт BEP-20. Використовуйте функцію обміну, щоб перевести їх у мережу BNB Smart Chain. @@ -862,13 +847,16 @@ Для роботи з мережею вимагається депозит Обмін буде доступний після завершення %s транзакції У вас є активна транзакція + Затвердження обміну триває і незабаром буде завершено + Затвердження в процесі Мінімальна сума обміну становить - %1$s. Будь ласка, переконайтеся, що залишок на рахунку після обміну буде не менше за %2$s. У вашому списку немає доступних монет для обміну %s Немає доступних токенів для обміну Щоб здійснити транзакцію, вам потрібно внести трохи %1$s %2$s Неможливо покрити комісію %s Сума отримання не може бути меншою за %s - Це може статися тому, що провайдер наразі не може обміняти обрану пару. Будь ласка, зачекайте трохи та спробуйте ще раз. (Код %@) + Це може статися тому, що провайдер наразі не може обміняти обрану пару. Будь ласка, зачекайте трохи та спробуйте ще раз. (Код %s) + Обрана пара тимчасово недоступна Сервіс тимчасово недоступний Сума до обміну не повинна перевищувати %s Сума для обміну має бути не менше %s diff --git a/core/res/src/main/res/values-zh-rTW/strings.xml b/core/res/src/main/res/values-zh-rTW/strings.xml index 3c2329daab..b860623796 100644 --- a/core/res/src/main/res/values-zh-rTW/strings.xml +++ b/core/res/src/main/res/values-zh-rTW/strings.xml @@ -57,7 +57,6 @@ 允許 啟用 錯誤 - 費用 導入 網路費 @@ -251,24 +250,11 @@ 掃描卡片以更改其設置。這些更改只會影響您掃描過的卡,不會影響綁定到您錢包的其他卡。 準備好您的卡! 數量 - 地址 地址與錢包地址相同 - 標籤無效。它不會被添加到交易中 Memo無效。 它不會被添加到交易中 - Tag Memo - 包含費用 - - 正常 - 優先 最大值 - 發送 %s - 總計 - %1$s 和 %2$s 將被發送 - ≈ %1$s (費用包含: %2$s) - %s 將被發送 交易已成功簽署並發送至區塊鏈節點。錢包餘額稍後更新 - 無效地址 安全地存儲您的加密貨幣,同時將私鑰保存在您的卡中 創新式的硬體錢包 最多 3張實體卡片 到一個錢包 diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index fce9968300..314a9a07d4 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -70,6 +70,7 @@ Access denied All Allow + Analytics Apply Approval Approve @@ -82,6 +83,7 @@ Go to %1$s You have not given access to your camera, please adjust your privacy settings Cancel + Choose action Claim rewards Close Continue @@ -174,7 +176,7 @@ Please select the network This token has already been added to the list Token already exists - Decimal must be a valid integer, up to %li + Decimal must be a valid integer, up to %d Custom derivation E. g. m/00\'/0000\'/0\'/0/0 Enter custom derivation @@ -351,6 +353,7 @@ To generate addresses for selected networks, you must scan your Tangem Wallet card This section’s data is sourced from the following networks: %s Unable to load the data… + No data Quick actions Result See tokens under 100k market cap @@ -659,6 +662,7 @@ The period you must wait after requesting to withdraw funds from staking before the tokens become available. Warmup period The allocated time for activating participation in staking. + Locked Migrate Native staking Staking allows you to earn %1$s. Your staking rewards arrive every day. @@ -854,7 +858,7 @@ To make a transaction you need to deposit some %1$s %2$s Unable to cover %s fee The amount to receive must be at least %s - This may occur because the provider is currently unable to exchange your selected pair. Please wait a moment and try again. (Code %@) + This may occur because the provider is currently unable to exchange your selected pair. Please wait a moment and try again. (Code %s) Selected pair temporarily unavailable Service temporarily unavailable The amount of tokens to be swapped must not exceed %s diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/inputrow/InputRowDefault.kt b/core/ui/src/main/java/com/tangem/core/ui/components/inputrow/InputRowDefault.kt index 1eff068d9f..3ef8fefbc8 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/inputrow/InputRowDefault.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/inputrow/InputRowDefault.kt @@ -43,9 +43,9 @@ import com.tangem.core.ui.res.TangemThemePreview */ @Composable fun InputRowDefault( - title: TextReference, text: TextReference, modifier: Modifier = Modifier, + title: TextReference? = null, titleColor: Color = TangemTheme.colors.text.secondary, textColor: Color = TangemTheme.colors.text.primary1, iconRes: Int? = null, @@ -66,16 +66,18 @@ fun InputRowDefault( modifier = Modifier .weight(1f), ) { - Text( - text = title.resolveReference(), - style = TangemTheme.typography.subtitle2, - color = titleColor, - ) + title?.let { + Text( + text = title.resolveReference(), + style = TangemTheme.typography.subtitle2, + color = titleColor, + modifier = Modifier.padding(bottom = TangemTheme.dimens.spacing8), + ) + } Text( text = text.resolveReference(), style = TangemTheme.typography.body2, color = textColor, - modifier = Modifier.padding(top = TangemTheme.dimens.spacing8), ) } iconRes?.let { diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/StakingUiState.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/StakingUiState.kt index 0e08d89b1c..55e576c90f 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/StakingUiState.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/StakingUiState.kt @@ -83,11 +83,10 @@ internal sealed class StakingStates { val innerState: InnerConfirmationStakingState, val feeState: FeeState, val validatorState: ValidatorState, - val pendingActions: ImmutableList, + val pendingAction: PendingAction?, val notifications: ImmutableList, val footerText: String, val transactionDoneState: TransactionDoneState, - val pendingActionInProgress: PendingAction? = null, val isApprovalNeeded: Boolean, ) : ConfirmationState() diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/bottomsheet/StakingActionSelectionBottomSheetConfig.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/bottomsheet/StakingActionSelectionBottomSheetConfig.kt new file mode 100644 index 0000000000..873ba40422 --- /dev/null +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/bottomsheet/StakingActionSelectionBottomSheetConfig.kt @@ -0,0 +1,11 @@ +package com.tangem.features.staking.impl.presentation.state.bottomsheet + +import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfigContent +import com.tangem.core.ui.extensions.TextReference +import com.tangem.domain.staking.model.stakekit.PendingAction + +internal data class StakingActionSelectionBottomSheetConfig( + val title: TextReference, + val actions: List, + val onActionSelect: (PendingAction) -> Unit, +) : TangemBottomSheetConfigContent \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/ConfirmationStatePreviewData.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/ConfirmationStatePreviewData.kt index f8a64a3695..ef4234d37c 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/ConfirmationStatePreviewData.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/ConfirmationStatePreviewData.kt @@ -9,9 +9,6 @@ import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.staking.model.stakekit.Yield import com.tangem.features.staking.impl.R import com.tangem.features.staking.impl.presentation.state.* -import com.tangem.features.staking.impl.presentation.state.StakingNotification -import com.tangem.features.staking.impl.presentation.state.StakingStates -import com.tangem.features.staking.impl.presentation.state.ValidatorState import kotlinx.collections.immutable.persistentListOf import java.math.BigDecimal @@ -90,7 +87,7 @@ internal object ConfirmationStatePreviewData { ), ), transactionDoneState = TransactionDoneState.Empty, - pendingActions = persistentListOf(), + pendingAction = null, isApprovalNeeded = false, ) } \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/stub/StakingClickIntentsStub.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/stub/StakingClickIntentsStub.kt index 7220af1f41..8876bdabdb 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/stub/StakingClickIntentsStub.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/stub/StakingClickIntentsStub.kt @@ -6,16 +6,15 @@ import com.tangem.domain.staking.model.stakekit.action.StakingActionCommonType import com.tangem.features.staking.impl.presentation.state.BalanceState import com.tangem.features.staking.impl.presentation.state.bottomsheet.InfoType import com.tangem.features.staking.impl.presentation.viewmodel.StakingClickIntents -import kotlinx.collections.immutable.ImmutableList @Suppress("TooManyFunctions") internal object StakingClickIntentsStub : StakingClickIntents { override fun onBackClick() {} - override fun onNextClick(actionType: StakingActionCommonType?, pendingActions: ImmutableList) {} + override fun onNextClick(actionType: StakingActionCommonType?, pendingAction: PendingAction?) {} - override fun onActionClick(pendingAction: PendingAction?) {} + override fun onActionClick() {} override fun onPrevClick() {} diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetButtonsStateTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetButtonsStateTransformer.kt index 3f8b253474..6bd2c902fa 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetButtonsStateTransformer.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetButtonsStateTransformer.kt @@ -5,10 +5,9 @@ import com.tangem.common.ui.navigationButtons.NavigationButtonsState import com.tangem.core.ui.R import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.extensions.resourceReference -import com.tangem.domain.staking.model.stakekit.PendingAction import com.tangem.domain.staking.model.stakekit.action.StakingActionCommonType -import com.tangem.domain.staking.model.stakekit.action.StakingActionType import com.tangem.features.staking.impl.presentation.state.* +import com.tangem.features.staking.impl.presentation.state.utils.getPendingActionTitle import com.tangem.utils.transformer.Transformer import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf @@ -22,7 +21,6 @@ internal class SetButtonsStateTransformer : Transformer { NavigationButtonsState.Data( primaryButton = getPrimaryButton(prevState), prevButton = getPrevButton(prevState), - secondaryButton = getSecondaryButton(prevState), extraButtons = getExtraButtons(prevState), txUrl = (confirmState?.transactionDoneState as? TransactionDoneState.Content)?.txUrl, ) @@ -37,48 +35,22 @@ internal class SetButtonsStateTransformer : Transformer { val confirmState = prevState.confirmationState as? StakingStates.ConfirmationState.Data val innerConfirmState = confirmState?.innerState - val isPrimaryInProgress = - confirmState?.pendingActions?.getPrimaryAction() == confirmState?.pendingActionInProgress val isConfirmation = prevState.currentStep == StakingStep.Confirmation val isInProgress = innerConfirmState == InnerConfirmationStakingState.IN_PROGRESS val isCompleted = innerConfirmState == InnerConfirmationStakingState.COMPLETED val isIconVisible = isConfirmation && !isCompleted - val isShowProgress = isInProgress && isPrimaryInProgress return NavigationButton( textReference = prevState.getButtonText(), iconRes = R.drawable.ic_tangem_24, isSecondary = false, isIconVisible = isIconVisible, - showProgress = isShowProgress, + showProgress = isInProgress, isEnabled = prevState.isButtonEnabled(), onClick = { prevState.onPrimaryClick() }, ) } - private fun getSecondaryButton(prevState: StakingUiState): NavigationButton? { - val confirmState = prevState.confirmationState as? StakingStates.ConfirmationState.Data - val innerConfirmState = confirmState?.innerState - - val isConfirmation = prevState.currentStep == StakingStep.Confirmation - val isInProgress = innerConfirmState == InnerConfirmationStakingState.IN_PROGRESS - val isCompleted = innerConfirmState == InnerConfirmationStakingState.COMPLETED - - return confirmState?.pendingActions?.getSecondaryAction()?.let { pendingAction -> - val isSecondaryInProgress = pendingAction == confirmState.pendingActionInProgress - val isShowProgress = isInProgress && isSecondaryInProgress - NavigationButton( - textReference = getPendingActionTitle(pendingAction.type), - iconRes = R.drawable.ic_tangem_24, - isSecondary = true, - isIconVisible = true, - showProgress = isShowProgress, - isEnabled = prevState.isButtonEnabled(), - onClick = { prevState.clickIntents.onActionClick(pendingAction) }, - ).takeIf { isConfirmation && !isCompleted } - } - } - private fun getPrevButton(prevState: StakingUiState): NavigationButton? { return NavigationButton( textReference = TextReference.EMPTY, @@ -114,10 +86,6 @@ internal class SetButtonsStateTransformer : Transformer { ) } - private fun List.getPrimaryAction(): PendingAction? = getOrNull(0) - - private fun List.getSecondaryAction(): PendingAction? = getOrNull(1) - private fun StakingUiState.isButtonsVisible(): Boolean = when (currentStep) { StakingStep.RewardsValidators -> false else -> true @@ -158,7 +126,7 @@ internal class SetButtonsStateTransformer : Transformer { StakingActionCommonType.EXIT -> resourceReference(R.string.common_unstake) StakingActionCommonType.PENDING_OTHER, StakingActionCommonType.PENDING_REWARDS, - -> getPendingActionTitle(confirmationState.pendingActions.firstOrNull()?.type) + -> confirmationState.pendingAction?.type.getPendingActionTitle() } } } else { @@ -192,7 +160,7 @@ internal class SetButtonsStateTransformer : Transformer { if (isEnterAction && isApproveNeeded) { clickIntents.showApprovalBottomSheet() } else { - clickIntents.onActionClick(confirmationState.pendingActions.firstOrNull()) + clickIntents.onActionClick() } } } else { @@ -219,25 +187,4 @@ internal class SetButtonsStateTransformer : Transformer { StakingStep.Validators -> true } } - - @Suppress("CyclomaticComplexMethod") - private fun getPendingActionTitle(type: StakingActionType?): TextReference = when (type) { - StakingActionType.CLAIM_REWARDS -> resourceReference(R.string.common_claim_rewards) - StakingActionType.RESTAKE_REWARDS -> resourceReference(R.string.staking_restake_rewards) - StakingActionType.WITHDRAW -> resourceReference(R.string.staking_withdraw) - StakingActionType.RESTAKE -> resourceReference(R.string.staking_restake) - StakingActionType.CLAIM_UNSTAKED -> resourceReference(R.string.staking_claim_unstaked) - StakingActionType.UNLOCK_LOCKED -> resourceReference(R.string.staking_unlocked_locked) - StakingActionType.STAKE_LOCKED -> resourceReference(R.string.staking_stake_locked) - StakingActionType.VOTE -> resourceReference(R.string.staking_vote) - StakingActionType.REVOKE -> resourceReference(R.string.staking_revoke) - StakingActionType.VOTE_LOCKED -> resourceReference(R.string.staking_vote_locked) - StakingActionType.REVOTE -> resourceReference(R.string.staking_revote) - StakingActionType.REBOND -> resourceReference(R.string.staking_rebond) - StakingActionType.MIGRATE -> resourceReference(R.string.staking_migrate) - StakingActionType.STAKE -> resourceReference(R.string.common_stake) - StakingActionType.UNSTAKE -> resourceReference(R.string.common_unstake) - StakingActionType.UNKNOWN -> TextReference.EMPTY - null -> TextReference.EMPTY - } } \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateAssentTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateAssentTransformer.kt index 6a214fde9a..ee19ad787a 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateAssentTransformer.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateAssentTransformer.kt @@ -10,13 +10,12 @@ import com.tangem.features.staking.impl.presentation.state.StakingStates import com.tangem.features.staking.impl.presentation.state.StakingUiState import com.tangem.utils.Provider import com.tangem.utils.transformer.Transformer -import kotlinx.collections.immutable.ImmutableList internal class SetConfirmationStateAssentTransformer( private val appCurrencyProvider: Provider, private val feeCryptoCurrencyStatus: CryptoCurrencyStatus?, private val fee: Fee, - private val pendingActionList: ImmutableList, + private val action: PendingAction?, ) : Transformer { override fun transform(prevState: StakingUiState): StakingUiState { @@ -38,7 +37,7 @@ internal class SetConfirmationStateAssentTransformer( isFeeApproximate = false, ), validatorState = validatorState.copySealed(isClickable = true), - pendingActions = pendingActionList, + pendingAction = action, isPrimaryButtonEnabled = true, isApprovalNeeded = false, ) diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateInProgressTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateInProgressTransformer.kt index 817ff94491..e17aad84b4 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateInProgressTransformer.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateInProgressTransformer.kt @@ -1,14 +1,11 @@ package com.tangem.features.staking.impl.presentation.state.transformers -import com.tangem.domain.staking.model.stakekit.PendingAction import com.tangem.features.staking.impl.presentation.state.InnerConfirmationStakingState import com.tangem.features.staking.impl.presentation.state.StakingStates import com.tangem.features.staking.impl.presentation.state.StakingUiState import com.tangem.utils.transformer.Transformer -internal class SetConfirmationStateInProgressTransformer( - private val pendingAction: PendingAction?, -) : Transformer { +internal class SetConfirmationStateInProgressTransformer : Transformer { override fun transform(prevState: StakingUiState): StakingUiState { return prevState.copy( @@ -22,7 +19,6 @@ internal class SetConfirmationStateInProgressTransformer( isPrimaryButtonEnabled = false, innerState = InnerConfirmationStakingState.IN_PROGRESS, validatorState = validatorState.copySealed(isClickable = false), - pendingActionInProgress = pendingAction, ) } else { this diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateLoadingTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateLoadingTransformer.kt index 07ba1f9fce..9e35b20442 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateLoadingTransformer.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateLoadingTransformer.kt @@ -32,8 +32,7 @@ internal class SetConfirmationStateLoadingTransformer( notifications = getNotifications(prevState), footerText = "", transactionDoneState = TransactionDoneState.Empty, - pendingActions = persistentListOf(), - pendingActionInProgress = null, + pendingAction = null, isApprovalNeeded = false, ), ) diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetInitialDataStateTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetInitialDataStateTransformer.kt index 6402fc548e..19f1c44544 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetInitialDataStateTransformer.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetInitialDataStateTransformer.kt @@ -212,8 +212,7 @@ internal class SetInitialDataStateTransformer( notifications = persistentListOf(), footerText = "", transactionDoneState = TransactionDoneState.Empty, - pendingActions = persistentListOf(), - pendingActionInProgress = null, + pendingAction = null, isApprovalNeeded = isApprovalNeeded, ) } diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/ShowActionSelectorBottomSheetTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/ShowActionSelectorBottomSheetTransformer.kt new file mode 100644 index 0000000000..2c927652c7 --- /dev/null +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/ShowActionSelectorBottomSheetTransformer.kt @@ -0,0 +1,30 @@ +package com.tangem.features.staking.impl.presentation.state.transformers + +import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig +import com.tangem.core.ui.extensions.resourceReference +import com.tangem.domain.staking.model.stakekit.PendingAction +import com.tangem.features.staking.impl.R +import com.tangem.features.staking.impl.presentation.state.StakingUiState +import com.tangem.features.staking.impl.presentation.state.bottomsheet.StakingActionSelectionBottomSheetConfig +import com.tangem.utils.transformer.Transformer +import kotlinx.collections.immutable.ImmutableList + +internal class ShowActionSelectorBottomSheetTransformer( + private val pendingActions: ImmutableList, + private val onActionSelect: (PendingAction) -> Unit, + private val onDismiss: () -> Unit, +) : Transformer { + override fun transform(prevState: StakingUiState): StakingUiState { + return prevState.copy( + bottomSheetConfig = TangemBottomSheetConfig( + isShow = true, + content = StakingActionSelectionBottomSheetConfig( + title = resourceReference(R.string.common_choose_action), + actions = pendingActions, + onActionSelect = onActionSelect, + ), + onDismissRequest = onDismiss, + ), + ) + } +} \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/utils/StakingPendingActionUtils.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/utils/StakingPendingActionUtils.kt new file mode 100644 index 0000000000..0116e0d6d5 --- /dev/null +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/utils/StakingPendingActionUtils.kt @@ -0,0 +1,27 @@ +package com.tangem.features.staking.impl.presentation.state.utils + +import com.tangem.core.ui.R +import com.tangem.core.ui.extensions.TextReference +import com.tangem.core.ui.extensions.resourceReference +import com.tangem.domain.staking.model.stakekit.action.StakingActionType + +@Suppress("CyclomaticComplexMethod") +internal fun StakingActionType?.getPendingActionTitle(): TextReference = when (this) { + StakingActionType.CLAIM_REWARDS -> resourceReference(R.string.common_claim_rewards) + StakingActionType.RESTAKE_REWARDS -> resourceReference(R.string.staking_restake_rewards) + StakingActionType.WITHDRAW -> resourceReference(R.string.staking_withdraw) + StakingActionType.RESTAKE -> resourceReference(R.string.staking_restake) + StakingActionType.CLAIM_UNSTAKED -> resourceReference(R.string.staking_claim_unstaked) + StakingActionType.UNLOCK_LOCKED -> resourceReference(R.string.staking_unlocked_locked) + StakingActionType.STAKE_LOCKED -> resourceReference(R.string.staking_stake_locked) + StakingActionType.VOTE -> resourceReference(R.string.staking_vote) + StakingActionType.REVOKE -> resourceReference(R.string.staking_revoke) + StakingActionType.VOTE_LOCKED -> resourceReference(R.string.staking_vote_locked) + StakingActionType.REVOTE -> resourceReference(R.string.staking_revote) + StakingActionType.REBOND -> resourceReference(R.string.staking_rebond) + StakingActionType.MIGRATE -> resourceReference(R.string.staking_migrate) + StakingActionType.STAKE -> resourceReference(R.string.common_stake) + StakingActionType.UNSTAKE -> resourceReference(R.string.common_unstake) + StakingActionType.UNKNOWN -> TextReference.EMPTY + null -> TextReference.EMPTY +} \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingScreen.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingScreen.kt index 2bbb05b0c2..9fad6829f4 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingScreen.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingScreen.kt @@ -24,7 +24,9 @@ import com.tangem.features.staking.impl.R import com.tangem.features.staking.impl.presentation.state.StakingStates import com.tangem.features.staking.impl.presentation.state.StakingStep import com.tangem.features.staking.impl.presentation.state.StakingUiState +import com.tangem.features.staking.impl.presentation.state.bottomsheet.StakingActionSelectionBottomSheetConfig import com.tangem.features.staking.impl.presentation.state.bottomsheet.StakingInfoBottomSheetConfig +import com.tangem.features.staking.impl.presentation.ui.bottomsheet.StakingActionSelectorBottomSheet import com.tangem.features.staking.impl.presentation.ui.bottomsheet.StakingInfoBottomSheet import kotlinx.coroutines.delay import kotlinx.coroutines.flow.first @@ -74,6 +76,7 @@ fun StakingBottomSheet(bottomSheetConfig: TangemBottomSheetConfig?) { when (bottomSheetConfig.content) { is StakingInfoBottomSheetConfig -> StakingInfoBottomSheet(bottomSheetConfig) is GiveTxPermissionBottomSheetConfig -> GiveTxPermissionBottomSheet(bottomSheetConfig) + is StakingActionSelectionBottomSheetConfig -> StakingActionSelectorBottomSheet(bottomSheetConfig) } } diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingValidatorListContent.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingValidatorListContent.kt index e6ed596800..57ad4dd680 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingValidatorListContent.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingValidatorListContent.kt @@ -58,7 +58,7 @@ internal fun StakingValidatorListContent( InputRowImageSelector( subtitle = stringReference(item.name), caption = combinedReference( - resourceReference(R.string.staking_details_apr), + resourceReference(R.string.staking_details_annual_percentage_rate), annotatedReference { appendSpace() appendColored( diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/bottomsheet/StakingActionSelectorBottomSheet.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/bottomsheet/StakingActionSelectorBottomSheet.kt new file mode 100644 index 0000000000..8f4434e496 --- /dev/null +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/bottomsheet/StakingActionSelectorBottomSheet.kt @@ -0,0 +1,92 @@ +package com.tangem.features.staking.impl.presentation.ui.bottomsheet + +import android.content.res.Configuration +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.tooling.preview.Preview +import com.tangem.core.ui.components.bottomsheets.TangemBottomSheet +import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig +import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetTitle +import com.tangem.core.ui.components.inputrow.InputRowDefault +import com.tangem.core.ui.extensions.resourceReference +import com.tangem.core.ui.res.TangemTheme +import com.tangem.core.ui.res.TangemThemePreview +import com.tangem.domain.staking.model.stakekit.PendingAction +import com.tangem.domain.staking.model.stakekit.action.StakingActionType +import com.tangem.features.staking.impl.R +import com.tangem.features.staking.impl.presentation.state.bottomsheet.StakingActionSelectionBottomSheetConfig +import com.tangem.features.staking.impl.presentation.state.utils.getPendingActionTitle +import kotlinx.collections.immutable.persistentListOf + +@Composable +internal fun StakingActionSelectorBottomSheet(config: TangemBottomSheetConfig) { + TangemBottomSheet( + config = config, + title = { content -> + TangemBottomSheetTitle(title = content.title) + }, + containerColor = TangemTheme.colors.background.tertiary, + ) { content -> + Column( + modifier = Modifier + .padding( + start = TangemTheme.dimens.spacing16, + end = TangemTheme.dimens.spacing16, + bottom = TangemTheme.dimens.spacing32, + ) + .clip(TangemTheme.shapes.roundedCornersXMedium) + .background(TangemTheme.colors.background.action), + ) { + content.actions.forEachIndexed { index, action -> + InputRowDefault( + text = action.type.getPendingActionTitle(), + textColor = TangemTheme.colors.text.primary1, + showDivider = index != content.actions.lastIndex, + modifier = Modifier + .fillMaxWidth() + .clickable { + content.onActionSelect(action) + }, + ) + } + } + } +} + +// region Preview +@Composable +@Preview(showBackground = true) +@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +private fun Preview_StakingActionSelectorBottomSheet() { + TangemThemePreview { + StakingActionSelectorBottomSheet( + config = TangemBottomSheetConfig( + isShow = true, + onDismissRequest = {}, + content = StakingActionSelectionBottomSheetConfig( + title = resourceReference(R.string.common_select_action), + actions = persistentListOf( + PendingAction( + type = StakingActionType.CLAIM_REWARDS, + passthrough = "", + args = null, + ), + PendingAction( + type = StakingActionType.RESTAKE_REWARDS, + passthrough = "", + args = null, + ), + ), + onActionSelect = {}, + ), + ), + ) + } +} +// endregion Preview \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingClickIntents.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingClickIntents.kt index fee1e2115d..ad7b9ff1c6 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingClickIntents.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingClickIntents.kt @@ -6,19 +6,14 @@ import com.tangem.domain.staking.model.stakekit.Yield import com.tangem.domain.staking.model.stakekit.action.StakingActionCommonType import com.tangem.features.staking.impl.presentation.state.BalanceState import com.tangem.features.staking.impl.presentation.state.bottomsheet.InfoType -import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.persistentListOf internal interface StakingClickIntents : AmountScreenClickIntents { fun onBackClick() - fun onNextClick( - actionType: StakingActionCommonType? = null, - pendingActions: ImmutableList = persistentListOf(), - ) + fun onNextClick(actionType: StakingActionCommonType? = null, pendingAction: PendingAction? = null) - fun onActionClick(pendingAction: PendingAction?) + fun onActionClick() fun onPrevClick() diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingViewModel.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingViewModel.kt index 8dea58c5cd..523380111a 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingViewModel.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingViewModel.kt @@ -63,7 +63,6 @@ import com.tangem.utils.Provider import com.tangem.utils.coroutines.* import com.tangem.utils.extensions.isSingleItem import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import timber.log.Timber @@ -157,25 +156,25 @@ internal class StakingViewModel @Inject constructor( stakingStateRouter.onBackClick() } - override fun onNextClick(actionType: StakingActionCommonType?, pendingActions: ImmutableList) { + override fun onNextClick(actionType: StakingActionCommonType?, pendingAction: PendingAction?) { if (actionType != null) { stateController.update { it.copy(actionType = actionType) } } stakingStateRouter.onNextClick() if (isAssentState()) { - getFee(pendingActions) + getFee(pendingAction) } } - override fun onActionClick(pendingAction: PendingAction?) { - handleOnNextConfirmationClick(pendingAction) + override fun onActionClick() { + handleOnNextConfirmationClick() stakingStateRouter.onNextClick() } - private fun handleOnNextConfirmationClick(pendingAction: PendingAction?) { + private fun handleOnNextConfirmationClick() { if (isAssentState()) { viewModelScope.launch { - stateController.update(SetConfirmationStateInProgressTransformer(pendingAction)) + stateController.update(SetConfirmationStateInProgressTransformer()) val confirmationState = value.confirmationState as? StakingStates.ConfirmationState.Data ?: error("No confirmation state") @@ -186,6 +185,7 @@ internal class StakingViewModel @Inject constructor( val fee = (confirmationState.feeState as? FeeState.Content)?.fee ?: error("No fee provided") val defaultAddress = cryptoCurrencyStatus.value.networkAddress?.defaultAddress?.value ?: error("No available address") + val pendingAction = confirmationState.pendingAction val stakingTransactions = getStakingTransactionUseCase( userWalletId = userWalletId, @@ -230,13 +230,13 @@ internal class StakingViewModel @Inject constructor( sendStakingTransaction( fullTransactionsData = fullTransactionsData, fee = fee, - pendingActionList = confirmationState.pendingActions, + pendingAction = confirmationState.pendingAction, ) } } } - private fun getFee(pendingActions: ImmutableList) { + private fun getFee(pendingAction: PendingAction?) { viewModelScope.launch { stateController.update( SetConfirmationStateLoadingTransformer( @@ -270,7 +270,7 @@ internal class StakingViewModel @Inject constructor( ) } else { estimateGas( - pendingActions = pendingActions, + pendingAction = pendingAction, amount = amount, sourceAddress = sourceAddress, validatorAddress = validatorAddress, @@ -278,7 +278,7 @@ internal class StakingViewModel @Inject constructor( } } else { estimateGas( - pendingActions = pendingActions, + pendingAction = pendingAction, amount = amount, sourceAddress = sourceAddress, validatorAddress = validatorAddress, @@ -288,12 +288,11 @@ internal class StakingViewModel @Inject constructor( } private suspend fun estimateGas( - pendingActions: ImmutableList, + pendingAction: PendingAction?, amount: BigDecimal, sourceAddress: String, validatorAddress: String, ) { - val pendingAction = pendingActions.firstOrNull() val gasEstimate = estimateGasUseCase( userWalletId = userWalletId, network = cryptoCurrencyStatus.currency.network, @@ -323,7 +322,7 @@ internal class StakingViewModel @Inject constructor( decimals = gasEstimate.token.decimals, ), ), - pendingActionList = pendingActions, + action = pendingAction, ), ) } @@ -397,14 +396,29 @@ internal class StakingViewModel @Inject constructor( } override fun onActiveStake(activeStake: BalanceState) { - val actionType = if (activeStake.pendingActions.isEmpty()) { - StakingActionCommonType.EXIT + if (activeStake.pendingActions.size > 1) { + stateController.update( + ShowActionSelectorBottomSheetTransformer( + pendingActions = activeStake.pendingActions, + onActionSelect = { + onNextClick(actionType = StakingActionCommonType.PENDING_OTHER, pendingAction = it) + stateController.update(DismissBottomSheetStateTransformer()) + }, + onDismiss = { + stateController.update(DismissBottomSheetStateTransformer()) + }, + ), + ) } else { - StakingActionCommonType.PENDING_OTHER + val actionType = if (activeStake.pendingActions.isEmpty()) { + StakingActionCommonType.EXIT + } else { + StakingActionCommonType.PENDING_OTHER + } + stateController.update(ValidatorSelectChangeTransformer(activeStake.validator)) + stateController.update(AmountChangeStateTransformer(cryptoCurrencyStatus, activeStake.cryptoValue, yield)) + onNextClick(actionType, activeStake.pendingActions.firstOrNull()) } - stateController.update(ValidatorSelectChangeTransformer(activeStake.validator)) - stateController.update(AmountChangeStateTransformer(cryptoCurrencyStatus, activeStake.cryptoValue, yield)) - onNextClick(actionType, activeStake.pendingActions) } override fun showApprovalBottomSheet() { @@ -479,13 +493,13 @@ internal class StakingViewModel @Inject constructor( ifRight = { stateController.update(SetApprovalInProgressTransformer) stateController.update(DismissBottomSheetStateTransformer()) - awaitForAllowance(confirmationState.pendingActions) + awaitForAllowance(confirmationState.pendingAction) }, ) }.saveIn(approvalJobHolder) } - private fun awaitForAllowance(pendingActions: ImmutableList) { + private fun awaitForAllowance(pendingAction: PendingAction?) { val approval = stakingApproval as? StakingApproval.Needed ?: return allowanceTaskScheduler.scheduleTask( scope = viewModelScope, @@ -504,7 +518,7 @@ internal class StakingViewModel @Inject constructor( val amount = (value.amountState as? AmountState.Data)?.amountTextField?.cryptoAmount?.value ?: error("No amount provided") if (allowance >= amount) { - getFee(pendingActions) + getFee(pendingAction) allowanceTaskScheduler.cancelTask() } }, @@ -643,7 +657,7 @@ internal class StakingViewModel @Inject constructor( private suspend fun sendStakingTransaction( fullTransactionsData: List, fee: Fee, - pendingActionList: ImmutableList, + pendingAction: PendingAction?, ) { sendMultipleTransactionUseCase( txsData = fullTransactionsData.map { it.tangemTransaction }, @@ -657,7 +671,7 @@ internal class StakingViewModel @Inject constructor( appCurrencyProvider = Provider { appCurrency }, feeCryptoCurrencyStatus = feeCryptoCurrencyStatus, fee = fee, - pendingActionList = pendingActionList, + action = pendingAction, ), ) stakingEventFactory.createSendTransactionErrorAlert(error)