(WIP) SwiftUI working demo for LiveList<D>

This commit is contained in:
John Estropia
2019-10-04 19:12:32 +09:00
parent c5a996d5ed
commit 953c9723a8
12 changed files with 1422 additions and 347 deletions

View File

@@ -52,7 +52,7 @@ struct ColorsDemo {
static let stack: DataStack = {
return DataStack(
let dataStack = DataStack(
CoreStoreSchema(
modelVersion: "ColorsDemo",
entities: [
@@ -63,16 +63,18 @@ struct ColorsDemo {
]
)
)
}()
static let palettes: ListMonitor<Palette> = {
try! ColorsDemo.stack.addStorageAndWait(
try! dataStack.addStorageAndWait(
SQLiteStore(
fileName: "ColorsDemo.sqlite",
localStorageOptions: .recreateStoreOnModelMismatch
)
)
return dataStack
}()
static let palettes: ListMonitor<Palette> = {
return ColorsDemo.stack.monitorSectionedList(
From<Palette>()
.sectionBy(\.colorName)

View File

@@ -10,12 +10,21 @@
import SwiftUI
import UIKit
import CoreStore
@available(iOS 13.0.0, *)
class SwiftUIHostingController: UIHostingController<SwiftUIView> {
@objc required dynamic init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder, rootView: SwiftUIView())
super.init(
coder: aDecoder,
rootView: SwiftUIView(
palettes: DataStackEnvironment.defaultValue.liveList(
From<Palette>()
.orderBy(.ascending(\.hue))
)
)
)
}
}

View File

@@ -11,11 +11,23 @@
import SwiftUI
import CoreStore
@available(iOS 13.0, *)
struct DataStackEnvironment: EnvironmentKey {
static let defaultValue = ColorsDemo.stack
}
@available(iOS 13.0.0, *)
extension EnvironmentValues {
var dataStack: DataStack {
return ColorsDemo.stack
get {
return self[DataStackEnvironment.self]
}
set {
self[DataStackEnvironment.self] = newValue
}
}
}
@@ -23,13 +35,13 @@ extension EnvironmentValues {
struct SwiftUIView: View {
@Environment(\.dataStack) var dataStack: DataStack
var palettes = ColorsDemo.palettes
@ObservedObject var palettes: LiveList<Palette>
var body: some View {
NavigationView {
List {
ForEach(palettes.objectsInAllSections(), id: \.self) { palette in
ForEach(palettes.snapshot, id: \.self) { palette in
NavigationLink(
destination: DetailView(palette: palette)
) {
@@ -40,7 +52,14 @@ struct SwiftUIView: View {
}
}
}.onDelete { indices in
// self.events.delete(at: indices, from: self.viewContext)
let palettes = self.palettes.snapshot[indices]
self.dataStack.perform(
asynchronous: { transaction in
palettes.forEach(transaction.delete(_:))
},
completion: { _ in }
)
}
}
.navigationBarTitle(Text("Master"))
@@ -48,7 +67,7 @@ struct SwiftUIView: View {
leading: EditButton(),
trailing: Button(
action: {
self.dataStack.perform(
asynchronous: { transaction in
@@ -83,7 +102,12 @@ struct DetailView: View {
@available(iOS 13.0.0, *)
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
SwiftUIView(
palettes: DataStackEnvironment.defaultValue.liveList(
From<Palette>()
.orderBy(.ascending(\.hue))
)
)
}
}