From a136ee333a3b03207a18d6406f40c728f178dd14 Mon Sep 17 00:00:00 2001 From: oliverhnat Date: Mon, 6 May 2024 20:30:42 +0200 Subject: [PATCH] Adding is a bit funky, Editing decks works --- WordAX/Views/Deck/AddDeckView.swift | 10 ++++--- WordAX/Views/Deck/DeckListView.swift | 40 +++++++++++++++++++++++----- 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/WordAX/Views/Deck/AddDeckView.swift b/WordAX/Views/Deck/AddDeckView.swift index 8a52c75..c8f0e14 100644 --- a/WordAX/Views/Deck/AddDeckView.swift +++ b/WordAX/Views/Deck/AddDeckView.swift @@ -11,6 +11,8 @@ struct AddDeckView: View { @Binding var isShowing: Bool @Environment(\.managedObjectContext) var moc @State var name: String = "" + var deck: Deck + var edit: Bool = false var body: some View { NavigationStack { List { @@ -27,8 +29,6 @@ struct AddDeckView: View { } ToolbarItemGroup(placement: .topBarTrailing) { Button(action: { - let deck = Deck(context: moc) - deck.id = UUID() deck.name = name deck.dateAdded = Date() do { @@ -38,7 +38,7 @@ struct AddDeckView: View { print("Something went wrong while saving the deck") } }, label: { - Text("Create") + Text(edit ? "Edit": "Create") .bold() }) .disabled(name.isEmpty) @@ -51,6 +51,8 @@ struct AddDeckView: View { #Preview { @State var isShowing = true - return AddDeckView(isShowing: $isShowing) + let deck = Deck(context: DataController.preview.container.viewContext) + deck.id = UUID() + return AddDeckView(isShowing: $isShowing, deck: deck) .environment(\.managedObjectContext, DataController.preview.container.viewContext) } diff --git a/WordAX/Views/Deck/DeckListView.swift b/WordAX/Views/Deck/DeckListView.swift index cd841ad..e3d0424 100644 --- a/WordAX/Views/Deck/DeckListView.swift +++ b/WordAX/Views/Deck/DeckListView.swift @@ -11,12 +11,15 @@ struct DeckListView: View { @FetchRequest(sortDescriptors: [NSSortDescriptor(key: "dateAdded", ascending: false)]) var decks: FetchedResults @State var addDeck = false @Environment(\.managedObjectContext) var moc - @State var addFlashcard = false + @State var editDeck: Bool = false + @State var deckToEdit: Deck? + @State var createdDeck: Deck? var body: some View { NavigationStack { List { Button(action: { self.addDeck = true + self.createdDeck = createDeck() }) { HStack { Image(systemName: "plus.circle.fill") @@ -24,10 +27,23 @@ struct DeckListView: View { } } ForEach(decks) { deck in - NavigationLink { - FlashCardListView(deck: deck) - } label: { - Text(deck.name ?? "Unknown deck name") + HStack { + Button { + deckToEdit = deck + editDeck = true + } label: { + Image(systemName: "pencil") + .contentShape(Rectangle()) + .foregroundStyle(.blue) + } + .buttonStyle(PlainButtonStyle()) + + NavigationLink { + FlashCardListView(deck: deck) + } label: { + Text(deck.name ?? "Unknown deck name") + } + .contentShape(Rectangle()) } } .onDelete(perform: { offsets in @@ -50,10 +66,22 @@ struct DeckListView: View { } .navigationTitle("All decks") } + .onAppear { + print(decks.count) + } + .sheet(isPresented: Binding(get: {editDeck}, set: {editDeck = $0})) { + AddDeckView(isShowing: $editDeck, name: deckToEdit?.name ?? "", deck: deckToEdit ?? createDeck(), edit: deckToEdit != nil) + } .sheet(isPresented: $addDeck, content: { - AddDeckView(isShowing: $addDeck) + AddDeckView(isShowing: $addDeck, deck: createdDeck ?? createDeck()) }) } + + func createDeck() -> Deck { + let deck = Deck(context: moc) + deck.id = UUID() + return deck + } } #Preview {