Showing
10 changed files
with
215 additions
and
81 deletions
| ... | @@ -26,6 +26,7 @@ | ... | @@ -26,6 +26,7 @@ | 
| 26 | A07936792885EF9400064122 /* RESegmentedControl in Frameworks */ = {isa = PBXBuildFile; productRef = A07936782885EF9400064122 /* RESegmentedControl */; }; | 26 | A07936792885EF9400064122 /* RESegmentedControl in Frameworks */ = {isa = PBXBuildFile; productRef = A07936782885EF9400064122 /* RESegmentedControl */; }; | 
| 27 | A079367C2885F2F500064122 /* AnalysisHeaderViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A079367B2885F2F500064122 /* AnalysisHeaderViewCell.swift */; }; | 27 | A079367C2885F2F500064122 /* AnalysisHeaderViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A079367B2885F2F500064122 /* AnalysisHeaderViewCell.swift */; }; | 
| 28 | A079367E2885F60A00064122 /* AnalysisHeaderMessageViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A079367D2885F60A00064122 /* AnalysisHeaderMessageViewCell.swift */; }; | 28 | A079367E2885F60A00064122 /* AnalysisHeaderMessageViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A079367D2885F60A00064122 /* AnalysisHeaderMessageViewCell.swift */; }; | 
| 29 | + A09DBCAE2888BA8100DD50B0 /* SharingHistoryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A09DBCAD2888BA8100DD50B0 /* SharingHistoryViewController.swift */; }; | ||
| 29 | E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6A77852282933340045BBA8 /* SwiftWarplyFramework.docc */; }; | 30 | E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6A77852282933340045BBA8 /* SwiftWarplyFramework.docc */; }; | 
| 30 | E6A77854282933340045BBA8 /* SwiftWarplyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = E6A77851282933340045BBA8 /* SwiftWarplyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; | 31 | E6A77854282933340045BBA8 /* SwiftWarplyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = E6A77851282933340045BBA8 /* SwiftWarplyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; | 
| 31 | E6A778DF282933E60045BBA8 /* WarplyReactMethods.m in Sources */ = {isa = PBXBuildFile; fileRef = E6A7785B282933E40045BBA8 /* WarplyReactMethods.m */; }; | 32 | E6A778DF282933E60045BBA8 /* WarplyReactMethods.m in Sources */ = {isa = PBXBuildFile; fileRef = E6A7785B282933E40045BBA8 /* WarplyReactMethods.m */; }; | 
| ... | @@ -170,6 +171,7 @@ | ... | @@ -170,6 +171,7 @@ | 
| 170 | A07936752885E9CC00064122 /* UIColorExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColorExtensions.swift; sourceTree = "<group>"; }; | 171 | A07936752885E9CC00064122 /* UIColorExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColorExtensions.swift; sourceTree = "<group>"; }; | 
| 171 | A079367B2885F2F500064122 /* AnalysisHeaderViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalysisHeaderViewCell.swift; sourceTree = "<group>"; }; | 172 | A079367B2885F2F500064122 /* AnalysisHeaderViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalysisHeaderViewCell.swift; sourceTree = "<group>"; }; | 
| 172 | A079367D2885F60A00064122 /* AnalysisHeaderMessageViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalysisHeaderMessageViewCell.swift; sourceTree = "<group>"; }; | 173 | A079367D2885F60A00064122 /* AnalysisHeaderMessageViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalysisHeaderMessageViewCell.swift; sourceTree = "<group>"; }; | 
| 174 | + A09DBCAD2888BA8100DD50B0 /* SharingHistoryViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharingHistoryViewController.swift; sourceTree = "<group>"; }; | ||
| 173 | 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>"; }; | 175 | 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>"; }; | 
| 174 | 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>"; }; | 176 | 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>"; }; | 
| 175 | C0D5F56DD4E5371A50AD2D87 /* Pods_SwiftWarplyFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftWarplyFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | 177 | C0D5F56DD4E5371A50AD2D87 /* Pods_SwiftWarplyFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftWarplyFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | 
| ... | @@ -331,6 +333,7 @@ | ... | @@ -331,6 +333,7 @@ | 
| 331 | A079367A2885F2D100064122 /* cells */, | 333 | A079367A2885F2D100064122 /* cells */, | 
| 332 | 1EB5F4C9285370C90016F36E /* LoyaltyAnalysisViewController.swift */, | 334 | 1EB5F4C9285370C90016F36E /* LoyaltyAnalysisViewController.swift */, | 
| 333 | A079366D2885D07700064122 /* AnalysisChildViewController.swift */, | 335 | A079366D2885D07700064122 /* AnalysisChildViewController.swift */, | 
| 336 | + A09DBCAD2888BA8100DD50B0 /* SharingHistoryViewController.swift */, | ||
| 334 | ); | 337 | ); | 
| 335 | name = analysis; | 338 | name = analysis; | 
| 336 | sourceTree = "<group>"; | 339 | sourceTree = "<group>"; | 
| ... | @@ -837,6 +840,7 @@ | ... | @@ -837,6 +840,7 @@ | 
| 837 | E6A7794B282933E70045BBA8 /* FMDatabase.m in Sources */, | 840 | E6A7794B282933E70045BBA8 /* FMDatabase.m in Sources */, | 
| 838 | E6A778EC282933E60045BBA8 /* WLNativeVideoTableViewCell.m in Sources */, | 841 | E6A778EC282933E60045BBA8 /* WLNativeVideoTableViewCell.m in Sources */, | 
| 839 | E6A77954282933E70045BBA8 /* MyApi.m in Sources */, | 842 | E6A77954282933E70045BBA8 /* MyApi.m in Sources */, | 
| 843 | + A09DBCAE2888BA8100DD50B0 /* SharingHistoryViewController.swift in Sources */, | ||
| 840 | E6A778F2282933E60045BBA8 /* WLNativeAdCollectionViewCell.m in Sources */, | 844 | E6A778F2282933E60045BBA8 /* WLNativeAdCollectionViewCell.m in Sources */, | 
| 841 | E6A77904282933E60045BBA8 /* WLEvent.m in Sources */, | 845 | E6A77904282933E60045BBA8 /* WLEvent.m in Sources */, | 
| 842 | E6A77927282933E70045BBA8 /* UIRefreshControl+AFNetworking.m in Sources */, | 846 | E6A77927282933E70045BBA8 /* UIRefreshControl+AFNetworking.m in Sources */, | ... | ... | 
| ... | @@ -10,78 +10,4 @@ import UIKit | ... | @@ -10,78 +10,4 @@ import UIKit | 
| 10 | class AnalysisChildViewController: UITableViewController { | 10 | class AnalysisChildViewController: UITableViewController { | 
| 11 | 11 | ||
| 12 | public var index: Int = -1 | 12 | public var index: Int = -1 | 
| 13 | - var items: Array<AnalysisItem> = Array() | ||
| 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 | - loadData() | ||
| 27 | - } | ||
| 28 | - | ||
| 29 | - // mvp | ||
| 30 | - private func loadData() { | ||
| 31 | - | ||
| 32 | - self.items = Array() | ||
| 33 | - } | ||
| 34 | - | ||
| 35 | - private func showLoading() { | ||
| 36 | - } | ||
| 37 | - | ||
| 38 | - private func showError() { | ||
| 39 | - } | ||
| 40 | - | ||
| 41 | - private func showContent() { | ||
| 42 | - } | ||
| 43 | - | ||
| 44 | - // private | ||
| 45 | - @objc func handleRefresh(_ refreshControl: UIRefreshControl) { | ||
| 46 | - | ||
| 47 | - loadData() | ||
| 48 | - } | ||
| 49 | - | ||
| 50 | - // MARK: - Table view data source | ||
| 51 | - override func numberOfSections(in tableView: UITableView) -> Int { | ||
| 52 | - return 2 | ||
| 53 | - } | ||
| 54 | - | ||
| 55 | - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | ||
| 56 | - if (section == 0) { | ||
| 57 | - return 1; | ||
| 58 | - } | ||
| 59 | - | ||
| 60 | - return items.count | ||
| 61 | - } | ||
| 62 | - | ||
| 63 | - override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | ||
| 64 | - if (indexPath.section == 0) { | ||
| 65 | - return hasMessage ? 380.0 : 280 | ||
| 66 | - } | ||
| 67 | - | ||
| 68 | - return 160.0 | ||
| 69 | - } | ||
| 70 | - | ||
| 71 | - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | ||
| 72 | - | ||
| 73 | - // header | ||
| 74 | - if (indexPath.section == 0) { | ||
| 75 | - if (hasMessage) { | ||
| 76 | - return tableView.dequeueReusableCell(withIdentifier: "AnalysisHeaderMessageViewCell", for: indexPath) as! AnalysisHeaderMessageViewCell | ||
| 77 | - } | ||
| 78 | - | ||
| 79 | - return tableView.dequeueReusableCell(withIdentifier: "AnalysisHeaderViewCell", for: indexPath) as! AnalysisHeaderViewCell | ||
| 80 | - } | ||
| 81 | - | ||
| 82 | - let cell = tableView.dequeueReusableCell(withIdentifier: "AnalysisItemViewCell", for: indexPath) as! AnalysisItemViewCell | ||
| 83 | - cell.configureCell(item: items[indexPath.row]) | ||
| 84 | - | ||
| 85 | - return cell | ||
| 86 | - } | ||
| 87 | } | 13 | } | ... | ... | 
| ... | @@ -34,17 +34,17 @@ class AnalysisItemViewCell: UITableViewCell { | ... | @@ -34,17 +34,17 @@ class AnalysisItemViewCell: UITableViewCell { | 
| 34 | } | 34 | } | 
| 35 | 35 | ||
| 36 | extension AnalysisItemViewCell { | 36 | extension AnalysisItemViewCell { | 
| 37 | - func configureCell(item: AnalysisItem) { | 37 | + func configureCell(item: swiftApi.SharingCouponModel) { | 
| 38 | 38 | ||
| 39 | // TODO: this is not optimal. we need a static date formatter. we cannot instantiate a new object each time we render a new item. | 39 | // TODO: this is not optimal. we need a static date formatter. we cannot instantiate a new object each time we render a new item. | 
| 40 | let dateFormatter = DateFormatter() | 40 | let dateFormatter = DateFormatter() | 
| 41 | dateFormatter.dateFormat = "dd-MM-yyyy" | 41 | dateFormatter.dateFormat = "dd-MM-yyyy" | 
| 42 | 42 | ||
| 43 | - dateLabel.text = dateFormatter.string(from: item.date) | 43 | +// dateLabel.text = dateFormatter.string(from: item.date) | 
| 44 | //itemImage.image = | 44 | //itemImage.image = | 
| 45 | - titleLabel.text = item.title | 45 | +// titleLabel.text = item.name | 
| 46 | - priceLabel.text = String(format: "%.2f€", item.price) | 46 | +// priceLabel.text = String(format: "%.2f€", item.discount) | 
| 47 | - subtitleLabel.text = item.subtitle | 47 | +// subtitleLabel.text = item.subtitle | 
| 48 | 48 | ||
| 49 | } | 49 | } | 
| 50 | } | 50 | } | ... | ... | 
| ... | @@ -29,7 +29,7 @@ import RESegmentedControl | ... | @@ -29,7 +29,7 @@ import RESegmentedControl | 
| 29 | return titles.map({ SegmentModel(title: $0) }) | 29 | return titles.map({ SegmentModel(title: $0) }) | 
| 30 | } | 30 | } | 
| 31 | 31 | ||
| 32 | - let preset = BootstapPreset(backgroundColor: .white, selectedBackgroundColor: .white, border) | 32 | + let preset = BootstapPreset(backgroundColor: .white, selectedBackgroundColor: .white) | 
| 33 | tabView.configure(segmentItems: segmentItems, preset: preset) | 33 | tabView.configure(segmentItems: segmentItems, preset: preset) | 
| 34 | 34 | ||
| 35 | // pages | 35 | // pages | 
| ... | @@ -46,6 +46,13 @@ import RESegmentedControl | ... | @@ -46,6 +46,13 @@ import RESegmentedControl | 
| 46 | //////////////////////////////////////////////////////////////////////////////// | 46 | //////////////////////////////////////////////////////////////////////////////// | 
| 47 | private func viewControllerAt(_ index:Int) -> AnalysisChildViewController? | 47 | private func viewControllerAt(_ index:Int) -> AnalysisChildViewController? | 
| 48 | { | 48 | { | 
| 49 | + if (index == 1) { | ||
| 50 | + let analysisVC = SharingHistoryViewController() | ||
| 51 | + analysisVC.index = index; | ||
| 52 | + | ||
| 53 | + return analysisVC; | ||
| 54 | + } | ||
| 55 | + | ||
| 49 | let analysisVC = AnalysisChildViewController() | 56 | let analysisVC = AnalysisChildViewController() | 
| 50 | analysisVC.index = index; | 57 | analysisVC.index = index; | 
| 51 | 58 | ... | ... | 
| ... | @@ -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 = 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 | + // TODO: Implement API call | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + private func showLoading() { | ||
| 41 | + | ||
| 42 | + loading = true | ||
| 43 | + if (self.refreshControl!.isRefreshing) { | ||
| 44 | + return; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + self.refreshControl!.beginRefreshing() | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + private func showError() { | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + private func showContent() { | ||
| 54 | + | ||
| 55 | + loading = true | ||
| 56 | + self.refreshControl!.endRefreshing() | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + // private | ||
| 60 | + func responseCallback (_ data: Array<swiftApi.SharingCouponModel>?) -> Void { | ||
| 61 | + | ||
| 62 | + self.items = data! | ||
| 63 | + showContent() | ||
| 64 | + DispatchQueue.main.async { | ||
| 65 | + self.tableView.reloadData() | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + @objc func handleRefresh(_ refreshControl: UIRefreshControl) { | ||
| 70 | + | ||
| 71 | + self.perform(_: #selector(load), with: nil, afterDelay: 0.5) | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + // MARK: - Table view data source | ||
| 75 | + override func numberOfSections(in tableView: UITableView) -> Int { | ||
| 76 | + return 2 | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | ||
| 80 | + if (section == 0) { | ||
| 81 | + return 1; | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + return items.count | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | ||
| 88 | + if (indexPath.section == 0) { | ||
| 89 | + return hasMessage ? 380.0 : 280 | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + return 160.0 | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | ||
| 96 | + | ||
| 97 | + // header | ||
| 98 | + if (indexPath.section == 0) { | ||
| 99 | + if (hasMessage) { | ||
| 100 | + return tableView.dequeueReusableCell(withIdentifier: "AnalysisHeaderMessageViewCell", for: indexPath) as! AnalysisHeaderMessageViewCell | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + return tableView.dequeueReusableCell(withIdentifier: "AnalysisHeaderViewCell", for: indexPath) as! AnalysisHeaderViewCell | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + let cell = tableView.dequeueReusableCell(withIdentifier: "AnalysisItemViewCell", for: indexPath) as! AnalysisItemViewCell | ||
| 107 | + cell.configureCell(item: items[indexPath.row]) | ||
| 108 | + | ||
| 109 | + return cell | ||
| 110 | + } | ||
| 111 | +} | 
| ... | @@ -352,6 +352,8 @@ WL_VERSION_INTERFACE() | ... | @@ -352,6 +352,8 @@ WL_VERSION_INTERFACE() | 
| 352 | 352 | ||
| 353 | - (void)getPointsHistoryWithSuccessBlock:(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure; | 353 | - (void)getPointsHistoryWithSuccessBlock:(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure; | 
| 354 | 354 | ||
| 355 | +- (void)getSharingHistoryWithSuccessBlock:(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure; | ||
| 356 | + | ||
| 355 | - (void)verifyTicketWithSuccessBlock:(NSString*)guid :(NSString*)ticket :(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure; | 357 | - (void)verifyTicketWithSuccessBlock:(NSString*)guid :(NSString*)ticket :(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure; | 
| 356 | 358 | ||
| 357 | - (void)getCosmoteUserWithSuccessBlock:(NSString*)guid :(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure; | 359 | - (void)getCosmoteUserWithSuccessBlock:(NSString*)guid :(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure; | ... | ... | 
| ... | @@ -1518,6 +1518,43 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1518,6 +1518,43 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | 
| 1518 | }]; | 1518 | }]; | 
| 1519 | } | 1519 | } | 
| 1520 | 1520 | ||
| 1521 | +- (void)getSharingHistoryWithSuccessBlock:(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure | ||
| 1522 | +{ | ||
| 1523 | + NSDictionary *postDictionary = @{@"coupon": @{@"action": @"sharing_history"}}; | ||
| 1524 | + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:postDictionary options:0 error:NULL]; | ||
| 1525 | + [self sendContext8:jsonData successBlock:^(NSDictionary *contextResponse) { | ||
| 1526 | + if (success) { | ||
| 1527 | + success(contextResponse); | ||
| 1528 | + } | ||
| 1529 | + } failureBlock:^(NSError *error) { | ||
| 1530 | + if (failure) { | ||
| 1531 | + NSDictionary* dict = [NSDictionary alloc]; | ||
| 1532 | + dict = [error userInfo]; | ||
| 1533 | + NSString* errorCode = [dict objectForKey:@"NSLocalizedDescription"]; | ||
| 1534 | + if ([errorCode isEqual:@"Request failed: unauthorized (401)"]) { | ||
| 1535 | + [self refreshToken:^(NSDictionary *response) { | ||
| 1536 | + [self sendContext8:jsonData successBlock:^(NSDictionary *contextResponse) { | ||
| 1537 | + if (success) { | ||
| 1538 | + success(contextResponse); | ||
| 1539 | + } | ||
| 1540 | + } failureBlock:^(NSError *error) { | ||
| 1541 | + if (failure) { | ||
| 1542 | + failure(error); | ||
| 1543 | + } | ||
| 1544 | + }]; | ||
| 1545 | + } failureBlock:^(NSError *error) { | ||
| 1546 | + if (failure) { | ||
| 1547 | + [_db executeUpdate:@"DROP TABLE requestVariables"]; | ||
| 1548 | + failure(error); | ||
| 1549 | + } | ||
| 1550 | + NSLog(@"Error at token %@", error ); | ||
| 1551 | + }]; | ||
| 1552 | + } | ||
| 1553 | + NSLog(@"Error at get points history %@", error ); | ||
| 1554 | + } | ||
| 1555 | + }]; | ||
| 1556 | +} | ||
| 1557 | + | ||
| 1521 | - (void)addAddressWithSuccessBlock:(NSString*)friendlyName :(NSString*)addressName :(NSString*)addressNumber :(NSString*)postalCode :(NSNumber*)floorNumber :(NSString*)doorbel :(NSString*)region :(NSString*)latitude :(NSString*)longitude :(NSString*)notes :(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure | 1558 | - (void)addAddressWithSuccessBlock:(NSString*)friendlyName :(NSString*)addressName :(NSString*)addressNumber :(NSString*)postalCode :(NSNumber*)floorNumber :(NSString*)doorbel :(NSString*)region :(NSString*)latitude :(NSString*)longitude :(NSString*)notes :(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure | 
| 1522 | { | 1559 | { | 
| 1523 | NSDictionary *postDictionary = @{@"consumer_data" : @{@"action": @"handle_addresses_new", @"process": @"add", @"data": @{@"friendly_name": friendlyName,@"address_name": addressName, @"address_number": addressNumber, @"postal_code": postalCode, @"floor_number": floorNumber, @"doorbel": doorbel, @"region": region, @"latitude": latitude, @"longitude": longitude, @"notes": notes}}}; | 1560 | NSDictionary *postDictionary = @{@"consumer_data" : @{@"action": @"handle_addresses_new", @"process": @"add", @"data": @{@"friendly_name": friendlyName,@"address_name": addressName, @"address_number": addressNumber, @"postal_code": postalCode, @"floor_number": floorNumber, @"doorbel": doorbel, @"region": region, @"latitude": latitude, @"longitude": longitude, @"notes": notes}}}; | ... | ... | 
| ... | @@ -154,7 +154,6 @@ public class swiftApi { | ... | @@ -154,7 +154,6 @@ public class swiftApi { | 
| 154 | public func getActiveDFYCoupons() -> Array<ActiveDFYCouponModel> { | 154 | public func getActiveDFYCoupons() -> Array<ActiveDFYCouponModel> { | 
| 155 | return GlobalVariables.dfyCoupons | 155 | return GlobalVariables.dfyCoupons | 
| 156 | } | 156 | } | 
| 157 | - | ||
| 158 | 157 | ||
| 159 | public class CouponSetItemModel: Codable { | 158 | public class CouponSetItemModel: Codable { | 
| 160 | public let uuid: String? | 159 | public let uuid: String? | 
| ... | @@ -455,6 +454,24 @@ public class swiftApi { | ... | @@ -455,6 +454,24 @@ public class swiftApi { | 
| 455 | 454 | ||
| 456 | } | 455 | } | 
| 457 | 456 | ||
| 457 | + public class SharingCouponModel: Codable { | ||
| 458 | + public let transactionMetadata: String? | ||
| 459 | + public let sharingType: String? | ||
| 460 | + public let discount: String? | ||
| 461 | + public let date: String? | ||
| 462 | + public let couponsetUuid: String? | ||
| 463 | + public let name: String? | ||
| 464 | + | ||
| 465 | + public init(dictionary: [String: Any]) { | ||
| 466 | + self.transactionMetadata = dictionary["transaction_metadata"] as? String? ?? "" | ||
| 467 | + self.sharingType = dictionary["sharing_type"] as? String? ?? "" | ||
| 468 | + self.discount = dictionary["discount"] as? String? ?? "" | ||
| 469 | + self.date = dictionary["date"] as? String? ?? "" | ||
| 470 | + self.couponsetUuid = dictionary["couponsetUuid"] as? String? ?? "" | ||
| 471 | + self.name = dictionary["name"] as? String? ?? "" | ||
| 472 | + } | ||
| 473 | + } | ||
| 474 | + | ||
| 458 | 475 | ||
| 459 | public func filterActiveCoupons(_ coupons: Array<CouponItemModel>) -> Array<CouponItemModel> { | 476 | public func filterActiveCoupons(_ coupons: Array<CouponItemModel>) -> Array<CouponItemModel> { | 
| 460 | return coupons.filter({ | 477 | return coupons.filter({ | ... | ... | 
- 
Please register or login to post a comment