From 662fece439e17f739d38be9de2953f7a2cee3c0d Mon Sep 17 00:00:00 2001 From: NinjaCheetah <58050615+NinjaCheetah@users.noreply.github.com> Date: Wed, 12 Nov 2025 23:26:15 -0500 Subject: [PATCH] Fixed dietary restrictions not immediately applying to menu The vegetarian/vegan/no beef/no pork toggles will now immediately update the menu listing as intended. --- RIT Dining.xcodeproj/project.pbxproj | 4 +-- .../Data/MenuDietaryRestrictionsModel.swift | 29 ++++++++++++++++--- .../Menus/MenuDietaryRestrictionsSheet.swift | 2 +- RIT Dining/Views/Menus/MenuView.swift | 4 +-- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/RIT Dining.xcodeproj/project.pbxproj b/RIT Dining.xcodeproj/project.pbxproj index 58d258f..30f0d3d 100644 --- a/RIT Dining.xcodeproj/project.pbxproj +++ b/RIT Dining.xcodeproj/project.pbxproj @@ -265,7 +265,7 @@ CODE_SIGN_ENTITLEMENTS = "RIT Dining/RIT Dining.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 20; + CURRENT_PROJECT_VERSION = 21; DEVELOPMENT_TEAM = 5GF7GKNTK4; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; @@ -300,7 +300,7 @@ CODE_SIGN_ENTITLEMENTS = "RIT Dining/RIT Dining.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 20; + CURRENT_PROJECT_VERSION = 21; DEVELOPMENT_TEAM = 5GF7GKNTK4; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; diff --git a/RIT Dining/Data/MenuDietaryRestrictionsModel.swift b/RIT Dining/Data/MenuDietaryRestrictionsModel.swift index 57f21c9..f17c6c9 100644 --- a/RIT Dining/Data/MenuDietaryRestrictionsModel.swift +++ b/RIT Dining/Data/MenuDietaryRestrictionsModel.swift @@ -9,8 +9,29 @@ import SwiftUI class MenuDietaryRestrictionsModel: ObservableObject { var dietaryRestrictions = DietaryRestrictions() - @AppStorage("isVegetarian") var isVegetarian: Bool = false - @AppStorage("isVegan") var isVegan: Bool = false - @AppStorage("noBeef") var noBeef: Bool = false - @AppStorage("noPork") var noPork: Bool = false + + // I thought these could be @AppStorage keys but apparently not, because SwiftUI would subscribe to updates from those if + // they aren't being used directly inside the view. + @Published var isVegetarian: Bool { + didSet { UserDefaults.standard.set(isVegetarian, forKey: "isVegetarian") } + } + + @Published var isVegan: Bool { + didSet { UserDefaults.standard.set(isVegan, forKey: "isVegan") } + } + + @Published var noBeef: Bool { + didSet { UserDefaults.standard.set(noBeef, forKey: "noBeef") } + } + + @Published var noPork: Bool { + didSet { UserDefaults.standard.set(noPork, forKey: "noPork") } + } + + init() { + self.isVegetarian = UserDefaults.standard.bool(forKey: "isVegetarian") + self.isVegan = UserDefaults.standard.bool(forKey: "isVegan") + self.noBeef = UserDefaults.standard.bool(forKey: "noBeef") + self.noPork = UserDefaults.standard.bool(forKey: "noPork") + } } diff --git a/RIT Dining/Views/Menus/MenuDietaryRestrictionsSheet.swift b/RIT Dining/Views/Menus/MenuDietaryRestrictionsSheet.swift index b947054..3663a6f 100644 --- a/RIT Dining/Views/Menus/MenuDietaryRestrictionsSheet.swift +++ b/RIT Dining/Views/Menus/MenuDietaryRestrictionsSheet.swift @@ -9,7 +9,7 @@ import SwiftUI struct MenuDietaryRestrictionsSheet: View { @Environment(\.dismiss) var dismiss - @Binding var dietaryRestrictionsModel: MenuDietaryRestrictionsModel + @ObservedObject var dietaryRestrictionsModel: MenuDietaryRestrictionsModel var body: some View { NavigationView { diff --git a/RIT Dining/Views/Menus/MenuView.swift b/RIT Dining/Views/Menus/MenuView.swift index 02c35f8..c048ce5 100644 --- a/RIT Dining/Views/Menus/MenuView.swift +++ b/RIT Dining/Views/Menus/MenuView.swift @@ -17,7 +17,7 @@ struct MenuView: View { @State private var rotationDegrees: Double = 0 @State private var selectedMealPeriod: Int = 0 @State private var openPeriods: [Int] = [] - @State private var dietaryRestrictionsModel = MenuDietaryRestrictionsModel() + @StateObject private var dietaryRestrictionsModel = MenuDietaryRestrictionsModel() @State private var showingDietaryRestrictionsSheet: Bool = false private var animation: Animation { @@ -225,7 +225,7 @@ struct MenuView: View { } } .sheet(isPresented: $showingDietaryRestrictionsSheet) { - MenuDietaryRestrictionsSheet(dietaryRestrictionsModel: $dietaryRestrictionsModel) + MenuDietaryRestrictionsSheet(dietaryRestrictionsModel: dietaryRestrictionsModel) } } }