From 492518ccdbf864af88d8a483cc53549779309a86 Mon Sep 17 00:00:00 2001 From: oliverhnat Date: Sun, 5 May 2024 17:45:21 +0200 Subject: [PATCH] Add edit function to flashcard --- .../Flashcard/Flashcard+CoreDataClass.swift | 4 ++-- .../Views/Flashcards/AddFlashCardView.swift | 20 +++++++++++-------- .../Views/Flashcards/FlashCardListView.swift | 8 +++++++- WordAX/Views/Flashcards/FlashCardView.swift | 11 ++++++++++ 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/WordAX/Model/Flashcard/Flashcard+CoreDataClass.swift b/WordAX/Model/Flashcard/Flashcard+CoreDataClass.swift index 6edf95e..5cc6932 100644 --- a/WordAX/Model/Flashcard/Flashcard+CoreDataClass.swift +++ b/WordAX/Model/Flashcard/Flashcard+CoreDataClass.swift @@ -48,7 +48,7 @@ public class Flashcard: NSManagedObject { } func getSpacedRepetitionMilestone() -> SpacedRepetitionMilestoneEnum { - var milestone = SpacedRepetitionMilestoneEnum.getMilestoneFromInt(value: self.nextSpacedRepetitionMilestone) - return milestone == .Now ? .TenMinutes : milestone + let milestone = SpacedRepetitionMilestoneEnum.getMilestoneFromInt(value: self.nextSpacedRepetitionMilestone) + return milestone == .Now || milestone == .OneMinute ? .TenMinutes : milestone } } diff --git a/WordAX/Views/Flashcards/AddFlashCardView.swift b/WordAX/Views/Flashcards/AddFlashCardView.swift index 6294308..48bc1e1 100644 --- a/WordAX/Views/Flashcards/AddFlashCardView.swift +++ b/WordAX/Views/Flashcards/AddFlashCardView.swift @@ -16,6 +16,8 @@ struct AddFlashCardView: View { @FetchRequest(sortDescriptors: []) var decks: FetchedResults @State var selectedDeck: Deck? @State var createDisabled: Bool = true + @State var flashcard: Flashcard + var edit: Bool = false var body: some View { NavigationStack { List { @@ -54,7 +56,7 @@ struct AddFlashCardView: View { self.createFlashcard() self.isShowing = false }, label: { - Text("Create") + Text(edit ? "Save" : "Create") .bold() }) .disabled(text.count == 0 || description.count == 0 || selectedDeck == nil) @@ -65,15 +67,15 @@ struct AddFlashCardView: View { } private func createFlashcard() { - let flashcard = Flashcard(context: moc) - flashcard.id = UUID() flashcard.name = self.text flashcard.desc = self.description - flashcard.nextSpacedRepetitionMilestone = 0 - flashcard.lastSeenOn = nil - flashcard.shownCount = 0 - flashcard.dateAdded = Date() flashcard.deck = selectedDeck + if !edit { + flashcard.nextSpacedRepetitionMilestone = 0 + flashcard.lastSeenOn = nil + flashcard.shownCount = 0 + flashcard.dateAdded = Date() + } try? moc.save() } @@ -81,6 +83,8 @@ struct AddFlashCardView: View { #Preview { @State var isShowing = true - return AddFlashCardView(isShowing: $isShowing) + let flashcard = Flashcard(context: DataController.preview.container.viewContext) + flashcard.id = UUID() + return AddFlashCardView(isShowing: $isShowing, flashcard: flashcard) .environment(\.managedObjectContext, DataController.preview.container.viewContext) } diff --git a/WordAX/Views/Flashcards/FlashCardListView.swift b/WordAX/Views/Flashcards/FlashCardListView.swift index 0ad8501..df12a42 100644 --- a/WordAX/Views/Flashcards/FlashCardListView.swift +++ b/WordAX/Views/Flashcards/FlashCardListView.swift @@ -75,11 +75,17 @@ struct FlashCardListView: View { } } .sheet(isPresented: $addFlashcard, content: { - AddFlashCardView(isShowing: $addFlashcard, selectedDeck: deck) + AddFlashCardView(isShowing: $addFlashcard, selectedDeck: deck, flashcard: createFlashcard()) }) } } + private func createFlashcard() -> Flashcard { + let flashcard = Flashcard(context:moc) + flashcard.id = UUID() + return flashcard + } + private func refreshFlashcards() { let request = NSFetchRequest(entityName: "Flashcard") request.sortDescriptors = [NSSortDescriptor(key: "favorite", ascending: false), NSSortDescriptor(key: "dateAdded", ascending: false)] diff --git a/WordAX/Views/Flashcards/FlashCardView.swift b/WordAX/Views/Flashcards/FlashCardView.swift index 45439b6..b3b3914 100644 --- a/WordAX/Views/Flashcards/FlashCardView.swift +++ b/WordAX/Views/Flashcards/FlashCardView.swift @@ -13,6 +13,7 @@ struct FlashCardView: View { var flashcard: Flashcard @Binding var showDescription: Bool @Environment(\.colorScheme) var colorScheme + @State var editFlashcard: Bool = false var body: some View { @@ -48,6 +49,16 @@ struct FlashCardView: View { .onTapGesture { self.showDescription = true } + .sheet(isPresented: $editFlashcard) { + AddFlashCardView(text: flashcard.name ?? "", description: flashcard.desc ?? "", isShowing: $editFlashcard, selectedDeck: flashcard.deck, flashcard: flashcard, edit: true) + } + .toolbar { + Button { + self.editFlashcard = true + } label: { + Text("Edit") + } + } } }