180 lines
7.3 KiB
Swift
180 lines
7.3 KiB
Swift
//
|
|
// ConsoleLibraryView.swift
|
|
// Zockerhoehle
|
|
//
|
|
// Created by Julian-Steffen Müller on 01.08.19.
|
|
// Copyright © 2019 Julian-Steffen Müller. All rights reserved.
|
|
//
|
|
|
|
import SwiftUI
|
|
import CoreData
|
|
|
|
struct ModalAddToConsoleLibrary : View {
|
|
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
|
|
|
|
@State var modalAddName : String = ""
|
|
@State var modalAddToWishlist : Bool
|
|
@State var modalIsDigital : Bool = false
|
|
|
|
@State var isVideogamesSelected : Bool
|
|
|
|
var console : Console;
|
|
|
|
private func addGameToLibrary() {
|
|
let game = Game(context: CDManager.shared.viewContext)
|
|
game.name = self.modalAddName
|
|
game.console = self.console;
|
|
game.inWishlist = self.modalAddToWishlist
|
|
game.isDigital = self.modalIsDigital
|
|
}
|
|
|
|
private func addAccessoryToLibrary() {
|
|
let accessory = Accessory(context: CDManager.shared.viewContext)
|
|
accessory.name = self.modalAddName
|
|
accessory.console = self.console
|
|
accessory.inWishlist = self.modalAddToWishlist
|
|
}
|
|
|
|
var addButton : some View {
|
|
return Button(action: {
|
|
if (self.isVideogamesSelected) {
|
|
self.addGameToLibrary()
|
|
|
|
}else{
|
|
self.addAccessoryToLibrary()
|
|
}
|
|
self.presentationMode.wrappedValue.dismiss()},
|
|
label: { Text("Fertig") })
|
|
.disabled(self.modalAddName.trimmingCharacters(in: .whitespacesAndNewlines) == "" )
|
|
}
|
|
|
|
var body: some View {
|
|
NavigationView {
|
|
Form {
|
|
TextField("Name", text: $modalAddName)
|
|
if self.isVideogamesSelected {
|
|
Toggle(isOn: $modalIsDigital, label: {
|
|
Text("Ist Digital")
|
|
})
|
|
}
|
|
Toggle(isOn: $modalAddToWishlist, label: {
|
|
Text("Auf die Wunschliste")
|
|
})
|
|
}
|
|
.font(.caption)
|
|
.navigationBarTitle(self.isVideogamesSelected ? Text("Spiel hinzufügen") : Text("Zubehör hinzufügen"))
|
|
.navigationBarItems(leading: Button(action: { self.presentationMode.wrappedValue.dismiss() },
|
|
label: {Text("Abbrechen")}),
|
|
//Add Button is disabled if no name is entered
|
|
trailing: addButton)
|
|
.navigationViewStyle(StackNavigationViewStyle())
|
|
}
|
|
}
|
|
}
|
|
|
|
struct ConsoleLibraryView : View {
|
|
@ObservedObject var console : Console
|
|
|
|
@Environment(\.managedObjectContext) private var viewContext
|
|
|
|
var gamesFetchRequest: FetchRequest<Game>
|
|
var games: FetchedResults<Game> { gamesFetchRequest.wrappedValue }
|
|
|
|
var accessoryFetchRequest: FetchRequest<Accessory>
|
|
var accessories: FetchedResults<Accessory> { accessoryFetchRequest.wrappedValue }
|
|
|
|
@State var isVideogamesSelected = true
|
|
@State var showWishlist = false
|
|
@State var showAddToConsoleLibraryModal: Bool = false
|
|
|
|
init (console: Console) {
|
|
self.console = console
|
|
|
|
self.gamesFetchRequest = FetchRequest<Game>(entity: Game.entity(), sortDescriptors: [NSSortDescriptor(key: "name", ascending: true)], predicate: NSPredicate(format: "console == %@", console))
|
|
|
|
self.accessoryFetchRequest = FetchRequest<Accessory>(entity: Accessory.entity(), sortDescriptors: [NSSortDescriptor(key: "name", ascending: true)], predicate: NSPredicate(format: "console == %@", console))
|
|
}
|
|
|
|
let columns : [GridItem] = [
|
|
GridItem(.adaptive(minimum: 100))
|
|
]
|
|
|
|
let defaultImage = UIImage()
|
|
|
|
var body: some View {
|
|
VStack {
|
|
HStack {
|
|
Spacer()
|
|
Picker("Options", selection: $isVideogamesSelected) {
|
|
Text("Videogames").tag(true)
|
|
Text("Accessories").tag(false)
|
|
|
|
}.pickerStyle(SegmentedPickerStyle())
|
|
Spacer()
|
|
}
|
|
if self.isVideogamesSelected {
|
|
ScrollView {
|
|
LazyVGrid(columns: columns, spacing: 20) {
|
|
ForEach(games.filter({$0.inWishlist == self.showWishlist})) { game in
|
|
NavigationLink(destination: GameDetailView(game: game)) {
|
|
if ICloudManager.fileExists(at: game.cover_icloud_path) {
|
|
Image(uiImage: ICloudManager.imageFrom(path: game.cover_icloud_path) ?? defaultImage)
|
|
.resizable()
|
|
.scaledToFit()
|
|
.cornerRadius(5)
|
|
}else{
|
|
Group {
|
|
Text(game.name)
|
|
.font(.caption)
|
|
.foregroundColor(Color.black)
|
|
.padding()
|
|
.multilineTextAlignment(.center)
|
|
}
|
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
.background(Color.gray)
|
|
.cornerRadius(5)
|
|
}
|
|
|
|
|
|
// if game.isDigital {
|
|
// Image("digitalGame")
|
|
// .resizable()
|
|
// .aspectRatio(contentMode: .fit)
|
|
// .frame(height: 15)
|
|
// }
|
|
}
|
|
}
|
|
}.padding()
|
|
}
|
|
}else {
|
|
List(accessories.filter({$0.inWishlist == self.showWishlist})) {accessory in
|
|
NavigationLink(destination: AccessoryDetailView(accessory: accessory)) {
|
|
Text("\(accessory.name)")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.navigationBarTitle(Text("\(self.console.name ?? "n/a")"), displayMode: .automatic)
|
|
.navigationBarItems(trailing:
|
|
HStack {
|
|
NavigationLink(destination: ConsoleEditView(console: self.console)) {
|
|
Image(systemName: "pencil.and.ellipsis.rectangle")
|
|
}
|
|
|
|
Button(action: { self.showAddToConsoleLibraryModal = true },
|
|
label: { Image(systemName: "plus")})
|
|
.padding(5)
|
|
|
|
Button(action: { self.showWishlist.toggle()},
|
|
label: { Image("wishlist")
|
|
.resizable()
|
|
.aspectRatio(contentMode: .fit)
|
|
})
|
|
.accentColor(self.showWishlist ? Color.red : Color.blue)
|
|
})
|
|
.sheet(isPresented: $showAddToConsoleLibraryModal) {
|
|
ModalAddToConsoleLibrary(modalAddToWishlist: self.showWishlist, isVideogamesSelected: self.isVideogamesSelected, console: self.console)
|
|
}
|
|
}
|
|
}
|