This commit implements a single-tap zap on the profile action sheet and fixes an issue where zapping would silently fail on default settings if the user had no lightning wallet installed in their system. Testing ------- Configurations: - iPhone 13 Mini (physical device) on iOS 17.0.2 with NWC wallet attached - iPhone 15 Pro (simulator) on iOS 17.0.1 with no lightning wallet nor NWC Damus: This commit Coverage: - Zapping using NWC connected wallet: PASS (Zaps and shows UX feedback of the completed action) - Zapping under default settings and no lightning wallet: PASS (Shows the wallet selector invoice view) - Long press on zap button brings custom zap view Regression testing ------------------ Preconditions: iPhone 15 Pro (simulator) on iOS 17.0.1 with no lightning wallet nor NWC Coverage: - Zapping user on their full profile shows wallet selector. PASS - On-post invoice shows wallet selector. PASS Closes: https://github.com/damus-io/damus/issues/1634 Changelog-Changed: Zap button on profile action sheet now zaps with a single click, while a long press brings custom zap view Changelog-Fixed: Fixed an issue where zapping would silently fail on default settings if the user does not have a lightning wallet preinstalled on their device. Signed-off-by: Daniel D’Aquino <daniel@daquino.me> Reviewed-by: William Casarin <jb55@jb55.com> Signed-off-by: William Casarin <jb55@jb55.com>
101 lines
4.5 KiB
Swift
101 lines
4.5 KiB
Swift
//
|
|
// Wallet.swift
|
|
// damus
|
|
//
|
|
// Created by Benjamin Hakes on 12/29/22.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
enum Wallet: String, CaseIterable, Identifiable, StringCodable {
|
|
var id: String { self.rawValue }
|
|
|
|
struct Model: Identifiable, Hashable {
|
|
var id: String { self.tag }
|
|
var index: Int
|
|
var tag: String
|
|
var displayName : String
|
|
var link : String
|
|
var appStoreLink : String?
|
|
var image: String
|
|
}
|
|
|
|
func to_string() -> String {
|
|
return rawValue
|
|
}
|
|
|
|
init?(from string: String) {
|
|
guard let w = Wallet(rawValue: string) else {
|
|
return nil
|
|
}
|
|
self = w
|
|
}
|
|
|
|
// New url prefixes needed to be added to LSApplicationQueriesSchemes
|
|
case system_default_wallet
|
|
case strike
|
|
case cashapp
|
|
case muun
|
|
case bluewallet
|
|
case walletofsatoshi
|
|
case zebedee
|
|
case zeusln
|
|
case lnlink
|
|
case phoenix
|
|
case breez
|
|
case bitcoinbeach
|
|
case blixtwallet
|
|
case river
|
|
|
|
var model: Model {
|
|
switch self {
|
|
case .system_default_wallet:
|
|
return .init(index: -1, tag: "systemdefaultwallet", displayName: NSLocalizedString("Local default", comment: "Dropdown option label for system default for Lightning wallet."),
|
|
link: "lightning:", appStoreLink: nil, image: "")
|
|
case .strike:
|
|
return .init(index: 0, tag: "strike", displayName: "Strike", link: "strike:",
|
|
appStoreLink: "https://apps.apple.com/us/app/strike-bitcoin-payments/id1488724463", image: "strike")
|
|
case .cashapp:
|
|
return .init(index: 1, tag: "cashapp", displayName: "Cash App", link: "https://cash.app/launch/lightning/",
|
|
appStoreLink: "https://apps.apple.com/us/app/cash-app/id711923939", image: "cashapp")
|
|
case .muun:
|
|
return .init(index: 2, tag: "muun", displayName: "Muun", link: "muun:", appStoreLink: "https://apps.apple.com/us/app/muun-wallet/id1482037683", image: "muun")
|
|
case .bluewallet:
|
|
return .init(index: 3, tag: "bluewallet", displayName: "Blue Wallet", link: "bluewallet:lightning:",
|
|
appStoreLink: "https://apps.apple.com/us/app/bluewallet-bitcoin-wallet/id1376878040", image: "bluewallet")
|
|
case .walletofsatoshi:
|
|
return .init(index: 4, tag: "walletofsatoshi", displayName: "Wallet of Satoshi", link: "walletofsatoshi:lightning:",
|
|
appStoreLink: "https://apps.apple.com/us/app/wallet-of-satoshi/id1438599608", image: "walletofsatoshi")
|
|
case .zebedee:
|
|
return .init(index: 5, tag: "zebedee", displayName: "Zebedee", link: "zebedee:lightning:",
|
|
appStoreLink: "https://apps.apple.com/us/app/zebedee-wallet/id1484394401", image: "zebedee")
|
|
case .zeusln:
|
|
return .init(index: 6, tag: "zeusln", displayName: "Zeus LN", link: "zeusln:lightning:",
|
|
appStoreLink: "https://apps.apple.com/us/app/zeus-ln/id1456038895", image: "zeusln")
|
|
case .lnlink:
|
|
return .init(index: 7, tag: "lnlink", displayName: "LNLink", link: "lnlink:lightning:",
|
|
appStoreLink: "https://testflight.apple.com/join/aNY4yuuZ", image: "lnlink")
|
|
case .phoenix:
|
|
return .init(index: 8, tag: "phoenix", displayName: "Phoenix", link: "phoenix://",
|
|
appStoreLink: "https://apps.apple.com/us/app/phoenix-wallet/id1544097028", image: "phoenix")
|
|
case .breez:
|
|
return .init(index: 9, tag: "breez", displayName: "Breez", link: "breez:",
|
|
appStoreLink: "https://apps.apple.com/us/app/breez-lightning-client-pos/id1463604142", image: "breez")
|
|
case .bitcoinbeach:
|
|
return .init(index: 10, tag: "bitcoinbeach", displayName: "Bitcoin Beach", link: "bitcoinbeach://",
|
|
appStoreLink: "https://apps.apple.com/sv/app/bitcoin-beach-wallet/id1531383905", image: "bbw")
|
|
case .blixtwallet:
|
|
return .init(index: 11, tag: "blixtwallet", displayName: "Blixt Wallet", link: "blixtwallet:lightning:",
|
|
appStoreLink: "https://testflight.apple.com/join/EXvGhRzS", image: "blixt-wallet")
|
|
case .river:
|
|
return .init(index: 12, tag: "river", displayName: "River", link: "river://",
|
|
appStoreLink: "https://apps.apple.com/us/app/river-buy-mine-bitcoin/id1536176542", image: "river")
|
|
|
|
}
|
|
}
|
|
|
|
static var allModels: [Model] {
|
|
return Self.allCases.map { $0.model }
|
|
}
|
|
}
|