Skip to content

Commit

Permalink
feat(swap): deeplink with from and to symbol
Browse files Browse the repository at this point in the history
  • Loading branch information
TrGiLong committed Jan 15, 2024
1 parent a505a92 commit 94ed10c
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 8 deletions.
12 changes: 11 additions & 1 deletion p2p_wallet/Scenes/Main/Swap/Swap/JupiterSwapCoordinator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ struct JupiterSwapParameters {

let inputMint: String?
let outputMint: String?

let inputSymbol: String?
let outputSymbol: String?

let dismissAfterCompletion: Bool
let openKeyboardOnStart: Bool
Expand All @@ -29,13 +32,18 @@ struct JupiterSwapParameters {
destinationWallet: SolanaAccount? = nil,
inputMint: String? = nil,
outputMint: String? = nil,
inputSymbol: String? = nil,
outputSymbol: String? = nil,
hideTabBar: Bool = false
) {
self.preChosenWallet = preChosenWallet
self.destinationWallet = destinationWallet

self.inputMint = inputMint
self.outputMint = outputMint

self.inputSymbol = inputSymbol
self.outputSymbol = outputSymbol

self.dismissAfterCompletion = dismissAfterCompletion
self.openKeyboardOnStart = openKeyboardOnStart
Expand Down Expand Up @@ -91,7 +99,9 @@ final class JupiterSwapCoordinator: Coordinator<Void> {
preChosenWallet: params.preChosenWallet,
destinationWallet: params.destinationWallet,
inputMint: params.inputMint,
outputMint: params.outputMint
outputMint: params.outputMint,
inputSymbol: params.inputSymbol,
outputSymbol: params.outputSymbol
)

// view
Expand Down
39 changes: 35 additions & 4 deletions p2p_wallet/Scenes/Main/Swap/Swap/SwapViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@ final class SwapViewModel: BaseViewModel, ObservableObject {
private var inputMint: String?
private var outputMint: String?

private var inputSymbol: String?
private var outputSymbol: String?

private var timer: Timer?
private let source: JupiterSwapSource
private var wasMinToastShown = false // Special flag not to show toast again if state has not changed
Expand All @@ -81,7 +84,9 @@ final class SwapViewModel: BaseViewModel, ObservableObject {
preChosenWallet: SolanaAccount? = nil,
destinationWallet: SolanaAccount? = nil,
inputMint: String? = nil,
outputMint: String? = nil
outputMint: String? = nil,
inputSymbol: String? = nil,
outputSymbol: String? = nil
) {
self.fromTokenInputViewModel = fromTokenInputViewModel
self.toTokenInputViewModel = toTokenInputViewModel
Expand All @@ -93,6 +98,9 @@ final class SwapViewModel: BaseViewModel, ObservableObject {
self.inputMint = inputMint
self.outputMint = outputMint

self.inputSymbol = inputSymbol
self.outputSymbol = outputSymbol

self.source = source
super.init()
bind()
Expand Down Expand Up @@ -253,15 +261,38 @@ private extension SwapViewModel {
}

func initialize(jupiterTokens: [TokenMetadata], routeMap: RouteMap) async {
func findTokenMintBySymbol(symbol: String?) -> String? {
guard let symbol else { return nil }

// We filter tokens by tags and symbol
let tokens = jupiterTokens
.filter { token in
token.tags.contains { tag in
["old-registry", "community", "wormhole"].contains(tag.name)
} && token.symbol == symbol
}

if tokens.count == 1 {
return tokens.first?.mintAddress
} else {
return nil
}
}

var preChosenFromTokenMintAddress = findTokenMintBySymbol(symbol: inputSymbol) ?? preChosenWallet?
.mintAddress ?? inputMint ?? Defaults
.fromTokenAddress
let preChosenToTokenMintAddress = findTokenMintBySymbol(symbol: outputSymbol) ?? destinationWallet?
.mintAddress ?? outputMint ?? Defaults.toTokenAddress

let newState = await stateMachine
.accept(
action: .initialize(
account: userWalletManager.wallet?.account,
jupiterTokens: jupiterTokens,
routeMap: routeMap,
preChosenFromTokenMintAddress: preChosenWallet?.mintAddress ?? inputMint ?? Defaults
.fromTokenAddress,
preChosenToTokenMintAddress: destinationWallet?.mintAddress ?? outputMint ?? Defaults.toTokenAddress
preChosenFromTokenMintAddress: preChosenFromTokenMintAddress,
preChosenToTokenMintAddress: preChosenToTokenMintAddress
)
)
if source != .tapMain {
Expand Down
19 changes: 16 additions & 3 deletions p2p_wallet/Scenes/TabBar/TabBarCoordinator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,17 @@ final class TabBarCoordinator: Coordinator<Void> {
let urlComponent = URLComponents(url: url, resolvingAgainstBaseURL: true)
let inputMint = urlComponent?.queryItems?.first { $0.name == "inputMint" }?.value
let outputMint = urlComponent?.queryItems?.first { $0.name == "outputMint" }?.value

self.routeToSwap(nc: vc, source: .tapToken, inputMint: inputMint, outputMint: outputMint)
let from = urlComponent?.queryItems?.first { $0.name == "from" }?.value
let to = urlComponent?.queryItems?.first { $0.name == "to" }?.value

self.routeToSwap(
nc: vc,
source: .tapToken,
inputMint: inputMint,
outputMint: outputMint,
inputSymbol: from,
outputSymbol: to
)
}
.store(in: &subscriptions)

Expand Down Expand Up @@ -228,7 +237,9 @@ final class TabBarCoordinator: Coordinator<Void> {
hidesBottomBarWhenPushed: Bool = true,
source: JupiterSwapSource,
inputMint: String? = nil,
outputMint: String? = nil
outputMint: String? = nil,
inputSymbol: String? = nil,
outputSymbol: String? = nil
) {
let swapCoordinator = JupiterSwapCoordinator(
navigationController: nc,
Expand All @@ -238,6 +249,8 @@ final class TabBarCoordinator: Coordinator<Void> {
source: source,
inputMint: inputMint,
outputMint: outputMint,
inputSymbol: inputSymbol,
outputSymbol: outputSymbol,
hideTabBar: hidesBottomBarWhenPushed
)
)
Expand Down

0 comments on commit 94ed10c

Please sign in to comment.