Showing
31 changed files
with
341 additions
and
8 deletions
No preview for this file type
| ... | @@ -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>1</integer> | 10 | + <integer>0</integer> |
| 11 | </dict> | 11 | </dict> |
| 12 | </dict> | 12 | </dict> |
| 13 | </dict> | 13 | </dict> | ... | ... |
| ... | @@ -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>0</integer> | 10 | + <integer>1</integer> |
| 11 | </dict> | 11 | </dict> |
| 12 | </dict> | 12 | </dict> |
| 13 | </dict> | 13 | </dict> | ... | ... |
No preview for this file type
This diff is collapsed. Click to expand it.
SwiftWarplyFramework/SwiftWarplyFramework/Media.xcassets/active_code_logo.imageset/Contents.json
0 → 100644
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "active_code_logo.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "active_code_logo-1.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "active_code_logo-2.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
38.7 KB
38.7 KB
38.7 KB
SwiftWarplyFramework/SwiftWarplyFramework/Media.xcassets/dfy_logo_white.imageset/Contents.json
0 → 100644
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "dfy_logo_white.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "dfy_logo_white-1.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "dfy_logo_white-2.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
28.4 KB
28.4 KB
SwiftWarplyFramework/SwiftWarplyFramework/Media.xcassets/dfy_logo_white.imageset/dfy_logo_white.png
0 → 100644
28.4 KB
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "heart.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "heart-1.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "heart-2.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
6.04 KB
6.04 KB
6.04 KB
SwiftWarplyFramework/SwiftWarplyFramework/Media.xcassets/ic_background_circle.imageset/Contents.json
0 → 100644
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "ic_background_circle.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "ic_background_circle-1.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "ic_background_circle-2.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
4.02 KB
4.02 KB
4.02 KB
SwiftWarplyFramework/SwiftWarplyFramework/Media.xcassets/wallet_coupons.imageset/Contents.json
0 → 100644
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "wallet_coupons.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "wallet_coupons-1.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "wallet_coupons-2.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
12.5 KB
12.5 KB
SwiftWarplyFramework/SwiftWarplyFramework/Media.xcassets/wallet_coupons.imageset/wallet_coupons.png
0 → 100644
12.5 KB
SwiftWarplyFramework/SwiftWarplyFramework/Media.xcassets/wallet_dfy_earn.imageset/Contents.json
0 → 100644
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "filename" : "wallet_dfy_earn.png", | ||
| 5 | + "idiom" : "universal", | ||
| 6 | + "scale" : "1x" | ||
| 7 | + }, | ||
| 8 | + { | ||
| 9 | + "filename" : "wallet_dfy_earn-1.png", | ||
| 10 | + "idiom" : "universal", | ||
| 11 | + "scale" : "2x" | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + "filename" : "wallet_dfy_earn-2.png", | ||
| 15 | + "idiom" : "universal", | ||
| 16 | + "scale" : "3x" | ||
| 17 | + } | ||
| 18 | + ], | ||
| 19 | + "info" : { | ||
| 20 | + "author" : "xcode", | ||
| 21 | + "version" : 1 | ||
| 22 | + } | ||
| 23 | +} |
15.3 KB
15.3 KB
15.3 KB
| ... | @@ -136,3 +136,55 @@ extension UIImageView { | ... | @@ -136,3 +136,55 @@ extension UIImageView { |
| 136 | } | 136 | } |
| 137 | } | 137 | } |
| 138 | } | 138 | } |
| 139 | + | ||
| 140 | +typealias GradientPoints = (startPoint: CGPoint, endPoint: CGPoint) | ||
| 141 | + | ||
| 142 | +enum GradientOrientation { | ||
| 143 | + case topRightBottomLeft | ||
| 144 | + case topLeftBottomRight | ||
| 145 | + case horizontal | ||
| 146 | + case vertical | ||
| 147 | + | ||
| 148 | + var startPoint : CGPoint { | ||
| 149 | + return points.startPoint | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + var endPoint : CGPoint { | ||
| 153 | + return points.endPoint | ||
| 154 | + } | ||
| 155 | + | ||
| 156 | + var points : GradientPoints { | ||
| 157 | + switch self { | ||
| 158 | + case .topRightBottomLeft: | ||
| 159 | + return (CGPoint(x: 0.0,y: 1.0), CGPoint(x: 1.0,y: 0.0)) | ||
| 160 | + case .topLeftBottomRight: | ||
| 161 | + return (CGPoint(x: 0.0,y: 0.0), CGPoint(x: 1,y: 1)) | ||
| 162 | + case .horizontal: | ||
| 163 | + return (CGPoint(x: 0.0,y: 0.5), CGPoint(x: 1.0,y: 0.5)) | ||
| 164 | + case .vertical: | ||
| 165 | + return (CGPoint(x: 0.0,y: 0.0), CGPoint(x: 0.0,y: 1.0)) | ||
| 166 | + } | ||
| 167 | + } | ||
| 168 | +} | ||
| 169 | + | ||
| 170 | +extension UIView { | ||
| 171 | + | ||
| 172 | + func applyGradient(colours: [UIColor], locations: [NSNumber]? = nil, cornerRadius: CGFloat) { | ||
| 173 | + let gradient = CAGradientLayer() | ||
| 174 | + gradient.frame = self.bounds | ||
| 175 | + gradient.colors = colours.map { $0.cgColor } | ||
| 176 | + gradient.locations = locations | ||
| 177 | + gradient.cornerRadius = cornerRadius | ||
| 178 | + self.layer.insertSublayer(gradient, at: 0) | ||
| 179 | + } | ||
| 180 | + | ||
| 181 | + func applyGradient(colours: [UIColor], gradient orientation: GradientOrientation, cornerRadius: CGFloat) { | ||
| 182 | + let gradient = CAGradientLayer() | ||
| 183 | + gradient.frame = self.bounds | ||
| 184 | + gradient.colors = colours.map { $0.cgColor } | ||
| 185 | + gradient.startPoint = orientation.startPoint | ||
| 186 | + gradient.endPoint = orientation.endPoint | ||
| 187 | + gradient.cornerRadius = cornerRadius | ||
| 188 | + self.layer.insertSublayer(gradient, at: 0) | ||
| 189 | + } | ||
| 190 | +} | ... | ... |
| ... | @@ -9,18 +9,161 @@ import Foundation | ... | @@ -9,18 +9,161 @@ import Foundation |
| 9 | import UIKit | 9 | import UIKit |
| 10 | 10 | ||
| 11 | @objc public class WalletViewController: UIViewController { | 11 | @objc public class WalletViewController: UIViewController { |
| 12 | + @IBOutlet weak var headerImage: UIImageView! | ||
| 13 | + @IBOutlet weak var profileImage: UIImageView! | ||
| 14 | + @IBOutlet weak var profileNameLabel: UILabel! | ||
| 15 | + @IBOutlet weak var questionnaireButton: UIButton! | ||
| 16 | + @IBOutlet weak var dfyEarnView: UIView! | ||
| 17 | + @IBOutlet weak var dfyEarnLabel: UILabel! | ||
| 18 | + @IBOutlet weak var dfyEarnAmountLabel: UILabel! | ||
| 19 | + @IBOutlet weak var dfyEarnImage: UIImageView! | ||
| 20 | + @IBOutlet weak var couponEarnView: UIView! | ||
| 21 | + @IBOutlet weak var couponEarnLabel: UILabel! | ||
| 22 | + @IBOutlet weak var couponEarnAmountLabel: UILabel! | ||
| 23 | + @IBOutlet weak var couponEarnImage: UIImageView! | ||
| 24 | + @IBOutlet weak var dfyLogoImage: UIImageView! | ||
| 25 | + @IBOutlet weak var activeCodeView: UIView! | ||
| 26 | + @IBOutlet weak var activeCodeLabel: UILabel! | ||
| 27 | + @IBOutlet weak var activeCodeExpirationLabel: UILabel! | ||
| 28 | + @IBOutlet weak var tableView: UITableView! | ||
| 29 | + @IBOutlet weak var activeCodeImage: UIImageView! | ||
| 12 | 30 | ||
| 13 | - @IBOutlet weak var activeGiftsButton: UIButton! | 31 | + public var coupons:Array<swiftApi.CouponItemModel> = [] |
| 32 | + | ||
| 33 | + public override func viewDidLoad() { | ||
| 34 | + super.viewDidLoad() | ||
| 35 | + | ||
| 36 | + getCouponsRequest() | ||
| 14 | 37 | ||
| 15 | - public override func viewWillAppear(_ animated: Bool) { | ||
| 16 | - super.viewWillAppear(animated) | ||
| 17 | setBackButton() | 38 | setBackButton() |
| 18 | - setNavigationTitle("My loyalty wallet") | 39 | + setNavigationTitle("For You") |
| 40 | + | ||
| 41 | + tableView.delegate = self | ||
| 42 | + tableView.dataSource = self | ||
| 43 | + | ||
| 44 | + headerImage.image = UIImage(named: "ic_background_circle", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil) | ||
| 45 | + dfyEarnImage.image = UIImage(named: "wallet_dfy_earn", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil) | ||
| 46 | + couponEarnImage.image = UIImage(named: "wallet_coupons", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil) | ||
| 47 | + dfyLogoImage.image = UIImage(named: "dfy_logo_white", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil) | ||
| 48 | + activeCodeImage.image = UIImage(named: "active_code_logo", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil) | ||
| 49 | + | ||
| 50 | + profileImage.layer.cornerRadius = 32.5 | ||
| 51 | + profileImage.layer.borderWidth = 1 | ||
| 52 | + profileImage.layer.borderColor = UIColor(red: 0.13, green: 0.66, blue: 0.71, alpha: 1.00).cgColor | ||
| 53 | + // TODO: dynamic | ||
| 54 | +// profileImage.load(link: profile_image ?? "", placeholder: UIImage(), cache: URLCache()) | ||
| 55 | + profileNameLabel.text = "Γιώργος Γεωργίου" | ||
| 56 | + | ||
| 57 | + // TODO: dynamic | ||
| 58 | + questionnaireButton.setTitle("Traveller", for: .normal) | ||
| 59 | + questionnaireButton.titleLabel?.font = UIFont.systemFont(ofSize: 13, weight: .semibold) | ||
| 60 | +// questionnaireButton.sizeToFit() | ||
| 61 | + questionnaireButton.frame = CGRect(x: 0.0, y: 0.0, width: questionnaireButton.intrinsicContentSize.width, height: questionnaireButton.intrinsicContentSize.height) | ||
| 62 | + questionnaireButton.applyGradient(colours: [UIColor(red: 0.40, green: 0.77, blue: 0.28, alpha: 1.00), UIColor(red: 0.10, green: 0.66, blue: 0.72, alpha: 1.00)], gradient: GradientOrientation.horizontal, cornerRadius: 7.0) | ||
| 63 | + // Shadow Color and Radius | ||
| 64 | + questionnaireButton.layer.shadowColor = UIColor(red: 0.33, green: 0.38, blue: 0.43, alpha: 1.00).cgColor | ||
| 65 | + questionnaireButton.layer.shadowOffset = CGSize(width: 0.0, height: 2.0) | ||
| 66 | + questionnaireButton.layer.shadowOpacity = 1.0 | ||
| 67 | + questionnaireButton.layer.shadowRadius = 0.0 | ||
| 68 | + questionnaireButton.layer.masksToBounds = false | ||
| 69 | + questionnaireButton.layer.cornerRadius = 7.0 | ||
| 70 | + | ||
| 71 | + dfyEarnView.layer.cornerRadius = 5.0 | ||
| 72 | + dfyEarnView.layer.shadowColor = UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 0.16).cgColor | ||
| 73 | + dfyEarnView.layer.shadowOffset = CGSize(width: 0.0, height: 3.0) | ||
| 74 | + dfyEarnView.layer.shadowOpacity = 1.0 | ||
| 75 | + dfyEarnView.layer.shadowRadius = 3.0 | ||
| 76 | + | ||
| 77 | + // TODO: dynamic | ||
| 78 | + dfyEarnLabel.text = "Μέχρι τώρα έχεις κερδίσει 18,00€ με το DEALS for YOU!" | ||
| 79 | + dfyEarnAmountLabel.text = "18,00€" | ||
| 80 | + | ||
| 81 | + couponEarnView.layer.cornerRadius = 5.0 | ||
| 82 | + couponEarnView.layer.shadowColor = UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 0.16).cgColor | ||
| 83 | + couponEarnView.layer.shadowOffset = CGSize(width: 0.0, height: 3.0) | ||
| 84 | + couponEarnView.layer.shadowOpacity = 1.0 | ||
| 85 | + couponEarnView.layer.shadowRadius = 3.0 | ||
| 86 | + | ||
| 87 | + // TODO: dynamic | ||
| 88 | + couponEarnLabel.text = "Μέχρι τώρα έχεις κερδίσει 20,00€ σε προσφορές από 3 κουπόνια!" | ||
| 89 | + couponEarnAmountLabel.text = "20,00€" | ||
| 90 | + | ||
| 91 | + activeCodeView.layer.cornerRadius = 5.0 | ||
| 92 | + activeCodeView.layer.shadowColor = UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 0.16).cgColor | ||
| 93 | + activeCodeView.layer.shadowOffset = CGSize(width: 0.0, height: 0.0) | ||
| 94 | + activeCodeView.layer.shadowOpacity = 1.0 | ||
| 95 | + activeCodeView.layer.shadowRadius = 6.0 | ||
| 96 | + | ||
| 97 | + // TODO: dynamic | ||
| 98 | + activeCodeLabel.text = "961544809" | ||
| 99 | + activeCodeExpirationLabel.text = "Λήγει σε 4 ημέρες" | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + // MARK: - API Functions | ||
| 103 | + func getCouponsRequest() { | ||
| 104 | + swiftApi().getCouponsAsync(getCouponsCallback) | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + func getCouponsCallback (_ couponsData: Array<swiftApi.CouponItemModel>?) -> Void { | ||
| 108 | + if (couponsData != nil) { | ||
| 109 | + let activeCouponData = swiftApi().filterActiveCoupons(couponsData ?? []) | ||
| 110 | + | ||
| 111 | + self.coupons = activeCouponData | ||
| 112 | + | ||
| 113 | + DispatchQueue.main.async { | ||
| 114 | + self.tableView.reloadData() | ||
| 115 | + } | ||
| 116 | + } else { | ||
| 117 | + self.coupons = [] | ||
| 118 | + } | ||
| 19 | } | 119 | } |
| 20 | 120 | ||
| 21 | - @IBAction func navigateToActiveGifts(_ sender: Any) { | 121 | + // MARK: - Actions |
| 122 | + @IBAction func qustionnaireButtonAction(_ sender: Any) { | ||
| 123 | + swiftApi().openQuestionnaire(self); | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + @IBAction func dfyEarnButtonAction(_ sender: Any) { | ||
| 127 | + // TODO: dfyEarnButtonAction | ||
| 128 | + print("dfyEarnButtonAction Tapped!") | ||
| 129 | + } | ||
| 130 | + @IBAction func couponEarnButtonAction(_ sender: Any) { | ||
| 131 | + // TODO: couponEarnButtonAction | ||
| 132 | + print("couponEarnButtonAction Tapped!") | ||
| 133 | + } | ||
| 134 | + | ||
| 135 | +} | ||
| 136 | + | ||
| 137 | +// MARK: - TableView | ||
| 138 | +extension WalletViewController: UITableViewDelegate, UITableViewDataSource{ | ||
| 139 | + | ||
| 140 | + public func numberOfSections(in tableView: UITableView) -> Int { | ||
| 141 | + return 1 | ||
| 142 | + } | ||
| 143 | + | ||
| 144 | + public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | ||
| 145 | + return self.coupons.count | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | ||
| 149 | + return 120.0 + 30.0 | ||
| 150 | +// return UITableViewAutomaticDimension | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | ||
| 154 | + let cell = tableView.dequeueReusableCell(withIdentifier: "CouponsTableViewCellId", for: indexPath) as! CouponsTableViewCell | ||
| 155 | + | ||
| 156 | + cell.configureCell(coupon: coupons[indexPath.row]) | ||
| 157 | + | ||
| 158 | + return cell | ||
| 159 | + } | ||
| 160 | + | ||
| 161 | + public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | ||
| 162 | + | ||
| 22 | let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self)) | 163 | let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self)) |
| 23 | - let vc = storyboard.instantiateViewController(withIdentifier: "ActiveGiftsViewController") as UIViewController | 164 | + let vc = storyboard.instantiateViewController(withIdentifier: "CouponBarcodeViewController") as! CouponBarcodeViewController |
| 165 | + vc.coupon = coupons[indexPath.row] | ||
| 24 | self.navigationController?.pushViewController(vc, animated: true) | 166 | self.navigationController?.pushViewController(vc, animated: true) |
| 167 | + | ||
| 25 | } | 168 | } |
| 26 | } | 169 | } | ... | ... |
-
Please register or login to post a comment