Skip to content
This repository was archived by the owner on Mar 26, 2026. It is now read-only.
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
4 changes: 3 additions & 1 deletion Features/Stake/Sources/Scenes/EarnScene.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ public struct EarnScene: View {

public var body: some View {
List {
ListAssetHeaderView(model: model.assetModel)

switch model.providersState {
case .noData:
Section {
Expand All @@ -24,7 +26,7 @@ public struct EarnScene: View {
ListItemLoadingView()
.id(UUID())
case .data:
Section(model.assetTitle) {
Section {
ListItemView(
title: model.aprModel.title,
subtitle: model.aprModel.subtitle
Expand Down
7 changes: 6 additions & 1 deletion Features/Stake/Sources/Scenes/StakeScene.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public struct StakeScene: View {

public var body: some View {
List {
headerSection
stakeInfoSection
if model.showManage {
stakeSection
Expand All @@ -42,6 +43,10 @@ public struct StakeScene: View {
// MARK: - UI Components

extension StakeScene {
private var headerSection: some View {
ListAssetHeaderView(model: model.assetModel)
}

private var stakeSection: some View {
Section(Localized.Common.manage) {
if model.showStake {
Expand Down Expand Up @@ -97,7 +102,7 @@ extension StakeScene {
}

private var stakeInfoSection: some View {
Section(model.assetTitle) {
Section {
ListItemView(
title: model.stakeAprModel.title,
subtitle: model.stakeAprModel.subtitle,
Expand Down
5 changes: 4 additions & 1 deletion Features/Stake/Sources/ViewModels/EarnSceneViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ public final class EarnSceneViewModel {
}

var title: String { Localized.Common.earn }
var assetTitle: String { AssetViewModel(asset: asset).title }

var assetModel: AssetViewModel {
AssetViewModel(asset: asset)
}

private var apr: Double? {
providers.first.map(\.apr).flatMap { $0 > 0 ? $0 : nil }
Expand Down
3 changes: 1 addition & 2 deletions Features/Stake/Sources/ViewModels/StakeSceneViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ public final class StakeSceneViewModel {

var stakeTitle: String { Localized.Transfer.Stake.title }
var claimRewardsTitle: String { Localized.Transfer.ClaimRewards.title }
var assetTitle: String { assetModel.title }
var delegationsTitle: String { Localized.Stake.delegations }

var stakeAprModel: AprViewModel {
Expand Down Expand Up @@ -240,7 +239,7 @@ extension StakeSceneViewModel {
return formatter
}()

private var assetModel: AssetViewModel {
var assetModel: AssetViewModel {
AssetViewModel(asset: asset)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,7 @@ public struct ConnectionProposalScene: View {

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

Section {
NavigationLink(value: Scenes.SelectWallet()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,7 @@ 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()
ListAssetHeaderView(model: model.appPreview, subtitleLayout: .vertical)

Section {
ListItemImageView(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright (c). Gem Wallet. All rights reserved.

import SwiftUI
import Components
import Style

public struct ListAssetHeaderView<Model: AssetPreviewable>: View {
private let model: Model
private let subtitleLayout: AssetPreviewView<Model>.SubtitleLayout

public init(model: Model, subtitleLayout: AssetPreviewView<Model>.SubtitleLayout = .horizontal) {
self.model = model
self.subtitleLayout = subtitleLayout
}

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