Working version of editing decks and adding decks
This commit is contained in:
@@ -11,8 +11,16 @@ 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
|
@State var deck: Deck?
|
||||||
var edit: Bool = false
|
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 {
|
var body: some View {
|
||||||
NavigationStack {
|
NavigationStack {
|
||||||
List {
|
List {
|
||||||
@@ -29,8 +37,14 @@ struct AddDeckView: View {
|
|||||||
}
|
}
|
||||||
ToolbarItemGroup(placement: .topBarTrailing) {
|
ToolbarItemGroup(placement: .topBarTrailing) {
|
||||||
Button(action: {
|
Button(action: {
|
||||||
deck.name = name
|
if let existingDeck = deck {
|
||||||
deck.dateAdded = Date()
|
existingDeck.name = name
|
||||||
|
} else {
|
||||||
|
let currentDeck = Deck(context: moc)
|
||||||
|
currentDeck.id = UUID()
|
||||||
|
currentDeck.dateAdded = Date()
|
||||||
|
currentDeck.name = name
|
||||||
|
}
|
||||||
do {
|
do {
|
||||||
try moc.save()
|
try moc.save()
|
||||||
self.isShowing = false
|
self.isShowing = false
|
||||||
@@ -44,7 +58,7 @@ struct AddDeckView: View {
|
|||||||
.disabled(name.isEmpty)
|
.disabled(name.isEmpty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.navigationTitle("Add Deck")
|
.navigationTitle(edit ? "Edit Deck" : "Add Deck")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,13 +13,11 @@ struct DeckListView: View {
|
|||||||
@Environment(\.managedObjectContext) var moc
|
@Environment(\.managedObjectContext) var moc
|
||||||
@State var editDeck: Bool = false
|
@State var editDeck: Bool = false
|
||||||
@State var deckToEdit: Deck?
|
@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")
|
||||||
@@ -66,22 +64,14 @@ struct DeckListView: View {
|
|||||||
}
|
}
|
||||||
.navigationTitle("All decks")
|
.navigationTitle("All decks")
|
||||||
}
|
}
|
||||||
.onAppear {
|
|
||||||
print(decks.count)
|
|
||||||
}
|
|
||||||
.sheet(isPresented: Binding(get: {editDeck}, set: {editDeck = $0})) {
|
.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: {
|
.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 {
|
#Preview {
|
||||||
|
|||||||
Reference in New Issue
Block a user