segregate files

This commit is contained in:
Daniel Arantes Loverde
2026-02-13 11:01:54 -03:00
parent 4a40936293
commit d7b8b1864a
20 changed files with 2653 additions and 1923 deletions

View File

@@ -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()
}
}