segregate files
This commit is contained in:
@@ -41,13 +41,81 @@ struct FavoritesState {
|
||||
}
|
||||
|
||||
struct CartState {
|
||||
var storeId: String? = nil
|
||||
var storeName: String? = nil
|
||||
var items: [CartItemState] = []
|
||||
var total: Double = 0
|
||||
}
|
||||
|
||||
struct CartItemState: Identifiable {
|
||||
let id: String
|
||||
var productId: String
|
||||
var storeId: String
|
||||
var name: String
|
||||
var details: String? = nil
|
||||
var quantity: Int
|
||||
var price: Double
|
||||
var unitPrice: Double
|
||||
}
|
||||
|
||||
extension CartState {
|
||||
var totalItems: Int {
|
||||
items.reduce(0) { $0 + $1.quantity }
|
||||
}
|
||||
|
||||
mutating func recalculateTotal() {
|
||||
total = items.reduce(0) { $0 + (Double($1.quantity) * $1.unitPrice) }
|
||||
}
|
||||
|
||||
mutating func clear() {
|
||||
storeId = nil
|
||||
storeName = nil
|
||||
items = []
|
||||
total = 0
|
||||
}
|
||||
|
||||
mutating func add(item: CartItemState) {
|
||||
if let index = items.firstIndex(where: { $0.id == item.id }) {
|
||||
items[index].quantity += item.quantity
|
||||
} else {
|
||||
items.append(item)
|
||||
}
|
||||
recalculateTotal()
|
||||
}
|
||||
|
||||
mutating func set(item: CartItemState) {
|
||||
if let index = items.firstIndex(where: { $0.id == item.id }) {
|
||||
if item.quantity <= 0 {
|
||||
items.remove(at: index)
|
||||
} else {
|
||||
items[index] = item
|
||||
}
|
||||
} else if item.quantity > 0 {
|
||||
items.append(item)
|
||||
}
|
||||
|
||||
if items.isEmpty {
|
||||
storeId = nil
|
||||
storeName = nil
|
||||
}
|
||||
recalculateTotal()
|
||||
}
|
||||
|
||||
mutating func increment(itemId: String) {
|
||||
guard let index = items.firstIndex(where: { $0.id == itemId }) else { return }
|
||||
items[index].quantity += 1
|
||||
recalculateTotal()
|
||||
}
|
||||
|
||||
mutating func decrement(itemId: String) {
|
||||
guard let index = items.firstIndex(where: { $0.id == itemId }) else { return }
|
||||
items[index].quantity -= 1
|
||||
if items[index].quantity <= 0 {
|
||||
items.remove(at: index)
|
||||
}
|
||||
if items.isEmpty {
|
||||
storeId = nil
|
||||
storeName = nil
|
||||
}
|
||||
recalculateTotal()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user