Showing
3 changed files
with
73 additions
and
62 deletions
No preview for this file type
... | @@ -124,8 +124,8 @@ extension CouponBarcodeView { | ... | @@ -124,8 +124,8 @@ extension CouponBarcodeView { |
124 | 124 | ||
125 | func constructBarcode() -> String? { | 125 | func constructBarcode() -> String? { |
126 | // EAN 13 barcode construction | 126 | // EAN 13 barcode construction |
127 | - // let couponData = coupon["coupon_data"] as? [String: Any] ?? ["":""] | 127 | + let couponData = coupon["coupon_data"] as? [String: Any] ?? ["":""] |
128 | - let couponString = coupon["coupon"] as? String ?? "" | 128 | + let couponString = couponData["coupon"] as? String ?? "" |
129 | 129 | ||
130 | if (!couponString.isEmpty) { | 130 | if (!couponString.isEmpty) { |
131 | var checkDigit = 0; | 131 | var checkDigit = 0; |
... | @@ -158,6 +158,7 @@ extension CouponBarcodeView { | ... | @@ -158,6 +158,7 @@ extension CouponBarcodeView { |
158 | 158 | ||
159 | 159 | ||
160 | var body: some View { | 160 | var body: some View { |
161 | + let couponData = coupon["coupon_data"] as? [String: Any] ?? ["":""] | ||
161 | let barcodeString = constructBarcode() ?? "" | 162 | let barcodeString = constructBarcode() ?? "" |
162 | 163 | ||
163 | GeometryReader { geometry in | 164 | GeometryReader { geometry in |
... | @@ -194,7 +195,7 @@ extension CouponBarcodeView { | ... | @@ -194,7 +195,7 @@ extension CouponBarcodeView { |
194 | 195 | ||
195 | VStack(alignment: .center) { | 196 | VStack(alignment: .center) { |
196 | VStack { | 197 | VStack { |
197 | - Text(coupon["coupon"] as? String ?? "") | 198 | + Text(couponData["coupon"] as? String ?? "") |
198 | .fontWeight(.bold) | 199 | .fontWeight(.bold) |
199 | .font(.system(size: 27)) | 200 | .font(.system(size: 27)) |
200 | .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | 201 | .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) |
... | @@ -209,7 +210,7 @@ extension CouponBarcodeView { | ... | @@ -209,7 +210,7 @@ extension CouponBarcodeView { |
209 | } | 210 | } |
210 | .frame(maxWidth: .infinity) | 211 | .frame(maxWidth: .infinity) |
211 | 212 | ||
212 | - if (CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: coupon["coupon"] as? String ?? ""))) { | 213 | + if (CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: couponData["coupon"] as? String ?? ""))) { |
213 | VStack(alignment: .center) { | 214 | VStack(alignment: .center) { |
214 | VStack {} | 215 | VStack {} |
215 | .frame(height: 1) | 216 | .frame(height: 1) |
... | @@ -284,7 +285,7 @@ extension CouponBarcodeView { | ... | @@ -284,7 +285,7 @@ extension CouponBarcodeView { |
284 | 285 | ||
285 | 286 | ||
286 | 287 | ||
287 | - Text("Το κουπόνι ισχύει έως " + CouponBarcodeView.couponContainer.convertDateFormat(inputDate: coupon["expiration"] as? String ?? "")) | 288 | + Text("Το κουπόνι ισχύει έως " + CouponBarcodeView.couponContainer.convertDateFormat(inputDate: couponData["expiration"] as? String ?? "")) |
288 | .fontWeight(.medium) | 289 | .fontWeight(.medium) |
289 | .font(.system(size: 14)) | 290 | .font(.system(size: 14)) |
290 | .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | 291 | .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) |
... | @@ -378,7 +379,7 @@ extension CouponBarcodeView { | ... | @@ -378,7 +379,7 @@ extension CouponBarcodeView { |
378 | // couponset = CouponSetItemModel(dictionary: coupon) | 379 | // couponset = CouponSetItemModel(dictionary: coupon) |
379 | 380 | ||
380 | print("==================") | 381 | print("==================") |
381 | - print(coupon["coupon"] as? String ?? "") | 382 | + print(couponData["coupon"] as? String ?? "") |
382 | print("==================") | 383 | print("==================") |
383 | 384 | ||
384 | print("========constructBarcode()==========") | 385 | print("========constructBarcode()==========") | ... | ... |
... | @@ -4,16 +4,13 @@ | ... | @@ -4,16 +4,13 @@ |
4 | // | 4 | // |
5 | // Created by Βασιλης Σκουρας on 13/1/22. | 5 | // Created by Βασιλης Σκουρας on 13/1/22. |
6 | // | 6 | // |
7 | - | ||
8 | #if canImport(SwiftUI) | 7 | #if canImport(SwiftUI) |
9 | import SwiftUI | 8 | import SwiftUI |
10 | import Combine | 9 | import Combine |
11 | import Foundation | 10 | import Foundation |
12 | import UIKit | 11 | import UIKit |
13 | - | ||
14 | class DataModel { | 12 | class DataModel { |
15 | var data: Array<NSDictionary> = [] | 13 | var data: Array<NSDictionary> = [] |
16 | - | ||
17 | init() { //initializer method | 14 | init() { //initializer method |
18 | let instanceOfMyApi = MyApi() | 15 | let instanceOfMyApi = MyApi() |
19 | let couponSets = instanceOfMyApi.getCouponSets(withActive: true, andVisible: true, andUuids: nil) | 16 | let couponSets = instanceOfMyApi.getCouponSets(withActive: true, andVisible: true, andUuids: nil) |
... | @@ -32,7 +29,9 @@ class DataModel { | ... | @@ -32,7 +29,9 @@ class DataModel { |
32 | // var temp = NSMutableDictionary(dictionary: s); | 29 | // var temp = NSMutableDictionary(dictionary: s); |
33 | if c["couponset_uuid"] as! String == s["uuid"] as! String { | 30 | if c["couponset_uuid"] as! String == s["uuid"] as! String { |
34 | var temp = NSMutableDictionary(dictionary: s); | 31 | var temp = NSMutableDictionary(dictionary: s); |
35 | - temp.addEntries(from: c as! [AnyHashable : Any]) | 32 | +// temp.addEntries(from: c as! [AnyHashable : Any]) |
33 | + | ||
34 | + temp.setValue(c as! [AnyHashable : Any],forKey: "coupon_data") | ||
36 | 35 | ||
37 | self.data.append(temp as NSDictionary) | 36 | self.data.append(temp as NSDictionary) |
38 | } | 37 | } |
... | @@ -45,14 +44,15 @@ class DataModel { | ... | @@ -45,14 +44,15 @@ class DataModel { |
45 | } | 44 | } |
46 | } | 45 | } |
47 | } | 46 | } |
48 | - | ||
49 | var getData: Array<NSDictionary> { | 47 | var getData: Array<NSDictionary> { |
50 | get { // getter | 48 | get { // getter |
51 | - return data | 49 | + return data.filter({ |
50 | + let couponData = $0["coupon_data"] as? [String: Any] ?? ["":""] | ||
51 | + return couponData["status"] as? Int == 1 | ||
52 | + }) | ||
52 | } | 53 | } |
53 | } | 54 | } |
54 | } | 55 | } |
55 | - | ||
56 | class ImageLoader: ObservableObject { | 56 | class ImageLoader: ObservableObject { |
57 | var didChange = PassthroughSubject<Data, Never>() | 57 | var didChange = PassthroughSubject<Data, Never>() |
58 | var data = Data() { | 58 | var data = Data() { |
... | @@ -60,7 +60,6 @@ class ImageLoader: ObservableObject { | ... | @@ -60,7 +60,6 @@ class ImageLoader: ObservableObject { |
60 | didChange.send(data) | 60 | didChange.send(data) |
61 | } | 61 | } |
62 | } | 62 | } |
63 | - | ||
64 | init(urlString:String) { | 63 | init(urlString:String) { |
65 | guard let url = URL(string: urlString) else { return } | 64 | guard let url = URL(string: urlString) else { return } |
66 | let task = URLSession.shared.dataTask(with: url) { data, response, error in | 65 | let task = URLSession.shared.dataTask(with: url) { data, response, error in |
... | @@ -72,15 +71,12 @@ class ImageLoader: ObservableObject { | ... | @@ -72,15 +71,12 @@ class ImageLoader: ObservableObject { |
72 | task.resume() | 71 | task.resume() |
73 | } | 72 | } |
74 | } | 73 | } |
75 | - | ||
76 | struct ImageView: View { | 74 | struct ImageView: View { |
77 | @ObservedObject var imageLoader:ImageLoader | 75 | @ObservedObject var imageLoader:ImageLoader |
78 | @State var image:UIImage = UIImage() | 76 | @State var image:UIImage = UIImage() |
79 | - | ||
80 | init(withURL url:String) { | 77 | init(withURL url:String) { |
81 | imageLoader = ImageLoader(urlString:url) | 78 | imageLoader = ImageLoader(urlString:url) |
82 | } | 79 | } |
83 | - | ||
84 | var body: some View { | 80 | var body: some View { |
85 | 81 | ||
86 | Image(uiImage: image) | 82 | Image(uiImage: image) |
... | @@ -91,7 +87,6 @@ struct ImageView: View { | ... | @@ -91,7 +87,6 @@ struct ImageView: View { |
91 | } | 87 | } |
92 | } | 88 | } |
93 | } | 89 | } |
94 | - | ||
95 | struct VLine: Shape { | 90 | struct VLine: Shape { |
96 | func path(in rect: CGRect) -> Path { | 91 | func path(in rect: CGRect) -> Path { |
97 | Path { path in | 92 | Path { path in |
... | @@ -100,7 +95,6 @@ struct VLine: Shape { | ... | @@ -100,7 +95,6 @@ struct VLine: Shape { |
100 | } | 95 | } |
101 | } | 96 | } |
102 | } | 97 | } |
103 | - | ||
104 | extension CouponsView { | 98 | extension CouponsView { |
105 | struct headerView: View { | 99 | struct headerView: View { |
106 | var goBack: () -> () | 100 | var goBack: () -> () |
... | @@ -118,6 +112,8 @@ extension CouponsView { | ... | @@ -118,6 +112,8 @@ extension CouponsView { |
118 | } | 112 | } |
119 | } | 113 | } |
120 | Text("Όλα τα κουπόνια μου") | 114 | Text("Όλα τα κουπόνια μου") |
115 | + .fontWeight(.medium) | ||
116 | + .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
121 | .frame(width: self.uiscreen.width * 0.8, height: self.uiscreen.height * 0.025, alignment: .center) | 117 | .frame(width: self.uiscreen.width * 0.8, height: self.uiscreen.height * 0.025, alignment: .center) |
122 | .offset( y: self.uiscreen.height * 0.02) | 118 | .offset( y: self.uiscreen.height * 0.02) |
123 | .font(.system(size: 15)) | 119 | .font(.system(size: 15)) |
... | @@ -129,9 +125,9 @@ extension CouponsView { | ... | @@ -129,9 +125,9 @@ extension CouponsView { |
129 | struct couponView: View { | 125 | struct couponView: View { |
130 | var result: NSDictionary | 126 | var result: NSDictionary |
131 | var index: Int | 127 | var index: Int |
128 | + var parentView: UIView | ||
132 | 129 | ||
133 | var uiscreen = UIScreen.main.bounds | 130 | var uiscreen = UIScreen.main.bounds |
134 | - | ||
135 | static func localizedWithParameter(parameter: String) -> LocalizedStringKey { | 131 | static func localizedWithParameter(parameter: String) -> LocalizedStringKey { |
136 | return "\(parameter)" | 132 | return "\(parameter)" |
137 | } | 133 | } |
... | @@ -139,52 +135,69 @@ extension CouponsView { | ... | @@ -139,52 +135,69 @@ extension CouponsView { |
139 | static func convertDateFormat(inputDate: String) -> String { | 135 | static func convertDateFormat(inputDate: String) -> String { |
140 | let olDateFormatter = DateFormatter() | 136 | let olDateFormatter = DateFormatter() |
141 | olDateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss" | 137 | olDateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss" |
142 | - | ||
143 | let oldDate = olDateFormatter.date(from: inputDate) | 138 | let oldDate = olDateFormatter.date(from: inputDate) |
144 | - | ||
145 | let convertDateFormatter = DateFormatter() | 139 | let convertDateFormatter = DateFormatter() |
146 | convertDateFormatter.dateFormat = "dd/MM/yyyy" | 140 | convertDateFormatter.dateFormat = "dd/MM/yyyy" |
147 | - | ||
148 | return convertDateFormatter.string(from: oldDate!) | 141 | return convertDateFormatter.string(from: oldDate!) |
149 | } | 142 | } |
150 | 143 | ||
151 | var body: some View { | 144 | var body: some View { |
145 | + let couponData = result["coupon_data"] as? [String: Any] ?? ["":""] | ||
152 | 146 | ||
153 | 147 | ||
154 | VStack(alignment: .leading) { | 148 | VStack(alignment: .leading) { |
155 | - HStack(alignment: .center) { | 149 | + Button { |
156 | - ImageView(withURL: result["img_preview"] as! String) | 150 | + // GiftItem Action |
157 | - .frame(maxWidth: self.uiscreen.width * 0.15) | 151 | + let instanceOfMyApi = MyApi() |
158 | - .padding(.leading , self.uiscreen.width * 0.055) | 152 | + let couponBarcodeViewController = instanceOfMyApi.openCouponBarcode(parentView, coupon: result as! [String : Any])! |
159 | - VLine() | 153 | + couponBarcodeViewController.view.tag = 7 |
160 | - .stroke(style: StrokeStyle(lineWidth: 1, dash: [5])) | 154 | + // addChild(couponsViewController) |
161 | - .foregroundColor(Color(red: 0.4392156862745098, green: 0.4392156862745098, blue: 0.4392156862745098)) | 155 | + couponBarcodeViewController.view.frame = parentView.frame |
162 | - .frame(width: 1) | 156 | + parentView.addSubview(couponBarcodeViewController.view) |
163 | - .padding(.leading, self.uiscreen.width * 0.01) | 157 | + couponBarcodeViewController.didMove(toParent: UIHostingController(rootView: self)) |
164 | - .padding(.top, self.uiscreen.height * 0.01) | 158 | + } label: { |
165 | - .padding(.bottom, self.uiscreen.height * 0.0075) | 159 | + HStack(alignment: .center) { |
166 | - Spacer() | 160 | + ImageView(withURL: result["img_preview"] as! String) |
167 | - VStack { | 161 | + .frame(maxWidth: self.uiscreen.width * 0.15) |
168 | - Text(CouponsView.couponView.localizedWithParameter(parameter: result["admin_name"] as? String ?? "")) | 162 | + .padding(.leading , self.uiscreen.width * 0.055) |
169 | - .frame(maxWidth: self.uiscreen.width * 0.35, maxHeight: .infinity, alignment: .leading) | 163 | + VLine() |
170 | - .font(.system(size: 15)) | 164 | + .stroke(style: StrokeStyle(lineWidth: 1, dash: [5])) |
171 | - Text(CouponsView.couponView.localizedWithParameter(parameter: result["discount"] as? String ?? "")) | 165 | + .foregroundColor(Color(red: 0.4392156862745098, green: 0.4392156862745098, blue: 0.4392156862745098)) |
172 | - .frame(maxWidth: self.uiscreen.width * 0.35, maxHeight: self.uiscreen.height * 0.05, alignment: .leading) | 166 | + .frame(width: 1) |
173 | - .font(.system(size: 47)) | 167 | + .padding(.leading, self.uiscreen.width * 0.01) |
174 | - Text(CouponsView.couponView.localizedWithParameter(parameter: "Ισχύει εώς " + CouponsView.couponView.convertDateFormat(inputDate: result["expiration"] as? String ?? ""))) | 168 | + .padding(.top, self.uiscreen.height * 0.01) |
175 | - .frame(maxWidth: self.uiscreen.width * 0.35, maxHeight: .infinity, alignment: .leading) | 169 | + .padding(.bottom, self.uiscreen.height * 0.0075) |
176 | - .font(.system(size: 10)) | 170 | + Spacer() |
177 | - } | 171 | + VStack { |
178 | - .frame(maxHeight: .infinity) | 172 | + Text(CouponsView.couponView.localizedWithParameter(parameter: result["name"] as? String ?? "")) |
179 | - .padding(.top, self.uiscreen.height * 0.03) | 173 | + .fontWeight(.medium) |
180 | - .padding(.bottom, self.uiscreen.height * 0.03) | 174 | + .foregroundColor(Color(red: 0.22745098039215686, green: 0.3215686274509804, blue: 0.4)) |
181 | - VStack { | 175 | + .frame(maxWidth: self.uiscreen.width * 0.35, maxHeight: .infinity, alignment: .leading) |
182 | - Text(CouponsView.couponView.localizedWithParameter(parameter: result["short_description"] as! String)) | 176 | + .font(.system(size: 15)) |
183 | - .frame(maxWidth: self.uiscreen.width * 0.22, maxHeight: self.uiscreen.height * 0.10) | 177 | + Text(CouponsView.couponView.localizedWithParameter(parameter: couponData["discount"] as? String ?? "")) |
184 | - .font(.system(size: 10)) | 178 | + .fontWeight(.bold) |
179 | + .foregroundColor(Color(red: 0.22745098039215686, green: 0.3215686274509804, blue: 0.4)) | ||
180 | + .frame(maxWidth: self.uiscreen.width * 0.35, maxHeight: self.uiscreen.height * 0.05, alignment: .leading) | ||
181 | + .font(.system(size: 47)) | ||
182 | + Text(CouponsView.couponView.localizedWithParameter(parameter: "Ισχύει εώς " + CouponsView.couponView.convertDateFormat(inputDate: couponData["expiration"] as? String ?? ""))) | ||
183 | + .fontWeight(.medium) | ||
184 | + .foregroundColor(Color(red: 0.3803921568627451, green: 0.44313725490196076, blue: 0.5058823529411764)) | ||
185 | + .frame(maxWidth: self.uiscreen.width * 0.35, maxHeight: .infinity, alignment: .leading) | ||
186 | + .font(.system(size: 10)) | ||
187 | + } | ||
188 | + .frame(maxHeight: .infinity) | ||
189 | + .padding(.top, self.uiscreen.height * 0.03) | ||
190 | + .padding(.bottom, self.uiscreen.height * 0.03) | ||
191 | + VStack { | ||
192 | + Text(CouponsView.couponView.localizedWithParameter(parameter: result["short_description"] as! String)) | ||
193 | + .fontWeight(.medium) | ||
194 | + .foregroundColor(Color(red: 0.3803921568627451, green: 0.44313725490196076, blue: 0.5058823529411764)) | ||
195 | + .frame(maxWidth: self.uiscreen.width * 0.22, maxHeight: self.uiscreen.height * 0.10) | ||
196 | + .font(.system(size: 10)) | ||
197 | + } | ||
198 | + .frame(maxWidth: self.uiscreen.width * 0.25, maxHeight: .infinity) | ||
199 | + Spacer() | ||
185 | } | 200 | } |
186 | - .frame(maxWidth: self.uiscreen.width * 0.25, maxHeight: .infinity) | ||
187 | - Spacer() | ||
188 | } | 201 | } |
189 | } | 202 | } |
190 | .frame(width: self.uiscreen.width * 0.95, height: self.uiscreen.height * 0.13) | 203 | .frame(width: self.uiscreen.width * 0.95, height: self.uiscreen.height * 0.13) |
... | @@ -198,10 +211,8 @@ extension CouponsView { | ... | @@ -198,10 +211,8 @@ extension CouponsView { |
198 | } | 211 | } |
199 | 212 | ||
200 | } | 213 | } |
201 | - | ||
202 | @available(iOS 13.0.0, *) | 214 | @available(iOS 13.0.0, *) |
203 | struct CouponsView: View { | 215 | struct CouponsView: View { |
204 | - | ||
205 | var data:Array<NSDictionary> = DataModel().getData | 216 | var data:Array<NSDictionary> = DataModel().getData |
206 | 217 | ||
207 | var parentView: UIView | 218 | var parentView: UIView |
... | @@ -219,11 +230,12 @@ struct CouponsView: View { | ... | @@ -219,11 +230,12 @@ struct CouponsView: View { |
219 | var body: some View { | 230 | var body: some View { |
220 | VStack { | 231 | VStack { |
221 | headerView(goBack: goBack) | 232 | headerView(goBack: goBack) |
222 | - ScrollView { | 233 | + ScrollView(showsIndicators: false) { |
223 | VStack { | 234 | VStack { |
224 | if (data.count) > 0 { | 235 | if (data.count) > 0 { |
225 | ForEach(Array(zip(data.indices, data)), id: \.0) { index, result in | 236 | ForEach(Array(zip(data.indices, data)), id: \.0) { index, result in |
226 | - couponView(result: result, index: index) } | 237 | + couponView(result: result, index: index, parentView: parentView) |
238 | + } | ||
227 | } | 239 | } |
228 | } | 240 | } |
229 | .padding(.top, self.uiscreen.height * 0.05) | 241 | .padding(.top, self.uiscreen.height * 0.05) |
... | @@ -239,7 +251,6 @@ struct CouponsView: View { | ... | @@ -239,7 +251,6 @@ struct CouponsView: View { |
239 | } | 251 | } |
240 | } | 252 | } |
241 | #endif | 253 | #endif |
242 | - | ||
243 | @available(iOS 13.0.0, *) | 254 | @available(iOS 13.0.0, *) |
244 | struct Previews_CouponsView_Previews: PreviewProvider { | 255 | struct Previews_CouponsView_Previews: PreviewProvider { |
245 | static var uiscreen = UIScreen.main.bounds | 256 | static var uiscreen = UIScreen.main.bounds |
... | @@ -253,6 +264,5 @@ struct Previews_CouponsView_Previews: PreviewProvider { | ... | @@ -253,6 +264,5 @@ struct Previews_CouponsView_Previews: PreviewProvider { |
253 | .frame(width: self.uiscreen.width * 0.8, height: self.uiscreen.height * 0.025, alignment: .center) | 264 | .frame(width: self.uiscreen.width * 0.8, height: self.uiscreen.height * 0.025, alignment: .center) |
254 | .offset( y: self.uiscreen.height * 0.07) | 265 | .offset( y: self.uiscreen.height * 0.07) |
255 | } | 266 | } |
256 | - | ||
257 | } | 267 | } |
258 | -} | 268 | +} |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment