Skip to content

Commit e90c6ed

Browse files
committed
Add ProductsListViewModel
1 parent 037ed02 commit e90c6ed

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed

Networking/Networking/Model/Product/Product.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,3 +662,12 @@ private extension Product {
662662
enum ProductDecodingError: Error {
663663
case missingSiteID
664664
}
665+
666+
// MARK: - Hashable Conformance
667+
//
668+
extension Product: Hashable {
669+
public func hash(into hasher: inout Hasher) {
670+
hasher.combine(siteID)
671+
hasher.combine(productID)
672+
}
673+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import Foundation
2+
import Yosemite
3+
4+
/// View model for `ProductsViewController`. Only stores logic related to Bulk Editing.
5+
///
6+
class ProductListViewModel {
7+
private var selectedProducts: Set<Product> = .init()
8+
9+
var selectedProductsCount: Int {
10+
selectedProducts.count
11+
}
12+
13+
func productIsSelected(_ productToCheck: Product) -> Bool {
14+
return selectedProducts.contains(productToCheck)
15+
}
16+
17+
func selectProduct(_ selectedProduct: Product) {
18+
selectedProducts.insert(selectedProduct)
19+
// if selectedProducts.contains(selectedProduct) {
20+
// } else {
21+
// }
22+
}
23+
24+
func deselectProduct(_ selectedProduct: Product) {
25+
selectedProducts.remove(selectedProduct)
26+
}
27+
28+
func deselectAll() {
29+
selectedProducts.removeAll()
30+
}
31+
}

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,6 +1218,7 @@
12181218
ABC35528D2D6BE6F516E5CEF /* InPersonPaymentsOnboardingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABC35A4B736A0B2D8348DD08 /* InPersonPaymentsOnboardingError.swift */; };
12191219
ABC35F18E744C5576B986CB3 /* InPersonPaymentsUnavailableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABC35055F8AC8C8EB649F421 /* InPersonPaymentsUnavailableView.swift */; };
12201220
AE1CC33829129A010021C8EF /* LinkBehavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE1CC33729129A010021C8EF /* LinkBehavior.swift */; };
1221+
AE2E5F6629685CF8009262D3 /* ProductsListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE2E5F6529685CF8009262D3 /* ProductsListViewModel.swift */; };
12211222
AE3AA889290C303B00BE422D /* WebKitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE3AA888290C303B00BE422D /* WebKitViewController.swift */; };
12221223
AE3AA88B290C30B900BE422D /* WebViewControllerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE3AA88A290C30B900BE422D /* WebViewControllerConfiguration.swift */; };
12231224
AE3AA88D290C30E800BE422D /* WebProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE3AA88C290C30E800BE422D /* WebProgressView.swift */; };
@@ -3259,6 +3260,7 @@
32593260
ABC353433EABC5F0EC796222 /* CardReaderSettingsSearchingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CardReaderSettingsSearchingViewController.swift; sourceTree = "<group>"; };
32603261
ABC35A4B736A0B2D8348DD08 /* InPersonPaymentsOnboardingError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InPersonPaymentsOnboardingError.swift; sourceTree = "<group>"; };
32613262
AE1CC33729129A010021C8EF /* LinkBehavior.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkBehavior.swift; sourceTree = "<group>"; };
3263+
AE2E5F6529685CF8009262D3 /* ProductsListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductsListViewModel.swift; sourceTree = "<group>"; };
32623264
AE3AA888290C303B00BE422D /* WebKitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebKitViewController.swift; sourceTree = "<group>"; };
32633265
AE3AA88A290C30B900BE422D /* WebViewControllerConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewControllerConfiguration.swift; sourceTree = "<group>"; };
32643266
AE3AA88C290C30E800BE422D /* WebProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebProgressView.swift; sourceTree = "<group>"; };
@@ -6783,6 +6785,7 @@
67836785
02A65300246AA63600755A01 /* ProductDetailsFactory.swift */,
67846786
B92FF9AF27FC7821005C34E3 /* ProductsViewController.xib */,
67856787
0260F40023224E8100EDA10A /* ProductsViewController.swift */,
6788+
AE2E5F6529685CF8009262D3 /* ProductsListViewModel.swift */,
67866789
020DD49023239DD6005822B1 /* PaginatedListViewControllerStateCoordinator.swift */,
67876790
02564A89246CDF6100D6DB2A /* ProductsTopBannerFactory.swift */,
67886791
0279F0D9252DB4BE0098D7DE /* ProductVariationDetailsFactory.swift */,
@@ -10355,6 +10358,7 @@
1035510358
CE1CCB402056F21C000EE3AC /* Style.swift in Sources */,
1035610359
45EF7984244F26BB00B22BA2 /* Array+IndexPath.swift in Sources */,
1035710360
02E6B97823853D81000A36F0 /* TitleAndValueTableViewCell.swift in Sources */,
10361+
AE2E5F6629685CF8009262D3 /* ProductsListViewModel.swift in Sources */,
1035810362
CC770C8A27B1497700CE6ABC /* SearchHeader.swift in Sources */,
1035910363
02BAB02724D13A6400F8B06E /* ProductVariationFormActionsFactory.swift in Sources */,
1036010364
45CDAFAE2434CFCA00F83C22 /* ProductCatalogVisibilityViewController.swift in Sources */,

0 commit comments

Comments
 (0)