diff --git a/berkeley-mobile/Common/BMSegmentedControlView.swift b/berkeley-mobile/Common/BMSegmentedControlView.swift index 14e9d44bf..1dfaa09ec 100644 --- a/berkeley-mobile/Common/BMSegmentedControlView.swift +++ b/berkeley-mobile/Common/BMSegmentedControlView.swift @@ -75,4 +75,3 @@ struct BMSegmentedControlView: View { } return PreviewWrapper() } - diff --git a/berkeley-mobile/Home/Dining/DiningDataSource/BMDiningLocation.swift b/berkeley-mobile/Home/Dining/DiningDataSource/BMDiningLocation.swift index ca4a10635..6a274a106 100644 --- a/berkeley-mobile/Home/Dining/DiningDataSource/BMDiningLocation.swift +++ b/berkeley-mobile/Home/Dining/DiningDataSource/BMDiningLocation.swift @@ -54,6 +54,10 @@ struct BMDiningHall: SearchItem, HasLocation, HasPhoneNumber, HasImage, HasOpenC self.icon = UIImage(systemName: "fork.knife") self.id = documentID } + + func getCategoriesAndMenuItems(for mealType: BMMeal.BMMealType) -> [BMMealCategory] { + return meals[mealType]?.categoriesAndMenuItems ?? [] + } } @@ -95,6 +99,10 @@ struct BMMeal: Codable, Hashable { case lunch = "Lunch" case dinner = "Dinner" case other = "Other" + + static var regularMealTypes: [BMMealType] { + return [.breakfast, .lunch, .dinner] + } } let mealType: BMMealType diff --git a/berkeley-mobile/Home/Dining/DiningDetailView.swift b/berkeley-mobile/Home/Dining/DiningDetailView.swift index ccca0118c..cda65c117 100644 --- a/berkeley-mobile/Home/Dining/DiningDetailView.swift +++ b/berkeley-mobile/Home/Dining/DiningDetailView.swift @@ -12,6 +12,7 @@ import SwiftUI // MARK: - DiningDetailView struct DiningDetailView: View { + @Environment(DiningHallsViewModel.self) private var viewModel var diningHall: BMDiningHall @@ -23,13 +24,15 @@ struct DiningDetailView: View { } private var categoriesAndMenuItems: [BMMealCategory] { - switch selectedTabIndex { - case 0: - return diningHall.meals[BMMeal.BMMealType.breakfast]?.categoriesAndMenuItems ?? [] - case 1: - return diningHall.meals[BMMeal.BMMealType.lunch]?.categoriesAndMenuItems ?? [] - default: - return diningHall.meals[BMMeal.BMMealType.dinner]?.categoriesAndMenuItems ?? [] + let selectedTabMealType = BMMeal.BMMealType(rawValue: filteredTabNames[selectedTabIndex])! + return diningHall.getCategoriesAndMenuItems(for: selectedTabMealType) + } + + private var filteredTabNames: [String] { + return BMMeal.BMMealType.regularMealTypes.filter { + !diningHall.getCategoriesAndMenuItems(for: $0).isEmpty + }.map { + $0.rawValue } } @@ -38,7 +41,10 @@ struct DiningDetailView: View { if let allDayString { DiningAllDayView(allDayString: allDayString) } else { - BMSegmentedControlView(tabNames: ["Breakfast", "Lunch", "Dinner"], selectedTabIndex: $selectedTabIndex) + BMSegmentedControlView( + tabNames: filteredTabNames, + selectedTabIndex: $selectedTabIndex + ) if categoriesAndMenuItems.isEmpty { Text("No Menu Items Available") .fontWeight(.semibold)