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 @@ -13,7 +13,7 @@ final class StakingPayoutConfirmationInteractor: AccountFetching {
private let wallet: MetaAccountModel
private let strategy: StakingPayoutConfirmationStrategy

private var priceProvider: AnySingleValueProvider<PriceData>?
private var priceProvider: AnySingleValueProvider<[PriceData]>?

weak var presenter: StakingPayoutConfirmationInteractorOutputProtocol?

Expand All @@ -28,16 +28,26 @@ final class StakingPayoutConfirmationInteractor: AccountFetching {
self.wallet = wallet
self.strategy = strategy
}

private func subscribeForPrices() {
var priceIds: [String] = []
if let utilityPriceId = chainAsset.chain.utilityChainAssets().first?.asset.priceId {
priceIds.append(utilityPriceId)
}

if let priceId = chainAsset.asset.priceId, !priceIds.contains(priceId) {
priceIds.append(priceId)
}

priceProvider = subscribeToPrices(for: priceIds)
}
}

// MARK: - StakingPayoutConfirmationInteractorInputProtocol

extension StakingPayoutConfirmationInteractor: StakingPayoutConfirmationInteractorInputProtocol {
func setup() {
if let priceId = chainAsset.asset.priceId {
priceProvider = subscribeToPrice(for: priceId)
}

subscribeForPrices()
strategy.setup()
}

Expand All @@ -51,7 +61,7 @@ extension StakingPayoutConfirmationInteractor: StakingPayoutConfirmationInteract
}

extension StakingPayoutConfirmationInteractor: PriceLocalStorageSubscriber, PriceLocalSubscriptionHandler {
func handlePrice(result: Result<PriceData?, Error>, priceId _: AssetModel.PriceId) {
func handlePrices(result: Result<[PriceData], Error>) {
presenter?.didReceivePriceData(result: result)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ final class StakingPayoutConfirmationPresenter {
var wireframe: StakingPayoutConfirmationWireframeProtocol!
var interactor: StakingPayoutConfirmationInteractorInputProtocol!

private var priceData: PriceData?
private var pricesData: [PriceData] = []

private let balanceViewModelFactory: BalanceViewModelFactoryProtocol
private let payoutConfirmViewModelFactory: StakingPayoutConfirmationViewModelFactoryProtocol
Expand Down Expand Up @@ -88,13 +88,12 @@ extension StakingPayoutConfirmationPresenter: StakingPayoutConfirmationPresenter
// MARK: - StakingPayoutConfirmationInteractorOutputProtocol

extension StakingPayoutConfirmationPresenter: StakingPayoutConfirmationInteractorOutputProtocol {
func didReceivePriceData(result: Result<PriceData?, Error>) {
func didReceivePriceData(result: Result<[PriceData], Error>) {
switch result {
case let .success(priceData):
self.priceData = priceData
case let .success(pricesData):
self.pricesData = pricesData
provideFee()
provideViewModel()

case let .failure(error):
logger?.error("Price data subscription error: \(error)")
}
Expand Down Expand Up @@ -143,24 +142,27 @@ extension StakingPayoutConfirmationPresenter: StakingPayoutConfirmationModelStat

func provideFee() {
if let fee = viewModelState.fee {
let viewModel = balanceViewModelFactory.balanceFromPrice(fee, priceData: priceData, usageCase: .detailsCrypto)
let price = pricesData.first(where: { $0.priceId == chainAsset.chain.utilityChainAssets().first?.asset.priceId })
let viewModel = balanceViewModelFactory.balanceFromPrice(fee, priceData: price, usageCase: .detailsCrypto)
view?.didReceive(feeViewModel: viewModel)
} else {
view?.didReceive(feeViewModel: nil)
}
}

func provideViewModel() {
let price = pricesData.first(where: { $0.priceId == chainAsset.asset.priceId })

let viewModel = payoutConfirmViewModelFactory.createPayoutConfirmViewModel(
viewModelState: viewModelState,
priceData: priceData
priceData: price
)

view?.didRecieve(viewModel: viewModel)

let singleViewModel = payoutConfirmViewModelFactory.createSinglePayoutConfirmationViewModel(
viewModelState: viewModelState,
priceData: priceData
priceData: price
)

view?.didReceive(singleViewModel: singleViewModel)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ protocol StakingPayoutConfirmationInteractorInputProtocol: AnyObject {
}

protocol StakingPayoutConfirmationInteractorOutputProtocol: AnyObject {
func didReceivePriceData(result: Result<PriceData?, Error>)
func didReceivePriceData(result: Result<[PriceData], Error>)
}

protocol StakingPayoutConfirmationWireframeProtocol: SheetAlertPresentable,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ final class StakingPayoutConfirmationViewFactory: StakingPayoutConfirmationViewF
flow: StakingPayoutConfirmationFlow
) -> StakingPayoutConfirmationViewProtocol? {
let balanceViewModelFactory = BalanceViewModelFactory(
targetAssetInfo: chainAsset.asset.displayInfo,

targetAssetInfo: chainAsset.chain.utilityChainAssets().first?.asset.displayInfo ?? chainAsset.asset.displayInfo,
selectedMetaAccount: wallet
)

Expand Down