File tree 5 files changed +21
-6
lines changed
androidMain/kotlin/dev/gitlive/firebase/firestore
commonMain/kotlin/dev/gitlive/firebase/firestore
commonTest/kotlin/dev/gitlive/firebase/firestore
iosMain/kotlin/dev/gitlive/firebase/firestore
jsMain/kotlin/dev/gitlive/firebase/firestore
5 files changed +21
-6
lines changed Original file line number Diff line number Diff line change @@ -57,7 +57,7 @@ val LocalCacheSettings.android: com.google.firebase.firestore.LocalCacheSettings
57
57
private val callbackExecutorMap = ConcurrentHashMap < com.google.firebase.firestore.FirebaseFirestore , Executor > ()
58
58
59
59
actual typealias NativeFirebaseFirestore = com.google.firebase.firestore.FirebaseFirestore
60
- actual internal class NativeFirebaseFirestoreWrapper actual constructor(actual val native : NativeFirebaseFirestore ) {
60
+ internal actual class NativeFirebaseFirestoreWrapper actual constructor(actual val native : NativeFirebaseFirestore ) {
61
61
62
62
actual var settings: FirebaseFirestoreSettings
63
63
get() = with (native.firestoreSettings) {
Original file line number Diff line number Diff line change @@ -40,7 +40,8 @@ class FirebaseFirestore internal constructor(private val wrapper: NativeFirebase
40
40
41
41
constructor (native: NativeFirebaseFirestore ) : this (NativeFirebaseFirestoreWrapper (native))
42
42
43
- val native = wrapper.native
43
+ // Important to leave this as a get property since on JS it is initialized lazily
44
+ val native get() = wrapper.native
44
45
var settings: FirebaseFirestoreSettings
45
46
get() = wrapper.settings
46
47
set(value) {
Original file line number Diff line number Diff line change @@ -39,7 +39,13 @@ class FirestoreSourceTest {
39
39
40
40
firestore = Firebase .firestore(app).apply {
41
41
useEmulator(emulatorHost, 8080 )
42
- setSettings(persistenceEnabled = persistenceEnabled)
42
+ settings = firestoreSettings(settings) {
43
+ cacheSettings = if (persistenceEnabled) {
44
+ persistentCacheSettings { }
45
+ } else {
46
+ memoryCacheSettings { }
47
+ }
48
+ }
43
49
}
44
50
}
45
51
Original file line number Diff line number Diff line change @@ -39,7 +39,7 @@ val LocalCacheSettings.ios: FIRLocalCacheSettingsProtocol get() = when (this) {
39
39
actual typealias NativeFirebaseFirestore = FIRFirestore
40
40
41
41
@Suppress(" UNCHECKED_CAST" )
42
- actual internal class NativeFirebaseFirestoreWrapper internal actual constructor(actual val native : NativeFirebaseFirestore ) {
42
+ internal actual class NativeFirebaseFirestoreWrapper internal actual constructor(actual val native : NativeFirebaseFirestore ) {
43
43
44
44
actual var settings: FirebaseFirestoreSettings = firestoreSettings { }.also {
45
45
native.settings = it.ios
Original file line number Diff line number Diff line change @@ -78,7 +78,7 @@ actual fun Firebase.firestore(app: FirebaseApp) =
78
78
79
79
actual data class NativeFirebaseFirestore (val js : JsFirestore )
80
80
81
- actual internal class NativeFirebaseFirestoreWrapper internal constructor(
81
+ internal actual class NativeFirebaseFirestoreWrapper internal constructor(
82
82
private val createNative : NativeFirebaseFirestoreWrapper .() -> NativeFirebaseFirestore
83
83
){
84
84
@@ -98,13 +98,21 @@ actual internal class NativeFirebaseFirestoreWrapper internal constructor(
98
98
private data class EmulatorSettings (val host : String , val port : Int )
99
99
100
100
actual var settings: FirebaseFirestoreSettings = FirebaseFirestoreSettings .Builder ().build()
101
+ set(value) {
102
+ if (lazyNative.isInitialized()) {
103
+ throw IllegalStateException (" FirebaseFirestore has already been started and its settings can no longer be changed. You can only call setFirestoreSettings() before calling any other methods on a FirebaseFirestore object." )
104
+ } else {
105
+ field = value
106
+ }
107
+ }
101
108
private var emulatorSettings: EmulatorSettings ? = null
102
109
103
110
// initializeFirestore must be called before any call, including before `getFirestore()`
104
111
// To allow settings to be updated, we defer creating the wrapper until the first call to `native`
105
- actual val native : NativeFirebaseFirestore by lazy {
112
+ private val lazyNative = lazy {
106
113
createNative()
107
114
}
115
+ actual val native: NativeFirebaseFirestore by lazyNative
108
116
private val js get() = native.js
109
117
110
118
actual fun collection (collectionPath : String ) = rethrow { NativeCollectionReference (jsCollection(js, collectionPath)) }
You can’t perform that action at this time.
0 commit comments