Skip to content

Commit 09c1e71

Browse files
committed
Properly retain setting on JS
1 parent be243a9 commit 09c1e71

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,14 @@ public actual val Firebase.firestore: FirebaseFirestore get() =
3737
public actual fun Firebase.firestore(app: FirebaseApp): FirebaseFirestore =
3838
rethrow { FirebaseFirestore(NativeFirebaseFirestoreWrapper(app.js)) }
3939

40-
internal actual data class NativeFirebaseFirestore(val js: JsFirestore)
41-
42-
public operator fun FirebaseFirestore.Companion.invoke(js: JsFirestore): FirebaseFirestore = FirebaseFirestore(NativeFirebaseFirestore(js))
40+
internal actual data class NativeFirebaseFirestore(val js: JsFirestore, val settings: FirebaseFirestoreSettings)
41+
42+
public operator fun FirebaseFirestore.Companion.invoke(js: JsFirestore): FirebaseFirestore = FirebaseFirestore(
43+
NativeFirebaseFirestore(
44+
js,
45+
FirebaseFirestoreSettings.Builder().build(),
46+
),
47+
)
4348
public val FirebaseFirestore.js: JsFirestore get() = native.js
4449

4550
public actual data class FirebaseFirestoreSettings(

firebase-firestore/src/jsMain/kotlin/dev/gitlive/firebase/firestore/internal/NativeFirebaseFirestoreWrapper.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,17 @@ import kotlinx.coroutines.promise
2323

2424
// There is currently no way to check whether Firestore was already initialized for a given app without actually initializing it
2525
// Therefore we keep track of this internally
26-
private val appsWithFirestore = mutableListOf<FirebaseApp>()
26+
private val appsWithFirestore = mutableMapOf<FirebaseApp, FirebaseFirestoreSettings>()
2727

2828
internal actual class NativeFirebaseFirestoreWrapper internal constructor(
29+
initialSettings: FirebaseFirestoreSettings,
2930
private val createNative: NativeFirebaseFirestoreWrapper.() -> NativeFirebaseFirestore,
3031
private val canUpdateSettings: () -> Boolean,
3132
) {
3233

33-
internal actual constructor(native: NativeFirebaseFirestore) : this({ native }, { false })
34+
internal actual constructor(native: NativeFirebaseFirestore) : this(native.settings, { native }, { false })
3435
internal constructor(app: FirebaseApp) : this(
36+
appsWithFirestore[app] ?: FirebaseFirestoreSettings.Builder().build(),
3537
{
3638
NativeFirebaseFirestore(
3739
if (appsWithFirestore.contains(app)) {
@@ -41,9 +43,10 @@ internal actual class NativeFirebaseFirestoreWrapper internal constructor(
4143
emulatorSettings?.run {
4244
connectFirestoreEmulator(it, host, port)
4345
}
44-
appsWithFirestore.add(app)
46+
appsWithFirestore[app] = settings
4547
}
4648
},
49+
settings,
4750
)
4851
},
4952
{
@@ -53,7 +56,7 @@ internal actual class NativeFirebaseFirestoreWrapper internal constructor(
5356

5457
private data class EmulatorSettings(val host: String, val port: Int)
5558

56-
actual var settings: FirebaseFirestoreSettings = FirebaseFirestoreSettings.Builder().build()
59+
actual var settings: FirebaseFirestoreSettings = initialSettings
5760
set(value) {
5861
if (lazyNative.isInitialized() || !canUpdateSettings()) {
5962
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.")

0 commit comments

Comments
 (0)