Mercurial > public > simoleon
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 { |