Showing
25 changed files
with
14 additions
and
3595 deletions
... | @@ -7,35 +7,13 @@ | ... | @@ -7,35 +7,13 @@ |
7 | objects = { | 7 | objects = { |
8 | 8 | ||
9 | /* Begin PBXBuildFile section */ | 9 | /* Begin PBXBuildFile section */ |
10 | - 1E7086652811A93F00704CA8 /* CouponBarcodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E7086642811A93F00704CA8 /* CouponBarcodeView.swift */; }; | ||
11 | - 1E7086672811A96E00704CA8 /* CouponBarcodeViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E7086662811A96E00704CA8 /* CouponBarcodeViewInterface.swift */; }; | ||
12 | - 1E735FF2281067320050A298 /* CampaignWebview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E735FF1281067320050A298 /* CampaignWebview.swift */; }; | ||
13 | - 1E735FF42810681E0050A298 /* CampaignWebviewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E735FF32810681E0050A298 /* CampaignWebviewInterface.swift */; }; | ||
14 | - 1E7536732822B72500149CC9 /* DetailsViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E7536722822B72500149CC9 /* DetailsViewInterface.swift */; }; | ||
15 | - 1E7536752822B76000149CC9 /* DetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E7536742822B76000149CC9 /* DetailsView.swift */; }; | ||
16 | - 1E879E25281AC96A0089F489 /* OldCouponsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E879E24281AC96A0089F489 /* OldCouponsView.swift */; }; | ||
17 | - 1E879E27281AC99F0089F489 /* OldCouponsViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E879E26281AC99F0089F489 /* OldCouponsViewInterface.swift */; }; | ||
18 | - 1E98EC1428199C4F007524A0 /* AllGiftsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E98EC1328199C4F007524A0 /* AllGiftsView.swift */; }; | ||
19 | - 1E98EC1628199C86007524A0 /* AllGiftsViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E98EC1528199C86007524A0 /* AllGiftsViewInterface.swift */; }; | ||
20 | 1EBB036F281BE3610062F663 /* RSBarcodes_Swift in Frameworks */ = {isa = PBXBuildFile; productRef = 1EBB036E281BE3610062F663 /* RSBarcodes_Swift */; }; | 10 | 1EBB036F281BE3610062F663 /* RSBarcodes_Swift in Frameworks */ = {isa = PBXBuildFile; productRef = 1EBB036E281BE3610062F663 /* RSBarcodes_Swift */; }; |
21 | - 1EBEB02D280D69D800BF802C /* GiftsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EBEB02C280D69D800BF802C /* GiftsView.swift */; }; | ||
22 | - 1EBEB02F280D6AA500BF802C /* GiftsViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EBEB02E280D6AA500BF802C /* GiftsViewInterface.swift */; }; | ||
23 | 260C6A1AFF7560C32E212F20 /* Pods_WarplySDKFrameworkIOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1353B8C484CC0649CAC2EB74 /* Pods_WarplySDKFrameworkIOS.framework */; }; | 11 | 260C6A1AFF7560C32E212F20 /* Pods_WarplySDKFrameworkIOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1353B8C484CC0649CAC2EB74 /* Pods_WarplySDKFrameworkIOS.framework */; }; |
24 | - E634A362282151E30069DE27 /* StepsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E634A361282151E30069DE27 /* StepsView.swift */; }; | ||
25 | - E634A364282168550069DE27 /* StepsViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = E634A363282168550069DE27 /* StepsViewInterface.swift */; }; | ||
26 | E634A369282299770069DE27 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E634A368282299760069DE27 /* Main.storyboard */; }; | 12 | E634A369282299770069DE27 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E634A368282299760069DE27 /* Main.storyboard */; }; |
27 | E634A36B2822999B0069DE27 /* CouponsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E634A36A2822999B0069DE27 /* CouponsViewController.swift */; }; | 13 | E634A36B2822999B0069DE27 /* CouponsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E634A36A2822999B0069DE27 /* CouponsViewController.swift */; }; |
28 | - E639EFA2280810E300B9DD94 /* CouponsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E639EFA0280810E300B9DD94 /* CouponsView.swift */; }; | ||
29 | - E639EFA3280810E300B9DD94 /* CouponsViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = E639EFA1280810E300B9DD94 /* CouponsViewInterface.swift */; }; | ||
30 | E639EFA52808244E00B9DD94 /* MyEmptyClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = E639EFA42808244E00B9DD94 /* MyEmptyClass.swift */; }; | 14 | E639EFA52808244E00B9DD94 /* MyEmptyClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = E639EFA42808244E00B9DD94 /* MyEmptyClass.swift */; }; |
31 | E639EFAB2808347700B9DD94 /* ic_back.png in Resources */ = {isa = PBXBuildFile; fileRef = E639EFAA2808347700B9DD94 /* ic_back.png */; }; | 15 | E639EFAB2808347700B9DD94 /* ic_back.png in Resources */ = {isa = PBXBuildFile; fileRef = E639EFAA2808347700B9DD94 /* ic_back.png */; }; |
32 | E655D05A280590AD004F913C /* WarplySDKFrameworkIOS-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = E655D05928058A72004F913C /* WarplySDKFrameworkIOS-Bridging-Header.h */; }; | 16 | E655D05A280590AD004F913C /* WarplySDKFrameworkIOS-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = E655D05928058A72004F913C /* WarplySDKFrameworkIOS-Bridging-Header.h */; }; |
33 | - E67D1EB8281055D900940F01 /* WalletViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = E67D1EB7281055D900940F01 /* WalletViewInterface.swift */; }; | ||
34 | - E67D1EBA281055F800940F01 /* MoreForYouViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = E67D1EB9281055F800940F01 /* MoreForYouViewInterface.swift */; }; | ||
35 | - E67D1EBE2810573900940F01 /* WalletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E67D1EBD2810573900940F01 /* WalletView.swift */; }; | ||
36 | - E67D1EC02810579F00940F01 /* MoreForYouView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E67D1EBF2810579F00940F01 /* MoreForYouView.swift */; }; | ||
37 | - E67D1EC228113EED00940F01 /* CouponView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E67D1EC128113EED00940F01 /* CouponView.swift */; }; | ||
38 | - E67D1EC428113EFD00940F01 /* CouponViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = E67D1EC328113EFD00940F01 /* CouponViewInterface.swift */; }; | ||
39 | E67D1EC828119ED300940F01 /* swiftApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = E67D1EC528117F2400940F01 /* swiftApi.swift */; }; | 17 | E67D1EC828119ED300940F01 /* swiftApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = E67D1EC528117F2400940F01 /* swiftApi.swift */; }; |
40 | E6D8DE6D27A942010006A3A9 /* WarplySDKFrameworkIOS.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6D8DE6C27A942010006A3A9 /* WarplySDKFrameworkIOS.docc */; }; | 18 | E6D8DE6D27A942010006A3A9 /* WarplySDKFrameworkIOS.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6D8DE6C27A942010006A3A9 /* WarplySDKFrameworkIOS.docc */; }; |
41 | E6D8DE6E27A942010006A3A9 /* WarplySDKFrameworkIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = E6D8DE6B27A942010006A3A9 /* WarplySDKFrameworkIOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; | 19 | E6D8DE6E27A942010006A3A9 /* WarplySDKFrameworkIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = E6D8DE6B27A942010006A3A9 /* WarplySDKFrameworkIOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
... | @@ -154,34 +132,12 @@ | ... | @@ -154,34 +132,12 @@ |
154 | 132 | ||
155 | /* Begin PBXFileReference section */ | 133 | /* Begin PBXFileReference section */ |
156 | 1353B8C484CC0649CAC2EB74 /* Pods_WarplySDKFrameworkIOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WarplySDKFrameworkIOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | 134 | 1353B8C484CC0649CAC2EB74 /* Pods_WarplySDKFrameworkIOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WarplySDKFrameworkIOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
157 | - 1E7086642811A93F00704CA8 /* CouponBarcodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponBarcodeView.swift; sourceTree = "<group>"; }; | ||
158 | - 1E7086662811A96E00704CA8 /* CouponBarcodeViewInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponBarcodeViewInterface.swift; sourceTree = "<group>"; }; | ||
159 | - 1E735FF1281067320050A298 /* CampaignWebview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CampaignWebview.swift; sourceTree = "<group>"; }; | ||
160 | - 1E735FF32810681E0050A298 /* CampaignWebviewInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CampaignWebviewInterface.swift; sourceTree = "<group>"; }; | ||
161 | - 1E7536722822B72500149CC9 /* DetailsViewInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailsViewInterface.swift; sourceTree = "<group>"; }; | ||
162 | - 1E7536742822B76000149CC9 /* DetailsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailsView.swift; sourceTree = "<group>"; }; | ||
163 | - 1E879E24281AC96A0089F489 /* OldCouponsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OldCouponsView.swift; sourceTree = "<group>"; }; | ||
164 | - 1E879E26281AC99F0089F489 /* OldCouponsViewInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OldCouponsViewInterface.swift; sourceTree = "<group>"; }; | ||
165 | - 1E98EC1328199C4F007524A0 /* AllGiftsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AllGiftsView.swift; sourceTree = "<group>"; }; | ||
166 | - 1E98EC1528199C86007524A0 /* AllGiftsViewInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AllGiftsViewInterface.swift; sourceTree = "<group>"; }; | ||
167 | - 1EBEB02C280D69D800BF802C /* GiftsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftsView.swift; sourceTree = "<group>"; }; | ||
168 | - 1EBEB02E280D6AA500BF802C /* GiftsViewInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftsViewInterface.swift; sourceTree = "<group>"; }; | ||
169 | B9413513157AD76ECE896B81 /* Pods-WarplySDKFrameworkIOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WarplySDKFrameworkIOS.release.xcconfig"; path = "Target Support Files/Pods-WarplySDKFrameworkIOS/Pods-WarplySDKFrameworkIOS.release.xcconfig"; sourceTree = "<group>"; }; | 135 | B9413513157AD76ECE896B81 /* Pods-WarplySDKFrameworkIOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WarplySDKFrameworkIOS.release.xcconfig"; path = "Target Support Files/Pods-WarplySDKFrameworkIOS/Pods-WarplySDKFrameworkIOS.release.xcconfig"; sourceTree = "<group>"; }; |
170 | - E634A361282151E30069DE27 /* StepsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StepsView.swift; sourceTree = "<group>"; }; | ||
171 | - E634A363282168550069DE27 /* StepsViewInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StepsViewInterface.swift; sourceTree = "<group>"; }; | ||
172 | E634A368282299760069DE27 /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = "<group>"; }; | 136 | E634A368282299760069DE27 /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = "<group>"; }; |
173 | E634A36A2822999B0069DE27 /* CouponsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponsViewController.swift; sourceTree = "<group>"; }; | 137 | E634A36A2822999B0069DE27 /* CouponsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponsViewController.swift; sourceTree = "<group>"; }; |
174 | - E639EFA0280810E300B9DD94 /* CouponsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CouponsView.swift; sourceTree = "<group>"; }; | ||
175 | - E639EFA1280810E300B9DD94 /* CouponsViewInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CouponsViewInterface.swift; sourceTree = "<group>"; }; | ||
176 | E639EFA42808244E00B9DD94 /* MyEmptyClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyEmptyClass.swift; sourceTree = "<group>"; }; | 138 | E639EFA42808244E00B9DD94 /* MyEmptyClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyEmptyClass.swift; sourceTree = "<group>"; }; |
177 | E639EFAA2808347700B9DD94 /* ic_back.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_back.png; sourceTree = "<group>"; }; | 139 | E639EFAA2808347700B9DD94 /* ic_back.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ic_back.png; sourceTree = "<group>"; }; |
178 | E655D05928058A72004F913C /* WarplySDKFrameworkIOS-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "WarplySDKFrameworkIOS-Bridging-Header.h"; sourceTree = "<group>"; }; | 140 | E655D05928058A72004F913C /* WarplySDKFrameworkIOS-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "WarplySDKFrameworkIOS-Bridging-Header.h"; sourceTree = "<group>"; }; |
179 | - E67D1EB7281055D900940F01 /* WalletViewInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletViewInterface.swift; sourceTree = "<group>"; }; | ||
180 | - E67D1EB9281055F800940F01 /* MoreForYouViewInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreForYouViewInterface.swift; sourceTree = "<group>"; }; | ||
181 | - E67D1EBD2810573900940F01 /* WalletView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletView.swift; sourceTree = "<group>"; }; | ||
182 | - E67D1EBF2810579F00940F01 /* MoreForYouView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreForYouView.swift; sourceTree = "<group>"; }; | ||
183 | - E67D1EC128113EED00940F01 /* CouponView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponView.swift; sourceTree = "<group>"; }; | ||
184 | - E67D1EC328113EFD00940F01 /* CouponViewInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponViewInterface.swift; sourceTree = "<group>"; }; | ||
185 | E67D1EC528117F2400940F01 /* swiftApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = swiftApi.swift; sourceTree = "<group>"; }; | 141 | E67D1EC528117F2400940F01 /* swiftApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = swiftApi.swift; sourceTree = "<group>"; }; |
186 | E6D8DE6827A942010006A3A9 /* WarplySDKFrameworkIOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WarplySDKFrameworkIOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | 142 | E6D8DE6827A942010006A3A9 /* WarplySDKFrameworkIOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WarplySDKFrameworkIOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
187 | E6D8DE6B27A942010006A3A9 /* WarplySDKFrameworkIOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WarplySDKFrameworkIOS.h; sourceTree = "<group>"; }; | 143 | E6D8DE6B27A942010006A3A9 /* WarplySDKFrameworkIOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WarplySDKFrameworkIOS.h; sourceTree = "<group>"; }; |
... | @@ -360,26 +316,6 @@ | ... | @@ -360,26 +316,6 @@ |
360 | isa = PBXGroup; | 316 | isa = PBXGroup; |
361 | children = ( | 317 | children = ( |
362 | E639EFA92808347700B9DD94 /* UIResources */, | 318 | E639EFA92808347700B9DD94 /* UIResources */, |
363 | - E639EFA0280810E300B9DD94 /* CouponsView.swift */, | ||
364 | - E639EFA1280810E300B9DD94 /* CouponsViewInterface.swift */, | ||
365 | - 1EBEB02C280D69D800BF802C /* GiftsView.swift */, | ||
366 | - 1E7536722822B72500149CC9 /* DetailsViewInterface.swift */, | ||
367 | - 1E7536742822B76000149CC9 /* DetailsView.swift */, | ||
368 | - 1E98EC1328199C4F007524A0 /* AllGiftsView.swift */, | ||
369 | - 1E879E24281AC96A0089F489 /* OldCouponsView.swift */, | ||
370 | - 1E879E26281AC99F0089F489 /* OldCouponsViewInterface.swift */, | ||
371 | - 1E98EC1528199C86007524A0 /* AllGiftsViewInterface.swift */, | ||
372 | - 1E735FF1281067320050A298 /* CampaignWebview.swift */, | ||
373 | - 1E735FF32810681E0050A298 /* CampaignWebviewInterface.swift */, | ||
374 | - 1EBEB02E280D6AA500BF802C /* GiftsViewInterface.swift */, | ||
375 | - E67D1EB7281055D900940F01 /* WalletViewInterface.swift */, | ||
376 | - E67D1EBD2810573900940F01 /* WalletView.swift */, | ||
377 | - E67D1EB9281055F800940F01 /* MoreForYouViewInterface.swift */, | ||
378 | - E67D1EBF2810579F00940F01 /* MoreForYouView.swift */, | ||
379 | - E67D1EC128113EED00940F01 /* CouponView.swift */, | ||
380 | - 1E7086642811A93F00704CA8 /* CouponBarcodeView.swift */, | ||
381 | - 1E7086662811A96E00704CA8 /* CouponBarcodeViewInterface.swift */, | ||
382 | - E67D1EC328113EFD00940F01 /* CouponViewInterface.swift */, | ||
383 | E6D8DF5E27A9429E0006A3A9 /* MyApi.h */, | 319 | E6D8DF5E27A9429E0006A3A9 /* MyApi.h */, |
384 | E6D8DF5C27A9429E0006A3A9 /* MyApi.m */, | 320 | E6D8DF5C27A9429E0006A3A9 /* MyApi.m */, |
385 | E6D8DE7427A942910006A3A9 /* Helpers */, | 321 | E6D8DE7427A942910006A3A9 /* Helpers */, |
... | @@ -390,8 +326,6 @@ | ... | @@ -390,8 +326,6 @@ |
390 | E655D05928058A72004F913C /* WarplySDKFrameworkIOS-Bridging-Header.h */, | 326 | E655D05928058A72004F913C /* WarplySDKFrameworkIOS-Bridging-Header.h */, |
391 | E639EFA42808244E00B9DD94 /* MyEmptyClass.swift */, | 327 | E639EFA42808244E00B9DD94 /* MyEmptyClass.swift */, |
392 | E67D1EC528117F2400940F01 /* swiftApi.swift */, | 328 | E67D1EC528117F2400940F01 /* swiftApi.swift */, |
393 | - E634A361282151E30069DE27 /* StepsView.swift */, | ||
394 | - E634A363282168550069DE27 /* StepsViewInterface.swift */, | ||
395 | E634A368282299760069DE27 /* Main.storyboard */, | 329 | E634A368282299760069DE27 /* Main.storyboard */, |
396 | E634A36A2822999B0069DE27 /* CouponsViewController.swift */, | 330 | E634A36A2822999B0069DE27 /* CouponsViewController.swift */, |
397 | ); | 331 | ); |
... | @@ -786,54 +720,34 @@ | ... | @@ -786,54 +720,34 @@ |
786 | isa = PBXSourcesBuildPhase; | 720 | isa = PBXSourcesBuildPhase; |
787 | buildActionMask = 2147483647; | 721 | buildActionMask = 2147483647; |
788 | files = ( | 722 | files = ( |
789 | - 1E879E27281AC99F0089F489 /* OldCouponsViewInterface.swift in Sources */, | ||
790 | - E634A364282168550069DE27 /* StepsViewInterface.swift in Sources */, | ||
791 | E6D8DF0B27A942920006A3A9 /* WLEvent.m in Sources */, | 723 | E6D8DF0B27A942920006A3A9 /* WLEvent.m in Sources */, |
792 | E6D8DF1E27A942920006A3A9 /* UIViewController+WLAdditions.m in Sources */, | 724 | E6D8DF1E27A942920006A3A9 /* UIViewController+WLAdditions.m in Sources */, |
793 | E6D8DF2E27A942920006A3A9 /* UIRefreshControl+AFNetworking.m in Sources */, | 725 | E6D8DF2E27A942920006A3A9 /* UIRefreshControl+AFNetworking.m in Sources */, |
794 | E6D8DF4827A942920006A3A9 /* AFURLRequestSerialization.m in Sources */, | 726 | E6D8DF4827A942920006A3A9 /* AFURLRequestSerialization.m in Sources */, |
795 | - E67D1EC228113EED00940F01 /* CouponView.swift in Sources */, | ||
796 | - 1E7086672811A96E00704CA8 /* CouponBarcodeViewInterface.swift in Sources */, | ||
797 | - 1E98EC1428199C4F007524A0 /* AllGiftsView.swift in Sources */, | ||
798 | E6D8DEF327A942920006A3A9 /* WLNativeVideoTableViewCell.m in Sources */, | 727 | E6D8DEF327A942920006A3A9 /* WLNativeVideoTableViewCell.m in Sources */, |
799 | E6D8DF2527A942920006A3A9 /* WLSMSActionHanlder.m in Sources */, | 728 | E6D8DF2527A942920006A3A9 /* WLSMSActionHanlder.m in Sources */, |
800 | - E67D1EBE2810573900940F01 /* WalletView.swift in Sources */, | ||
801 | E6D8DF5727A942920006A3A9 /* FMResultSet.m in Sources */, | 729 | E6D8DF5727A942920006A3A9 /* FMResultSet.m in Sources */, |
802 | - E67D1EC428113EFD00940F01 /* CouponViewInterface.swift in Sources */, | ||
803 | E6D8DF3A27A942920006A3A9 /* UIButton+AFNetworking.m in Sources */, | 730 | E6D8DF3A27A942920006A3A9 /* UIButton+AFNetworking.m in Sources */, |
804 | E6D8DF0627A942920006A3A9 /* WLBeacon.m in Sources */, | 731 | E6D8DF0627A942920006A3A9 /* WLBeacon.m in Sources */, |
805 | - 1E735FF2281067320050A298 /* CampaignWebview.swift in Sources */, | ||
806 | E6D8DF2927A942920006A3A9 /* NSData+SSToolkitAdditions.m in Sources */, | 732 | E6D8DF2927A942920006A3A9 /* NSData+SSToolkitAdditions.m in Sources */, |
807 | - 1EBEB02D280D69D800BF802C /* GiftsView.swift in Sources */, | ||
808 | - E67D1EC02810579F00940F01 /* MoreForYouView.swift in Sources */, | ||
809 | E6D8DEFC27A942920006A3A9 /* WLCustomNativeAdTableViewCell.m in Sources */, | 733 | E6D8DEFC27A942920006A3A9 /* WLCustomNativeAdTableViewCell.m in Sources */, |
810 | - 1E735FF42810681E0050A298 /* CampaignWebviewInterface.swift in Sources */, | ||
811 | - E639EFA3280810E300B9DD94 /* CouponsViewInterface.swift in Sources */, | ||
812 | - 1EBEB02F280D6AA500BF802C /* GiftsViewInterface.swift in Sources */, | ||
813 | - E67D1EBA281055F800940F01 /* MoreForYouViewInterface.swift in Sources */, | ||
814 | E6D8DF4A27A942920006A3A9 /* AFNetworkReachabilityManager.m in Sources */, | 734 | E6D8DF4A27A942920006A3A9 /* AFNetworkReachabilityManager.m in Sources */, |
815 | E6D8DF4B27A942920006A3A9 /* AFSecurityPolicy.m in Sources */, | 735 | E6D8DF4B27A942920006A3A9 /* AFSecurityPolicy.m in Sources */, |
816 | E6D8DF1327A942920006A3A9 /* WLBeaconManager.m in Sources */, | 736 | E6D8DF1327A942920006A3A9 /* WLBeaconManager.m in Sources */, |
817 | E6D8DF0427A942920006A3A9 /* WLInboxItem.m in Sources */, | 737 | E6D8DF0427A942920006A3A9 /* WLInboxItem.m in Sources */, |
818 | E6D8DF5127A942920006A3A9 /* FMDatabaseAdditions.m in Sources */, | 738 | E6D8DF5127A942920006A3A9 /* FMDatabaseAdditions.m in Sources */, |
819 | - 1E879E25281AC96A0089F489 /* OldCouponsView.swift in Sources */, | ||
820 | E6D8DF2127A942920006A3A9 /* WLAPPActionHandler.m in Sources */, | 739 | E6D8DF2127A942920006A3A9 /* WLAPPActionHandler.m in Sources */, |
821 | E6D8DF5627A942920006A3A9 /* FMDatabasePool.m in Sources */, | 740 | E6D8DF5627A942920006A3A9 /* FMDatabasePool.m in Sources */, |
822 | E6D8DF4527A942920006A3A9 /* AFHTTPSessionManager.m in Sources */, | 741 | E6D8DF4527A942920006A3A9 /* AFHTTPSessionManager.m in Sources */, |
823 | E6D8DF3B27A942920006A3A9 /* UIActivityIndicatorView+AFNetworking.m in Sources */, | 742 | E6D8DF3B27A942920006A3A9 /* UIActivityIndicatorView+AFNetworking.m in Sources */, |
824 | E6D8DF3727A942920006A3A9 /* UIImageView+AFNetworking.m in Sources */, | 743 | E6D8DF3727A942920006A3A9 /* UIImageView+AFNetworking.m in Sources */, |
825 | - E67D1EB8281055D900940F01 /* WalletViewInterface.swift in Sources */, | ||
826 | E6D8DF3127A942920006A3A9 /* AFNetworkActivityIndicatorManager.m in Sources */, | 744 | E6D8DF3127A942920006A3A9 /* AFNetworkActivityIndicatorManager.m in Sources */, |
827 | E6D8DF3D27A942920006A3A9 /* AFAutoPurgingImageCache.m in Sources */, | 745 | E6D8DF3D27A942920006A3A9 /* AFAutoPurgingImageCache.m in Sources */, |
828 | - E634A362282151E30069DE27 /* StepsView.swift in Sources */, | ||
829 | E6D8DF0A27A942920006A3A9 /* WLAPSItem.m in Sources */, | 746 | E6D8DF0A27A942920006A3A9 /* WLAPSItem.m in Sources */, |
830 | E6D8DF2C27A942920006A3A9 /* UIProgressView+AFNetworking.m in Sources */, | 747 | E6D8DF2C27A942920006A3A9 /* UIProgressView+AFNetworking.m in Sources */, |
831 | E6D8DF3C27A942920006A3A9 /* UIWebView+AFNetworking.m in Sources */, | 748 | E6D8DF3C27A942920006A3A9 /* UIWebView+AFNetworking.m in Sources */, |
832 | - E639EFA2280810E300B9DD94 /* CouponsView.swift in Sources */, | ||
833 | - 1E98EC1628199C86007524A0 /* AllGiftsViewInterface.swift in Sources */, | ||
834 | E6D8DF1427A942920006A3A9 /* WLLocationManager.m in Sources */, | 749 | E6D8DF1427A942920006A3A9 /* WLLocationManager.m in Sources */, |
835 | E6D8DF6027A9429E0006A3A9 /* MyApi.m in Sources */, | 750 | E6D8DF6027A9429E0006A3A9 /* MyApi.m in Sources */, |
836 | - 1E7536752822B76000149CC9 /* DetailsView.swift in Sources */, | ||
837 | E6D8DF3F27A942920006A3A9 /* AFImageDownloader.m in Sources */, | 751 | E6D8DF3F27A942920006A3A9 /* AFImageDownloader.m in Sources */, |
838 | E6D8DEF727A942920006A3A9 /* WLNativeAdsCollectionMode.m in Sources */, | 752 | E6D8DEF727A942920006A3A9 /* WLNativeAdsCollectionMode.m in Sources */, |
839 | E6D8DEF427A942920006A3A9 /* WLCustomNativeCollectionViewCell.m in Sources */, | 753 | E6D8DEF427A942920006A3A9 /* WLCustomNativeCollectionViewCell.m in Sources */, |
... | @@ -843,7 +757,6 @@ | ... | @@ -843,7 +757,6 @@ |
843 | E67D1EC828119ED300940F01 /* swiftApi.swift in Sources */, | 757 | E67D1EC828119ED300940F01 /* swiftApi.swift in Sources */, |
844 | E6D8DF5227A942920006A3A9 /* FMDatabase.m in Sources */, | 758 | E6D8DF5227A942920006A3A9 /* FMDatabase.m in Sources */, |
845 | E6D8DF1227A942920006A3A9 /* WLPushManager.m in Sources */, | 759 | E6D8DF1227A942920006A3A9 /* WLPushManager.m in Sources */, |
846 | - 1E7086652811A93F00704CA8 /* CouponBarcodeView.swift in Sources */, | ||
847 | E6D8DEF827A942920006A3A9 /* WLNativeAdTableViewCell.m in Sources */, | 760 | E6D8DEF827A942920006A3A9 /* WLNativeAdTableViewCell.m in Sources */, |
848 | E6D8DE6D27A942010006A3A9 /* WarplySDKFrameworkIOS.docc in Sources */, | 761 | E6D8DE6D27A942010006A3A9 /* WarplySDKFrameworkIOS.docc in Sources */, |
849 | E6D8DF4427A942920006A3A9 /* AFURLResponseSerialization.m in Sources */, | 762 | E6D8DF4427A942920006A3A9 /* AFURLResponseSerialization.m in Sources */, |
... | @@ -856,7 +769,6 @@ | ... | @@ -856,7 +769,6 @@ |
856 | E6D8DEEE27A942920006A3A9 /* WarplyReactMethods.m in Sources */, | 769 | E6D8DEEE27A942920006A3A9 /* WarplyReactMethods.m in Sources */, |
857 | E6D8DEF927A942920006A3A9 /* WLNativeAdCollectionViewCell.m in Sources */, | 770 | E6D8DEF927A942920006A3A9 /* WLNativeAdCollectionViewCell.m in Sources */, |
858 | E634A36B2822999B0069DE27 /* CouponsViewController.swift in Sources */, | 771 | E634A36B2822999B0069DE27 /* CouponsViewController.swift in Sources */, |
859 | - 1E7536732822B72500149CC9 /* DetailsViewInterface.swift in Sources */, | ||
860 | E6D8DF4E27A942920006A3A9 /* FMDatabaseQueue.m in Sources */, | 772 | E6D8DF4E27A942920006A3A9 /* FMDatabaseQueue.m in Sources */, |
861 | E6D8DF0827A942920006A3A9 /* WLBaseItem.m in Sources */, | 773 | E6D8DF0827A942920006A3A9 /* WLBaseItem.m in Sources */, |
862 | E6D8DF0727A942920006A3A9 /* WLInboxItemViewController.m in Sources */, | 774 | E6D8DF0727A942920006A3A9 /* WLInboxItemViewController.m in Sources */, |
... | @@ -989,6 +901,7 @@ | ... | @@ -989,6 +901,7 @@ |
989 | baseConfigurationReference = F2447FDBC0B149DFB9DC6E40 /* Pods-WarplySDKFrameworkIOS.debug.xcconfig */; | 901 | baseConfigurationReference = F2447FDBC0B149DFB9DC6E40 /* Pods-WarplySDKFrameworkIOS.debug.xcconfig */; |
990 | buildSettings = { | 902 | buildSettings = { |
991 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; | 903 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; |
904 | + APPLICATION_EXTENSION_API_ONLY = NO; | ||
992 | CLANG_ENABLE_MODULES = YES; | 905 | CLANG_ENABLE_MODULES = YES; |
993 | CODE_SIGN_STYLE = Automatic; | 906 | CODE_SIGN_STYLE = Automatic; |
994 | CURRENT_PROJECT_VERSION = 1; | 907 | CURRENT_PROJECT_VERSION = 1; |
... | @@ -1025,6 +938,7 @@ | ... | @@ -1025,6 +938,7 @@ |
1025 | baseConfigurationReference = B9413513157AD76ECE896B81 /* Pods-WarplySDKFrameworkIOS.release.xcconfig */; | 938 | baseConfigurationReference = B9413513157AD76ECE896B81 /* Pods-WarplySDKFrameworkIOS.release.xcconfig */; |
1026 | buildSettings = { | 939 | buildSettings = { |
1027 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; | 940 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; |
941 | + APPLICATION_EXTENSION_API_ONLY = NO; | ||
1028 | CLANG_ENABLE_MODULES = YES; | 942 | CLANG_ENABLE_MODULES = YES; |
1029 | CODE_SIGN_STYLE = Automatic; | 943 | CODE_SIGN_STYLE = Automatic; |
1030 | CURRENT_PROJECT_VERSION = 1; | 944 | CURRENT_PROJECT_VERSION = 1; | ... | ... |
No preview for this file type
1 | -// | ||
2 | -// AllGiftsView.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Manos Chorianopoulos on 27/4/22. | ||
6 | -// | ||
7 | - | ||
8 | - | ||
9 | -#if canImport(SwiftUI) | ||
10 | -import SwiftUI | ||
11 | -import Combine | ||
12 | -import Foundation | ||
13 | -import UIKit | ||
14 | - | ||
15 | - | ||
16 | -extension AllGiftsView { | ||
17 | - struct headerView: View { | ||
18 | - var goBack: () -> () | ||
19 | - | ||
20 | - var uiscreen = UIScreen.main.bounds | ||
21 | - | ||
22 | - var body: some View { | ||
23 | - HStack(alignment: .center) { | ||
24 | - Button { | ||
25 | - // Button Action | ||
26 | - print("Back Button tapped!") | ||
27 | - goBack() | ||
28 | - } label: { | ||
29 | - Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
30 | - .resizable() | ||
31 | - .aspectRatio(contentMode: .fit) | ||
32 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
33 | - } | ||
34 | - Spacer().frame(width: 0) | ||
35 | - Text("Όλα τα δώρα μου") | ||
36 | - .fontWeight(.medium) | ||
37 | - .font(.system(size: 16)) | ||
38 | - .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
39 | - .multilineTextAlignment(.center) | ||
40 | - .frame(maxWidth: .infinity) | ||
41 | - .padding(.horizontal) | ||
42 | - .offset(x: -self.uiscreen.height * 0.0125) | ||
43 | - } | ||
44 | - .frame(maxWidth: .infinity) | ||
45 | - .padding(.horizontal) | ||
46 | - .padding(.vertical, 10) | ||
47 | - } | ||
48 | - } | ||
49 | - | ||
50 | - struct ImageView: View { | ||
51 | - @ObservedObject var imageLoader:UrlImageModel | ||
52 | - @State var width:CGFloat | ||
53 | - @State var isFill:Bool | ||
54 | - | ||
55 | - var uiscreen = UIScreen.main.bounds | ||
56 | - | ||
57 | - init(withURL url:String , width:CGFloat, isFill:Bool) { | ||
58 | - imageLoader = UrlImageModel(urlString:url) | ||
59 | - self.width = width | ||
60 | - self.isFill = isFill | ||
61 | - } | ||
62 | - | ||
63 | - var body: some View { | ||
64 | - | ||
65 | - Image(uiImage: imageLoader.image ?? UIImage()) | ||
66 | - .resizable() | ||
67 | - .aspectRatio(contentMode: isFill ? .fill : .fit) | ||
68 | - .frame(width: self.width) | ||
69 | - .frame(maxHeight: .infinity) | ||
70 | - } | ||
71 | - } | ||
72 | - | ||
73 | - | ||
74 | - struct giftItemView: View { | ||
75 | - var item: swiftApi.CouponItemModel | ||
76 | - var parentView: UIView | ||
77 | - | ||
78 | - var uiscreen = UIScreen.main.bounds | ||
79 | - | ||
80 | - var body: some View { | ||
81 | - let couponSetData = item.couponset_data | ||
82 | - | ||
83 | - Button { | ||
84 | - // GiftItem Action | ||
85 | - let instanceOfMySwiftApi = swiftApi() | ||
86 | - let couponBarcodeViewController = instanceOfMySwiftApi.openCouponBarcode(parent: parentView, coupon: item) | ||
87 | - couponBarcodeViewController.view.tag = 7 | ||
88 | -// addChild(couponsViewController) | ||
89 | - couponBarcodeViewController.view.frame = parentView.frame | ||
90 | - parentView.addSubview(couponBarcodeViewController.view) | ||
91 | -// couponBarcodeViewController.didMove(toParent: UIHostingController(rootView: self)) | ||
92 | - } label: { | ||
93 | - HStack(alignment: .center, spacing: 0.0) { | ||
94 | - | ||
95 | - ImageView(withURL: couponSetData?.img_preview ?? "", width: self.uiscreen.width * 0.5, isFill: true) | ||
96 | - | ||
97 | - VStack(alignment: .leading, spacing: 5.0) { | ||
98 | - Text(couponSetData?.name ?? "") | ||
99 | - .fontWeight(.bold) | ||
100 | - .font(.system(size: 16)) | ||
101 | - .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | ||
102 | - .multilineTextAlignment(.leading) | ||
103 | - .padding([.top,.horizontal], 15) | ||
104 | - .background(Color.white) | ||
105 | - | ||
106 | - Text(couponSetData?.short_description ?? "") | ||
107 | - .fontWeight(.regular) | ||
108 | - .font(.system(size: 16)) | ||
109 | - .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | ||
110 | - .multilineTextAlignment(.leading) | ||
111 | - .padding([.bottom,.horizontal], 15) | ||
112 | - .background(Color.white) | ||
113 | - .frame(maxWidth: .infinity, maxHeight: .infinity) | ||
114 | - } | ||
115 | - .background(Color.white) | ||
116 | - .frame(maxWidth: .infinity, maxHeight: .infinity) | ||
117 | - } | ||
118 | - .background(Color.white) | ||
119 | - .frame(maxWidth: .infinity, maxHeight: .infinity) | ||
120 | - } | ||
121 | - .frame(width: self.uiscreen.width * 0.95, height: self.uiscreen.height * 0.17) | ||
122 | - .background(Color.white) | ||
123 | - .cornerRadius(5) | ||
124 | - .shadow(color: Color(red: 0, green: 0, blue: 0, opacity: 0.16), radius: 6, x: 0, y: 3) | ||
125 | - } | ||
126 | - } | ||
127 | - | ||
128 | - struct couponsContainer: View { | ||
129 | - @State var coupons:Array<swiftApi.CouponItemModel> = [] | ||
130 | - @State var parentView:UIView | ||
131 | - | ||
132 | - var uiscreen = UIScreen.main.bounds | ||
133 | - | ||
134 | - var body: some View { | ||
135 | - VStack(alignment: .center, spacing: self.uiscreen.height * 0.03) { | ||
136 | - | ||
137 | - ForEach(Array(coupons.enumerated()), id: \.offset) { index, item in | ||
138 | - | ||
139 | - giftItemView(item: item, parentView: parentView) | ||
140 | - } | ||
141 | - } | ||
142 | - .frame(maxWidth: .infinity) | ||
143 | - .padding(.top, self.uiscreen.height * 0.05) | ||
144 | - .padding(.bottom, self.uiscreen.height * 0.1) | ||
145 | - } | ||
146 | - } | ||
147 | - | ||
148 | -} | ||
149 | - | ||
150 | -@available(iOS 13.0.0, *) | ||
151 | -struct AllGiftsView: View { | ||
152 | - var parentView: UIView | ||
153 | - | ||
154 | - var coupons:Array<swiftApi.CouponItemModel> = [] | ||
155 | - | ||
156 | - var uiscreen = UIScreen.main.bounds | ||
157 | - | ||
158 | - init(parentView: UIView) { //initializer method | ||
159 | - | ||
160 | - let instanceOfMySwiftApi = swiftApi() | ||
161 | - let couponsData = instanceOfMySwiftApi.getCoupons() | ||
162 | - | ||
163 | - self.coupons = couponsData | ||
164 | - self.parentView = parentView | ||
165 | - } | ||
166 | - | ||
167 | - func goBack(){ | ||
168 | - for subview in parentView.subviews { | ||
169 | - if(subview.tag == 8) { | ||
170 | - subview.removeFromSuperview() | ||
171 | - } | ||
172 | - } | ||
173 | - } | ||
174 | - | ||
175 | - var body: some View { | ||
176 | - VStack { | ||
177 | - headerView(goBack: goBack) | ||
178 | - | ||
179 | - VStack { | ||
180 | - ScrollView(showsIndicators: false) { | ||
181 | - VStack { | ||
182 | - | ||
183 | - if (coupons.count) > 0 { | ||
184 | - couponsContainer(coupons: coupons, parentView: parentView ) | ||
185 | - } | ||
186 | - | ||
187 | - } | ||
188 | - .frame(width:self.uiscreen.width) | ||
189 | - } | ||
190 | - .cornerRadius(30, corners: [.topLeft]) | ||
191 | - .frame(width:self.uiscreen.width) | ||
192 | - .frame(maxHeight: .infinity) | ||
193 | - } | ||
194 | - .frame(width:self.uiscreen.width) | ||
195 | - .frame(maxHeight: .infinity) | ||
196 | - .padding(.top, 5) | ||
197 | - .background( | ||
198 | - Image("coupons_scrollview", bundle: Bundle(for: MyEmptyClass.self)) | ||
199 | - .resizable() | ||
200 | - ) | ||
201 | - | ||
202 | - } | ||
203 | - .edgesIgnoringSafeArea([.bottom]) | ||
204 | - .frame(width:self.uiscreen.width) | ||
205 | - .frame(maxHeight: .infinity) | ||
206 | - } | ||
207 | -} | ||
208 | -#endif | ||
209 | - | ||
210 | -//struct AllGiftsView_Previews: PreviewProvider { | ||
211 | -// static var previews: some View { | ||
212 | -// AllGiftsView() | ||
213 | -// } | ||
214 | -//} |
1 | -// | ||
2 | -// AllGiftsViewInterface.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Manos Chorianopoulos on 27/4/22. | ||
6 | -// | ||
7 | - | ||
8 | -import Foundation | ||
9 | -import SwiftUI | ||
10 | - | ||
11 | -@available(iOS 13.0.0, *) | ||
12 | -@objc public class AllGiftsViewInterface : NSObject { | ||
13 | - | ||
14 | - @objc(allGiftsViewController:) static public func allGiftsViewController(parentView: UIView?) -> UIViewController { | ||
15 | - return UIHostingController(rootView: AllGiftsView(parentView: parentView!)) | ||
16 | - } | ||
17 | - | ||
18 | -} |
1 | -// | ||
2 | -// CampaignWebview.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Manos Chorianopoulos on 20/4/22. | ||
6 | -// | ||
7 | - | ||
8 | - | ||
9 | -#if canImport(SwiftUI) | ||
10 | -import SwiftUI | ||
11 | -import Combine | ||
12 | -import Foundation | ||
13 | -import UIKit | ||
14 | -import WebKit | ||
15 | - | ||
16 | - | ||
17 | -extension CampaignWebview { | ||
18 | - struct headerView: View { | ||
19 | - var goBack: () -> () | ||
20 | - | ||
21 | - var uiscreen = UIScreen.main.bounds | ||
22 | - | ||
23 | - var body: some View { | ||
24 | - HStack(alignment: .center) { | ||
25 | - Button { | ||
26 | - // Button Action | ||
27 | - print("Back Button tapped!") | ||
28 | - goBack() | ||
29 | - } label: { | ||
30 | - Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
31 | - .resizable() | ||
32 | - .aspectRatio(contentMode: .fit) | ||
33 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
34 | - } | ||
35 | - Spacer().frame(width: 0) | ||
36 | - Text("") | ||
37 | - .fontWeight(.medium) | ||
38 | - .font(.system(size: 16)) | ||
39 | - .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
40 | - .multilineTextAlignment(.center) | ||
41 | - .frame(maxWidth: .infinity) | ||
42 | - .padding(.horizontal) | ||
43 | - .offset(x: -self.uiscreen.height * 0.0125) | ||
44 | - } | ||
45 | - .frame(maxWidth: .infinity) | ||
46 | - .padding(.horizontal) | ||
47 | - .padding(.vertical, 10) | ||
48 | - } | ||
49 | - } | ||
50 | - | ||
51 | - struct WebView: UIViewRepresentable { | ||
52 | - | ||
53 | - var url: String | ||
54 | - | ||
55 | - func makeUIView(context: Context) -> WKWebView { | ||
56 | - return WKWebView() | ||
57 | - } | ||
58 | - | ||
59 | - func updateUIView(_ webView: WKWebView, context: Context) { | ||
60 | - var request = URLRequest(url: URL(string: url)!) | ||
61 | - request.cachePolicy = .reloadRevalidatingCacheData | ||
62 | - webView.load(request) | ||
63 | - } | ||
64 | - } | ||
65 | - | ||
66 | -} | ||
67 | - | ||
68 | -@available(iOS 13.0.0, *) | ||
69 | -struct CampaignWebview: View { | ||
70 | - var parentView: UIView | ||
71 | - var campaign: String | ||
72 | - | ||
73 | - var uiscreen = UIScreen.main.bounds | ||
74 | - | ||
75 | - func goBack(){ | ||
76 | - for subview in parentView.subviews { | ||
77 | - if(subview.tag == 6) { | ||
78 | - subview.removeFromSuperview() | ||
79 | - } | ||
80 | - } | ||
81 | - } | ||
82 | - | ||
83 | - var body: some View { | ||
84 | - VStack { | ||
85 | - headerView(goBack: goBack) | ||
86 | - | ||
87 | - VStack { | ||
88 | - WebView(url: campaign) | ||
89 | - } | ||
90 | - .background( | ||
91 | - LinearGradient(gradient: Gradient(colors: [Color(red: 0.06, green: 0.67, blue: 0.84), Color(red: 0.47, green: 0.75, blue: 0.43)]), startPoint: .top, endPoint: .bottom) | ||
92 | - ) | ||
93 | - .cornerRadius(30, corners: [.topLeft]) | ||
94 | - .frame(width:self.uiscreen.width) | ||
95 | - .frame(maxHeight: .infinity) | ||
96 | - } | ||
97 | - .edgesIgnoringSafeArea([.bottom]) | ||
98 | - .frame(width:self.uiscreen.width) | ||
99 | - .frame(maxHeight: .infinity) | ||
100 | - } | ||
101 | -} | ||
102 | -#endif | ||
103 | - | ||
104 | -//@available(iOS 13.0.0, *) | ||
105 | -//struct CampaignWebview_Previews: PreviewProvider { | ||
106 | -// static var previews: some View { | ||
107 | -// | ||
108 | -// CampaignWebview() | ||
109 | -// | ||
110 | -// } | ||
111 | -//} |
1 | -// | ||
2 | -// CampaignWebviewInterface.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Manos Chorianopoulos on 20/4/22. | ||
6 | -// | ||
7 | - | ||
8 | -import Foundation | ||
9 | -import SwiftUI | ||
10 | - | ||
11 | -@available(iOS 13.0.0, *) | ||
12 | -@objc public class CampaignViewInterface : NSObject { | ||
13 | - | ||
14 | - @objc(campaignViewController::) static public func campaignViewController(parentView: UIView?, campaign: String?) -> UIViewController { | ||
15 | - return UIHostingController(rootView: CampaignWebview(parentView: parentView!, campaign: campaign ?? "")) | ||
16 | - } | ||
17 | - | ||
18 | -} |
1 | -// | ||
2 | -// CouponBarcodeView.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Manos Chorianopoulos on 21/4/22. | ||
6 | -// | ||
7 | - | ||
8 | -#if canImport(SwiftUI) | ||
9 | -import SwiftUI | ||
10 | -import Combine | ||
11 | -import Foundation | ||
12 | -import UIKit | ||
13 | -// TODO: Uncomment for barcode | ||
14 | -import RSBarcodes_Swift | ||
15 | -import AVFoundation | ||
16 | - | ||
17 | - | ||
18 | - | ||
19 | -extension String { | ||
20 | - | ||
21 | - var length: Int { | ||
22 | - return count | ||
23 | - } | ||
24 | - | ||
25 | - subscript (i: Int) -> String { | ||
26 | - return self[i ..< i + 1] | ||
27 | - } | ||
28 | - | ||
29 | - func substring(fromIndex: Int) -> String { | ||
30 | - return self[min(fromIndex, length) ..< length] | ||
31 | - } | ||
32 | - | ||
33 | - func substring(toIndex: Int) -> String { | ||
34 | - return self[0 ..< max(0, toIndex)] | ||
35 | - } | ||
36 | - | ||
37 | - subscript (r: Range<Int>) -> String { | ||
38 | - let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)), | ||
39 | - upper: min(length, max(0, r.upperBound)))) | ||
40 | - let start = index(startIndex, offsetBy: range.lowerBound) | ||
41 | - let end = index(start, offsetBy: range.upperBound - range.lowerBound) | ||
42 | - return String(self[start ..< end]) | ||
43 | - } | ||
44 | -} | ||
45 | - | ||
46 | -extension CouponBarcodeView { | ||
47 | - struct headerView: View { | ||
48 | - var goBack: () -> () | ||
49 | - | ||
50 | - var uiscreen = UIScreen.main.bounds | ||
51 | - | ||
52 | - var body: some View { | ||
53 | - HStack(alignment: .center) { | ||
54 | - Button { | ||
55 | - // Button Action | ||
56 | - goBack() | ||
57 | - } label: { | ||
58 | - Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
59 | - .resizable() | ||
60 | - .aspectRatio(contentMode: .fit) | ||
61 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
62 | - } | ||
63 | - Spacer().frame(width: 0) | ||
64 | - Text("Εκπτωτικό κουπόνι") | ||
65 | - .fontWeight(.medium) | ||
66 | - .font(.system(size: 16)) | ||
67 | - .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
68 | - .multilineTextAlignment(.center) | ||
69 | - .frame(maxWidth: .infinity) | ||
70 | - .padding(.horizontal) | ||
71 | - .offset(x: -self.uiscreen.height * 0.0125) | ||
72 | - } | ||
73 | - .frame(maxWidth: .infinity) | ||
74 | - .padding(.horizontal) | ||
75 | - .padding(.vertical, 10) | ||
76 | - } | ||
77 | - } | ||
78 | - | ||
79 | - struct couponContainer: View { | ||
80 | - @State var coupon: swiftApi.CouponItemModel | ||
81 | -// @State var couponset:CouponSetItemModel | ||
82 | - | ||
83 | - var uiscreen = UIScreen.main.bounds | ||
84 | - | ||
85 | - | ||
86 | - static func convertDateFormat(inputDate: String) -> String { | ||
87 | - let dateFormatter = DateFormatter() | ||
88 | - dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss" | ||
89 | - if let date = dateFormatter.date(from: inputDate) { | ||
90 | - dateFormatter.dateFormat = "dd/MM/yyyy" | ||
91 | - let resultString = dateFormatter.string(from: date) | ||
92 | - return resultString | ||
93 | - } else { | ||
94 | - return "" | ||
95 | - } | ||
96 | - } | ||
97 | - | ||
98 | - | ||
99 | - func constructBarcode() -> String? { | ||
100 | - // EAN 13 barcode construction | ||
101 | - let couponData = coupon.couponset_data | ||
102 | - let couponString = coupon.coupon ?? "" | ||
103 | - | ||
104 | - if (!couponString.isEmpty) { | ||
105 | - var checkDigit = 0; | ||
106 | - var result = 0; | ||
107 | - | ||
108 | - var fixedCouponCode = couponString; | ||
109 | - if (fixedCouponCode.count < 12) { | ||
110 | - let loops = 12 - fixedCouponCode.count; | ||
111 | - var zerosStr = ""; | ||
112 | - for i in 0 ..< loops { | ||
113 | - zerosStr += "0" | ||
114 | - } | ||
115 | - fixedCouponCode = zerosStr + fixedCouponCode; | ||
116 | - } | ||
117 | - | ||
118 | - var multiplier = 3; | ||
119 | - for idx in (0 ... (fixedCouponCode.count - 1)).reversed() { | ||
120 | - let curChar = fixedCouponCode[idx]; | ||
121 | - result += (Int(curChar) ?? 0) * multiplier; | ||
122 | - multiplier = multiplier == 3 ? 1 : 3; | ||
123 | - } | ||
124 | - checkDigit = 10 - (result % 10); | ||
125 | - | ||
126 | - let barcodeStr = fixedCouponCode + String(checkDigit); | ||
127 | - return barcodeStr; | ||
128 | - } | ||
129 | - | ||
130 | - return "" | ||
131 | - } | ||
132 | - | ||
133 | - | ||
134 | - var body: some View { | ||
135 | - let couponData = coupon.couponset_data | ||
136 | - let barcodeString = constructBarcode() ?? "" | ||
137 | - | ||
138 | - GeometryReader { geometry in | ||
139 | - ScrollView(showsIndicators: false) { | ||
140 | - VStack(alignment: .leading) { | ||
141 | - | ||
142 | - ImageView(withURL: couponData?.img_preview ?? "") | ||
143 | - | ||
144 | - VStack(alignment: .leading) { | ||
145 | - Text(coupon.name!) | ||
146 | - .fontWeight(.bold) | ||
147 | - .font(.system(size: 16)) | ||
148 | - .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | ||
149 | - .multilineTextAlignment(.leading) | ||
150 | - .padding(.horizontal) | ||
151 | - .padding(.top, self.uiscreen.height * 0.04) | ||
152 | - .frame(maxHeight: .infinity) | ||
153 | - | ||
154 | - Text(couponData?.short_description! ?? "") | ||
155 | - .fontWeight(.regular) | ||
156 | - .font(.system(size: 14)) | ||
157 | - .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | ||
158 | - .multilineTextAlignment(.leading) | ||
159 | - .padding(.horizontal) | ||
160 | - .padding(.top, self.uiscreen.height * 0.02) | ||
161 | - | ||
162 | - Text("Κωδικός Κουπονιού") | ||
163 | - .fontWeight(.medium) | ||
164 | - .font(.system(size: 16)) | ||
165 | - .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | ||
166 | - .multilineTextAlignment(.center) | ||
167 | - .padding(.top, self.uiscreen.height * 0.05) | ||
168 | - .padding(.horizontal) | ||
169 | - .frame(maxWidth: .infinity) | ||
170 | - | ||
171 | - VStack(alignment: .center) { | ||
172 | - VStack { | ||
173 | - Text(coupon.coupon!) | ||
174 | - .fontWeight(.bold) | ||
175 | - .font(.system(size: 27)) | ||
176 | - .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | ||
177 | - .multilineTextAlignment(.center) | ||
178 | - .padding(.horizontal) | ||
179 | - .padding(.vertical, 10) | ||
180 | -// .padding(.all) | ||
181 | - } | ||
182 | - .frame(width: self.uiscreen.width * 0.8) | ||
183 | - .background(Color(red: 0.9333333333333333, green: 0.9686274509803922, blue: 1.0)) | ||
184 | - .cornerRadius(10) | ||
185 | - } | ||
186 | - .frame(maxWidth: .infinity) | ||
187 | - | ||
188 | - if (CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: coupon.coupon ?? ""))) { | ||
189 | - VStack(alignment: .center) { | ||
190 | - VStack {} | ||
191 | - .frame(height: 1) | ||
192 | - .frame(width: self.uiscreen.width * 0.9) | ||
193 | - .background(Color(red: 0.9019607843137255, green: 0.9019607843137255, blue: 0.9019607843137255)) | ||
194 | - } | ||
195 | - .frame(maxWidth: .infinity) | ||
196 | - .padding(.top, self.uiscreen.height * 0.015) | ||
197 | - | ||
198 | -// let isValid = RSUnifiedCodeValidator.shared.isValid(barcodeString, machineReadableCodeObjectType: AVMetadataObject.ObjectType.ean13.rawValue) | ||
199 | - | ||
200 | - // TODO: Uncomment for barcode | ||
201 | - if let barcodeImage = RSUnifiedCodeGenerator.shared.generateCode(barcodeString, machineReadableCodeObjectType: AVMetadataObject.ObjectType.ean13.rawValue, targetSize: CGSize(width: self.uiscreen.width * 0.8, height: self.uiscreen.height * 0.1)) { | ||
202 | - | ||
203 | -// | ||
204 | - VStack(alignment: .center) { | ||
205 | - Image(uiImage: barcodeImage) | ||
206 | - .resizable() | ||
207 | - .aspectRatio(contentMode: .fit) | ||
208 | - .frame(width: self.uiscreen.width * 0.8, height: self.uiscreen.height * 0.1) | ||
209 | - } | ||
210 | - .frame(maxWidth: .infinity) | ||
211 | - .padding(.top, self.uiscreen.height * 0.01) | ||
212 | - } | ||
213 | - | ||
214 | - | ||
215 | - Text(barcodeString) | ||
216 | - .fontWeight(.regular) | ||
217 | - .font(.system(size: 22)) | ||
218 | - .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | ||
219 | - .multilineTextAlignment(.center) | ||
220 | - .padding(.vertical, self.uiscreen.height * 0.01) | ||
221 | - .padding(.horizontal) | ||
222 | - .frame(maxWidth: .infinity) | ||
223 | - | ||
224 | - | ||
225 | - VStack(alignment: .center) { | ||
226 | - VStack {} | ||
227 | - .frame(height: 1) | ||
228 | - .frame(width: self.uiscreen.width * 0.9) | ||
229 | - .background(Color(red: 0.9019607843137255, green: 0.9019607843137255, blue: 0.9019607843137255)) | ||
230 | - } | ||
231 | - .frame(maxWidth: .infinity) | ||
232 | - } | ||
233 | - | ||
234 | - | ||
235 | - | ||
236 | - Text("Το κουπόνι ισχύει έως " + CouponBarcodeView.couponContainer.convertDateFormat(inputDate: couponData?.expiration ?? "")) | ||
237 | - .fontWeight(.medium) | ||
238 | - .font(.system(size: 14)) | ||
239 | - .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | ||
240 | - .multilineTextAlignment(.center) | ||
241 | - .padding(.top, self.uiscreen.height * 0.03) | ||
242 | - .padding(.horizontal) | ||
243 | - .frame(maxWidth: .infinity) | ||
244 | - } | ||
245 | - .frame(width:self.uiscreen.width) | ||
246 | - | ||
247 | - | ||
248 | - | ||
249 | - Spacer() | ||
250 | - | ||
251 | - VStack(alignment: .center) { | ||
252 | - Button { | ||
253 | - // Button Action | ||
254 | - print("Send Gift Button tapped!") | ||
255 | - } label: { | ||
256 | - HStack { | ||
257 | - Text("Κάντο δώρο!") | ||
258 | - .fontWeight(.medium) | ||
259 | - .font(.system(size: 16)) | ||
260 | - .foregroundColor(Color(red: 0.3137254901960784, green: 0.6196078431372549, blue: 0.1843137254901961)) | ||
261 | - .multilineTextAlignment(.center) | ||
262 | - .padding(.all) | ||
263 | - | ||
264 | - // TODO: Add gift icon | ||
265 | - } | ||
266 | - .frame(maxWidth: .infinity) | ||
267 | - } | ||
268 | - .frame(width: self.uiscreen.width * 0.8) | ||
269 | - .background(Color(red: 0.9019607843137255, green: 0.9019607843137255, blue: 0.9019607843137255)) | ||
270 | - .cornerRadius(7) | ||
271 | - } | ||
272 | - .frame(maxWidth: .infinity) | ||
273 | - .padding(.top, self.uiscreen.height * 0.05) | ||
274 | - | ||
275 | -// VStack(alignment: .center) { | ||
276 | -// Button { | ||
277 | -// // Button Action | ||
278 | -// print("Shops Map Button tapped!") | ||
279 | -// } label: { | ||
280 | -// HStack { | ||
281 | -// Text("Χάρτης Καταστημάτων") | ||
282 | -// .fontWeight(.medium) | ||
283 | -// .font(.system(size: 16)) | ||
284 | -// .foregroundColor(Color.white) | ||
285 | -// .multilineTextAlignment(.center) | ||
286 | -// .padding(.all) | ||
287 | -// } | ||
288 | -// .frame(maxWidth: .infinity) | ||
289 | -// } | ||
290 | -// .frame(width: self.uiscreen.width * 0.8) | ||
291 | -// .background(Color(red: 0.4745098039215686, green: 0.7490196078431373, blue: 0.0784313725490196)) | ||
292 | -// .cornerRadius(7) | ||
293 | -// } | ||
294 | -// .frame(maxWidth: .infinity) | ||
295 | -// .padding(.top, self.uiscreen.height * 0.015) | ||
296 | - | ||
297 | - Button { | ||
298 | - // Button Action | ||
299 | - print("Terms Button tapped!") | ||
300 | - } label: { | ||
301 | - Text("Όροι χρήσης") | ||
302 | - .fontWeight(.medium) | ||
303 | - .font(.system(size: 14)) | ||
304 | - .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | ||
305 | - .underline() | ||
306 | - .multilineTextAlignment(.center) | ||
307 | - .padding(.top, self.uiscreen.height * 0.025) | ||
308 | - .padding(.bottom, self.uiscreen.height * 0.03) | ||
309 | - .padding(.horizontal) | ||
310 | - .frame(maxWidth: .infinity) | ||
311 | - } | ||
312 | - .frame(maxWidth: .infinity) | ||
313 | - | ||
314 | - | ||
315 | - } | ||
316 | - .frame(width:self.uiscreen.width) | ||
317 | -// .frame(minHeight: geometry.size.height) | ||
318 | - .padding(.bottom, self.uiscreen.height * 0.03) | ||
319 | - } | ||
320 | - .frame(width:self.uiscreen.width) | ||
321 | - .frame(maxHeight: .infinity) | ||
322 | - } | ||
323 | - .frame(width:self.uiscreen.width) | ||
324 | - .frame(maxHeight: .infinity) | ||
325 | - } | ||
326 | - } | ||
327 | - | ||
328 | - struct ImageView: View { | ||
329 | - @ObservedObject var imageLoader:UrlImageModel | ||
330 | - | ||
331 | - var uiscreen = UIScreen.main.bounds | ||
332 | - | ||
333 | - init(withURL url:String) { | ||
334 | - imageLoader = UrlImageModel(urlString:url) | ||
335 | - } | ||
336 | - | ||
337 | - var body: some View { | ||
338 | - | ||
339 | - Image(uiImage: imageLoader.image ?? UIImage()) | ||
340 | - .resizable() | ||
341 | - .aspectRatio(contentMode: .fill) | ||
342 | - .frame(width: self.uiscreen.width, height: self.uiscreen.height * 0.25) | ||
343 | - } | ||
344 | - } | ||
345 | - | ||
346 | -} | ||
347 | - | ||
348 | -@available(iOS 13.0.0, *) | ||
349 | -struct CouponBarcodeView: View { | ||
350 | - var parentView: UIView | ||
351 | - var coupon: swiftApi.CouponItemModel | ||
352 | - @State var couponset: swiftApi.CouponSetItemModel? | ||
353 | - | ||
354 | - var uiscreen = UIScreen.main.bounds | ||
355 | - | ||
356 | - func goBack() { | ||
357 | - for subview in parentView.subviews { | ||
358 | - if(subview.tag == 7) { | ||
359 | - subview.removeFromSuperview() | ||
360 | - } | ||
361 | - } | ||
362 | - } | ||
363 | - | ||
364 | - | ||
365 | - var body: some View { | ||
366 | - VStack { | ||
367 | - headerView(goBack: goBack) | ||
368 | - | ||
369 | - VStack { | ||
370 | - couponContainer(coupon: coupon) | ||
371 | - } | ||
372 | - .background(Color.white) | ||
373 | - .cornerRadius(30, corners: [.topLeft]) | ||
374 | - .frame(width:self.uiscreen.width) | ||
375 | - .frame(maxHeight: .infinity) | ||
376 | - } | ||
377 | - .edgesIgnoringSafeArea([.bottom]) | ||
378 | - .frame(width:self.uiscreen.width) | ||
379 | - .frame(maxHeight: .infinity) | ||
380 | -// .onAppear { | ||
381 | -// // If you want to setup data with model | ||
382 | -// couponset = CouponSetItemModel(dictionary: coupon) | ||
383 | -// | ||
384 | -// } | ||
385 | - } | ||
386 | -} | ||
387 | -#endif | ||
388 | - | ||
389 | -//struct CouponBarcodeView_Previews: PreviewProvider { | ||
390 | -// static var previews: some View { | ||
391 | -// CouponBarcodeView() | ||
392 | -// } | ||
393 | -//} |
1 | -// | ||
2 | -// CouponBarcodeViewInterface.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Manos Chorianopoulos on 21/4/22. | ||
6 | -// | ||
7 | - | ||
8 | -import Foundation | ||
9 | -import SwiftUI | ||
10 | - | ||
11 | -@available(iOS 13.0.0, *) | ||
12 | -@objc public class CouponBarcodeViewInterface : NSObject { | ||
13 | - | ||
14 | -// @objc(couponBarcodeViewController::) static public func couponBarcodeViewController(parentView: UIView?, coupon: Dictionary<String, Any>) -> UIViewController { | ||
15 | -// return UIHostingController(rootView: CouponBarcodeView(parentView: parentView!, coupon: coupon)) | ||
16 | -// } | ||
17 | - | ||
18 | -} | ||
19 | - |
1 | -// | ||
2 | -// CouponView.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Βασιλης Σκουρας on 21/4/22. | ||
6 | -// | ||
7 | - | ||
8 | - | ||
9 | -#if canImport(SwiftUI) | ||
10 | -import SwiftUI | ||
11 | -import Combine | ||
12 | -import Foundation | ||
13 | -import UIKit | ||
14 | - | ||
15 | - | ||
16 | - | ||
17 | -extension CouponView { | ||
18 | - struct headerView: View { | ||
19 | - var goBack: () -> () | ||
20 | - | ||
21 | - var uiscreen = UIScreen.main.bounds | ||
22 | - | ||
23 | - var body: some View { | ||
24 | - HStack(alignment: .center) { | ||
25 | - Button { | ||
26 | - // Button Action | ||
27 | - goBack() | ||
28 | - } label: { | ||
29 | - Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
30 | - .resizable() | ||
31 | - .aspectRatio(contentMode: .fit) | ||
32 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
33 | - } | ||
34 | - Spacer().frame(width: 0) | ||
35 | - Text("Εκπτωτικό κουπόνι") | ||
36 | - .fontWeight(.medium) | ||
37 | - .font(.system(size: 16)) | ||
38 | - .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
39 | - .multilineTextAlignment(.center) | ||
40 | - .frame(maxWidth: .infinity) | ||
41 | - .padding(.horizontal) | ||
42 | - .offset(x: -self.uiscreen.height * 0.0125) | ||
43 | - } | ||
44 | - .frame(maxWidth: .infinity) | ||
45 | - .padding(.horizontal) | ||
46 | - .padding(.vertical, 10) | ||
47 | - } | ||
48 | - } | ||
49 | - | ||
50 | - struct couponContainer: View { | ||
51 | - @State var coupon: swiftApi.CouponSetItemModel | ||
52 | -// @State var couponset:CouponSetItemModel | ||
53 | - | ||
54 | - var uiscreen = UIScreen.main.bounds | ||
55 | - | ||
56 | - var body: some View { | ||
57 | - GeometryReader { geometry in | ||
58 | - ScrollView(showsIndicators: false) { | ||
59 | - VStack(alignment: .leading) { | ||
60 | - | ||
61 | - ImageView(withURL: coupon.img_preview as? String ?? "") | ||
62 | - | ||
63 | - Text(coupon.name as? String ?? "") | ||
64 | - .fontWeight(.bold) | ||
65 | - .font(.system(size: 16)) | ||
66 | - .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | ||
67 | - .multilineTextAlignment(.leading) | ||
68 | - .padding(.horizontal) | ||
69 | - .padding(.top, self.uiscreen.height * 0.04) | ||
70 | - | ||
71 | - Text(coupon.short_description as? String ?? "") | ||
72 | - .fontWeight(.regular) | ||
73 | - .font(.system(size: 14)) | ||
74 | - .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | ||
75 | - .multilineTextAlignment(.leading) | ||
76 | - .padding(.horizontal) | ||
77 | - .padding(.top, self.uiscreen.height * 0.02) | ||
78 | - | ||
79 | - Spacer() | ||
80 | - | ||
81 | - VStack(alignment: .center) { | ||
82 | - Button { | ||
83 | - // Button Action | ||
84 | - print("Back Button tapped!") | ||
85 | - } label: { | ||
86 | - HStack { | ||
87 | - Text("Απόκτησέ το") | ||
88 | - .fontWeight(.medium) | ||
89 | - .font(.system(size: 16)) | ||
90 | - .foregroundColor(Color.white) | ||
91 | - .multilineTextAlignment(.center) | ||
92 | - .padding(.all) | ||
93 | - } | ||
94 | - } | ||
95 | - .frame(width: self.uiscreen.width * 0.8) | ||
96 | - .background(Color(red: 0.4745098039215686, green: 0.7490196078431373, blue: 0.0784313725490196)) | ||
97 | - .cornerRadius(7) | ||
98 | - } | ||
99 | - .frame(maxWidth: .infinity) | ||
100 | - .padding(.top, self.uiscreen.height * 0.06) | ||
101 | - | ||
102 | - Button { | ||
103 | - // Button Action | ||
104 | - print("Terms Button tapped!") | ||
105 | - } label: { | ||
106 | - Text("Όροι χρήσης") | ||
107 | - .fontWeight(.medium) | ||
108 | - .font(.system(size: 14)) | ||
109 | - .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) | ||
110 | - .underline() | ||
111 | - .multilineTextAlignment(.center) | ||
112 | - .padding(.vertical, self.uiscreen.height * 0.03) | ||
113 | - .padding(.horizontal) | ||
114 | - .frame(maxWidth: .infinity) | ||
115 | - } | ||
116 | - .frame(maxWidth: .infinity) | ||
117 | - | ||
118 | - | ||
119 | - } | ||
120 | - .frame(width:self.uiscreen.width) | ||
121 | - .frame(minHeight: geometry.size.height) | ||
122 | - .padding(.bottom, self.uiscreen.height * 0.03) | ||
123 | - } | ||
124 | - .frame(width:self.uiscreen.width) | ||
125 | - .frame(maxHeight: .infinity) | ||
126 | - } | ||
127 | - .frame(width:self.uiscreen.width) | ||
128 | - .frame(maxHeight: .infinity) | ||
129 | - } | ||
130 | - } | ||
131 | - | ||
132 | - struct ImageView: View { | ||
133 | - @ObservedObject var imageLoader:UrlImageModel | ||
134 | - | ||
135 | - var uiscreen = UIScreen.main.bounds | ||
136 | - | ||
137 | - init(withURL url:String) { | ||
138 | - imageLoader = UrlImageModel(urlString:url) | ||
139 | - } | ||
140 | - | ||
141 | - var body: some View { | ||
142 | - | ||
143 | - Image(uiImage: imageLoader.image ?? UIImage()) | ||
144 | - .resizable() | ||
145 | - .aspectRatio(contentMode: .fill) | ||
146 | - .frame(width: self.uiscreen.width, height: self.uiscreen.height * 0.25) | ||
147 | - } | ||
148 | - } | ||
149 | - | ||
150 | -} | ||
151 | - | ||
152 | -@available(iOS 13.0.0, *) | ||
153 | -struct CouponView: View { | ||
154 | - var parentView: UIView | ||
155 | - var coupon: swiftApi.CouponSetItemModel | ||
156 | - @State var couponset: swiftApi.CouponSetItemModel? | ||
157 | - | ||
158 | - var uiscreen = UIScreen.main.bounds | ||
159 | - | ||
160 | - func goBack() { | ||
161 | - for subview in parentView.subviews { | ||
162 | - if(subview.tag == 2) { | ||
163 | - subview.removeFromSuperview() | ||
164 | - } | ||
165 | - } | ||
166 | - } | ||
167 | - | ||
168 | - | ||
169 | - var body: some View { | ||
170 | - VStack { | ||
171 | - headerView(goBack: goBack) | ||
172 | - | ||
173 | - VStack { | ||
174 | - couponContainer(coupon: coupon) | ||
175 | - } | ||
176 | - .background(Color.white) | ||
177 | - .cornerRadius(30, corners: [.topLeft]) | ||
178 | - .frame(width:self.uiscreen.width) | ||
179 | - .frame(maxHeight: .infinity) | ||
180 | - } | ||
181 | - .edgesIgnoringSafeArea([.bottom]) | ||
182 | - .frame(width:self.uiscreen.width) | ||
183 | - .frame(maxHeight: .infinity) | ||
184 | -// .onAppear { | ||
185 | -// // If you want to setup data with model | ||
186 | -// couponset = CouponSetItemModel(dictionary: coupon) | ||
187 | -// | ||
188 | -// } | ||
189 | - } | ||
190 | -} | ||
191 | -#endif | ||
192 | - | ||
193 | -//struct CouponView_Previews: PreviewProvider { | ||
194 | -// static var previews: some View { | ||
195 | -// CouponView() | ||
196 | -// } | ||
197 | -//} |
1 | -// | ||
2 | -// CouponViewInterface.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Βασιλης Σκουρας on 21/4/22. | ||
6 | -// | ||
7 | - | ||
8 | -import Foundation | ||
9 | -import SwiftUI | ||
10 | - | ||
11 | -@available(iOS 13.0.0, *) | ||
12 | -@objc public class CouponViewInterface : NSObject { | ||
13 | - | ||
14 | -// @objc(couponViewController::) static public func couponViewController(parentView: UIView?, coupon: Dictionary<String, Any>) -> UIViewController { | ||
15 | -// return UIHostingController(rootView: CouponView(parentView: parentView!, coupon: coupon)) | ||
16 | -// } | ||
17 | - | ||
18 | -} |
1 | -// | ||
2 | -// ProfileView.swift | ||
3 | -// warplyFramework | ||
4 | -// | ||
5 | -// Created by Βασιλης Σκουρας on 13/1/22. | ||
6 | -// | ||
7 | - | ||
8 | -#if canImport(SwiftUI) | ||
9 | -import SwiftUI | ||
10 | -import Combine | ||
11 | -import Foundation | ||
12 | -import UIKit | ||
13 | - | ||
14 | -class DataModel { | ||
15 | - var data: Array<NSDictionary> = [] | ||
16 | - var data2: Array<swiftApi.CouponItemModel> = [] | ||
17 | - | ||
18 | - init() { //initializer method | ||
19 | - | ||
20 | - let instanceOfMySwiftApi = swiftApi() | ||
21 | - let couponsData = instanceOfMySwiftApi.getCoupons() | ||
22 | - | ||
23 | - self.data2 = couponsData | ||
24 | - | ||
25 | - | ||
26 | - let instanceOfMyApi = MyApi() | ||
27 | - let couponSets = instanceOfMyApi.getCouponSets(withActive: true, andVisible: true, andUuids: nil) | ||
28 | - let coupons = instanceOfMyApi.getCoupons() as AnyObject? | ||
29 | - | ||
30 | - if let myCouponsSetsDictionary = couponSets as? [String : AnyObject] { | ||
31 | - let couponSetsData = (myCouponsSetsDictionary["MAPP_COUPON"] as! Array<NSMutableDictionary>) | ||
32 | - if let myCouponsDictionary = coupons as? [String : AnyObject] { | ||
33 | - let couponsData = (myCouponsDictionary["result"] as! Array<NSMutableDictionary>) | ||
34 | - if let sets = couponSetsData as? NSArray { | ||
35 | - for set in sets { | ||
36 | - let s = set as! NSDictionary | ||
37 | - if let cpns = couponsData as? NSArray { | ||
38 | - for coupon in cpns { | ||
39 | - var c = coupon as! NSDictionary | ||
40 | -// var temp = NSMutableDictionary(dictionary: s); | ||
41 | - if c["couponset_uuid"] as! String == s["uuid"] as! String { | ||
42 | - var temp = NSMutableDictionary(dictionary: s); | ||
43 | -// temp.addEntries(from: c as! [AnyHashable : Any]) | ||
44 | - | ||
45 | - temp.setValue(c as! [AnyHashable : Any],forKey: "coupon_data") | ||
46 | - | ||
47 | - self.data.append(temp as NSDictionary) | ||
48 | - } | ||
49 | - | ||
50 | - } | ||
51 | - } | ||
52 | - | ||
53 | - } | ||
54 | - } | ||
55 | - } | ||
56 | - } | ||
57 | - } | ||
58 | - | ||
59 | - var getData2: Array<swiftApi.CouponItemModel> { | ||
60 | - get { // getter | ||
61 | - return data2 | ||
62 | - } | ||
63 | - } | ||
64 | - | ||
65 | - var getData: Array<NSDictionary> { | ||
66 | - get { // getter | ||
67 | - return data.filter({ | ||
68 | - let couponData = $0["coupon_data"] as? [String: Any] ?? ["":""] | ||
69 | - return couponData["status"] as? Int == 1 | ||
70 | - }) | ||
71 | - } | ||
72 | - } | ||
73 | - | ||
74 | - var getOldCoupons: Array<NSDictionary> { | ||
75 | - get { // getter | ||
76 | - return data.filter({ | ||
77 | - let couponData = $0["coupon_data"] as? [String: Any] ?? ["":""] | ||
78 | - return couponData["status"] as? Int != 1 | ||
79 | - }) | ||
80 | - } | ||
81 | - } | ||
82 | -} | ||
83 | - | ||
84 | -class ImageLoader: ObservableObject { | ||
85 | - var didChange = PassthroughSubject<Data, Never>() | ||
86 | - var data = Data() { | ||
87 | - didSet { | ||
88 | - didChange.send(data) | ||
89 | - } | ||
90 | - } | ||
91 | - | ||
92 | - init(urlString:String) { | ||
93 | - guard let url = URL(string: urlString) else { return } | ||
94 | - let task = URLSession.shared.dataTask(with: url) { data, response, error in | ||
95 | - guard let data = data else { return } | ||
96 | - DispatchQueue.main.async { | ||
97 | - self.data = data | ||
98 | - } | ||
99 | - } | ||
100 | - task.resume() | ||
101 | - } | ||
102 | -} | ||
103 | - | ||
104 | -struct ImageView: View { | ||
105 | - @ObservedObject var imageLoader:ImageLoader | ||
106 | - @State var image:UIImage = UIImage() | ||
107 | - | ||
108 | - init(withURL url:String) { | ||
109 | - imageLoader = ImageLoader(urlString:url) | ||
110 | - } | ||
111 | - | ||
112 | - var body: some View { | ||
113 | - | ||
114 | - Image(uiImage: image) | ||
115 | - .resizable() | ||
116 | - .aspectRatio(contentMode: .fit) | ||
117 | - .onReceive(imageLoader.didChange) { data in | ||
118 | - self.image = UIImage(data: data) ?? UIImage() | ||
119 | - } | ||
120 | - } | ||
121 | -} | ||
122 | - | ||
123 | -struct VLine: Shape { | ||
124 | - func path(in rect: CGRect) -> Path { | ||
125 | - Path { path in | ||
126 | - path.move(to: CGPoint(x: rect.midX, y: rect.minY)) | ||
127 | - path.addLine(to: CGPoint(x: rect.midX, y: rect.maxY)) | ||
128 | - } | ||
129 | - } | ||
130 | -} | ||
131 | - | ||
132 | -extension CouponsView { | ||
133 | - struct headerView: View { | ||
134 | - var goBack: () -> () | ||
135 | - var uiscreen = UIScreen.main.bounds | ||
136 | - | ||
137 | - | ||
138 | - var body: some View { | ||
139 | - HStack(alignment: .center) { | ||
140 | - Button { | ||
141 | - // Button Action | ||
142 | - goBack() | ||
143 | - } label: { | ||
144 | - Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
145 | - .resizable() | ||
146 | - .aspectRatio(contentMode: .fit) | ||
147 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
148 | - } | ||
149 | - Spacer().frame(width: 0) | ||
150 | - Text("Όλα τα κουπόνια μου") | ||
151 | - .fontWeight(.medium) | ||
152 | - .font(.system(size: 16)) | ||
153 | - .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
154 | - .multilineTextAlignment(.center) | ||
155 | - .frame(maxWidth: .infinity) | ||
156 | - .padding(.horizontal) | ||
157 | - .offset(x: -self.uiscreen.height * 0.0125) | ||
158 | - } | ||
159 | - .frame(maxWidth: .infinity) | ||
160 | - .padding(.horizontal) | ||
161 | - .padding(.vertical, 10) | ||
162 | - } | ||
163 | - } | ||
164 | - | ||
165 | - struct couponView: View { | ||
166 | - var result: swiftApi.CouponItemModel | ||
167 | - var index: Int | ||
168 | - var parentView: UIView | ||
169 | - | ||
170 | - var uiscreen = UIScreen.main.bounds | ||
171 | - | ||
172 | - static func localizedWithParameter(parameter: String) -> LocalizedStringKey { | ||
173 | - return "\(parameter)" | ||
174 | - } | ||
175 | - | ||
176 | - static func convertDateFormat(inputDate: String) -> String { | ||
177 | - let dateFormatter = DateFormatter() | ||
178 | - dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss" | ||
179 | - if let date = dateFormatter.date(from: inputDate) { | ||
180 | - dateFormatter.dateFormat = "dd/MM/yyyy" | ||
181 | - let resultString = dateFormatter.string(from: date) | ||
182 | - return resultString | ||
183 | - } else { | ||
184 | - return "" | ||
185 | - } | ||
186 | - } | ||
187 | - | ||
188 | - var body: some View { | ||
189 | -// let couponData = result["coupon_data"] as? [String: Any] ?? ["":""] | ||
190 | - let couponSetData = result.couponset_data | ||
191 | - | ||
192 | - | ||
193 | - VStack(alignment: .leading) { | ||
194 | - Button { | ||
195 | - // GiftItem Action | ||
196 | - let instanceOfMySwiftApi = swiftApi() | ||
197 | - let couponBarcodeViewController = instanceOfMySwiftApi.openCouponBarcode(parent: parentView, coupon: result) | ||
198 | - couponBarcodeViewController.view.tag = 7 | ||
199 | - // addChild(couponsViewController) | ||
200 | - couponBarcodeViewController.view.frame = parentView.frame | ||
201 | - parentView.addSubview(couponBarcodeViewController.view) | ||
202 | -// couponBarcodeViewController.didMove(toParent: UIHostingController(rootView: self)) | ||
203 | - } label: { | ||
204 | - HStack(alignment: .center) { | ||
205 | - ImageView(withURL: couponSetData?.img_preview ?? "") | ||
206 | - .frame(maxWidth: self.uiscreen.width * 0.15) | ||
207 | - .padding(.leading , self.uiscreen.width * 0.055) | ||
208 | - VLine() | ||
209 | - .stroke(style: StrokeStyle(lineWidth: 1, dash: [5])) | ||
210 | - .foregroundColor(Color(red: 0.4392156862745098, green: 0.4392156862745098, blue: 0.4392156862745098)) | ||
211 | - .frame(width: 1) | ||
212 | - .padding(.leading, self.uiscreen.width * 0.01) | ||
213 | - .padding(.top, self.uiscreen.height * 0.01) | ||
214 | - .padding(.bottom, self.uiscreen.height * 0.0075) | ||
215 | - Spacer() | ||
216 | - VStack { | ||
217 | - Text(CouponsView.couponView.localizedWithParameter(parameter: couponSetData?.name ?? "")) | ||
218 | - .fontWeight(.medium) | ||
219 | - .foregroundColor(Color(red: 0.22745098039215686, green: 0.3215686274509804, blue: 0.4)) | ||
220 | - .frame(maxWidth: self.uiscreen.width * 0.35, maxHeight: .infinity, alignment: .leading) | ||
221 | - .font(.system(size: 15)) | ||
222 | - Text(CouponsView.couponView.localizedWithParameter(parameter: result.discount ?? "")) | ||
223 | - .fontWeight(.bold) | ||
224 | - .foregroundColor(Color(red: 0.22745098039215686, green: 0.3215686274509804, blue: 0.4)) | ||
225 | - .frame(maxWidth: self.uiscreen.width * 0.35, maxHeight: self.uiscreen.height * 0.05, alignment: .leading) | ||
226 | - .font(.system(size: 47)) | ||
227 | - Text(CouponsView.couponView.localizedWithParameter(parameter: "Ισχύει εώς " + (result.expiration ?? ""))) | ||
228 | - .fontWeight(.medium) | ||
229 | - .foregroundColor(Color(red: 0.3803921568627451, green: 0.44313725490196076, blue: 0.5058823529411764)) | ||
230 | - .frame(maxWidth: self.uiscreen.width * 0.35, maxHeight: .infinity, alignment: .leading) | ||
231 | - .font(.system(size: 10)) | ||
232 | - } | ||
233 | - .frame(maxHeight: .infinity) | ||
234 | - .padding(.top, self.uiscreen.height * 0.03) | ||
235 | - .padding(.bottom, self.uiscreen.height * 0.03) | ||
236 | - VStack { | ||
237 | - Text(CouponsView.couponView.localizedWithParameter(parameter: couponSetData?.short_description ?? "")) | ||
238 | - .fontWeight(.medium) | ||
239 | - .foregroundColor(Color(red: 0.3803921568627451, green: 0.44313725490196076, blue: 0.5058823529411764)) | ||
240 | - .frame(maxWidth: self.uiscreen.width * 0.22, maxHeight: self.uiscreen.height * 0.10) | ||
241 | - .font(.system(size: 10)) | ||
242 | - } | ||
243 | - .frame(maxWidth: self.uiscreen.width * 0.25, maxHeight: .infinity) | ||
244 | - Spacer() | ||
245 | - } | ||
246 | - } | ||
247 | - } | ||
248 | - .frame(width: self.uiscreen.width * 0.95, height: self.uiscreen.height * 0.13) | ||
249 | - .background( | ||
250 | - Image("coupons_container", bundle: Bundle(for: MyEmptyClass.self)) | ||
251 | - .resizable() | ||
252 | - ) | ||
253 | - .padding(.bottom, self.uiscreen.height * 0.03) | ||
254 | - | ||
255 | - } | ||
256 | - } | ||
257 | - | ||
258 | -} | ||
259 | - | ||
260 | -@available(iOS 13.0.0, *) | ||
261 | -struct CouponsView: View { | ||
262 | - | ||
263 | - var data:Array<swiftApi.CouponItemModel> = [] | ||
264 | - | ||
265 | -// var data:Array<swiftApi.CouponItemModel> = DataModel().getData2 | ||
266 | - | ||
267 | - var parentView: UIView | ||
268 | - | ||
269 | - var uiscreen = UIScreen.main.bounds | ||
270 | - | ||
271 | - init(parentView: UIView) { //initializer method | ||
272 | - | ||
273 | - let instanceOfMySwiftApi = swiftApi() | ||
274 | - let couponsData = instanceOfMySwiftApi.getCoupons() | ||
275 | - | ||
276 | - self.data = couponsData | ||
277 | - self.parentView = parentView | ||
278 | - } | ||
279 | - | ||
280 | - func goBack(){ | ||
281 | - for subview in parentView.subviews { | ||
282 | - if(subview.tag == 1) { | ||
283 | - subview.removeFromSuperview() | ||
284 | - } | ||
285 | - } | ||
286 | - } | ||
287 | - | ||
288 | - var body: some View { | ||
289 | - VStack { | ||
290 | - headerView(goBack: goBack) | ||
291 | - ScrollView(showsIndicators: false) { | ||
292 | - VStack { | ||
293 | - if (data.count) > 0 { | ||
294 | - ForEach(Array(zip(data.indices, data)), id: \.0) { index, result in | ||
295 | - couponView(result: result, index: index, parentView: parentView) | ||
296 | - } | ||
297 | - } | ||
298 | - } | ||
299 | - .padding(.top, self.uiscreen.height * 0.05) | ||
300 | - } | ||
301 | - .frame(maxWidth: .infinity, maxHeight: .infinity ) | ||
302 | - .background( | ||
303 | - Image("coupons_scrollview", bundle: Bundle(for: MyEmptyClass.self)) | ||
304 | - .resizable() | ||
305 | - ) | ||
306 | - | ||
307 | - } | ||
308 | - .frame(maxWidth: .infinity, maxHeight: .infinity ) | ||
309 | -// .frame(width:self.uiscreen.width, height:self.uiscreen.height ) | ||
310 | - } | ||
311 | -} | ||
312 | -#endif | ||
313 | - | ||
314 | -@available(iOS 13.0.0, *) | ||
315 | -struct Previews_CouponsView_Previews: PreviewProvider { | ||
316 | - static var uiscreen = UIScreen.main.bounds | ||
317 | - static var previews: some View { | ||
318 | - ZStack { | ||
319 | - Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
320 | - .resizable() | ||
321 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
322 | - .offset(x: -self.uiscreen.width / 2 + self.uiscreen.width * 0.05, y: self.uiscreen.height * 0.07) | ||
323 | - Text("Όλα τα κουπόνια μου") | ||
324 | - .frame(width: self.uiscreen.width * 0.8, height: self.uiscreen.height * 0.025, alignment: .center) | ||
325 | - .offset( y: self.uiscreen.height * 0.07) | ||
326 | - } | ||
327 | - | ||
328 | - } | ||
329 | -} |
1 | -// | ||
2 | -// ProfileViewController.swift | ||
3 | -// warplyFramework | ||
4 | -// | ||
5 | -// Created by Βασιλης Σκουρας on 14/1/22. | ||
6 | -// | ||
7 | - | ||
8 | -import Foundation | ||
9 | -import SwiftUI | ||
10 | - | ||
11 | -@available(iOS 13.0.0, *) | ||
12 | -@objc public class CouponsViewInterface : NSObject { | ||
13 | - | ||
14 | - @objc(couponsViewController:) static public func couponsViewController(parentView: UIView?) -> UIViewController { | ||
15 | - return UIHostingController(rootView: CouponsView(parentView: parentView!)) | ||
16 | - } | ||
17 | - | ||
18 | -} |
1 | -// | ||
2 | -// DetailsView.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Manos Chorianopoulos on 3/5/22. | ||
6 | -// | ||
7 | - | ||
8 | - | ||
9 | -#if canImport(SwiftUI) | ||
10 | -import SwiftUI | ||
11 | -import Combine | ||
12 | -import Foundation | ||
13 | -import UIKit | ||
14 | - | ||
15 | - | ||
16 | -extension DetailsView { | ||
17 | - struct headerView: View { | ||
18 | - var goBack: () -> () | ||
19 | - | ||
20 | - var uiscreen = UIScreen.main.bounds | ||
21 | - | ||
22 | - var body: some View { | ||
23 | - HStack(alignment: .center) { | ||
24 | - Button { | ||
25 | - // Button Action | ||
26 | - print("Back Button tapped!") | ||
27 | - goBack() | ||
28 | - } label: { | ||
29 | - Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
30 | - .resizable() | ||
31 | - .aspectRatio(contentMode: .fit) | ||
32 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
33 | - } | ||
34 | - | ||
35 | - Text("Ανάλυση") | ||
36 | - .fontWeight(.medium) | ||
37 | - .font(.system(size: 16)) | ||
38 | - .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
39 | - .multilineTextAlignment(.center) | ||
40 | - .frame(maxWidth: .infinity) | ||
41 | - .padding(.horizontal) | ||
42 | - .offset(x: -self.uiscreen.height * 0.025) | ||
43 | - } | ||
44 | - .frame(maxWidth: .infinity) | ||
45 | - .padding(.horizontal) | ||
46 | - .padding(.vertical, 10) | ||
47 | - } | ||
48 | - } | ||
49 | - | ||
50 | - struct Tabs: View { | ||
51 | - @Binding var tabs: [String] // The tab titles | ||
52 | - @Binding var selection: Int // Currently selected tab | ||
53 | - | ||
54 | - let uiscreen = UIScreen.main.bounds | ||
55 | - | ||
56 | - var body: some View { | ||
57 | - // Pack the tabs horizontally and allow them to be scrolled | ||
58 | -// GeometryReader { geometry in | ||
59 | -// ScrollView(.horizontal, showsIndicators: false) { | ||
60 | - HStack(alignment: .center, spacing: self.uiscreen.width * 0.05) { | ||
61 | - ForEach(tabs, id: \.self) { | ||
62 | - self.tab(title: $0) | ||
63 | - } | ||
64 | - } | ||
65 | - .padding(.horizontal, self.uiscreen.width * 0.1) | ||
66 | - .frame(maxWidth: .infinity) | ||
67 | - .padding(.vertical, 5) | ||
68 | -// .frame(minWidth: geometry.size.width) | ||
69 | -// } | ||
70 | -// .frame(maxWidth: .infinity) | ||
71 | -// } | ||
72 | -// .frame(maxWidth: .infinity) | ||
73 | -// } | ||
74 | - } | ||
75 | - | ||
76 | - private func tab(title: String) -> some View { | ||
77 | - let index = self.tabs.firstIndex(of: title)! | ||
78 | - let isSelected = index == selection | ||
79 | - | ||
80 | - return Button (action: { | ||
81 | - // // Allows for animated transitions of the underline, | ||
82 | - // // as well as other views on the same screen | ||
83 | - withAnimation { | ||
84 | - self.selection = index | ||
85 | - } | ||
86 | - }) { | ||
87 | - VStack(alignment: .center, spacing: 5.0) { | ||
88 | - Text(title) | ||
89 | - .font(.system(size: 16)) | ||
90 | - .fontWeight(.medium) | ||
91 | - .foregroundColor(isSelected ? Color(red: 0.1803921568627451, green: 0.6980392156862745, blue: 0.7254901960784313) : Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
92 | - .multilineTextAlignment(.center) | ||
93 | - .frame(maxWidth: .infinity) | ||
94 | - | ||
95 | - VStack {} | ||
96 | - .frame(height: 3) | ||
97 | - .frame(width: uiscreen.width * 0.2) | ||
98 | - .foregroundColor(.clear) | ||
99 | - .background(isSelected ? | ||
100 | - LinearGradient(gradient: Gradient(colors: [Color(red: 0.06, green: 0.67, blue: 0.84), Color(red: 0.47, green: 0.75, blue: 0.43)]), startPoint: .leading, endPoint: .trailing) | ||
101 | - : LinearGradient(gradient: Gradient(colors: [.clear, .clear]), startPoint: .leading, endPoint: .trailing) | ||
102 | - ) | ||
103 | - .cornerRadius(20) | ||
104 | - } | ||
105 | - .frame(maxWidth: .infinity) | ||
106 | - } | ||
107 | - .frame(maxWidth: .infinity) | ||
108 | - | ||
109 | - } | ||
110 | - } | ||
111 | - | ||
112 | - struct ImageView: View { | ||
113 | - @ObservedObject var imageLoader:UrlImageModel | ||
114 | - @State var width:CGFloat | ||
115 | - @State var isFill:Bool | ||
116 | - | ||
117 | - var uiscreen = UIScreen.main.bounds | ||
118 | - | ||
119 | - init(withURL url:String , width:CGFloat, isFill:Bool) { | ||
120 | - imageLoader = UrlImageModel(urlString:url) | ||
121 | - self.width = width | ||
122 | - self.isFill = isFill | ||
123 | - } | ||
124 | - | ||
125 | - var body: some View { | ||
126 | - | ||
127 | - Image(uiImage: imageLoader.image ?? UIImage()) | ||
128 | - .resizable() | ||
129 | - .aspectRatio(contentMode: isFill ? .fill : .fit) | ||
130 | - .frame(width: self.width) | ||
131 | - .frame(maxHeight: .infinity) | ||
132 | - } | ||
133 | - } | ||
134 | - | ||
135 | - | ||
136 | - | ||
137 | - struct DropdownOption: Hashable { | ||
138 | - let key: String | ||
139 | - let value: String | ||
140 | - | ||
141 | - public static func == (lhs: DropdownOption, rhs: DropdownOption) -> Bool { | ||
142 | - return lhs.key == rhs.key | ||
143 | - } | ||
144 | - } | ||
145 | - | ||
146 | - struct DropdownRow: View { | ||
147 | - var option: DropdownOption | ||
148 | - var onOptionSelected: ((_ option: DropdownOption) -> Void)? | ||
149 | - | ||
150 | - var body: some View { | ||
151 | - Button(action: { | ||
152 | - if let onOptionSelected = self.onOptionSelected { | ||
153 | - onOptionSelected(self.option) | ||
154 | - } | ||
155 | - }) { | ||
156 | - HStack { | ||
157 | - Text(self.option.value) | ||
158 | - .font(.system(size: 14)) | ||
159 | - .fontWeight(.regular) | ||
160 | - .foregroundColor(Color(red: 0.23529411764705882, green: 0.23137254901960785, blue: 0.2823529411764706)) | ||
161 | - Spacer() | ||
162 | - } | ||
163 | - } | ||
164 | - .padding(.horizontal, 16) | ||
165 | - .padding(.vertical, 5) | ||
166 | - } | ||
167 | - } | ||
168 | - | ||
169 | - struct Dropdown: View { | ||
170 | - var options: [DropdownOption] | ||
171 | - var onOptionSelected: ((_ option: DropdownOption) -> Void)? | ||
172 | - var backColor: Color | ||
173 | - | ||
174 | - var body: some View { | ||
175 | - ScrollView { | ||
176 | - VStack(alignment: .leading, spacing: 0) { | ||
177 | - ForEach(self.options, id: \.self) { option in | ||
178 | - DropdownRow(option: option, onOptionSelected: self.onOptionSelected) | ||
179 | - } | ||
180 | - } | ||
181 | - } | ||
182 | - .frame(minHeight: CGFloat(options.count) * 30, maxHeight: 250) | ||
183 | - .padding(.vertical, 5) | ||
184 | - .background(self.backColor) | ||
185 | - .cornerRadius(8) | ||
186 | - } | ||
187 | - } | ||
188 | - | ||
189 | - struct DropdownSelector: View { | ||
190 | - @State private var shouldShowDropdown = false | ||
191 | - @State private var selectedOption: DropdownOption? = nil | ||
192 | -// var placeholder: String | ||
193 | - var options: [DropdownOption] | ||
194 | - var onOptionSelected: ((_ option: DropdownOption) -> Void)? | ||
195 | - var backColor: Color | ||
196 | - private let buttonHeight: CGFloat = 50 | ||
197 | - | ||
198 | - init(options: [DropdownOption], onOptionSelected: ((_ option: DropdownOption) -> Void)?, backColor: Color) { | ||
199 | - self.selectedOption = options[0] | ||
200 | - self.options = options | ||
201 | - self.onOptionSelected = onOptionSelected | ||
202 | - self.backColor = backColor | ||
203 | - } | ||
204 | - | ||
205 | - var body: some View { | ||
206 | - Button(action: { | ||
207 | - self.shouldShowDropdown.toggle() | ||
208 | - }) { | ||
209 | - HStack { | ||
210 | -// Text(selectedOption == nil ? placeholder : selectedOption!.value) | ||
211 | - Text(selectedOption?.value ?? "") | ||
212 | - .font(.system(size: 14)) | ||
213 | - .fontWeight(.bold) | ||
214 | - .foregroundColor(Color(red: 0.23529411764705882, green: 0.23137254901960785, blue: 0.2823529411764706)) | ||
215 | -// .foregroundColor(selectedOption == nil ? Color.gray: Color.black) | ||
216 | - | ||
217 | - Spacer() | ||
218 | - | ||
219 | - Image((self.shouldShowDropdown ? "ic_up" : "ic_down"), bundle: Bundle(for: MyEmptyClass.self)) | ||
220 | - .resizable() | ||
221 | - .aspectRatio(contentMode: .fit) | ||
222 | - .frame(width: 15, height: 10) | ||
223 | - | ||
224 | - } | ||
225 | - } | ||
226 | - .padding(.horizontal) | ||
227 | - .cornerRadius(5) | ||
228 | - .frame(height: self.buttonHeight) | ||
229 | - .frame(maxWidth: .infinity) | ||
230 | - .overlay( | ||
231 | - VStack { | ||
232 | - if self.shouldShowDropdown { | ||
233 | - Spacer(minLength: buttonHeight + 10) | ||
234 | - Dropdown( | ||
235 | - options: self.options, | ||
236 | - onOptionSelected: { option in | ||
237 | - shouldShowDropdown = false | ||
238 | - selectedOption = option | ||
239 | - self.onOptionSelected?(option) | ||
240 | - }, | ||
241 | - backColor: self.backColor | ||
242 | - ) | ||
243 | - } | ||
244 | - }, alignment: .topLeading | ||
245 | - ) | ||
246 | - .background( | ||
247 | - RoundedRectangle(cornerRadius: 8).fill(self.backColor) | ||
248 | - ) | ||
249 | - } | ||
250 | - } | ||
251 | - | ||
252 | - //MARK:- Chart Data | ||
253 | - struct ChartData: Identifiable { | ||
254 | - var id = UUID() | ||
255 | - var color : Color | ||
256 | - var percent : CGFloat | ||
257 | - var value : CGFloat | ||
258 | - var title : String | ||
259 | - var image : String | ||
260 | - } | ||
261 | - | ||
262 | - class ChartDataContainer : ObservableObject { | ||
263 | - @Published var chartData: Array<ChartData> | ||
264 | - | ||
265 | - | ||
266 | - init(chartData: Array<ChartData>) { | ||
267 | - self.chartData = chartData | ||
268 | - calc() | ||
269 | - } | ||
270 | - | ||
271 | - func calc(){ | ||
272 | - var value : CGFloat = 0 | ||
273 | - | ||
274 | - for i in 0..<chartData.count { | ||
275 | - value += chartData[i].percent | ||
276 | - chartData[i].value = value | ||
277 | - } | ||
278 | - } | ||
279 | - } | ||
280 | - | ||
281 | - //MARK:- Donut Graph | ||
282 | - struct DonutChart : View { | ||
283 | - @ObservedObject var charDataObj: ChartDataContainer | ||
284 | -// @State var indexOfTappedSlice = -1 | ||
285 | - | ||
286 | - var uiscreen = UIScreen.main.bounds | ||
287 | - | ||
288 | - init (charDataObj: ChartDataContainer) { | ||
289 | - self.charDataObj = charDataObj | ||
290 | - } | ||
291 | - | ||
292 | - var body: some View { | ||
293 | - VStack { | ||
294 | - ZStack { | ||
295 | - ForEach(Array(charDataObj.chartData.enumerated()), id: \.offset) { index, item in | ||
296 | - Circle() | ||
297 | - .trim(from: index == 0 ? 0.0 : charDataObj.chartData[index-1].value/100, | ||
298 | - to: charDataObj.chartData[index].value/100) | ||
299 | - .stroke(charDataObj.chartData[index].color,lineWidth: 12) | ||
300 | -// .onTapGesture { | ||
301 | -// indexOfTappedSlice = indexOfTappedSlice == index ? -1 : index | ||
302 | -// } | ||
303 | -// .scaleEffect(index == indexOfTappedSlice ? 1.1 : 1.0) | ||
304 | - .animation(.spring()) | ||
305 | - } | ||
306 | - Image("ic_cosmote_logo", bundle: Bundle(for: MyEmptyClass.self)) | ||
307 | - .resizable() | ||
308 | - .aspectRatio(contentMode: .fit) | ||
309 | - .frame(width: self.uiscreen.width * 0.3, height: self.uiscreen.height * 0.04) | ||
310 | - | ||
311 | -// if indexOfTappedSlice != -1 { | ||
312 | -// Text(String(format: "%.2f", Double(charDataObj.chartData[indexOfTappedSlice].percent))+"%") | ||
313 | -// .font(.title) | ||
314 | -// } | ||
315 | - } | ||
316 | - .frame(width: self.uiscreen.width * 0.5, height: self.uiscreen.width * 0.5) | ||
317 | - .padding() | ||
318 | - .onAppear() { | ||
319 | - self.charDataObj.calc() | ||
320 | - } | ||
321 | - } | ||
322 | - } | ||
323 | - } | ||
324 | - | ||
325 | -} | ||
326 | - | ||
327 | -@available(iOS 13.0.0, *) | ||
328 | -struct DetailsView: View { | ||
329 | - var parentView: UIView | ||
330 | - | ||
331 | - var coupons:Array<swiftApi.CouponItemModel> = [] | ||
332 | - | ||
333 | - var uiscreen = UIScreen.main.bounds | ||
334 | - | ||
335 | - @State private var selectedTab = 0 | ||
336 | - @State private var selectedCouponOption: DropdownOption? = couponOptions[0] | ||
337 | - @State private var selectedRedeemOption: DropdownOption? = redeemOptions[0] | ||
338 | - | ||
339 | - let couponsChartData: Array<ChartData> = [ | ||
340 | - ChartData(color: Color(red: 0.57, green: 0.82, blue: 0.02), percent: 60, value: 0, title: "Διασκέδαση", image: "ic_smile"), | ||
341 | - ChartData(color: Color(red: 0.24, green: 0.32, blue: 0.40), percent: 22, value: 0, title: "Supermarket", image: "ic_cart"), | ||
342 | - ChartData(color: Color(red: 0.14, green: 0.66, blue: 0.71), percent: 18, value: 0, title: "Ταξίδια", image: "ic_plane") | ||
343 | - ] | ||
344 | - | ||
345 | - | ||
346 | - let giftsChartData: Array<ChartData> = [ | ||
347 | - ChartData(color: Color(red: 0.57, green: 0.82, blue: 0.02), percent: 50, value: 0, title: "Δώρο Γενεθλίων", image: "ic_gift"), | ||
348 | - ChartData(color: Color(red: 0.24, green: 0.32, blue: 0.40), percent: 50, value: 0, title: "Safe driving", image: "ic_steering_wheel") | ||
349 | - ] | ||
350 | - | ||
351 | - @State var charDataObj: ChartDataContainer | ||
352 | - | ||
353 | - static var uniqueKey: String { | ||
354 | - UUID().uuidString | ||
355 | - } | ||
356 | - | ||
357 | - static let couponOptions: [DropdownOption] = [ | ||
358 | - DropdownOption(key: uniqueKey, value: "Κουπόνια"), | ||
359 | - DropdownOption(key: uniqueKey, value: "Δώρα"), | ||
360 | - ] | ||
361 | - | ||
362 | - static let redeemOptions: [DropdownOption] = [ | ||
363 | - DropdownOption(key: uniqueKey, value: "Εξαργύρωση"), | ||
364 | - DropdownOption(key: uniqueKey, value: "Συλλογή"), | ||
365 | - ] | ||
366 | - | ||
367 | - init(parentView: UIView) { //initializer method | ||
368 | - | ||
369 | - let instanceOfMySwiftApi = swiftApi() | ||
370 | - let couponsData = instanceOfMySwiftApi.getCoupons() | ||
371 | - | ||
372 | - self.coupons = couponsData | ||
373 | - self.parentView = parentView | ||
374 | - | ||
375 | - self.charDataObj = ChartDataContainer(chartData: couponsChartData) | ||
376 | - } | ||
377 | - | ||
378 | - func goBack(){ | ||
379 | - for subview in parentView.subviews { | ||
380 | - if(subview.tag == 10) { | ||
381 | - subview.removeFromSuperview() | ||
382 | - } | ||
383 | - } | ||
384 | - } | ||
385 | - | ||
386 | - var body: some View { | ||
387 | - | ||
388 | - VStack { | ||
389 | - headerView(goBack: goBack) | ||
390 | - | ||
391 | - Tabs(tabs: .constant(["Μηνιαία", "6Μηνο", "12Μηνο"]), | ||
392 | - selection: $selectedTab) | ||
393 | - | ||
394 | - VStack { | ||
395 | - GeometryReader { geometry in | ||
396 | - ScrollView(showsIndicators: false) { | ||
397 | - VStack { | ||
398 | - VStack { | ||
399 | - | ||
400 | - DropdownSelector( | ||
401 | - // placeholder: "Δώρα", | ||
402 | - options: DetailsView.couponOptions, | ||
403 | - onOptionSelected: { option in | ||
404 | - print(option) | ||
405 | - selectedCouponOption = option | ||
406 | - | ||
407 | - if (option == DetailsView.couponOptions[0]) { | ||
408 | - self.charDataObj = ChartDataContainer(chartData: couponsChartData) | ||
409 | - } else { | ||
410 | - self.charDataObj = ChartDataContainer(chartData: giftsChartData) | ||
411 | - } | ||
412 | - }, | ||
413 | - backColor: Color(red: 0.9607843137254902, green: 0.9607843137254902, blue: 0.9607843137254902) | ||
414 | - ) | ||
415 | - .padding(.horizontal, 25) | ||
416 | - .padding(.top, self.uiscreen.height * 0.02) | ||
417 | - .zIndex(2) | ||
418 | - | ||
419 | - DonutChart(charDataObj: self.charDataObj) | ||
420 | - .padding(.vertical, self.uiscreen.height * 0.03) | ||
421 | - | ||
422 | - DropdownSelector( | ||
423 | - // placeholder: "Δώρα", | ||
424 | - options: DetailsView.redeemOptions, | ||
425 | - onOptionSelected: { option in | ||
426 | - selectedRedeemOption = option | ||
427 | - }, | ||
428 | - backColor: Color(red: 0.9333333333333333, green: 0.9686274509803922, blue: 1.0) | ||
429 | - ) | ||
430 | - .padding(.horizontal, 25) | ||
431 | - .zIndex(1) | ||
432 | - | ||
433 | - VStack { | ||
434 | - VStack(spacing: self.uiscreen.width * 0.06) { | ||
435 | - ForEach(Array(charDataObj.chartData.enumerated()), id: \.offset) { index, item in | ||
436 | - HStack { | ||
437 | - Image(charDataObj.chartData[index].image, bundle: Bundle(for: MyEmptyClass.self)) | ||
438 | - .resizable() | ||
439 | - .aspectRatio(contentMode: .fit) | ||
440 | - .frame(width: self.uiscreen.height * 0.02, height: self.uiscreen.height * 0.02) | ||
441 | - | ||
442 | - Text(charDataObj.chartData[index].title) | ||
443 | - .fontWeight(.medium) | ||
444 | - .font(.system(size: 14)) | ||
445 | - .foregroundColor(Color(red: 0.30196078431372547, green: 0.2980392156862745, blue: 0.34509803921568627)) | ||
446 | - .padding(.horizontal) | ||
447 | - | ||
448 | - Spacer() | ||
449 | - | ||
450 | -// Text(String(format: "%.2f", Double(charDataObj.chartData[index].percent))+"%") | ||
451 | - Text(String(format: "%.0f", Double(charDataObj.chartData[index].percent))+"%") | ||
452 | - .fontWeight(.medium) | ||
453 | - .font(.system(size: 16)) | ||
454 | - .foregroundColor(charDataObj.chartData[index].color) | ||
455 | - } | ||
456 | - .frame(maxWidth: .infinity) | ||
457 | - } | ||
458 | - } | ||
459 | - .padding(.all, self.uiscreen.width * 0.06) | ||
460 | - .frame(maxWidth: .infinity) | ||
461 | - } | ||
462 | - .frame(width:self.uiscreen.width * 0.86) | ||
463 | -// .frame(maxHeight: .infinity) | ||
464 | - .background(Color(red: 0.9490196078431372, green: 0.9490196078431372, blue: 0.9490196078431372, opacity: 0.49)) | ||
465 | - .cornerRadius(10) | ||
466 | - .padding(.top, self.uiscreen.height * 0.04) | ||
467 | - | ||
468 | - Spacer() | ||
469 | - | ||
470 | - VStack(alignment: .center) { | ||
471 | - Button { | ||
472 | - // Button Action | ||
473 | - print("More Details Button tapped!") | ||
474 | - } label: { | ||
475 | - HStack { | ||
476 | - Text("Αναλυτικά") | ||
477 | - .fontWeight(.medium) | ||
478 | - .font(.system(size: 16)) | ||
479 | - .foregroundColor(Color.white) | ||
480 | - .multilineTextAlignment(.center) | ||
481 | - .padding(.all) | ||
482 | - } | ||
483 | - .frame(maxWidth: .infinity) | ||
484 | - } | ||
485 | - .frame(width: self.uiscreen.width * 0.8) | ||
486 | - .background(Color(red: 0.4745098039215686, green: 0.7490196078431373, blue: 0.0784313725490196)) | ||
487 | - .cornerRadius(7) | ||
488 | - } | ||
489 | - .frame(maxWidth: .infinity) | ||
490 | - .padding(.top, self.uiscreen.height * 0.04) | ||
491 | - .padding(.bottom, self.uiscreen.height * 0.02) | ||
492 | -// .padding(.horizontal, 25) | ||
493 | - | ||
494 | - } | ||
495 | - .frame(width:self.uiscreen.width * 0.93) | ||
496 | - .frame(maxHeight: .infinity) | ||
497 | - .background(Color.white) | ||
498 | - .cornerRadius(10) | ||
499 | - } | ||
500 | - .padding(.vertical, self.uiscreen.height * 0.02) | ||
501 | - .frame(minHeight: geometry.size.height) | ||
502 | -// .frame(maxHeight: .infinity) | ||
503 | - | ||
504 | - } | ||
505 | - .cornerRadius(10, corners: [.topLeft]) | ||
506 | - .frame(width:self.uiscreen.width) | ||
507 | - .frame(maxHeight: .infinity) | ||
508 | - } | ||
509 | - .frame(width:self.uiscreen.width) | ||
510 | - .frame(maxHeight: .infinity) | ||
511 | - } | ||
512 | - .frame(width:self.uiscreen.width) | ||
513 | - .frame(maxHeight: .infinity) | ||
514 | - .padding(.top, 5) | ||
515 | - .background( | ||
516 | - Image("coupons_scrollview", bundle: Bundle(for: MyEmptyClass.self)) | ||
517 | - .resizable() | ||
518 | - ) | ||
519 | - | ||
520 | - } | ||
521 | - .edgesIgnoringSafeArea([.bottom]) | ||
522 | - .frame(width:self.uiscreen.width) | ||
523 | - .frame(maxHeight: .infinity) | ||
524 | - } | ||
525 | -} | ||
526 | -#endif | ||
527 | - | ||
528 | -//struct DetailsView_Previews: PreviewProvider { | ||
529 | -// static var previews: some View { | ||
530 | -// DetailsView() | ||
531 | -// } | ||
532 | -//} |
1 | -// | ||
2 | -// DetailsViewInterface.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Manos Chorianopoulos on 3/5/22. | ||
6 | -// | ||
7 | - | ||
8 | -import Foundation | ||
9 | -import SwiftUI | ||
10 | - | ||
11 | -@available(iOS 13.0.0, *) | ||
12 | -@objc public class DetailsViewInterface : NSObject { | ||
13 | - | ||
14 | - @objc(detailsViewController:) static public func detailsViewController(parentView: UIView?) -> UIViewController { | ||
15 | - return UIHostingController(rootView: DetailsView(parentView: parentView!)) | ||
16 | - } | ||
17 | - | ||
18 | -} |
1 | -// | ||
2 | -// GiftsView.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Manos Chorianopoulos on 18/4/22. | ||
6 | -// | ||
7 | - | ||
8 | - | ||
9 | -#if canImport(SwiftUI) | ||
10 | -import SwiftUI | ||
11 | -import Combine | ||
12 | -import Foundation | ||
13 | -import UIKit | ||
14 | - | ||
15 | - | ||
16 | - | ||
17 | -extension String { | ||
18 | - func htmlToString() -> String { | ||
19 | - return try! NSAttributedString(data: self.data(using: .utf8)!, | ||
20 | - options: [.documentType: NSAttributedString.DocumentType.html], | ||
21 | - documentAttributes: nil).string | ||
22 | - } | ||
23 | -} | ||
24 | - | ||
25 | -extension View { | ||
26 | - func cornerRadius(_ radius: CGFloat, corners: UIRectCorner) -> some View { | ||
27 | - clipShape( RoundedCorner(radius: radius, corners: corners) ) | ||
28 | - } | ||
29 | -} | ||
30 | - | ||
31 | -struct RoundedCorner: Shape { | ||
32 | - | ||
33 | - var radius: CGFloat = .infinity | ||
34 | - var corners: UIRectCorner = .allCorners | ||
35 | - | ||
36 | - func path(in rect: CGRect) -> Path { | ||
37 | - let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) | ||
38 | - return Path(path.cgPath) | ||
39 | - } | ||
40 | -} | ||
41 | - | ||
42 | -class UrlImageModel: ObservableObject { | ||
43 | - @Published var image: UIImage? | ||
44 | - var urlString: String? | ||
45 | - var imageCache = ImageCache.getImageCache() | ||
46 | - | ||
47 | - | ||
48 | - func loadImage() { | ||
49 | - if loadImageFromCache() { | ||
50 | - print("Cache hit") | ||
51 | - return | ||
52 | - } | ||
53 | - | ||
54 | - print("Cache miss, loading from url") | ||
55 | - loadImageFromUrl() | ||
56 | - } | ||
57 | - | ||
58 | - func loadImageFromCache() -> Bool { | ||
59 | - guard let urlString = urlString else { | ||
60 | - return false | ||
61 | - } | ||
62 | - | ||
63 | - guard let cacheImage = imageCache.get(forKey: urlString) else { | ||
64 | - return false | ||
65 | - } | ||
66 | - | ||
67 | - image = cacheImage | ||
68 | - return true | ||
69 | - } | ||
70 | - | ||
71 | - func loadImageFromUrl() { | ||
72 | - guard let urlString = urlString else { | ||
73 | - return | ||
74 | - } | ||
75 | - | ||
76 | - let url = URL(string: urlString)! | ||
77 | - let task = URLSession.shared.dataTask(with: url, completionHandler: getImageFromResponse(data:response:error:)) | ||
78 | - task.resume() | ||
79 | - } | ||
80 | - | ||
81 | - func getImageFromResponse(data: Data?, response: URLResponse?, error: Error?) { | ||
82 | - guard error == nil else { | ||
83 | - print("Error: \(error!)") | ||
84 | - return | ||
85 | - } | ||
86 | - guard let data = data else { | ||
87 | - print("No data found") | ||
88 | - return | ||
89 | - } | ||
90 | - | ||
91 | - DispatchQueue.main.async { | ||
92 | - guard let loadedImage = UIImage(data: data) else { | ||
93 | - return | ||
94 | - } | ||
95 | - | ||
96 | - self.imageCache.set(forKey: self.urlString!, image: loadedImage) | ||
97 | - self.image = loadedImage | ||
98 | - } | ||
99 | - } | ||
100 | - | ||
101 | - init(urlString:String) { | ||
102 | - self.urlString = urlString | ||
103 | - loadImage() | ||
104 | - } | ||
105 | -} | ||
106 | - | ||
107 | -class ImageCache { | ||
108 | - var cache = NSCache<NSString, UIImage>() | ||
109 | - | ||
110 | - func get(forKey: String) -> UIImage? { | ||
111 | - return cache.object(forKey: NSString(string: forKey)) | ||
112 | - } | ||
113 | - | ||
114 | - func set(forKey: String, image: UIImage) { | ||
115 | - cache.setObject(image, forKey: NSString(string: forKey)) | ||
116 | - } | ||
117 | -} | ||
118 | - | ||
119 | -extension ImageCache { | ||
120 | - private static var imageCache = ImageCache() | ||
121 | - static func getImageCache() -> ImageCache { | ||
122 | - return imageCache | ||
123 | - } | ||
124 | -} | ||
125 | - | ||
126 | - | ||
127 | -extension GiftsView { | ||
128 | - struct headerView: View { | ||
129 | - var goBack: () -> () | ||
130 | - | ||
131 | - var uiscreen = UIScreen.main.bounds | ||
132 | - | ||
133 | - var body: some View { | ||
134 | - HStack(alignment: .center) { | ||
135 | - Button { | ||
136 | - // Button Action | ||
137 | - print("Back Button tapped!") | ||
138 | - goBack() | ||
139 | - } label: { | ||
140 | - Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
141 | - .resizable() | ||
142 | - .aspectRatio(contentMode: .fit) | ||
143 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
144 | - } | ||
145 | - | ||
146 | - Text("Gifts for You") | ||
147 | - .fontWeight(.medium) | ||
148 | - .font(.system(size: 16)) | ||
149 | - .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
150 | - .multilineTextAlignment(.center) | ||
151 | - .frame(maxWidth: .infinity) | ||
152 | - .padding(.horizontal) | ||
153 | - | ||
154 | - Button { | ||
155 | - // Button Action | ||
156 | - print("Location tapped!") | ||
157 | - } label: { | ||
158 | - Image("location_icon", bundle: Bundle(for: MyEmptyClass.self)) | ||
159 | - .resizable() | ||
160 | - .aspectRatio(contentMode: .fit) | ||
161 | - .frame(width: self.uiscreen.height * 0.04, height: self.uiscreen.height * 0.04) | ||
162 | - } | ||
163 | - | ||
164 | - } | ||
165 | - .frame(maxWidth: .infinity) | ||
166 | - .padding(.horizontal) | ||
167 | - .padding(.vertical, 10) | ||
168 | - } | ||
169 | - } | ||
170 | - | ||
171 | - struct searchView: View { | ||
172 | - @State var searchText: String = "" | ||
173 | - | ||
174 | - var uiscreen = UIScreen.main.bounds | ||
175 | - | ||
176 | - var body: some View { | ||
177 | - HStack(alignment: .center) { | ||
178 | - HStack(alignment: .center) { | ||
179 | - Image("search_icon", bundle: Bundle(for: MyEmptyClass.self)) | ||
180 | - .resizable() | ||
181 | - .aspectRatio(contentMode: .fit) | ||
182 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.025) | ||
183 | - .padding([.top, .leading, .bottom], 10) | ||
184 | - TextField("Βρες το gift που σε ενδιαφέρει", text: $searchText) | ||
185 | - .frame(maxWidth: .infinity) | ||
186 | - .padding(.all, 10) | ||
187 | - .foregroundColor(Color(red: 0.48627450980392156, green: 0.48627450980392156, blue: 0.48627450980392156)) | ||
188 | - .font(.system(size: 16, weight: .regular, design: .default)) | ||
189 | - } | ||
190 | - .overlay( | ||
191 | - RoundedRectangle(cornerRadius: 9) | ||
192 | - .stroke(Color(red: 0.8235294117647058, green: 0.8235294117647058, blue: 0.8235294117647058), lineWidth: 1) | ||
193 | - ) | ||
194 | - | ||
195 | - Button { | ||
196 | - // Button Action | ||
197 | - print("Filters tapped!") | ||
198 | - } label: { | ||
199 | - Image("filters_btn", bundle: Bundle(for: MyEmptyClass.self)) | ||
200 | - .resizable() | ||
201 | - .aspectRatio(contentMode: .fit) | ||
202 | - .frame(width: self.uiscreen.height * 0.06, height: self.uiscreen.height * 0.04) | ||
203 | - .padding(.leading, 5) | ||
204 | - } | ||
205 | - } | ||
206 | - .frame(maxWidth: .infinity) | ||
207 | - .padding(.horizontal, 20) | ||
208 | - .padding(.vertical, 5) | ||
209 | - } | ||
210 | - } | ||
211 | - | ||
212 | - struct ImageView: View { | ||
213 | - @ObservedObject var imageLoader:UrlImageModel | ||
214 | - @State var width:CGFloat | ||
215 | - @State var isFill:Bool | ||
216 | - | ||
217 | - var uiscreen = UIScreen.main.bounds | ||
218 | - | ||
219 | - init(withURL url:String , width:CGFloat, isFill:Bool) { | ||
220 | - imageLoader = UrlImageModel(urlString:url) | ||
221 | - self.width = width | ||
222 | - self.isFill = isFill | ||
223 | - } | ||
224 | - | ||
225 | - var body: some View { | ||
226 | - | ||
227 | - Image(uiImage: imageLoader.image ?? UIImage()) | ||
228 | - .resizable() | ||
229 | - .aspectRatio(contentMode: isFill ? .fill : .fit) | ||
230 | - .frame(width: self.width) | ||
231 | - .frame(maxHeight: .infinity) | ||
232 | - } | ||
233 | - } | ||
234 | - | ||
235 | - | ||
236 | - struct giftItemView: View { | ||
237 | - var item: swiftApi.CampaignItemModel | ||
238 | - var isFirst: Bool | ||
239 | - var isLast: Bool | ||
240 | - var parentView: UIView | ||
241 | - | ||
242 | - var uiscreen = UIScreen.main.bounds | ||
243 | - | ||
244 | - var body: some View { | ||
245 | - Button { | ||
246 | - // GiftItem Action | ||
247 | - let instanceOfMyApi = MyApi() | ||
248 | - let campaignViewController = instanceOfMyApi.openCampaign(parentView, campaign: item.index_url)! | ||
249 | - campaignViewController.view.tag = 6 | ||
250 | -// addChild(couponsViewController) | ||
251 | - campaignViewController.view.frame = parentView.frame | ||
252 | - parentView.addSubview(campaignViewController.view) | ||
253 | -// campaignViewController.didMove(toParent: UIHostingController(rootView: self)) | ||
254 | - } label: { | ||
255 | - HStack(alignment: .center) { | ||
256 | - | ||
257 | - ImageView(withURL: item.logo_url ?? "", width: self.uiscreen.width * 0.5, isFill: true) | ||
258 | - | ||
259 | - Text(item.title ?? "") | ||
260 | - .fontWeight(.regular) | ||
261 | - .font(.system(size: 16)) | ||
262 | - .foregroundColor(Color(red: 0.22745098039215686, green: 0.3215686274509804, blue: 0.4)) | ||
263 | - .multilineTextAlignment(.center) | ||
264 | - .frame(maxWidth: .infinity, maxHeight: .infinity) | ||
265 | - .padding(.all, 10) | ||
266 | - .background(Color.white) | ||
267 | - } | ||
268 | - } | ||
269 | - .frame(width: self.uiscreen.width * 0.9, height: self.uiscreen.height * 0.16) | ||
270 | - .background(Color.white) | ||
271 | - .cornerRadius(5) | ||
272 | - .shadow(color: Color(red: 0, green: 0, blue: 0, opacity: 0.16), radius: 30, x: 0, y: 3) | ||
273 | - .padding(.leading, isFirst ? 18 : 0) | ||
274 | - .padding(.trailing, isLast ? 18 : 0) | ||
275 | - } | ||
276 | - } | ||
277 | - | ||
278 | - struct giftsContainer: View { | ||
279 | - @State var gifts:Array<swiftApi.CampaignItemModel> = [] | ||
280 | - @State var title:String = "" | ||
281 | - @State var parentView:UIView | ||
282 | - | ||
283 | - var uiscreen = UIScreen.main.bounds | ||
284 | - | ||
285 | - var body: some View { | ||
286 | - VStack(alignment: .leading) { | ||
287 | - | ||
288 | - Text(title) | ||
289 | - .fontWeight(.bold) | ||
290 | - .font(.system(size: 17)) | ||
291 | - .foregroundColor(Color.white) | ||
292 | - .multilineTextAlignment(.leading) | ||
293 | - .padding(.horizontal) | ||
294 | - .padding(.top, self.uiscreen.height * 0.05) | ||
295 | - .padding(.bottom, self.uiscreen.height * 0.015) | ||
296 | - | ||
297 | - ScrollView(.horizontal, showsIndicators: false) { | ||
298 | - HStack(alignment: .center) { | ||
299 | - ForEach(Array(gifts.enumerated()), id: \.offset) { index, item in | ||
300 | - | ||
301 | - giftItemView(item: item, isFirst: index == 0, isLast: index == (gifts.count-1), parentView: parentView) | ||
302 | - } | ||
303 | - | ||
304 | - } | ||
305 | - .frame(maxWidth: .infinity) | ||
306 | - } | ||
307 | - .frame(maxWidth: .infinity) | ||
308 | - | ||
309 | - } | ||
310 | - .frame(maxWidth: .infinity) | ||
311 | - } | ||
312 | - } | ||
313 | - | ||
314 | - struct couponsContainer: View { | ||
315 | - @State var coupons:Array<swiftApi.CouponSetItemModel> = [] | ||
316 | - @State var title:String = "" | ||
317 | - @State var parentView:UIView | ||
318 | - | ||
319 | - var uiscreen = UIScreen.main.bounds | ||
320 | - | ||
321 | - var body: some View { | ||
322 | - VStack(alignment: .leading) { | ||
323 | - | ||
324 | - Text(title) | ||
325 | - .fontWeight(.bold) | ||
326 | - .font(.system(size: 17)) | ||
327 | - .foregroundColor(Color.white) | ||
328 | - .multilineTextAlignment(.leading) | ||
329 | - .padding(.horizontal) | ||
330 | - .padding(.top, self.uiscreen.height * 0.05) | ||
331 | - .padding(.bottom, self.uiscreen.height * 0.015) | ||
332 | - | ||
333 | - ScrollView(.horizontal, showsIndicators: false) { | ||
334 | - HStack(alignment: .center) { | ||
335 | - ForEach(Array(coupons.enumerated()), id: \.offset) { index, item in | ||
336 | - | ||
337 | - couponItemView(item: item, isFirst: index == 0, isLast: index == (coupons.count-1), parentView: parentView) | ||
338 | - } | ||
339 | - | ||
340 | - } | ||
341 | - .frame(maxWidth: .infinity) | ||
342 | - } | ||
343 | - .frame(maxWidth: .infinity) | ||
344 | - | ||
345 | - } | ||
346 | - .frame(maxWidth: .infinity) | ||
347 | - .padding(.bottom, self.uiscreen.height * 0.1) | ||
348 | - } | ||
349 | - } | ||
350 | - | ||
351 | - struct couponItemView: View { | ||
352 | - var item: swiftApi.CouponSetItemModel | ||
353 | - var isFirst: Bool | ||
354 | - var isLast: Bool | ||
355 | - var parentView: UIView | ||
356 | - | ||
357 | - var uiscreen = UIScreen.main.bounds | ||
358 | - | ||
359 | - var body: some View { | ||
360 | - Button { | ||
361 | - // GiftItem Action | ||
362 | -// let tempItem = item.asDictionary | ||
363 | - let instanceOfMySwiftApi = swiftApi() | ||
364 | - let couponViewController = instanceOfMySwiftApi.openCoupon(parent: parentView, coupon: item) | ||
365 | - couponViewController.view.tag = 2 | ||
366 | -// addChild(couponsViewController) | ||
367 | - couponViewController.view.frame = parentView.frame | ||
368 | - parentView.addSubview(couponViewController.view) | ||
369 | -// couponViewController.didMove(toParent: UIHostingController(rootView: self)) | ||
370 | - } label: { | ||
371 | - | ||
372 | - HStack(alignment: .center) { | ||
373 | - | ||
374 | - ImageView(withURL: item.img_preview ?? "", width: self.uiscreen.width * 0.15, isFill: false) | ||
375 | - | ||
376 | - VLine() | ||
377 | - .stroke(style: StrokeStyle(lineWidth: 1, dash: [5])) | ||
378 | - .foregroundColor(Color(red: 0.4392156862745098, green: 0.4392156862745098, blue: 0.4392156862745098)) | ||
379 | - .frame(width: 1) | ||
380 | - .padding(.leading, 10) | ||
381 | - | ||
382 | - VStack(alignment: .leading, spacing: 8.0) { | ||
383 | - Text(item.name ?? "") | ||
384 | - .fontWeight(.medium) | ||
385 | - .font(.system(size: 16)) | ||
386 | - .foregroundColor(Color(red: 0.22745098039215686, green: 0.3215686274509804, blue: 0.4)) | ||
387 | - .multilineTextAlignment(.leading) | ||
388 | - .lineLimit(1) | ||
389 | -// .frame(maxWidth: .infinity) | ||
390 | - | ||
391 | - HStack(alignment: .center) { | ||
392 | - Text((item.discount ?? "")+"€") | ||
393 | - .fontWeight(.bold) | ||
394 | - .font(.system(size: 25)) | ||
395 | - .foregroundColor(Color(red: 0.22745098039215686, green: 0.3215686274509804, blue: 0.4)) | ||
396 | - .multilineTextAlignment(.leading) | ||
397 | - .lineLimit(1) | ||
398 | -// .frame(width: self.uiscreen.width * 0.3) | ||
399 | -// .frame(maxWidth: .infinity, maxHeight: .infinity) | ||
400 | - | ||
401 | - Text(item.short_description ?? "") | ||
402 | - .fontWeight(.medium) | ||
403 | - .font(.system(size: 11)) | ||
404 | - .foregroundColor(Color(red: 0.3803921568627451, green: 0.44313725490196076, blue: 0.5058823529411764)) | ||
405 | - .multilineTextAlignment(.leading) | ||
406 | - .lineLimit(3) | ||
407 | -// .frame(maxWidth: .infinity) | ||
408 | -// .padding(.leading, 10) | ||
409 | - } | ||
410 | -// .padding(.vertical, 5) | ||
411 | - // .frame(maxHeight: .infinity) | ||
412 | - | ||
413 | - Text("Ισχύει έως "+(item.expiration ?? "")) | ||
414 | - .fontWeight(.medium) | ||
415 | - .font(.system(size: 11)) | ||
416 | - .foregroundColor(Color(red: 0.3803921568627451, green: 0.44313725490196076, blue: 0.5058823529411764)) | ||
417 | - .multilineTextAlignment(.leading) | ||
418 | -// .frame(maxWidth: .infinity) | ||
419 | -// .frame(maxWidth: .infinity, maxHeight: .infinity) | ||
420 | -// .padding(.all, 10) | ||
421 | - } | ||
422 | - .padding(.all, 10) | ||
423 | -// .frame(maxWidth: .infinity, maxHeight: .infinity) | ||
424 | - | ||
425 | - Spacer() | ||
426 | - | ||
427 | - } | ||
428 | - .padding(.leading, 28) | ||
429 | - .padding(.trailing) | ||
430 | - } | ||
431 | - .frame(width: self.uiscreen.width * 0.9, height: self.uiscreen.height * 0.14) | ||
432 | - .cornerRadius(5) | ||
433 | - .shadow(color: Color(red: 0, green: 0, blue: 0, opacity: 0.16), radius: 30, x: 0, y: 3) | ||
434 | - .padding(.leading, isFirst ? 18 : 0) | ||
435 | - .padding(.trailing, isLast ? 18 : 0) | ||
436 | - .background( | ||
437 | - Image("coupon_bg", bundle: Bundle(for: MyEmptyClass.self)) | ||
438 | - .resizable(resizingMode: .stretch) | ||
439 | - .frame(maxWidth: .infinity, maxHeight: .infinity) | ||
440 | - .padding(.leading, isFirst ? 18 : 0) | ||
441 | - .padding(.trailing, isLast ? 18 : 0) | ||
442 | - ) | ||
443 | - } | ||
444 | - } | ||
445 | - | ||
446 | - struct VLine: Shape { | ||
447 | - func path(in rect: CGRect) -> Path { | ||
448 | - Path { path in | ||
449 | - path.move(to: CGPoint(x: rect.midX, y: rect.minY)) | ||
450 | - path.addLine(to: CGPoint(x: rect.midX, y: rect.maxY)) | ||
451 | - } | ||
452 | - } | ||
453 | - } | ||
454 | - | ||
455 | -} | ||
456 | - | ||
457 | -@available(iOS 13.0.0, *) | ||
458 | -struct GiftsView: View { | ||
459 | - var parentView: UIView | ||
460 | - | ||
461 | -// var coupons:Array<CouponSetItemModel> = CouponDataModel().getData | ||
462 | -// var campains:Array<CampaignItemModel> = CampaignDataModel().getData.filter { $0.offer_category == "gifts_for_you" } | ||
463 | - | ||
464 | - | ||
465 | - var coupons:Array<swiftApi.CouponSetItemModel> = [] | ||
466 | - var campains:Array<swiftApi.CampaignItemModel> = [] | ||
467 | - | ||
468 | - var uiscreen = UIScreen.main.bounds | ||
469 | - | ||
470 | - init(parentView: UIView) { //initializer method | ||
471 | - | ||
472 | - let instanceOfMySwiftApi = swiftApi() | ||
473 | - let couponsData = instanceOfMySwiftApi.getCouponSets() | ||
474 | - let campaignsData = instanceOfMySwiftApi.getCampaigns() | ||
475 | - | ||
476 | - self.coupons = couponsData | ||
477 | - self.campains = campaignsData.filter { $0.offer_category == "gifts_for_you" } | ||
478 | - self.parentView = parentView | ||
479 | - } | ||
480 | - | ||
481 | - func goBack(){ | ||
482 | - for subview in parentView.subviews { | ||
483 | - if(subview.tag == 5) { | ||
484 | - subview.removeFromSuperview() | ||
485 | - } | ||
486 | - } | ||
487 | - } | ||
488 | - | ||
489 | - var body: some View { | ||
490 | - VStack { | ||
491 | - headerView(goBack: goBack) | ||
492 | - searchView() | ||
493 | - | ||
494 | - ScrollView(showsIndicators: false) { | ||
495 | - VStack { | ||
496 | - if (campains.filter { $0.subcategory == "gifts" }.count) > 0 { | ||
497 | - giftsContainer(gifts: campains.filter { $0.subcategory == "gifts" }, title: "ΔΩΡΑ", parentView: parentView) | ||
498 | - } | ||
499 | - | ||
500 | - | ||
501 | - if (campains.filter { $0.subcategory == "rewards" }.count) > 0 { | ||
502 | - giftsContainer(gifts: campains.filter { $0.subcategory == "rewards"}, title: "ΕΠΙΒΡΑΒΕΥΣΕΙΣ", parentView: parentView ) | ||
503 | - } | ||
504 | - | ||
505 | - if (coupons.count) > 0 { | ||
506 | - couponsContainer(coupons: coupons, title: "ΚΟΥΠΟΝΙΑ", parentView: parentView ) | ||
507 | - } | ||
508 | - | ||
509 | - } | ||
510 | - .frame(width:self.uiscreen.width) | ||
511 | - } | ||
512 | - .background( | ||
513 | - LinearGradient(gradient: Gradient(colors: [Color(red: 0.06, green: 0.67, blue: 0.84), Color(red: 0.47, green: 0.75, blue: 0.43)]), startPoint: .top, endPoint: .bottom) | ||
514 | - ) | ||
515 | - .cornerRadius(30, corners: [.topLeft]) | ||
516 | - .frame(width:self.uiscreen.width) | ||
517 | - .frame(maxHeight: .infinity) | ||
518 | - } | ||
519 | - .edgesIgnoringSafeArea([.bottom]) | ||
520 | - .frame(width:self.uiscreen.width) | ||
521 | - .frame(maxHeight: .infinity) | ||
522 | - } | ||
523 | -} | ||
524 | -#endif | ||
525 | - | ||
526 | -//@available(iOS 13.0.0, *) | ||
527 | -//struct GiftsView_Previews: PreviewProvider { | ||
528 | -// static var previews: some View { | ||
529 | -// | ||
530 | -// GiftsView() | ||
531 | -// | ||
532 | -// } | ||
533 | -//} |
1 | -// | ||
2 | -// GiftsViewInterface.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Manos Chorianopoulos on 18/4/22. | ||
6 | -// | ||
7 | - | ||
8 | -import Foundation | ||
9 | -import SwiftUI | ||
10 | - | ||
11 | -@available(iOS 13.0.0, *) | ||
12 | -@objc public class GiftsViewInterface : NSObject { | ||
13 | - | ||
14 | - @objc(giftsViewController:) static public func giftsViewController(parentView: UIView?) -> UIViewController { | ||
15 | - return UIHostingController(rootView: GiftsView(parentView: parentView!)) | ||
16 | - } | ||
17 | - | ||
18 | -} |
1 | -// | ||
2 | -// MoreForYouView.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Βασιλης Σκουρας on 20/4/22. | ||
6 | -// | ||
7 | -import SwiftUI | ||
8 | -import Combine | ||
9 | -import Foundation | ||
10 | -import UIKit | ||
11 | - | ||
12 | -class DataMFYModel { | ||
13 | - var data: Array<NSDictionary> = [] | ||
14 | - | ||
15 | - init() { //initializer method | ||
16 | - let instanceOfMyApi = MyApi() | ||
17 | - let inbox = instanceOfMyApi.getInbox() as! Array<NSDictionary> | ||
18 | - data = inbox.filter({ $0["offer_category"] as! String == "more_for_you" }) | ||
19 | - } | ||
20 | - | ||
21 | - var getData: Array<NSDictionary> { | ||
22 | - get { // getter | ||
23 | - return data | ||
24 | - } | ||
25 | - } | ||
26 | -} | ||
27 | - | ||
28 | -extension MoreForYouView { | ||
29 | - | ||
30 | - | ||
31 | - struct headerView: View { | ||
32 | - var goBack: () -> () | ||
33 | - var uiscreen = UIScreen.main.bounds | ||
34 | - | ||
35 | - | ||
36 | - var body: some View { | ||
37 | - HStack(alignment: .center) { | ||
38 | - Button { | ||
39 | - // Button Action | ||
40 | - goBack() | ||
41 | - } label: { | ||
42 | - Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
43 | - .resizable() | ||
44 | - .aspectRatio(contentMode: .fit) | ||
45 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
46 | - } | ||
47 | - Spacer().frame(width: 0) | ||
48 | - Text("More for you") | ||
49 | - .fontWeight(.medium) | ||
50 | - .font(.system(size: 16)) | ||
51 | - .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
52 | - .multilineTextAlignment(.center) | ||
53 | - .frame(maxWidth: .infinity) | ||
54 | - .padding(.horizontal) | ||
55 | - .offset(x: -self.uiscreen.height * 0.0125) | ||
56 | - } | ||
57 | - .frame(maxWidth: .infinity) | ||
58 | - .padding(.horizontal) | ||
59 | - .padding(.vertical, 10) | ||
60 | - } | ||
61 | - } | ||
62 | - | ||
63 | - struct ImageView: View { | ||
64 | - @ObservedObject var imageLoader:UrlImageModel | ||
65 | - @State var width:CGFloat | ||
66 | - @State var height:CGFloat | ||
67 | - @State var isFill:Bool | ||
68 | - | ||
69 | - var uiscreen = UIScreen.main.bounds | ||
70 | - | ||
71 | - init(withURL url:String , width:CGFloat, height: CGFloat, isFill:Bool) { | ||
72 | - imageLoader = UrlImageModel(urlString:url) | ||
73 | - self.width = width | ||
74 | - self.height = height | ||
75 | - self.isFill = isFill | ||
76 | - } | ||
77 | - | ||
78 | - var body: some View { | ||
79 | - | ||
80 | - Image(uiImage: imageLoader.image ?? UIImage()) | ||
81 | - .resizable() | ||
82 | - .frame(minWidth: self.uiscreen.width * 0.95, idealWidth: self.uiscreen.width * 0.95, maxWidth: self.uiscreen.width * 0.95, minHeight: self.uiscreen.height * 0.2, idealHeight: self.uiscreen.height * 0.2, maxHeight: self.uiscreen.height * 0.2, alignment: .leading) | ||
83 | - .scaledToFill() | ||
84 | - .aspectRatio(contentMode: isFill ? .fill : .fit) | ||
85 | - .cornerRadius(4) | ||
86 | - } | ||
87 | - } | ||
88 | - | ||
89 | - struct inboxView: View { | ||
90 | - var result: NSDictionary | ||
91 | - var index: Int | ||
92 | - | ||
93 | - var uiscreen = UIScreen.main.bounds | ||
94 | - | ||
95 | - static func localizedWithParameter(parameter: String) -> LocalizedStringKey { | ||
96 | - return "\(parameter)" | ||
97 | - } | ||
98 | - | ||
99 | - var body: some View { | ||
100 | - HStack { | ||
101 | - VStack(alignment: .leading) { | ||
102 | - Text(MoreForYouView.inboxView.localizedWithParameter(parameter: result["title"] as? String ?? "")) | ||
103 | - .font(.system(size: 17).italic()) | ||
104 | - .fontWeight(.bold) | ||
105 | - .foregroundColor(Color(hex: 0x3A5266)) | ||
106 | - .frame(maxWidth: self.uiscreen.width * 0.65, alignment: .topLeading) | ||
107 | - .padding(.top, self.uiscreen.height * 0.01) | ||
108 | - .padding(.leading, self.uiscreen.width * 0.03) | ||
109 | - Spacer() | ||
110 | - Text(MoreForYouView.inboxView.localizedWithParameter(parameter: result["subtitle"] as? String ?? "")) | ||
111 | - .font(.system(size: 16)) | ||
112 | - .fontWeight(.medium) | ||
113 | - .foregroundColor(Color(hex: 0x415564)) | ||
114 | - .frame(maxWidth: self.uiscreen.width * 0.72, alignment: .topLeading) | ||
115 | - .padding(.leading, self.uiscreen.width * 0.03) | ||
116 | - .padding(.bottom, self.uiscreen.height * 0.01) | ||
117 | - } | ||
118 | - .frame(width: self.uiscreen.width * 0.85, height: self.uiscreen.height * 0.2, alignment: .leading) | ||
119 | - .background( | ||
120 | - Image("MFY_container", bundle: Bundle(for: MyEmptyClass.self)) | ||
121 | - .resizable() | ||
122 | - .frame(minWidth: self.uiscreen.width * 0.85, idealWidth: self.uiscreen.width * 0.85, maxWidth: self.uiscreen.width * 0.85, minHeight: self.uiscreen.height * 0.2, idealHeight: self.uiscreen.height * 0.2, maxHeight: self.uiscreen.height * 0.2, alignment: .leading) | ||
123 | - .scaledToFill() | ||
124 | - .aspectRatio(contentMode: .fill) | ||
125 | - ) | ||
126 | - .cornerRadius(4, corners: [.topLeft, .bottomLeft]) | ||
127 | - Spacer() | ||
128 | - } | ||
129 | - .frame(width: self.uiscreen.width * 0.95, height: self.uiscreen.height * 0.2) | ||
130 | - .background( | ||
131 | - ImageView(withURL: result["logo_url"] as! String, width: self.uiscreen.width * 0.95, height: self.uiscreen.height * 0.2, isFill: true) | ||
132 | - ) | ||
133 | - .padding(.bottom, self.uiscreen.height * 0.01) | ||
134 | - | ||
135 | - } | ||
136 | - } | ||
137 | -} | ||
138 | - | ||
139 | -extension Color { | ||
140 | - init(hex: Int, opacity: Double = 1.0) { | ||
141 | - let red = Double((hex & 0xff0000) >> 16) / 255.0 | ||
142 | - let green = Double((hex & 0xff00) >> 8) / 255.0 | ||
143 | - let blue = Double((hex & 0xff) >> 0) / 255.0 | ||
144 | - self.init(.sRGB, red: red, green: green, blue: blue, opacity: opacity) | ||
145 | - } | ||
146 | -} | ||
147 | - | ||
148 | -struct MoreForYouView: View { | ||
149 | - | ||
150 | - var data:Array<NSDictionary> = DataMFYModel().getData | ||
151 | - | ||
152 | - var parentView: UIView | ||
153 | - | ||
154 | - var uiscreen = UIScreen.main.bounds | ||
155 | - | ||
156 | - func goBack(){ | ||
157 | - for subview in parentView.subviews { | ||
158 | - if(subview.tag == 4) { | ||
159 | - subview.removeFromSuperview() | ||
160 | - } | ||
161 | - } | ||
162 | - } | ||
163 | - | ||
164 | - var body: some View { | ||
165 | - VStack { | ||
166 | - headerView(goBack: goBack) | ||
167 | - ScrollView(showsIndicators: false) { | ||
168 | - VStack { | ||
169 | - if (data.count) > 0 { | ||
170 | - ForEach(Array(zip(data.indices, data)), id: \.0) { index, result in | ||
171 | - inboxView(result: result, index: index) | ||
172 | - | ||
173 | - } | ||
174 | - } | ||
175 | - } | ||
176 | - .padding(.top, self.uiscreen.height * 0.04) | ||
177 | - .padding(.bottom, self.uiscreen.height * 0.05) | ||
178 | - } | ||
179 | - .frame(maxWidth: .infinity, maxHeight: .infinity ) | ||
180 | - .background( | ||
181 | - LinearGradient(gradient: Gradient(colors: [Color(hex: 0x1AADCC), Color(hex: 0x83C062)]), startPoint: .top, endPoint: .bottom) | ||
182 | - ) | ||
183 | - .cornerRadius(20, corners: [.topLeft]) | ||
184 | - | ||
185 | - } | ||
186 | - .frame(maxWidth: .infinity, maxHeight: .infinity ) | ||
187 | - .edgesIgnoringSafeArea([.bottom]) | ||
188 | - // .frame(width:self.uiscreen.width, height:self.uiscreen.height ) | ||
189 | - } | ||
190 | -} | ||
191 | - | ||
192 | -//struct MoreForYouView_Previews: PreviewProvider { | ||
193 | -// static var previews: some View { | ||
194 | -// MoreForYouView() | ||
195 | -// } | ||
196 | -//} |
1 | -// | ||
2 | -// MoreForYouViewInterface.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Βασιλης Σκουρας on 20/4/22. | ||
6 | -// | ||
7 | - | ||
8 | -import Foundation | ||
9 | -import SwiftUI | ||
10 | - | ||
11 | -@available(iOS 13.0.0, *) | ||
12 | -@objc public class MoreForYouViewInterface : NSObject { | ||
13 | - | ||
14 | - @objc(moreForYouViewController:) static public func moreForYouViewController(parentView: UIView?) -> UIViewController { | ||
15 | - return UIHostingController(rootView: MoreForYouView(parentView: parentView!)) | ||
16 | - } | ||
17 | - | ||
18 | -} |
... | @@ -37,18 +37,18 @@ CMPedometer *pedometer; | ... | @@ -37,18 +37,18 @@ CMPedometer *pedometer; |
37 | NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"]; | 37 | NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"]; |
38 | [NSURLCache setSharedURLCache:sharedCache]; | 38 | [NSURLCache setSharedURLCache:sharedCache]; |
39 | 39 | ||
40 | - date = [NSDate date]; | 40 | +// date = [NSDate date]; |
41 | - if ([CMPedometer isStepCountingAvailable]) { | 41 | +// if ([CMPedometer isStepCountingAvailable]) { |
42 | - pedometer = [[CMPedometer alloc] init]; | 42 | +// pedometer = [[CMPedometer alloc] init]; |
43 | - [NSTimer scheduledTimerWithTimeInterval:0.5f | 43 | +// [NSTimer scheduledTimerWithTimeInterval:0.5f |
44 | - target:self | 44 | +// target:self |
45 | - selector:@selector(recursiveQuery) | 45 | +// selector:@selector(recursiveQuery) |
46 | - userInfo:nil | 46 | +// userInfo:nil |
47 | - repeats:YES]; | 47 | +// repeats:YES]; |
48 | - } else { | 48 | +// } else { |
49 | - NSLog(@"Nothing available"); | 49 | +// NSLog(@"Nothing available"); |
50 | - | 50 | +// |
51 | - } | 51 | +// } |
52 | } | 52 | } |
53 | 53 | ||
54 | - (void)queryDataFrom:(NSDate *)startDate toDate:(NSDate *)endDate { | 54 | - (void)queryDataFrom:(NSDate *)startDate toDate:(NSDate *)endDate { | ... | ... |
1 | -// | ||
2 | -// OldCouponsView.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Manos Chorianopoulos on 28/4/22. | ||
6 | -// | ||
7 | - | ||
8 | -#if canImport(SwiftUI) | ||
9 | -import SwiftUI | ||
10 | -import Combine | ||
11 | -import Foundation | ||
12 | -import UIKit | ||
13 | - | ||
14 | - | ||
15 | -extension OldCouponsView { | ||
16 | - struct headerView: View { | ||
17 | - var goBack: () -> () | ||
18 | - | ||
19 | - var uiscreen = UIScreen.main.bounds | ||
20 | - | ||
21 | - var body: some View { | ||
22 | - HStack(alignment: .center) { | ||
23 | - Button { | ||
24 | - // Button Action | ||
25 | - print("Back Button tapped!") | ||
26 | - goBack() | ||
27 | - } label: { | ||
28 | - Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
29 | - .resizable() | ||
30 | - .aspectRatio(contentMode: .fit) | ||
31 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
32 | - } | ||
33 | - | ||
34 | - Text("Παλαιότερα κουπόνια") | ||
35 | - .fontWeight(.medium) | ||
36 | - .font(.system(size: 16)) | ||
37 | - .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
38 | - .multilineTextAlignment(.center) | ||
39 | - .frame(maxWidth: .infinity) | ||
40 | - .padding(.horizontal) | ||
41 | - | ||
42 | - Button { | ||
43 | - // Button Action | ||
44 | - print("Wallet tapped!") | ||
45 | - } label: { | ||
46 | - Image("ic_wallet", bundle: Bundle(for: MyEmptyClass.self)) | ||
47 | - .resizable() | ||
48 | - .aspectRatio(contentMode: .fit) | ||
49 | - .frame(width: self.uiscreen.height * 0.04, height: self.uiscreen.height * 0.04) | ||
50 | - } | ||
51 | - } | ||
52 | - .frame(maxWidth: .infinity) | ||
53 | - .padding(.horizontal) | ||
54 | - .padding(.vertical, 10) | ||
55 | - } | ||
56 | - } | ||
57 | - | ||
58 | - struct ImageView: View { | ||
59 | - @ObservedObject var imageLoader:UrlImageModel | ||
60 | - @State var width:CGFloat | ||
61 | - @State var isFill:Bool | ||
62 | - | ||
63 | - var uiscreen = UIScreen.main.bounds | ||
64 | - | ||
65 | - init(withURL url:String , width:CGFloat, isFill:Bool) { | ||
66 | - imageLoader = UrlImageModel(urlString:url) | ||
67 | - self.width = width | ||
68 | - self.isFill = isFill | ||
69 | - } | ||
70 | - | ||
71 | - var body: some View { | ||
72 | - | ||
73 | - Image(uiImage: imageLoader.image ?? UIImage()) | ||
74 | - .resizable() | ||
75 | - .aspectRatio(contentMode: isFill ? .fill : .fit) | ||
76 | - .frame(width: self.width) | ||
77 | - .frame(maxHeight: .infinity) | ||
78 | - } | ||
79 | - } | ||
80 | - | ||
81 | - struct couponItemView: View { | ||
82 | - var item: swiftApi.CouponItemModel | ||
83 | - var parentView: UIView | ||
84 | - | ||
85 | - var uiscreen = UIScreen.main.bounds | ||
86 | - | ||
87 | - var body: some View { | ||
88 | -// let couponData = item["coupon_data"] as? [String: Any] ?? ["":""] | ||
89 | - let couponSetData = item.couponset_data | ||
90 | - | ||
91 | - Button { | ||
92 | - // Coupon Action | ||
93 | - print("Coupon tapped!") | ||
94 | -// let instanceOfMyApi = MyApi() | ||
95 | -// let couponBarcodeViewController = instanceOfMyApi.openCouponBarcode(parentView, coupon: item as! [String : Any])! | ||
96 | -// couponBarcodeViewController.view.tag = 7 | ||
97 | -//// addChild(couponsViewController) | ||
98 | -// couponBarcodeViewController.view.frame = parentView.frame | ||
99 | -// parentView.addSubview(couponBarcodeViewController.view) | ||
100 | -// couponBarcodeViewController.didMove(toParent: UIHostingController(rootView: self)) | ||
101 | - } label: { | ||
102 | - | ||
103 | - HStack(alignment: .center) { | ||
104 | - | ||
105 | - ImageView(withURL: couponSetData?.img_preview ?? "", width: self.uiscreen.width * 0.15, isFill: false) | ||
106 | - | ||
107 | - VLine() | ||
108 | - .stroke(style: StrokeStyle(lineWidth: 1, dash: [5])) | ||
109 | - .foregroundColor(Color(red: 0.4392156862745098, green: 0.4392156862745098, blue: 0.4392156862745098)) | ||
110 | - .frame(width: 1) | ||
111 | - .padding(.leading, 10) | ||
112 | - | ||
113 | - VStack(alignment: .leading, spacing: 5.0) { | ||
114 | - Text(couponSetData?.name ?? "") | ||
115 | - .fontWeight(.medium) | ||
116 | - .font(.system(size: 16)) | ||
117 | - .foregroundColor(Color(red: 0.22745098039215686, green: 0.3215686274509804, blue: 0.4)) | ||
118 | - .multilineTextAlignment(.leading) | ||
119 | -// .lineLimit(1) | ||
120 | - | ||
121 | - HStack(alignment: .center) { | ||
122 | - Text((item.discount ?? "")+"€") | ||
123 | - .fontWeight(.bold) | ||
124 | - .font(.system(size: 35)) | ||
125 | - .foregroundColor(Color(red: 0.22745098039215686, green: 0.3215686274509804, blue: 0.4)) | ||
126 | - .multilineTextAlignment(.leading) | ||
127 | - .lineLimit(1) | ||
128 | - | ||
129 | -// Text(couponSetData?.short_description ?? "") | ||
130 | -// .fontWeight(.medium) | ||
131 | -// .font(.system(size: 11)) | ||
132 | -// .foregroundColor(Color(red: 0.3803921568627451, green: 0.44313725490196076, blue: 0.5058823529411764)) | ||
133 | -// .multilineTextAlignment(.leading) | ||
134 | -// .lineLimit(3) | ||
135 | - } | ||
136 | - | ||
137 | - Text("Εξαργυρώθηκε την " + (item.expiration ?? "")) | ||
138 | - .fontWeight(.medium) | ||
139 | - .font(.system(size: 11)) | ||
140 | - .foregroundColor(Color(red: 0.3803921568627451, green: 0.44313725490196076, blue: 0.5058823529411764)) | ||
141 | - .multilineTextAlignment(.leading) | ||
142 | - } | ||
143 | - .padding(.all, 10) | ||
144 | - | ||
145 | - Spacer() | ||
146 | - | ||
147 | - } | ||
148 | - .padding(.leading, 28) | ||
149 | - .padding(.trailing) | ||
150 | - } | ||
151 | - .frame(width: self.uiscreen.width * 0.9, height: self.uiscreen.height * 0.14) | ||
152 | -// .cornerRadius(5) | ||
153 | -// .shadow(color: Color(red: 0, green: 0, blue: 0, opacity: 0.16), radius: 30, x: 0, y: 3) | ||
154 | - .background( | ||
155 | - Image("coupon_bg", bundle: Bundle(for: MyEmptyClass.self)) | ||
156 | - .resizable(resizingMode: .stretch) | ||
157 | - .frame(maxWidth: .infinity, maxHeight: .infinity) | ||
158 | - .colorMultiply(Color(red: 0.8901960784313725, green: 0.8901960784313725, blue: 0.8901960784313725)) | ||
159 | - ) | ||
160 | - } | ||
161 | - } | ||
162 | - | ||
163 | - struct VLine: Shape { | ||
164 | - func path(in rect: CGRect) -> Path { | ||
165 | - Path { path in | ||
166 | - path.move(to: CGPoint(x: rect.midX, y: rect.minY)) | ||
167 | - path.addLine(to: CGPoint(x: rect.midX, y: rect.maxY)) | ||
168 | - } | ||
169 | - } | ||
170 | - } | ||
171 | - | ||
172 | - struct couponsContainer: View { | ||
173 | - @State var coupons:Array<swiftApi.CouponItemModel> = [] | ||
174 | - @State var parentView:UIView | ||
175 | - | ||
176 | - var uiscreen = UIScreen.main.bounds | ||
177 | - | ||
178 | -// static func convertDateFormat(inputDate: String) -> String { | ||
179 | -// let dateFormatter = DateFormatter() | ||
180 | -// dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss" | ||
181 | -// if let date = dateFormatter.date(from: inputDate) { | ||
182 | -// dateFormatter.dateFormat = "dd/MM/yyyy" | ||
183 | -// let resultString = dateFormatter.string(from: date) | ||
184 | -// return resultString | ||
185 | -// } else { | ||
186 | -// return "" | ||
187 | -// } | ||
188 | -// } | ||
189 | - | ||
190 | - var body: some View { | ||
191 | - VStack(alignment: .center, spacing: self.uiscreen.height * 0.03) { | ||
192 | - | ||
193 | - ForEach(Array(coupons.enumerated()), id: \.offset) { index, item in | ||
194 | - | ||
195 | - couponItemView(item: item, parentView: parentView) | ||
196 | - } | ||
197 | - } | ||
198 | - .frame(maxWidth: .infinity) | ||
199 | - .padding(.top, self.uiscreen.height * 0.05) | ||
200 | - .padding(.bottom, self.uiscreen.height * 0.1) | ||
201 | - } | ||
202 | - } | ||
203 | - | ||
204 | -} | ||
205 | - | ||
206 | -@available(iOS 13.0.0, *) | ||
207 | -struct OldCouponsView: View { | ||
208 | - var parentView: UIView | ||
209 | - | ||
210 | - var coupons:Array<swiftApi.CouponItemModel> = [] | ||
211 | - | ||
212 | - var uiscreen = UIScreen.main.bounds | ||
213 | - | ||
214 | - | ||
215 | - init(parentView: UIView) { //initializer method | ||
216 | - | ||
217 | - let instanceOfMySwiftApi = swiftApi() | ||
218 | - let couponsData = instanceOfMySwiftApi.getOldCoupons() | ||
219 | - | ||
220 | - self.coupons = couponsData | ||
221 | - self.parentView = parentView | ||
222 | - } | ||
223 | - | ||
224 | - func goBack(){ | ||
225 | - for subview in parentView.subviews { | ||
226 | - if(subview.tag == 9) { | ||
227 | - subview.removeFromSuperview() | ||
228 | - } | ||
229 | - } | ||
230 | - } | ||
231 | - | ||
232 | - var body: some View { | ||
233 | - VStack { | ||
234 | - headerView(goBack: goBack) | ||
235 | - | ||
236 | - VStack { | ||
237 | - ScrollView(showsIndicators: false) { | ||
238 | - VStack { | ||
239 | - | ||
240 | - if (coupons.count) > 0 { | ||
241 | - couponsContainer(coupons: coupons, parentView: parentView ) | ||
242 | - } | ||
243 | - | ||
244 | - } | ||
245 | - .frame(width:self.uiscreen.width) | ||
246 | - } | ||
247 | - .cornerRadius(30, corners: [.topLeft]) | ||
248 | - .frame(width:self.uiscreen.width) | ||
249 | - .frame(maxHeight: .infinity) | ||
250 | - } | ||
251 | - .frame(width:self.uiscreen.width) | ||
252 | - .frame(maxHeight: .infinity) | ||
253 | - .padding(.top, 5) | ||
254 | - .background( | ||
255 | - Image("coupons_scrollview", bundle: Bundle(for: MyEmptyClass.self)) | ||
256 | - .resizable() | ||
257 | - ) | ||
258 | - | ||
259 | - } | ||
260 | - .edgesIgnoringSafeArea([.bottom]) | ||
261 | - .frame(width:self.uiscreen.width) | ||
262 | - .frame(maxHeight: .infinity) | ||
263 | - } | ||
264 | -} | ||
265 | -#endif | ||
266 | - | ||
267 | -//struct OldCouponsView_Previews: PreviewProvider { | ||
268 | -// static var previews: some View { | ||
269 | -// OldCouponsView() | ||
270 | -// } | ||
271 | -//} |
1 | -// | ||
2 | -// OldCouponsViewInterface.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Manos Chorianopoulos on 28/4/22. | ||
6 | -// | ||
7 | - | ||
8 | - | ||
9 | -import Foundation | ||
10 | -import SwiftUI | ||
11 | - | ||
12 | -@available(iOS 13.0.0, *) | ||
13 | -@objc public class OldCouponsViewInterface : NSObject { | ||
14 | - | ||
15 | - @objc(oldCouponsViewController:) static public func oldCouponsViewController(parentView: UIView?) -> UIViewController { | ||
16 | - return UIHostingController(rootView: OldCouponsView(parentView: parentView!)) | ||
17 | - } | ||
18 | - | ||
19 | -} |
1 | -// | ||
2 | -// StepsView.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Βασιλης Σκουρας on 3/5/22. | ||
6 | -// | ||
7 | - | ||
8 | -#if canImport(SwiftUI) | ||
9 | -import SwiftUI | ||
10 | -import Combine | ||
11 | -import Foundation | ||
12 | -import UIKit | ||
13 | - | ||
14 | -class StepsModel { | ||
15 | - var steps: AnyObject | ||
16 | - | ||
17 | - init() async { //initializer method | ||
18 | - let instanceOfMyApi = MyApi() | ||
19 | - self.steps = await instanceOfMyApi.getSteps { _ in | ||
20 | - } as AnyObject | ||
21 | - print(steps) | ||
22 | - } | ||
23 | - | ||
24 | - var getSteps: AnyObject { | ||
25 | - get { // getter | ||
26 | - return steps | ||
27 | - } | ||
28 | - } | ||
29 | -} | ||
30 | - | ||
31 | -extension StepsView { | ||
32 | - struct headerView: View { | ||
33 | - var goBack: () -> () | ||
34 | - var uiscreen = UIScreen.main.bounds | ||
35 | - | ||
36 | - | ||
37 | - var body: some View { | ||
38 | - HStack(alignment: .center) { | ||
39 | - Button { | ||
40 | - // Button Action | ||
41 | - goBack() | ||
42 | - } label: { | ||
43 | - Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
44 | - .resizable() | ||
45 | - .aspectRatio(contentMode: .fit) | ||
46 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
47 | - } | ||
48 | - Spacer().frame(width: 0) | ||
49 | - Text("Όλα τα κουπόνια μου") | ||
50 | - .fontWeight(.medium) | ||
51 | - .font(.system(size: 16)) | ||
52 | - .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
53 | - .multilineTextAlignment(.center) | ||
54 | - .frame(maxWidth: .infinity) | ||
55 | - .padding(.horizontal) | ||
56 | - .offset(x: -self.uiscreen.height * 0.0125) | ||
57 | - } | ||
58 | - .frame(maxWidth: .infinity) | ||
59 | - .padding(.horizontal) | ||
60 | - .padding(.vertical, 10) | ||
61 | - } | ||
62 | - } | ||
63 | - | ||
64 | -} | ||
65 | - | ||
66 | -@available(iOS 13.0.0, *) | ||
67 | -struct StepsView: View { | ||
68 | - @State private var steps = "Loading" | ||
69 | - var parentView: UIView | ||
70 | - | ||
71 | - func getSteps() async -> AnyObject { | ||
72 | - return await StepsModel().getSteps | ||
73 | - } | ||
74 | - | ||
75 | - var uiscreen = UIScreen.main.bounds | ||
76 | - | ||
77 | - init(parentView: UIView) { //initializer method | ||
78 | - self.parentView = parentView | ||
79 | - } | ||
80 | - | ||
81 | - func goBack(){ | ||
82 | - for subview in parentView.subviews { | ||
83 | - if(subview.tag == 11) { | ||
84 | - subview.removeFromSuperview() | ||
85 | - } | ||
86 | - } | ||
87 | - } | ||
88 | - | ||
89 | - func getSteps() async -> String { | ||
90 | - let instanceOfMyApi = MyApi() | ||
91 | - let stepsData = await instanceOfMyApi.getSteps { _ in | ||
92 | - } as AnyObject | ||
93 | -// DispatchQueue.main.async { | ||
94 | -// steps = "" | ||
95 | -// } | ||
96 | - return "" | ||
97 | - } | ||
98 | - | ||
99 | - var body: some View { | ||
100 | - VStack { | ||
101 | - headerView(goBack: goBack) | ||
102 | - Text(steps) | ||
103 | - .onAppear { | ||
104 | - async { | ||
105 | - let instanceOfMyApi = MyApi() | ||
106 | - let stepsData = try? await instanceOfMyApi.getSteps { _ in | ||
107 | - } as AnyObject | ||
108 | - self.steps = "" | ||
109 | - } | ||
110 | - } | ||
111 | - | ||
112 | - } | ||
113 | - .frame(maxWidth: .infinity, maxHeight: .infinity ) | ||
114 | -// .frame(width:self.uiscreen.width, height:self.uiscreen.height ) | ||
115 | - } | ||
116 | -} | ||
117 | -#endif | ||
118 | - | ||
119 | -//@available(iOS 13.0.0, *) | ||
120 | -//struct Previews_CouponsView_Previews: PreviewProvider { | ||
121 | -// static var uiscreen = UIScreen.main.bounds | ||
122 | -// static var previews: some View { | ||
123 | -// ZStack { | ||
124 | -// Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
125 | -// .resizable() | ||
126 | -// .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
127 | -// .offset(x: -self.uiscreen.width / 2 + self.uiscreen.width * 0.05, y: self.uiscreen.height * 0.07) | ||
128 | -// Text("Όλα τα κουπόνια μου") | ||
129 | -// .frame(width: self.uiscreen.width * 0.8, height: self.uiscreen.height * 0.025, alignment: .center) | ||
130 | -// .offset( y: self.uiscreen.height * 0.07) | ||
131 | -// } | ||
132 | -// | ||
133 | -// } | ||
134 | -//} | ||
135 | - |
1 | -// | ||
2 | -// StepsViewInterface.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Βασιλης Σκουρας on 3/5/22. | ||
6 | -// | ||
7 | - | ||
8 | -import Foundation | ||
9 | -import SwiftUI | ||
10 | - | ||
11 | -@available(iOS 13.0.0, *) | ||
12 | -@objc public class StepsViewInterface : NSObject { | ||
13 | - | ||
14 | - @objc(stepsViewController:) static public func stepsViewController(parentView: UIView?) -> UIViewController { | ||
15 | - return UIHostingController(rootView: StepsView(parentView: parentView!)) | ||
16 | - } | ||
17 | - | ||
18 | -} |
1 | -// | ||
2 | -// WalletView.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Βασιλης Σκουρας on 20/4/22. | ||
6 | -// | ||
7 | - | ||
8 | -import SwiftUI | ||
9 | - | ||
10 | -class ProfileDataModel { | ||
11 | - var data: NSDictionary | ||
12 | - | ||
13 | - init() { //initializer method | ||
14 | - let instanceOfMyApi = MyApi() | ||
15 | - let profile = instanceOfMyApi.getProfile() | ||
16 | - var profileData = NSDictionary() | ||
17 | - if let profileDictionary = profile as? [String : AnyObject] { | ||
18 | - profileData = (profileDictionary["result"] as! NSDictionary) | ||
19 | - } | ||
20 | - self.data = profileData | ||
21 | - } | ||
22 | - | ||
23 | - var getData: NSDictionary { | ||
24 | - get { // getter | ||
25 | - return data | ||
26 | - } | ||
27 | - } | ||
28 | -} | ||
29 | - | ||
30 | -extension WalletView { | ||
31 | - | ||
32 | - static func localizedWithParameter(parameter: String) -> LocalizedStringKey { | ||
33 | - return "\(parameter)" | ||
34 | - } | ||
35 | - | ||
36 | - struct headerView: View { | ||
37 | - var goBack: () -> () | ||
38 | - var uiscreen = UIScreen.main.bounds | ||
39 | - | ||
40 | - | ||
41 | - var body: some View { | ||
42 | - HStack(alignment: .center) { | ||
43 | - Button { | ||
44 | - // Button Action | ||
45 | - goBack() | ||
46 | - } label: { | ||
47 | - Image("ic_back", bundle: Bundle(for: MyEmptyClass.self)) | ||
48 | - .resizable() | ||
49 | - .aspectRatio(contentMode: .fit) | ||
50 | - .frame(width: self.uiscreen.height * 0.025, height: self.uiscreen.height * 0.02) | ||
51 | - } | ||
52 | - Spacer().frame(width: 0) | ||
53 | - Text("My loyalty wallet") | ||
54 | - .fontWeight(.medium) | ||
55 | - .font(.system(size: 16)) | ||
56 | - .foregroundColor(Color(red: 0.20784313725490197, green: 0.3176470588235294, blue: 0.40784313725490196)) | ||
57 | - .multilineTextAlignment(.center) | ||
58 | - .frame(maxWidth: .infinity) | ||
59 | - .padding(.horizontal) | ||
60 | - .offset(x: -self.uiscreen.height * 0.0125) | ||
61 | - } | ||
62 | - .frame(maxWidth: .infinity) | ||
63 | - .padding(.horizontal) | ||
64 | - .padding(.vertical, 10) | ||
65 | - } | ||
66 | - } | ||
67 | - | ||
68 | - struct ImageView: View { | ||
69 | - @ObservedObject var imageLoader:UrlImageModel | ||
70 | - @State var width:CGFloat | ||
71 | - @State var height:CGFloat | ||
72 | - @State var isFill:Bool | ||
73 | - | ||
74 | - var uiscreen = UIScreen.main.bounds | ||
75 | - | ||
76 | - init(withURL url:String , width:CGFloat, height: CGFloat, isFill:Bool) { | ||
77 | - imageLoader = UrlImageModel(urlString:url) | ||
78 | - self.width = width | ||
79 | - self.height = height | ||
80 | - self.isFill = isFill | ||
81 | - } | ||
82 | - | ||
83 | - var body: some View { | ||
84 | - | ||
85 | - Image(uiImage: imageLoader.image ?? UIImage()) | ||
86 | - .resizable() | ||
87 | - .frame(minWidth: self.uiscreen.width * 0.95, idealWidth: self.uiscreen.width * 0.95, maxWidth: self.uiscreen.width * 0.95, minHeight: self.uiscreen.height * 0.2, idealHeight: self.uiscreen.height * 0.2, maxHeight: self.uiscreen.height * 0.2, alignment: .leading) | ||
88 | - .scaledToFill() | ||
89 | - .aspectRatio(contentMode: isFill ? .fill : .fit) | ||
90 | - .cornerRadius(4) | ||
91 | - } | ||
92 | - } | ||
93 | - | ||
94 | - struct myCoupons: View { | ||
95 | - var uiscreen = UIScreen.main.bounds | ||
96 | - | ||
97 | - @State var parentView:UIView | ||
98 | - | ||
99 | - var instanceOfMySwiftApi = swiftApi() | ||
100 | -// var couponsLength = instanceOfMySwiftApi.getCoupons().filter({ $0.status! == 1 }).count | ||
101 | - var body: some View { | ||
102 | - VStack { | ||
103 | - HStack { | ||
104 | - Text("My coupons") | ||
105 | - .font(.system(size: 18)) | ||
106 | - .foregroundColor(Color.white) | ||
107 | - .fontWeight(.medium) | ||
108 | - Spacer() | ||
109 | - Button { | ||
110 | - let instanceOfMyApi = MyApi() | ||
111 | - let oldCouponsView = instanceOfMyApi.openOldCoupons(parentView)! | ||
112 | - oldCouponsView.view.tag = 9 | ||
113 | - oldCouponsView.view.frame = parentView.frame | ||
114 | - parentView.addSubview(oldCouponsView.view) | ||
115 | - } label: { | ||
116 | - Text("Παλαιότερα κουπόνια ->") | ||
117 | - .font(.system(size: 14)) | ||
118 | - .foregroundColor(Color.white) | ||
119 | - .fontWeight(.medium) | ||
120 | - } | ||
121 | - } | ||
122 | - .padding(.leading, self.uiscreen.width * 0.05) | ||
123 | - .padding(.trailing, self.uiscreen.width * 0.05) | ||
124 | - HStack { | ||
125 | - VStack { | ||
126 | - Spacer() | ||
127 | - Text(.init("Έχεις **" + String(instanceOfMySwiftApi.getCoupons().filter({ $0.status! == 1 }).count) + "** ενεργά κουπόνια")) | ||
128 | - .frame(width: self.uiscreen.width * 0.35, alignment: .leading) | ||
129 | - .font(.system(size: 17)) | ||
130 | - Spacer() | ||
131 | - Button { | ||
132 | - let instanceOfMyApi = MyApi() | ||
133 | - let couponsView = instanceOfMyApi.openCoupons(parentView)! | ||
134 | - couponsView.view.tag = 1 | ||
135 | - couponsView.view.frame = parentView.frame | ||
136 | - parentView.addSubview(couponsView.view) | ||
137 | - } label: { | ||
138 | - Text("Δες τα όλα ->") | ||
139 | - .font(.system(size: 12)) | ||
140 | - .fontWeight(.medium) | ||
141 | - .frame(width: self.uiscreen.width * 0.35, alignment: .leading) | ||
142 | - } | ||
143 | - Spacer() | ||
144 | - } | ||
145 | - .padding(.leading, self.uiscreen.width * 0.1) | ||
146 | - Spacer() | ||
147 | - Image("ic_gifts_for_you", bundle: Bundle(for: MyEmptyClass.self)) | ||
148 | - .frame(width: self.uiscreen.height * 0.08, height: self.uiscreen.height * 0.1) | ||
149 | - .padding(.trailing, self.uiscreen.width * 0.08) | ||
150 | - } | ||
151 | - .padding(.top, self.uiscreen.height * 0.01) | ||
152 | - .padding(.bottom, self.uiscreen.height * 0.01) | ||
153 | - .background( | ||
154 | - Image("coupons_container", bundle: Bundle(for: MyEmptyClass.self)) | ||
155 | - .resizable() | ||
156 | - .frame(minWidth: self.uiscreen.width * 0.975, idealWidth: self.uiscreen.width * 0.975, maxWidth: self.uiscreen.width * 0.975) | ||
157 | - .scaledToFill() | ||
158 | - .aspectRatio(contentMode: .fill) | ||
159 | - ) | ||
160 | - .frame(width: self.uiscreen.width * 0.975) | ||
161 | - } | ||
162 | - .padding(.top, self.uiscreen.height * 0.025) | ||
163 | - .padding(.bottom, self.uiscreen.height * 0.025) | ||
164 | - .frame(width: self.uiscreen.width) | ||
165 | - .background(Color(hex: 0xFFFFFF).opacity(0.13)) | ||
166 | - } | ||
167 | - } | ||
168 | - | ||
169 | - struct myRewards: View { | ||
170 | - var uiscreen = UIScreen.main.bounds | ||
171 | - | ||
172 | - @State var parentView:UIView | ||
173 | - | ||
174 | - var instanceOfMySwiftApi = swiftApi() | ||
175 | - | ||
176 | - var body: some View { | ||
177 | - Button { | ||
178 | - let instanceOfMyApi = MyApi() | ||
179 | - let allGiftsViewController = instanceOfMyApi.openAllGifts(parentView)! | ||
180 | - allGiftsViewController.view.tag = 8 | ||
181 | - allGiftsViewController.view.frame = parentView.frame | ||
182 | - parentView.addSubview(allGiftsViewController.view) | ||
183 | - } label: { | ||
184 | - VStack { | ||
185 | - HStack { | ||
186 | - Text("My rewards") | ||
187 | - .font(.system(size: 18)) | ||
188 | - .foregroundColor(Color.white) | ||
189 | - .fontWeight(.medium) | ||
190 | - Spacer() | ||
191 | - Text("Παλαιότερα δώρα ->") | ||
192 | - .font(.system(size: 14)) | ||
193 | - .foregroundColor(Color.white) | ||
194 | - .fontWeight(.medium) | ||
195 | - } | ||
196 | - .padding(.leading, self.uiscreen.width * 0.05) | ||
197 | - .padding(.trailing, self.uiscreen.width * 0.05) | ||
198 | - HStack { | ||
199 | - VStack { | ||
200 | - Spacer() | ||
201 | - Text(.init("Έχεις **" + String(instanceOfMySwiftApi.getCoupons().filter({ $0.status! == 1 }).count) + "** ενεργά δώρα")) | ||
202 | - .frame(width: self.uiscreen.width * 0.35, alignment: .leading) | ||
203 | - .font(.system(size: 17)) | ||
204 | - Spacer() | ||
205 | - Text("Δες τα όλα ->") | ||
206 | - .font(.system(size: 12)) | ||
207 | - .fontWeight(.medium) | ||
208 | - .frame(width: self.uiscreen.width * 0.35, alignment: .leading) | ||
209 | - Spacer() | ||
210 | - } | ||
211 | - .padding(.leading, self.uiscreen.width * 0.1) | ||
212 | - Spacer() | ||
213 | - Image("ic_loyalty_rewards", bundle: Bundle(for: MyEmptyClass.self)) | ||
214 | - .resizable() | ||
215 | - .frame(width: self.uiscreen.height * 0.08, height: self.uiscreen.height * 0.08) | ||
216 | - .padding(.trailing, self.uiscreen.width * 0.08) | ||
217 | - } | ||
218 | - .padding(.top, self.uiscreen.height * 0.02) | ||
219 | - .padding(.bottom, self.uiscreen.height * 0.02) | ||
220 | - .frame(width: self.uiscreen.width * 0.975) | ||
221 | - .background(Color.white) | ||
222 | - } | ||
223 | - .padding(.top, self.uiscreen.height * 0.025) | ||
224 | - .padding(.bottom, self.uiscreen.height * 0.025) | ||
225 | - .frame(width: self.uiscreen.width) | ||
226 | - .background(Color(hex: 0xFFFFFF).opacity(0.13)) | ||
227 | - .padding(.top, self.uiscreen.height * 0.02) | ||
228 | - } | ||
229 | - } | ||
230 | - } | ||
231 | - | ||
232 | - struct linearView: View { | ||
233 | - var data: NSDictionary | ||
234 | - | ||
235 | - var uiscreen = UIScreen.main.bounds | ||
236 | - | ||
237 | - @State var parentView:UIView | ||
238 | - | ||
239 | - var body: some View { | ||
240 | - VStack{ | ||
241 | - HStack { | ||
242 | - VStack(alignment: .leading) { | ||
243 | - Text("Ενεργός κωδικός:") | ||
244 | - .font(.system(size: 17)) | ||
245 | - .fontWeight(.medium) | ||
246 | - .foregroundColor(Color(hex: 0x3C5365)) | ||
247 | - Text("961544809") | ||
248 | - .font(.system(size: 17)) | ||
249 | - .fontWeight(.bold) | ||
250 | - .foregroundColor(Color(hex: 0x3C5365)) | ||
251 | - Text("Λήγει σε 4 ημέρες") | ||
252 | - .font(.system(size: 11)) | ||
253 | - .fontWeight(.medium) | ||
254 | - .foregroundColor(Color(hex: 0x84929E)) | ||
255 | - } | ||
256 | - Spacer() | ||
257 | - Image("deals_for_you", bundle: Bundle(for: MyEmptyClass.self)) | ||
258 | - .resizable() | ||
259 | - .frame(width: self.uiscreen.height * 0.08, height: self.uiscreen.height * 0.08) | ||
260 | - .padding(.top, self.uiscreen.height * 0.01) | ||
261 | - .padding(.bottom, self.uiscreen.height * 0.01) | ||
262 | - } | ||
263 | - .padding(.leading, self.uiscreen.width * 0.04) | ||
264 | - .padding(.trailing, self.uiscreen.width * 0.04) | ||
265 | - .frame(width: self.uiscreen.width * 0.975, alignment: .leading) | ||
266 | - .background(Color.white) | ||
267 | - .cornerRadius(3) | ||
268 | - .padding(.top, self.uiscreen.height * 0.04) | ||
269 | - .padding(.bottom, self.uiscreen.height * 0.04) | ||
270 | - myCoupons(parentView: parentView) | ||
271 | - myRewards(parentView: parentView) | ||
272 | - HStack { | ||
273 | - Text("Ανάλυση") | ||
274 | - .font(.system(size: 14)) | ||
275 | - .fontWeight(.medium) | ||
276 | - .foregroundColor(Color(hex: 0x509E2F)) | ||
277 | - .padding(.top, self.uiscreen.height * 0.015) | ||
278 | - .padding(.bottom, self.uiscreen.height * 0.015) | ||
279 | - } | ||
280 | - .frame(width: self.uiscreen.width * 0.925) | ||
281 | - .background(Color(hex: 0xE6E6E6)) | ||
282 | - .padding(.top, self.uiscreen.height * 0.02) | ||
283 | - .padding(.bottom, self.uiscreen.height * 0.03) | ||
284 | - | ||
285 | - } | ||
286 | - .frame(width: self.uiscreen.width, alignment: .center) | ||
287 | - .background( | ||
288 | - LinearGradient(gradient: Gradient(colors: [Color(hex: 0x1AADCC), Color(hex: 0x83C062)]), startPoint: .top, endPoint: .bottom) | ||
289 | - ) | ||
290 | - .cornerRadius(15, corners: [.topLeft]) | ||
291 | - } | ||
292 | - } | ||
293 | -} | ||
294 | - | ||
295 | -struct WalletView: View { | ||
296 | - var parentView: UIView | ||
297 | - | ||
298 | - var uiscreen = UIScreen.main.bounds | ||
299 | - | ||
300 | - var data: NSDictionary = ProfileDataModel().getData | ||
301 | - | ||
302 | - func goBack(){ | ||
303 | - for subview in parentView.subviews { | ||
304 | - if(subview.tag == 3) { | ||
305 | - subview.removeFromSuperview() | ||
306 | - } | ||
307 | - } | ||
308 | - } | ||
309 | - | ||
310 | - var body: some View { | ||
311 | - VStack { | ||
312 | - headerView(goBack: goBack) | ||
313 | - HStack { | ||
314 | - ZStack { | ||
315 | - if let value = (data["result"] as? String) { | ||
316 | - ImageView(withURL: value, width: self.uiscreen.height * 0.05, height: self.uiscreen.height * 0.05, isFill: true) | ||
317 | - .cornerRadius(self.uiscreen.height * 0.05) | ||
318 | - .padding(.leading, self.uiscreen.width * 0.05) | ||
319 | - | ||
320 | - } else { | ||
321 | - Image("generic_profile") | ||
322 | - .frame(width: self.uiscreen.height * 0.05, height: self.uiscreen.height * 0.05) | ||
323 | - .background(Color.black) | ||
324 | - .cornerRadius(self.uiscreen.height * 0.05) | ||
325 | - .padding(.leading, self.uiscreen.width * 0.05) | ||
326 | - } | ||
327 | - Circle() | ||
328 | - .strokeBorder(Color(hex: 0x22A9B5), lineWidth: 1) | ||
329 | - .frame(width: self.uiscreen.height * 0.05, height: self.uiscreen.height * 0.05) | ||
330 | - .padding(.leading, self.uiscreen.width * 0.05) | ||
331 | - } | ||
332 | - VStack(alignment: .leading) { | ||
333 | - Text(WalletView.localizedWithParameter(parameter: data["firstname"] as! String + " " + (data["lastname"] as! String))) | ||
334 | - .font(.system(size: 13)) | ||
335 | - .padding(.top, self.uiscreen.height * 0.005) | ||
336 | - .frame(width: self.uiscreen.width * 0.7, alignment: .leading) | ||
337 | - Spacer() | ||
338 | - if let value = (data["profile_metadata"] as? NSDictionary) { | ||
339 | - if ((value["answered"] != nil) == true) { | ||
340 | - VStack { | ||
341 | - } | ||
342 | - .background( | ||
343 | - LinearGradient(gradient: Gradient(colors: [Color(hex: 0x1AADCC), Color(hex: 0x83C062)]), startPoint: .trailing, endPoint: .leading) | ||
344 | - ) | ||
345 | - } | ||
346 | - } else { | ||
347 | - HStack { | ||
348 | - Text("+") | ||
349 | - .font(.system(size: 17)) | ||
350 | - .padding(.bottom, 2) | ||
351 | - Text("Ερωτηματολόγιο") | ||
352 | - .font(.system(size: 13)) | ||
353 | - .fontWeight(.medium) | ||
354 | - } | ||
355 | - .padding(.leading, 5) | ||
356 | - .padding(.trailing, 5) | ||
357 | - .overlay( | ||
358 | - RoundedRectangle(cornerRadius: 16).stroke(Color(hex: 0x556778), lineWidth: 1) | ||
359 | - ) | ||
360 | - .padding(.bottom, self.uiscreen.height * 0.005) | ||
361 | - } | ||
362 | - } | ||
363 | - .padding(.leading , self.uiscreen.width * 0.025) | ||
364 | - } | ||
365 | - .frame(width: self.uiscreen.width, height: self.uiscreen.height * 0.06, alignment: .leading) | ||
366 | - .padding(.top, self.uiscreen.height * 0.04) | ||
367 | - .padding(.bottom, self.uiscreen.height * 0.02) | ||
368 | - ScrollView(showsIndicators: false) { | ||
369 | - linearView(data: data, parentView: parentView) | ||
370 | - } | ||
371 | - .frame(maxWidth: .infinity, maxHeight: .infinity) | ||
372 | - .edgesIgnoringSafeArea([.bottom]) | ||
373 | - | ||
374 | - } | ||
375 | - .frame(maxWidth: .infinity, maxHeight: .infinity ) | ||
376 | - // .frame(width:self.uiscreen.width, height:self.uiscreen.height ) | ||
377 | - } | ||
378 | -} | ||
379 | - | ||
380 | -//struct WalletView_Previews: PreviewProvider { | ||
381 | -// static var previews: some View { | ||
382 | -// WalletView() | ||
383 | -// } | ||
384 | -//} |
1 | -// | ||
2 | -// WalletViewInterface.swift | ||
3 | -// WarplySDKFrameworkIOS | ||
4 | -// | ||
5 | -// Created by Βασιλης Σκουρας on 20/4/22. | ||
6 | -// | ||
7 | - | ||
8 | -import Foundation | ||
9 | -import SwiftUI | ||
10 | - | ||
11 | -@available(iOS 13.0.0, *) | ||
12 | -@objc public class WalletViewInterface : NSObject { | ||
13 | - | ||
14 | - @objc(walletViewController:) static public func walletViewController(parentView: UIView?) -> UIViewController { | ||
15 | - return UIHostingController(rootView: WalletView(parentView: parentView!)) | ||
16 | - } | ||
17 | - | ||
18 | -} |
-
Please register or login to post a comment