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> | ... | ... |
No preview for this file type
| ... | @@ -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 | } | ... | ... |
This diff is collapsed. Click to expand it.
SwiftWarplyFramework/SwiftWarplyFramework/Media.xcassets/coupon_bg.imageset/Contents.json
0 → 100644
| 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 | +} |
SwiftWarplyFramework/SwiftWarplyFramework/Media.xcassets/coupon_bg.imageset/coupon_bg-1.png
0 → 100644
2.28 KB
SwiftWarplyFramework/SwiftWarplyFramework/Media.xcassets/coupon_bg.imageset/coupon_bg-2.png
0 → 100644
2.28 KB
SwiftWarplyFramework/SwiftWarplyFramework/Media.xcassets/coupon_bg.imageset/coupon_bg.png
0 → 100644
2.28 KB
| 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 | +} |
9.93 KB
9.93 KB
9.93 KB
| ... | @@ -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 | +} | ... | ... |
-
Please register or login to post a comment