From 650df2b67e3e620cd1e76dafd5134f8e7621d6ba Mon Sep 17 00:00:00 2001 From: VincentMeilinger Date: Fri, 1 Mar 2024 15:32:04 +0100 Subject: [PATCH] Updated Duration Picker during Recipe Editing --- .../project.pbxproj | 44 +- .../UserInterfaceState.xcuserstate | Bin 132045 -> 144736 bytes .../Data/ObservableRecipeDetail.swift | 2 +- .../Localizable.xcstrings | 6 + .../Views/Recipes/RecipeView.swift | 526 +----------------- .../RecipeDurationSection.swift | 122 ++++ .../RecipeGenericViews.swift | 85 +++ .../RecipeIngredientSection.swift | 137 +++++ .../RecipeInstructionSection.swift | 51 ++ .../RecipeKeywordSection.swift} | 59 +- .../RecipeMetadataSection.swift | 127 +++++ .../RecipeNutritionSection.swift | 72 +++ .../RecipeToolSection.swift | 27 + 13 files changed, 733 insertions(+), 525 deletions(-) create mode 100644 Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeDurationSection.swift create mode 100644 Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeGenericViews.swift create mode 100644 Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeIngredientSection.swift create mode 100644 Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeInstructionSection.swift rename Nextcloud Cookbook iOS Client/Views/Recipes/{KeywordPickerView.swift => RecipeViewSections/RecipeKeywordSection.swift} (71%) create mode 100644 Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeMetadataSection.swift create mode 100644 Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeNutritionSection.swift create mode 100644 Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeToolSection.swift diff --git a/Nextcloud Cookbook iOS Client.xcodeproj/project.pbxproj b/Nextcloud Cookbook iOS Client.xcodeproj/project.pbxproj index cc81935..a3722a3 100644 --- a/Nextcloud Cookbook iOS Client.xcodeproj/project.pbxproj +++ b/Nextcloud Cookbook iOS Client.xcodeproj/project.pbxproj @@ -41,12 +41,19 @@ A79AA8ED2B063AD5007D25F2 /* NextcloudApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = A79AA8EC2B063AD5007D25F2 /* NextcloudApi.swift */; }; A7AEAE642AD5521400135378 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = A7AEAE632AD5521400135378 /* Localizable.xcstrings */; }; A7CD3FD22B2C546A00D764AD /* CollapsibleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7CD3FD12B2C546A00D764AD /* CollapsibleView.swift */; }; - A7F3F8E82ACBFC760076C227 /* KeywordPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F3F8E72ACBFC760076C227 /* KeywordPickerView.swift */; }; + A7F3F8E82ACBFC760076C227 /* RecipeKeywordSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F3F8E72ACBFC760076C227 /* RecipeKeywordSection.swift */; }; A7F3F8EA2ACC221C0076C227 /* CategoryPickerViewOld.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7F3F8E92ACC221C0076C227 /* CategoryPickerViewOld.swift */; }; A7FB0D7A2B25C66600A3469E /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FB0D792B25C66600A3469E /* OnboardingView.swift */; }; A7FB0D7C2B25C68500A3469E /* TokenLoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FB0D7B2B25C68500A3469E /* TokenLoginView.swift */; }; A7FB0D7E2B25C6A200A3469E /* V2LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7FB0D7D2B25C6A200A3469E /* V2LoginView.swift */; }; A95364672B7E89F1001018B0 /* ReorderableForEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = A95364662B7E89F1001018B0 /* ReorderableForEach.swift */; }; + A97506132B920D9F00E86029 /* RecipeDurationSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A97506122B920D9F00E86029 /* RecipeDurationSection.swift */; }; + A97506152B920DF200E86029 /* RecipeGenericViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = A97506142B920DF200E86029 /* RecipeGenericViews.swift */; }; + A97506192B920EC200E86029 /* RecipeIngredientSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A97506182B920EC200E86029 /* RecipeIngredientSection.swift */; }; + A975061B2B920F9F00E86029 /* RecipeNutritionSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A975061A2B920F9F00E86029 /* RecipeNutritionSection.swift */; }; + A975061D2B920FCC00E86029 /* RecipeInstructionSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A975061C2B920FCC00E86029 /* RecipeInstructionSection.swift */; }; + A975061F2B920FFC00E86029 /* RecipeToolSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A975061E2B920FFC00E86029 /* RecipeToolSection.swift */; }; + A97506212B92104700E86029 /* RecipeMetadataSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A97506202B92104700E86029 /* RecipeMetadataSection.swift */; }; A977D0DE2B600300009783A9 /* SearchTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A977D0DD2B600300009783A9 /* SearchTabView.swift */; }; A977D0E02B600318009783A9 /* RecipeTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A977D0DF2B600318009783A9 /* RecipeTabView.swift */; }; A977D0E22B60034E009783A9 /* GroceryListTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A977D0E12B60034E009783A9 /* GroceryListTabView.swift */; }; @@ -117,12 +124,19 @@ A79AA8EC2B063AD5007D25F2 /* NextcloudApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NextcloudApi.swift; sourceTree = ""; }; A7AEAE632AD5521400135378 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; A7CD3FD12B2C546A00D764AD /* CollapsibleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollapsibleView.swift; sourceTree = ""; }; - A7F3F8E72ACBFC760076C227 /* KeywordPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeywordPickerView.swift; sourceTree = ""; }; + A7F3F8E72ACBFC760076C227 /* RecipeKeywordSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeKeywordSection.swift; sourceTree = ""; }; A7F3F8E92ACC221C0076C227 /* CategoryPickerViewOld.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CategoryPickerViewOld.swift; sourceTree = ""; }; A7FB0D792B25C66600A3469E /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = ""; }; A7FB0D7B2B25C68500A3469E /* TokenLoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenLoginView.swift; sourceTree = ""; }; A7FB0D7D2B25C6A200A3469E /* V2LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = V2LoginView.swift; sourceTree = ""; }; A95364662B7E89F1001018B0 /* ReorderableForEach.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReorderableForEach.swift; sourceTree = ""; }; + A97506122B920D9F00E86029 /* RecipeDurationSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeDurationSection.swift; sourceTree = ""; }; + A97506142B920DF200E86029 /* RecipeGenericViews.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeGenericViews.swift; sourceTree = ""; }; + A97506182B920EC200E86029 /* RecipeIngredientSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeIngredientSection.swift; sourceTree = ""; }; + A975061A2B920F9F00E86029 /* RecipeNutritionSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeNutritionSection.swift; sourceTree = ""; }; + A975061C2B920FCC00E86029 /* RecipeInstructionSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeInstructionSection.swift; sourceTree = ""; }; + A975061E2B920FFC00E86029 /* RecipeToolSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeToolSection.swift; sourceTree = ""; }; + A97506202B92104700E86029 /* RecipeMetadataSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeMetadataSection.swift; sourceTree = ""; }; A977D0DD2B600300009783A9 /* SearchTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchTabView.swift; sourceTree = ""; }; A977D0DF2B600318009783A9 /* RecipeTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeTabView.swift; sourceTree = ""; }; A977D0E12B60034E009783A9 /* GroceryListTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroceryListTabView.swift; sourceTree = ""; }; @@ -333,6 +347,21 @@ path = Onboarding; sourceTree = ""; }; + A97506112B920D8100E86029 /* RecipeViewSections */ = { + isa = PBXGroup; + children = ( + A97506122B920D9F00E86029 /* RecipeDurationSection.swift */, + A97506182B920EC200E86029 /* RecipeIngredientSection.swift */, + A975061C2B920FCC00E86029 /* RecipeInstructionSection.swift */, + A975061E2B920FFC00E86029 /* RecipeToolSection.swift */, + A975061A2B920F9F00E86029 /* RecipeNutritionSection.swift */, + A7F3F8E72ACBFC760076C227 /* RecipeKeywordSection.swift */, + A97506142B920DF200E86029 /* RecipeGenericViews.swift */, + A97506202B92104700E86029 /* RecipeMetadataSection.swift */, + ); + path = RecipeViewSections; + sourceTree = ""; + }; A977D0DC2B6002DA009783A9 /* Tabs */ = { isa = PBXGroup; children = ( @@ -359,7 +388,7 @@ A70171BD2AB4987900064C43 /* RecipeListView.swift */, A70171C12AB498C600064C43 /* RecipeCardView.swift */, A70171BF2AB498A900064C43 /* RecipeView.swift */, - A7F3F8E72ACBFC760076C227 /* KeywordPickerView.swift */, + A97506112B920D8100E86029 /* RecipeViewSections */, A9D89AAF2B4FE97800F49D92 /* TimerView.swift */, A97B4D342B80B82A00EC1A88 /* ShareView.swift */, ); @@ -548,10 +577,13 @@ buildActionMask = 2147483647; files = ( A9BBB38E2B8E44B3002DA7FF /* BottomClipper.swift in Sources */, + A97506192B920EC200E86029 /* RecipeIngredientSection.swift in Sources */, A97B4D352B80B82A00EC1A88 /* ShareView.swift in Sources */, + A975061F2B920FFC00E86029 /* RecipeToolSection.swift in Sources */, A9D89AB02B4FE97800F49D92 /* TimerView.swift in Sources */, A9BBB38C2B8D3B0C002DA7FF /* ParallaxHeaderView.swift in Sources */, A79AA8E22AFF8C14007D25F2 /* RecipeEditViewModel.swift in Sources */, + A97506152B920DF200E86029 /* RecipeGenericViews.swift in Sources */, A7FB0D7C2B25C68500A3469E /* TokenLoginView.swift in Sources */, A70D7CA12AC73CA800D53DBF /* RecipeEditView.swift in Sources */, A977D0E22B60034E009783A9 /* GroceryListTabView.swift in Sources */, @@ -561,21 +593,24 @@ A79AA8E62B02C3CB007D25F2 /* LoggerExtension.swift in Sources */, A70171C42AB4A31200064C43 /* DataStore.swift in Sources */, A7FB0D7E2B25C6A200A3469E /* V2LoginView.swift in Sources */, + A975061D2B920FCC00E86029 /* RecipeInstructionSection.swift in Sources */, A95364672B7E89F1001018B0 /* ReorderableForEach.swift in Sources */, A787B0782B2B1E6400C2DF1B /* DateExtension.swift in Sources */, A79AA8E92B062DD1007D25F2 /* CookbookApiV1.swift in Sources */, A7CD3FD22B2C546A00D764AD /* CollapsibleView.swift in Sources */, A9BBB3902B91BE31002DA7FF /* ObservableRecipeDetail.swift in Sources */, + A97506212B92104700E86029 /* RecipeMetadataSection.swift in Sources */, A70171B42AB2122900064C43 /* NetworkUtils.swift in Sources */, A97B4D322B80B3E900EC1A88 /* RecipeModels.swift in Sources */, A70171BE2AB4987900064C43 /* RecipeListView.swift in Sources */, A70171C62AB4C43A00064C43 /* DataModels.swift in Sources */, A79AA8EB2B062E15007D25F2 /* ApiRequest.swift in Sources */, - A7F3F8E82ACBFC760076C227 /* KeywordPickerView.swift in Sources */, + A7F3F8E82ACBFC760076C227 /* RecipeKeywordSection.swift in Sources */, A79AA8E02AFF80E3007D25F2 /* DurationComponents.swift in Sources */, A70171C02AB498A900064C43 /* RecipeView.swift in Sources */, A7F3F8EA2ACC221C0076C227 /* CategoryPickerViewOld.swift in Sources */, A79AA8E42B02A962007D25F2 /* CookbookApi.swift in Sources */, + A975061B2B920F9F00E86029 /* RecipeNutritionSection.swift in Sources */, A70171CD2AB501B100064C43 /* SettingsView.swift in Sources */, A9CA6CEF2B4C086100F78AB5 /* RecipeExporter.swift in Sources */, A70171C22AB498C600064C43 /* RecipeCardView.swift in Sources */, @@ -584,6 +619,7 @@ A977D0DE2B600300009783A9 /* SearchTabView.swift in Sources */, A703226A2ABAF49800D7C4ED /* JSONCoderExtension.swift in Sources */, A79AA8ED2B063AD5007D25F2 /* NextcloudApi.swift in Sources */, + A97506132B920D9F00E86029 /* RecipeDurationSection.swift in Sources */, A70171822AA8E71900064C43 /* Nextcloud_Cookbook_iOS_ClientApp.swift in Sources */, A74D33C32AFCD1C300D06555 /* RecipeScraper.swift in Sources */, A70171AD2AA8EF4700064C43 /* AppState.swift in Sources */, diff --git a/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcuserdata/vincie.xcuserdatad/UserInterfaceState.xcuserstate b/Nextcloud Cookbook iOS Client.xcodeproj/project.xcworkspace/xcuserdata/vincie.xcuserdatad/UserInterfaceState.xcuserstate index cad8a5fd82651ef154de913f004c6af804a75a48..18d9e0ead9525d07f315554e8726e9961d613c9a 100644 GIT binary patch literal 144736 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 P{{Q>e|Np;3%P0OHj)jWg literal 132045 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�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 E4=5wseE Binding { - Binding( - get: { viewModel.observableRecipeDetail.nutrition[key, default: ""] }, - set: { viewModel.observableRecipeDetail.nutrition[key] = $0 } - ) - } - - func nutritionEmpty() -> Bool { - for nutrition in Nutrition.allCases { - if let value = viewModel.observableRecipeDetail.nutrition[nutrition.dictKey] { - return false - } - } - return true - } -} - - -// MARK: - Keyword Section - -fileprivate struct RecipeKeywordSection: View { - @ObservedObject var viewModel: RecipeView.ViewModel - let columns: [GridItem] = [ GridItem(.flexible(minimum: 50, maximum: 200), spacing: 5) ] - - var body: some View { - CollapsibleView(titleColor: .secondary, isCollapsed: !UserSettings.shared.expandKeywordSection) { - Group { - if !viewModel.observableRecipeDetail.keywords.isEmpty && !viewModel.editMode { - RecipeListSection(list: viewModel.observableRecipeDetail.keywords) - } else { - Text(LocalizedStringKey("No keywords.")) - } - } - } title: { - HStack { - SecondaryLabel(text: LocalizedStringKey("Keywords")) - Spacer() - } - } - .padding() - } -} - - -// MARK: - More Information Section - -fileprivate struct MoreInformationSection: View { - @ObservedObject var viewModel: RecipeView.ViewModel - - var body: some View { - CollapsibleView(titleColor: .secondary, isCollapsed: !UserSettings.shared.expandInfoSection) { - VStack(alignment: .leading) { - Text("Created: \(Date.convertISOStringToLocalString(isoDateString: viewModel.recipeDetail.dateCreated) ?? "")") - Text("Last modified: \(Date.convertISOStringToLocalString(isoDateString: viewModel.recipeDetail.dateModified) ?? "")") - if viewModel.observableRecipeDetail.url != "", let url = URL(string: viewModel.observableRecipeDetail.url) { - HStack() { - Text("URL:") - Link(destination: url) { - Text(viewModel.observableRecipeDetail.url) - } - } - } - } - .font(.caption) - .foregroundStyle(Color.secondary) - } title: { - HStack { - SecondaryLabel(text: "More information") - Spacer() - } - } - .padding() - } -} - -fileprivate struct RecipeListSection: View { - @State var list: [String] - - var body: some View { - VStack(alignment: .leading) { - ForEach(list, id: \.self) { item in - HStack(alignment: .top) { - Text("\u{2022}") - Text("\(item)") - .multilineTextAlignment(.leading) - } - .padding(4) - } - } - } -} - -fileprivate struct SecondaryLabel: View { - let text: LocalizedStringKey - var body: some View { - Text(text) - .foregroundColor(.secondary) - .font(.headline) - .padding(.vertical, 5) - } -} - - - - - -// MARK: - Ingredients Section - -fileprivate struct RecipeIngredientSection: View { - @EnvironmentObject var groceryList: GroceryList - @ObservedObject var viewModel: RecipeView.ViewModel - - var body: some View { - VStack(alignment: .leading) { - HStack { - if viewModel.observableRecipeDetail.recipeYield == 0 { - SecondaryLabel(text: LocalizedStringKey("Ingredients")) - } else if viewModel.observableRecipeDetail.recipeYield == 1 { - SecondaryLabel(text: LocalizedStringKey("Ingredients per serving")) - } else { - SecondaryLabel(text: LocalizedStringKey("Ingredients for \(viewModel.observableRecipeDetail.recipeYield) servings")) - } - Spacer() - Button { - withAnimation { - if groceryList.containsRecipe(viewModel.observableRecipeDetail.id) { - groceryList.deleteGroceryRecipe(viewModel.observableRecipeDetail.id) - } else { - groceryList.addItems( - ReorderableItem.items(viewModel.observableRecipeDetail.recipeIngredient), - toRecipe: viewModel.observableRecipeDetail.id, - recipeName: viewModel.observableRecipeDetail.name - ) - } - } - } label: { - if #available(iOS 17.0, *) { - Image(systemName: "storefront") - } else { - Image(systemName: "heart.text.square") - } - } - } - - EditableStringList(items: $viewModel.observableRecipeDetail.recipeIngredient, editMode: $viewModel.editMode, titleKey: "Ingredient", lineLimit: 0...1, axis: .horizontal) { - ForEach(0.. - @State var recipeId: String - let addToGroceryListAction: () -> Void - @State var isSelected: Bool = false - - // Drag animation - @State private var dragOffset: CGFloat = 0 - @State private var animationStartOffset: CGFloat = 0 - let maxDragDistance = 50.0 - - var body: some View { - HStack(alignment: .top) { - if groceryList.containsItem(at: recipeId, item: ingredient.item) { - if #available(iOS 17.0, *) { - Image(systemName: "storefront") - .foregroundStyle(Color.green) - } else { - Image(systemName: "heart.text.square") - .foregroundStyle(Color.green) - } - - } else if isSelected { - Image(systemName: "checkmark.circle") - } else { - Image(systemName: "circle") - } - - Text("\(ingredient.item)") - .multilineTextAlignment(.leading) - .lineLimit(5) - Spacer() - } - .foregroundStyle(isSelected ? Color.secondary : Color.primary) - .onTapGesture { - isSelected.toggle() - } - .offset(x: dragOffset, y: 0) - .animation(.easeInOut, value: isSelected) - - .gesture( - DragGesture() - .onChanged { gesture in - // Update drag offset as the user drags - if animationStartOffset == 0 { - animationStartOffset = gesture.translation.width - } - let dragAmount = gesture.translation.width - let offset = min(dragAmount, maxDragDistance + pow(dragAmount - maxDragDistance, 0.7)) - animationStartOffset - self.dragOffset = max(0, offset) - } - .onEnded { gesture in - withAnimation { - if dragOffset > maxDragDistance * 0.3 { // Swipe threshold - if groceryList.containsItem(at: recipeId, item: ingredient.item) { - groceryList.deleteItem(ingredient.item, fromRecipe: recipeId) - } else { - addToGroceryListAction() - } - - } - // Animate back to original position - - self.dragOffset = 0 - self.animationStartOffset = 0 - } - } - ) - } -} - - -// MARK: - Instructions Section - -fileprivate struct RecipeInstructionSection: View { - @ObservedObject var viewModel: RecipeView.ViewModel - - var body: some View { - VStack(alignment: .leading) { - HStack { - SecondaryLabel(text: LocalizedStringKey("Instructions")) - Spacer() - } - EditableStringList(items: $viewModel.observableRecipeDetail.recipeInstructions, editMode: $viewModel.editMode, titleKey: "Instruction", lineLimit: 0...15, axis: .vertical) { - ForEach(0.. - @State var index: Int - @State var isSelected: Bool = false - - var body: some View { - HStack(alignment: .top) { - Text("\(index)") - .monospaced() - Text(instruction.item) - }.padding(4) - .foregroundStyle(isSelected ? Color.secondary : Color.primary) - .onTapGesture { - isSelected.toggle() - } - .animation(.easeInOut, value: isSelected) - } -} - - -// MARK: - Tool Section - -fileprivate struct RecipeToolSection: View { - @ObservedObject var viewModel: RecipeView.ViewModel - - var body: some View { - VStack(alignment: .leading) { - HStack { - SecondaryLabel(text: "Tools") - Spacer() - } - EditableStringList(items: $viewModel.observableRecipeDetail.tool, editMode: $viewModel.editMode, titleKey: "Tool", lineLimit: 0...1, axis: .horizontal) { - RecipeListSection(list: ReorderableItem.items(viewModel.observableRecipeDetail.tool)) - } - }.padding() - } -} - - -// MARK: - Generic Editable View Elements - -fileprivate struct EditableText: View { - @Binding var text: String - @Binding var editMode: Bool - @State var titleKey: LocalizedStringKey = "" - @State var lineLimit: ClosedRange = 0...1 - @State var axis: Axis = .horizontal - - var body: some View { - if editMode { - TextField(titleKey, text: $text, axis: axis) - .textFieldStyle(.roundedBorder) - .lineLimit(lineLimit) - } else { - Text(text) - } - } -} - - -fileprivate struct EditableStringList: View { - @Binding var items: [ReorderableItem] - @Binding var editMode: Bool - @State var titleKey: LocalizedStringKey = "" - @State var lineLimit: ClosedRange = 0...50 - @State var axis: Axis = .vertical - - var content: () -> Content - - var body: some View { - if editMode { - VStack { - ReorderableForEach(items: $items, defaultItem: ReorderableItem(item: "")) { ix, item in - TextField("", text: $items[ix].item, axis: axis) - .textFieldStyle(.roundedBorder) - .lineLimit(lineLimit) - } - } - .transition(.slide) - } else { - content() - } - } -} diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeDurationSection.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeDurationSection.swift new file mode 100644 index 0000000..30275f2 --- /dev/null +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeDurationSection.swift @@ -0,0 +1,122 @@ +// +// RecipeDurationSection.swift +// Nextcloud Cookbook iOS Client +// +// Created by Vincent Meilinger on 01.03.24. +// + +import Foundation +import SwiftUI + +// MARK: - RecipeView Duration Section + +struct RecipeDurationSection: View { + @ObservedObject var viewModel: RecipeView.ViewModel + + var body: some View { + if viewModel.editMode { + LazyVGrid(columns: [GridItem(.adaptive(minimum: 200, maximum: .infinity), alignment: .leading)]) { + EditableDurationView(time: viewModel.observableRecipeDetail.prepTime, title: LocalizedStringKey("Preparation")) + EditableDurationView(time: viewModel.observableRecipeDetail.cookTime, title: LocalizedStringKey("Cooking")) + EditableDurationView(time: viewModel.observableRecipeDetail.totalTime, title: LocalizedStringKey("Total time")) + } + } else { + LazyVGrid(columns: [GridItem(.adaptive(minimum: 200, maximum: .infinity), alignment: .leading)]) { + DurationView(time: viewModel.observableRecipeDetail.prepTime, title: LocalizedStringKey("Preparation")) + DurationView(time: viewModel.observableRecipeDetail.cookTime, title: LocalizedStringKey("Cooking")) + DurationView(time: viewModel.observableRecipeDetail.totalTime, title: LocalizedStringKey("Total time")) + } + } + } +} + +fileprivate struct DurationView: View { + @ObservedObject var time: DurationComponents + @State var title: LocalizedStringKey + + var body: some View { + VStack(alignment: .leading) { + HStack { + SecondaryLabel(text: title) + Spacer() + } + HStack { + Image(systemName: "clock") + .foregroundStyle(.secondary) + Text(time.displayString) + .lineLimit(1) + } + } + .padding() + } +} + +fileprivate struct EditableDurationView: View { + @ObservedObject var time: DurationComponents + @State var title: LocalizedStringKey + @State var presentPopoverView: Bool = false + @State var hour: Int = 0 + @State var minute: Int = 0 + + var body: some View { + VStack(alignment: .leading) { + HStack { + SecondaryLabel(text: title) + Spacer() + } + Button { + presentPopoverView.toggle() + } label: { + HStack { + Image(systemName: "clock") + .foregroundStyle(.secondary) + Text(time.displayString) + .lineLimit(1) + } + } + } + .padding() + .popover(isPresented: $presentPopoverView) { + TimePickerPopoverView(selectedHour: $hour, selectedMinute: $minute) + } + .onChange(of: presentPopoverView) { presentPopover in + if !presentPopover { + time.hourComponent = String(hour) + time.minuteComponent = String(minute) + } + } + .onAppear { + minute = Int(time.minuteComponent) ?? 0 + hour = Int(time.hourComponent) ?? 0 + } + } +} + + +fileprivate struct TimePickerPopoverView: View { + @Binding var selectedHour: Int + @Binding var selectedMinute: Int + + var body: some View { + HStack { + Picker(selection: $selectedHour, label: Text("Hours")) { + ForEach(0..<99, id: \.self) { hour in + Text("\(hour) h").tag(hour) + } + } + .pickerStyle(WheelPickerStyle()) + .frame(width: 100, height: 150) + .clipped() + + Picker(selection: $selectedMinute, label: Text("Minutes")) { + ForEach(0..<60, id: \.self) { minute in + Text("\(minute) min").tag(minute) + } + } + .pickerStyle(WheelPickerStyle()) + .frame(width: 100, height: 150) + .clipped() + } + .padding() + } +} diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeGenericViews.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeGenericViews.swift new file mode 100644 index 0000000..e19793c --- /dev/null +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeGenericViews.swift @@ -0,0 +1,85 @@ +// +// RecipeSectionStructureViews.swift +// Nextcloud Cookbook iOS Client +// +// Created by Vincent Meilinger on 01.03.24. +// + +import Foundation +import SwiftUI + +// MARK: - RecipeView Generic Editable View Elements + + +struct RecipeListSection: View { + @State var list: [String] + + var body: some View { + VStack(alignment: .leading) { + ForEach(list, id: \.self) { item in + HStack(alignment: .top) { + Text("\u{2022}") + Text("\(item)") + .multilineTextAlignment(.leading) + } + .padding(4) + } + } + } +} + + +struct SecondaryLabel: View { + let text: LocalizedStringKey + var body: some View { + Text(text) + .foregroundColor(.secondary) + .font(.headline) + .padding(.vertical, 5) + } +} + + +struct EditableText: View { + @Binding var text: String + @Binding var editMode: Bool + @State var titleKey: LocalizedStringKey = "" + @State var lineLimit: ClosedRange = 0...1 + @State var axis: Axis = .horizontal + + var body: some View { + if editMode { + TextField(titleKey, text: $text, axis: axis) + .textFieldStyle(.roundedBorder) + .lineLimit(lineLimit) + } else { + Text(text) + } + } +} + + +struct EditableStringList: View { + @Binding var items: [ReorderableItem] + @Binding var editMode: Bool + @State var titleKey: LocalizedStringKey = "" + @State var lineLimit: ClosedRange = 0...50 + @State var axis: Axis = .vertical + + var content: () -> Content + + var body: some View { + if editMode { + VStack { + ReorderableForEach(items: $items, defaultItem: ReorderableItem(item: "")) { ix, item in + TextField("", text: $items[ix].item, axis: axis) + .textFieldStyle(.roundedBorder) + .lineLimit(lineLimit) + } + } + .transition(.slide) + } else { + content() + } + } +} diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeIngredientSection.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeIngredientSection.swift new file mode 100644 index 0000000..a68f3d9 --- /dev/null +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeIngredientSection.swift @@ -0,0 +1,137 @@ +// +// RecipeIngredientSection.swift +// Nextcloud Cookbook iOS Client +// +// Created by Vincent Meilinger on 01.03.24. +// + +import Foundation +import SwiftUI + +// MARK: - RecipeView Ingredients Section + +struct RecipeIngredientSection: View { + @EnvironmentObject var groceryList: GroceryList + @ObservedObject var viewModel: RecipeView.ViewModel + + var body: some View { + VStack(alignment: .leading) { + HStack { + if viewModel.observableRecipeDetail.recipeYield == 0 { + SecondaryLabel(text: LocalizedStringKey("Ingredients")) + } else if viewModel.observableRecipeDetail.recipeYield == 1 { + SecondaryLabel(text: LocalizedStringKey("Ingredients per serving")) + } else { + SecondaryLabel(text: LocalizedStringKey("Ingredients for \(viewModel.observableRecipeDetail.recipeYield) servings")) + } + Spacer() + Button { + withAnimation { + if groceryList.containsRecipe(viewModel.observableRecipeDetail.id) { + groceryList.deleteGroceryRecipe(viewModel.observableRecipeDetail.id) + } else { + groceryList.addItems( + ReorderableItem.items(viewModel.observableRecipeDetail.recipeIngredient), + toRecipe: viewModel.observableRecipeDetail.id, + recipeName: viewModel.observableRecipeDetail.name + ) + } + } + } label: { + if #available(iOS 17.0, *) { + Image(systemName: "storefront") + } else { + Image(systemName: "heart.text.square") + } + } + } + + EditableStringList(items: $viewModel.observableRecipeDetail.recipeIngredient, editMode: $viewModel.editMode, titleKey: "Ingredient", lineLimit: 0...1, axis: .horizontal) { + ForEach(0.. + @State var recipeId: String + let addToGroceryListAction: () -> Void + @State var isSelected: Bool = false + + // Drag animation + @State private var dragOffset: CGFloat = 0 + @State private var animationStartOffset: CGFloat = 0 + let maxDragDistance = 50.0 + + var body: some View { + HStack(alignment: .top) { + if groceryList.containsItem(at: recipeId, item: ingredient.item) { + if #available(iOS 17.0, *) { + Image(systemName: "storefront") + .foregroundStyle(Color.green) + } else { + Image(systemName: "heart.text.square") + .foregroundStyle(Color.green) + } + + } else if isSelected { + Image(systemName: "checkmark.circle") + } else { + Image(systemName: "circle") + } + + Text("\(ingredient.item)") + .multilineTextAlignment(.leading) + .lineLimit(5) + Spacer() + } + .foregroundStyle(isSelected ? Color.secondary : Color.primary) + .onTapGesture { + isSelected.toggle() + } + .offset(x: dragOffset, y: 0) + .animation(.easeInOut, value: isSelected) + + .gesture( + DragGesture() + .onChanged { gesture in + // Update drag offset as the user drags + if animationStartOffset == 0 { + animationStartOffset = gesture.translation.width + } + let dragAmount = gesture.translation.width + let offset = min(dragAmount, maxDragDistance + pow(dragAmount - maxDragDistance, 0.7)) - animationStartOffset + self.dragOffset = max(0, offset) + } + .onEnded { gesture in + withAnimation { + if dragOffset > maxDragDistance * 0.3 { // Swipe threshold + if groceryList.containsItem(at: recipeId, item: ingredient.item) { + groceryList.deleteItem(ingredient.item, fromRecipe: recipeId) + } else { + addToGroceryListAction() + } + + } + // Animate back to original position + + self.dragOffset = 0 + self.animationStartOffset = 0 + } + } + ) + } +} diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeInstructionSection.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeInstructionSection.swift new file mode 100644 index 0000000..72ba0fa --- /dev/null +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeInstructionSection.swift @@ -0,0 +1,51 @@ +// +// RecipeInstructionSection.swift +// Nextcloud Cookbook iOS Client +// +// Created by Vincent Meilinger on 01.03.24. +// + +import Foundation +import SwiftUI + +// MARK: - RecipeView Instructions Section + +struct RecipeInstructionSection: View { + @ObservedObject var viewModel: RecipeView.ViewModel + + var body: some View { + VStack(alignment: .leading) { + HStack { + SecondaryLabel(text: LocalizedStringKey("Instructions")) + Spacer() + } + EditableStringList(items: $viewModel.observableRecipeDetail.recipeInstructions, editMode: $viewModel.editMode, titleKey: "Instruction", lineLimit: 0...15, axis: .vertical) { + ForEach(0.. + @State var index: Int + @State var isSelected: Bool = false + + var body: some View { + HStack(alignment: .top) { + Text("\(index)") + .monospaced() + Text(instruction.item) + }.padding(4) + .foregroundStyle(isSelected ? Color.secondary : Color.primary) + .onTapGesture { + isSelected.toggle() + } + .animation(.easeInOut, value: isSelected) + } +} + diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/KeywordPickerView.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeKeywordSection.swift similarity index 71% rename from Nextcloud Cookbook iOS Client/Views/Recipes/KeywordPickerView.swift rename to Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeKeywordSection.swift index 1f708d0..5206eba 100644 --- a/Nextcloud Cookbook iOS Client/Views/Recipes/KeywordPickerView.swift +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeKeywordSection.swift @@ -1,5 +1,5 @@ // -// KeywordPickerView.swift +// RecipeKeywordSection.swift // Nextcloud Cookbook iOS Client // // Created by Vincent Meilinger on 03.10.23. @@ -8,7 +8,32 @@ import Foundation import SwiftUI +// MARK: - RecipeView Keyword Section +struct RecipeKeywordSection: View { + @ObservedObject var viewModel: RecipeView.ViewModel + let columns: [GridItem] = [ GridItem(.flexible(minimum: 50, maximum: 200), spacing: 5) ] + + var body: some View { + CollapsibleView(titleColor: .secondary, isCollapsed: !UserSettings.shared.expandKeywordSection) { + Group { + if !viewModel.observableRecipeDetail.keywords.isEmpty && !viewModel.editMode { + RecipeListSection(list: viewModel.observableRecipeDetail.keywords) + } else { + Text(LocalizedStringKey("No keywords.")) + } + } + } title: { + HStack { + SecondaryLabel(text: LocalizedStringKey("Keywords")) + Spacer() + } + } + .padding() + } +} + +// MARK: - RecipeView Keyword Sheet View struct KeywordPickerView: View { @Environment(\.presentationMode) var presentationMode @@ -31,7 +56,7 @@ struct KeywordPickerView: View { } TextField(title, text: $searchText) .textFieldStyle(.roundedBorder) - .padding() + ScrollView { LazyVGrid(columns: columns, spacing: 5) { if searchText != "" { @@ -94,7 +119,7 @@ struct KeywordPickerView: View { } } .navigationTitle(title) - .padding(5) + .padding() } @@ -131,10 +156,36 @@ struct KeywordItemView: View { .padding() .background( RoundedRectangle(cornerRadius: 15) - .foregroundStyle(Color("backgroundHighlight")) + .foregroundStyle(.tertiary) ) .onTapGesture { tapped(keyword) } } } + + +// MARK: - Previews + +struct KeywordPickerView_Previews: PreviewProvider { + // Sample keywords for preview + static var sampleKeywords = [ + RecipeKeyword(name: "Vegan", recipe_count: 10), + RecipeKeyword(name: "Meat", recipe_count: 5), + RecipeKeyword(name: "Gluten-Free", recipe_count: 8), + RecipeKeyword(name: "Difficult", recipe_count: 7), + RecipeKeyword(name: "Chinese", recipe_count: 3), + RecipeKeyword(name: "European", recipe_count: 5), + RecipeKeyword(name: "Easy", recipe_count: 1) + + ] + + // Sample selection for preview + @State static var selection: [String] = ["Vegan"] + + static var previews: some View { + KeywordPickerView(title: "Select Keywords", searchSuggestions: sampleKeywords, selection: $selection) + + } +} + diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeMetadataSection.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeMetadataSection.swift new file mode 100644 index 0000000..423549f --- /dev/null +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeMetadataSection.swift @@ -0,0 +1,127 @@ +// +// RecipeMetadataSection.swift +// Nextcloud Cookbook iOS Client +// +// Created by Vincent Meilinger on 01.03.24. +// + +import Foundation +import SwiftUI + +// MARK: - Recipe Metadata Section + +struct RecipeMetadataSection: View { + @EnvironmentObject var appState: AppState + @ObservedObject var viewModel: RecipeView.ViewModel + + @State var categories: [String] = [] + @State var keywords: [RecipeKeyword] = [] + @State var presentKeywordPopover: Bool = false + + var body: some View { + VStack(alignment: .leading) { + CategoryPickerView(items: $categories, input: $viewModel.observableRecipeDetail.recipeCategory, titleKey: "Category") + + SecondaryLabel(text: "Keywords") + .padding() + + ScrollView(.horizontal, showsIndicators: false) { + HStack { + ForEach(viewModel.observableRecipeDetail.keywords, id: \.self) { keyword in + Text(keyword) + } + } + }.padding(.horizontal) + + Button { + presentKeywordPopover.toggle() + } label: { + Text("Edit keywords") + Image(systemName: "chevron.right") + } + .padding(.horizontal) + + } + .task { + categories = appState.categories.map({ category in category.name }) + } + .sheet(isPresented: $presentKeywordPopover) { + KeywordPickerView(title: "Keywords", searchSuggestions: appState.allKeywords, selection: $viewModel.observableRecipeDetail.keywords) + } + } +} + + + +struct CategoryPickerView: View { + @Binding var items: [String] + @Binding var input: String + @State private var pickerChoice: String = "" + + var titleKey: LocalizedStringKey + + var body: some View { + VStack(alignment: .leading) { + SecondaryLabel(text: "Category") + .padding([.top, .horizontal]) + HStack { + TextField(titleKey, text: $input) + .lineLimit(1) + .textFieldStyle(.roundedBorder) + .padding() + .onSubmit { + pickerChoice = "" + } + + Picker("Select Item", selection: $pickerChoice) { + Text("").tag("") + ForEach(items, id: \.self) { item in + Text(item) + } + } + .pickerStyle(.menu) + .padding() + .onChange(of: pickerChoice) { newValue in + if pickerChoice != "" { + input = newValue + } + } + } + } + .onAppear { + pickerChoice = input + } + } +} + + +// MARK: - RecipeView More Information Section + +struct MoreInformationSection: View { + @ObservedObject var viewModel: RecipeView.ViewModel + + var body: some View { + CollapsibleView(titleColor: .secondary, isCollapsed: !UserSettings.shared.expandInfoSection) { + VStack(alignment: .leading) { + Text("Created: \(Date.convertISOStringToLocalString(isoDateString: viewModel.recipeDetail.dateCreated) ?? "")") + Text("Last modified: \(Date.convertISOStringToLocalString(isoDateString: viewModel.recipeDetail.dateModified) ?? "")") + if viewModel.observableRecipeDetail.url != "", let url = URL(string: viewModel.observableRecipeDetail.url) { + HStack(alignment: .top) { + Text("URL:") + Link(destination: url) { + Text(viewModel.observableRecipeDetail.url) + } + } + } + } + .font(.caption) + .foregroundStyle(Color.secondary) + } title: { + HStack { + SecondaryLabel(text: "More information") + Spacer() + } + } + .padding() + } +} diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeNutritionSection.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeNutritionSection.swift new file mode 100644 index 0000000..03e02d0 --- /dev/null +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeNutritionSection.swift @@ -0,0 +1,72 @@ +// +// RecipeNutritionSection.swift +// Nextcloud Cookbook iOS Client +// +// Created by Vincent Meilinger on 01.03.24. +// + +import Foundation +import SwiftUI + +// MARK: - RecipeView Nutrition Section + +struct RecipeNutritionSection: View { + @ObservedObject var viewModel: RecipeView.ViewModel + + var body: some View { + CollapsibleView(titleColor: .secondary, isCollapsed: !UserSettings.shared.expandNutritionSection) { + VStack(alignment: .leading) { + if viewModel.editMode { + ForEach(Nutrition.allCases, id: \.self) { nutrition in + HStack { + Text(nutrition.localizedDescription) + TextField("", text: binding(for: nutrition.dictKey), axis: .horizontal) + .textFieldStyle(.roundedBorder) + .lineLimit(1) + } + } + } else if !nutritionEmpty() { + VStack(alignment: .leading) { + ForEach(Nutrition.allCases, id: \.self) { nutrition in + if let value = viewModel.observableRecipeDetail.nutrition[nutrition.dictKey], nutrition.dictKey != Nutrition.servingSize.dictKey { + HStack(alignment: .top) { + Text("\(nutrition.localizedDescription): \(value)") + .multilineTextAlignment(.leading) + } + .padding(4) + } + } + } + } else { + Text(LocalizedStringKey("No nutritional information.")) + } + } + } title: { + HStack { + if let servingSize = viewModel.observableRecipeDetail.nutrition["servingSize"] { + SecondaryLabel(text: "Nutrition (\(servingSize))") + } else { + SecondaryLabel(text: LocalizedStringKey("Nutrition")) + } + Spacer() + } + } + .padding() + } + + func binding(for key: String) -> Binding { + Binding( + get: { viewModel.observableRecipeDetail.nutrition[key, default: ""] }, + set: { viewModel.observableRecipeDetail.nutrition[key] = $0 } + ) + } + + func nutritionEmpty() -> Bool { + for nutrition in Nutrition.allCases { + if let value = viewModel.observableRecipeDetail.nutrition[nutrition.dictKey] { + return false + } + } + return true + } +} diff --git a/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeToolSection.swift b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeToolSection.swift new file mode 100644 index 0000000..848f45d --- /dev/null +++ b/Nextcloud Cookbook iOS Client/Views/Recipes/RecipeViewSections/RecipeToolSection.swift @@ -0,0 +1,27 @@ +// +// RecipeToolSection.swift +// Nextcloud Cookbook iOS Client +// +// Created by Vincent Meilinger on 01.03.24. +// + +import Foundation +import SwiftUI + +// MARK: - RecipeView Tool Section + +struct RecipeToolSection: View { + @ObservedObject var viewModel: RecipeView.ViewModel + + var body: some View { + VStack(alignment: .leading) { + HStack { + SecondaryLabel(text: "Tools") + Spacer() + } + EditableStringList(items: $viewModel.observableRecipeDetail.tool, editMode: $viewModel.editMode, titleKey: "Tool", lineLimit: 0...1, axis: .horizontal) { + RecipeListSection(list: ReorderableItem.items(viewModel.observableRecipeDetail.tool)) + } + }.padding() + } +}