Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import SwiftUI
import Components
import PrimitivesComponents
import Style
import Primitives
import Localization
Expand All @@ -21,10 +22,9 @@ public struct ConnectionProposalScene: View {
public var body: some View {
List {
Section { } header: {
VStack(alignment: .center) {
AsyncImageView(url: model.imageUrl, size: .image.semiLarge)
}
.padding(.top, .small)
AssetPreviewView(model: model.appPreview, subtitleLayout: .vertical)
.frame(maxWidth: .infinity)
.padding(.bottom, .small)
}
.cleanListRow()

Expand All @@ -35,21 +35,32 @@ public struct ConnectionProposalScene: View {
subtitle: model.walletName
)
}
ListItemView(title: model.appTitle, subtitle: model.appText)
ListItemView(
title: model.connectionTitle,
subtitle: model.connectionText
)
ListItemImageView(
title: Localized.WalletConnect.Connection.title,
title: Localized.Transaction.status,
subtitle: model.statusText,
subtitleStyle: model.statusTextStyle,
assetImage: model.statusAssetImage
)
}

Section(model.permissionsTitle) {
ForEach(model.permissions, id: \.title) { permission in
ListItemView(model: permission)
}
}
}
.safeAreaButton {
StateButton(
text: model.buttonTitle,
action: onAccept
)
}
.contentMargins(.top, .scene.top, for: .scrollContent)
.listSectionSpacing(.compact)
.navigationTitle(model.title)
.navigationDestination(for: Scenes.SelectWallet.self) { _ in
SelectWalletScene(model: $model.walletSelectorModel)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,14 @@ public struct SignMessageScene: View {

public var body: some View {
List {
Section { } header: {
AssetPreviewView(model: model.appPreview, subtitleLayout: .vertical)
.frame(maxWidth: .infinity)
.padding(.bottom, .small)
}
.cleanListRow()

Section {
ListItemImageView(
title: Localized.WalletConnect.app,
subtitle: model.appText,
assetImage: model.appAssetImage
)
.contextMenu(
.url(title: Localized.WalletConnect.website, onOpen: model.onViewWebsite)
)
ListItemImageView(
title: Localized.Common.wallet,
subtitle: model.walletText,
Expand Down Expand Up @@ -66,6 +65,7 @@ public struct SignMessageScene: View {
}
}
}
.contentMargins(.top, .scene.top, for: .scrollContent)
.listSectionSpacing(.compact)
.taskOnce { model.fetch() }
.safeAreaButton {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Copyright (c). Gem Wallet. All rights reserved.

import Components
import PrimitivesComponents

public struct AppPreviewModel: AssetPreviewable {
public let assetImage: AssetImage
public let name: String
public let subtitleSymbol: String?
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ public struct ConnectionProposalViewModel {
var buttonTitle: String { Localized.Transfer.confirm }
var walletTitle: String { Localized.Common.wallet }
var appTitle: String { Localized.WalletConnect.app }
var connectionTitle: String { Localized.WalletConnect.Connection.title }
var connectionText: String { Localized.WalletConnect.brandName }

var walletName: String {
walletSelectorModel.selectedItems.first?.name ?? .empty
Expand Down Expand Up @@ -83,6 +85,34 @@ public struct ConnectionProposalViewModel {
.image(verificationImage)
}

var permissionsTitle: String { Localized.WalletConnect.Permissions.title }

var permissions: [ListItemModel] {
[
ListItemModel(
title: Localized.WalletConnect.Permissions.viewBalance,
imageStyle: .accessory(assetImage: .image(Images.System.checkmark))
),
ListItemModel(
title: Localized.WalletConnect.Permissions.approvalRequests,
imageStyle: .accessory(assetImage: .image(Images.System.checkmark))
),
ListItemModel(
title: Localized.WalletConnect.Permissions.moveFunds,
titleStyle: TextStyle(font: .body, color: Colors.secondaryText),
imageStyle: .accessory(assetImage: .image(Images.System.xmark), foregroundColor: Colors.gray)
),
]
}

var appPreview: AppPreviewModel {
AppPreviewModel(
assetImage: AssetImage(imageURL: imageUrl),
name: appName,
subtitleSymbol: websiteText
)
}

private var payload: WalletConnectionSessionProposal {
pairingProposal.proposal
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,14 @@ public final class SignMessageSceneViewModel {
appName
}

public var appPreview: AppPreviewModel {
AppPreviewModel(
assetImage: appAssetImage,
name: appName,
subtitleSymbol: connectionViewModel.hostText
)
}

var textMessageViewModel: TextMessageViewModel {
TextMessageViewModel(message: plainMessage)
}
Expand Down
2 changes: 1 addition & 1 deletion Packages/Components/Sources/Lists/ListItemView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public struct ListItemView: View {
AssetImageView(
assetImage: imageStyle.assetImage,
size: imageStyle.imageSize,
style: .init(cornerRadius: imageStyle.cornerRadius)
style: .init(foregroundColor: imageStyle.foregroundColor, cornerRadius: imageStyle.cornerRadius)
)
}
HStack {
Expand Down
14 changes: 13 additions & 1 deletion Packages/Components/Sources/Types/ListItemImageStyle.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ public struct ListItemImageStyle: Sendable {
public let assetImage: AssetImage
public let imageSize: CGFloat
public let alignment: VerticalAlignment
public let foregroundColor: Color?
private let cornerRadiusType: CornerRadiusType

public var cornerRadius: CGFloat {
switch cornerRadiusType {
case .none: .zero
Expand All @@ -22,13 +23,15 @@ public struct ListItemImageStyle: Sendable {
assetImage: AssetImage?,
imageSize: CGFloat,
alignment: VerticalAlignment = .center,
foregroundColor: Color? = nil,
cornerRadiusType: CornerRadiusType
) {
guard let assetImage else { return nil }
self.assetImage = assetImage
self.imageSize = imageSize
self.cornerRadiusType = cornerRadiusType
self.alignment = alignment
self.foregroundColor = foregroundColor
}

public enum CornerRadiusType: Sendable {
Expand All @@ -55,6 +58,15 @@ public extension ListItemImageStyle {
)
}

static func accessory(assetImage: AssetImage?, foregroundColor: Color? = nil) -> Self? {
ListItemImageStyle(
assetImage: assetImage,
imageSize: .space12,
foregroundColor: foregroundColor,
cornerRadiusType: .none
)
}

static func settings(assetImage: AssetImage?) -> Self? {
ListItemImageStyle(
assetImage: assetImage,
Expand Down
16 changes: 16 additions & 0 deletions Packages/Localization/Sources/Localized.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1600,6 +1600,12 @@ public enum Localized {
/// New Wallet
public static let title = Localized.tr("Localizable", "wallet.new.title", fallback: "New Wallet")
}
public enum Portfolio {
/// Estimated value based on current holdings and market prices.
public static let footer = Localized.tr("Localizable", "wallet.portfolio.footer", fallback: "Estimated value based on current holdings and market prices.")
/// Portfolio
public static let title = Localized.tr("Localizable", "wallet.portfolio.title", fallback: "Portfolio")
}
public enum Receive {
/// No destination tag required
public static let noDestinationTagRequired = Localized.tr("Localizable", "wallet.receive.no_destination_tag_required", fallback: "No destination tag required")
Expand Down Expand Up @@ -1636,6 +1642,16 @@ public enum Localized {
/// Connection
public static let title = Localized.tr("Localizable", "wallet_connect.connection.title", fallback: "Connection")
}
public enum Permissions {
/// Send approval requests
public static let approvalRequests = Localized.tr("Localizable", "wallet_connect.permissions.approval_requests", fallback: "Send approval requests")
/// Move funds without permission
public static let moveFunds = Localized.tr("Localizable", "wallet_connect.permissions.move_funds", fallback: "Move funds without permission")
/// Permissions
public static let title = Localized.tr("Localizable", "wallet_connect.permissions.title", fallback: "Permissions")
/// View your balance and activity
public static let viewBalance = Localized.tr("Localizable", "wallet_connect.permissions.view_balance", fallback: "View your balance and activity")
}
public enum State {
public enum Empty {
/// Scan or paste code to connect to the DApp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -557,4 +557,10 @@
"simulation.warning.unlimited_token_approval.description" = "يمنح هذا المنفق إمكانية استخدام هذا الرمز المميز حتى تقوم بإلغاء الموافقة أو تنتهي صلاحيته.";
"simulation.warning.nft_collection_approval.title" = "تم طلب الوصول الكامل إلى مجموعة NFT";
"simulation.warning.unlimited_token_approval.title" = "الموافقة على الرموز المميزة غير محدودة";
"transfer.review_request" = "طلب مراجعة";
"transfer.review_request" = "طلب مراجعة";
"wallet.portfolio.title" = "مَلَفّ";
"wallet.portfolio.footer" = "القيمة التقديرية مبنية على الحيازات الحالية وأسعار السوق.";
"wallet_connect.permissions.title" = "الأذونات";
"wallet_connect.permissions.view_balance" = "اطلع على رصيدك ونشاطك";
"wallet_connect.permissions.approval_requests" = "إرسال طلبات الموافقة";
"wallet_connect.permissions.move_funds" = "تحويل الأموال بدون إذن";
Original file line number Diff line number Diff line change
Expand Up @@ -557,4 +557,10 @@
"simulation.warning.unlimited_token_approval.description" = "এটি ব্যয়কারীকে এই টোকেনটি ব্যবহার করার অনুমতি দেয় যতক্ষণ না আপনি অনুমোদন প্রত্যাহার করেন অথবা এটির মেয়াদ শেষ হয়ে যায়।";
"simulation.warning.nft_collection_approval.title" = "সম্পূর্ণ NFT সংগ্রহের অ্যাক্সেসের অনুরোধ করা হয়েছে";
"simulation.warning.unlimited_token_approval.title" = "সীমাহীন টোকেন অনুমোদন";
"transfer.review_request" = "পর্যালোচনার অনুরোধ";
"transfer.review_request" = "পর্যালোচনার অনুরোধ";
"wallet.portfolio.title" = "পোর্টফোলিও";
"wallet.portfolio.footer" = "বর্তমান মালিকানা এবং বাজার মূল্যের উপর ভিত্তি করে আনুমানিক মূল্য।";
"wallet_connect.permissions.title" = "অনুমতি";
"wallet_connect.permissions.view_balance" = "আপনার ব্যালেন্স এবং কার্যকলাপ দেখুন";
"wallet_connect.permissions.approval_requests" = "অনুমোদনের অনুরোধ পাঠান";
"wallet_connect.permissions.move_funds" = "অনুমতি ছাড়া তহবিল স্থানান্তর করুন";
Original file line number Diff line number Diff line change
Expand Up @@ -557,4 +557,10 @@
"simulation.warning.unlimited_token_approval.description" = "To dává útratě přístup k používání tohoto tokenu, dokud schválení nezrušíte nebo dokud nevyprší jeho platnost.";
"simulation.warning.nft_collection_approval.title" = "Požadován plný přístup k NFT kolekci";
"simulation.warning.unlimited_token_approval.title" = "Neomezené schvalování tokenů";
"transfer.review_request" = "Žádost o kontrolu";
"transfer.review_request" = "Žádost o kontrolu";
"wallet.portfolio.title" = "Portfolio";
"wallet.portfolio.footer" = "Odhadovaná hodnota na základě aktuálních aktiv a tržních cen.";
"wallet_connect.permissions.title" = "Oprávnění";
"wallet_connect.permissions.view_balance" = "Zobrazení zůstatku a aktivity";
"wallet_connect.permissions.approval_requests" = "Odeslat žádosti o schválení";
"wallet_connect.permissions.move_funds" = "Převod finančních prostředků bez povolení";
Original file line number Diff line number Diff line change
Expand Up @@ -557,4 +557,10 @@
"simulation.warning.unlimited_token_approval.description" = "Dette giver brugeren adgang til at bruge denne token, indtil du tilbagekalder godkendelsen, eller den udløber.";
"simulation.warning.nft_collection_approval.title" = "Fuld adgang til NFT-samling anmodes";
"simulation.warning.unlimited_token_approval.title" = "Ubegrænset tokengodkendelse";
"transfer.review_request" = "Anmodning om gennemgang";
"transfer.review_request" = "Anmodning om gennemgang";
"wallet.portfolio.title" = "Portefølje";
"wallet.portfolio.footer" = "Estimeret værdi baseret på nuværende beholdninger og markedspriser.";
"wallet_connect.permissions.title" = "Tilladelser";
"wallet_connect.permissions.view_balance" = "Se din saldo og aktivitet";
"wallet_connect.permissions.approval_requests" = "Send godkendelsesanmodninger";
"wallet_connect.permissions.move_funds" = "Flytte penge uden tilladelse";
Original file line number Diff line number Diff line change
Expand Up @@ -557,4 +557,10 @@
"simulation.warning.unlimited_token_approval.description" = "Dadurch erhält der Ausgeber Zugriff auf dieses Token, bis Sie die Genehmigung widerrufen oder es abläuft.";
"simulation.warning.nft_collection_approval.title" = "Vollständiger Zugriff auf die NFT-Sammlung angefordert";
"simulation.warning.unlimited_token_approval.title" = "Unbegrenzte Token-Genehmigung";
"transfer.review_request" = "Überprüfungsanfrage";
"transfer.review_request" = "Überprüfungsanfrage";
"wallet.portfolio.title" = "Portfolio";
"wallet.portfolio.footer" = "Geschätzter Wert basierend auf dem aktuellen Bestand und den Marktpreisen.";
"wallet_connect.permissions.title" = "Berechtigungen";
"wallet_connect.permissions.view_balance" = "Sehen Sie Ihren Kontostand und Ihre Aktivitäten ein.";
"wallet_connect.permissions.approval_requests" = "Genehmigungsanfragen senden";
"wallet_connect.permissions.move_funds" = "Gelder ohne Genehmigung transferieren";
Original file line number Diff line number Diff line change
Expand Up @@ -557,4 +557,10 @@
"simulation.warning.unlimited_token_approval.description" = "This gives the spender access to use this token until you revoke the approval or it expires.";
"simulation.warning.nft_collection_approval.title" = "Full NFT collection access requested";
"simulation.warning.unlimited_token_approval.title" = "Unlimited token approval";
"transfer.review_request" = "Review Request";
"transfer.review_request" = "Review Request";
"wallet.portfolio.title" = "Portfolio";
"wallet.portfolio.footer" = "Estimated value based on current holdings and market prices.";
"wallet_connect.permissions.title" = "Permissions";
"wallet_connect.permissions.view_balance" = "View your balance and activity";
"wallet_connect.permissions.approval_requests" = "Send approval requests";
"wallet_connect.permissions.move_funds" = "Move funds without permission";
Original file line number Diff line number Diff line change
Expand Up @@ -557,4 +557,10 @@
"simulation.warning.unlimited_token_approval.description" = "Esto le da al gastador acceso para usar este token hasta que revoque la aprobación o expire.";
"simulation.warning.nft_collection_approval.title" = "Se solicita acceso completo a la colección NFT";
"simulation.warning.unlimited_token_approval.title" = "Aprobación ilimitada de tokens";
"transfer.review_request" = "Solicitud de revisión";
"transfer.review_request" = "Solicitud de revisión";
"wallet.portfolio.title" = "Cartera";
"wallet.portfolio.footer" = "Valor estimado basado en las tenencias actuales y los precios de mercado.";
"wallet_connect.permissions.title" = "Permisos";
"wallet_connect.permissions.view_balance" = "Consulta tu saldo y actividad.";
"wallet_connect.permissions.approval_requests" = "Enviar solicitudes de aprobación";
"wallet_connect.permissions.move_funds" = "Transferir fondos sin autorización";
Original file line number Diff line number Diff line change
Expand Up @@ -557,4 +557,10 @@
"simulation.warning.unlimited_token_approval.description" = "این به خرج‌کننده دسترسی می‌دهد تا زمانی که تأییدیه را لغو کنید یا منقضی شود، از این توکن استفاده کند.";
"simulation.warning.nft_collection_approval.title" = "دسترسی کامل به مجموعه NFT درخواست شد";
"simulation.warning.unlimited_token_approval.title" = "تایید نامحدود توکن";
"transfer.review_request" = "درخواست بررسی";
"transfer.review_request" = "درخواست بررسی";
"wallet.portfolio.title" = "نمونه کارها";
"wallet.portfolio.footer" = "ارزش تخمینی بر اساس دارایی‌های فعلی و قیمت‌های بازار.";
"wallet_connect.permissions.title" = "مجوزها";
"wallet_connect.permissions.view_balance" = "مشاهده موجودی و فعالیت خود";
"wallet_connect.permissions.approval_requests" = "ارسال درخواست‌های تأیید";
"wallet_connect.permissions.move_funds" = "جابجایی وجه بدون اجازه";
Original file line number Diff line number Diff line change
Expand Up @@ -557,4 +557,10 @@
"simulation.warning.unlimited_token_approval.description" = "Nagbibigay ito sa gumagastos ng access na gamitin ang token na ito hanggang sa bawiin mo ang pag-apruba o hanggang sa mag-expire ito.";
"simulation.warning.nft_collection_approval.title" = "Hiniling ang kumpletong access sa koleksyon ng NFT";
"simulation.warning.unlimited_token_approval.title" = "Walang limitasyong pag-apruba ng token";
"transfer.review_request" = "Kahilingan sa Pagsusuri";
"transfer.review_request" = "Kahilingan sa Pagsusuri";
"wallet.portfolio.title" = "Portfolio";
"wallet.portfolio.footer" = "Tinatayang halaga batay sa kasalukuyang mga hawak at presyo sa merkado.";
"wallet_connect.permissions.title" = "Mga Pahintulot";
"wallet_connect.permissions.view_balance" = "Tingnan ang iyong balanse at aktibidad";
"wallet_connect.permissions.approval_requests" = "Magpadala ng mga kahilingan sa pag-apruba";
"wallet_connect.permissions.move_funds" = "Ilipat ang mga pondo nang walang pahintulot";
Loading
Loading