base commit

multistore
Laurent 2 years ago
parent fecda22494
commit 865537f66b
  1. 20
      PadelClub.xcodeproj/project.pbxproj
  2. 20
      PadelClub/ContentView.swift
  3. 13
      PadelClub/Data/Club.swift
  4. 12
      PadelClub/Data/DataStore.swift
  5. 10
      PadelClub/PadelClubApp.swift

@ -15,6 +15,9 @@
C425D41C2B6D249E002A7B48 /* PadelClubUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C425D41B2B6D249E002A7B48 /* PadelClubUITests.swift */; }; C425D41C2B6D249E002A7B48 /* PadelClubUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C425D41B2B6D249E002A7B48 /* PadelClubUITests.swift */; };
C425D41E2B6D249E002A7B48 /* PadelClubUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C425D41D2B6D249E002A7B48 /* PadelClubUITestsLaunchTests.swift */; }; C425D41E2B6D249E002A7B48 /* PadelClubUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C425D41D2B6D249E002A7B48 /* PadelClubUITestsLaunchTests.swift */; };
C425D45A2B6D255B002A7B48 /* LeStorage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C425D4542B6D24E2002A7B48 /* LeStorage.framework */; }; C425D45A2B6D255B002A7B48 /* LeStorage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C425D4542B6D24E2002A7B48 /* LeStorage.framework */; };
C4A47D5A2B6D383C00ADC637 /* Tournament.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A47D592B6D383C00ADC637 /* Tournament.swift */; };
C4A47D5E2B6D38EC00ADC637 /* DataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A47D5D2B6D38EC00ADC637 /* DataStore.swift */; };
C4A47D632B6D3D6500ADC637 /* Club.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A47D622B6D3D6500ADC637 /* Club.swift */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
@ -60,6 +63,9 @@
C425D41B2B6D249E002A7B48 /* PadelClubUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PadelClubUITests.swift; sourceTree = "<group>"; }; C425D41B2B6D249E002A7B48 /* PadelClubUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PadelClubUITests.swift; sourceTree = "<group>"; };
C425D41D2B6D249E002A7B48 /* PadelClubUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PadelClubUITestsLaunchTests.swift; sourceTree = "<group>"; }; C425D41D2B6D249E002A7B48 /* PadelClubUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PadelClubUITestsLaunchTests.swift; sourceTree = "<group>"; };
C425D44E2B6D24E1002A7B48 /* LeStorage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = LeStorage.xcodeproj; path = ../../LeStorage/LeStorage.xcodeproj; sourceTree = "<group>"; }; C425D44E2B6D24E1002A7B48 /* LeStorage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = LeStorage.xcodeproj; path = ../../LeStorage/LeStorage.xcodeproj; sourceTree = "<group>"; };
C4A47D592B6D383C00ADC637 /* Tournament.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tournament.swift; sourceTree = "<group>"; };
C4A47D5D2B6D38EC00ADC637 /* DataStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataStore.swift; sourceTree = "<group>"; };
C4A47D622B6D3D6500ADC637 /* Club.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Club.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -115,6 +121,7 @@
C425D44E2B6D24E1002A7B48 /* LeStorage.xcodeproj */, C425D44E2B6D24E1002A7B48 /* LeStorage.xcodeproj */,
C425D4002B6D249D002A7B48 /* PadelClubApp.swift */, C425D4002B6D249D002A7B48 /* PadelClubApp.swift */,
C425D4022B6D249D002A7B48 /* ContentView.swift */, C425D4022B6D249D002A7B48 /* ContentView.swift */,
C4A47D5F2B6D3B2D00ADC637 /* Data */,
C425D4042B6D249E002A7B48 /* Assets.xcassets */, C425D4042B6D249E002A7B48 /* Assets.xcassets */,
C425D4062B6D249E002A7B48 /* Preview Content */, C425D4062B6D249E002A7B48 /* Preview Content */,
); );
@ -162,6 +169,16 @@
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
C4A47D5F2B6D3B2D00ADC637 /* Data */ = {
isa = PBXGroup;
children = (
C4A47D5D2B6D38EC00ADC637 /* DataStore.swift */,
C4A47D592B6D383C00ADC637 /* Tournament.swift */,
C4A47D622B6D3D6500ADC637 /* Club.swift */,
);
path = Data;
sourceTree = "<group>";
};
/* End PBXGroup section */ /* End PBXGroup section */
/* Begin PBXNativeTarget section */ /* Begin PBXNativeTarget section */
@ -315,6 +332,9 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
C4A47D5A2B6D383C00ADC637 /* Tournament.swift in Sources */,
C4A47D5E2B6D38EC00ADC637 /* DataStore.swift in Sources */,
C4A47D632B6D3D6500ADC637 /* Club.swift in Sources */,
C425D4032B6D249D002A7B48 /* ContentView.swift in Sources */, C425D4032B6D249D002A7B48 /* ContentView.swift in Sources */,
C425D4012B6D249D002A7B48 /* PadelClubApp.swift in Sources */, C425D4012B6D249D002A7B48 /* PadelClubApp.swift in Sources */,
); );

@ -9,19 +9,33 @@ import SwiftUI
import LeStorage import LeStorage
struct ContentView: View { struct ContentView: View {
@ObservedObject var dataStore = DataStore()
var body: some View { var body: some View {
VStack { VStack {
Image(systemName: "globe") Image(systemName: "globe")
.imageScale(.large) .imageScale(.large)
.foregroundStyle(.tint) .foregroundStyle(.tint)
Text("Hello, world!") Text("Hello, world!")
List(self.dataStore.clubs.items) { club in
Text(club.name).id(club.id)
}
Button("add") {
self._add()
}.padding()
.buttonStyle(.bordered)
} }
.padding()
} }
func test() { func _add() {
let s = Store() let id = (0...1000000).randomElement()!
let club: Club = Club(name: "test\(id)")
self.dataStore.clubs.addOrUpdate(instance: club)
} }
} }
#Preview { #Preview {

@ -6,3 +6,16 @@
// //
import Foundation import Foundation
import LeStorage
class Club : Storable, ObservableObject {
static var resourceName: String = "clubs"
var id: String = UUID().uuidString
var name: String
init(name: String) {
self.name = name
}
}

@ -7,17 +7,19 @@
import Foundation import Foundation
import LeStorage import LeStorage
import SwiftUI
class DataStore { class DataStore : ObservableObject {
static let main: DataStore = DataStore()
fileprivate var _store: Store fileprivate var _store: Store
fileprivate(set) var tournaments: StoredCollection<Tournament> @ObservedObject fileprivate(set) var tournaments: StoredCollection<Tournament>
@ObservedObject fileprivate(set) var clubs: StoredCollection<Club>
init() { init() {
let store = Store(synchronizationApiURL: "http://127.0.0.1:8000/") let store = Store(synchronizationApiURL: "https://padelclub.app/api/")
self.tournaments = store.registerCollection(synchronized: true) self.tournaments = store.registerCollection(synchronized: false)
self.clubs = store.registerCollection(synchronized: false)
self._store = store self._store = store
} }

@ -6,12 +6,22 @@
// //
import SwiftUI import SwiftUI
import LeStorage
@main @main
struct PadelClubApp: App { struct PadelClubApp: App {
var body: some Scene { var body: some Scene {
WindowGroup { WindowGroup {
ContentView() ContentView()
.onAppear {
self._onAppear()
}
} }
} }
fileprivate func _onAppear() {
let docURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
Logger.log("doc dir = \(docURL.absoluteString)")
}
} }

Loading…
Cancel
Save