Adding is a bit funky, Editing decks works

This commit is contained in:
2024-05-06 20:30:42 +02:00
parent 492518ccdb
commit a136ee333a
2 changed files with 40 additions and 10 deletions

View File

@@ -11,6 +11,8 @@ struct AddDeckView: View {
@Binding var isShowing: Bool @Binding var isShowing: Bool
@Environment(\.managedObjectContext) var moc @Environment(\.managedObjectContext) var moc
@State var name: String = "" @State var name: String = ""
var deck: Deck
var edit: Bool = false
var body: some View { var body: some View {
NavigationStack { NavigationStack {
List { List {
@@ -27,8 +29,6 @@ struct AddDeckView: View {
} }
ToolbarItemGroup(placement: .topBarTrailing) { ToolbarItemGroup(placement: .topBarTrailing) {
Button(action: { Button(action: {
let deck = Deck(context: moc)
deck.id = UUID()
deck.name = name deck.name = name
deck.dateAdded = Date() deck.dateAdded = Date()
do { do {
@@ -38,7 +38,7 @@ struct AddDeckView: View {
print("Something went wrong while saving the deck") print("Something went wrong while saving the deck")
} }
}, label: { }, label: {
Text("Create") Text(edit ? "Edit": "Create")
.bold() .bold()
}) })
.disabled(name.isEmpty) .disabled(name.isEmpty)
@@ -51,6 +51,8 @@ struct AddDeckView: View {
#Preview { #Preview {
@State var isShowing = true @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) .environment(\.managedObjectContext, DataController.preview.container.viewContext)
} }

View File

@@ -11,12 +11,15 @@ struct DeckListView: View {
@FetchRequest(sortDescriptors: [NSSortDescriptor(key: "dateAdded", ascending: false)]) var decks: FetchedResults<Deck> @FetchRequest(sortDescriptors: [NSSortDescriptor(key: "dateAdded", ascending: false)]) var decks: FetchedResults<Deck>
@State var addDeck = false @State var addDeck = false
@Environment(\.managedObjectContext) var moc @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 { var body: some View {
NavigationStack { NavigationStack {
List { List {
Button(action: { Button(action: {
self.addDeck = true self.addDeck = true
self.createdDeck = createDeck()
}) { }) {
HStack { HStack {
Image(systemName: "plus.circle.fill") Image(systemName: "plus.circle.fill")
@@ -24,11 +27,24 @@ struct DeckListView: View {
} }
} }
ForEach(decks) { deck in ForEach(decks) { deck in
HStack {
Button {
deckToEdit = deck
editDeck = true
} label: {
Image(systemName: "pencil")
.contentShape(Rectangle())
.foregroundStyle(.blue)
}
.buttonStyle(PlainButtonStyle())
NavigationLink { NavigationLink {
FlashCardListView(deck: deck) FlashCardListView(deck: deck)
} label: { } label: {
Text(deck.name ?? "Unknown deck name") Text(deck.name ?? "Unknown deck name")
} }
.contentShape(Rectangle())
}
} }
.onDelete(perform: { offsets in .onDelete(perform: { offsets in
for index in offsets { for index in offsets {
@@ -50,10 +66,22 @@ struct DeckListView: View {
} }
.navigationTitle("All decks") .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: { .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 { #Preview {