comparison Simoleon/Helpers/CurrencySelector.swift @ 77:1069c33d3a42

Added new method to show unlocked content
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Sat, 31 Jul 2021 17:09:58 +0100
parents b6f8661300f2
children 529feb1fc8d5
comparison
equal deleted inserted replaced
76:1f657241c28f 77:1069c33d3a42
10 10
11 struct CurrencySelector: View { 11 struct CurrencySelector: View {
12 @Binding var currencyPair: String 12 @Binding var currencyPair: String
13 @Binding var showingCurrencySelector: Bool 13 @Binding var showingCurrencySelector: Bool
14 14
15 @State private var entitlementIsActive = false
15 @State private var searchCurrency = "" 16 @State private var searchCurrency = ""
16 @State private var showingSubscriptionPaywall = false 17 @State private var showingSubscriptionPaywall = false
17 @State private var alertTitle = "" 18 @State private var alertTitle = ""
18 @State private var alertMessage = "" 19 @State private var alertMessage = ""
19 @State private var showingAlert = false 20 @State private var showingAlert = false
38 NavigationView { 39 NavigationView {
39 VStack { 40 VStack {
40 SearchBar(placeholder: "Search...", text: $searchCurrency) 41 SearchBar(placeholder: "Search...", text: $searchCurrency)
41 .padding() 42 .padding()
42 43
44 if entitlementIsActive {
43 List(searchResults, id: \.self) { currencyPair in 45 List(searchResults, id: \.self) { currencyPair in
44 Button(action: { select(currencyPair.name) }) { 46 Button(action: {
47 self.currencyPair = currencyPair.name
48 showingCurrencySelector = false
49 }) {
45 CurrencyRow(currencyPairName: currencyPair.name) 50 CurrencyRow(currencyPairName: currencyPair.name)
46 } 51 }
47 } 52 }
48 .id(UUID()) 53 .listStyle()
49 .listStyle(PlainListStyle()) 54 } else {
50 .gesture(DragGesture() 55 List(searchResults, id: \.self) { currencyPair in
51 .onChanged({ _ in 56 Button(action: { select(currencyPair) }) {
52 UIApplication.shared.dismissKeyboard() 57 CurrencyRow(currencyPairName: currencyPair.name, isLocked: currencyPair.isLocked)
53 }) 58 }
54 ) 59 }
60 .listStyle()
61 }
55 } 62 }
56 .navigationTitle("Currencies") 63 .navigationTitle("Currencies")
57 .navigationBarTitleDisplayMode(.inline) 64 .navigationBarTitleDisplayMode(.inline)
58 .toolbar { 65 .toolbar {
59 ToolbarItem(placement: .cancellationAction) { 66 ToolbarItem(placement: .cancellationAction) {
61 Text("Cancel") 68 Text("Cancel")
62 } 69 }
63 } 70 }
64 } 71 }
65 } 72 }
73 .onAppear(perform: checkEntitlement)
66 .alert(isPresented: $showingAlert) { 74 .alert(isPresented: $showingAlert) {
67 Alert(title: Text(alertTitle), message: Text(alertMessage), dismissButton: .default(Text("Ok"))) 75 Alert(title: Text(alertTitle), message: Text(alertMessage), dismissButton: .default(Text("Ok")))
68 } 76 }
69 .sheet(isPresented: $showingSubscriptionPaywall) { 77 .sheet(isPresented: $showingSubscriptionPaywall, onDismiss: checkEntitlement) {
70 SubscriptionPaywall(showingSubscriptionPaywall: $showingSubscriptionPaywall) 78 SubscriptionPaywall(showingSubscriptionPaywall: $showingSubscriptionPaywall)
71 } 79 }
72 } 80 }
73 81
74 /* 82 /*
75 If user is subscribed: 83 If user is subscribed:
76 * Select currency and dismiss currency selector 84 * Select currency and dismiss currency selector
77 else: 85 else:
78 * Show subscription paywall 86 * Show subscription paywall
79 */ 87 */
80 private func select(_ currencyPair: String) { 88 private func select(_ currencyPair: CurrencyPairModel) {
89 if currencyPair.isLocked {
90 showingSubscriptionPaywall = true
91 } else {
92 self.currencyPair = currencyPair.name
93 showingCurrencySelector = false
94 }
95 }
96
97 // Check if user subscription is active
98 private func checkEntitlement() {
81 Purchases.shared.purchaserInfo { (purchaserInfo, error) in 99 Purchases.shared.purchaserInfo { (purchaserInfo, error) in
82 if purchaserInfo?.entitlements["all"]?.isActive == true { 100 if purchaserInfo?.entitlements["all"]?.isActive == true {
83 self.currencyPair = currencyPair 101 entitlementIsActive = true
84 showingCurrencySelector = false
85 } else {
86 showingSubscriptionPaywall = true
87 } 102 }
88 103
89 if let error = error as NSError? { 104 if let error = error as NSError? {
90 alertTitle = error.localizedDescription 105 alertTitle = error.localizedDescription
91 alertMessage = error.localizedFailureReason ?? "" 106 alertMessage = error.localizedFailureReason ?? ""
92 showingAlert = true 107 showingAlert = true
93 } 108 }
94 } 109 }
110 }
111 }
112 extension View {
113 func listStyle() -> some View {
114 self.modifier(ListModifier())
95 } 115 }
96 } 116 }
97 117
98 118
99 struct CurrencySelector_Previews: PreviewProvider { 119 struct CurrencySelector_Previews: PreviewProvider {