Manos Chorianopoulos

add ProfileVC

Showing 38 changed files with 1038 additions and 84 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,9 @@ ...@@ -7,6 +7,9 @@
7 objects = { 7 objects = {
8 8
9 /* Begin PBXBuildFile section */ 9 /* Begin PBXBuildFile section */
10 + 1E116F682DE845B1009AE791 /* ProfileFilterCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1E116F672DE845B1009AE791 /* ProfileFilterCollectionViewCell.xib */; };
11 + 1E116F692DE845B1009AE791 /* ProfileFilterCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E116F662DE845B1009AE791 /* ProfileFilterCollectionViewCell.swift */; };
12 + 1E116F6B2DE86CBA009AE791 /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E116F6A2DE86CAD009AE791 /* Models.swift */; };
10 1E4C4CFB2DE6014500279AAD /* CopyableLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4C4CFA2DE6014500279AAD /* CopyableLabel.swift */; }; 13 1E4C4CFB2DE6014500279AAD /* CopyableLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4C4CFA2DE6014500279AAD /* CopyableLabel.swift */; };
11 1E64E1832DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1E64E1822DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib */; }; 14 1E64E1832DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1E64E1822DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib */; };
12 1E64E1842DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E64E1812DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift */; }; 15 1E64E1842DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E64E1812DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift */; };
...@@ -27,6 +30,14 @@ ...@@ -27,6 +30,14 @@
27 1EBF5F072840E13F00B8B17F /* SwiftEventBus in Frameworks */ = {isa = PBXBuildFile; productRef = 1EBF5F062840E13F00B8B17F /* SwiftEventBus */; }; 30 1EBF5F072840E13F00B8B17F /* SwiftEventBus in Frameworks */ = {isa = PBXBuildFile; productRef = 1EBF5F062840E13F00B8B17F /* SwiftEventBus */; };
28 1ED41E4C2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ED41E4A2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift */; }; 31 1ED41E4C2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ED41E4A2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift */; };
29 1ED41E4D2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1ED41E4B2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib */; }; 32 1ED41E4D2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1ED41E4B2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib */; };
33 + 1EDBAF042DE843CA00911E79 /* ProfileCouponTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1EDBAF032DE843CA00911E79 /* ProfileCouponTableViewCell.xib */; };
34 + 1EDBAF052DE843CA00911E79 /* ProfileCouponTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDBAF022DE843CA00911E79 /* ProfileCouponTableViewCell.swift */; };
35 + 1EDBAF082DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1EDBAF072DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.xib */; };
36 + 1EDBAF092DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDBAF062DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.swift */; };
37 + 1EDBAF0C2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1EDBAF0B2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.xib */; };
38 + 1EDBAF0D2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDBAF0A2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.swift */; };
39 + 1EDBAF102DE8443B00911E79 /* ProfileHeaderTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1EDBAF0F2DE8443B00911E79 /* ProfileHeaderTableViewCell.xib */; };
40 + 1EDBAF112DE8443B00911E79 /* ProfileHeaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDBAF0E2DE8443B00911E79 /* ProfileHeaderTableViewCell.swift */; };
30 7630AD9A6242D60846D6750C /* Pods_SwiftWarplyFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0D5F56DD4E5371A50AD2D87 /* Pods_SwiftWarplyFramework.framework */; }; 41 7630AD9A6242D60846D6750C /* Pods_SwiftWarplyFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0D5F56DD4E5371A50AD2D87 /* Pods_SwiftWarplyFramework.framework */; };
31 A07936762885E9CC00064122 /* UIColorExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A07936752885E9CC00064122 /* UIColorExtensions.swift */; }; 42 A07936762885E9CC00064122 /* UIColorExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A07936752885E9CC00064122 /* UIColorExtensions.swift */; };
32 E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6A77852282933340045BBA8 /* SwiftWarplyFramework.docc */; }; 43 E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6A77852282933340045BBA8 /* SwiftWarplyFramework.docc */; };
...@@ -151,6 +162,9 @@ ...@@ -151,6 +162,9 @@
151 162
152 /* Begin PBXFileReference section */ 163 /* Begin PBXFileReference section */
153 1E108A9728A3FA9B0008B8E7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 164 1E108A9728A3FA9B0008B8E7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
165 + 1E116F662DE845B1009AE791 /* ProfileFilterCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileFilterCollectionViewCell.swift; sourceTree = "<group>"; };
166 + 1E116F672DE845B1009AE791 /* ProfileFilterCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileFilterCollectionViewCell.xib; sourceTree = "<group>"; };
167 + 1E116F6A2DE86CAD009AE791 /* Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Models.swift; sourceTree = "<group>"; };
154 1E4C4CFA2DE6014500279AAD /* CopyableLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyableLabel.swift; sourceTree = "<group>"; }; 168 1E4C4CFA2DE6014500279AAD /* CopyableLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyableLabel.swift; sourceTree = "<group>"; };
155 1E64E1812DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRewardsOfferCollectionViewCell.swift; sourceTree = "<group>"; }; 169 1E64E1812DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRewardsOfferCollectionViewCell.swift; sourceTree = "<group>"; };
156 1E64E1822DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsOfferCollectionViewCell.xib; sourceTree = "<group>"; }; 170 1E64E1822DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsOfferCollectionViewCell.xib; sourceTree = "<group>"; };
...@@ -169,6 +183,14 @@ ...@@ -169,6 +183,14 @@
169 1EB4F42A2DE0A0AF00D934C0 /* MyRewardsOffersScrollTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsOffersScrollTableViewCell.xib; sourceTree = "<group>"; }; 183 1EB4F42A2DE0A0AF00D934C0 /* MyRewardsOffersScrollTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsOffersScrollTableViewCell.xib; sourceTree = "<group>"; };
170 1ED41E4A2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRewardsBannerOfferCollectionViewCell.swift; sourceTree = "<group>"; }; 184 1ED41E4A2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRewardsBannerOfferCollectionViewCell.swift; sourceTree = "<group>"; };
171 1ED41E4B2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsBannerOfferCollectionViewCell.xib; sourceTree = "<group>"; }; 185 1ED41E4B2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsBannerOfferCollectionViewCell.xib; sourceTree = "<group>"; };
186 + 1EDBAF022DE843CA00911E79 /* ProfileCouponTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileCouponTableViewCell.swift; sourceTree = "<group>"; };
187 + 1EDBAF032DE843CA00911E79 /* ProfileCouponTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileCouponTableViewCell.xib; sourceTree = "<group>"; };
188 + 1EDBAF062DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileCouponFiltersTableViewCell.swift; sourceTree = "<group>"; };
189 + 1EDBAF072DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileCouponFiltersTableViewCell.xib; sourceTree = "<group>"; };
190 + 1EDBAF0A2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileQuestionnaireTableViewCell.swift; sourceTree = "<group>"; };
191 + 1EDBAF0B2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileQuestionnaireTableViewCell.xib; sourceTree = "<group>"; };
192 + 1EDBAF0E2DE8443B00911E79 /* ProfileHeaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileHeaderTableViewCell.swift; sourceTree = "<group>"; };
193 + 1EDBAF0F2DE8443B00911E79 /* ProfileHeaderTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileHeaderTableViewCell.xib; sourceTree = "<group>"; };
172 A07936752885E9CC00064122 /* UIColorExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColorExtensions.swift; sourceTree = "<group>"; }; 194 A07936752885E9CC00064122 /* UIColorExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColorExtensions.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>"; }; 195 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>"; }; 196 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>"; };
...@@ -311,6 +333,7 @@ ...@@ -311,6 +333,7 @@
311 1E00E6A22DDF71BD0012F164 /* models */ = { 333 1E00E6A22DDF71BD0012F164 /* models */ = {
312 isa = PBXGroup; 334 isa = PBXGroup;
313 children = ( 335 children = (
336 + 1E116F6A2DE86CAD009AE791 /* Models.swift */,
314 ); 337 );
315 path = models; 338 path = models;
316 sourceTree = "<group>"; 339 sourceTree = "<group>";
...@@ -383,6 +406,11 @@ ...@@ -383,6 +406,11 @@
383 1EA8E5BC2DDF34FB00CD3418 /* cells */ = { 406 1EA8E5BC2DDF34FB00CD3418 /* cells */ = {
384 isa = PBXGroup; 407 isa = PBXGroup;
385 children = ( 408 children = (
409 + 1EDBAF122DE844C500911E79 /* ProfileFilterCollectionViewCell */,
410 + 1EDBAF012DE8439000911E79 /* ProfileCouponTableViewCell */,
411 + 1EDBAF002DE842A700911E79 /* ProfileCouponFiltersTableViewCell */,
412 + 1EDBAEFF2DE8420500911E79 /* ProfileQuestionnaireTableViewCell */,
413 + 1EDBAEFE2DE841CE00911E79 /* ProfileHeaderTableViewCell */,
386 1E64E1802DE48DD600543217 /* MyRewardsOfferCollectionViewCell */, 414 1E64E1802DE48DD600543217 /* MyRewardsOfferCollectionViewCell */,
387 1ED41E492DE0C21800836ABA /* MyRewardsBannerOfferCollectionViewCell */, 415 1ED41E492DE0C21800836ABA /* MyRewardsBannerOfferCollectionViewCell */,
388 1EB4F4282DE0A09500D934C0 /* MyRewardsOffersScrollTableViewCell */, 416 1EB4F4282DE0A09500D934C0 /* MyRewardsOffersScrollTableViewCell */,
...@@ -418,6 +446,51 @@ ...@@ -418,6 +446,51 @@
418 path = MyRewardsBannerOfferCollectionViewCell; 446 path = MyRewardsBannerOfferCollectionViewCell;
419 sourceTree = "<group>"; 447 sourceTree = "<group>";
420 }; 448 };
449 + 1EDBAEFE2DE841CE00911E79 /* ProfileHeaderTableViewCell */ = {
450 + isa = PBXGroup;
451 + children = (
452 + 1EDBAF0E2DE8443B00911E79 /* ProfileHeaderTableViewCell.swift */,
453 + 1EDBAF0F2DE8443B00911E79 /* ProfileHeaderTableViewCell.xib */,
454 + );
455 + path = ProfileHeaderTableViewCell;
456 + sourceTree = "<group>";
457 + };
458 + 1EDBAEFF2DE8420500911E79 /* ProfileQuestionnaireTableViewCell */ = {
459 + isa = PBXGroup;
460 + children = (
461 + 1EDBAF0A2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.swift */,
462 + 1EDBAF0B2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.xib */,
463 + );
464 + path = ProfileQuestionnaireTableViewCell;
465 + sourceTree = "<group>";
466 + };
467 + 1EDBAF002DE842A700911E79 /* ProfileCouponFiltersTableViewCell */ = {
468 + isa = PBXGroup;
469 + children = (
470 + 1EDBAF062DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.swift */,
471 + 1EDBAF072DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.xib */,
472 + );
473 + path = ProfileCouponFiltersTableViewCell;
474 + sourceTree = "<group>";
475 + };
476 + 1EDBAF012DE8439000911E79 /* ProfileCouponTableViewCell */ = {
477 + isa = PBXGroup;
478 + children = (
479 + 1EDBAF022DE843CA00911E79 /* ProfileCouponTableViewCell.swift */,
480 + 1EDBAF032DE843CA00911E79 /* ProfileCouponTableViewCell.xib */,
481 + );
482 + path = ProfileCouponTableViewCell;
483 + sourceTree = "<group>";
484 + };
485 + 1EDBAF122DE844C500911E79 /* ProfileFilterCollectionViewCell */ = {
486 + isa = PBXGroup;
487 + children = (
488 + 1E116F662DE845B1009AE791 /* ProfileFilterCollectionViewCell.swift */,
489 + 1E116F672DE845B1009AE791 /* ProfileFilterCollectionViewCell.xib */,
490 + );
491 + path = ProfileFilterCollectionViewCell;
492 + sourceTree = "<group>";
493 + };
421 98AD36FA62350CEABCD961A7 /* Frameworks */ = { 494 98AD36FA62350CEABCD961A7 /* Frameworks */ = {
422 isa = PBXGroup; 495 isa = PBXGroup;
423 children = ( 496 children = (
...@@ -833,10 +906,14 @@ ...@@ -833,10 +906,14 @@
833 1E917CD62DDF64B2002221D8 /* MyRewardsViewController.xib in Resources */, 906 1E917CD62DDF64B2002221D8 /* MyRewardsViewController.xib in Resources */,
834 E6A7790A282933E60045BBA8 /* warp_white_close_button.png in Resources */, 907 E6A7790A282933E60045BBA8 /* warp_white_close_button.png in Resources */,
835 1ED41E4D2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib in Resources */, 908 1ED41E4D2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib in Resources */,
909 + 1EDBAF082DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.xib in Resources */,
910 + 1EDBAF042DE843CA00911E79 /* ProfileCouponTableViewCell.xib in Resources */,
836 E6A778F4282933E60045BBA8 /* WLNativeAdCollectionViewCell.xib in Resources */, 911 E6A778F4282933E60045BBA8 /* WLNativeAdCollectionViewCell.xib in Resources */,
837 E6A778F3282933E60045BBA8 /* WLNativeAdTableViewCell.xib in Resources */, 912 E6A778F3282933E60045BBA8 /* WLNativeAdTableViewCell.xib in Resources */,
913 + 1EDBAF0C2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.xib in Resources */,
838 E6A77A38282BC3530045BBA8 /* Media.xcassets in Resources */, 914 E6A77A38282BC3530045BBA8 /* Media.xcassets in Resources */,
839 E6A77905282933E60045BBA8 /* warp_white_back_button@2x.png in Resources */, 915 E6A77905282933E60045BBA8 /* warp_white_back_button@2x.png in Resources */,
916 + 1E116F682DE845B1009AE791 /* ProfileFilterCollectionViewCell.xib in Resources */,
840 1EB4F4252DE09AAC00D934C0 /* MyRewardsBannerOffersScrollTableViewCell.xib in Resources */, 917 1EB4F4252DE09AAC00D934C0 /* MyRewardsBannerOffersScrollTableViewCell.xib in Resources */,
841 1EA8E5C02DDF427A00CD3418 /* PingLCG-Bold.otf in Resources */, 918 1EA8E5C02DDF427A00CD3418 /* PingLCG-Bold.otf in Resources */,
842 1E64E1832DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib in Resources */, 919 1E64E1832DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib in Resources */,
...@@ -844,6 +921,7 @@ ...@@ -844,6 +921,7 @@
844 1EA8E5C22DDF427A00CD3418 /* PingLCG-Regular.otf in Resources */, 921 1EA8E5C22DDF427A00CD3418 /* PingLCG-Regular.otf in Resources */,
845 E6A77908282933E60045BBA8 /* warp_white_close_button@2x.png in Resources */, 922 E6A77908282933E60045BBA8 /* warp_white_close_button@2x.png in Resources */,
846 1EB4F42B2DE0A0AF00D934C0 /* MyRewardsOffersScrollTableViewCell.xib in Resources */, 923 1EB4F42B2DE0A0AF00D934C0 /* MyRewardsOffersScrollTableViewCell.xib in Resources */,
924 + 1EDBAF102DE8443B00911E79 /* ProfileHeaderTableViewCell.xib in Resources */,
847 1E917CDB2DDF68C7002221D8 /* CouponViewController.xib in Resources */, 925 1E917CDB2DDF68C7002221D8 /* CouponViewController.xib in Resources */,
848 E6A77909282933E60045BBA8 /* warp_white_forward_button@2x.png in Resources */, 926 E6A77909282933E60045BBA8 /* warp_white_forward_button@2x.png in Resources */,
849 E6A77906282933E60045BBA8 /* warp_white_forward_button.png in Resources */, 927 E6A77906282933E60045BBA8 /* warp_white_forward_button.png in Resources */,
...@@ -898,6 +976,8 @@ ...@@ -898,6 +976,8 @@
898 E6A77900282933E60045BBA8 /* WLInboxItemViewController.m in Sources */, 976 E6A77900282933E60045BBA8 /* WLInboxItemViewController.m in Sources */,
899 E6A7793E282933E70045BBA8 /* AFHTTPSessionManager.m in Sources */, 977 E6A7793E282933E70045BBA8 /* AFHTTPSessionManager.m in Sources */,
900 E6A77933282933E70045BBA8 /* UIButton+AFNetworking.m in Sources */, 978 E6A77933282933E70045BBA8 /* UIButton+AFNetworking.m in Sources */,
979 + 1E116F692DE845B1009AE791 /* ProfileFilterCollectionViewCell.swift in Sources */,
980 + 1EDBAF0D2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.swift in Sources */,
901 E6A77919282933E60045BBA8 /* Warply.m in Sources */, 981 E6A77919282933E60045BBA8 /* Warply.m in Sources */,
902 E6A7794B282933E70045BBA8 /* FMDatabase.m in Sources */, 982 E6A7794B282933E70045BBA8 /* FMDatabase.m in Sources */,
903 E6A778EC282933E60045BBA8 /* WLNativeVideoTableViewCell.m in Sources */, 983 E6A778EC282933E60045BBA8 /* WLNativeVideoTableViewCell.m in Sources */,
...@@ -917,8 +997,10 @@ ...@@ -917,8 +997,10 @@
917 E6A77917282933E60045BBA8 /* UIViewController+WLAdditions.m in Sources */, 997 E6A77917282933E60045BBA8 /* UIViewController+WLAdditions.m in Sources */,
918 E6A77943282933E70045BBA8 /* AFNetworkReachabilityManager.m in Sources */, 998 E6A77943282933E70045BBA8 /* AFNetworkReachabilityManager.m in Sources */,
919 E6A778F1282933E60045BBA8 /* WLNativeAdTableViewCell.m in Sources */, 999 E6A778F1282933E60045BBA8 /* WLNativeAdTableViewCell.m in Sources */,
1000 + 1E116F6B2DE86CBA009AE791 /* Models.swift in Sources */,
920 E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */, 1001 E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */,
921 E6A77938282933E70045BBA8 /* AFImageDownloader.m in Sources */, 1002 E6A77938282933E70045BBA8 /* AFImageDownloader.m in Sources */,
1003 + 1EDBAF092DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.swift in Sources */,
922 E6A778ED282933E60045BBA8 /* WLCustomNativeCollectionViewCell.m in Sources */, 1004 E6A778ED282933E60045BBA8 /* WLCustomNativeCollectionViewCell.m in Sources */,
923 E6A7790D282933E60045BBA8 /* WLLocationManager.m in Sources */, 1005 E6A7790D282933E60045BBA8 /* WLLocationManager.m in Sources */,
924 E6A7793D282933E70045BBA8 /* AFURLResponseSerialization.m in Sources */, 1006 E6A7793D282933E70045BBA8 /* AFURLResponseSerialization.m in Sources */,
...@@ -932,6 +1014,8 @@ ...@@ -932,6 +1014,8 @@
932 1E4C4CFB2DE6014500279AAD /* CopyableLabel.swift in Sources */, 1014 1E4C4CFB2DE6014500279AAD /* CopyableLabel.swift in Sources */,
933 E6A77947282933E70045BBA8 /* FMDatabaseQueue.m in Sources */, 1015 E6A77947282933E70045BBA8 /* FMDatabaseQueue.m in Sources */,
934 E6A77922282933E60045BBA8 /* NSData+SSToolkitAdditions.m in Sources */, 1016 E6A77922282933E60045BBA8 /* NSData+SSToolkitAdditions.m in Sources */,
1017 + 1EDBAF112DE8443B00911E79 /* ProfileHeaderTableViewCell.swift in Sources */,
1018 + 1EDBAF052DE843CA00911E79 /* ProfileCouponTableViewCell.swift in Sources */,
935 E6A7794A282933E70045BBA8 /* FMDatabaseAdditions.m in Sources */, 1019 E6A7794A282933E70045BBA8 /* FMDatabaseAdditions.m in Sources */,
936 E6A77903282933E60045BBA8 /* WLAPSItem.m in Sources */, 1020 E6A77903282933E60045BBA8 /* WLAPSItem.m in Sources */,
937 E6A7790B282933E60045BBA8 /* WLPushManager.m in Sources */, 1021 E6A7790B282933E60045BBA8 /* WLPushManager.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>
......
1 { 1 {
2 "images" : [ 2 "images" : [
3 { 3 {
4 - "filename" : "contest_banner_5.png", 4 + "filename" : "questionnaire_banner.png",
5 "idiom" : "universal", 5 "idiom" : "universal",
6 "scale" : "1x" 6 "scale" : "1x"
7 }, 7 },
8 { 8 {
9 - "filename" : "contest_banner_5 1.png", 9 + "filename" : "questionnaire_banner 1.png",
10 "idiom" : "universal", 10 "idiom" : "universal",
11 "scale" : "2x" 11 "scale" : "2x"
12 }, 12 },
13 { 13 {
14 - "filename" : "contest_banner_5 2.png", 14 + "filename" : "questionnaire_banner 2.png",
15 "idiom" : "universal", 15 "idiom" : "universal",
16 "scale" : "3x" 16 "scale" : "3x"
17 } 17 }
......
...@@ -8,7 +8,8 @@ ...@@ -8,7 +8,8 @@
8 import UIKit 8 import UIKit
9 9
10 protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject { 10 protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject {
11 - func didSelectBannerOffer(_ offer: OfferModel) 11 + func didSelectBannerOffer(_ index: Int)
12 + func didTapProfileButton()
12 } 13 }
13 14
14 @objc public class MyRewardsBannerOffersScrollTableViewCell: UITableViewCell { 15 @objc public class MyRewardsBannerOffersScrollTableViewCell: UITableViewCell {
...@@ -17,6 +18,7 @@ protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject { ...@@ -17,6 +18,7 @@ protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject {
17 @IBOutlet weak var tagView2: UIView! 18 @IBOutlet weak var tagView2: UIView!
18 @IBOutlet weak var tagLabel2: UILabel! 19 @IBOutlet weak var tagLabel2: UILabel!
19 @IBOutlet weak var profileImage: UIImageView! 20 @IBOutlet weak var profileImage: UIImageView!
21 + @IBOutlet weak var profileButton: UIButton!
20 @IBOutlet weak var collectionView: UICollectionView! 22 @IBOutlet weak var collectionView: UICollectionView!
21 @IBOutlet weak var pageControl: UIPageControl! 23 @IBOutlet weak var pageControl: UIPageControl!
22 24
...@@ -29,6 +31,8 @@ protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject { ...@@ -29,6 +31,8 @@ protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject {
29 31
30 profileImage.image = UIImage(named: "profile_pic_default", in: MyEmptyClass.resourceBundle(), compatibleWith: nil) 32 profileImage.image = UIImage(named: "profile_pic_default", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
31 33
34 + profileButton.addTarget(self, action: #selector(profileButtonTapped), for: .touchUpInside)
35 +
32 tagView1.backgroundColor = UIColor(rgb: 0x09914E) 36 tagView1.backgroundColor = UIColor(rgb: 0x09914E)
33 tagView1.layer.cornerRadius = 4.0 37 tagView1.layer.cornerRadius = 4.0
34 tagLabel1.font = UIFont(name: "PingLCG-Regular", size: 17) 38 tagLabel1.font = UIFont(name: "PingLCG-Regular", size: 17)
...@@ -95,6 +99,10 @@ protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject { ...@@ -95,6 +99,10 @@ protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject {
95 99
96 self.collectionView.reloadData(); 100 self.collectionView.reloadData();
97 } 101 }
102 +
103 + @objc private func profileButtonTapped() {
104 + delegate?.didTapProfileButton()
105 + }
98 } 106 }
99 107
100 extension MyRewardsBannerOffersScrollTableViewCell: UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UIScrollViewDelegate { 108 extension MyRewardsBannerOffersScrollTableViewCell: UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UIScrollViewDelegate {
...@@ -121,7 +129,7 @@ extension MyRewardsBannerOffersScrollTableViewCell: UICollectionViewDataSource, ...@@ -121,7 +129,7 @@ extension MyRewardsBannerOffersScrollTableViewCell: UICollectionViewDataSource,
121 // Get the selected offer 129 // Get the selected offer
122 if let offer = self.data?.offers[indexPath.row] { 130 if let offer = self.data?.offers[indexPath.row] {
123 // Call the delegate method to notify the parent 131 // Call the delegate method to notify the parent
124 - delegate?.didSelectBannerOffer(offer) 132 + delegate?.didSelectBannerOffer(indexPath.row)
125 } 133 }
126 } 134 }
127 135
......
...@@ -12,18 +12,18 @@ ...@@ -12,18 +12,18 @@
12 <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="MyRewardsBannerOffersScrollTableViewCell" rowHeight="349" id="KGk-i7-Jjw" customClass="MyRewardsBannerOffersScrollTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target"> 12 <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="MyRewardsBannerOffersScrollTableViewCell" rowHeight="349" id="KGk-i7-Jjw" customClass="MyRewardsBannerOffersScrollTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target">
13 <rect key="frame" x="0.0" y="0.0" width="413" height="349"/> 13 <rect key="frame" x="0.0" y="0.0" width="413" height="349"/>
14 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> 14 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
15 - <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" ambiguous="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> 15 + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
16 <rect key="frame" x="0.0" y="0.0" width="413" height="349"/> 16 <rect key="frame" x="0.0" y="0.0" width="413" height="349"/>
17 <autoresizingMask key="autoresizingMask"/> 17 <autoresizingMask key="autoresizingMask"/>
18 <subviews> 18 <subviews>
19 - <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VzF-dQ-3Wa" userLabel="Parent View"> 19 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="VzF-dQ-3Wa" userLabel="Parent View">
20 - <rect key="frame" x="0.0" y="0.0" width="413" height="298"/> 20 + <rect key="frame" x="0.0" y="0.0" width="413" height="450"/>
21 <subviews> 21 <subviews>
22 - <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="JTs-J5-DO2" userLabel="Top View"> 22 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JTs-J5-DO2" userLabel="Top View">
23 - <rect key="frame" x="24" y="36" width="365" height="43"/> 23 + <rect key="frame" x="24" y="36" width="365" height="35"/>
24 <subviews> 24 <subviews>
25 - <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="h09-MS-XKy"> 25 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="h09-MS-XKy">
26 - <rect key="frame" x="0.0" y="8.6666666666666643" width="58" height="26"/> 26 + <rect key="frame" x="0.0" y="4.6666666666666643" width="58" height="26"/>
27 <subviews> 27 <subviews>
28 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Green" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4m7-JY-MDY"> 28 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Green" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4m7-JY-MDY">
29 <rect key="frame" x="6" y="3" width="46" height="20"/> 29 <rect key="frame" x="6" y="3" width="46" height="20"/>
...@@ -41,8 +41,8 @@ ...@@ -41,8 +41,8 @@
41 <constraint firstItem="4m7-JY-MDY" firstAttribute="top" secondItem="h09-MS-XKy" secondAttribute="top" constant="3" id="tui-5x-ntO"/> 41 <constraint firstItem="4m7-JY-MDY" firstAttribute="top" secondItem="h09-MS-XKy" secondAttribute="top" constant="3" id="tui-5x-ntO"/>
42 </constraints> 42 </constraints>
43 </view> 43 </view>
44 - <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="H5g-xq-68p"> 44 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="H5g-xq-68p">
45 - <rect key="frame" x="66" y="8.6666666666666643" width="61.666666666666657" height="26"/> 45 + <rect key="frame" x="66" y="4.6666666666666643" width="61.666666666666657" height="26"/>
46 <subviews> 46 <subviews>
47 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Family" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WN9-wM-hV8"> 47 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Family" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WN9-wM-hV8">
48 <rect key="frame" x="6" y="3" width="49.666666666666664" height="20"/> 48 <rect key="frame" x="6" y="3" width="49.666666666666664" height="20"/>
...@@ -60,8 +60,8 @@ ...@@ -60,8 +60,8 @@
60 <constraint firstItem="WN9-wM-hV8" firstAttribute="top" secondItem="H5g-xq-68p" secondAttribute="top" constant="3" id="pwW-Ed-yv2"/> 60 <constraint firstItem="WN9-wM-hV8" firstAttribute="top" secondItem="H5g-xq-68p" secondAttribute="top" constant="3" id="pwW-Ed-yv2"/>
61 </constraints> 61 </constraints>
62 </view> 62 </view>
63 - <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5cf-tr-Vjf"> 63 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5cf-tr-Vjf">
64 - <rect key="frame" x="322" y="0.0" width="43" height="43"/> 64 + <rect key="frame" x="322" y="0.0" width="43" height="35"/>
65 <subviews> 65 <subviews>
66 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="fZO-NB-UyL"> 66 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="fZO-NB-UyL">
67 <rect key="frame" x="0.0" y="0.0" width="43" height="43"/> 67 <rect key="frame" x="0.0" y="0.0" width="43" height="43"/>
...@@ -71,13 +71,25 @@ ...@@ -71,13 +71,25 @@
71 <constraint firstAttribute="height" constant="43" id="lZJ-VG-4fl"/> 71 <constraint firstAttribute="height" constant="43" id="lZJ-VG-4fl"/>
72 </constraints> 72 </constraints>
73 </imageView> 73 </imageView>
74 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="loI-CB-MX1" userLabel="ProfileButton">
75 + <rect key="frame" x="0.0" y="0.0" width="43" height="35"/>
76 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
77 + <state key="normal" title="Button"/>
78 + <buttonConfiguration key="configuration" style="plain" title="Button">
79 + <color key="baseForegroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
80 + </buttonConfiguration>
81 + </button>
74 </subviews> 82 </subviews>
75 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> 83 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
76 <constraints> 84 <constraints>
85 + <constraint firstAttribute="trailing" secondItem="loI-CB-MX1" secondAttribute="trailing" id="0PQ-cq-sCt"/>
77 <constraint firstItem="fZO-NB-UyL" firstAttribute="leading" secondItem="5cf-tr-Vjf" secondAttribute="leading" id="Bfw-5S-wqz"/> 86 <constraint firstItem="fZO-NB-UyL" firstAttribute="leading" secondItem="5cf-tr-Vjf" secondAttribute="leading" id="Bfw-5S-wqz"/>
78 <constraint firstItem="fZO-NB-UyL" firstAttribute="top" secondItem="5cf-tr-Vjf" secondAttribute="top" id="WCt-TJ-XQc"/> 87 <constraint firstItem="fZO-NB-UyL" firstAttribute="top" secondItem="5cf-tr-Vjf" secondAttribute="top" id="WCt-TJ-XQc"/>
88 + <constraint firstItem="loI-CB-MX1" firstAttribute="top" secondItem="5cf-tr-Vjf" secondAttribute="top" id="XKb-DI-owX"/>
79 <constraint firstAttribute="trailing" secondItem="fZO-NB-UyL" secondAttribute="trailing" id="Z0D-wE-fgE"/> 89 <constraint firstAttribute="trailing" secondItem="fZO-NB-UyL" secondAttribute="trailing" id="Z0D-wE-fgE"/>
90 + <constraint firstItem="loI-CB-MX1" firstAttribute="leading" secondItem="5cf-tr-Vjf" secondAttribute="leading" id="fM6-dS-psa"/>
80 <constraint firstAttribute="bottom" secondItem="fZO-NB-UyL" secondAttribute="bottom" id="nuy-88-N5B"/> 91 <constraint firstAttribute="bottom" secondItem="fZO-NB-UyL" secondAttribute="bottom" id="nuy-88-N5B"/>
92 + <constraint firstAttribute="bottom" secondItem="loI-CB-MX1" secondAttribute="bottom" id="rMQ-Ec-OZs"/>
81 </constraints> 93 </constraints>
82 </view> 94 </view>
83 </subviews> 95 </subviews>
...@@ -93,8 +105,8 @@ ...@@ -93,8 +105,8 @@
93 <constraint firstItem="H5g-xq-68p" firstAttribute="leading" secondItem="h09-MS-XKy" secondAttribute="trailing" constant="8" id="wqx-Hc-3YH"/> 105 <constraint firstItem="H5g-xq-68p" firstAttribute="leading" secondItem="h09-MS-XKy" secondAttribute="trailing" constant="8" id="wqx-Hc-3YH"/>
94 </constraints> 106 </constraints>
95 </view> 107 </view>
96 - <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" ambiguous="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="I7z-Fz-SNP"> 108 + <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="I7z-Fz-SNP">
97 - <rect key="frame" x="0.0" y="149" width="413" height="0.0"/> 109 + <rect key="frame" x="0.0" y="76" width="413" height="348"/>
98 <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> 110 <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
99 <constraints> 111 <constraints>
100 <constraint firstAttribute="height" constant="348" id="aEf-Xl-A2C"/> 112 <constraint firstAttribute="height" constant="348" id="aEf-Xl-A2C"/>
...@@ -111,8 +123,8 @@ ...@@ -111,8 +123,8 @@
111 <outlet property="delegate" destination="KGk-i7-Jjw" id="fQ4-0u-38c"/> 123 <outlet property="delegate" destination="KGk-i7-Jjw" id="fQ4-0u-38c"/>
112 </connections> 124 </connections>
113 </collectionView> 125 </collectionView>
114 - <pageControl opaque="NO" contentMode="scaleToFill" ambiguous="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" numberOfPages="3" translatesAutoresizingMaskIntoConstraints="NO" id="lOm-CZ-dVG"> 126 + <pageControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" numberOfPages="3" translatesAutoresizingMaskIntoConstraints="NO" id="lOm-CZ-dVG">
115 - <rect key="frame" x="170" y="136" width="73" height="26"/> 127 + <rect key="frame" x="170" y="424" width="73" height="26"/>
116 </pageControl> 128 </pageControl>
117 </subviews> 129 </subviews>
118 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> 130 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
...@@ -142,6 +154,7 @@ ...@@ -142,6 +154,7 @@
142 <connections> 154 <connections>
143 <outlet property="collectionView" destination="I7z-Fz-SNP" id="yrF-mR-aQu"/> 155 <outlet property="collectionView" destination="I7z-Fz-SNP" id="yrF-mR-aQu"/>
144 <outlet property="pageControl" destination="lOm-CZ-dVG" id="Skf-hV-rjH"/> 156 <outlet property="pageControl" destination="lOm-CZ-dVG" id="Skf-hV-rjH"/>
157 + <outlet property="profileButton" destination="loI-CB-MX1" id="VTG-C3-3KA"/>
145 <outlet property="profileImage" destination="fZO-NB-UyL" id="l05-qG-DJv"/> 158 <outlet property="profileImage" destination="fZO-NB-UyL" id="l05-qG-DJv"/>
146 <outlet property="tagLabel1" destination="4m7-JY-MDY" id="Min-YW-AN2"/> 159 <outlet property="tagLabel1" destination="4m7-JY-MDY" id="Min-YW-AN2"/>
147 <outlet property="tagLabel2" destination="WN9-wM-hV8" id="yWk-1S-4Zk"/> 160 <outlet property="tagLabel2" destination="WN9-wM-hV8" id="yWk-1S-4Zk"/>
......
1 +//
2 +// ProfileCouponFiltersTableViewCell.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 29/5/25.
6 +//
7 +
8 +import UIKit
9 +
10 +protocol ProfileCouponFiltersTableViewCellDelegate: AnyObject {
11 + func didSelectFilter(_ filter: CouponFilterModel)
12 +}
13 +
14 +@objc public class ProfileCouponFiltersTableViewCell: UITableViewCell {
15 + @IBOutlet weak var titleLabel: UILabel!
16 + @IBOutlet weak var collectionView: UICollectionView!
17 +
18 + weak var delegate: ProfileCouponFiltersTableViewCellDelegate?
19 + var data: [CouponFilterModel]?
20 +
21 + public override func awakeFromNib() {
22 + super.awakeFromNib()
23 +
24 + titleLabel.font = UIFont(name: "PingLCG-Bold", size: 18)
25 + titleLabel.textColor = UIColor(rgb: 0x000F1E)
26 +
27 + // Register XIBs for collection view cells
28 + collectionView.register(UINib(nibName: "ProfileFilterCollectionViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellWithReuseIdentifier: "ProfileFilterCollectionViewCell")
29 +
30 + // Fix background colors
31 +// collectionView.backgroundColor = UIColor.clear
32 +// self.backgroundColor = UIColor.clear
33 +// self.contentView.backgroundColor = UIColor.clear
34 +
35 + // Remove content insets and gaps
36 + collectionView.contentInset = UIEdgeInsets.zero
37 + collectionView.scrollIndicatorInsets = UIEdgeInsets.zero
38 +
39 + if #available(iOS 11.0, *) {
40 + collectionView.contentInsetAdjustmentBehavior = .never
41 + }
42 +
43 + // Configure collection view layout
44 + if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
45 + layout.scrollDirection = .horizontal
46 + layout.minimumLineSpacing = 15
47 + layout.minimumInteritemSpacing = 0
48 + layout.sectionInset = UIEdgeInsets(top: 0, left: 24, bottom: 0, right: 24)
49 + }
50 +
51 + // Enable paging for smooth banner scrolling
52 + // collectionView.isPagingEnabled = true
53 + collectionView.showsHorizontalScrollIndicator = false
54 +
55 + // Set delegates
56 + collectionView.delegate = self
57 + collectionView.dataSource = self
58 +
59 + }
60 +
61 + public override func setSelected(_ selected: Bool, animated: Bool) {
62 + super.setSelected(selected, animated: animated)
63 +
64 + // Configure the view for the selected state
65 + }
66 +
67 + func configureCell(data: [CouponFilterModel]?) {
68 + self.data = data
69 +
70 + self.collectionView.reloadData();
71 + }
72 +}
73 +
74 +extension ProfileCouponFiltersTableViewCell: UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
75 +
76 +
77 + public func numberOfSections(in collectionView: UICollectionView) -> Int {
78 + return 1
79 + }
80 +
81 + public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
82 + return self.data?.count ?? 0
83 + }
84 +
85 + public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
86 + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ProfileFilterCollectionViewCell", for: indexPath) as! ProfileFilterCollectionViewCell
87 + if let filter = self.data?[indexPath.row] {
88 + // TODO: Fix dynamic
89 + let isSelected = self.data?[indexPath.row].title == "Ενεργά"
90 + cell.configureCell(data: filter, isSelected: isSelected)
91 + }
92 + return cell;
93 + }
94 +
95 + public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
96 + if let filter = self.data?[indexPath.row] {
97 + delegate?.didSelectFilter(filter)
98 + }
99 + }
100 +
101 + // MARK: - UICollectionViewDelegateFlowLayout
102 +// public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
103 +// if self.data?.title == "Αγαπημένα" {
104 +// return CGSize(width: 275, height: 350)
105 +// } else {
106 +// return CGSize(width: 257, height: 232)
107 +// }
108 +// }
109 +
110 + // Distance Between Item Cells
111 + public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
112 + return 15
113 + }
114 +
115 + public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
116 + return 0
117 + }
118 +
119 + // Cell Margin
120 + public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
121 + return UIEdgeInsets(top: 0, left: 24, bottom: 0, right: 24)
122 + }
123 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
3 + <device id="retina6_12" orientation="portrait" appearance="light"/>
4 + <dependencies>
5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
6 + <capability name="Safe area layout guides" minToolsVersion="9.0"/>
7 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
8 + </dependencies>
9 + <objects>
10 + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
11 + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
12 + <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="ProfileCouponFiltersTableViewCell" rowHeight="161" id="KGk-i7-Jjw" customClass="ProfileCouponFiltersTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target">
13 + <rect key="frame" x="0.0" y="0.0" width="320" height="161"/>
14 + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
15 + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
16 + <rect key="frame" x="0.0" y="0.0" width="320" height="161"/>
17 + <autoresizingMask key="autoresizingMask"/>
18 + <subviews>
19 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1kR-zd-duR" userLabel="ParentView">
20 + <rect key="frame" x="0.0" y="0.0" width="320" height="161"/>
21 + <subviews>
22 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mga-ND-qoh">
23 + <rect key="frame" x="24" y="26" width="272" height="49"/>
24 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
25 + <nil key="textColor"/>
26 + <nil key="highlightedColor"/>
27 + </label>
28 + <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="Ddn-dN-xH1">
29 + <rect key="frame" x="0.0" y="118" width="320" height="43"/>
30 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
31 + <constraints>
32 + <constraint firstAttribute="height" constant="43" id="5nG-1p-kic"/>
33 + </constraints>
34 + <collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" automaticEstimatedItemSize="YES" minimumLineSpacing="5" minimumInteritemSpacing="5" id="tAC-pV-kZ6">
35 + <size key="itemSize" width="128" height="120"/>
36 + <size key="headerReferenceSize" width="0.0" height="0.0"/>
37 + <size key="footerReferenceSize" width="0.0" height="0.0"/>
38 + <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
39 + </collectionViewFlowLayout>
40 + <cells/>
41 + <connections>
42 + <outlet property="dataSource" destination="KGk-i7-Jjw" id="J6c-fu-dH8"/>
43 + <outlet property="delegate" destination="KGk-i7-Jjw" id="D3M-nO-3sC"/>
44 + </connections>
45 + </collectionView>
46 + </subviews>
47 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
48 + <constraints>
49 + <constraint firstItem="Ddn-dN-xH1" firstAttribute="top" secondItem="mga-ND-qoh" secondAttribute="bottom" constant="43" id="1gh-45-u6h"/>
50 + <constraint firstItem="Ddn-dN-xH1" firstAttribute="leading" secondItem="1kR-zd-duR" secondAttribute="leading" id="3IU-v8-7cI"/>
51 + <constraint firstItem="mga-ND-qoh" firstAttribute="top" secondItem="1kR-zd-duR" secondAttribute="top" constant="26" id="J0I-v0-uwq"/>
52 + <constraint firstAttribute="trailing" secondItem="mga-ND-qoh" secondAttribute="trailing" constant="24" id="Ss1-zq-znd"/>
53 + <constraint firstAttribute="bottom" secondItem="Ddn-dN-xH1" secondAttribute="bottom" id="VdN-By-srg"/>
54 + <constraint firstAttribute="trailing" secondItem="Ddn-dN-xH1" secondAttribute="trailing" id="W06-Yi-lzm"/>
55 + <constraint firstItem="mga-ND-qoh" firstAttribute="leading" secondItem="1kR-zd-duR" secondAttribute="leading" constant="24" id="sEy-GV-Pjr"/>
56 + </constraints>
57 + </view>
58 + </subviews>
59 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
60 + <constraints>
61 + <constraint firstItem="1kR-zd-duR" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="BHT-r3-dcg"/>
62 + <constraint firstAttribute="trailing" secondItem="1kR-zd-duR" secondAttribute="trailing" id="eLa-yc-CeZ"/>
63 + <constraint firstAttribute="bottom" secondItem="1kR-zd-duR" secondAttribute="bottom" id="rie-jS-xMj"/>
64 + <constraint firstItem="1kR-zd-duR" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="vgK-SU-fRu"/>
65 + </constraints>
66 + </tableViewCellContentView>
67 + <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
68 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
69 + <connections>
70 + <outlet property="collectionView" destination="Ddn-dN-xH1" id="RzU-o5-6Dw"/>
71 + <outlet property="titleLabel" destination="mga-ND-qoh" id="TxL-cQ-O1P"/>
72 + </connections>
73 + <point key="canvasLocation" x="68.702290076335871" y="29.929577464788736"/>
74 + </tableViewCell>
75 + </objects>
76 +</document>
1 +//
2 +// ProfileCouponTableViewCell.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 29/5/25.
6 +//
7 +
8 +import UIKit
9 +
10 +@objc public class ProfileCouponTableViewCell: UITableViewCell {
11 + @IBOutlet weak var parentView: UIView!
12 + @IBOutlet weak var bannerImage: UIImageView!
13 + @IBOutlet weak var favoriteImage: UIImageView!
14 + @IBOutlet weak var discountView: UIView!
15 + @IBOutlet weak var discountLabel: UILabel!
16 + @IBOutlet weak var titleLabel: UILabel!
17 + @IBOutlet weak var subtitleLabel: UILabel!
18 + @IBOutlet weak var expirationLabel: UILabel!
19 + @IBOutlet weak var logoImage: UIImageView!
20 +
21 + public override func awakeFromNib() {
22 + super.awakeFromNib()
23 + // Initialization code
24 +
25 + parentView.layer.borderWidth = 1.0
26 + parentView.layer.borderColor = UIColor(rgb: 0xCCCCCC).cgColor
27 + parentView.layer.cornerRadius = 8.0
28 + parentView.clipsToBounds = true
29 +
30 + discountView.layer.cornerRadius = 34.0
31 +
32 + }
33 +
34 + func configureCell(data: OfferModel) {
35 + bannerImage.image = UIImage(named: data.bannerImage, in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
36 + favoriteImage.image = UIImage(named: data.isFavorite ? "favorite_filled" : "favorite_empty", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
37 +
38 + let discountSymbol =
39 + data.discountType == "percentage" ? "%"
40 + : data.discountType == "price" ? "€"
41 + : data.discountType == "buyOneGetOne" ? "1+1"
42 + : data.discountType == "free" ? "Δωρεάν"
43 + : ""
44 +
45 +// discountLabel.text = "\(data.discount)\(discountSymbol)"
46 + discountLabel.text = data.discount
47 + discountLabel.font = UIFont(name: "PingLCG-Bold", size: 25)
48 + discountLabel.textColor = UIColor(rgb: 0xF2F2F2)
49 +
50 + discountView.backgroundColor = UIColor(rgb: data.color)
51 +
52 + titleLabel.text = data.title
53 + titleLabel.font = UIFont(name: "PingLCG-Bold", size: 22)
54 + titleLabel.textColor = UIColor(rgb: 0x000F1E)
55 +
56 + subtitleLabel.text = data.description
57 + subtitleLabel.font = UIFont(name: "PingLCG-Regular", size: 16)
58 + subtitleLabel.textColor = UIColor(rgb: 0x00111B)
59 +
60 + expirationLabel.text = data.expirationDate
61 + expirationLabel.font = UIFont(name: "PingLCG-Regular", size: 13)
62 + expirationLabel.textColor = UIColor(rgb: 0x00111B)
63 +
64 + logoImage.image = UIImage(named: data.merchantLogo, in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
65 + }
66 +
67 + public override func setSelected(_ selected: Bool, animated: Bool) {
68 + super.setSelected(selected, animated: animated)
69 +
70 + // Configure the view for the selected state
71 + }
72 +
73 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
3 + <device id="retina6_12" orientation="portrait" appearance="light"/>
4 + <dependencies>
5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
6 + <capability name="Safe area layout guides" minToolsVersion="9.0"/>
7 + <capability name="System colors in document resources" minToolsVersion="11.0"/>
8 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
9 + </dependencies>
10 + <objects>
11 + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
12 + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
13 + <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="ProfileCouponTableViewCell" rowHeight="296" id="KGk-i7-Jjw" customClass="ProfileCouponTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target">
14 + <rect key="frame" x="0.0" y="0.0" width="320" height="296"/>
15 + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
16 + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" ambiguous="YES" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
17 + <rect key="frame" x="0.0" y="0.0" width="320" height="296"/>
18 + <autoresizingMask key="autoresizingMask"/>
19 + <subviews>
20 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="x0X-za-HZ9" userLabel="Parent View">
21 + <rect key="frame" x="22" y="0.0" width="276" height="292"/>
22 + <subviews>
23 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8Ht-7Z-jiW" userLabel="Top View">
24 + <rect key="frame" x="0.0" y="0.0" width="276" height="171"/>
25 + <subviews>
26 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="09g-Nj-HG4">
27 + <rect key="frame" x="0.0" y="0.0" width="276" height="171"/>
28 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
29 + </imageView>
30 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4xy-g8-Ukx" userLabel="Fav View">
31 + <rect key="frame" x="16" y="13" width="46" height="46"/>
32 + <subviews>
33 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="T91-Ra-dmT">
34 + <rect key="frame" x="0.0" y="0.0" width="46" height="46"/>
35 + </imageView>
36 + </subviews>
37 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
38 + <constraints>
39 + <constraint firstAttribute="width" constant="46" id="Cc2-q8-pqb"/>
40 + <constraint firstAttribute="trailing" secondItem="T91-Ra-dmT" secondAttribute="trailing" id="FHe-DH-ghP"/>
41 + <constraint firstItem="T91-Ra-dmT" firstAttribute="top" secondItem="4xy-g8-Ukx" secondAttribute="top" id="HMT-10-TaU"/>
42 + <constraint firstAttribute="bottom" secondItem="T91-Ra-dmT" secondAttribute="bottom" id="K7M-Vf-uo8"/>
43 + <constraint firstItem="T91-Ra-dmT" firstAttribute="leading" secondItem="4xy-g8-Ukx" secondAttribute="leading" id="diD-2x-xIG"/>
44 + <constraint firstAttribute="height" constant="46" id="gtM-XV-LnS"/>
45 + </constraints>
46 + </view>
47 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dnZ-fa-M3o" userLabel="Discount View">
48 + <rect key="frame" x="179" y="14" width="84" height="84"/>
49 + <subviews>
50 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XeI-PB-wG7">
51 + <rect key="frame" x="5" y="31.666666666666664" width="74" height="21"/>
52 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
53 + <nil key="textColor"/>
54 + <nil key="highlightedColor"/>
55 + </label>
56 + </subviews>
57 + <color key="backgroundColor" systemColor="systemBackgroundColor"/>
58 + <constraints>
59 + <constraint firstAttribute="height" constant="84" id="8gp-O1-LgD"/>
60 + <constraint firstAttribute="width" constant="84" id="Mve-Yl-rsU"/>
61 + <constraint firstItem="XeI-PB-wG7" firstAttribute="centerY" secondItem="dnZ-fa-M3o" secondAttribute="centerY" id="Rlp-4Z-urE"/>
62 + <constraint firstAttribute="trailing" secondItem="XeI-PB-wG7" secondAttribute="trailing" constant="5" id="dyI-UO-uvn"/>
63 + <constraint firstItem="XeI-PB-wG7" firstAttribute="leading" secondItem="dnZ-fa-M3o" secondAttribute="leading" constant="5" id="eon-8Y-X7c"/>
64 + </constraints>
65 + </view>
66 + </subviews>
67 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
68 + <constraints>
69 + <constraint firstItem="09g-Nj-HG4" firstAttribute="leading" secondItem="8Ht-7Z-jiW" secondAttribute="leading" id="1AO-0a-ZpN"/>
70 + <constraint firstItem="dnZ-fa-M3o" firstAttribute="top" secondItem="8Ht-7Z-jiW" secondAttribute="top" constant="14" id="AC6-zX-rmc"/>
71 + <constraint firstItem="09g-Nj-HG4" firstAttribute="top" secondItem="8Ht-7Z-jiW" secondAttribute="top" id="DYc-4B-bTE"/>
72 + <constraint firstAttribute="bottom" secondItem="09g-Nj-HG4" secondAttribute="bottom" id="Rsg-ZQ-0bM"/>
73 + <constraint firstItem="4xy-g8-Ukx" firstAttribute="leading" secondItem="8Ht-7Z-jiW" secondAttribute="leading" constant="16" id="U8A-vw-Pca"/>
74 + <constraint firstItem="4xy-g8-Ukx" firstAttribute="top" secondItem="8Ht-7Z-jiW" secondAttribute="top" constant="13" id="ZGF-7X-iSN"/>
75 + <constraint firstAttribute="trailing" secondItem="09g-Nj-HG4" secondAttribute="trailing" id="qwK-yM-rD6"/>
76 + <constraint firstAttribute="trailing" secondItem="dnZ-fa-M3o" secondAttribute="trailing" constant="13" id="zAy-FM-iqd"/>
77 + </constraints>
78 + </view>
79 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fZ6-8K-DXr" userLabel="Bottom View">
80 + <rect key="frame" x="0.0" y="171" width="276" height="121"/>
81 + <subviews>
82 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YtM-Db-ygP">
83 + <rect key="frame" x="16" y="17" width="130" height="93"/>
84 + <subviews>
85 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="63p-dI-yTa">
86 + <rect key="frame" x="0.0" y="0.0" width="130" height="21"/>
87 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
88 + <nil key="textColor"/>
89 + <nil key="highlightedColor"/>
90 + </label>
91 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="z30-VZ-8h3">
92 + <rect key="frame" x="0.0" y="23" width="130" height="20.333333333333329"/>
93 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
94 + <nil key="textColor"/>
95 + <nil key="highlightedColor"/>
96 + </label>
97 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PZ3-qH-3XH">
98 + <rect key="frame" x="0.0" y="72" width="130" height="21"/>
99 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
100 + <nil key="textColor"/>
101 + <nil key="highlightedColor"/>
102 + </label>
103 + </subviews>
104 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
105 + <constraints>
106 + <constraint firstItem="z30-VZ-8h3" firstAttribute="leading" secondItem="YtM-Db-ygP" secondAttribute="leading" id="DHf-fQ-lXA"/>
107 + <constraint firstAttribute="trailing" secondItem="z30-VZ-8h3" secondAttribute="trailing" id="DnI-99-e8v"/>
108 + <constraint firstAttribute="trailing" secondItem="PZ3-qH-3XH" secondAttribute="trailing" id="JA5-Am-dmE"/>
109 + <constraint firstItem="63p-dI-yTa" firstAttribute="top" secondItem="YtM-Db-ygP" secondAttribute="top" id="Kfa-m3-rWW"/>
110 + <constraint firstAttribute="trailing" secondItem="63p-dI-yTa" secondAttribute="trailing" id="bxa-5c-OE6"/>
111 + <constraint firstItem="63p-dI-yTa" firstAttribute="leading" secondItem="YtM-Db-ygP" secondAttribute="leading" id="gk1-Zr-MIl"/>
112 + <constraint firstItem="PZ3-qH-3XH" firstAttribute="leading" secondItem="YtM-Db-ygP" secondAttribute="leading" id="hE4-2m-iZk"/>
113 + <constraint firstItem="z30-VZ-8h3" firstAttribute="top" secondItem="63p-dI-yTa" secondAttribute="bottom" constant="2" id="hfr-Gi-omT"/>
114 + <constraint firstAttribute="bottom" secondItem="PZ3-qH-3XH" secondAttribute="bottom" id="xMs-dh-ybb"/>
115 + </constraints>
116 + </view>
117 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="hM2-8T-4vX">
118 + <rect key="frame" x="164" y="17" width="84" height="84"/>
119 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
120 + <constraints>
121 + <constraint firstAttribute="width" constant="84" id="6to-Dv-ukR"/>
122 + <constraint firstAttribute="height" constant="84" id="QjU-rO-Uqx"/>
123 + </constraints>
124 + </imageView>
125 + </subviews>
126 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
127 + <constraints>
128 + <constraint firstAttribute="bottom" secondItem="YtM-Db-ygP" secondAttribute="bottom" constant="11" id="6ul-bC-Jpj"/>
129 + <constraint firstItem="YtM-Db-ygP" firstAttribute="leading" secondItem="fZ6-8K-DXr" secondAttribute="leading" constant="16" id="C7J-bI-8ap"/>
130 + <constraint firstItem="hM2-8T-4vX" firstAttribute="top" secondItem="fZ6-8K-DXr" secondAttribute="top" constant="17" id="HBF-J2-ed0"/>
131 + <constraint firstItem="hM2-8T-4vX" firstAttribute="leading" secondItem="YtM-Db-ygP" secondAttribute="trailing" constant="18" id="WML-nR-cLh"/>
132 + <constraint firstItem="YtM-Db-ygP" firstAttribute="top" secondItem="fZ6-8K-DXr" secondAttribute="top" constant="17" id="f0H-m3-OAP"/>
133 + <constraint firstAttribute="trailing" secondItem="hM2-8T-4vX" secondAttribute="trailing" constant="28" id="jKa-nW-g41"/>
134 + <constraint firstAttribute="height" constant="121" id="ptz-uq-5rq"/>
135 + </constraints>
136 + </view>
137 + </subviews>
138 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
139 + <constraints>
140 + <constraint firstItem="fZ6-8K-DXr" firstAttribute="leading" secondItem="x0X-za-HZ9" secondAttribute="leading" id="DKa-9V-lma"/>
141 + <constraint firstAttribute="trailing" secondItem="8Ht-7Z-jiW" secondAttribute="trailing" id="LK1-Cz-JUh"/>
142 + <constraint firstItem="8Ht-7Z-jiW" firstAttribute="top" secondItem="x0X-za-HZ9" secondAttribute="top" id="P9v-fu-Mhs"/>
143 + <constraint firstAttribute="height" constant="292" id="lA6-op-vsG"/>
144 + <constraint firstAttribute="trailing" secondItem="fZ6-8K-DXr" secondAttribute="trailing" id="lAU-n1-MKy"/>
145 + <constraint firstItem="8Ht-7Z-jiW" firstAttribute="leading" secondItem="x0X-za-HZ9" secondAttribute="leading" id="sK9-Tw-Yqn"/>
146 + <constraint firstAttribute="bottom" secondItem="fZ6-8K-DXr" secondAttribute="bottom" id="u4z-JD-qby"/>
147 + <constraint firstItem="fZ6-8K-DXr" firstAttribute="top" secondItem="8Ht-7Z-jiW" secondAttribute="bottom" id="v5X-nL-hKm"/>
148 + </constraints>
149 + </view>
150 + </subviews>
151 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
152 + <constraints>
153 + <constraint firstItem="x0X-za-HZ9" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="22" id="SzO-Fk-ZCB"/>
154 + <constraint firstItem="x0X-za-HZ9" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="uQN-BA-o6w"/>
155 + <constraint firstAttribute="trailing" secondItem="x0X-za-HZ9" secondAttribute="trailing" constant="22" id="vi4-dI-lx3"/>
156 + <constraint firstAttribute="bottom" secondItem="x0X-za-HZ9" secondAttribute="bottom" id="zsL-aX-JRL"/>
157 + </constraints>
158 + </tableViewCellContentView>
159 + <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
160 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
161 + <connections>
162 + <outlet property="bannerImage" destination="09g-Nj-HG4" id="1Ux-ZI-rVQ"/>
163 + <outlet property="discountLabel" destination="XeI-PB-wG7" id="Kyy-aE-GgR"/>
164 + <outlet property="discountView" destination="dnZ-fa-M3o" id="fht-MW-ToM"/>
165 + <outlet property="expirationLabel" destination="PZ3-qH-3XH" id="vIb-60-EVp"/>
166 + <outlet property="favoriteImage" destination="T91-Ra-dmT" id="leZ-Tz-zo8"/>
167 + <outlet property="logoImage" destination="hM2-8T-4vX" id="Zqv-yp-lrD"/>
168 + <outlet property="parentView" destination="x0X-za-HZ9" id="OE0-tT-IPd"/>
169 + <outlet property="subtitleLabel" destination="z30-VZ-8h3" id="s40-MP-4Jn"/>
170 + <outlet property="titleLabel" destination="63p-dI-yTa" id="YOe-I2-Cly"/>
171 + </connections>
172 + <point key="canvasLocation" x="68.702290076335871" y="77.464788732394368"/>
173 + </tableViewCell>
174 + </objects>
175 + <resources>
176 + <systemColor name="systemBackgroundColor">
177 + <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
178 + </systemColor>
179 + </resources>
180 +</document>
1 +//
2 +// ProfileFilterCollectionViewCell.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 29/5/25.
6 +//
7 +
8 +import UIKit
9 +
10 +@objc public class ProfileFilterCollectionViewCell: UICollectionViewCell {
11 + @IBOutlet weak var parentView: UIView!
12 + @IBOutlet weak var titleLabel: UILabel!
13 +
14 + public override func awakeFromNib() {
15 + super.awakeFromNib()
16 + // Initialization code
17 + }
18 +
19 + func configureCell(data: CouponFilterModel, isSelected: Bool) {
20 + if (isSelected) {
21 + parentView.backgroundColor = UIColor(rgb: 0x000F1E)
22 + parentView.layer.cornerRadius = 4.0
23 +
24 + titleLabel.font = UIFont(name: "PingLCG-Bold", size: 16)
25 + titleLabel.textColor = UIColor(rgb: 0xFFFFFF)
26 +
27 + } else {
28 + parentView.backgroundColor = .clear
29 + parentView.layer.borderWidth = 2
30 + parentView.layer.borderColor = UIColor(rgb: 0x56586A).cgColor
31 + parentView.layer.cornerRadius = 4.0
32 +
33 + titleLabel.font = UIFont(name: "PingLCG-Bold", size: 16)
34 + titleLabel.textColor = UIColor(rgb: 0xFFFFFF)
35 + }
36 + titleLabel.text = data.title
37 + }
38 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
3 + <device id="retina6_12" orientation="portrait" appearance="light"/>
4 + <dependencies>
5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
6 + <capability name="Safe area layout guides" minToolsVersion="9.0"/>
7 + <capability name="System colors in document resources" minToolsVersion="11.0"/>
8 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
9 + </dependencies>
10 + <objects>
11 + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
12 + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
13 + <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="ProfileFilterCollectionViewCell" id="gTV-IL-0wX" customClass="ProfileFilterCollectionViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target">
14 + <rect key="frame" x="0.0" y="0.0" width="145" height="66"/>
15 + <autoresizingMask key="autoresizingMask"/>
16 + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
17 + <rect key="frame" x="0.0" y="0.0" width="145" height="66"/>
18 + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
19 + <subviews>
20 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NgU-Qp-M8l" userLabel="ParentView">
21 + <rect key="frame" x="0.0" y="0.0" width="145" height="66"/>
22 + <subviews>
23 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xq0-AN-QT6">
24 + <rect key="frame" x="17" y="12" width="111" height="42"/>
25 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
26 + <nil key="textColor"/>
27 + <nil key="highlightedColor"/>
28 + </label>
29 + </subviews>
30 + <color key="backgroundColor" systemColor="systemBackgroundColor"/>
31 + <constraints>
32 + <constraint firstItem="Xq0-AN-QT6" firstAttribute="top" secondItem="NgU-Qp-M8l" secondAttribute="top" constant="12" id="Nro-8v-U0C"/>
33 + <constraint firstAttribute="trailing" secondItem="Xq0-AN-QT6" secondAttribute="trailing" constant="17" id="hKh-jv-VQR"/>
34 + <constraint firstItem="Xq0-AN-QT6" firstAttribute="leading" secondItem="NgU-Qp-M8l" secondAttribute="leading" constant="17" id="na6-tV-KQZ"/>
35 + <constraint firstAttribute="bottom" secondItem="Xq0-AN-QT6" secondAttribute="bottom" constant="12" id="pJO-74-XZO"/>
36 + </constraints>
37 + </view>
38 + </subviews>
39 + </view>
40 + <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
41 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
42 + <constraints>
43 + <constraint firstItem="NgU-Qp-M8l" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="RYQ-Qn-MSN"/>
44 + <constraint firstAttribute="trailing" secondItem="NgU-Qp-M8l" secondAttribute="trailing" id="efv-x1-lhD"/>
45 + <constraint firstItem="NgU-Qp-M8l" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="l7p-or-kC2"/>
46 + <constraint firstAttribute="bottom" secondItem="NgU-Qp-M8l" secondAttribute="bottom" id="te6-Qr-T6c"/>
47 + </constraints>
48 + <size key="customSize" width="145" height="66"/>
49 + <connections>
50 + <outlet property="parentView" destination="NgU-Qp-M8l" id="qhP-z2-cWY"/>
51 + <outlet property="titleLabel" destination="Xq0-AN-QT6" id="Hft-IP-ITh"/>
52 + </connections>
53 + <point key="canvasLocation" x="109.16030534351144" y="-5.6338028169014089"/>
54 + </collectionViewCell>
55 + </objects>
56 + <resources>
57 + <systemColor name="systemBackgroundColor">
58 + <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
59 + </systemColor>
60 + </resources>
61 +</document>
1 +//
2 +// ProfileHeaderTableViewCell.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 29/5/25.
6 +//
7 +
8 +import UIKit
9 +
10 +@objc public class ProfileHeaderTableViewCell: UITableViewCell {
11 + @IBOutlet weak var tagView1: UIView!
12 + @IBOutlet weak var tagLabel1: UILabel!
13 + @IBOutlet weak var tagView2: UIView!
14 + @IBOutlet weak var tagLabel2: UILabel!
15 + @IBOutlet weak var profileImage: UIImageView!
16 +
17 + public override func awakeFromNib() {
18 + super.awakeFromNib()
19 +
20 + profileImage.image = UIImage(named: "profile_pic_default", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
21 +
22 + tagView1.backgroundColor = UIColor(rgb: 0x09914E)
23 + tagView1.layer.cornerRadius = 4.0
24 + tagLabel1.font = UIFont(name: "PingLCG-Regular", size: 17)
25 + tagLabel1.textColor = UIColor(rgb: 0xFFFFFF)
26 +
27 + tagView2.backgroundColor = UIColor(rgb: 0xFC9F25)
28 + tagView2.layer.cornerRadius = 4.0
29 + tagLabel2.font = UIFont(name: "PingLCG-Regular", size: 17)
30 + tagLabel2.textColor = UIColor(rgb: 0xFFFFFF)
31 + }
32 +
33 + public override func setSelected(_ selected: Bool, animated: Bool) {
34 + super.setSelected(selected, animated: animated)
35 +
36 + // Configure the view for the selected state
37 + }
38 +
39 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
3 + <device id="retina6_12" orientation="portrait" appearance="light"/>
4 + <dependencies>
5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
6 + <capability name="Safe area layout guides" minToolsVersion="9.0"/>
7 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
8 + </dependencies>
9 + <objects>
10 + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
11 + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
12 + <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="ProfileHeaderTableViewCell" id="KGk-i7-Jjw" customClass="ProfileHeaderTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target">
13 + <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
14 + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
15 + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" ambiguous="YES" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
16 + <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
17 + <autoresizingMask key="autoresizingMask"/>
18 + <subviews>
19 + <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="EZC-E7-4NP" userLabel="Parent View">
20 + <rect key="frame" x="31" y="0.0" width="258" height="43"/>
21 + <subviews>
22 + <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PbJ-yt-Kn6">
23 + <rect key="frame" x="0.0" y="8.6666666666666643" width="58" height="26"/>
24 + <subviews>
25 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Green" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3iK-77-YPt">
26 + <rect key="frame" x="6" y="3" width="46" height="20"/>
27 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
28 + <fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
29 + <nil key="textColor"/>
30 + <nil key="highlightedColor"/>
31 + </label>
32 + </subviews>
33 + <color key="backgroundColor" red="0.035294117649999998" green="0.56862745100000001" blue="0.30588235289999999" alpha="1" colorSpace="calibratedRGB"/>
34 + <constraints>
35 + <constraint firstAttribute="bottom" secondItem="3iK-77-YPt" secondAttribute="bottom" constant="3" id="AzT-L8-M11"/>
36 + <constraint firstItem="3iK-77-YPt" firstAttribute="leading" secondItem="PbJ-yt-Kn6" secondAttribute="leading" constant="6" id="CXA-8o-8hw"/>
37 + <constraint firstItem="3iK-77-YPt" firstAttribute="top" secondItem="PbJ-yt-Kn6" secondAttribute="top" constant="3" id="HgB-cm-GWV"/>
38 + <constraint firstAttribute="trailing" secondItem="3iK-77-YPt" secondAttribute="trailing" constant="6" id="kcr-Fy-V25"/>
39 + </constraints>
40 + </view>
41 + <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="BIN-Ee-QVw">
42 + <rect key="frame" x="66" y="8.6666666666666643" width="61.666666666666657" height="26"/>
43 + <subviews>
44 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Family" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RrC-Qf-9bC">
45 + <rect key="frame" x="6" y="3" width="49.666666666666664" height="20"/>
46 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
47 + <fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
48 + <nil key="textColor"/>
49 + <nil key="highlightedColor"/>
50 + </label>
51 + </subviews>
52 + <color key="backgroundColor" red="0.98823529409999999" green="0.62352941179999999" blue="0.1450980392" alpha="1" colorSpace="calibratedRGB"/>
53 + <constraints>
54 + <constraint firstItem="RrC-Qf-9bC" firstAttribute="top" secondItem="BIN-Ee-QVw" secondAttribute="top" constant="3" id="GPN-tb-Pfo"/>
55 + <constraint firstItem="RrC-Qf-9bC" firstAttribute="leading" secondItem="BIN-Ee-QVw" secondAttribute="leading" constant="6" id="NbB-AF-IA0"/>
56 + <constraint firstAttribute="bottom" secondItem="RrC-Qf-9bC" secondAttribute="bottom" constant="3" id="PLN-Gb-IUu"/>
57 + <constraint firstAttribute="trailing" secondItem="RrC-Qf-9bC" secondAttribute="trailing" constant="6" id="pdI-Ll-nUY"/>
58 + </constraints>
59 + </view>
60 + <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="oRt-jB-UR1">
61 + <rect key="frame" x="221" y="0.0" width="37" height="43"/>
62 + <subviews>
63 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ka7-9X-7t4">
64 + <rect key="frame" x="0.0" y="0.0" width="37" height="37"/>
65 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
66 + <constraints>
67 + <constraint firstAttribute="width" constant="37" id="l80-J9-yl7"/>
68 + <constraint firstAttribute="height" constant="37" id="td4-wH-CiD"/>
69 + </constraints>
70 + </imageView>
71 + </subviews>
72 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
73 + <constraints>
74 + <constraint firstAttribute="bottom" secondItem="ka7-9X-7t4" secondAttribute="bottom" id="0YM-ws-0Dg"/>
75 + <constraint firstItem="ka7-9X-7t4" firstAttribute="top" secondItem="oRt-jB-UR1" secondAttribute="top" id="r2H-hN-E5S"/>
76 + <constraint firstAttribute="trailing" secondItem="ka7-9X-7t4" secondAttribute="trailing" id="tGk-Nv-WzC"/>
77 + <constraint firstItem="ka7-9X-7t4" firstAttribute="leading" secondItem="oRt-jB-UR1" secondAttribute="leading" id="te7-Gw-oyL"/>
78 + </constraints>
79 + </view>
80 + </subviews>
81 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
82 + <constraints>
83 + <constraint firstItem="oRt-jB-UR1" firstAttribute="top" secondItem="EZC-E7-4NP" secondAttribute="top" id="AEJ-YC-aVw"/>
84 + <constraint firstItem="PbJ-yt-Kn6" firstAttribute="leading" secondItem="EZC-E7-4NP" secondAttribute="leading" id="Afn-AJ-Tfk"/>
85 + <constraint firstItem="PbJ-yt-Kn6" firstAttribute="centerY" secondItem="EZC-E7-4NP" secondAttribute="centerY" id="fC0-9G-Ajq"/>
86 + <constraint firstAttribute="bottom" secondItem="oRt-jB-UR1" secondAttribute="bottom" id="mvy-dD-Q26"/>
87 + <constraint firstAttribute="trailing" secondItem="oRt-jB-UR1" secondAttribute="trailing" id="nAT-Wu-pvL"/>
88 + <constraint firstItem="oRt-jB-UR1" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="BIN-Ee-QVw" secondAttribute="trailing" constant="8" id="ohN-Bc-zfQ"/>
89 + <constraint firstItem="BIN-Ee-QVw" firstAttribute="centerY" secondItem="EZC-E7-4NP" secondAttribute="centerY" id="q7G-9L-LXt"/>
90 + <constraint firstItem="BIN-Ee-QVw" firstAttribute="leading" secondItem="PbJ-yt-Kn6" secondAttribute="trailing" constant="8" id="yPy-YQ-6bl"/>
91 + </constraints>
92 + </view>
93 + </subviews>
94 + <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="calibratedRGB"/>
95 + <constraints>
96 + <constraint firstItem="EZC-E7-4NP" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="31" id="5YW-dG-HjU"/>
97 + <constraint firstAttribute="trailing" secondItem="EZC-E7-4NP" secondAttribute="trailing" constant="31" id="6BI-8F-Fsl"/>
98 + <constraint firstAttribute="bottom" secondItem="EZC-E7-4NP" secondAttribute="bottom" id="spA-yG-SaN"/>
99 + <constraint firstItem="EZC-E7-4NP" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="27" id="zUZ-e2-jYJ"/>
100 + </constraints>
101 + </tableViewCellContentView>
102 + <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
103 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
104 + <connections>
105 + <outlet property="profileImage" destination="ka7-9X-7t4" id="ejB-Ra-63T"/>
106 + <outlet property="tagLabel1" destination="3iK-77-YPt" id="q1E-7d-qjF"/>
107 + <outlet property="tagLabel2" destination="RrC-Qf-9bC" id="5Vq-uh-qaL"/>
108 + <outlet property="tagView1" destination="PbJ-yt-Kn6" id="kCL-Ll-U6s"/>
109 + <outlet property="tagView2" destination="BIN-Ee-QVw" id="fkF-yO-znw"/>
110 + </connections>
111 + <point key="canvasLocation" x="70" y="-11"/>
112 + </tableViewCell>
113 + </objects>
114 +</document>
1 +//
2 +// ProfileQuestionnaireTableViewCell.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 29/5/25.
6 +//
7 +
8 +import UIKit
9 +
10 +@objc public class ProfileQuestionnaireTableViewCell: UITableViewCell {
11 + @IBOutlet weak var questionnaireBannerImage: UIImageView!
12 +
13 + public override func awakeFromNib() {
14 + super.awakeFromNib()
15 +
16 + questionnaireBannerImage.image = UIImage(named: "questionnaire_banner", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
17 +
18 + }
19 +
20 + public override func setSelected(_ selected: Bool, animated: Bool) {
21 + super.setSelected(selected, animated: animated)
22 +
23 + // Configure the view for the selected state
24 + }
25 +
26 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
3 + <device id="retina6_12" orientation="portrait" appearance="light"/>
4 + <dependencies>
5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
6 + <capability name="Safe area layout guides" minToolsVersion="9.0"/>
7 + <capability name="System colors in document resources" minToolsVersion="11.0"/>
8 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
9 + </dependencies>
10 + <objects>
11 + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
12 + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
13 + <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="ProfileQuestionnaireTableViewCell" rowHeight="211" id="KGk-i7-Jjw" customClass="ProfileQuestionnaireTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target">
14 + <rect key="frame" x="0.0" y="0.0" width="320" height="211"/>
15 + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
16 + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" ambiguous="YES" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
17 + <rect key="frame" x="0.0" y="0.0" width="320" height="211"/>
18 + <autoresizingMask key="autoresizingMask"/>
19 + <subviews>
20 + <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="YrO-k4-v2O" userLabel="ParentView">
21 + <rect key="frame" x="24" y="35" width="272" height="9"/>
22 + <subviews>
23 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="N8L-PD-UP8">
24 + <rect key="frame" x="0.0" y="0.0" width="272" height="159"/>
25 + <color key="backgroundColor" systemColor="systemRedColor"/>
26 + <constraints>
27 + <constraint firstAttribute="height" constant="159" id="r1F-lV-yNf"/>
28 + </constraints>
29 + </imageView>
30 + </subviews>
31 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
32 + <constraints>
33 + <constraint firstItem="N8L-PD-UP8" firstAttribute="leading" secondItem="YrO-k4-v2O" secondAttribute="leading" id="Ay6-kG-U8L"/>
34 + <constraint firstAttribute="bottom" secondItem="N8L-PD-UP8" secondAttribute="bottom" id="S87-T5-YdQ"/>
35 + <constraint firstAttribute="trailing" secondItem="N8L-PD-UP8" secondAttribute="trailing" id="WGt-wu-sFI"/>
36 + <constraint firstItem="N8L-PD-UP8" firstAttribute="top" secondItem="YrO-k4-v2O" secondAttribute="top" id="ZxG-A7-Zci"/>
37 + </constraints>
38 + </view>
39 + </subviews>
40 + <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="calibratedRGB"/>
41 + <constraints>
42 + <constraint firstAttribute="bottom" secondItem="YrO-k4-v2O" secondAttribute="bottom" id="6we-5l-yeL"/>
43 + <constraint firstAttribute="trailing" secondItem="YrO-k4-v2O" secondAttribute="trailing" constant="24" id="7CD-5N-Kwy"/>
44 + <constraint firstItem="YrO-k4-v2O" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="24" id="ExZ-x2-yiF"/>
45 + <constraint firstItem="YrO-k4-v2O" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="35" id="iID-80-Men"/>
46 + </constraints>
47 + </tableViewCellContentView>
48 + <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
49 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
50 + <connections>
51 + <outlet property="questionnaireBannerImage" destination="N8L-PD-UP8" id="BMn-6A-UVw"/>
52 + </connections>
53 + <point key="canvasLocation" x="68.702290076335871" y="47.535211267605639"/>
54 + </tableViewCell>
55 + </objects>
56 + <resources>
57 + <systemColor name="systemRedColor">
58 + <color red="1" green="0.23137254900000001" blue="0.18823529410000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
59 + </systemColor>
60 + </resources>
61 +</document>
1 +//
2 +// Models.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 29/5/25.
6 +//
7 +
8 +
9 +struct SectionModel {
10 + let title: String
11 + let count: Int
12 + let offers: [OfferModel]
13 +}
14 +
15 +struct OfferModel {
16 + let category: String
17 + let title: String
18 + let description: String
19 + let discount: String
20 + let discountType: String // e.g., "price", "percentage", "free", "buyOneGetOne", etc.
21 + let bannerImage: String
22 + let merchantLogo: String
23 + let expirationDate: String
24 + let color: UInt
25 + var isFavorite: Bool
26 + var active: Bool?
27 + var redeemed: Bool?
28 +}
29 +
30 +struct CouponFilterModel {
31 + let title: String
32 +}
...@@ -7,24 +7,6 @@ ...@@ -7,24 +7,6 @@
7 7
8 import UIKit 8 import UIKit
9 9
10 -struct SectionModel {
11 - let title: String
12 - let count: Int
13 - let offers: [OfferModel]
14 -}
15 -
16 -struct OfferModel {
17 - let category: String
18 - let title: String
19 - let description: String
20 - let discount: String
21 - let discountType: String // e.g., "price", "percentage", "free", "buyOneGetOne", etc.
22 - let bannerImage: String
23 - let merchantLogo: String
24 - let expirationDate: String
25 - let color: UInt
26 - var isFavorite: Bool
27 -}
28 10
29 @objc public class MyRewardsViewController: UIViewController { 11 @objc public class MyRewardsViewController: UIViewController {
30 @IBOutlet weak var tableView: UITableView! 12 @IBOutlet weak var tableView: UITableView!
...@@ -80,18 +62,6 @@ struct OfferModel { ...@@ -80,18 +62,6 @@ struct OfferModel {
80 color: 0x8A2BE2, 62 color: 0x8A2BE2,
81 isFavorite: false 63 isFavorite: false
82 ), 64 ),
83 - OfferModel(
84 - category: "Διαγωνισμός",
85 - title: "Διαγωνισμός Κού-πονς!",
86 - description: "13 Απίθανα ΔΩΡΑ σε περιμένουν!",
87 - discount: "",
88 - discountType: "contest",
89 - bannerImage: "contest_banner_5",
90 - merchantLogo: "contest_logo",
91 - expirationDate: "30/06/2025",
92 - color: 0x8A2BE2,
93 - isFavorite: false
94 - ),
95 // Top offers 65 // Top offers
96 OfferModel( 66 OfferModel(
97 category: "Top offers", 67 category: "Top offers",
...@@ -301,6 +271,13 @@ struct OfferModel { ...@@ -301,6 +271,13 @@ struct OfferModel {
301 ) 271 )
302 ] 272 ]
303 273
274 + let contestUrls: [String] = [
275 + "https://warply.s3.amazonaws.com/dei/campaigns/tesla_dev/index.html",
276 + "https://warply.s3.amazonaws.com/dei/campaigns/EnergySaverContest_dev/index.html",
277 + "https://warply.s3.amazonaws.com/dei/campaigns/match_dev/index.html",
278 + "https://warply.s3.amazonaws.com/dei/campaigns/questionnaire_dev"
279 + ]
280 +
304 var bannerOffersSection: SectionModel? 281 var bannerOffersSection: SectionModel?
305 var topOffersSection: SectionModel? 282 var topOffersSection: SectionModel?
306 var favoriteOffersSection: SectionModel? 283 var favoriteOffersSection: SectionModel?
...@@ -423,23 +400,30 @@ struct OfferModel { ...@@ -423,23 +400,30 @@ struct OfferModel {
423 self.tableView.reloadData() 400 self.tableView.reloadData()
424 } 401 }
425 402
426 - private func openCampaignViewController(with offer: OfferModel) { 403 + private func openCampaignViewController(with index: Int) {
427 404
428 let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self)) 405 let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self))
429 if let vc = storyboard.instantiateViewController(withIdentifier: "CampaignViewController") as? SwiftWarplyFramework.CampaignViewController { 406 if let vc = storyboard.instantiateViewController(withIdentifier: "CampaignViewController") as? SwiftWarplyFramework.CampaignViewController {
430 - vc.campaignUrl = "https://warply.s3.amazonaws.com/dei/campaigns/DehEasterContest_stage/index.html" 407 +// vc.campaignUrl = "https://warply.s3.amazonaws.com/dei/campaigns/DehEasterContest_stage/index.html"
408 + vc.campaignUrl = contestUrls[index]
431 vc.showHeader = true 409 vc.showHeader = true
432 self.navigationController?.pushViewController(vc, animated: true) 410 self.navigationController?.pushViewController(vc, animated: true)
433 // self.present(vc, animated: true) 411 // self.present(vc, animated: true)
434 } 412 }
435 } 413 }
436 - 414 +
437 private func openCouponViewController(with offer: OfferModel) { 415 private func openCouponViewController(with offer: OfferModel) {
438 let vc = SwiftWarplyFramework.CouponViewController(nibName: "CouponViewController", bundle: Bundle(for: MyEmptyClass.self)) 416 let vc = SwiftWarplyFramework.CouponViewController(nibName: "CouponViewController", bundle: Bundle(for: MyEmptyClass.self))
439 vc.coupon = offer 417 vc.coupon = offer
440 418
441 self.navigationController?.pushViewController(vc, animated: true) 419 self.navigationController?.pushViewController(vc, animated: true)
442 } 420 }
421 +
422 + private func openProfileViewController() {
423 + let vc = SwiftWarplyFramework.ProfileViewController(nibName: "ProfileViewController", bundle: Bundle(for: MyEmptyClass.self))
424 +
425 + self.navigationController?.pushViewController(vc, animated: true)
426 + }
443 } 427 }
444 428
445 // MARK: - TableView 429 // MARK: - TableView
...@@ -536,9 +520,14 @@ extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{ ...@@ -536,9 +520,14 @@ extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{
536 520
537 // Add delegate conformance 521 // Add delegate conformance
538 extension MyRewardsViewController: MyRewardsBannerOffersScrollTableViewCellDelegate { 522 extension MyRewardsViewController: MyRewardsBannerOffersScrollTableViewCellDelegate {
539 - func didSelectBannerOffer(_ offer: OfferModel) { 523 + func didSelectBannerOffer(_ index: Int) {
540 // Navigate to CampaignViewController 524 // Navigate to CampaignViewController
541 - openCampaignViewController(with: offer) 525 + openCampaignViewController(with: index)
526 + }
527 +
528 + func didTapProfileButton() {
529 + // Navigate to ProfileViewController
530 + openProfileViewController()
542 } 531 }
543 } 532 }
544 533
......
...@@ -171,6 +171,14 @@ import UIKit ...@@ -171,6 +171,14 @@ import UIKit
171 redeemed: true 171 redeemed: true
172 ) 172 )
173 ] 173 ]
174 +
175 + let couponFilters: [CouponFilterModel] = [
176 + CouponFilterModel(title: "Ενεργά"),
177 + CouponFilterModel(title: "Αγαπημένα"),
178 + CouponFilterModel(title: "Εξαργυρωμένα")
179 + ]
180 +
181 + var couponFilterSelected: CouponFilterModel = CouponFilterModel(title: "Ενεργά")
174 182
175 var forYouOffersSection: SectionModel? 183 var forYouOffersSection: SectionModel?
176 var activeOffersSection: SectionModel? 184 var activeOffersSection: SectionModel?
...@@ -187,8 +195,11 @@ import UIKit ...@@ -187,8 +195,11 @@ import UIKit
187 setNavigationTitle("Το προφίλ μου") 195 setNavigationTitle("Το προφίλ μου")
188 196
189 // Register XIBs for table view cells 197 // Register XIBs for table view cells
190 - // tableView.register(UINib(nibName: "MyRewardsBannerOffersScrollTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "MyRewardsBannerOffersScrollTableViewCell") 198 + tableView.register(UINib(nibName: "ProfileHeaderTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "ProfileHeaderTableViewCell")
191 - // tableView.register(UINib(nibName: "MyRewardsOffersScrollTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "MyRewardsOffersScrollTableViewCell") 199 + tableView.register(UINib(nibName: "ProfileQuestionnaireTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "ProfileQuestionnaireTableViewCell")
200 + tableView.register(UINib(nibName: "MyRewardsOffersScrollTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "MyRewardsOffersScrollTableViewCell")
201 + tableView.register(UINib(nibName: "ProfileCouponFiltersTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "ProfileCouponFiltersTableViewCell")
202 + tableView.register(UINib(nibName: "ProfileCouponTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "ProfileCouponTableViewCell")
192 203
193 // Set up table view 204 // Set up table view
194 tableView.delegate = self 205 tableView.delegate = self
...@@ -211,12 +222,14 @@ import UIKit ...@@ -211,12 +222,14 @@ import UIKit
211 ) 222 )
212 223
213 // Favorite Offers 224 // Favorite Offers
214 - let activeOffers = allOffers.filter { $0.active } 225 + let activeOffers = allOffers.filter { $0.active ?? false }
215 activeOffersSection = SectionModel( 226 activeOffersSection = SectionModel(
216 title: "Ενεργά", 227 title: "Ενεργά",
217 count: activeOffers.count, 228 count: activeOffers.count,
218 offers: activeOffers 229 offers: activeOffers
219 ) 230 )
231 +
232 + filteredOffersSection = activeOffersSection
220 233
221 // Favorite Offers 234 // Favorite Offers
222 let favoriteOffers = allOffers.filter { $0.isFavorite } 235 let favoriteOffers = allOffers.filter { $0.isFavorite }
...@@ -227,7 +240,7 @@ import UIKit ...@@ -227,7 +240,7 @@ import UIKit
227 ) 240 )
228 241
229 // Favorite Offers 242 // Favorite Offers
230 - let redeemedOffers = allOffers.filter { $0.redeemed } 243 + let redeemedOffers = allOffers.filter { $0.redeemed ?? false }
231 redeemedOffersSection = SectionModel( 244 redeemedOffersSection = SectionModel(
232 title: "Αγαπημένα", 245 title: "Αγαπημένα",
233 count: redeemedOffers.count, 246 count: redeemedOffers.count,
...@@ -236,13 +249,20 @@ import UIKit ...@@ -236,13 +249,20 @@ import UIKit
236 249
237 self.tableView.reloadData() 250 self.tableView.reloadData()
238 } 251 }
252 +
253 + private func openCouponViewController(with offer: OfferModel) {
254 + let vc = SwiftWarplyFramework.CouponViewController(nibName: "CouponViewController", bundle: Bundle(for: MyEmptyClass.self))
255 + vc.coupon = offer
256 +
257 + self.navigationController?.pushViewController(vc, animated: true)
258 + }
239 } 259 }
240 260
241 // MARK: - TableView 261 // MARK: - TableView
242 -extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{ 262 +extension ProfileViewController: UITableViewDelegate, UITableViewDataSource {
243 263
244 public func numberOfSections(in tableView: UITableView) -> Int { 264 public func numberOfSections(in tableView: UITableView) -> Int {
245 - return 4 + filteredOffersSection.offers.count 265 + return 4 + (filteredOffersSection?.offers.count ?? 0)
246 } 266 }
247 267
248 public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 268 public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
...@@ -272,35 +292,37 @@ extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{ ...@@ -272,35 +292,37 @@ extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{
272 292
273 public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 293 public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
274 if (indexPath.section == 0) { 294 if (indexPath.section == 0) {
275 - let cell = tableView.dequeueReusableCell(withIdentifier: "MyRewardsBannerOffersScrollTableViewCell", for: indexPath) as! MyRewardsBannerOffersScrollTableViewCell 295 + let cell = tableView.dequeueReusableCell(withIdentifier: "ProfileHeaderTableViewCell", for: indexPath) as! ProfileHeaderTableViewCell
276 - cell.delegate = self // Set the banner offers delegate 296 +// cell.delegate = self // Set the banner offers delegate
277 - cell.configureCell(data: self.bannerOffersSection) 297 +// cell.configureCell(data: self.bannerOffersSection)
278 // cell.parent = self 298 // cell.parent = self
279 return cell 299 return cell
280 300
281 - } else { 301 + } else if (indexPath.section == 1) {
302 + let cell = tableView.dequeueReusableCell(withIdentifier: "ProfileQuestionnaireTableViewCell", for: indexPath) as! ProfileQuestionnaireTableViewCell
303 + return cell
304 +
305 + } else if (indexPath.section == 2) {
282 let cell = tableView.dequeueReusableCell(withIdentifier: "MyRewardsOffersScrollTableViewCell", for: indexPath) as! MyRewardsOffersScrollTableViewCell 306 let cell = tableView.dequeueReusableCell(withIdentifier: "MyRewardsOffersScrollTableViewCell", for: indexPath) as! MyRewardsOffersScrollTableViewCell
283 307
284 cell.delegate = self // Set the offers delegate 308 cell.delegate = self // Set the offers delegate
309 + cell.configureCell(data: self.forYouOffersSection)
285 310
286 - if (indexPath.section == 1) { 311 + return cell
287 - cell.configureCell(data: self.topOffersSection)
288 - } else if (indexPath.section == 2) {
289 - cell.configureCell(data: self.favoriteOffersSection)
290 - } else if (indexPath.section == 3) {
291 - cell.configureCell(data: self.sustainableOffersSection)
292 - } else if (indexPath.section == 4) {
293 - cell.configureCell(data: self.familyOffersSection)
294 - } else if (indexPath.section == 5) {
295 - cell.configureCell(data: self.foodOffersSection)
296 - } else if (indexPath.section == 6) {
297 - cell.configureCell(data: self.escapeOffersSection)
298 - } else if (indexPath.section == 7) {
299 - cell.configureCell(data: self.childOffersSection)
300 - } else {
301 - cell.configureCell(data: self.shoppingOffersSection)
302 - }
303 312
313 + } else if (indexPath.section == 3) {
314 + let cell = tableView.dequeueReusableCell(withIdentifier: "ProfileCouponFiltersTableViewCell", for: indexPath) as! ProfileCouponFiltersTableViewCell
315 +
316 + cell.delegate = self // Set the offers delegate
317 + cell.configureCell(data: self.couponFilters)
318 +
319 + return cell
320 +
321 + } else {
322 + let cell = tableView.dequeueReusableCell(withIdentifier: "ProfileCouponTableViewCell", for: indexPath) as! ProfileCouponTableViewCell
323 + if let offer = self.filteredOffersSection?.offers[indexPath.row] {
324 + cell.configureCell(data: offer)
325 + }
304 return cell 326 return cell
305 } 327 }
306 328
...@@ -330,3 +352,18 @@ extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{ ...@@ -330,3 +352,18 @@ extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{
330 } 352 }
331 } 353 }
332 354
355 +// Add delegate conformance
356 +extension ProfileViewController: MyRewardsOffersScrollTableViewCellDelegate {
357 + func didSelectOffer(_ offer: OfferModel) {
358 + // Navigate to CouponViewController
359 + openCouponViewController(with: offer)
360 + }
361 +}
362 +
363 +// Add delegate conformance
364 +extension ProfileViewController: ProfileCouponFiltersTableViewCellDelegate {
365 + func didSelectFilter(_ filter: CouponFilterModel) {
366 + self.couponFilterSelected = filter
367 + self.tableView.reloadData()
368 + }
369 +}
......