Manos Chorianopoulos

Merge remote-tracking branch 'origin/feat/analysis_vc' into swift_sdk_development

1 { 1 {
2 "pins" : [ 2 "pins" : [
3 { 3 {
4 + "identity" : "resegmentedcontrol",
5 + "kind" : "remoteSourceControl",
6 + "location" : "https://github.com/sh-khashimov/RESegmentedControl",
7 + "state" : {
8 + "revision" : "09d8cbd0da906c06d30fb057ab9902dc9d0e26b9",
9 + "version" : "0.5.1"
10 + }
11 + },
12 + {
4 "identity" : "rsbarcodes_swift", 13 "identity" : "rsbarcodes_swift",
5 "kind" : "remoteSourceControl", 14 "kind" : "remoteSourceControl",
6 "location" : "https://github.com/yeahdongcn/RSBarcodes_Swift", 15 "location" : "https://github.com/yeahdongcn/RSBarcodes_Swift",
......
1 +//
2 +// AnalysisChildViewController.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 18/7/22.
6 +//
7 +
8 +import UIKit
9 +
10 +class AnalysisChildViewController: UITableViewController {
11 +
12 + public var index: Int = -1
13 +}
1 +//
2 +// AnalysisHeaderMessageViewCell.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 18/7/22.
6 +//
7 +
8 +import UIKit
9 +
10 +class AnalysisHeaderMessageViewCell: UITableViewCell {
11 +
12 + // attributes
13 + @IBOutlet weak var itemImage: UIImageView!
14 + @IBOutlet weak var messageLabel: UILabel!
15 + @IBOutlet weak var titleLabel: UILabel!
16 +
17 + public var loyaltyBadge:swiftApi.LoyaltyBadgeModel = swiftApi().getLoyaltyBadge()
18 +
19 + // lifecycle
20 + override func awakeFromNib() {
21 + super.awakeFromNib()
22 +
23 + // image
24 + itemImage.image = UIImage(named: "ic_gift_circle", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil)
25 +
26 + // title
27 + titleLabel.textColor = UIColor(rgb: 0x435563)
28 + titleLabel.text = "Αναλυτικά:"
29 +
30 + // message
31 + messageLabel.textColor = UIColor(rgb: 0x435563)
32 + messageLabel.layer.borderWidth = 1.0
33 + messageLabel.layer.borderColor = UIColor(rgb: 0xB2CE69).cgColor
34 +
35 + let totalCouponDiscount = Float(round(100 * loyaltyBadge._value) / 100)
36 + var totalCouponDiscountString = "0"
37 + totalCouponDiscountString = String(format: "%.2f", totalCouponDiscount).replacingOccurrences(of: ".", with: ",", options: .literal, range: nil)
38 +
39 + messageLabel.text = "Μέχρι τώρα έχεις κερδίσει " + totalCouponDiscountString + "€ σε προσφορές από " + String(loyaltyBadge._couponCount) + " κουπόνια!"
40 + }
41 +}
42 +
43 +extension AnalysisHeaderMessageViewCell {
44 + func configureCell(item: AnalysisItem) {
45 +
46 + // TODO: TO BE IMPLEMENTED
47 + }
48 +}
1 +//
2 +// AnalysisHeaderViewCell.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 18/7/22.
6 +//
7 +
8 +import UIKit
9 +
10 +class AnalysisHeaderViewCell: UITableViewCell {
11 +
12 + // attributes
13 + @IBOutlet weak var itemImage: UIImageView!
14 + @IBOutlet weak var titleLabel: UILabel!
15 +
16 + // lifecycle
17 + override func awakeFromNib() {
18 + super.awakeFromNib()
19 +
20 + // image
21 + itemImage.image = UIImage(named: "ic_gift_circle", in: Bundle(for: MyEmptyClass.self), compatibleWith: nil)
22 +
23 + // title
24 + titleLabel.textColor = UIColor(rgb: 0x435563)
25 + titleLabel.text = "Αναλυτικά:"
26 + }
27 +}
28 +
29 +extension AnalysisHeaderViewCell {
30 + func configureCell(item: AnalysisItem) {
31 +
32 + // TODO: TO BE IMPLEMENTED
33 + }
34 +}
1 +//
2 +// AnalysisItem.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 18/7/22.
6 +//
7 +
8 +import UIKit
9 +
10 +public class AnalysisItem: Codable {
11 +
12 + // attributes
13 + public var date: Date
14 + public var image_url: String?
15 + public var title: String?
16 + public let subtitle: String?
17 + public var price: Float
18 +
19 + // initialization
20 + public init() {
21 + self.date = Date()
22 + self.image_url = ""
23 + self.title = ""
24 + self.subtitle = ""
25 + self.price = 4.0
26 + }
27 +}
1 +//
2 +// AnalysisItemViewCell.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 18/7/22.
6 +//
7 +
8 +import UIKit
9 +
10 +class AnalysisItemViewCell: UITableViewCell {
11 +
12 + @IBOutlet weak var dateLabel: UILabel!
13 + @IBOutlet weak var itemImage: UIImageView!
14 + @IBOutlet weak var titleLabel: UILabel!
15 + @IBOutlet weak var priceLabel: UILabel!
16 + @IBOutlet weak var subtitleLabel: UILabel!
17 +
18 + // lifecycle
19 + override func awakeFromNib() {
20 + super.awakeFromNib()
21 +
22 + // date
23 + dateLabel.textColor = UIColor(rgb: 0x435563)
24 +
25 + // title
26 + titleLabel.textColor = UIColor(rgb: 0x435563)
27 +
28 + // price
29 + priceLabel.textColor = UIColor(rgb: 0x435563)
30 +
31 + // subtitle
32 + subtitleLabel.textColor = UIColor(rgb: 0x8B97A3)
33 + }
34 +}
35 +
36 +extension AnalysisItemViewCell {
37 + func configureCell(item: swiftApi.SharingCouponModel) {
38 +
39 + dateLabel.text = item._date
40 + //itemImage.image =
41 + titleLabel.text = item._name
42 +
43 + let priceFloat = Float(round(100 * (Float(item._discount) ?? 0.0)) / 100)
44 + var priceString = "0"
45 + priceString = String(format: "%.2f", priceFloat).replacingOccurrences(of: ".", with: ",", options: .literal, range: nil)
46 + priceLabel.text = priceString + "€"
47 +
48 + if ("sent" == item._sharing_type) {
49 + subtitleLabel.text = String(format: "Εκπτωτικό κουπόνι προς " + item._receiver_msisdn)
50 + } else if ("received" == item._sharing_type) {
51 + subtitleLabel.text = String(format: "Εκπτωτικό κουπόνι από " + item._sender_msisdn)
52 + }
53 + }
54 +
55 + func configureCell(item: swiftApi.CouponItemModel) {
56 +
57 +// COUPONSET: desc, img_preview, name, terms
58 +// COUPON: coupon, expiration, discount, status
59 +
60 + let couponSetData: swiftApi.CouponSetItemModel? = item.couponset_data
61 +
62 + dateLabel.text = item.expiration ?? "" // TODO: change
63 + itemImage.load(link: couponSetData?.img_preview ?? "", placeholder: UIImage(), cache: URLCache())
64 + titleLabel.text = couponSetData?.name ?? ""
65 +
66 + let priceFloat = Float(round(100 * (Float(item.discount ?? "") ?? 0.0)) / 100)
67 + var priceString = "0"
68 + priceString = String(format: "%.2f", priceFloat).replacingOccurrences(of: ".", with: ",", options: .literal, range: nil)
69 + priceLabel.text = priceString + "€"
70 +
71 + subtitleLabel.text = couponSetData?.short_description ?? ""
72 +
73 + }
74 +}
1 +//
2 +// HistoryViewController.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 18/7/22.
6 +//
7 +
8 +import UIKit
9 +
10 +class HistoryViewController: AnalysisChildViewController {
11 +
12 + var loading: Bool = false
13 + var items: Array<swiftApi.CouponItemModel> = swiftApi().getCouponList()
14 +
15 + // TODO: remove this when configuring model
16 + let hasMessage = true
17 +
18 + // lifecycle
19 + override func viewDidLoad() {
20 +
21 + super.viewDidLoad()
22 +
23 + self.refreshControl = UIRefreshControl()
24 + self.refreshControl?.addTarget(self, action: #selector(handleRefresh(_:)), for: .valueChanged)
25 +
26 + handleRefresh(self.refreshControl!)
27 + }
28 +
29 + // mvp
30 + @objc func load() {
31 +
32 + if (loading) {
33 + return;
34 + }
35 +
36 + showLoading()
37 +
38 + items = swiftApi().getOldCouponList()
39 + showContent()
40 + self.tableView.reloadData()
41 + }
42 +
43 + private func showLoading() {
44 +
45 + loading = true
46 + if (self.refreshControl!.isRefreshing) {
47 + return;
48 + }
49 +
50 + self.refreshControl!.beginRefreshing()
51 + }
52 +
53 + private func showError() {
54 + }
55 +
56 + private func showContent() {
57 +
58 + loading = false
59 + self.refreshControl!.endRefreshing()
60 + }
61 +
62 + // private
63 + func responseCallback (_ data: Array<swiftApi.CouponItemModel>?) -> Void {
64 +
65 + self.items = data!
66 + showContent()
67 + DispatchQueue.main.async {
68 + self.tableView.reloadData()
69 + }
70 + }
71 +
72 + @objc func handleRefresh(_ refreshControl: UIRefreshControl) {
73 +
74 + self.perform(_: #selector(load), with: nil, afterDelay: 0.5)
75 + }
76 +
77 + // MARK: - Table view data source
78 + override func numberOfSections(in tableView: UITableView) -> Int {
79 + return 2
80 + }
81 +
82 + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
83 + if (section == 0) {
84 + return 1;
85 + }
86 +
87 + return items.count
88 + }
89 +
90 + override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
91 + if (indexPath.section == 0) {
92 + return hasMessage ? 380.0 : 280
93 + }
94 +
95 + return 140.0
96 + }
97 +
98 + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
99 +
100 + // header
101 + if (indexPath.section == 0) {
102 + if (hasMessage) {
103 + return tableView.dequeueReusableCell(withIdentifier: "AnalysisHeaderMessageViewCell", for: indexPath) as! AnalysisHeaderMessageViewCell
104 + }
105 +
106 + return tableView.dequeueReusableCell(withIdentifier: "AnalysisHeaderViewCell", for: indexPath) as! AnalysisHeaderViewCell
107 + }
108 +
109 + let cell = tableView.dequeueReusableCell(withIdentifier: "AnalysisItemViewCell", for: indexPath) as! AnalysisItemViewCell
110 + cell.configureCell(item: items[indexPath.row])
111 +
112 + return cell
113 + }
114 +}
...@@ -2,30 +2,133 @@ ...@@ -2,30 +2,133 @@
2 // LoyaltyAnalysisViewController.swift 2 // LoyaltyAnalysisViewController.swift
3 // SwiftWarplyFramework 3 // SwiftWarplyFramework
4 // 4 //
5 -// Created by Manos Chorianopoulos on 10/6/22. 5 +// Created by Manos Chorianopoulos on 18/7/22.
6 // 6 //
7 7
8 import UIKit 8 import UIKit
9 +import RESegmentedControl
9 10
10 @objc public class LoyaltyAnalysisViewController: UIViewController { 11 @objc public class LoyaltyAnalysisViewController: UIViewController {
11 12
13 + @IBOutlet weak var leftButton: UIButton!
14 + @IBOutlet weak var rightButton: UIButton!
15 + @IBOutlet weak var contentView: UIView!
16 + var pageController: UIPageViewController!
17 +
12 public override func viewDidLoad() { 18 public override func viewDidLoad() {
13 super.viewDidLoad() 19 super.viewDidLoad()
14 20
15 self.hidesBottomBarWhenPushed = true 21 self.hidesBottomBarWhenPushed = true
16 22
17 - // Do any additional setup after loading the view. 23 + // setup view
24 + setBackButton()
25 + setNavigationTitle("Ανάλυση")
26 +
27 + // tab
28 + leftButton.setTitle("Εξαργυρωμένα", for:.normal)
29 + leftButton.backgroundColor = . clear
30 + leftButton.setTitleColor(UIColor(rgb: 0x2EAFB9), for:.normal)
31 +
32 + rightButton.setTitle("Μοιρασμένα δώρα", for:.normal)
33 + rightButton.backgroundColor = . clear
34 + rightButton.setTitleColor(UIColor(rgb: 0x2EAFB9), for:.normal)
35 +
36 + // pages
37 + pageController = UIPageViewController(transitionStyle:.scroll, navigationOrientation:.horizontal)
38 + pageController.dataSource = self;
39 + pageController.delegate = self;
40 +
41 + pageController.view.frame = contentView.bounds;
42 + addChild(pageController)
43 + contentView.addSubview(pageController.view)
44 + pageController .didMove(toParent: self)
45 +
46 + let analysisVC = self.viewControllerAt(0)
47 + pageController.setViewControllers([analysisVC!], direction:.forward, animated:false)
48 + }
49 +
50 + ////////////////////////////////////////////////////////////////////////////////
51 + private func viewControllerAt(_ index:Int) -> AnalysisChildViewController?
52 + {
53 + let storyboard = UIStoryboard(name: "Main", bundle: nil)
54 +
55 + if (index == 1) {
56 + let analysisVC = storyboard.instantiateViewController(withIdentifier:"SharingHistoryViewController") as! SharingHistoryViewController
57 + analysisVC.index = index;
58 +
59 + return analysisVC;
18 } 60 }
19 61
62 + let analysisVC = storyboard.instantiateViewController(withIdentifier:"HistoryViewController") as! HistoryViewController
63 + analysisVC.index = index;
64 +
65 + return analysisVC;
66 + }
67 +
68 + // MARK: - Handlers
69 + @IBAction func handleLeft() {
70 +
71 + let analysisVC = self.viewControllerAt(0)
72 + pageController.setViewControllers([analysisVC!], direction:.reverse, animated:true)
73 + }
74 +
75 + @IBAction func handleRight() {
76 +
77 + let analysisVC = self.viewControllerAt(1)
78 + pageController.setViewControllers([analysisVC!], direction:.forward, animated:true)
79 + }
80 +}
81 +
82 +// MARK: - PageViewController
83 +extension LoyaltyAnalysisViewController: UIPageViewControllerDataSource, UIPageViewControllerDelegate {
20 84
21 - /* 85 + public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
22 - // MARK: - Navigation
23 86
24 - // In a storyboard-based application, you will often want to do a little preparation before navigation 87 + if let analysisVC = viewController as? AnalysisChildViewController {
25 - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 88 + var index = analysisVC.index
26 - // Get the new view controller using segue.destination. 89 + if (index == 1) {
27 - // Pass the selected object to the new view controller. 90 + return nil;
28 } 91 }
29 - */
30 92
93 + index += 1;
94 + return viewControllerAt(index);
95 + }
96 +
97 + return nil;
98 + }
99 +
100 + public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
101 +
102 + if let analysisVC = viewController as? AnalysisChildViewController {
103 + var index = analysisVC.index
104 + if (index == 0) {
105 + return nil;
106 + }
107 +
108 + index -= 1;
109 + return viewControllerAt(index);
110 + }
111 +
112 + return nil;
113 + }
114 +
115 +
116 + public func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
117 +
118 + if (!completed) {
119 + return;
120 + }
121 +
122 +
123 + if let childVCs = pageViewController.viewControllers as? [AnalysisChildViewController] {
124 + let currentIndex = childVCs[0].index
125 + if (currentIndex == 0) {
126 + leftButton.isSelected = true
127 + rightButton.isSelected = false
128 + } else {
129 + leftButton.isSelected = false
130 + rightButton.isSelected = true
131 + }
132 + }
133 + }
31 } 134 }
......
...@@ -63,6 +63,7 @@ ...@@ -63,6 +63,7 @@
63 - (NSDictionary*) getCoupons; 63 - (NSDictionary*) getCoupons;
64 - (NSDictionary*) getTransactionHistory; 64 - (NSDictionary*) getTransactionHistory;
65 - (NSDictionary*) getPointsHistory; 65 - (NSDictionary*) getPointsHistory;
66 +- (NSDictionary*) getSharingHistory;
66 - (NSDictionary*)addAddress:(NSString*)friendlyName andAddressName:(NSString*)addressName andAddressNumber:(NSString*)addressNumber andPostalCode:(NSString*)postalCode andFloorNumber:(NSNumber*)floorNumber andDoorbell:(NSString*)doorbel andRegion:(NSString*)region andLatitude:(NSString*)latitude andLongitude:(NSString*)longitude andNotes:(NSString*)notes; 67 - (NSDictionary*)addAddress:(NSString*)friendlyName andAddressName:(NSString*)addressName andAddressNumber:(NSString*)addressNumber andPostalCode:(NSString*)postalCode andFloorNumber:(NSNumber*)floorNumber andDoorbell:(NSString*)doorbel andRegion:(NSString*)region andLatitude:(NSString*)latitude andLongitude:(NSString*)longitude andNotes:(NSString*)notes;
67 - (NSDictionary*)getAddress; 68 - (NSDictionary*)getAddress;
68 - (NSDictionary*)editAddress:(NSString*)friendlyName andAddressName:(NSString*)addressName andAddressNumber:(NSString*)addressNumber andPostalCode:(NSString*)postalCode andFloorNumber:(NSNumber*)floorNumber andDoorbell:(NSString*)doorbel andRegion:(NSString*)region andLatitude:(NSString*)latitude andLongitude:(NSString*)longitude andNotes:(NSString*)notes andUuid:(NSString*)uuid; 69 - (NSDictionary*)editAddress:(NSString*)friendlyName andAddressName:(NSString*)addressName andAddressNumber:(NSString*)addressNumber andPostalCode:(NSString*)postalCode andFloorNumber:(NSNumber*)floorNumber andDoorbell:(NSString*)doorbel andRegion:(NSString*)region andLatitude:(NSString*)latitude andLongitude:(NSString*)longitude andNotes:(NSString*)notes andUuid:(NSString*)uuid;
......
...@@ -940,6 +940,35 @@ NSString *VERIFY_URL = @"/partners/cosmote/verify"; ...@@ -940,6 +940,35 @@ NSString *VERIFY_URL = @"/partners/cosmote/verify";
940 return resp; 940 return resp;
941 } 941 }
942 942
943 +- (NSDictionary*) getSharingHistory
944 +{
945 + __block NSDictionary *resp = [NSDictionary alloc];
946 + __block BOOL isRunLoopNested = NO;
947 + __block BOOL isOperationCompleted = NO;
948 + [[Warply sharedService] getSharingHistoryWithSuccessBlock:^(NSDictionary *response) {
949 + resp = response;
950 + isOperationCompleted = YES;
951 + if (isRunLoopNested) {
952 + CFRunLoopStop(CFRunLoopGetCurrent()); // CFRunLoopRun() returns
953 + }
954 + } failureBlock:^(NSError *error) {
955 + NSLog(@"%@", error);
956 + resp = nil;
957 + isOperationCompleted = YES;
958 + if (isRunLoopNested) {
959 + CFRunLoopStop(CFRunLoopGetCurrent()); // CFRunLoopRun() returns
960 + }
961 + }];
962 + if ( ! isOperationCompleted) {
963 + isRunLoopNested = YES;
964 + NSLog(@"Waiting...");
965 + CFRunLoopRun(); // Magic!
966 + isRunLoopNested = NO;
967 + }
968 + return resp;
969 +}
970 +
971 +
943 - (NSDictionary*)addAddress:(NSString*)friendlyName andAddressName:(NSString*)addressName andAddressNumber:(NSString*)addressNumber andPostalCode:(NSString*)postalCode andFloorNumber:(NSNumber*)floorNumber andDoorbell:(NSString*)doorbel andRegion:(NSString*)region andLatitude:(NSString*)latitude andLongitude:(NSString*)longitude andNotes:(NSString*)notes { 972 - (NSDictionary*)addAddress:(NSString*)friendlyName andAddressName:(NSString*)addressName andAddressNumber:(NSString*)addressNumber andPostalCode:(NSString*)postalCode andFloorNumber:(NSNumber*)floorNumber andDoorbell:(NSString*)doorbel andRegion:(NSString*)region andLatitude:(NSString*)latitude andLongitude:(NSString*)longitude andNotes:(NSString*)notes {
944 __block NSDictionary *resp = [NSDictionary alloc]; 973 __block NSDictionary *resp = [NSDictionary alloc];
945 __block BOOL isRunLoopNested = NO; 974 __block BOOL isRunLoopNested = NO;
......
1 +//
2 +// SharingHistoryViewController.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 18/7/22.
6 +//
7 +
8 +import UIKit
9 +
10 +class SharingHistoryViewController: AnalysisChildViewController {
11 +
12 + var loading: Bool = false
13 + var items: Array<swiftApi.SharingCouponModel> = Array()
14 +
15 + // TODO: remove this when configuring model
16 + let hasMessage = false
17 +
18 + // lifecycle
19 + override func viewDidLoad() {
20 +
21 + super.viewDidLoad()
22 +
23 + self.refreshControl = UIRefreshControl()
24 + self.refreshControl?.addTarget(self, action: #selector(handleRefresh(_:)), for: .valueChanged)
25 +
26 + handleRefresh(self.refreshControl!)
27 + }
28 +
29 + // mvp
30 + @objc func load() {
31 +
32 + if (loading) {
33 + return;
34 + }
35 +
36 + showLoading()
37 +
38 + swiftApi().getSharingHistoryAsync(responseCallback)
39 + }
40 +
41 + private func showLoading() {
42 +
43 + loading = true
44 + if (self.refreshControl!.isRefreshing) {
45 + return;
46 + }
47 +
48 + self.refreshControl!.beginRefreshing()
49 + }
50 +
51 + private func showError() {
52 + }
53 +
54 + private func showContent() {
55 +
56 + loading = false
57 + self.refreshControl!.endRefreshing()
58 + }
59 +
60 + // private
61 + func responseCallback (_ data: Array<swiftApi.SharingCouponModel>?) -> Void {
62 +
63 + self.items = data!
64 + showContent()
65 + DispatchQueue.main.async {
66 + self.tableView.reloadData()
67 + }
68 + }
69 +
70 + @objc func handleRefresh(_ refreshControl: UIRefreshControl) {
71 +
72 + self.perform(_: #selector(load), with: nil, afterDelay: 0.5)
73 + }
74 +
75 + // MARK: - Table view data source
76 + override func numberOfSections(in tableView: UITableView) -> Int {
77 + return 2
78 + }
79 +
80 + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
81 + if (section == 0) {
82 + return 1;
83 + }
84 +
85 + return items.count
86 + }
87 +
88 + override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
89 + if (indexPath.section == 0) {
90 + return hasMessage ? 380.0 : 280
91 + }
92 +
93 + return 140.0
94 + }
95 +
96 + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
97 +
98 + // header
99 + if (indexPath.section == 0) {
100 + if (hasMessage) {
101 + return tableView.dequeueReusableCell(withIdentifier: "AnalysisHeaderMessageViewCell", for: indexPath) as! AnalysisHeaderMessageViewCell
102 + }
103 +
104 + return tableView.dequeueReusableCell(withIdentifier: "AnalysisHeaderViewCell", for: indexPath) as! AnalysisHeaderViewCell
105 + }
106 +
107 + let cell = tableView.dequeueReusableCell(withIdentifier: "AnalysisItemViewCell", for: indexPath) as! AnalysisItemViewCell
108 + cell.configureCell(item: items[indexPath.row])
109 +
110 + return cell
111 + }
112 +}
1 +//
2 +// UIColorExtensions.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 18/7/22.
6 +//
7 +
8 +import Foundation
9 +import UIKit
10 +
11 +extension UIColor {
12 + convenience init(rgb: UInt) {
13 + self.init(
14 + red: CGFloat((rgb & 0xFF0000) >> 16) / 255.0,
15 + green: CGFloat((rgb & 0x00FF00) >> 8) / 255.0,
16 + blue: CGFloat(rgb & 0x0000FF) / 255.0,
17 + alpha: CGFloat(1.0)
18 + )
19 + }
20 +}
...@@ -156,7 +156,6 @@ public class swiftApi { ...@@ -156,7 +156,6 @@ public class swiftApi {
156 return GlobalVariables.dfyCoupons 156 return GlobalVariables.dfyCoupons
157 } 157 }
158 158
159 -
160 public class CouponSetItemModel: Codable { 159 public class CouponSetItemModel: Codable {
161 public let uuid: String? 160 public let uuid: String?
162 public let admin_name: String? 161 public let admin_name: String?
......