Skip to content

Commit 4e0d188

Browse files
committed
fix(firestore, emulator): avoid double calls to useEmulator
covers case where javascript hot-reloads and loses state then calls again by tracking state of calls natively Fixes #5723
1 parent 276630d commit 4e0d188

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

packages/firestore/android/src/main/java/io/invertase/firebase/firestore/UniversalFirebaseFirestoreModule.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@
2828
import io.invertase.firebase.common.UniversalFirebaseModule;
2929
import io.invertase.firebase.common.UniversalFirebasePreferences;
3030
import java.nio.charset.StandardCharsets;
31+
import java.util.HashMap;
3132
import java.util.Map;
3233
import java.util.Objects;
3334

3435
public class UniversalFirebaseFirestoreModule extends UniversalFirebaseModule {
3536

37+
private static HashMap<String, String> emulatorConfigs = new HashMap<>();
38+
3639
UniversalFirebaseFirestoreModule(Context context, String serviceName) {
3740
super(context, serviceName);
3841
}
@@ -49,7 +52,10 @@ Task<Void> useEmulator(String appName, String host, int port) {
4952
return Tasks.call(
5053
getExecutor(),
5154
() -> {
52-
getFirestoreForApp(appName).useEmulator(host, port);
55+
if (emulatorConfigs.get(appName) == null) {
56+
emulatorConfigs.put(appName, "true");
57+
getFirestoreForApp(appName).useEmulator(host, port);
58+
}
5359
return null;
5460
});
5561
}

packages/firestore/ios/RNFBFirestore/RNFBFirestoreModule.m

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
#import "RNFBFirestoreCommon.h"
2121
#import "RNFBPreferences.h"
2222

23+
NSMutableDictionary *emulatorConfigs;
24+
2325
@implementation RNFBFirestoreModule
2426
#pragma mark -
2527
#pragma mark Module Setup
@@ -142,13 +144,19 @@ + (BOOL)requiresMainQueueSetup {
142144
: (FIRApp *)firebaseApp
143145
: (nonnull NSString *)host
144146
: (NSInteger)port) {
145-
FIRFirestore *firestore = [RNFBFirestoreCommon getFirestoreForApp:firebaseApp];
146-
[firestore useEmulatorWithHost:host port:port];
147-
148-
// It is not sufficient to just use emulator. You have toggle SSL off too.
149-
FIRFirestoreSettings *settings = firestore.settings;
150-
settings.sslEnabled = FALSE;
151-
firestore.settings = settings;
147+
if (emulatorConfigs == nil) {
148+
emulatorConfigs = [[NSMutableDictionary alloc] init];
149+
}
150+
if (!emulatorConfigs[firebaseApp.name]) {
151+
FIRFirestore *firestore = [RNFBFirestoreCommon getFirestoreForApp:firebaseApp];
152+
[firestore useEmulatorWithHost:host port:port];
153+
emulatorConfigs[firebaseApp.name] = @YES;
154+
155+
// It is not sufficient to just use emulator. You have toggle SSL off too.
156+
FIRFirestoreSettings *settings = firestore.settings;
157+
settings.sslEnabled = FALSE;
158+
firestore.settings = settings;
159+
}
152160
}
153161

154162
RCT_EXPORT_METHOD(waitForPendingWrites

0 commit comments

Comments
 (0)