From 0e3b43adba5041ef910aaabf27b28bd0f19a8df8 Mon Sep 17 00:00:00 2001 From: BilalKhanWDI Date: Tue, 30 Jul 2024 20:06:57 +0530 Subject: [PATCH] - Worked on cart icon initialization - Fixed cart payment - Handled cc avenue payment web view - Added analytics and crashlytics. - Completed add address - Completed payment , added callback handler --- WOKA.xcodeproj/project.pbxproj | 4 + WOKA/Address/Controller/AddressListVC.swift | 4 +- WOKA/Address/ViewModel/AddNewAddressVM.swift | 8 + WOKA/Address/ViewModel/AddressListVM.swift | 10 +- .../KaraokePause.imageset/Contents.json | 6 +- .../SideMenu/CartIcon.imageset/Contents.json | 3 +- .../CartIcon.imageset/Group 183@2x.png | Bin 16306 -> 0 bytes .../CartIcon.imageset/Group 183@3x.png | Bin 28422 -> 0 bytes .../Menu/SideMenu/CartIcon.imageset/web.png | Bin 0 -> 6763 bytes WOKA/BadgedBarButtonItem.swift | 50 +++--- WOKA/Cart/CartDataCache.swift | 46 +++++- .../Controller/CartPaymentOptionsVC.swift | 1 + .../Cart/ViewModel/CartPaymentOptionsVM.swift | 3 + WOKA/Network Adapter/APIEndPoints.swift | 1 + WOKA/Shop/Controller/ProductDetailsVC.swift | 8 + WOKA/Shop/Controller/ShopListingVC.swift | 155 ++++++++++++++---- WOKA/Shop/Controller/ShopProductsVC.swift | 29 +++- WOKA/Shop/Model/ShopProductsListingDM.swift | 6 +- WOKA/Shop/Model/ShopSubCategoryDM.swift | 3 +- WOKA/Shop/Shop.storyboard | 6 +- WOKA/Shop/View/ShopProductsCell.swift | 7 +- WOKA/Shop/View/ShopProductsCell.xib | 6 +- WOKA/Shop/ViewModel/ProductDetailsVM.swift | 77 +++++++-- WOKA/Shop/ViewModel/ShopListingVM.swift | 141 ++++++++++++++++ WOKA/Shop/ViewModel/ShopProductsVM.swift | 10 +- WOKA/SideBarNav/Controller/MyOrdersVC.swift | 22 +-- WOKA/SideBarNav/ViewModel/MyOrdersVM.swift | 46 ++++++ .../ViewModel/SideMenuVM.swift | 5 +- WOKA/Theme/ViewModel/ThemeOneVM.swift | 4 +- WOKA/Theme/ViewModel/ThemeTwoVM.swift | 4 +- 30 files changed, 543 insertions(+), 122 deletions(-) delete mode 100644 WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/Group 183@2x.png delete mode 100644 WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/Group 183@3x.png create mode 100644 WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/web.png create mode 100644 WOKA/SideBarNav/ViewModel/MyOrdersVM.swift diff --git a/WOKA.xcodeproj/project.pbxproj b/WOKA.xcodeproj/project.pbxproj index 92cec0d..4c48929 100644 --- a/WOKA.xcodeproj/project.pbxproj +++ b/WOKA.xcodeproj/project.pbxproj @@ -93,6 +93,7 @@ 527A2BD02C57A2AE0080DF9B /* PaymentWebViewVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527A2BCF2C57A2AE0080DF9B /* PaymentWebViewVC.swift */; }; 527A2BD22C57B40A0080DF9B /* CartDataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527A2BD12C57B40A0080DF9B /* CartDataCache.swift */; }; 527A2BD52C57D0C20080DF9B /* Address.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 527A2BD42C57D0C20080DF9B /* Address.storyboard */; }; + 527A2BDB2C58F7EB0080DF9B /* MyOrdersVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527A2BDA2C58F7EB0080DF9B /* MyOrdersVM.swift */; }; 527AC6F72C171C8F00434FB7 /* BlogsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527AC6F52C171C8F00434FB7 /* BlogsCell.swift */; }; 527AC6F82C171C8F00434FB7 /* BlogsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 527AC6F62C171C8F00434FB7 /* BlogsCell.xib */; }; 527AC6FA2C17387300434FB7 /* SongBlogDM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527AC6F92C17387300434FB7 /* SongBlogDM.swift */; }; @@ -432,6 +433,7 @@ 527A2BCF2C57A2AE0080DF9B /* PaymentWebViewVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentWebViewVC.swift; sourceTree = ""; }; 527A2BD12C57B40A0080DF9B /* CartDataCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CartDataCache.swift; sourceTree = ""; }; 527A2BD42C57D0C20080DF9B /* Address.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Address.storyboard; sourceTree = ""; }; + 527A2BDA2C58F7EB0080DF9B /* MyOrdersVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyOrdersVM.swift; sourceTree = ""; }; 527AC6F52C171C8F00434FB7 /* BlogsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlogsCell.swift; sourceTree = ""; }; 527AC6F62C171C8F00434FB7 /* BlogsCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BlogsCell.xib; sourceTree = ""; }; 527AC6F92C17387300434FB7 /* SongBlogDM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SongBlogDM.swift; sourceTree = ""; }; @@ -1654,6 +1656,7 @@ 9C7939122C0EFCAE00F5D6E6 /* FaqVM.swift */, 9C1C69FB2C106C240035B2C7 /* ContactSupportVM.swift */, 9CA7C6C12C1095B600D73742 /* ProfileVM.swift */, + 527A2BDA2C58F7EB0080DF9B /* MyOrdersVM.swift */, ); path = ViewModel; sourceTree = ""; @@ -2168,6 +2171,7 @@ 52A6DCAE2C4E5A3900F63C51 /* ShopCategoryVM.swift in Sources */, 52D6A2542C22B93F00145908 /* CategoryListingDM.swift in Sources */, 9C27E1672BDB706700EC1DA9 /* StoryBoard.swift in Sources */, + 527A2BDB2C58F7EB0080DF9B /* MyOrdersVM.swift in Sources */, 52C8B0692BDA6E1E003B51D0 /* LocalizedEnum.swift in Sources */, 525954122BE8C84900191286 /* Toast.swift in Sources */, 525954172BE8CAD300191286 /* NetworkManager.swift in Sources */, diff --git a/WOKA/Address/Controller/AddressListVC.swift b/WOKA/Address/Controller/AddressListVC.swift index 2a41453..4f4dba2 100644 --- a/WOKA/Address/Controller/AddressListVC.swift +++ b/WOKA/Address/Controller/AddressListVC.swift @@ -56,7 +56,9 @@ class AddressListVC: UIViewController { @IBAction func btnTapped(_ sender: LocalisedElementsButton) { switch sender{ case useSelectedAddBtn: - vm.createOrder() + if let addressID = CartDataCache.addressData.filter({$0.isDefault == true}).first?.id{ + vm.createOrder(addressID: addressID, couponCode: vm.couponCodeApplied) + } case addNewAddressBtn: let sb = UIStoryboard(name: K.StoryBoard.address, bundle: nil) let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Address.verifyAddressPincodeVC) as! VerifyAddressPincodeVC diff --git a/WOKA/Address/ViewModel/AddNewAddressVM.swift b/WOKA/Address/ViewModel/AddNewAddressVM.swift index 4c452d2..7dd4cb6 100644 --- a/WOKA/Address/ViewModel/AddNewAddressVM.swift +++ b/WOKA/Address/ViewModel/AddNewAddressVM.swift @@ -72,7 +72,15 @@ class AddNewAddressVM{ guard let data = data.data else{return} CartDataCache.addressData.append(data) + //set the newly added address as default + if let updateDefaultIndex = CartDataCache.addressData.lastIndex(where: {$0.id == data.id}){ + for index in CartDataCache.addressData.indices { + CartDataCache.addressData[index].isDefault = false + } + CartDataCache.addressData[updateDefaultIndex].isDefault = true + } + guard let navigationController = self.vc.navigationController else { print("Not in a navigation controller") return diff --git a/WOKA/Address/ViewModel/AddressListVM.swift b/WOKA/Address/ViewModel/AddressListVM.swift index cce7338..5e1c07c 100644 --- a/WOKA/Address/ViewModel/AddressListVM.swift +++ b/WOKA/Address/ViewModel/AddressListVM.swift @@ -11,7 +11,8 @@ import Alamofire class AddressListVM{ weak var vc : AddressListVC! - + var couponCodeApplied = String() + func initView(){ vc.innerView.addBorderView(width: 1, color: .darkGray) self.vc.title = "ADDRESS DETAILS".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue) @@ -133,7 +134,7 @@ class AddressListVM{ } } - func createOrder(){ + func createOrder(addressID : Int,couponCode : String?){ var productIDs = [Int]() for i in CartDataCache.cartListData{ @@ -144,7 +145,8 @@ class AddressListVM{ Utilities.startProgressHUD() let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()] let params : Parameters = ["product_ids" : productIDs, - "address_id" : "56"] + "address_id" : addressID, + "coupon_code" : couponCode ?? ""] struct URLResp : Codable { var url : String? } @@ -182,7 +184,7 @@ class AddressListVM{ Utilities.dismissProgressHUD() Utilities.alertWithBtnCancelCompletion(title: "Error", msgBody: error.localizedDescription, okBtnStr: "Retry?", vc: self.vc) { isDone in if isDone{ - self.createOrder() + self.createOrder(addressID: addressID, couponCode: couponCode) } } } diff --git a/WOKA/Assets/Assets.xcassets/Karaoke/KaraokePause.imageset/Contents.json b/WOKA/Assets/Assets.xcassets/Karaoke/KaraokePause.imageset/Contents.json index 2bd4cc6..15b72ef 100644 --- a/WOKA/Assets/Assets.xcassets/Karaoke/KaraokePause.imageset/Contents.json +++ b/WOKA/Assets/Assets.xcassets/Karaoke/KaraokePause.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "pause.png", + "filename" : "Pause.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "pause@2x.png", + "filename" : "Pause@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "pause@3x.png", + "filename" : "Pause@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/Contents.json b/WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/Contents.json index 0a3dc32..abc3422 100644 --- a/WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/Contents.json +++ b/WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/Contents.json @@ -5,12 +5,11 @@ "scale" : "1x" }, { - "filename" : "Group 183@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "Group 183@3x.png", + "filename" : "web.png", "idiom" : "universal", "scale" : "3x" } diff --git a/WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/Group 183@2x.png b/WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/Group 183@2x.png deleted file mode 100644 index 51627c50f7877ee1fa196ceba932243696951bbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16306 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 diff --git a/WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/Group 183@3x.png b/WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/Group 183@3x.png deleted file mode 100644 index 30fda85870af388e28a3a5a4e3d83817c54f6aa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28422 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 diff --git a/WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/web.png b/WOKA/Assets/Assets.xcassets/Menu/SideMenu/CartIcon.imageset/web.png new file mode 100644 index 0000000000000000000000000000000000000000..ea0e6659fd8af83ab4235d49ea5deba6e271a821 GIT binary patch literal 6763 zcmZ`;1z1#D*B*MLK~g|k5Ewd!mhMJ!=@K{|(4kW>Ky z`G%g=R(W0s#K}0Kivk06-!K0HF5H zZ`YGT3$h(d)Eu?609t$e zX8|2O;EuPdsUHA9+;=-Lvbc%q&^B;g3{9XWTAC7eULL$Q_FlFQyf6>%TNFSFCV?hB z9H2H#Fb{W6KM9yL%O4sNX!@4T$HMf73e-)S#Y9V&Nx{q4fk~8?pO>FS2A_$ENy^vW zQ9@r)`7b#7PMXCT3iX!YuP}6t{+-tUat5>U{uA^^G5(BE>NWxiT^E>xyQ!j!hl8gdIv*JUL9o;x zvHc&(f3o`<(&WD)|0ek-Qo+mJ%h$l$#?C=T;4f!?WBpD0HdzT1eFr};cmLaJ%ZQ6g z@%KLMuyAK>rIe*$!TT^!IW{f7s1Kz}&+JMVA$=n6|H_&V4?y?hP5yxe8}xfi7P z{;Ba7Sc>nqQ~uUDf41cxTy$T`;G>cM>TwzTdIj1%0DualrYL6!!}wMZRP%T``~!7H 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 Void)? - + private var badgeValue: Int? { didSet { - if let value = badgeValue, - value > 0 { - + if let value = badgeValue, value > 0 { // reducing font size if the value has two digits if "\(value)".count > 1 { lblBadge.font = UIFont.systemFont(ofSize: twoDigitsFontSize) @@ -109,10 +112,11 @@ public class BadgedButtonItem: UIBarButtonItem { } else { lblBadge.isHidden = true } + // Post notification about the change + NotificationCenter.default.post(name: .badgeValueDidChange, object: nil, userInfo: ["badgeValue": badgeValue ?? 0]) } } - - + private let filterBtn = UIButton() private let lblBadge = UILabel() private var isAnimated: Bool? = false @@ -121,31 +125,30 @@ public class BadgedButtonItem: UIBarButtonItem { self.lblBadge.layer.cornerRadius = badgeRadius } } - + private var oneDigitFontSize: CGFloat { return badgeRadius + 1 } private var twoDigitsFontSize: CGFloat { return badgeRadius } - + override init() { super.init() setup() } - + init(with image: UIImage?) { super.init() setup(image: image) } - + required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) setup() } - + private func setup(image: UIImage? = nil) { - self.filterBtn.frame = CGRect(x: 0, y: 0, width: 55, height: 55) self.filterBtn.adjustsImageWhenHighlighted = false let scaledImage = UIImage.imageWithImage(image, scaledToSize: CGSize(width: 45, height: 50)) @@ -168,13 +171,13 @@ public class BadgedButtonItem: UIBarButtonItem { self.filterBtn.addSubview(lblBadge) self.customView = filterBtn } - + @objc private func buttonPressed() { if let action = tapAction { action() } } - + private func animateBadge(_ animate: Bool?) { guard animate == true else { return } lblBadge.transform = CGAffineTransform(scaleX: 1.2, y: 1.2) @@ -196,7 +199,6 @@ public class BadgedButtonItem: UIBarButtonItem { } } } - } /// Takes an image and returns a new one identical but resized. diff --git a/WOKA/Cart/CartDataCache.swift b/WOKA/Cart/CartDataCache.swift index 220fc62..2fb45e8 100644 --- a/WOKA/Cart/CartDataCache.swift +++ b/WOKA/Cart/CartDataCache.swift @@ -6,10 +6,54 @@ // import Foundation +import Alamofire class CartDataCache{ static var cartListData = [CartListingDM.ResultData]() + static var isFetched = false + static var cartCount = 0 { + didSet{ + if cartCount == 0{ + cartBadgeLabel.text = "0" + cartBadgeLabel.isHidden = true + }else{ + cartBadgeLabel.text = cartCount.toString() + cartBadgeLabel.isHidden = false + } + } + } static var addressData = [AddressListDM]() - + static let cartBadgeLabel = UILabel() + static let shareInstance = CartDataCache() + + func getCartList(vc : UIViewController){ + let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()] + + NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Cart.cart_listing, method: .get,headers: headers, queue : QueueHelper.background) { (result : Result, NetworkManager.APIError>) in + switch result{ + case .success(let data): + switch data.success{ + case 0: + /* + Error + */ + Utilities.dismissProgressHUD() + case 1: + Utilities.dismissProgressHUD() + + guard let data = data.data?.result else{return} + CartDataCache.cartListData = data + CartDataCache.cartCount = data.count + CartDataCache.isFetched = true + default: + Utilities.dismissProgressHUD() + break + } + case .failure(let error): + Utilities.dismissProgressHUD() + Utilities.alert(title: "Error", message: error.localizedDescription, viewController: vc) + } + } + } } diff --git a/WOKA/Cart/Controller/CartPaymentOptionsVC.swift b/WOKA/Cart/Controller/CartPaymentOptionsVC.swift index 0712c98..8f62720 100644 --- a/WOKA/Cart/Controller/CartPaymentOptionsVC.swift +++ b/WOKA/Cart/Controller/CartPaymentOptionsVC.swift @@ -72,6 +72,7 @@ class CartPaymentOptionsVC: UIViewController { @IBAction func confirmBtnTapped(_ sender: LocalisedElementsButton) { let sb = UIStoryboard(name: K.StoryBoard.address, bundle: nil) let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Address.addressListVC) as! AddressListVC + vcPush.vm.couponCodeApplied = vm.couponCodeApplied self.navigationController?.pushViewController(vcPush, animated: true) // vm.createOrder() } diff --git a/WOKA/Cart/ViewModel/CartPaymentOptionsVM.swift b/WOKA/Cart/ViewModel/CartPaymentOptionsVM.swift index 2ee661a..05d77ff 100644 --- a/WOKA/Cart/ViewModel/CartPaymentOptionsVM.swift +++ b/WOKA/Cart/ViewModel/CartPaymentOptionsVM.swift @@ -17,6 +17,8 @@ class CartPaymentOptionsVM{ var cartTotalPrice = 0.0 var couponCodeSelected = "" + var couponCodeApplied = String() + func initView(){ vc.couponCodeTF.roundCorner() addGradient() @@ -128,6 +130,7 @@ class CartPaymentOptionsVM{ self.vc.discountPrice.text = data.discountValue self.vc.totalCartPrice.text = data.cartDiscountedAmount self.vc.couponAplliedStack.isHidden = false + self.couponCodeApplied = code default: Utilities.dismissProgressHUD() break diff --git a/WOKA/Network Adapter/APIEndPoints.swift b/WOKA/Network Adapter/APIEndPoints.swift index 899a6a0..886ac33 100644 --- a/WOKA/Network Adapter/APIEndPoints.swift +++ b/WOKA/Network Adapter/APIEndPoints.swift @@ -122,6 +122,7 @@ struct APIEndPoints { static let coupon_listing = makeURL(path: "coupon_listing") static let applied_coupon_discount = makeURL(path: "applied_coupon_discount") static let create_new_order = makeURL(path: "create_new_order") + static let add_cart = makeURL(path: "add_cart") } struct Address{ diff --git a/WOKA/Shop/Controller/ProductDetailsVC.swift b/WOKA/Shop/Controller/ProductDetailsVC.swift index 1389fe4..61e392e 100644 --- a/WOKA/Shop/Controller/ProductDetailsVC.swift +++ b/WOKA/Shop/Controller/ProductDetailsVC.swift @@ -55,6 +55,14 @@ class ProductDetailsVC: UIViewController { } @IBAction func addToCartBtnTapped(_ sender: LocalisedElementsButton) { + if sender.titleLabel?.text == "Add to Cart"{ + if let shopMasterID = vm.productDetails?.id{ + vm.addToCart(shopMasterID: shopMasterID) + } + }else{ + print("View") + } + } } diff --git a/WOKA/Shop/Controller/ShopListingVC.swift b/WOKA/Shop/Controller/ShopListingVC.swift index 8fb637f..a3edd1e 100644 --- a/WOKA/Shop/Controller/ShopListingVC.swift +++ b/WOKA/Shop/Controller/ShopListingVC.swift @@ -20,41 +20,67 @@ class ShopListingVC: UIViewController { navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.navigationBar.shadowImage = UIImage() - // Create the button - let backbutton = UIButton(type: .custom) - backbutton.setImage(UIImage(named: "CartIcon"), for: .normal) // Image can be downloaded from the provided link - backbutton.setTitleColor(.black, for: .normal) // You can change the TitleColor - backbutton.addTarget(self, action: #selector(vm.cartBtnTapped), for: .touchUpInside) - // Set button height and width - let buttonHeight: CGFloat = 50 - let buttonWidth: CGFloat = 50 - backbutton.translatesAutoresizingMaskIntoConstraints = false - backbutton.widthAnchor.constraint(equalToConstant: buttonWidth).isActive = true - backbutton.heightAnchor.constraint(equalToConstant: buttonHeight).isActive = true - // Create a container view for the button - let containerView = UIView(frame: CGRect(x: 0, y: 0, width: buttonWidth, height: buttonHeight)) - containerView.addSubview(backbutton) + +// // Create the button +// let backbutton = UIButton(type: .custom) +// backbutton.setImage(UIImage(named: "CartIcon"), for: .normal) // Image can be downloaded from the provided link +// backbutton.setTitleColor(.black, for: .normal) // You can change the TitleColor +// backbutton.addTarget(self, action: #selector(vm.cartBtnTapped), for: .touchUpInside) +// +// // Set button height and width +// let buttonHeight: CGFloat = 50 +// let buttonWidth: CGFloat = 50 +// backbutton.translatesAutoresizingMaskIntoConstraints = false +// backbutton.widthAnchor.constraint(equalToConstant: buttonWidth).isActive = true +// backbutton.heightAnchor.constraint(equalToConstant: buttonHeight).isActive = true +// +// // Create the badge label +// CartDataCache.cartBadgeLabel.text = CartDataCache.cartCount.toString() // Set your badge number here +// CartDataCache.cartBadgeLabel.textColor = .white +// CartDataCache.cartBadgeLabel.backgroundColor = .red +// CartDataCache.cartBadgeLabel.font = UIFont.systemFont(ofSize: 12) +// CartDataCache.cartBadgeLabel.textAlignment = .center +// CartDataCache.cartBadgeLabel.layer.cornerRadius = 10 +// CartDataCache.cartBadgeLabel.clipsToBounds = true +// +// // Set badge label constraints +// CartDataCache.cartBadgeLabel.translatesAutoresizingMaskIntoConstraints = false +// CartDataCache.cartBadgeLabel.widthAnchor.constraint(equalToConstant: 20).isActive = true +// CartDataCache.cartBadgeLabel.heightAnchor.constraint(equalToConstant: 20).isActive = true +// +// // Create a container view for the button +// let containerView = UIView(frame: CGRect(x: 0, y: 0, width: buttonWidth, height: buttonHeight)) +// containerView.backgroundColor = .blue +// containerView.addSubview(backbutton) +// +// containerView.addSubview(CartDataCache.cartBadgeLabel) +// +// // Set constraints for the button inside the container view +// NSLayoutConstraint.activate([ +// backbutton.centerYAnchor.constraint(equalTo: containerView.centerYAnchor), +// backbutton.centerXAnchor.constraint(equalTo: containerView.centerXAnchor), +// +// // Position the badge at the top-right corner of the button +// CartDataCache.cartBadgeLabel.topAnchor.constraint(equalTo: backbutton.topAnchor, constant: -3), +// CartDataCache.cartBadgeLabel.rightAnchor.constraint(equalTo: backbutton.rightAnchor, constant: -2) +// ]) +// +// // Create a UIBarButtonItem with the custom view +// let customBarButton = UIBarButtonItem(customView: containerView) +// +// // Create a flexible space item to push the custom view to the left +// let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) +// flexibleSpace.width = 10 +// +// // Create a negative spacer to fine-tune the position +// let negativeSpacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) +// negativeSpacer.width = 10 // Adjust this value to move the button to the left +// +// // Add the custom bar button and the spacer to the navigation bar +// self.navigationItem.rightBarButtonItems = [flexibleSpace, negativeSpacer, customBarButton] - // Set constraints for the button inside the container view - NSLayoutConstraint.activate([ - backbutton.centerYAnchor.constraint(equalTo: containerView.centerYAnchor), - backbutton.centerXAnchor.constraint(equalTo: containerView.centerXAnchor) - ]) - - // Create a UIBarButtonItem with the custom view - let customBarButton = UIBarButtonItem(customView: containerView) - - // Create a flexible space item to push the custom view to the left - let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) - flexibleSpace.width = 10 - // Create a negative spacer to fine-tune the position - let negativeSpacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) - negativeSpacer.width = 10 // Adjust this value to move the button to the left - - // Add the custom bar button and the spacer to the navigation bar - self.navigationItem.rightBarButtonItems = [flexibleSpace,negativeSpacer, customBarButton] } override func viewWillAppear(_ animated: Bool) { @@ -105,3 +131,68 @@ extension ShopListingVC : TableViewSRC{ self.navigationController?.pushViewController(vcPush, animated: true) } } + + + +extension UIViewController { + + func createCartButton(imageName: String, + badgeNumber: Int, + buttonSize: CGSize = CGSize(width: 50, height: 50), + badgeColor: UIColor = .red, + badgeTextColor: UIColor = .white, + buttonColor: UIColor = .blue, + target: Any, + action: Selector) -> UIBarButtonItem { + + // Create the button + let button = UIButton(type: .custom) + button.setImage(UIImage(named: imageName), for: .normal) + button.setTitleColor(.black, for: .normal) + button.addTarget(target, action: action, for: .touchUpInside) + button.isEnabled = true + button.isUserInteractionEnabled = true + // Set button height and width + button.translatesAutoresizingMaskIntoConstraints = false + button.widthAnchor.constraint(equalToConstant: buttonSize.width).isActive = true + button.heightAnchor.constraint(equalToConstant: buttonSize.height).isActive = true + + // Create the badge label +// let badgeLabel = UILabel() + CartDataCache.cartBadgeLabel.text = "\(badgeNumber)" + CartDataCache.cartBadgeLabel.textColor = badgeTextColor + CartDataCache.cartBadgeLabel.backgroundColor = badgeColor + CartDataCache.cartBadgeLabel.font = UIFont.systemFont(ofSize: 12) + CartDataCache.cartBadgeLabel.textAlignment = .center + CartDataCache.cartBadgeLabel.layer.cornerRadius = 10 + CartDataCache.cartBadgeLabel.clipsToBounds = true + + badgeNumber == 0 ? (CartDataCache.cartBadgeLabel.isHidden = true) : (CartDataCache.cartBadgeLabel.isHidden = false) + // Set badge label constraints + CartDataCache.cartBadgeLabel.translatesAutoresizingMaskIntoConstraints = false + CartDataCache.cartBadgeLabel.widthAnchor.constraint(equalToConstant: 20).isActive = true + CartDataCache.cartBadgeLabel.heightAnchor.constraint(equalToConstant: 20).isActive = true + + // Create a container view for the button + let containerView = UIView(frame: CGRect(x: 0, y: 0, width: buttonSize.width, height: buttonSize.height)) + + containerView.backgroundColor = buttonColor + containerView.addSubview(button) + containerView.addSubview(CartDataCache.cartBadgeLabel) + containerView.isUserInteractionEnabled = true + // Set constraints for the button inside the container view + NSLayoutConstraint.activate([ + button.centerYAnchor.constraint(equalTo: containerView.centerYAnchor), + button.centerXAnchor.constraint(equalTo: containerView.centerXAnchor), + + // Position the badge at the top-right corner of the button + CartDataCache.cartBadgeLabel.topAnchor.constraint(equalTo: button.topAnchor, constant: -3), + CartDataCache.cartBadgeLabel.rightAnchor.constraint(equalTo: button.rightAnchor, constant: -2) + ]) + + // Create a UIBarButtonItem with the custom view + let customBarButton = UIBarButtonItem(customView: containerView) + // Return the custom bar button + return customBarButton + } +} diff --git a/WOKA/Shop/Controller/ShopProductsVC.swift b/WOKA/Shop/Controller/ShopProductsVC.swift index d0277b1..a77c2dc 100644 --- a/WOKA/Shop/Controller/ShopProductsVC.swift +++ b/WOKA/Shop/Controller/ShopProductsVC.swift @@ -100,9 +100,7 @@ extension ShopProductsVC : CollectionViewSRC{ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { if collectionView == subCategoryCV{ let cell = collectionView.dequeueReusableCell(withReuseIdentifier: K.CellIdentifier.WebSeries.seasonCategoryCell, for: indexPath) as! SeasonCategoryCell - let data = vm.subCategoryData[indexPath.row] - // cell.setData(title: data.seasonNumber ?? "Season", iselected: data.id == vm.episodeSelectedCateogory) cell.setSubCategory(data: data, isSelected: data.id == vm.selectedSubCategory) return cell }else{ @@ -111,7 +109,6 @@ extension ShopProductsVC : CollectionViewSRC{ cell.setData(data: data) return cell } - } func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { @@ -126,12 +123,26 @@ extension ShopProductsVC : CollectionViewSRC{ } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - let data = vm.shopProductsData[indexPath.row] - let sb = UIStoryboard(name: K.StoryBoard.shop, bundle: nil) - let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Shop.productDetailsVC) as! ProductDetailsVC - vcPush.vm.categoryName = vm.pageTitle ?? "Shop" - vcPush.vm.productDetails = data - self.navigationController?.pushViewController(vcPush, animated: true) + switch collectionView{ + case productCV: + let data = vm.shopProductsData[indexPath.row] + let sb = UIStoryboard(name: K.StoryBoard.shop, bundle: nil) + let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Shop.productDetailsVC) as! ProductDetailsVC + vcPush.vm.categoryName = vm.pageTitle ?? "Shop" + vcPush.vm.productDetails = data + self.navigationController?.pushViewController(vcPush, animated: true) + case subCategoryCV: + if let selectedSubCategory = vm.subCategoryData[indexPath.row].id{ + vm.selectedSubCategory = selectedSubCategory + self.subCategoryCV.reloadData() + Utilities.startProgressHUD() + vm.pageNo = 0 + vm.getShopProducts(subCategoryID: selectedSubCategory) + } + default: + break + } + } } diff --git a/WOKA/Shop/Model/ShopProductsListingDM.swift b/WOKA/Shop/Model/ShopProductsListingDM.swift index 10aabc3..ccf54ae 100644 --- a/WOKA/Shop/Model/ShopProductsListingDM.swift +++ b/WOKA/Shop/Model/ShopProductsListingDM.swift @@ -27,10 +27,11 @@ struct ShopProductsListingDM: Codable { let stockStatus: String? // let taxCategory: JSONNull? let taxValue: String? - let shopMasterDetail: ShopMasterDetail? + let shopMasterDetail: CartListingDM.ShopMasterDetail? let shopImage: [String]? let addedToCart: Bool? - + let productFinalPrice : Double? + enum CodingKeys: String, CodingKey { case id case skuID = "sku_id" @@ -46,6 +47,7 @@ struct ShopProductsListingDM: Codable { case shopMasterDetail = "shop_master_detail" case shopImage = "shop_image" case addedToCart = "added_to_cart" + case productFinalPrice = "product_final_price" } } diff --git a/WOKA/Shop/Model/ShopSubCategoryDM.swift b/WOKA/Shop/Model/ShopSubCategoryDM.swift index ac2744b..c4d5c3f 100644 --- a/WOKA/Shop/Model/ShopSubCategoryDM.swift +++ b/WOKA/Shop/Model/ShopSubCategoryDM.swift @@ -22,7 +22,8 @@ struct ShopSubCategoryDM: Codable { let id, categoryMasterID: Int? let subCategoryName: String? let subCategoryThumbnail: String? - + var isSelected : Bool? = false + enum CodingKeys: String, CodingKey { case id case categoryMasterID = "category_master_id" diff --git a/WOKA/Shop/Shop.storyboard b/WOKA/Shop/Shop.storyboard index e389a39..c22442c 100644 --- a/WOKA/Shop/Shop.storyboard +++ b/WOKA/Shop/Shop.storyboard @@ -31,7 +31,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -250,6 +250,7 @@ @@ -266,6 +267,7 @@ diff --git a/WOKA/Shop/View/ShopProductsCell.swift b/WOKA/Shop/View/ShopProductsCell.swift index 6f05dad..83baded 100644 --- a/WOKA/Shop/View/ShopProductsCell.swift +++ b/WOKA/Shop/View/ShopProductsCell.swift @@ -21,7 +21,12 @@ class ShopProductsCell: UICollectionViewCell { } func setData(data : ShopProductsListingDM.ResultData){ - self.productTitle.text = data.productName + if data.subCategoryMasterID == 12{ + self.productTitle.text = data.shopMasterDetail?.productNameEnglish + }else{ + self.productTitle.text = data.shopMasterDetail?.productNameHindi + } +// self.productTitle.text = data.productName self.productPrice.text = data.productPrice if let url = data.shopImage?.first{ diff --git a/WOKA/Shop/View/ShopProductsCell.xib b/WOKA/Shop/View/ShopProductsCell.xib index 93f300e..13e7889 100644 --- a/WOKA/Shop/View/ShopProductsCell.xib +++ b/WOKA/Shop/View/ShopProductsCell.xib @@ -32,7 +32,7 @@ - + @@ -50,6 +50,7 @@ sadasdasd sadasdasd sadasdasdasdsad + @@ -102,5 +103,8 @@ sadasdasdasdsad + + + diff --git a/WOKA/Shop/ViewModel/ProductDetailsVM.swift b/WOKA/Shop/ViewModel/ProductDetailsVM.swift index dfee86e..2e24134 100644 --- a/WOKA/Shop/ViewModel/ProductDetailsVM.swift +++ b/WOKA/Shop/ViewModel/ProductDetailsVM.swift @@ -6,6 +6,7 @@ // import UIKit +import Alamofire class ProductDetailsVM{ @@ -17,24 +18,29 @@ class ProductDetailsVM{ 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 + if productDetails.subCategoryMasterID == 12{ + vc.productTitle.text = productDetails.shopMasterDetail?.productNameEnglish + 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 + } + }else{ + vc.productTitle.text = productDetails.shopMasterDetail?.productNameHindi + if let desc = productDetails.shopMasterDetail?.descriptionHindi, 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.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{ @@ -58,4 +64,51 @@ class ProductDetailsVM{ self.vc.view.applyGradient(colors: [color2, color1], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0)) } + // MARK: - Add To Cart + + func addToCart(shopMasterID : Int){ + Utilities.startProgressHUD() + let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()] + let params : Parameters = ["shop_master_id" : shopMasterID] + + // 11 - hindi , 12 - english + NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Cart.add_cart, method: .post,parameters: params,headers: headers) { [weak self](result : Result) in + switch result{ + case .success(let data): + guard let self else{ + Utilities.dismissProgressHUD() + return + } + switch data.success{ + case 0: + /* + Error + */ + Utilities.dismissProgressHUD() + + Utilities.alertWithBtnCompletion(title: "Error", msgBody: data.message ?? K.ConstantString.unRecognised, okBtnStr: "Retry?", vc: self.vc) { isDone in + + } + case 1: + Utilities.dismissProgressHUD() + self.vc.toast(msg: data.message ?? "Added to cart", time: 2) { + if let productDetails = self.productDetails{ + CartDataCache.cartListData.append(CartListingDM.ResultData(id: productDetails.id, skuID: productDetails.skuID, productName: productDetails.productName, categoryMasterID: productDetails.categoryMasterID, subCategoryMasterID: productDetails.subCategoryMasterID, productPrice: productDetails.productPrice, remainStockQuantity: productDetails.remainStockQuantity, stockStatus: productDetails.stockStatus, taxValue: productDetails.taxValue, productQuantity: productDetails.remainStockQuantity, shopMasterDetail: productDetails.shopMasterDetail, shopImage: productDetails.shopImage, productFinalPrice: productDetails.productFinalPrice)) + self.vc.addToCartBtn.setTitle("View Cart", for: .normal) + } + } + default: + Utilities.dismissProgressHUD() + break + } + case .failure(let error): + guard let self else{ + Utilities.dismissProgressHUD() + return + } + Utilities.dismissProgressHUD() + Utilities.alert(title: "Error", message: error.localizedDescription, viewController: self.vc) + } + } + } } diff --git a/WOKA/Shop/ViewModel/ShopListingVM.swift b/WOKA/Shop/ViewModel/ShopListingVM.swift index 4b86bd8..d0f83ef 100644 --- a/WOKA/Shop/ViewModel/ShopListingVM.swift +++ b/WOKA/Shop/ViewModel/ShopListingVM.swift @@ -17,8 +17,57 @@ class ShopListingVM{ setupCell() addGradient() getSuperCategory() + + + + + let filterBtn = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: 45, height: 45)) + filterBtn.setImage(UIImage(named: "CartIcon"), for: .normal) + filterBtn.addTarget(self, action: #selector(cartBtnTapped), for: .touchUpInside) + +// let lblBadge = type(of: CartDataCache.cartBadgeLabel).init(frame: CGRect.init(x: 30, y: 0, width: 18, height: 18)) + CartDataCache.cartBadgeLabel.backgroundColor = UIColor.red + CartDataCache.cartBadgeLabel.isHidden = true + CartDataCache.cartBadgeLabel.clipsToBounds = true + CartDataCache.cartBadgeLabel.layer.cornerRadius = 9 + CartDataCache.cartBadgeLabel.textColor = UIColor.white + CartDataCache.cartBadgeLabel.font = FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 10) + CartDataCache.cartBadgeLabel.textAlignment = .center + + filterBtn.addSubview(CartDataCache.cartBadgeLabel) + + self.vc.navigationItem.rightBarButtonItems = [UIBarButtonItem.init(customView: filterBtn)] + + //check if cart is not fetched + if !CartDataCache.isFetched{ + CartDataCache.shareInstance.getCartList(vc: self.vc) + } + CartDataCache.cartBadgeLabel.text = "2" +// let btn = BadgedButtonItem(with: UIImage(named: "CartIcon")!) +// btn.setBadge(with: 2) +// self.vc.navigationItem.rightBarButtonItem = btn +// +// btn.tapAction = { +// print("tapped") +// } +// let cartButton = vc.createCartButton(imageName: "CartIcon", +// badgeNumber: CartDataCache.cartCount, +// target: self, +// action: #selector(cartBtnTapped)) +// +// // Create a flexible space item to push the custom view to the left +// let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) +// flexibleSpace.width = 10 +// +// // Create a negative spacer to fine-tune the position +// let negativeSpacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) +// negativeSpacer.width = 10 // Adjust this value to move the button to the left +// +// self.vc.navigationItem.rightBarButtonItems = [flexibleSpace, negativeSpacer, cartButton] } + + func setupCell(){ vc.tableView.register(UINib(nibName: K.CellIdentifier.Shop.shopListingCell, bundle: nil), forCellReuseIdentifier: K.CellIdentifier.Shop.shopListingCell) vc.tableView.delegate = vc.self @@ -75,3 +124,95 @@ class ShopListingVM{ } } } + +extension UIBarButtonItem { + + convenience init(icon: UIImage, badge: String, _ badgeBackgroundColor: UIColor = #colorLiteral(red: 0.9156965613, green: 0.380413115, blue: 0.2803866267, alpha: 1), target: Any? = UIBarButtonItem.self, action: Selector? = nil) { + let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 50, height: 50)) + imageView.image = icon + + let label = UILabel(frame: CGRect(x: 8, y: -5, width: 20, height: 20)) + label.text = badge + label.backgroundColor = badgeBackgroundColor + label.adjustsFontSizeToFitWidth = true + label.textAlignment = .center + label.font = FontCustom.shareInstance.customFont(fontName: .Exo2_Regular, size: 10) + label.clipsToBounds = true + label.layer.cornerRadius = 20 / 2 + label.textColor = .white + + let buttonView = UIView(frame: CGRect(x: 0, y: 0, width: 24, height: 24)) + buttonView.addSubview(imageView) + buttonView.addSubview(label) + buttonView.addGestureRecognizer(UITapGestureRecognizer.init(target: target, action: action)) + self.init(customView: buttonView) + } + +} + +class BadgedButtonItem1: UIBarButtonItem { + + public func setBadge(with value: Int) { + self.badgeValue = value + } + + private var badgeValue: Int? { + didSet { + if let value = badgeValue, + value > 0 { + lblBadge.isHidden = false + lblBadge.text = "\(value)" + } else { + lblBadge.isHidden = true + } + } + } + + var tapAction: (() -> Void)? + + private let filterBtn = UIButton() + private let lblBadge = UILabel() + + override init() { + super.init() + setup() + } + + init(with image: UIImage?) { + super.init() + setup(image: image) + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + setup() + } + + private func setup(image: UIImage? = nil) { + + self.filterBtn.frame = CGRect(x: 0, y: 0, width: 50, height: 50) + self.filterBtn.adjustsImageWhenHighlighted = false + self.filterBtn.setImage(image, for: .normal) + self.filterBtn.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside) + + self.lblBadge.frame = CGRect(x: -5, y: 0, width: 15, height: 15) + self.lblBadge.backgroundColor = .red + self.lblBadge.clipsToBounds = true + self.lblBadge.layer.cornerRadius = 7 + self.lblBadge.textColor = UIColor.white + self.lblBadge.font = UIFont.systemFont(ofSize: 10) + self.lblBadge.textAlignment = .center + self.lblBadge.isHidden = true + self.lblBadge.minimumScaleFactor = 0.1 + self.lblBadge.adjustsFontSizeToFitWidth = true + self.filterBtn.addSubview(lblBadge) + self.customView = filterBtn + } + + @objc func buttonPressed() { + if let action = tapAction { + action() + } + } + +} diff --git a/WOKA/Shop/ViewModel/ShopProductsVM.swift b/WOKA/Shop/ViewModel/ShopProductsVM.swift index 97afde3..e30f846 100644 --- a/WOKA/Shop/ViewModel/ShopProductsVM.swift +++ b/WOKA/Shop/ViewModel/ShopProductsVM.swift @@ -73,9 +73,9 @@ class ShopProductsVM{ case 1: Utilities.dismissProgressHUD() guard let data = data.data?.result else{return} - self.subCategoryData.append(ShopSubCategoryDM.ResultData(id: 0, categoryMasterID: 0, subCategoryName: " All ", subCategoryThumbnail: "")) + self.subCategoryData.append(ShopSubCategoryDM.ResultData(id: -1, categoryMasterID: 0, subCategoryName: " All ", subCategoryThumbnail: "")) self.subCategoryData.append(contentsOf: data) - self.selectedSubCategory = data.first?.id ?? 0 + self.selectedSubCategory = -1 self.vc.subCategoryCV.reloadData() if let subCatID = data.first?.id{ Utilities.startProgressHUD() @@ -104,11 +104,12 @@ class ShopProductsVM{ guard let categoryID else{return} let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()] let params : Parameters = ["category_id" : categoryID, - "sub_category_id" : subCategoryID ?? "", + "sub_category_id" : ((subCategoryID == -1) ? "" : subCategoryID?.toString() ) ?? "", "api_version" : "v2", "start" : pageNo, "limit" : 12] + // 11 - hindi , 12 - english 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): @@ -133,6 +134,9 @@ class ShopProductsVM{ Utilities.dismissProgressHUD() vc.spinnerView.stopAnimating() guard let count = data.data?.totalRecords ,let data = data.data?.result else{return} + if pageNo == 0{ + self.shopProductsData.removeAll() + } self.shopProductsData.append(contentsOf: data) self.vc.productCV.reloadData() if self.shopProductsData.count == count{ diff --git a/WOKA/SideBarNav/Controller/MyOrdersVC.swift b/WOKA/SideBarNav/Controller/MyOrdersVC.swift index 76005b8..d092cdc 100644 --- a/WOKA/SideBarNav/Controller/MyOrdersVC.swift +++ b/WOKA/SideBarNav/Controller/MyOrdersVC.swift @@ -9,25 +9,13 @@ import UIKit class MyOrdersVC: UIViewController { + var vm = MyOrdersVM() + override func viewDidLoad() { super.viewDidLoad() - self.title = "MY ORDERS" - - let btn = BadgedButtonItem(with: UIImage(named: "CartIcon")) - btn.badgeTintColor = .red - btn.badgeTextColor = .green - btn.position = .right - btn.hasBorder = true - btn.borderColor = .red - btn.badgeSize = .large - btn.badgeAnimation = true - btn.setBadge(with: 1) - btn.tapAction = { - let sb = UIStoryboard(name: K.StoryBoard.cart, bundle: nil) - let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Cart.cartListVC) as! CartListVC - self.navigationController?.pushViewController(vcPush, animated: true) - } - self.navigationItem.rightBarButtonItem = btn + vm.vc = self + vm.initView() + } diff --git a/WOKA/SideBarNav/ViewModel/MyOrdersVM.swift b/WOKA/SideBarNav/ViewModel/MyOrdersVM.swift new file mode 100644 index 0000000..556315a --- /dev/null +++ b/WOKA/SideBarNav/ViewModel/MyOrdersVM.swift @@ -0,0 +1,46 @@ +// +// MyOrdersVM.swift +// WOKA +// +// Created by MacBook Pro on 30/07/24. +// + +import UIKit + +class MyOrdersVM{ + + weak var vc : MyOrdersVC! + + func initView(){ + + vc.title = "MY ORDERS".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue) + + //check if cart is not fetched + if !CartDataCache.isFetched{ + CartDataCache.shareInstance.getCartList(vc: self.vc) + } + + let cartButton = vc.createCartButton(imageName: "CartIcon", + badgeNumber: CartDataCache.cartCount, + target: self, + action: #selector(cartBtnTapped)) + + // Create a flexible space item to push the custom view to the left + let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) + flexibleSpace.width = 10 + + // Create a negative spacer to fine-tune the position + let negativeSpacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) + negativeSpacer.width = 10 // Adjust this value to move the button to the left + self.vc.navigationItem.rightBarButtonItems = [flexibleSpace, negativeSpacer, cartButton] + + +// Timer.scheduledTimer(withTimeInterval: 2, repeats: false) { _ in +// lblBadge.text = "3" +// } + } + + @objc func cartBtnTapped(){ + print("cart tapped") + } +} diff --git a/WOKA/TabBar & SideMenu/ViewModel/SideMenuVM.swift b/WOKA/TabBar & SideMenu/ViewModel/SideMenuVM.swift index 85f297c..9411c27 100644 --- a/WOKA/TabBar & SideMenu/ViewModel/SideMenuVM.swift +++ b/WOKA/TabBar & SideMenu/ViewModel/SideMenuVM.swift @@ -99,10 +99,9 @@ class SideMenuVM{ break } - //set the first name as the name if let avatar = data.avtar{ - //https://wokaland.com/admin/storage/app/public/uploads/avtar/avatar2.png?d=1716889852 - vc.avatarImage.imageURL("https://wokaland.com/admin/storage/app/public/uploads/avtar/avatar2.png?d=1716889852",color: .white) + vc.avatarImage.imageURL("https://wokaland.com/secret-panel-10102023/hidden-admin-portal-20092023/storage/app/public/uploads/avtar/avatar2.png?d=1716889852") +// vc.avatarImage.imageURL(avatar) } } diff --git a/WOKA/Theme/ViewModel/ThemeOneVM.swift b/WOKA/Theme/ViewModel/ThemeOneVM.swift index e379dd8..64a53f0 100644 --- a/WOKA/Theme/ViewModel/ThemeOneVM.swift +++ b/WOKA/Theme/ViewModel/ThemeOneVM.swift @@ -177,8 +177,8 @@ class ThemeOneVM{ } if let avatar = data.avtar{ - //https://wokaland.com/admin/storage/app/public/uploads/avtar/avatar2.png?d=1716889852 - vc.avatarImage.imageURL("https://wokaland.com/admin/storage/app/public/uploads/avtar/avatar2.png?d=1716889852") +// vc.avatarImage.imageURL(avatar) + vc.avatarImage.imageURL("https://wokaland.com/secret-panel-10102023/hidden-admin-portal-20092023/storage/app/public/uploads/avtar/avatar2.png?d=1716889852") } } diff --git a/WOKA/Theme/ViewModel/ThemeTwoVM.swift b/WOKA/Theme/ViewModel/ThemeTwoVM.swift index 3376cfd..af9f600 100644 --- a/WOKA/Theme/ViewModel/ThemeTwoVM.swift +++ b/WOKA/Theme/ViewModel/ThemeTwoVM.swift @@ -182,8 +182,8 @@ class ThemeTwoVM{ } if let avatar = data.avtar{ - //https://wokaland.com/admin/storage/app/public/uploads/avtar/avatar2.png?d=1716889852 - vc.avatarImage.imageURL("https://wokaland.com/admin/storage/app/public/uploads/avtar/avatar6.png") + vc.avatarImage.imageURL("https://wokaland.com/secret-panel-10102023/hidden-admin-portal-20092023/storage/app/public/uploads/avtar/avatar2.png?d=1716889852") +// vc.avatarImage.imageURL(avatar) } }