mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-03-27 11:51:16 +01:00
(WIP) SwiftUI working demo for LiveList<D>
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user