Add edit function to flashcard

This commit is contained in:
2024-05-05 17:45:21 +02:00
parent e0b6365eeb
commit 492518ccdb
4 changed files with 32 additions and 11 deletions

View File

@@ -48,7 +48,7 @@ public class Flashcard: NSManagedObject {
} }
func getSpacedRepetitionMilestone() -> SpacedRepetitionMilestoneEnum { func getSpacedRepetitionMilestone() -> SpacedRepetitionMilestoneEnum {
var milestone = SpacedRepetitionMilestoneEnum.getMilestoneFromInt(value: self.nextSpacedRepetitionMilestone) let milestone = SpacedRepetitionMilestoneEnum.getMilestoneFromInt(value: self.nextSpacedRepetitionMilestone)
return milestone == .Now ? .TenMinutes : milestone return milestone == .Now || milestone == .OneMinute ? .TenMinutes : milestone
} }
} }

View File

@@ -16,6 +16,8 @@ struct AddFlashCardView: View {
@FetchRequest(sortDescriptors: []) var decks: FetchedResults<Deck> @FetchRequest(sortDescriptors: []) var decks: FetchedResults<Deck>
@State var selectedDeck: Deck? @State var selectedDeck: Deck?
@State var createDisabled: Bool = true @State var createDisabled: Bool = true
@State var flashcard: Flashcard
var edit: Bool = false
var body: some View { var body: some View {
NavigationStack { NavigationStack {
List { List {
@@ -54,7 +56,7 @@ struct AddFlashCardView: View {
self.createFlashcard() self.createFlashcard()
self.isShowing = false self.isShowing = false
}, label: { }, label: {
Text("Create") Text(edit ? "Save" : "Create")
.bold() .bold()
}) })
.disabled(text.count == 0 || description.count == 0 || selectedDeck == nil) .disabled(text.count == 0 || description.count == 0 || selectedDeck == nil)
@@ -65,15 +67,15 @@ struct AddFlashCardView: View {
} }
private func createFlashcard() { private func createFlashcard() {
let flashcard = Flashcard(context: moc)
flashcard.id = UUID()
flashcard.name = self.text flashcard.name = self.text
flashcard.desc = self.description flashcard.desc = self.description
flashcard.nextSpacedRepetitionMilestone = 0
flashcard.lastSeenOn = nil
flashcard.shownCount = 0
flashcard.dateAdded = Date()
flashcard.deck = selectedDeck flashcard.deck = selectedDeck
if !edit {
flashcard.nextSpacedRepetitionMilestone = 0
flashcard.lastSeenOn = nil
flashcard.shownCount = 0
flashcard.dateAdded = Date()
}
try? moc.save() try? moc.save()
} }
@@ -81,6 +83,8 @@ struct AddFlashCardView: View {
#Preview { #Preview {
@State var isShowing = true @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) .environment(\.managedObjectContext, DataController.preview.container.viewContext)
} }

View File

@@ -75,11 +75,17 @@ struct FlashCardListView: View {
} }
} }
.sheet(isPresented: $addFlashcard, content: { .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() { private func refreshFlashcards() {
let request = NSFetchRequest<Flashcard>(entityName: "Flashcard") let request = NSFetchRequest<Flashcard>(entityName: "Flashcard")
request.sortDescriptors = [NSSortDescriptor(key: "favorite", ascending: false), NSSortDescriptor(key: "dateAdded", ascending: false)] request.sortDescriptors = [NSSortDescriptor(key: "favorite", ascending: false), NSSortDescriptor(key: "dateAdded", ascending: false)]

View File

@@ -13,6 +13,7 @@ struct FlashCardView: View {
var flashcard: Flashcard var flashcard: Flashcard
@Binding var showDescription: Bool @Binding var showDescription: Bool
@Environment(\.colorScheme) var colorScheme @Environment(\.colorScheme) var colorScheme
@State var editFlashcard: Bool = false
var body: some View { var body: some View {
@@ -48,6 +49,16 @@ struct FlashCardView: View {
.onTapGesture { .onTapGesture {
self.showDescription = true 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")
}
}
} }
} }