Manos Chorianopoulos

add CouponsViewController

Showing 17 changed files with 233 additions and 11 deletions
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
7 <key>Pods-SwiftWarplyFramework.xcscheme_^#shared#^_</key> 7 <key>Pods-SwiftWarplyFramework.xcscheme_^#shared#^_</key>
8 <dict> 8 <dict>
9 <key>orderHint</key> 9 <key>orderHint</key>
10 - <integer>0</integer> 10 + <integer>1</integer>
11 </dict> 11 </dict>
12 </dict> 12 </dict>
13 </dict> 13 </dict>
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
7 objects = { 7 objects = {
8 8
9 /* Begin PBXBuildFile section */ 9 /* Begin PBXBuildFile section */
10 + 1EA1AF0A2835346A008998AA /* CouponsTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EA1AF092835346A008998AA /* CouponsTableViewCell.swift */; };
10 7630AD9A6242D60846D6750C /* Pods_SwiftWarplyFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0D5F56DD4E5371A50AD2D87 /* Pods_SwiftWarplyFramework.framework */; }; 11 7630AD9A6242D60846D6750C /* Pods_SwiftWarplyFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0D5F56DD4E5371A50AD2D87 /* Pods_SwiftWarplyFramework.framework */; };
11 E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6A77852282933340045BBA8 /* SwiftWarplyFramework.docc */; }; 12 E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6A77852282933340045BBA8 /* SwiftWarplyFramework.docc */; };
12 E6A77854282933340045BBA8 /* SwiftWarplyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = E6A77851282933340045BBA8 /* SwiftWarplyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; 13 E6A77854282933340045BBA8 /* SwiftWarplyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = E6A77851282933340045BBA8 /* SwiftWarplyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
...@@ -137,6 +138,7 @@ ...@@ -137,6 +138,7 @@
137 /* End PBXBuildFile section */ 138 /* End PBXBuildFile section */
138 139
139 /* Begin PBXFileReference section */ 140 /* Begin PBXFileReference section */
141 + 1EA1AF092835346A008998AA /* CouponsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponsTableViewCell.swift; sourceTree = "<group>"; };
140 A9B7BE01A4E812DE49866EF8 /* Pods-SwiftWarplyFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWarplyFramework.debug.xcconfig"; path = "Target Support Files/Pods-SwiftWarplyFramework/Pods-SwiftWarplyFramework.debug.xcconfig"; sourceTree = "<group>"; }; 142 A9B7BE01A4E812DE49866EF8 /* Pods-SwiftWarplyFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWarplyFramework.debug.xcconfig"; path = "Target Support Files/Pods-SwiftWarplyFramework/Pods-SwiftWarplyFramework.debug.xcconfig"; sourceTree = "<group>"; };
141 B9EB8A451EF0C5AD75094EEE /* Pods-SwiftWarplyFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWarplyFramework.release.xcconfig"; path = "Target Support Files/Pods-SwiftWarplyFramework/Pods-SwiftWarplyFramework.release.xcconfig"; sourceTree = "<group>"; }; 143 B9EB8A451EF0C5AD75094EEE /* Pods-SwiftWarplyFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWarplyFramework.release.xcconfig"; path = "Target Support Files/Pods-SwiftWarplyFramework/Pods-SwiftWarplyFramework.release.xcconfig"; sourceTree = "<group>"; };
142 C0D5F56DD4E5371A50AD2D87 /* Pods_SwiftWarplyFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftWarplyFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 144 C0D5F56DD4E5371A50AD2D87 /* Pods_SwiftWarplyFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftWarplyFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
...@@ -320,6 +322,7 @@ ...@@ -320,6 +322,7 @@
320 isa = PBXGroup; 322 isa = PBXGroup;
321 children = ( 323 children = (
322 E6A7785E282933E40045BBA8 /* CouponsViewController.swift */, 324 E6A7785E282933E40045BBA8 /* CouponsViewController.swift */,
325 + 1EA1AF092835346A008998AA /* CouponsTableViewCell.swift */,
323 E6A7785D282933E40045BBA8 /* CouponViewController.swift */, 326 E6A7785D282933E40045BBA8 /* CouponViewController.swift */,
324 E6A77863282933E50045BBA8 /* DetailsViewController.swift */, 327 E6A77863282933E50045BBA8 /* DetailsViewController.swift */,
325 E6A778DE282933E60045BBA8 /* GiftsViewController.swift */, 328 E6A778DE282933E60045BBA8 /* GiftsViewController.swift */,
...@@ -750,6 +753,7 @@ ...@@ -750,6 +753,7 @@
750 E6A77935282933E70045BBA8 /* UIWebView+AFNetworking.m in Sources */, 753 E6A77935282933E70045BBA8 /* UIWebView+AFNetworking.m in Sources */,
751 E6A77925282933E70045BBA8 /* UIProgressView+AFNetworking.m in Sources */, 754 E6A77925282933E70045BBA8 /* UIProgressView+AFNetworking.m in Sources */,
752 E6A77944282933E70045BBA8 /* AFSecurityPolicy.m in Sources */, 755 E6A77944282933E70045BBA8 /* AFSecurityPolicy.m in Sources */,
756 + 1EA1AF0A2835346A008998AA /* CouponsTableViewCell.swift in Sources */,
753 E6A77A32282BA9C60045BBA8 /* CampaignViewController.swift in Sources */, 757 E6A77A32282BA9C60045BBA8 /* CampaignViewController.swift in Sources */,
754 E6A77917282933E60045BBA8 /* UIViewController+WLAdditions.m in Sources */, 758 E6A77917282933E60045BBA8 /* UIViewController+WLAdditions.m in Sources */,
755 E6A77943282933E70045BBA8 /* AFNetworkReachabilityManager.m in Sources */, 759 E6A77943282933E70045BBA8 /* AFNetworkReachabilityManager.m in Sources */,
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
7 <key>SwiftWarplyFramework.xcscheme_^#shared#^_</key> 7 <key>SwiftWarplyFramework.xcscheme_^#shared#^_</key>
8 <dict> 8 <dict>
9 <key>orderHint</key> 9 <key>orderHint</key>
10 - <integer>1</integer> 10 + <integer>0</integer>
11 </dict> 11 </dict>
12 </dict> 12 </dict>
13 </dict> 13 </dict>
......
...@@ -9,6 +9,7 @@ import UIKit ...@@ -9,6 +9,7 @@ import UIKit
9 9
10 class CouponViewController: UIViewController { 10 class CouponViewController: UIViewController {
11 @IBOutlet weak var mainView: UIView! 11 @IBOutlet weak var mainView: UIView!
12 + @IBOutlet weak var backgroundImage: UIImageView!
12 @IBOutlet weak var scrollView: UIScrollView! 13 @IBOutlet weak var scrollView: UIScrollView!
13 @IBOutlet weak var scrollContentView: UIView! 14 @IBOutlet weak var scrollContentView: UIView!
14 @IBOutlet weak var couponImageHeight: NSLayoutConstraint! 15 @IBOutlet weak var couponImageHeight: NSLayoutConstraint!
...@@ -28,6 +29,8 @@ class CouponViewController: UIViewController { ...@@ -28,6 +29,8 @@ class CouponViewController: UIViewController {
28 setBackButton() 29 setBackButton()
29 setNavigationTitle("Εκπτωτικό κουπόνι") 30 setNavigationTitle("Εκπτωτικό κουπόνι")
30 31
32 + backgroundImage.image = UIImage(named: "coupons_scrollview_white")
33 +
31 scrollView.clipsToBounds = true 34 scrollView.clipsToBounds = true
32 scrollView.layer.cornerRadius = 30 35 scrollView.layer.cornerRadius = 30
33 scrollView.layer.maskedCorners = [ .layerMinXMinYCorner] // Top left corner radius 36 scrollView.layer.maskedCorners = [ .layerMinXMinYCorner] // Top left corner radius
......
1 +//
2 +// CouponsTableViewCell.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 18/5/22.
6 +//
7 +
8 +import Foundation
9 +import UIKit
10 +import WarplySDKFrameworkIOS
11 +
12 +class CouponsTableViewCell: UITableViewCell {
13 + @IBOutlet weak var couponBgImage: UIImageView!
14 + @IBOutlet weak var couponImage: UIImageView!
15 + @IBOutlet weak var borderView: UIView!
16 + @IBOutlet weak var nameLabel: UILabel!
17 + @IBOutlet weak var dicountLabel: UILabel!
18 + @IBOutlet weak var discriptionLabel: UILabel!
19 + @IBOutlet weak var expirationLabel: UILabel!
20 +
21 +
22 + override func awakeFromNib() {
23 + super.awakeFromNib()
24 + // Initialization code
25 +
26 + couponBgImage.image = UIImage(named: "coupon_bg")
27 +
28 + borderView.addDashedBorderVertical(color: UIColor(red: 0.44, green: 0.44, blue: 0.44, alpha: 1.00), width: 1.0, height: 110.0)
29 + }
30 +
31 + override func setSelected(_ selected: Bool, animated: Bool) {
32 + super.setSelected(selected, animated: animated)
33 +
34 + // Configure the view for the selected state
35 + }
36 +
37 + override func layoutSubviews() {
38 + super.layoutSubviews()
39 + //set the values for top,left,bottom,right margins
40 + let margins = UIEdgeInsets(top: 0, left: 0, bottom: 30, right: 0)
41 + contentView.frame = contentView.frame.inset(by: margins)
42 + }
43 +
44 +
45 + func configureCell(coupon: swiftApi.CouponItemModel) {
46 +// COUPONSET: desc, img_preview, name, terms
47 +// COUPON: coupon, expiration, discount, status
48 +
49 + let couponSetData: swiftApi.CouponSetItemModel? = coupon.couponset_data
50 +
51 + couponImage.load(link: couponSetData?.img_preview ?? "", placeholder: UIImage(), cache: URLCache())
52 + nameLabel.text = couponSetData?.name ?? ""
53 + dicountLabel.text = (coupon.discount ?? "") + "€"
54 + discriptionLabel.text = couponSetData?.short_description ?? ""
55 + expirationLabel.text = "Ισχύει έως "+(coupon.expiration ?? "")
56 + }
57 +
58 +}
...@@ -7,21 +7,86 @@ ...@@ -7,21 +7,86 @@
7 7
8 import Foundation 8 import Foundation
9 import UIKit 9 import UIKit
10 +import WarplySDKFrameworkIOS
10 11
11 @objc public class CouponsViewController: UIViewController { 12 @objc public class CouponsViewController: UIViewController {
13 + @IBOutlet weak var backgroundImage: UIImageView!
14 + @IBOutlet weak var tableView: UITableView!
12 15
13 - @IBOutlet weak var couponButton: UIButton! 16 + var coupons:Array<swiftApi.CouponItemModel> = []
14 - 17 +
15 - public override func viewWillAppear(_ animated: Bool) { 18 + override func viewDidLoad() {
16 - super.viewWillAppear(animated) 19 + super.viewDidLoad()
20 +
21 + getCouponsRequest()
22 +
17 setBackButton() 23 setBackButton()
18 - setNavigationTitle("Εκπτωτικό κουπόνι") 24 + setNavigationTitle("Ενεργά κουπόνια")
25 +
26 + backgroundImage.image = UIImage(named: "coupons_scrollview_dark")
27 +
28 + tableView.delegate = self
29 + tableView.dataSource = self
30 +
31 + tableView.clipsToBounds = true
32 + tableView.layer.cornerRadius = 30
33 + tableView.layer.maskedCorners = [ .layerMinXMinYCorner] // Top left corner radius
34 + tableView.contentInset.top = 50
35 + }
36 +
37 +
38 +
39 + // MARK: - API Functions
40 + func getCouponsRequest() {
41 + swiftApi().getCouponsAsync(getCouponsCallback)
42 + }
43 +
44 + func getCouponsCallback (_ couponsData: Array<swiftApi.CouponItemModel>?) -> Void {
45 + if (couponsData != nil) {
46 + let activeCouponData = swiftApi().filterActiveCoupons(couponsData ?? [])
47 +
48 + self.coupons = activeCouponData
49 +
50 + DispatchQueue.main.async {
51 + self.tableView.reloadData()
52 + }
53 + } else {
54 + self.coupons = []
55 + }
56 + }
57 +
58 +}
59 +
60 +// MARK: - TableView
61 +extension CouponsViewController: UITableViewDelegate, UITableViewDataSource{
62 +
63 + func numberOfSections(in tableView: UITableView) -> Int {
64 + return 1
65 + }
66 +
67 + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
68 + return self.coupons.count
19 } 69 }
20 70
71 + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
72 + return 120.0 + 30.0
73 +// return UITableViewAutomaticDimension
74 + }
21 75
22 - @IBAction func navigateToCoupon(_ sender: Any) { 76 + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
23 - let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self)) 77 + let cell = tableView.dequeueReusableCell(withIdentifier: "CouponsTableViewCellId", for: indexPath) as! CouponsTableViewCell
24 - let vc = storyboard.instantiateViewController(withIdentifier: "CouponViewController") as UIViewController 78 +
25 - self.navigationController?.pushViewController(vc, animated: true) 79 + cell.configureCell(coupon: coupons[indexPath.row])
80 +
81 + return cell
26 } 82 }
83 +
84 + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
85 +
86 + // TODO: navigate to CouponBarcode
87 + // let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self))
88 + // let vc = storyboard.instantiateViewController(withIdentifier: "CouponBarcodeViewController") as UIViewController
89 + // self.navigationController?.pushViewController(vc, animated: true)
90 + }
91 +
27 } 92 }
......
1 +{
2 + "images" : [
3 + {
4 + "filename" : "coupon_bg.png",
5 + "idiom" : "universal",
6 + "scale" : "1x"
7 + },
8 + {
9 + "filename" : "coupon_bg-1.png",
10 + "idiom" : "universal",
11 + "scale" : "2x"
12 + },
13 + {
14 + "filename" : "coupon_bg-2.png",
15 + "idiom" : "universal",
16 + "scale" : "3x"
17 + }
18 + ],
19 + "info" : {
20 + "author" : "xcode",
21 + "version" : 1
22 + }
23 +}
1 +{
2 + "images" : [
3 + {
4 + "filename" : "coupons_scrollview_dark.png",
5 + "idiom" : "universal",
6 + "scale" : "1x"
7 + },
8 + {
9 + "filename" : "coupons_scrollview_dark-1.png",
10 + "idiom" : "universal",
11 + "scale" : "2x"
12 + },
13 + {
14 + "filename" : "coupons_scrollview_dark-2.png",
15 + "idiom" : "universal",
16 + "scale" : "3x"
17 + }
18 + ],
19 + "info" : {
20 + "author" : "xcode",
21 + "version" : 1
22 + }
23 +}
...@@ -63,3 +63,49 @@ extension String { ...@@ -63,3 +63,49 @@ extension String {
63 return htmlToAttributedString?.string ?? "" 63 return htmlToAttributedString?.string ?? ""
64 } 64 }
65 } 65 }
66 +
67 +extension UIView {
68 +
69 + func addDashedBorderVertical(color: UIColor, width: CGFloat, height: CGFloat) {
70 +
71 + let color = color.cgColor
72 + let frameSize = self.frame.size
73 +
74 + let lineLayer = CAShapeLayer()
75 + lineLayer.strokeColor = color
76 + lineLayer.lineWidth = width
77 + lineLayer.lineDashPattern = [5,5]
78 +
79 + let path = CGMutablePath()
80 + path.addLines(between: [CGPoint(x: frameSize.width/2, y: 0), CGPoint(x: frameSize.width/2, y: height)])
81 + lineLayer.path = path
82 + self.layer.addSublayer(lineLayer)
83 + }
84 +}
85 +
86 +extension UIImageView {
87 +
88 + func load(link: String, placeholder: UIImage?, cache: URLCache? = nil) {
89 + guard let url = URL(string: link) else { return }
90 +
91 + let cache = cache ?? URLCache.shared
92 + let request = URLRequest(url: url)
93 + if let data = cache.cachedResponse(for: request)?.data, let image = UIImage(data: data) {
94 + DispatchQueue.main.async {
95 + self.image = image
96 + }
97 + } else {
98 + self.image = placeholder
99 + URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in
100 + if let data = data, let response = response, ((response as? HTTPURLResponse)?.statusCode ?? 500) < 300, let image = UIImage(data: data) {
101 + let cachedData = CachedURLResponse(response: response, data: data)
102 + cache.storeCachedResponse(cachedData, for: request)
103 + DispatchQueue.main.async {
104 + self.image = image
105 + }
106 +
107 + }
108 + }).resume()
109 + }
110 + }
111 +}
......