Working version of editing decks and adding decks

This commit is contained in:
2024-05-06 20:53:31 +02:00
parent a136ee333a
commit e11d79acb9
2 changed files with 22 additions and 18 deletions

View File

@@ -11,8 +11,16 @@ struct AddDeckView: View {
@Binding var isShowing: Bool
@Environment(\.managedObjectContext) var moc
@State var name: String = ""
var deck: Deck
var edit: Bool = false
@State var deck: Deck?
var edit: Bool
init(isShowing: Binding<Bool>, deck: Deck? = nil) {
self._isShowing = isShowing
self._name = State(initialValue: deck?.name ?? "")
self.deck = deck
self.edit = deck != nil
}
var body: some View {
NavigationStack {
List {
@@ -29,8 +37,14 @@ struct AddDeckView: View {
}
ToolbarItemGroup(placement: .topBarTrailing) {
Button(action: {
deck.name = name
deck.dateAdded = Date()
if let existingDeck = deck {
existingDeck.name = name
} else {
let currentDeck = Deck(context: moc)
currentDeck.id = UUID()
currentDeck.dateAdded = Date()
currentDeck.name = name
}
do {
try moc.save()
self.isShowing = false
@@ -44,7 +58,7 @@ struct AddDeckView: View {
.disabled(name.isEmpty)
}
}
.navigationTitle("Add Deck")
.navigationTitle(edit ? "Edit Deck" : "Add Deck")
}
}
}

View File

@@ -13,13 +13,11 @@ struct DeckListView: View {
@Environment(\.managedObjectContext) var moc
@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")
@@ -66,22 +64,14 @@ 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)
AddDeckView(isShowing: $editDeck, deck: deckToEdit)
}
.sheet(isPresented: $addDeck, content: {
AddDeckView(isShowing: $addDeck, deck: createdDeck ?? createDeck())
AddDeckView(isShowing: $addDeck)
})
}
func createDeck() -> Deck {
let deck = Deck(context: moc)
deck.id = UUID()
return deck
}
}
#Preview {