From d1c67b16169958af347ae1850ec02b0eb0537ca4 Mon Sep 17 00:00:00 2001 From: James Date: Thu, 12 Mar 2026 17:36:54 -0700 Subject: [PATCH 01/14] added expanding item cards in searchview, added additional variables to hold item description and item counts later on. --- SWFrontUI/ShopwiseFrontEndUI/SearchView.swift | 162 +++++++++++++----- .../ShopwiseFrontEndUI/WalmartItems.swift | 1 + 2 files changed, 117 insertions(+), 46 deletions(-) diff --git a/SWFrontUI/ShopwiseFrontEndUI/SearchView.swift b/SWFrontUI/ShopwiseFrontEndUI/SearchView.swift index 4529793..c1f5cd3 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/SearchView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/SearchView.swift @@ -9,6 +9,7 @@ struct SearchView: View { @State private var results: [WalmartItem] = [] @State private var isLoading = false @State private var errorText: String? = nil + @State private var expandedItemId: Int? = nil @State private var pageSize = 50 @State private var offset = 0 @@ -88,6 +89,18 @@ struct SearchView: View { title: item.name, unit: unitText(for: item), priceText: formatPrice(item.retail_price), + descriptionText: nil, // link this to Supabase later + itemCountText: nil, // link this to Supabase later + isExpanded: expandedItemId == item.id, + onToggle: { + withAnimation(.spring(response: 0.35, dampingFraction: 0.85)) { + if expandedItemId == item.id { + expandedItemId = nil + } else { + expandedItemId = item.id + } + } + }, onAdd: { cartStore.add(id: String(item.id), name: item.name, unit: unitText(for: item) ?? "", price: item.retail_price ?? 0) } @@ -240,64 +253,121 @@ struct ProductCard: View { let title: String let unit: String? let priceText: String + let descriptionText: String? + let itemCountText: String? + let isExpanded: Bool + let onToggle: () -> Void let onAdd: () -> Void var body: some View { - HStack(spacing: 14) { - AsyncImage(url: imageURL) { phase in - switch phase { - case .empty: - ProgressView() - .frame(width: 74, height: 74) - case .success(let image): - image - .resizable() - .scaledToFill() - .frame(width: 74, height: 74) - .clipped() - case .failure: - Image(systemName: "photo") - .frame(width: 74, height: 74) - .foregroundStyle(.secondary) - @unknown default: - EmptyView() - .frame(width: 74, height: 74) + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 14) { + AsyncImage(url: imageURL) { phase in + switch phase { + case .empty: + ProgressView() + .frame(width: 74, height: 74) + case .success(let image): + image + .resizable() + .scaledToFill() + .frame(width: 74, height: 74) + .clipped() + case .failure: + Image(systemName: "photo") + .frame(width: 74, height: 74) + .foregroundStyle(.secondary) + @unknown default: + EmptyView() + .frame(width: 74, height: 74) + } } - } - .background(Color(.systemGray6)) - .clipShape(RoundedRectangle(cornerRadius: 16)) - - VStack(alignment: .leading, spacing: 6) { - Text(title) - .font(.headline) - .lineLimit(2) + .background(Color(.systemGray6)) + .clipShape(RoundedRectangle(cornerRadius: 16)) + .onTapGesture(perform: onToggle) + + VStack(alignment: .leading, spacing: 6) { + Text(title) + .font(.headline) + .lineLimit(2) + .onTapGesture(perform: onToggle) + + if let unit, !unit.isEmpty { + Text(unit) + .font(.subheadline) + .foregroundStyle(.secondary) + .lineLimit(1) + .onTapGesture(perform: onToggle) + } - if let unit, !unit.isEmpty { - Text(unit) - .font(.subheadline) - .foregroundStyle(.secondary) - .lineLimit(1) + Text(priceText) + .font(.headline) + .onTapGesture(perform: onToggle) } - Text(priceText) - .font(.headline) + Spacer() + + Button(action: onAdd) { + HStack(spacing: 8) { + Image(systemName: "cart.badge.plus") + Text("Add") + } + .font(.subheadline.weight(.semibold)) + .padding(.horizontal, 14) + .padding(.vertical, 10) + .foregroundStyle(.white) + .background(Color.blue) + .clipShape(Capsule()) + } + .buttonStyle(.plain) } - Spacer() + if isExpanded { + VStack(alignment: .leading, spacing: 10) { + AsyncImage(url: imageURL) { phase in + switch phase { + case .empty: + ProgressView() + .frame(maxWidth: .infinity, minHeight: 160) + case .success(let image): + image + .resizable() + .scaledToFill() + .frame(maxWidth: .infinity, minHeight: 160, maxHeight: 200) + .clipped() + case .failure: + Image(systemName: "photo") + .frame(maxWidth: .infinity, minHeight: 160) + .foregroundStyle(.secondary) + @unknown default: + EmptyView() + .frame(maxWidth: .infinity, minHeight: 160) + } + } + .background(Color(.systemGray6)) + .clipShape(RoundedRectangle(cornerRadius: 16)) + .onTapGesture(perform: onToggle) + + if let descriptionText, !descriptionText.isEmpty { + Text(descriptionText) + .font(.subheadline) + .foregroundStyle(.secondary) + } else { + Text("Description coming soon") + .font(.subheadline) + .foregroundStyle(.secondary) + } - Button(action: onAdd) { - HStack(spacing: 8) { - Image(systemName: "cart.badge.plus") - Text("Add") + if let itemCountText, !itemCountText.isEmpty { + Text("Item count: \(itemCountText)") + .font(.subheadline.weight(.semibold)) + } else { + Text("Item count: —") + .font(.subheadline.weight(.semibold)) + .foregroundStyle(.secondary) + } } - .font(.subheadline.weight(.semibold)) - .padding(.horizontal, 14) - .padding(.vertical, 10) - .foregroundStyle(.white) - .background(Color.blue) - .clipShape(Capsule()) } - .buttonStyle(.plain) } .padding(14) .background(Color(.systemGray6).opacity(0.65)) diff --git a/SWFrontUI/ShopwiseFrontEndUI/WalmartItems.swift b/SWFrontUI/ShopwiseFrontEndUI/WalmartItems.swift index 44b2e4c..c6ea2b9 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/WalmartItems.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/WalmartItems.swift @@ -17,4 +17,5 @@ struct WalmartItem: Identifiable, Decodable { let mediumImage: String? let largeImage: String? let color: String? + let descriptionText: String? } From 7313fdfc4cf6c36f1d03c5b9590daa722dce773c Mon Sep 17 00:00:00 2001 From: James Date: Thu, 12 Mar 2026 18:49:30 -0700 Subject: [PATCH 02/14] loads recipe from db --- .../UserInterfaceState.xcuserstate | Bin 146519 -> 151470 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 24 ++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 SWFrontUI/ShopwiseFrontEndUI.xcodeproj/xcuserdata/jchang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist diff --git a/SWFrontUI/ShopwiseFrontEndUI.xcodeproj/project.xcworkspace/xcuserdata/jchang.xcuserdatad/UserInterfaceState.xcuserstate b/SWFrontUI/ShopwiseFrontEndUI.xcodeproj/project.xcworkspace/xcuserdata/jchang.xcuserdatad/UserInterfaceState.xcuserstate index e983ceb97f2c63e97d4705905665e2a15120383a..6431e5b53390fb40d676a957a7d88cd7a4e14137 100644 GIT binary patch literal 151470 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

faM!1? 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

  • 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

    faM!1? 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 diff --git a/SWFrontUI/ShopwiseFrontEndUI.xcodeproj/xcuserdata/jchang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SWFrontUI/ShopwiseFrontEndUI.xcodeproj/xcuserdata/jchang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..e8ba86e --- /dev/null +++ b/SWFrontUI/ShopwiseFrontEndUI.xcodeproj/xcuserdata/jchang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,24 @@ + + + + + + + + + From e15107d375e21442f7abe6ea505d9312e8dcfa95 Mon Sep 17 00:00:00 2001 From: James Date: Thu, 12 Mar 2026 19:29:59 -0700 Subject: [PATCH 03/14] added gitignore file --- SWFrontUI/ShopwiseFrontEndUI/.gitignore | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 SWFrontUI/ShopwiseFrontEndUI/.gitignore diff --git a/SWFrontUI/ShopwiseFrontEndUI/.gitignore b/SWFrontUI/ShopwiseFrontEndUI/.gitignore new file mode 100644 index 0000000..420d208 --- /dev/null +++ b/SWFrontUI/ShopwiseFrontEndUI/.gitignore @@ -0,0 +1,18 @@ +/WalmartPipeline/walmart_CSVs +/WalmartPipeline/__pycache__ +/.vscode +/WalmartPipeline/TaxonomyBrowsing/taxonomy.json +RecipesDataset.csv +openapi_key.py +.env +/__pycache__ +classified_ingredients.csv +/kroger_output +.DS_Store +node_modules/ + +# Xcode user-specific files +xcuserdata/ +*.xcuserstate +*.xccheckout +*.moved-aside \ No newline at end of file From f5e931d751bbc12bbfe2c5196f98f3a33b8e1928 Mon Sep 17 00:00:00 2001 From: James Date: Thu, 12 Mar 2026 19:30:40 -0700 Subject: [PATCH 04/14] fixed recipe screen's add all ingridents parsing everything as one singular item. --- SWFrontUI/ShopwiseFrontEndUI/CartStore.swift | 4 + SWFrontUI/ShopwiseFrontEndUI/Recipe.swift | 376 +++--------------- SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift | 240 ++++++++--- 3 files changed, 254 insertions(+), 366 deletions(-) diff --git a/SWFrontUI/ShopwiseFrontEndUI/CartStore.swift b/SWFrontUI/ShopwiseFrontEndUI/CartStore.swift index 267f85d..b79d257 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/CartStore.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/CartStore.swift @@ -39,6 +39,10 @@ final class CartStore: ObservableObject { add(id: ingredient.id, name: ingredient.name, unit: ingredient.unit, price: ingredient.price) } + func add(name: String, unit: String, price: Double) { + add(id: name, name: name, unit: unit, price: price) + } + func add(id: String, name: String, unit: String, price: Double) { if let idx = items.firstIndex(where: { $0.id == id }) { items[idx].quantity += 1 diff --git a/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift b/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift index ba98dd4..6fa64a8 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift @@ -1,337 +1,71 @@ -// -// RecipeView.swift -// ShopwiseFrontEndUI -// -// Created by Nicholas Castellanos on 3/11/26. -// - -import SwiftUI - -struct RecipeView: View { - @EnvironmentObject private var auth: AuthManager - @EnvironmentObject private var cartStore: CartStore - - @State private var query = "" - @State private var recipes: [RecipeRow] = [] - @State private var expandedID: Int? = nil - @State private var isLoading = false - @State private var errorText: String? = nil - @State private var searchTask: Task? = nil - - @State private var pageSize = 20 - @State private var offset = 0 - @State private var hasMore = true - @State private var isLoadingMore = false - - private var filtered: [RecipeRow] { - if query.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { - return recipes - } - return recipes.filter { $0.title.localizedCaseInsensitiveContains(query) } - } - -// var body: some View { -// List { -// if isLoading { -// HStack { -// Spacer() -// ProgressView("Loading…") -// Spacer() -// } -// .listRowSeparator(.hidden) -// } else if let errorText { -// Text(errorText) -// .foregroundStyle(.red) -// } else { -// ForEach(Array(filtered.enumerated()), id: \.element.id) { index, recipe in -// Section { -// Button { -// withAnimation(.snappy) { -// expandedID = (expandedID == recipe.id) ? nil : recipe.id -// } -// } label: { -// CardContainer { -// HStack(spacing: 12) { -// if let urlString = recipe.imageURL, -// let url = URL(string: urlString) { -// AsyncImage(url: url) { phase in -// switch phase { -// case .success(let image): -// image -// .resizable() -// .scaledToFill() -// case .failure(_): -// Image(systemName: "fork.knife") -// .foregroundStyle(.secondary) -// default: -// ProgressView() -// } -// } -// .frame(width: 54, height: 54) -// .background(Color(.systemGray5)) -// .clipShape(RoundedRectangle(cornerRadius: 12)) -// } else { -// Circle() -// .fill(Color(.systemGray5)) -// .frame(width: 54, height: 54) -// .overlay( -// Image(systemName: "fork.knife") -// .foregroundStyle(.secondary) -// ) -// } -// -// VStack(alignment: .leading, spacing: 4) { -// Text(recipe.title) -// .font(.headline) -// .lineLimit(2) -// -// Text("\(recipe.difficultyText) • \(recipe.estimatedMinutes) min") -// .font(.subheadline) -// .foregroundStyle(.secondary) -// } -// -// Spacer() -// -// Image(systemName: expandedID == recipe.id ? "chevron.up" : "chevron.down") -// .foregroundStyle(.secondary) -// } -// } -// } -// .buttonStyle(.plain) -// .onAppear { -// if index == filtered.count - 1 { -// Task { -// await loadRecipes(reset: false) -// } -// } -// } -// -// if expandedID == recipe.id { -// CardContainer { -// Text("Ingredients") -// .font(.headline) -// -// ForEach(recipe.ingredientList, id: \.self) { item in -// HStack(spacing: 10) { -// Image(systemName: "checkmark.circle") -// .foregroundStyle(.secondary) -// Text(item) -// } -// .padding(.vertical, 2) -// } -// -// Button { -// for item in recipe.ingredientList { -// cartStore.add(name: item, unit: "", price: 0) -// } -// } label: { -// Label("Add Ingredients to Cart", systemImage: "cart.badge.plus") -// .frame(maxWidth: .infinity) -// .foregroundStyle(.white) -// } -// .buttonStyle(.borderedProminent) -// } -// .transition(.opacity.combined(with: .move(edge: .top))) -// } -// } -// } -// } -// } -// .listStyle(.plain) -// .navigationTitle("ShopWise") -// .searchable(text: $query, prompt: "Search recipes…") -// .appToolbar() -// .task { -// await loadRecipes(reset: true) -// } -// .onChange(of: query) { _, _ in -// searchTask?.cancel() -// searchTask = Task { -// try? await Task.sleep(nanoseconds: 400_000_000) -// if Task.isCancelled { return } -// await loadRecipes(reset: true) -// } -// } -// } - - var body: some View { - List { - content - } - .listStyle(.plain) - .navigationTitle("ShopWise") - .searchable(text: $query, prompt: "Search recipes…") - .appToolbar() - .task { - await loadRecipes(reset: true) - } - .onChange(of: query) { _, _ in - searchTask?.cancel() - searchTask = Task { - try? await Task.sleep(nanoseconds: 400_000_000) - if Task.isCancelled { return } - await loadRecipes(reset: true) - } - } +import Foundation + +struct RecipeRow: Identifiable, Codable, Hashable { + let id: Int + let title: String + let ingredients: String? + let instructions: String? + let imageName: String? + let cleanedIngredients: String? + let imageURL: String? + + enum CodingKeys: String, CodingKey { + case id + case title = "Title" + case ingredients = "Ingredients" + case instructions = "Instructions" + case imageName = "Image_Name" + case cleanedIngredients = "Cleaned_Ingredients" + case imageURL = "image_url" } - - @ViewBuilder - private var content: some View { - if isLoading { - HStack { - Spacer() - ProgressView("Loading…") - Spacer() - } - .listRowSeparator(.hidden) + var ingredientList: [String] { + guard let ingredients, !ingredients.isEmpty else { return [] } - } else if let errorText { - Text(errorText) - .foregroundStyle(.red) + let trimmed = ingredients.trimmingCharacters(in: .whitespacesAndNewlines) - } else { - ForEach(Array(filtered.enumerated()), id: \.element.id) { index, recipe in - recipeSection(index: index, recipe: recipe) - } + if let singleQuoted = extractQuotedItems(from: trimmed, quote: "'"), !singleQuoted.isEmpty { + return singleQuoted } - } - - private func recipeSection(index: Int, recipe: RecipeRow) -> some View { - Section { - - Button { - withAnimation(.snappy) { - expandedID = (expandedID == recipe.id) ? nil : recipe.id - } - } label: { - recipeCard(recipe) - } - .buttonStyle(.plain) - .onAppear { - if index == filtered.count - 1 { - Task { - await loadRecipes(reset: false) - } - } - } - - if expandedID == recipe.id { - recipeExpanded(recipe) - } + if let doubleQuoted = extractQuotedItems(from: trimmed, quote: "\""), !doubleQuoted.isEmpty { + return doubleQuoted } - } - - private func recipeCard(_ recipe: RecipeRow) -> some View { - CardContainer { - HStack(spacing: 12) { - - if let urlString = recipe.imageURL, - let url = URL(string: urlString) { - AsyncImage(url: url) { phase in - switch phase { - case .success(let image): - image.resizable().scaledToFill() - case .failure(_): - Image(systemName: "fork.knife") - default: - ProgressView() - } - } - .frame(width: 54, height: 54) - .background(Color(.systemGray5)) - .clipShape(RoundedRectangle(cornerRadius: 12)) - - } else { - Circle() - .fill(Color(.systemGray5)) - .frame(width: 54, height: 54) - } - - VStack(alignment: .leading, spacing: 4) { - Text(recipe.title) - .font(.headline) - .lineLimit(2) + let fallback = trimmed + .trimmingCharacters(in: CharacterSet(charactersIn: "[]")) + .components(separatedBy: ",") + .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) } + .filter { !$0.isEmpty } + return fallback + } - Text("\(recipe.difficultyText) • \(recipe.estimatedMinutes) min") - .font(.subheadline) - .foregroundStyle(.secondary) - } + private func extractQuotedItems(from text: String, quote: String) -> [String]? { + let pattern = "\(quote)([^\\\(quote)]*)\(quote)" + guard let regex = try? NSRegularExpression(pattern: pattern) else { return nil } - Spacer() + let range = NSRange(text.startIndex.. String? in + guard match.numberOfRanges > 1, + let r = Range(match.range(at: 1), in: text) else { return nil } + let value = String(text[r]).trimmingCharacters(in: .whitespacesAndNewlines) + return value.isEmpty ? nil : value } - } - - private func recipeExpanded(_ recipe: RecipeRow) -> some View { - CardContainer { - - Text("Ingredients") - .font(.headline) - ForEach(recipe.ingredientList, id: \.self) { item in - HStack { - Image(systemName: "checkmark.circle") - Text(item) - } - } + return items.isEmpty ? nil : items + } - Button { - for item in recipe.ingredientList { - cartStore.add(id: String(recipe.id), name: item, unit: "", price: 0) - } - } label: { - Label("Add Ingredients to Cart", systemImage: "cart.badge.plus") - .frame(maxWidth: .infinity) - } - .buttonStyle(.borderedProminent) - } + var difficultyText: String { + let count = ingredientList.count + if count <= 5 { return "Easy" } + if count <= 10 { return "Medium" } + return "Hard" } - - @MainActor - private func loadRecipes(reset: Bool = true) async { - if isLoadingMore { return } - - let trimmed = query.trimmingCharacters(in: .whitespacesAndNewlines) - - if reset { - offset = 0 - recipes = [] - hasMore = true - isLoading = true - } else { - if !hasMore { return } - isLoadingMore = true - } - - errorText = nil - - do { - let fetched = try await auth.fetchRecipes( - search: trimmed.isEmpty ? nil : trimmed, - limit: pageSize, - offset: offset - ) - - if reset { - recipes = fetched - } else { - recipes.append(contentsOf: fetched) - } - - offset += fetched.count - if fetched.count < pageSize { - hasMore = false - } - } catch { - errorText = (error as NSError).localizedDescription - } - - isLoading = false - isLoadingMore = false + + var estimatedMinutes: Int { + let text = instructions ?? "" + let sentences = text.components(separatedBy: ".").filter { !$0.trimmingCharacters(in: .whitespaces).isEmpty }.count + return max(10, min(60, sentences * 5)) } } diff --git a/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift b/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift index 63725ae..0cf064b 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift @@ -1,56 +1,206 @@ -// -// RecipeModels.swift -// ShopwiseFrontEndUI -// -// Created by Nicholas Castellanos on 3/11/26. -// - -import Foundation - -struct RecipeRow: Identifiable, Codable, Hashable { - let id: Int - let title: String - let ingredients: String? - let instructions: String? - let imageName: String? - let cleanedIngredients: String? - let imageURL: String? - - enum CodingKeys: String, CodingKey { - case id - case title = "Title" - case ingredients = "Ingredients" - case instructions = "Instructions" - case imageName = "Image_Name" - case cleanedIngredients = "Cleaned_Ingredients" - case imageURL = "image_url" +import SwiftUI + +struct RecipeView: View { + @EnvironmentObject private var auth: AuthManager + @EnvironmentObject private var cartStore: CartStore + + @State private var query = "" + @State private var recipes: [RecipeRow] = [] + @State private var expandedID: Int? = nil + @State private var isLoading = false + @State private var errorText: String? = nil + @State private var searchTask: Task? = nil + + @State private var pageSize = 20 + @State private var offset = 0 + @State private var hasMore = true + @State private var isLoadingMore = false + + private var filtered: [RecipeRow] { + if query.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + return recipes + } + return recipes.filter { $0.title.localizedCaseInsensitiveContains(query) } + } + + var body: some View { + List { + content + } + .listStyle(.plain) + .navigationTitle("ShopWise") + .searchable(text: $query, prompt: "Search recipes…") + .appToolbar() + .task { + await loadRecipes(reset: true) + } + .onChange(of: query) { _, _ in + searchTask?.cancel() + searchTask = Task { + try? await Task.sleep(nanoseconds: 400_000_000) + if Task.isCancelled { return } + await loadRecipes(reset: true) + } + } } + + @ViewBuilder + private var content: some View { - var ingredientList: [String] { - guard let ingredients, !ingredients.isEmpty else { return [] } + if isLoading { + HStack { + Spacer() + ProgressView("Loading…") + Spacer() + } + .listRowSeparator(.hidden) - let trimmed = ingredients - .trimmingCharacters(in: CharacterSet(charactersIn: "[]")) + } else if let errorText { + Text(errorText) + .foregroundStyle(.red) - return trimmed - .components(separatedBy: "',") - .map { - $0.replacingOccurrences(of: "'", with: "") - .trimmingCharacters(in: .whitespacesAndNewlines) + } else { + ForEach(Array(filtered.enumerated()), id: \.element.id) { index, recipe in + recipeSection(index: index, recipe: recipe) } - .filter { !$0.isEmpty } + } } + + private func recipeSection(index: Int, recipe: RecipeRow) -> some View { + Section { + + Button { + withAnimation(.snappy) { + expandedID = (expandedID == recipe.id) ? nil : recipe.id + } + } label: { + recipeCard(recipe) + } + .buttonStyle(.plain) + .onAppear { + if index == filtered.count - 1 { + Task { + await loadRecipes(reset: false) + } + } + } - var difficultyText: String { - let count = ingredientList.count - if count <= 5 { return "Easy" } - if count <= 10 { return "Medium" } - return "Hard" + if expandedID == recipe.id { + recipeExpanded(recipe) + } + } } + + private func recipeCard(_ recipe: RecipeRow) -> some View { + CardContainer { + HStack(spacing: 12) { + + if let urlString = recipe.imageURL, + let url = URL(string: urlString) { + + AsyncImage(url: url) { phase in + switch phase { + case .success(let image): + image.resizable().scaledToFill() + case .failure(_): + Image(systemName: "fork.knife") + default: + ProgressView() + } + } + .frame(width: 54, height: 54) + .background(Color(.systemGray5)) + .clipShape(RoundedRectangle(cornerRadius: 12)) + + } else { + Circle() + .fill(Color(.systemGray5)) + .frame(width: 54, height: 54) + } + + VStack(alignment: .leading, spacing: 4) { + Text(recipe.title) + .font(.headline) + .lineLimit(2) + + Text("\(recipe.difficultyText) • \(recipe.estimatedMinutes) min") + .font(.subheadline) + .foregroundStyle(.secondary) + } - var estimatedMinutes: Int { - let text = instructions ?? "" - let sentences = text.components(separatedBy: ".").filter { !$0.trimmingCharacters(in: .whitespaces).isEmpty }.count - return max(10, min(60, sentences * 5)) + Spacer() + + Image(systemName: expandedID == recipe.id ? "chevron.up" : "chevron.down") + .foregroundStyle(.secondary) + } + } + } + + private func recipeExpanded(_ recipe: RecipeRow) -> some View { + CardContainer { + + Text("Ingredients") + .font(.headline) + + ForEach(recipe.ingredientList, id: \.self) { item in + HStack { + Image(systemName: "checkmark.circle") + Text(item) + } + } + + Button { + for item in recipe.ingredientList { + cartStore.add(id: "\(recipe.id)::\(item)", name: item, unit: "", price: 0) + } + } label: { + Label("Add Ingredients to Cart", systemImage: "cart.badge.plus") + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + } + } + + @MainActor + private func loadRecipes(reset: Bool = true) async { + if isLoadingMore { return } + + let trimmed = query.trimmingCharacters(in: .whitespacesAndNewlines) + + if reset { + offset = 0 + recipes = [] + hasMore = true + isLoading = true + } else { + if !hasMore { return } + isLoadingMore = true + } + + errorText = nil + + do { + let fetched = try await auth.fetchRecipes( + search: trimmed.isEmpty ? nil : trimmed, + limit: pageSize, + offset: offset + ) + + if reset { + recipes = fetched + } else { + recipes.append(contentsOf: fetched) + } + + offset += fetched.count + if fetched.count < pageSize { + hasMore = false + } + } catch { + errorText = (error as NSError).localizedDescription + } + + isLoading = false + isLoadingMore = false } } From 3c54fd59248cfceb2f4b920d62b87643f2e7cb7e Mon Sep 17 00:00:00 2001 From: James Date: Fri, 13 Mar 2026 17:49:40 -0700 Subject: [PATCH 05/14] group ingredient items from specific recipes in cart --- SWFrontUI/ShopwiseFrontEndUI/CartStore.swift | 39 ++++- SWFrontUI/ShopwiseFrontEndUI/CartView.swift | 147 ++++++++++++++---- SWFrontUI/ShopwiseFrontEndUI/Recipe.swift | 4 +- SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift | 68 +++++--- 4 files changed, 192 insertions(+), 66 deletions(-) diff --git a/SWFrontUI/ShopwiseFrontEndUI/CartStore.swift b/SWFrontUI/ShopwiseFrontEndUI/CartStore.swift index b79d257..a9d568c 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/CartStore.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/CartStore.swift @@ -8,16 +8,22 @@ struct CartLineItem: Identifiable, Hashable { let unit: String let price: Double var quantity: Int + let groupId: String? + let groupTitle: String? - init(id: String = String(), name: String, unit: String, price: Double, quantity: Int = 1) { - self.id = id - self.name = name - self.unit = unit - self.price = price - self.quantity = quantity + init(id: String = String(),name: String,unit: String,price: Double, quantity: Int = 1,groupId: String? = nil,groupTitle: String? = nil){ + self.id = id + self.name = name + self.unit = unit + self.price = price + self.quantity = quantity + self.groupId = groupId + self.groupTitle = groupTitle } - var lineTotal: Double { price * Double(quantity) } + var lineTotal: Double{ + price * Double(quantity) + } } final class CartStore: ObservableObject { @@ -59,6 +65,25 @@ final class CartStore: ObservableObject { } } + func add(recipeId: String, recipeTitle: String, name: String, unit: String, price: Double) { + let id = "\(recipeId)::\(name)" + if let idx = items.firstIndex(where: { $0.id == id }) { + items[idx].quantity += 1 + } else { + items.append( + CartLineItem( + id: id, + name: name, + unit: unit, + price: price, + quantity: 1, + groupId: recipeId, + groupTitle: recipeTitle + ) + ) + } + } + func increment(_ item: CartLineItem) { guard let idx = items.firstIndex(of: item) else { return } items[idx].quantity += 1 diff --git a/SWFrontUI/ShopwiseFrontEndUI/CartView.swift b/SWFrontUI/ShopwiseFrontEndUI/CartView.swift index f7d5414..29ba56c 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/CartView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/CartView.swift @@ -3,53 +3,59 @@ import SwiftUI struct CartView: View { @State private var showShoppingList = false @EnvironmentObject private var cartStore: CartStore + @State private var expandedRecipeIds: Set = [] var body: some View { List { - Section("Items") { - if cartStore.items.isEmpty { + if cartStore.items.isEmpty { + Section("Items") { Text("Cart is empty") .foregroundStyle(.secondary) - } else { - ForEach(cartStore.items) { item in - HStack(alignment: .top, spacing: 12) { - VStack(alignment: .leading, spacing: 4) { - Text(item.name) - .font(.headline) - Text(item.unit) - .font(.subheadline) - .foregroundStyle(.secondary) - Text(String(format: "$%.2f", item.price)) - .foregroundStyle(.secondary) - } - - Spacer() - - HStack(spacing: 10) { + } + } else { + if !recipeGroups.isEmpty { + Section("Recipes") { + ForEach(recipeGroups, id: \.id) { group in + VStack(alignment: .leading, spacing: 8) { Button { - cartStore.decrement(item) + toggle(group.id) } label: { - Image(systemName: "minus.circle") + HStack { + Text(group.title) + .font(.headline) + Spacer() + Text("\(group.items.count) items") + .font(.subheadline) + .foregroundStyle(.secondary) + Image(systemName: expandedRecipeIds.contains(group.id) ? "chevron.up" : "chevron.down") + .foregroundStyle(.secondary) + } } - .buttonStyle(.borderless) - - Text("\(item.quantity)") - .font(.headline) - .frame(minWidth: 24) + .buttonStyle(.plain) - Button { - cartStore.increment(item) - } label: { - Image(systemName: "plus.circle") + if expandedRecipeIds.contains(group.id) { + ForEach(group.items) { item in + itemRow(item) + } } - .buttonStyle(.borderless) } + .padding(.vertical, 4) } - .padding(.vertical, 4) } - .onDelete { indexSet in - for idx in indexSet { - cartStore.remove(cartStore.items[idx]) + } + + Section("Individual Items") { + if individualItems.isEmpty { + Text("No individual items") + .foregroundStyle(.secondary) + } else { + ForEach(individualItems) { item in + itemRow(item) + } + .onDelete { indexSet in + for idx in indexSet { + cartStore.remove(individualItems[idx]) + } } } } @@ -80,4 +86,77 @@ struct CartView: View { ShoppingListView() } } + + private var recipeGroups: [RecipeGroup] { + let grouped = Dictionary(grouping: cartStore.items.compactMap { item -> (String, String, CartLineItem)? in + guard let groupId = item.groupId else { return nil } + let title = item.groupTitle ?? "Recipe" + return (groupId, title, item) + }, by: { $0.0 }) + + return grouped.map { key, values in + let items = values.map { $0.2 } + let title = values.first?.1 ?? "Recipe" + return RecipeGroup(id: key, title: title, items: items) + } + .sorted { $0.title.localizedCaseInsensitiveCompare($1.title) == .orderedAscending } + } + + private var individualItems: [CartLineItem] { + cartStore.items.filter { $0.groupId == nil } + } + + private func toggle(_ id: String) { + if expandedRecipeIds.contains(id) { + expandedRecipeIds.remove(id) + } else { + expandedRecipeIds.insert(id) + } + } + + @ViewBuilder + private func itemRow(_ item: CartLineItem) -> some View { + HStack(alignment: .top, spacing: 12) { + VStack(alignment: .leading, spacing: 4) { + Text(item.name) + .font(.headline) + if !item.unit.isEmpty { + Text(item.unit) + .font(.subheadline) + .foregroundStyle(.secondary) + } + Text(String(format: "$%.2f", item.price)) + .foregroundStyle(.secondary) + } + + Spacer() + + HStack(spacing: 10) { + Button { + cartStore.decrement(item) + } label: { + Image(systemName: "minus.circle") + } + .buttonStyle(.borderless) + + Text("\(item.quantity)") + .font(.headline) + .frame(minWidth: 24) + + Button { + cartStore.increment(item) + } label: { + Image(systemName: "plus.circle") + } + .buttonStyle(.borderless) + } + } + .padding(.vertical, 4) + } +} + +private struct RecipeGroup: Identifiable { + let id: String + let title: String + let items: [CartLineItem] } diff --git a/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift b/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift index 6fa64a8..707c6b4 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift @@ -56,7 +56,7 @@ struct RecipeRow: Identifiable, Codable, Hashable { return items.isEmpty ? nil : items } - var difficultyText: String { + /*var difficultyText: String { let count = ingredientList.count if count <= 5 { return "Easy" } if count <= 10 { return "Medium" } @@ -67,5 +67,5 @@ struct RecipeRow: Identifiable, Codable, Hashable { let text = instructions ?? "" let sentences = text.components(separatedBy: ".").filter { !$0.trimmingCharacters(in: .whitespaces).isEmpty }.count return max(10, min(60, sentences * 5)) - } + }*/ } diff --git a/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift b/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift index 0cf064b..4ebbfb8 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift @@ -93,7 +93,7 @@ struct RecipeView: View { private func recipeCard(_ recipe: RecipeRow) -> some View { CardContainer { - HStack(spacing: 12) { + HStack(spacing: 14) { if let urlString = recipe.imageURL, let url = URL(string: urlString) { @@ -108,24 +108,31 @@ struct RecipeView: View { ProgressView() } } - .frame(width: 54, height: 54) + .frame(width: 67, height: 67) .background(Color(.systemGray5)) - .clipShape(RoundedRectangle(cornerRadius: 12)) + .clipShape(RoundedRectangle(cornerRadius: 14)) } else { - Circle() + RoundedRectangle(cornerRadius: 14) .fill(Color(.systemGray5)) - .frame(width: 54, height: 54) + .frame(width: 67, height: 67) + .overlay( + Image(systemName: "fork.knife") + .foregroundStyle(.secondary) + ) } - VStack(alignment: .leading, spacing: 4) { + VStack(alignment: .leading, spacing: 6) { Text(recipe.title) .font(.headline) .lineLimit(2) - Text("\(recipe.difficultyText) • \(recipe.estimatedMinutes) min") - .font(.subheadline) - .foregroundStyle(.secondary) + /*HStack(spacing: 8) { + Label(recipe.difficultyText, systemImage: "chart.bar") + Label("\(recipe.estimatedMinutes) min", systemImage: "clock") + } + .font(.subheadline) + .foregroundStyle(.secondary)*/ } Spacer() @@ -138,26 +145,41 @@ struct RecipeView: View { private func recipeExpanded(_ recipe: RecipeRow) -> some View { CardContainer { + VStack(alignment: .leading, spacing: 12) { + Text("Ingredients") + .font(.headline) + + ForEach(recipe.ingredientList, id: \.self) { item in + HStack(spacing: 10) { + Image(systemName: "checkmark.circle.fill") + .foregroundStyle(.secondary) + Text(item) + } + } + + if let instructions = recipe.instructions, + !instructions.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + Divider() + .padding(.vertical, 2) - Text("Ingredients") - .font(.headline) + Text("Instructions") + .font(.headline) - ForEach(recipe.ingredientList, id: \.self) { item in - HStack { - Image(systemName: "checkmark.circle") - Text(item) + Text(instructions) + .font(.subheadline) + .foregroundStyle(.secondary) } - } - Button { - for item in recipe.ingredientList { - cartStore.add(id: "\(recipe.id)::\(item)", name: item, unit: "", price: 0) + Button { + for item in recipe.ingredientList { + cartStore.add(id: "\(recipe.id)::\(item)", name: item, unit: "", price: 0) + } + } label: { + Label("Add Ingredients to Cart", systemImage: "cart.badge.plus") + .frame(maxWidth: .infinity) } - } label: { - Label("Add Ingredients to Cart", systemImage: "cart.badge.plus") - .frame(maxWidth: .infinity) + .buttonStyle(.borderedProminent) } - .buttonStyle(.borderedProminent) } } From 2a45c0242313dddbc3e6b791156ce778f7330063 Mon Sep 17 00:00:00 2001 From: James Date: Mon, 16 Mar 2026 14:52:48 -0700 Subject: [PATCH 06/14] Added item groups, so ingredients from the same recipes will be grouped together in cart. --- SWFrontUI/ShopwiseFrontEndUI/CartStore.swift | 11 +++++++++ SWFrontUI/ShopwiseFrontEndUI/CartView.swift | 24 ++++++++++++------- SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift | 16 +++++++++---- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/SWFrontUI/ShopwiseFrontEndUI/CartStore.swift b/SWFrontUI/ShopwiseFrontEndUI/CartStore.swift index a9d568c..88516e3 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/CartStore.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/CartStore.swift @@ -69,6 +69,17 @@ final class CartStore: ObservableObject { let id = "\(recipeId)::\(name)" if let idx = items.firstIndex(where: { $0.id == id }) { items[idx].quantity += 1 + if items[idx].groupId == nil { + items[idx] = CartLineItem( + id: items[idx].id, + name: items[idx].name, + unit: items[idx].unit, + price: items[idx].price, + quantity: items[idx].quantity, + groupId: recipeId, + groupTitle: recipeTitle + ) + } } else { items.append( CartLineItem( diff --git a/SWFrontUI/ShopwiseFrontEndUI/CartView.swift b/SWFrontUI/ShopwiseFrontEndUI/CartView.swift index 29ba56c..4b62bbb 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/CartView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/CartView.swift @@ -88,18 +88,24 @@ struct CartView: View { } private var recipeGroups: [RecipeGroup] { - let grouped = Dictionary(grouping: cartStore.items.compactMap { item -> (String, String, CartLineItem)? in - guard let groupId = item.groupId else { return nil } + let items = cartStore.items + var groups: [String: RecipeGroup] = [:] + + for item in items { + guard let groupId = item.groupId, !groupId.isEmpty else { continue } let title = item.groupTitle ?? "Recipe" - return (groupId, title, item) - }, by: { $0.0 }) - return grouped.map { key, values in - let items = values.map { $0.2 } - let title = values.first?.1 ?? "Recipe" - return RecipeGroup(id: key, title: title, items: items) + if let existing = groups[groupId] { + var newItems = existing.items + newItems.append(item) + groups[groupId] = RecipeGroup(id: existing.id, title: existing.title, items: newItems) + } else { + groups[groupId] = RecipeGroup(id: groupId, title: title, items: [item]) + } } - .sorted { $0.title.localizedCaseInsensitiveCompare($1.title) == .orderedAscending } + + return groups.values + .sorted { $0.title.localizedCaseInsensitiveCompare($1.title) == .orderedAscending } } private var individualItems: [CartLineItem] { diff --git a/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift b/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift index 4ebbfb8..9e85b9e 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift @@ -170,11 +170,17 @@ struct RecipeView: View { .foregroundStyle(.secondary) } - Button { - for item in recipe.ingredientList { - cartStore.add(id: "\(recipe.id)::\(item)", name: item, unit: "", price: 0) - } - } label: { + Button { + for item in recipe.ingredientList { + cartStore.add( + recipeId: String(recipe.id), + recipeTitle: recipe.title, + name: item, + unit: "", + price: 0 + ) + } + } label: { Label("Add Ingredients to Cart", systemImage: "cart.badge.plus") .frame(maxWidth: .infinity) } From 3782bc4ba28009a50eea5e298672862ee01c51a7 Mon Sep 17 00:00:00 2001 From: James Date: Mon, 16 Mar 2026 15:05:06 -0700 Subject: [PATCH 07/14] readded exclude certain items from recipe add --- SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift | 59 +++++++++++++------ 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift b/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift index 9e85b9e..b754b66 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift @@ -15,6 +15,7 @@ struct RecipeView: View { @State private var offset = 0 @State private var hasMore = true @State private var isLoadingMore = false + @State private var excludedIngredientsByRecipe: [Int: Set] = [:] private var filtered: [RecipeRow] { if query.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { @@ -150,11 +151,7 @@ struct RecipeView: View { .font(.headline) ForEach(recipe.ingredientList, id: \.self) { item in - HStack(spacing: 10) { - Image(systemName: "checkmark.circle.fill") - .foregroundStyle(.secondary) - Text(item) - } + ingredientRow(recipeId: recipe.id, item: item) } if let instructions = recipe.instructions, @@ -170,24 +167,52 @@ struct RecipeView: View { .foregroundStyle(.secondary) } - Button { - for item in recipe.ingredientList { - cartStore.add( - recipeId: String(recipe.id), - recipeTitle: recipe.title, - name: item, - unit: "", - price: 0 - ) - } - } label: { - Label("Add Ingredients to Cart", systemImage: "cart.badge.plus") + Button { + let excluded = excludedIngredientsByRecipe[recipe.id] ?? [] + for item in recipe.ingredientList where !excluded.contains(item) { + cartStore.add( + recipeId: String(recipe.id), + recipeTitle: recipe.title, + name: item, + unit: "", + price: 0 + ) + } + } label: { + Label("Add Selected Ingredients", systemImage: "cart.badge.plus") .frame(maxWidth: .infinity) } .buttonStyle(.borderedProminent) } } } + + private func toggleIngredient(recipeId: Int, item: String) { + var set = excludedIngredientsByRecipe[recipeId] ?? [] + if set.contains(item) { + set.remove(item) + } else { + set.insert(item) + } + excludedIngredientsByRecipe[recipeId] = set + } + + private func ingredientRow(recipeId: Int, item: String) -> some View { + let isExcluded = excludedIngredientsByRecipe[recipeId]?.contains(item) == true + + return Button { + toggleIngredient(recipeId: recipeId, item: item) + } label: { + HStack(spacing: 10) { + Image(systemName: isExcluded ? "minus.circle" : "checkmark.circle.fill") + .foregroundStyle(isExcluded ? .secondary : Color.green) + Text(item) + .foregroundStyle(isExcluded ? .secondary : .primary) + .strikethrough(isExcluded, color: .secondary) + } + } + .buttonStyle(.plain) + } @MainActor private func loadRecipes(reset: Bool = true) async { From efbd0882bb37155efe878946af34197fb71b05c2 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 17 Mar 2026 12:10:11 -0700 Subject: [PATCH 08/14] recipe view UI improvements --- SWFrontUI/ShopwiseFrontEndUI/Recipe.swift | 15 +++ SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift | 39 ++++++- .../ShopwiseFrontEndUI/ShoppingListView.swift | 109 ++++++++++++++---- 3 files changed, 133 insertions(+), 30 deletions(-) diff --git a/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift b/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift index 707c6b4..bcfb1ba 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift @@ -56,6 +56,21 @@ struct RecipeRow: Identifiable, Codable, Hashable { return items.isEmpty ? nil : items } + var instructionSteps: [String] { + guard let instructions, !instructions.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { + return [] + } + + let normalized = instructions + .replacingOccurrences(of: "\n", with: " ") + .replacingOccurrences(of: "\r", with: " ") + + return normalized + .components(separatedBy: CharacterSet(charactersIn: ".!?")) + .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) } + .filter { !$0.isEmpty } + } + /*var difficultyText: String { let count = ingredientList.count if count <= 5 { return "Easy" } diff --git a/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift b/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift index b754b66..e259691 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift @@ -16,6 +16,7 @@ struct RecipeView: View { @State private var hasMore = true @State private var isLoadingMore = false @State private var excludedIngredientsByRecipe: [Int: Set] = [:] + @State private var expandedInstructionIds: Set = [] private var filtered: [RecipeRow] { if query.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { @@ -159,12 +160,32 @@ struct RecipeView: View { Divider() .padding(.vertical, 2) - Text("Instructions") - .font(.headline) + Button { + toggleInstructions(recipe.id) + } label: { + HStack { + Text("Instructions") + .font(.headline) + Spacer() + Image(systemName: expandedInstructionIds.contains(recipe.id) ? "chevron.up" : "chevron.down") + .foregroundStyle(.secondary) + } + } + .buttonStyle(.plain) - Text(instructions) - .font(.subheadline) - .foregroundStyle(.secondary) + if expandedInstructionIds.contains(recipe.id) { + if !recipe.instructionSteps.isEmpty { + ForEach(Array(recipe.instructionSteps.enumerated()), id: \.offset) { index, step in + Text("\(index + 1). \(step)") + .font(.subheadline) + .foregroundStyle(.secondary) + } + } else { + Text(instructions) + .font(.subheadline) + .foregroundStyle(.secondary) + } + } } Button { @@ -197,6 +218,14 @@ struct RecipeView: View { excludedIngredientsByRecipe[recipeId] = set } + private func toggleInstructions(_ recipeId: Int) { + if expandedInstructionIds.contains(recipeId) { + expandedInstructionIds.remove(recipeId) + } else { + expandedInstructionIds.insert(recipeId) + } + } + private func ingredientRow(recipeId: Int, item: String) -> some View { let isExcluded = excludedIngredientsByRecipe[recipeId]?.contains(item) == true diff --git a/SWFrontUI/ShopwiseFrontEndUI/ShoppingListView.swift b/SWFrontUI/ShopwiseFrontEndUI/ShoppingListView.swift index 24421e7..5f86e21 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/ShoppingListView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/ShoppingListView.swift @@ -18,35 +18,30 @@ struct ShoppingListView: View { var body: some View { List { - Section("Shopping List") { - if cartStore.items.isEmpty { + if cartStore.items.isEmpty { + Section("Shopping List") { Text("No items to shop for.") .foregroundStyle(.secondary) - } else { - ForEach(cartStore.items) { item in - Button { - toggle(item.id) - } label: { - HStack(spacing: 12) { - Image(systemName: checkedIDs.contains(item.id) ? "checkmark.circle.fill" : "circle") - .imageScale(.large) - - VStack(alignment: .leading, spacing: 2) { - Text(item.name) - .strikethrough(checkedIDs.contains(item.id)) - Text("\(item.quantity) × \(item.unit)") - .font(.subheadline) - .foregroundStyle(.secondary) - } - - Spacer() - - Text(String(format: "$%.2f", item.price * Double(item.quantity))) - .foregroundStyle(.secondary) - .monospacedDigit() + } + } else { + if !recipeGroups.isEmpty { + ForEach(recipeGroups) { group in + Section(group.title) { + ForEach(group.items) { item in + itemRow(item) } } - .buttonStyle(.plain) + } + } + + Section("Individual Items") { + if individualItems.isEmpty { + Text("No individual items") + .foregroundStyle(.secondary) + } else { + ForEach(individualItems) { item in + itemRow(item) + } } } } @@ -120,4 +115,68 @@ struct ShoppingListView: View { checkedIDs.insert(id) } } + + private var recipeGroups: [RecipeGroup] { + let items = cartStore.items + var groups: [String: RecipeGroup] = [:] + + for item in items { + guard let groupId = item.groupId, !groupId.isEmpty else { continue } + let title = item.groupTitle ?? "Recipe" + + if let existing = groups[groupId] { + var newItems = existing.items + newItems.append(item) + groups[groupId] = RecipeGroup(id: existing.id, title: existing.title, items: newItems) + } else { + groups[groupId] = RecipeGroup(id: groupId, title: title, items: [item]) + } + } + + return groups.values + .sorted { $0.title.localizedCaseInsensitiveCompare($1.title) == .orderedAscending } + } + + private var individualItems: [CartLineItem] { + cartStore.items.filter { $0.groupId == nil } + } + + @ViewBuilder + private func itemRow(_ item: CartLineItem) -> some View { + Button { + toggle(item.id) + } label: { + HStack(spacing: 12) { + Image(systemName: checkedIDs.contains(item.id) ? "checkmark.circle.fill" : "circle") + .imageScale(.large) + + VStack(alignment: .leading, spacing: 2) { + Text(item.name) + .strikethrough(checkedIDs.contains(item.id)) + if !item.unit.isEmpty { + Text("\(item.quantity) × \(item.unit)") + .font(.subheadline) + .foregroundStyle(.secondary) + } else { + Text("\(item.quantity)") + .font(.subheadline) + .foregroundStyle(.secondary) + } + } + + Spacer() + + Text(String(format: "$%.2f", item.price * Double(item.quantity))) + .foregroundStyle(.secondary) + .monospacedDigit() + } + } + .buttonStyle(.plain) + } +} + +private struct RecipeGroup: Identifiable { + let id: String + let title: String + let items: [CartLineItem] } From 2daba8593f4909bf3e89b6ef7030426f5dd99dbe Mon Sep 17 00:00:00 2001 From: James Date: Tue, 17 Mar 2026 13:25:49 -0700 Subject: [PATCH 09/14] Onboarding survey UI improvements, account screen now display username as well. --- SWFrontUI/ShopwiseFrontEndUI/AppToolbar.swift | 16 +--- .../ShopwiseFrontEndUI/AuthManager.swift | 61 +++----------- SWFrontUI/ShopwiseFrontEndUI/CartView.swift | 10 +++ .../OnboardingSurveyView.swift | 82 +++++++++++++------ .../ShopwiseFrontEndUI/ProfileView.swift | 46 ++++++++++- .../ShopwiseFrontEndUI/SettingsView.swift | 21 +++-- .../ShopwiseFrontEndUI/ShoppingListView.swift | 38 ++++++++- 7 files changed, 174 insertions(+), 100 deletions(-) diff --git a/SWFrontUI/ShopwiseFrontEndUI/AppToolbar.swift b/SWFrontUI/ShopwiseFrontEndUI/AppToolbar.swift index 311c036..11b6fd2 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/AppToolbar.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/AppToolbar.swift @@ -5,18 +5,10 @@ struct AppToolbar: ViewModifier { content .toolbar { ToolbarItem(placement: .topBarTrailing) { - HStack(spacing: 14) { - NavigationLink { - SettingsView() - } label: { - Image(systemName: "gearshape") - } - - NavigationLink { - ProfileView() - } label: { - Image(systemName: "person.crop.circle") - } + NavigationLink { + ProfileView() + } label: { + Image(systemName: "person.crop.circle") } } } diff --git a/SWFrontUI/ShopwiseFrontEndUI/AuthManager.swift b/SWFrontUI/ShopwiseFrontEndUI/AuthManager.swift index 3be47b8..0c96f61 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/AuthManager.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/AuthManager.swift @@ -1,51 +1,3 @@ -// -// AuthManager.swift -// ShopwiseFrontEndUI -// -// Created by Nicholas Castellanos on 2/2/26. -// Edited by Nicholas Castellanos on 2/24/26 - -//import SwiftUI -//import Combine -// -//@MainActor -//final class AuthManager: ObservableObject { -// @Published var isSignedIn: Bool = false -// @Published var userEmail: String? = nil -// -// func signIn(email: String, password: String) async throws { -// guard !email.isEmpty, !password.isEmpty else { -// throw AuthError.missingFields -// } -// self.userEmail = email -// self.isSignedIn = true -// } -// -// func signUp(name: String, email: String, password: String) async throws { -// guard !name.isEmpty, !email.isEmpty, !password.isEmpty else { -// throw AuthError.missingFields -// } -// self.userEmail = email -// self.isSignedIn = true -// } -// -// func signOut() { -// userEmail = nil -// isSignedIn = false -// } -// -// enum AuthError: LocalizedError { -// case missingFields -// var errorDescription: String? { "Please fill out all fields." } -// } -//} -// -// -//#Preview { -// AuthView() -// .environmentObject(AuthManager()) -//} - import Foundation import SwiftUI import Combine @@ -69,6 +21,7 @@ final class AuthManager: ObservableObject { @Published var isSignedIn: Bool = false @Published var userEmail: String? = nil @Published var userID: String? = nil + @Published var userName: String? = nil // Tokens private(set) var accessToken: String? = nil @@ -116,6 +69,7 @@ final class AuthManager: ObservableObject { self.applySession(session) self.userEmail = email self.userID = session.user?.id + self.userName = session.user?.user_metadata?.name } } @@ -202,12 +156,14 @@ final class AuthManager: ObservableObject { self.userEmail = user.email self.isSignedIn = true self.userID = user.id + self.userName = user.user_metadata?.name } catch { // token might be expired -> try refresh if let refreshed = try? await refreshSession() { self.userEmail = refreshed.user?.email self.isSignedIn = true self.userID = refreshed.user?.id + self.userName = refreshed.user?.user_metadata?.name } else { clearSession() } @@ -256,6 +212,7 @@ final class AuthManager: ObservableObject { self.accessToken = session.access_token self.refreshToken = session.refresh_token self.userID = session.user?.id + self.userName = session.user?.user_metadata?.name saveTokensToStorage() self.isSignedIn = true } @@ -265,6 +222,7 @@ final class AuthManager: ObservableObject { self.refreshToken = nil self.userEmail = nil self.userID = nil + self.userName = nil self.isSignedIn = false deleteTokensFromStorage() } @@ -365,6 +323,11 @@ struct SupabaseSession: Codable { struct SupabaseUser: Codable { let id: String? let email: String? + let user_metadata: UserMetadata? +} + +struct UserMetadata: Codable { + let name: String? } struct SupabaseError: Codable { @@ -425,7 +388,7 @@ extension AuthManager { } } -//Onboard survey fetch/save +//Onboard survey fetch/save struct UserPreferencesRow: Codable { let user_id: String let diet_preferences: [String] diff --git a/SWFrontUI/ShopwiseFrontEndUI/CartView.swift b/SWFrontUI/ShopwiseFrontEndUI/CartView.swift index 4b62bbb..a11b76c 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/CartView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/CartView.swift @@ -79,6 +79,16 @@ struct CartView: View { } .disabled(cartStore.items.isEmpty) } + + if !cartStore.items.isEmpty { + Section { + Button(role: .destructive) { + cartStore.clear() + } label: { + Text("Clear Cart") + } + } + } } .navigationTitle("Cart") .appToolbar() diff --git a/SWFrontUI/ShopwiseFrontEndUI/OnboardingSurveyView.swift b/SWFrontUI/ShopwiseFrontEndUI/OnboardingSurveyView.swift index ef884db..3204c3a 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/OnboardingSurveyView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/OnboardingSurveyView.swift @@ -17,33 +17,49 @@ struct OnboardingSurveyView: View { let allergyOptions = [ "Peanuts", "Tree Nuts", "Dairy", "Eggs", - "Soy", "Wheat", "Shellfish", "Fish", "Sesame" + "Soy", "Wheat", "Shellfish", "Fish" ] var onComplete: (() -> Void)? = nil var body: some View { List { - Section("Diet Preferences") { - ForEach(dietOptions, id: \.self) { option in - PreferenceRow( - title: option, - isSelected: selectedDiets.contains(option) - ) { - toggle(option, in: &selectedDiets) + Section { + PreferenceChipGrid( + options: dietOptions, + selected: selectedDiets, + onToggle: { toggle($0, in: &selectedDiets) } + ) + .listRowInsets(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16)) + + if !selectedDiets.isEmpty { + Button("Clear Diet Preferences") { + selectedDiets.removeAll() } } + } header: { + Text("Diet Preferences") + } footer: { + Text("Pick any that apply. You can update these anytime.") } - Section("Allergies") { - ForEach(allergyOptions, id: \.self) { option in - PreferenceRow( - title: option, - isSelected: selectedAllergies.contains(option) - ) { - toggle(option, in: &selectedAllergies) + Section { + PreferenceChipGrid( + options: allergyOptions, + selected: selectedAllergies, + onToggle: { toggle($0, in: &selectedAllergies) } + ) + .listRowInsets(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16)) + + if !selectedAllergies.isEmpty { + Button("Clear Allergies") { + selectedAllergies.removeAll() } } + } header: { + Text("Allergies") + } footer: { + Text("We’ll filter recipes and suggestions based on these.") } if let errorMessage { @@ -120,20 +136,34 @@ struct OnboardingSurveyView: View { } } -struct PreferenceRow: View { - let title: String - let isSelected: Bool - let action: () -> Void +private struct PreferenceChipGrid: View { + let options: [String] + let selected: Set + let onToggle: (String) -> Void + + private let columns = [ + GridItem(.adaptive(minimum: 110), spacing: 10) + ] var body: some View { - Button(action: action) { - HStack { - Text(title) - Spacer() - Image(systemName: isSelected ? "checkmark.circle.fill" : "circle") - .foregroundStyle(isSelected ? .blue : .secondary) + LazyVGrid(columns: columns, spacing: 10) { + ForEach(options, id: \.self) { option in + let isSelected = selected.contains(option) + Button { + onToggle(option) + } label: { + Text(option) + .font(.subheadline.weight(.semibold)) + .padding(.horizontal, 12) + .padding(.vertical, 8) + .frame(maxWidth: .infinity) + .background(isSelected ? Color.blue.opacity(0.18) : Color(.systemGray6)) + .foregroundStyle(isSelected ? Color.blue : Color.primary) + .clipShape(Capsule()) + } + .buttonStyle(.plain) } } - .buttonStyle(.plain) + .padding(.vertical, 2) } } diff --git a/SWFrontUI/ShopwiseFrontEndUI/ProfileView.swift b/SWFrontUI/ShopwiseFrontEndUI/ProfileView.swift index ab5aa69..80b9d3e 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/ProfileView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/ProfileView.swift @@ -1,7 +1,10 @@ import SwiftUI +import UIKit struct ProfileView: View { @EnvironmentObject var auth: AuthManager + @EnvironmentObject private var cartStore: CartStore + @Environment(\.openURL) private var openURL var body: some View { List { @@ -12,10 +15,10 @@ struct ProfileView: View { .foregroundStyle(.blue) VStack(alignment: .leading) { - Text(auth.userEmail ?? "No email") + Text(greetingText) .font(.headline) - Text("Signed in") + Text(auth.userEmail ?? "No email") .font(.caption) .foregroundStyle(.secondary) } @@ -31,6 +34,21 @@ struct ProfileView: View { } } + Section("Settings") { + Button("Location Services") { + openAppSettings() + } + } + + Section("App Info") { + HStack { + Text("Version") + Spacer() + Text(appVersion) + .foregroundStyle(.secondary) + } + } + Section { Button(role: .destructive) { Task { await auth.signOut() } @@ -39,6 +57,28 @@ struct ProfileView: View { } } } - .navigationTitle("Profile") + .navigationTitle("Account & Settings") + } + + private var appVersion: String { + let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String + let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String + if let version, let build { + return "\(version) (\(build))" + } + return version ?? "1.0" + } + + private var greetingText: String { + if let name = auth.userName, !name.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + return name + } + return "Hello" + } + + private func openAppSettings() { + if let url = URL(string: UIApplication.openSettingsURLString) { + openURL(url) + } } } diff --git a/SWFrontUI/ShopwiseFrontEndUI/SettingsView.swift b/SWFrontUI/ShopwiseFrontEndUI/SettingsView.swift index ab559b8..925f604 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/SettingsView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/SettingsView.swift @@ -1,16 +1,19 @@ import SwiftUI +import UIKit struct SettingsView: View { - @AppStorage("notificationsEnabled") private var notificationsEnabled = true - @AppStorage("locationEnabled") private var locationEnabled = true - @AppStorage("darkModeEnabled") private var darkModeEnabled = false + @Environment(\.openURL) private var openURL var body: some View { List { Section("Preferences") { - Toggle("Enable Notifications", isOn: $notificationsEnabled) - Toggle("Use Location Services", isOn: $locationEnabled) - Toggle("Dark Mode", isOn: $darkModeEnabled) + Button("Notification Settings") { + openAppSettings() + } + + Button("Location Services") { + openAppSettings() + } } Section("Support") { @@ -34,4 +37,10 @@ struct SettingsView: View { } .navigationTitle("Settings") } + + private func openAppSettings() { + if let url = URL(string: UIApplication.openSettingsURLString) { + openURL(url) + } + } } diff --git a/SWFrontUI/ShopwiseFrontEndUI/ShoppingListView.swift b/SWFrontUI/ShopwiseFrontEndUI/ShoppingListView.swift index 5f86e21..eb2e409 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/ShoppingListView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/ShoppingListView.swift @@ -5,6 +5,7 @@ struct ShoppingListView: View { @Environment(\.dismiss) private var dismiss @State private var checkedIDs: Set = [] + @State private var expandedRecipeIds: Set = [] private var checkedTotal: Double { cartStore.items @@ -25,11 +26,32 @@ struct ShoppingListView: View { } } else { if !recipeGroups.isEmpty { - ForEach(recipeGroups) { group in - Section(group.title) { - ForEach(group.items) { item in - itemRow(item) + Section("Recipes") { + ForEach(recipeGroups) { group in + VStack(alignment: .leading, spacing: 8) { + Button { + toggleRecipeGroup(group.id) + } label: { + HStack { + Text(group.title) + .font(.headline) + Spacer() + Text("\(group.items.count) items") + .font(.subheadline) + .foregroundStyle(.secondary) + Image(systemName: expandedRecipeIds.contains(group.id) ? "chevron.up" : "chevron.down") + .foregroundStyle(.secondary) + } + } + .buttonStyle(.plain) + + if expandedRecipeIds.contains(group.id) { + ForEach(group.items) { item in + itemRow(item) + } + } } + .padding(.vertical, 4) } } } @@ -116,6 +138,14 @@ struct ShoppingListView: View { } } + private func toggleRecipeGroup(_ id: String) { + if expandedRecipeIds.contains(id) { + expandedRecipeIds.remove(id) + } else { + expandedRecipeIds.insert(id) + } + } + private var recipeGroups: [RecipeGroup] { let items = cartStore.items var groups: [String: RecipeGroup] = [:] From 061f75d681e27aed88bf75f2ab7e7d57abdbbf7b Mon Sep 17 00:00:00 2001 From: James Date: Tue, 17 Mar 2026 14:28:52 -0700 Subject: [PATCH 10/14] Changed UI spacing for UI modules, Recipe add button now display # of items adding, Better recipe instruction parsing. Changed some spacing values on search view. --- SWFrontUI/ShopwiseFrontEndUI/Recipe.swift | 30 +++++++++++++++++-- SWFrontUI/ShopwiseFrontEndUI/RecipeView.swift | 24 ++++++++------- SWFrontUI/ShopwiseFrontEndUI/SearchView.swift | 23 +++++++++++--- SWFrontUI/ShopwiseFrontEndUI/UIModules.swift | 14 ++++++--- 4 files changed, 70 insertions(+), 21 deletions(-) diff --git a/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift b/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift index bcfb1ba..0437b20 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/Recipe.swift @@ -1,4 +1,5 @@ import Foundation +import NaturalLanguage struct RecipeRow: Identifiable, Codable, Hashable { let id: Int @@ -62,8 +63,33 @@ struct RecipeRow: Identifiable, Codable, Hashable { } let normalized = instructions - .replacingOccurrences(of: "\n", with: " ") - .replacingOccurrences(of: "\r", with: " ") + .replacingOccurrences(of: "\r\n", with: "\n") + .replacingOccurrences(of: "\r", with: "\n") + + let paragraphs = normalized + .components(separatedBy: "\n") + .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) } + .filter { !$0.isEmpty } + + if paragraphs.count >= 2 { + return paragraphs + } + + if #available(iOS 12.0, *) { + let tokenizer = NLTokenizer(unit: .sentence) + tokenizer.string = normalized + var steps: [String] = [] + tokenizer.enumerateTokens(in: normalized.startIndex..: View { var body: some View { content - .padding(12) - .background(Color(.secondarySystemBackground)) - .clipShape(RoundedRectangle(cornerRadius: 16, style: .continuous)) + .padding(14) + .background( + RoundedRectangle(cornerRadius: 18, style: .continuous) + .fill(Color(.secondarySystemBackground)) + ) + .overlay( + RoundedRectangle(cornerRadius: 18, style: .continuous) + .stroke(Color.black.opacity(0.04), lineWidth: 1) + ) + .shadow(color: Color.black.opacity(0.06), radius: 8, x: 0, y: 3) } } @@ -74,4 +81,3 @@ struct ItemCardView: View { } } } - From a7d47dc6e096790c1094c0580a4668febb862e99 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 17 Mar 2026 14:51:19 -0700 Subject: [PATCH 11/14] Shopping Cart View UI improvements --- SWFrontUI/ShopwiseFrontEndUI/CartView.swift | 77 ++++++++++++++++----- 1 file changed, 59 insertions(+), 18 deletions(-) diff --git a/SWFrontUI/ShopwiseFrontEndUI/CartView.swift b/SWFrontUI/ShopwiseFrontEndUI/CartView.swift index a11b76c..92fbd61 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/CartView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/CartView.swift @@ -7,6 +7,31 @@ struct CartView: View { var body: some View { List { + if !cartStore.items.isEmpty { + Section("Summary") { + HStack { + VStack(alignment: .leading, spacing: 2) { + Text("Total Items") + .font(.subheadline) + .foregroundStyle(.secondary) + Text("\(cartStore.itemCount)") + .font(.title3.weight(.semibold)) + } + + Spacer() + + VStack(alignment: .trailing, spacing: 2) { + Text("Total") + .font(.subheadline) + .foregroundStyle(.secondary) + Text(String(format: "$%.2f", cartStore.total)) + .font(.title3.weight(.semibold)) + .monospacedDigit() + } + } + } + } + if cartStore.items.isEmpty { Section("Items") { Text("Cart is empty") @@ -16,17 +41,19 @@ struct CartView: View { if !recipeGroups.isEmpty { Section("Recipes") { ForEach(recipeGroups, id: \.id) { group in - VStack(alignment: .leading, spacing: 8) { + VStack(alignment: .leading, spacing: 10) { Button { toggle(group.id) } label: { - HStack { - Text(group.title) - .font(.headline) + HStack(alignment: .firstTextBaseline) { + VStack(alignment: .leading, spacing: 2) { + Text(group.title) + .font(.headline) + Text("\(group.items.count) items • \(formatCurrency(groupSubtotal(for: group)))") + .font(.subheadline) + .foregroundStyle(.secondary) + } Spacer() - Text("\(group.items.count) items") - .font(.subheadline) - .foregroundStyle(.secondary) Image(systemName: expandedRecipeIds.contains(group.id) ? "chevron.up" : "chevron.down") .foregroundStyle(.secondary) } @@ -34,12 +61,27 @@ struct CartView: View { .buttonStyle(.plain) if expandedRecipeIds.contains(group.id) { - ForEach(group.items) { item in + Divider() + ForEach(Array(group.items.enumerated()), id: \.element.id) { index, item in itemRow(item) + if index != group.items.count - 1 { + Divider() + } } } } - .padding(.vertical, 4) + .padding(.vertical, 8) + .padding(.horizontal, 12) + .background( + RoundedRectangle(cornerRadius: 16, style: .continuous) + .fill(Color(.secondarySystemBackground)) + ) + .overlay( + RoundedRectangle(cornerRadius: 16, style: .continuous) + .stroke(Color.black.opacity(0.04), lineWidth: 1) + ) + .shadow(color: Color.black.opacity(0.06), radius: 8, x: 0, y: 3) + .listRowInsets(EdgeInsets(top: 6, leading: 16, bottom: 6, trailing: 16)) } } } @@ -61,15 +103,6 @@ struct CartView: View { } } - Section("Summary") { - HStack { - Text("Total") - Spacer() - Text(String(format: "$%.2f", cartStore.total)) - .foregroundStyle(.secondary) - } - } - Section { Button { showShoppingList = true @@ -169,6 +202,14 @@ struct CartView: View { } .padding(.vertical, 4) } + + private func groupSubtotal(for group: RecipeGroup) -> Double { + group.items.reduce(0) { $0 + ($1.price * Double($1.quantity)) } + } + + private func formatCurrency(_ value: Double) -> String { + String(format: "$%.2f", value) + } } private struct RecipeGroup: Identifiable { From 6f76fe4d4815228fc1c20856d2e1a41e2fdcea44 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 17 Mar 2026 14:53:57 -0700 Subject: [PATCH 12/14] Combined Settings and Account Views --- SWFrontUI/ShopwiseFrontEndUI/SettingsView.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SWFrontUI/ShopwiseFrontEndUI/SettingsView.swift b/SWFrontUI/ShopwiseFrontEndUI/SettingsView.swift index 925f604..6656f1a 100644 --- a/SWFrontUI/ShopwiseFrontEndUI/SettingsView.swift +++ b/SWFrontUI/ShopwiseFrontEndUI/SettingsView.swift @@ -1,4 +1,4 @@ -import SwiftUI +/*import SwiftUI import UIKit struct SettingsView: View { @@ -43,4 +43,4 @@ struct SettingsView: View { openURL(url) } } -} +}*/ From a24b30b0256d8c5a87ac7c537c3ed7342b1dac8b Mon Sep 17 00:00:00 2001 From: James Chang <111487418+JamesChang039@users.noreply.github.com> Date: Tue, 17 Mar 2026 14:56:37 -0700 Subject: [PATCH 13/14] Delete SWFrontUI/ShopwiseFrontEndUI.xcodeproj/xcuserdata/jchang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist --- .../xcdebugger/Breakpoints_v2.xcbkptlist | 24 ------------------- 1 file changed, 24 deletions(-) delete mode 100644 SWFrontUI/ShopwiseFrontEndUI.xcodeproj/xcuserdata/jchang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist diff --git a/SWFrontUI/ShopwiseFrontEndUI.xcodeproj/xcuserdata/jchang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SWFrontUI/ShopwiseFrontEndUI.xcodeproj/xcuserdata/jchang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index e8ba86e..0000000 --- a/SWFrontUI/ShopwiseFrontEndUI.xcodeproj/xcuserdata/jchang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - From 667a35e01f359225e0a210aff838647a0424d1f7 Mon Sep 17 00:00:00 2001 From: James Chang <111487418+JamesChang039@users.noreply.github.com> Date: Tue, 17 Mar 2026 14:56:51 -0700 Subject: [PATCH 14/14] Delete SWFrontUI/ShopwiseFrontEndUI.xcodeproj/project.xcworkspace/xcuserdata/jchang.xcuserdatad/UserInterfaceState.xcuserstate --- .../UserInterfaceState.xcuserstate | Bin 151470 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 SWFrontUI/ShopwiseFrontEndUI.xcodeproj/project.xcworkspace/xcuserdata/jchang.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/SWFrontUI/ShopwiseFrontEndUI.xcodeproj/project.xcworkspace/xcuserdata/jchang.xcuserdatad/UserInterfaceState.xcuserstate b/SWFrontUI/ShopwiseFrontEndUI.xcodeproj/project.xcworkspace/xcuserdata/jchang.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 6431e5b53390fb40d676a957a7d88cd7a4e14137..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151470 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

  • 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