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,13 +37,19 @@ 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 | ||||||
|                         } catch { |                         } catch { | ||||||
|                            print("Something went wrong while saving the deck") |                             print("Something went wrong while saving the deck") | ||||||
|                         } |                         } | ||||||
|                     }, label: { |                     }, label: { | ||||||
|                         Text(edit ? "Edit": "Create") |                         Text(edit ? "Edit": "Create") | ||||||
| @@ -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