Skip to content

Commit 2a4df21

Browse files
authored
Fix (AnimatedPoint): support key-value object listeners for RN < 0.83 and Map listeners for RN >= 0.83 (#4113)
1 parent dbfb2f4 commit 2a4df21

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

src/classes/AnimatedPoint.js

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ export class AnimatedPoint extends AnimatedWithChildren {
2424
this.latitude = new Animated.Value(this.latitude);
2525
}
2626

27-
this._listeners = {};
27+
// React Native < 0.83 uses object, >= 0.83 uses Map
28+
// We only initialize to object if super didn't initialize it (or initiated it to empty object/null)
29+
// and we want to preserve the type if it is a Map.
30+
if (!this._listeners) {
31+
this._listeners = {};
32+
}
2833
}
2934

3035
setValue(point = DEFAULT_POINT) {
@@ -61,18 +66,36 @@ export class AnimatedPoint extends AnimatedWithChildren {
6166
}
6267
};
6368

64-
this._listeners[id] = {
69+
const listener = {
6570
longitude: this.longitude.addListener(completeCB),
6671
latitude: this.latitude.addListener(completeCB),
6772
};
6873

74+
if (this._listeners instanceof Map) {
75+
this._listeners.set(id, listener);
76+
} else {
77+
this._listeners[id] = listener;
78+
}
79+
6980
return id;
7081
}
7182

7283
removeListener(id) {
73-
this.longitude.removeListener(this._listeners[id].longitude);
74-
this.latitude.removeListener(this._listeners[id].latitude);
75-
delete this._listeners[id];
84+
if (this._listeners instanceof Map) {
85+
const listener = this._listeners.get(id);
86+
if (listener) {
87+
this.longitude.removeListener(listener.longitude);
88+
this.latitude.removeListener(listener.latitude);
89+
this._listeners.delete(id);
90+
}
91+
} else {
92+
const listener = this._listeners[id];
93+
if (listener) {
94+
this.longitude.removeListener(listener.longitude);
95+
this.latitude.removeListener(listener.latitude);
96+
delete this._listeners[id];
97+
}
98+
}
7699
}
77100

78101
spring(config = { coordinates: DEFAULT_COORD }) {

0 commit comments

Comments
 (0)