Skip to content

Commit 234fa29

Browse files
author
Wojtach
committed
feat: removeChangeListener handles documentChangeListener
1 parent 46b43d6 commit 234fa29

File tree

3 files changed

+25
-9
lines changed

3 files changed

+25
-9
lines changed

expo-example/ios/expoexample.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@
367367
);
368368
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
369369
PRODUCT_BUNDLE_IDENTIFIER = "com.couchbase.rn.expo-example";
370-
PRODUCT_NAME = expoexample;
370+
PRODUCT_NAME = "expoexample";
371371
SWIFT_OBJC_BRIDGING_HEADER = "expoexample/expoexample-Bridging-Header.h";
372372
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
373373
SWIFT_VERSION = 5.0;
@@ -395,7 +395,7 @@
395395
);
396396
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
397397
PRODUCT_BUNDLE_IDENTIFIER = "com.couchbase.rn.expo-example";
398-
PRODUCT_NAME = expoexample;
398+
PRODUCT_NAME = "expoexample";
399399
SWIFT_OBJC_BRIDGING_HEADER = "expoexample/expoexample-Bridging-Header.h";
400400
SWIFT_VERSION = 5.0;
401401
TARGETED_DEVICE_FAMILY = "1,2";

ios/CblReactnative.swift

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1197,13 +1197,18 @@ func replicator_AddDocumentChangeListener(
11971197
}
11981198
backgroundQueue.async {
11991199
if let listener = self.replicatorChangeListeners[token] as? ListenerToken {
1200-
replicator.removeChangeListener(withToken: listener)
1201-
self.replicatorChangeListeners.removeValue(forKey: token)
1202-
resolve(nil)
1203-
1204-
} else {
1205-
reject("REPLICATOR_ERROR", "No such replicator listener found with token \(token)", nil)
1206-
}
1200+
replicator.removeChangeListener(withToken: listener)
1201+
self.replicatorChangeListeners.removeValue(forKey: token)
1202+
resolve(nil)
1203+
return
1204+
} else if let listener = self.replicatorDocumentChangeListeners[token] as? ListenerToken {
1205+
replicator.removeChangeListener(withToken: listener)
1206+
self.replicatorDocumentChangeListeners.removeValue(forKey: token)
1207+
resolve(nil)
1208+
return
1209+
} else {
1210+
reject("REPLICATOR_ERROR", "No such listener found with token \(token)", nil)
1211+
}
12071212

12081213
}
12091214
}

src/CblReactNativeEngine.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,6 +1145,17 @@ export class CblReactNativeEngine implements ICoreEngine {
11451145
replicator_RemoveChangeListener(
11461146
args: ReplicationChangeListenerArgs
11471147
): Promise<void> {
1148+
if (this._replicatorDocumentChangeListeners.has(args.changeListenerToken)) {
1149+
this._replicatorDocumentChangeListeners.delete(args.changeListenerToken);
1150+
// Remove any subscription with the doc suffix
1151+
if (this._emitterSubscriptions.has(args.changeListenerToken + '_doc')) {
1152+
this._emitterSubscriptions
1153+
.get(args.changeListenerToken + '_doc')
1154+
?.remove();
1155+
this._emitterSubscriptions.delete(args.changeListenerToken + '_doc');
1156+
}
1157+
}
1158+
11481159
//remove the event subscription or you will have a leak
11491160
if (this._emitterSubscriptions.has(args.changeListenerToken)) {
11501161
this._emitterSubscriptions.get(args.changeListenerToken)?.remove();

0 commit comments

Comments
 (0)