diff --git a/WOKA.xcodeproj/project.pbxproj b/WOKA.xcodeproj/project.pbxproj index a7a5ffa..b44972b 100644 --- a/WOKA.xcodeproj/project.pbxproj +++ b/WOKA.xcodeproj/project.pbxproj @@ -114,7 +114,7 @@ 52A6DCB22C4E73C800F63C51 /* ShopProductsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52A6DCB12C4E73C800F63C51 /* ShopProductsVC.swift */; }; 52A6DCB42C4E73F100F63C51 /* ShopProductsVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52A6DCB32C4E73F100F63C51 /* ShopProductsVM.swift */; }; 52A6DCB62C4E748100F63C51 /* ShopSubCategoryDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52A6DCB52C4E748100F63C51 /* ShopSubCategoryDM.swift */; }; - 52A6DCB82C4E754800F63C51 /* ShopProductDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52A6DCB72C4E754800F63C51 /* ShopProductDM.swift */; }; + 52A6DCB82C4E754800F63C51 /* ShopProductsListingDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52A6DCB72C4E754800F63C51 /* ShopProductsListingDM.swift */; }; 52A6DCBB2C4EA46400F63C51 /* ShopProductsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 52A6DCBA2C4EA46400F63C51 /* ShopProductsCell.xib */; }; 52A6DCBC2C4EA46400F63C51 /* ShopProductsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52A6DCB92C4EA46400F63C51 /* ShopProductsCell.swift */; }; 52A6DCBF2C4F8E7C00F63C51 /* Cart.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 52A6DCBE2C4F8E7C00F63C51 /* Cart.storyboard */; }; @@ -299,6 +299,15 @@ 9CBE1B432C0F37B300CA6E61 /* DropDown.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBE1B382C0F37B200CA6E61 /* DropDown.swift */; }; 9CBE1B442C0F37B300CA6E61 /* DropDown+Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBE1B392C0F37B200CA6E61 /* DropDown+Appearance.swift */; }; 9CBE1B452C0F37B300CA6E61 /* DropDownCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBE1B3A2C0F37B200CA6E61 /* DropDownCell.swift */; }; + 9CDAEB032C53B97B00890C47 /* VersionTexts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAEB022C53B97B00890C47 /* VersionTexts.swift */; }; + 9CDAEB052C53DB2900890C47 /* ProductDetailsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAEB042C53DB2900890C47 /* ProductDetailsVC.swift */; }; + 9CDAEB072C53E42900890C47 /* ProductDetailsVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAEB062C53E42900890C47 /* ProductDetailsVM.swift */; }; + 9CDAEB0A2C53E9FF00890C47 /* ShopProductImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAEB082C53E9FF00890C47 /* ShopProductImageCell.swift */; }; + 9CDAEB0B2C53E9FF00890C47 /* ShopProductImageCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9CDAEB092C53E9FF00890C47 /* ShopProductImageCell.xib */; }; + 9CDAEB102C53F12800890C47 /* SwiftyInnerShadowLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAEB0C2C53F12800890C47 /* SwiftyInnerShadowLayer.swift */; }; + 9CDAEB112C53F12800890C47 /* SwiftyInnerShadowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAEB0D2C53F12800890C47 /* SwiftyInnerShadowView.swift */; }; + 9CDAEB122C53F12800890C47 /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAEB0E2C53F12800890C47 /* UIView.swift */; }; + 9CDAEB142C54132E00890C47 /* CheckEddDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAEB132C54132E00890C47 /* CheckEddDM.swift */; }; 9CDC343C2BDBBC6B00093089 /* SelectAgeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDC343B2BDBBC6B00093089 /* SelectAgeVC.swift */; }; 9CDCE1452BDB9B9A003FEF11 /* OnBoardMainSound.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 9CDCE1442BDB9B9A003FEF11 /* OnBoardMainSound.m4a */; }; /* End PBXBuildFile section */ @@ -436,7 +445,7 @@ 52A6DCB12C4E73C800F63C51 /* ShopProductsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopProductsVC.swift; sourceTree = ""; }; 52A6DCB32C4E73F100F63C51 /* ShopProductsVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopProductsVM.swift; sourceTree = ""; }; 52A6DCB52C4E748100F63C51 /* ShopSubCategoryDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopSubCategoryDM.swift; sourceTree = ""; }; - 52A6DCB72C4E754800F63C51 /* ShopProductDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopProductDM.swift; sourceTree = ""; }; + 52A6DCB72C4E754800F63C51 /* ShopProductsListingDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopProductsListingDM.swift; sourceTree = ""; }; 52A6DCB92C4EA46400F63C51 /* ShopProductsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopProductsCell.swift; sourceTree = ""; }; 52A6DCBA2C4EA46400F63C51 /* ShopProductsCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ShopProductsCell.xib; sourceTree = ""; }; 52A6DCBE2C4F8E7C00F63C51 /* Cart.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Cart.storyboard; sourceTree = ""; }; @@ -615,6 +624,15 @@ 9CBE1B392C0F37B200CA6E61 /* DropDown+Appearance.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DropDown+Appearance.swift"; sourceTree = ""; }; 9CBE1B3A2C0F37B200CA6E61 /* DropDownCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DropDownCell.swift; sourceTree = ""; }; 9CBE1B3C2C0F37B200CA6E61 /* DropDown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DropDown.h; sourceTree = ""; }; + 9CDAEB022C53B97B00890C47 /* VersionTexts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionTexts.swift; sourceTree = ""; }; + 9CDAEB042C53DB2900890C47 /* ProductDetailsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductDetailsVC.swift; sourceTree = ""; }; + 9CDAEB062C53E42900890C47 /* ProductDetailsVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductDetailsVM.swift; sourceTree = ""; }; + 9CDAEB082C53E9FF00890C47 /* ShopProductImageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopProductImageCell.swift; sourceTree = ""; }; + 9CDAEB092C53E9FF00890C47 /* ShopProductImageCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ShopProductImageCell.xib; sourceTree = ""; }; + 9CDAEB0C2C53F12800890C47 /* SwiftyInnerShadowLayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftyInnerShadowLayer.swift; sourceTree = ""; }; + 9CDAEB0D2C53F12800890C47 /* SwiftyInnerShadowView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftyInnerShadowView.swift; sourceTree = ""; }; + 9CDAEB0E2C53F12800890C47 /* UIView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIView.swift; sourceTree = ""; }; + 9CDAEB132C54132E00890C47 /* CheckEddDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckEddDM.swift; sourceTree = ""; }; 9CDC343B2BDBBC6B00093089 /* SelectAgeVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectAgeVC.swift; sourceTree = ""; }; 9CDCE1412BDB94BA003FEF11 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Main.strings; sourceTree = ""; }; 9CDCE1422BDB94BD003FEF11 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = ""; }; @@ -764,32 +782,32 @@ 523ED25C2BDA2BC700CFED02 /* WOKA */ = { isa = PBXGroup; children = ( - 52A6DCBD2C4F8E7300F63C51 /* Cart */, - 52A6DCAF2C4E621800F63C51 /* BadgedBarButtonItem.swift */, - 52A6DC942C4E385500F63C51 /* Shop */, - 9CB3D0832C37BA470062869D /* Karaoke */, - 526A436D2C36A96A00AE148F /* Games */, - 52BFB52B2C33DA9700BAAE15 /* Audio Books */, - 52DAC6462C21761700E2F85B /* WebSeries */, - 9C834ED92C1C20EC00B29A9C /* WOKA.entitlements */, - 523ED26B2BDA2BC900CFED02 /* Info.plist */, - 9C9BEEC62BEE1BBF004ECC2F /* CollectionViewCenteredFlowLayout.swift */, - 5259541E2BE8E93500191286 /* Config.xcconfig */, 5259542C2BEA392A00191286 /* Alerts */, 523ED2932BDA3D0100CFED02 /* Assets */, + 52BFB52B2C33DA9700BAAE15 /* Audio Books */, 9C56E83E2BDBE4FB00E4CA14 /* Authentication */, + 52A6DCAF2C4E621800F63C51 /* BadgedBarButtonItem.swift */, + 52A6DCBD2C4F8E7300F63C51 /* Cart */, + 9C9BEEC62BEE1BBF004ECC2F /* CollectionViewCenteredFlowLayout.swift */, + 5259541E2BE8E93500191286 /* Config.xcconfig */, 52C8B0552BDA57CE003B51D0 /* Constants K */, 52C6E01F2BE3ADD800E22D59 /* Default Enum */, + 526A436D2C36A96A00AE148F /* Games */, 52C8B0512BDA4B51003B51D0 /* Helpers */, 9CBCB2A62BE5104F007D7934 /* Home */, + 523ED26B2BDA2BC900CFED02 /* Info.plist */, + 9CB3D0832C37BA470062869D /* Karaoke */, 523ED2682BDA2BC900CFED02 /* LaunchScreen.storyboard */, 9C27E15E2BDB6E4F00EC1DA9 /* Localized Module */, 9C27E1612BDB6F0F00EC1DA9 /* Main */, 525954152BE8CAC900191286 /* Network Adapter */, 523ED28E2BDA372C00CFED02 /* OnBoarding Module */, + 52A6DC942C4E385500F63C51 /* Shop */, 522A93142C0DE8770098FE49 /* SideBarNav */, 525327D72BFCC30400F64283 /* TabBar & SideMenu */, 9C535DC82C00C34000DA6DCD /* Theme */, + 52DAC6462C21761700E2F85B /* WebSeries */, + 9C834ED92C1C20EC00B29A9C /* WOKA.entitlements */, ); path = WOKA; sourceTree = ""; @@ -1072,6 +1090,7 @@ 52A6DC9B2C4E38E000F63C51 /* ShopListingVC.swift */, 52A6DCAB2C4E5A1100F63C51 /* ShopCategoryVC.swift */, 52A6DCB12C4E73C800F63C51 /* ShopProductsVC.swift */, + 9CDAEB042C53DB2900890C47 /* ProductDetailsVC.swift */, ); path = Controller; sourceTree = ""; @@ -1082,6 +1101,7 @@ 52A6DCA12C4E3B7500F63C51 /* ShopListingVM.swift */, 52A6DCAD2C4E5A3900F63C51 /* ShopCategoryVM.swift */, 52A6DCB32C4E73F100F63C51 /* ShopProductsVM.swift */, + 9CDAEB062C53E42900890C47 /* ProductDetailsVM.swift */, ); path = ViewModel; sourceTree = ""; @@ -1093,6 +1113,8 @@ 52A6DC9E2C4E3AA600F63C51 /* ShopListingCell.xib */, 52A6DCB92C4EA46400F63C51 /* ShopProductsCell.swift */, 52A6DCBA2C4EA46400F63C51 /* ShopProductsCell.xib */, + 9CDAEB082C53E9FF00890C47 /* ShopProductImageCell.swift */, + 9CDAEB092C53E9FF00890C47 /* ShopProductImageCell.xib */, ); path = View; sourceTree = ""; @@ -1103,7 +1125,7 @@ 52A6DCA32C4E48AF00F63C51 /* ShopSuperCategoryDM.swift */, 52A6DCA92C4E59BD00F63C51 /* ShopCategoryDM.swift */, 52A6DCB52C4E748100F63C51 /* ShopSubCategoryDM.swift */, - 52A6DCB72C4E754800F63C51 /* ShopProductDM.swift */, + 52A6DCB72C4E754800F63C51 /* ShopProductsListingDM.swift */, ); path = Model; sourceTree = ""; @@ -1162,6 +1184,7 @@ 525861D92C4FE71100C33C79 /* CouponListDM.swift */, 525861DF2C4FF16700C33C79 /* CouponApplyDM.swift */, 52BBFCB52C52764B00F7D0D1 /* AddressListDM.swift */, + 9CDAEB132C54132E00890C47 /* CheckEddDM.swift */, ); path = Model; sourceTree = ""; @@ -1235,6 +1258,7 @@ 52C8B0512BDA4B51003B51D0 /* Helpers */ = { isa = PBXGroup; children = ( + 9CDAEB0F2C53F12800890C47 /* Shadows */, 9C834EDA2C1C26C000B29A9C /* HTML */, 527AC6FF2C182D1700434FB7 /* Timer */, 9CBE1B3E2C0F37B200CA6E61 /* DropDown */, @@ -1257,6 +1281,7 @@ 9C7939142C0F23AA00F5D6E6 /* NsNotificationExtension.swift */, 9CB4C5A82C118EF300737C00 /* NavBarColor.swift */, 525861CF2C4F9E3200C33C79 /* SwipeTableViewFont.swift */, + 9CDAEB022C53B97B00890C47 /* VersionTexts.swift */, ); path = Helpers; sourceTree = ""; @@ -1675,6 +1700,16 @@ path = DropDown; sourceTree = ""; }; + 9CDAEB0F2C53F12800890C47 /* Shadows */ = { + isa = PBXGroup; + children = ( + 9CDAEB0C2C53F12800890C47 /* SwiftyInnerShadowLayer.swift */, + 9CDAEB0D2C53F12800890C47 /* SwiftyInnerShadowView.swift */, + 9CDAEB0E2C53F12800890C47 /* UIView.swift */, + ); + path = Shadows; + sourceTree = ""; + }; 9CDCE1432BDB9B64003FEF11 /* Sounds */ = { isa = PBXGroup; children = ( @@ -1822,6 +1857,7 @@ 52A6DCBF2C4F8E7C00F63C51 /* Cart.storyboard in Resources */, 52C1A4E82C05C95D007BAA50 /* Theme.storyboard in Resources */, 526A436F2C36A97400AE148F /* Games.storyboard in Resources */, + 9CDAEB0B2C53E9FF00890C47 /* ShopProductImageCell.xib in Resources */, 522D65652C1ACE9C0021E505 /* UserNotificationCell.xib in Resources */, 9C535DC52C00BF2400DA6DCD /* HomeExploreCell.xib in Resources */, 9CBE1B422C0F37B300CA6E61 /* DropDownCell.xib in Resources */, @@ -1943,6 +1979,7 @@ 5259545C2BEBB80400191286 /* AvatarDM.swift in Sources */, 52C8B06C2BDA6E87003B51D0 /* LocalizedString.swift in Sources */, 52A6DCC72C4F8FD000F63C51 /* CartListVM.swift in Sources */, + 9CDAEB112C53F12800890C47 /* SwiftyInnerShadowView.swift in Sources */, 525953D42BE8B2DF00191286 /* UIApplication.swift in Sources */, 52C8EC802C358E75002DC35C /* AudioBookDetailsVC.swift in Sources */, 52CC38C32BDF812F00B74C3E /* LocalisedElements.swift in Sources */, @@ -1960,12 +1997,15 @@ 52C8EC7A2C353653002DC35C /* ContinueAudioListDM.swift in Sources */, 52B8D4DF2C04A25E00ED65F3 /* StatusBar.swift in Sources */, 5259541D2BE8D94400191286 /* QueueHelper.swift in Sources */, + 9CDAEB142C54132E00890C47 /* CheckEddDM.swift in Sources */, 525954232BE8F00400191286 /* BaseResponseModel.swift in Sources */, 9C3E14472C517E8F00D06C10 /* TopViewEnum.swift in Sources */, 525861E02C4FF16700C33C79 /* CouponApplyDM.swift in Sources */, 52A6DCB42C4E73F100F63C51 /* ShopProductsVM.swift in Sources */, 9C27E1692BDB76F200EC1DA9 /* OnBoardVM.swift in Sources */, + 9CDAEB052C53DB2900890C47 /* ProductDetailsVC.swift in Sources */, 9C7939172C0F23E900F5D6E6 /* LinkTypeEnum.swift in Sources */, + 9CDAEB122C53F12800890C47 /* UIView.swift in Sources */, 523ED2622BDA2BC700CFED02 /* SplashVC.swift in Sources */, 9CDC343C2BDBBC6B00093089 /* SelectAgeVC.swift in Sources */, 52A6DCAC2C4E5A1100F63C51 /* ShopCategoryVC.swift in Sources */, @@ -1999,6 +2039,7 @@ 9C27E1632BDB6F1900EC1DA9 /* AuthFunc.swift in Sources */, 9C0A85412BEE35670093783D /* ResetPassUserNameVM.swift in Sources */, 52C6E0292BE3B52500E22D59 /* SelectAvatarVM.swift in Sources */, + 9CDAEB032C53B97B00890C47 /* VersionTexts.swift in Sources */, 52C8B0592BDA57FA003B51D0 /* StaticFilesString.swift in Sources */, 52C8B05D2BDA5AA7003B51D0 /* ApplyGradrient.swift in Sources */, 52C6E01B2BE383C000E22D59 /* YourIntrestCell.swift in Sources */, @@ -2037,6 +2078,7 @@ 9CBE1B442C0F37B300CA6E61 /* DropDown+Appearance.swift in Sources */, 9C27E16B2BDB774D00EC1DA9 /* CarouselData.swift in Sources */, 525954212BE8EB7900191286 /* APIEndPoints.swift in Sources */, + 9CDAEB072C53E42900890C47 /* ProductDetailsVM.swift in Sources */, 5259545A2BEB67D200191286 /* DateFormatterLib.swift in Sources */, 523ED2602BDA2BC700CFED02 /* SceneDelegate.swift in Sources */, 9C0A853F2BEE35340093783D /* ForgotPassDM.swift in Sources */, @@ -2068,6 +2110,7 @@ 52C6E01E2BE3847F00E22D59 /* BorderView.swift in Sources */, 52FDBA7D2BFF481A009D7AC7 /* ThemeOneVM.swift in Sources */, 9C7939192C0F345000F5D6E6 /* ContactSupportVC.swift in Sources */, + 9CDAEB0A2C53E9FF00890C47 /* ShopProductImageCell.swift in Sources */, 9CBE1B432C0F37B300CA6E61 /* DropDown.swift in Sources */, 52A6DC9C2C4E38E000F63C51 /* ShopListingVC.swift in Sources */, 52C8B0742BDA7626003B51D0 /* OnBoardVC.swift in Sources */, @@ -2126,6 +2169,7 @@ 52E214C72C2AD47F00BC2D29 /* EpisodeDetailsVC.swift in Sources */, 52D774F12BDFC53B001D87DE /* StringSubScript.swift in Sources */, 9CBE1B3F2C0F37B300CA6E61 /* DPDConstants.swift in Sources */, + 9CDAEB102C53F12800890C47 /* SwiftyInnerShadowLayer.swift in Sources */, 52A6DCA42C4E48AF00F63C51 /* ShopSuperCategoryDM.swift in Sources */, 52B8D4DA2C04A25E00ED65F3 /* Preferences.swift in Sources */, 52FB2D8F2BDF898F0009B0C7 /* TextFieldPadding.swift in Sources */, @@ -2150,7 +2194,7 @@ 52C6E0212BE3ADE300E22D59 /* GenderEnum.swift in Sources */, 9CA7C6C02C1093E500D73742 /* ProfileVC.swift in Sources */, 525953D12BE8B2B200191286 /* LLSpinner.swift in Sources */, - 52A6DCB82C4E754800F63C51 /* ShopProductDM.swift in Sources */, + 52A6DCB82C4E754800F63C51 /* ShopProductsListingDM.swift in Sources */, 52C6E0272BE3B46A00E22D59 /* SelectAvatarCell.swift in Sources */, 9C535DB82C0089B400DA6DCD /* ViewButtonAnimation.swift in Sources */, ); @@ -2377,11 +2421,11 @@ INFOPLIST_FILE = WOKA/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = WOKA; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment"; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "Give Permissions for Karaoke"; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard; INFOPLIST_KEY_UIMainStoryboardFile = Main; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; INFOPLIST_KEY_UIUserInterfaceStyle = Light; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -2416,11 +2460,11 @@ INFOPLIST_FILE = WOKA/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = WOKA; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment"; + INFOPLIST_KEY_NSMicrophoneUsageDescription = "Give Permissions for Karaoke"; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard; INFOPLIST_KEY_UIMainStoryboardFile = Main; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; INFOPLIST_KEY_UIUserInterfaceStyle = Light; IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/WOKA/Audio Books/AudioBookDetailsVC.swift b/WOKA/Audio Books/AudioBookDetailsVC.swift index 868fd51..b602f8f 100644 --- a/WOKA/Audio Books/AudioBookDetailsVC.swift +++ b/WOKA/Audio Books/AudioBookDetailsVC.swift @@ -115,6 +115,9 @@ class AudioBookDetailsVC : UIViewController{ if isLiked{ LikeFavCommonFunc.shareInstance.unlikePost(postID: showID, postType: postType, vc: self) { isDone in self.audioData?.isLiked = false + if self.audioData?.likesCount != nil{ + self.audioData?.likesCount! -= 1 + } K.GVar.reloadMyList = true self.delegate?.updateAudioRows(id: showID, type: .liked, isFav: nil, isLike: false) self.initView() @@ -122,6 +125,9 @@ class AudioBookDetailsVC : UIViewController{ }else{ LikeFavCommonFunc.shareInstance.likePost(postID: showID, postType: postType, vc: self) { isDone in self.audioData?.isLiked = true + if self.audioData?.likesCount != nil{ + self.audioData?.likesCount! += 1 + } K.GVar.reloadMyList = true self.delegate?.updateAudioRows(id: showID, type: .liked, isFav: nil, isLike: true) self.initView() @@ -135,6 +141,9 @@ class AudioBookDetailsVC : UIViewController{ if isLiked{ LikeFavCommonFunc.shareInstance.unlikePost(postID: showID, postType: postType, vc: self) { isDone in self.continueAudioData?.isLiked = false + if self.audioData?.likesCount != nil{ + self.audioData?.likesCount! -= 1 + } K.GVar.reloadMyList = true self.delegate?.updateAudioRows(id: showID, type: .liked, isFav: nil, isLike: false) self.initView() @@ -142,6 +151,9 @@ class AudioBookDetailsVC : UIViewController{ }else{ LikeFavCommonFunc.shareInstance.likePost(postID: showID, postType: postType, vc: self) { isDone in self.continueAudioData?.isLiked = true + if self.audioData?.likesCount != nil{ + self.audioData?.likesCount! += 1 + } K.GVar.reloadMyList = true self.delegate?.updateAudioRows(id: showID, type: .liked, isFav: nil, isLike: true) self.initView() diff --git a/WOKA/Audio Books/AudioBookHomeVC.swift b/WOKA/Audio Books/AudioBookHomeVC.swift index ba9d2fd..f578f2e 100644 --- a/WOKA/Audio Books/AudioBookHomeVC.swift +++ b/WOKA/Audio Books/AudioBookHomeVC.swift @@ -109,11 +109,21 @@ extension AudioBookHomeVC : ReloadAudioBooksFavLike{ if let isLike{ if let continueDataIndex = vm.continueWatchingData.firstIndex(where:{$0.id == id}) { vm.continueWatchingData[continueDataIndex].isLiked = isLike + if isLike{ + vm.continueWatchingData[continueDataIndex].likesCount! += 1 + }else{ + vm.continueWatchingData[continueDataIndex].likesCount! -= 1 + } continueWatchingCV.reloadItems(at: [IndexPath(row: continueDataIndex, section: 0)]) } if let audioListDataIndex = vm.audioListData.firstIndex(where:{$0.id == id}) { vm.audioListData[audioListDataIndex].isLiked = isLike + if isLike{ + vm.audioListData[audioListDataIndex].likesCount! += 1 + }else{ + vm.audioListData[audioListDataIndex].likesCount! -= 1 + } audioListingTableView.reloadRows(at: [IndexPath(row: audioListDataIndex, section: 0)],with: .none) K.GVar.reloadMyList = true } diff --git a/WOKA/Cart/Cart.storyboard b/WOKA/Cart/Cart.storyboard index 63e5e64..668c359 100644 --- a/WOKA/Cart/Cart.storyboard +++ b/WOKA/Cart/Cart.storyboard @@ -1,6 +1,6 @@ - + @@ -23,15 +23,15 @@ - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WOKA/Shop/View/ShopProductImageCell.swift b/WOKA/Shop/View/ShopProductImageCell.swift new file mode 100644 index 0000000..2a73d64 --- /dev/null +++ b/WOKA/Shop/View/ShopProductImageCell.swift @@ -0,0 +1,27 @@ +// +// ShopProductImageCell.swift +// WOKA +// +// Created by Bilal on 26/07/2024. +// + +import UIKit + +class ShopProductImageCell: UICollectionViewCell { + + @IBOutlet weak var productImage: UIImageView! + + override func awakeFromNib() { + super.awakeFromNib() + productImage.layer.shadowRadius = 4 + productImage.layer.shadowOpacity = 0.4 + productImage.layer.shadowColor = UIColor.black.cgColor + productImage.layer.shadowOffset = CGSize.zero + productImage.layer.cornerRadius = 10 + productImage.generateOuterShadow() + } + + func setData(image : String){ + productImage.imageURL(image, color: UIColor.appColor(.TextDarkBlue)!) + } +} diff --git a/WOKA/Shop/View/ShopProductImageCell.xib b/WOKA/Shop/View/ShopProductImageCell.xib new file mode 100644 index 0000000..af08508 --- /dev/null +++ b/WOKA/Shop/View/ShopProductImageCell.xib @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WOKA/Shop/View/ShopProductsCell.swift b/WOKA/Shop/View/ShopProductsCell.swift index 64cb70d..6f05dad 100644 --- a/WOKA/Shop/View/ShopProductsCell.swift +++ b/WOKA/Shop/View/ShopProductsCell.swift @@ -15,14 +15,16 @@ class ShopProductsCell: UICollectionViewCell { override func awakeFromNib() { super.awakeFromNib() + productTitle.font = FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 13) + productPrice.font = FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 13) // Initialization code } - func setData(data : ShopProductDM.SabakDegiNaniSery){ + func setData(data : ShopProductsListingDM.ResultData){ self.productTitle.text = data.productName self.productPrice.text = data.productPrice - if let url = data.productThumbnail{ + if let url = data.shopImage?.first{ self.productImage.imageURL(url, color: .black) } } diff --git a/WOKA/Shop/View/ShopProductsCell.xib b/WOKA/Shop/View/ShopProductsCell.xib index c858805..93f300e 100644 --- a/WOKA/Shop/View/ShopProductsCell.xib +++ b/WOKA/Shop/View/ShopProductsCell.xib @@ -6,11 +6,12 @@ + - - Exo2-Bold + + Exo2-Regular @@ -23,57 +24,67 @@ - - - - - + + - - - - - - - - - - - - - - + + - - + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + - - - - - - - - + + + + @@ -85,10 +96,11 @@ sadasdasd - - + + + diff --git a/WOKA/Shop/ViewModel/ProductDetailsVM.swift b/WOKA/Shop/ViewModel/ProductDetailsVM.swift new file mode 100644 index 0000000..dfee86e --- /dev/null +++ b/WOKA/Shop/ViewModel/ProductDetailsVM.swift @@ -0,0 +1,61 @@ +// +// ProductDetailsVM.swift +// WOKA +// +// Created by Bilal on 26/07/2024. +// + +import UIKit + +class ProductDetailsVM{ + + weak var vc : ProductDetailsVC! + + var productDetails : ShopProductsListingDM.ResultData? + var categoryName = "NA" + + func initView(){ + addGradient() + setupCell() +// vc.productImageCV.roundCorner(radius: 10) +// +// vc.productImageCV.addBorderView(width: 0.5, color: #colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)) + + + //set details + if let productDetails{ + vc.productTitle.text = productDetails.productName + vc.categoryName.text = categoryName + vc.skuID.text = productDetails.skuID + vc.productPrice.text = productDetails.productPrice + + if let desc = productDetails.shopMasterDetail?.descriptionEnglish, let htmlText = desc.replacingOccurrences(of: "
", with: "").htmlToAttributedString{ + let sizeText = NSMutableAttributedString(attributedString: htmlText) + sizeText.setFontFace(font: FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 16),color: UIColor.appColor(.TextDarkBlue)!) + vc.productDescription.attributedText = sizeText + } + + vc.pageControl.numberOfPages = productDetails.shopImage?.count ?? 1 + vc.pageControl.currentPage = 0 + if let addedToCart = productDetails.addedToCart, addedToCart{ + vc.addToCartBtn.setTitle("View Cart", for: .normal) + }else{ + vc.addToCartBtn.setTitle("Add to Cart", for: .normal) + } + } + } + + func setupCell(){ + vc.productImageCV.register(UINib(nibName: K.CellIdentifier.Shop.shopProductImageCell, bundle: nil), forCellWithReuseIdentifier: K.CellIdentifier.Shop.shopProductImageCell) + vc.productImageCV.delegate = vc.self + vc.productImageCV.dataSource = vc.self + } + + func addGradient(){ + let color1 = #colorLiteral(red: 0.6745098039, green: 0.6235294118, blue: 0.1725490196, alpha: 1) + let color2 = #colorLiteral(red: 0.5450980392, green: 0.6745098039, blue: 0.1725490196, alpha: 1) + self.vc.title = "SHOP".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue) + self.vc.view.applyGradient(colors: [color2, color1], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0)) + } + +} diff --git a/WOKA/Shop/ViewModel/ShopProductsVM.swift b/WOKA/Shop/ViewModel/ShopProductsVM.swift index d0c3c66..97afde3 100644 --- a/WOKA/Shop/ViewModel/ShopProductsVM.swift +++ b/WOKA/Shop/ViewModel/ShopProductsVM.swift @@ -12,12 +12,15 @@ class ShopProductsVM{ weak var vc : ShopProductsVC! var subCategoryData = [ShopSubCategoryDM.ResultData]() - var shopProductsData = [ShopProductDM.SabakDegiNaniSery]() - + var shopProductsData = [ShopProductsListingDM.ResultData]() + var categoryID : Int? var selectedSubCategory = 0 var pageTitle : String? + var pageNo = 0 + var stopFetch = false + func initView(){ getCategory() addGradient() @@ -75,6 +78,7 @@ class ShopProductsVM{ self.selectedSubCategory = data.first?.id ?? 0 self.vc.subCategoryCV.reloadData() if let subCatID = data.first?.id{ + Utilities.startProgressHUD() self.getShopProducts(subCategoryID: subCatID) } default: @@ -98,12 +102,14 @@ class ShopProductsVM{ func getShopProducts(subCategoryID : Int?){ guard let categoryID else{return} - Utilities.startProgressHUD() let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()] let params : Parameters = ["category_id" : categoryID, - "sub_category_id" : subCategoryID ?? ""] + "sub_category_id" : subCategoryID ?? "", + "api_version" : "v2", + "start" : pageNo, + "limit" : 12] - NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Shop.shop_product_listing, method: .post,parameters: params,headers: headers) { [weak self](result : Result, NetworkManager.APIError>) in + NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Shop.shop_product_listing_v2, method: .post,parameters: params,headers: headers) { [weak self](result : Result, NetworkManager.APIError>) in switch result{ case .success(let data): guard let self else{ @@ -116,6 +122,8 @@ class ShopProductsVM{ Error */ Utilities.dismissProgressHUD() + vc.spinnerView.stopAnimating() + if stopFetch == true { return} Utilities.alertWithBtnCompletion(title: "Error", msgBody: data.message ?? K.ConstantString.unRecognised, okBtnStr: "Retry?", vc: self.vc) { isDone in if isDone{ self.getShopProducts(subCategoryID: subCategoryID) @@ -123,20 +131,26 @@ class ShopProductsVM{ } case 1: Utilities.dismissProgressHUD() - guard let data = data.data?.result?.sabakDegiNaniSeries else{return} - self.shopProductsData = data + vc.spinnerView.stopAnimating() + guard let count = data.data?.totalRecords ,let data = data.data?.result else{return} + self.shopProductsData.append(contentsOf: data) self.vc.productCV.reloadData() - print(data) + if self.shopProductsData.count == count{ + stopFetch = true + } default: Utilities.dismissProgressHUD() + vc.spinnerView.stopAnimating() break } case .failure(let error): guard let self else{ Utilities.dismissProgressHUD() + self?.vc.spinnerView.stopAnimating() return } Utilities.dismissProgressHUD() + vc.spinnerView.stopAnimating() Utilities.alertWithBtnCompletion(title: "Error", msgBody: error.localizedDescription, okBtnStr: "Retry?", vc: self.vc) { isDone in // if isDone{ // self.getCategory() @@ -146,3 +160,29 @@ class ShopProductsVM{ } } } + + +class FooterSpinnerView: UICollectionReusableView { + override init(frame: CGRect) { + super.init(frame: frame) + setupSpinner() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupSpinner() { + let spinner = UIActivityIndicatorView(style: .medium) + spinner.translatesAutoresizingMaskIntoConstraints = false + spinner.startAnimating() + spinner.hidesWhenStopped = true + spinner.color = UIColor.appColor(.TextDarkBlue)! + addSubview(spinner) + + NSLayoutConstraint.activate([ + spinner.centerXAnchor.constraint(equalTo: centerXAnchor), + spinner.centerYAnchor.constraint(equalTo: centerYAnchor) + ]) + } +} diff --git a/WOKA/SideBarNav/SideBarNav.storyboard b/WOKA/SideBarNav/SideBarNav.storyboard index ebd1c3c..4345400 100644 --- a/WOKA/SideBarNav/SideBarNav.storyboard +++ b/WOKA/SideBarNav/SideBarNav.storyboard @@ -629,7 +629,7 @@ -