Skip to content

Commit bfc4f75

Browse files
committed
Merge branch 'master' into readme
* master: updated Android side Initial upgrade with fix for listeners being duplicated
2 parents b740f4e + da8e2a9 commit bfc4f75

File tree

9 files changed

+922
-363
lines changed

9 files changed

+922
-363
lines changed

android/src/main/java/io/fullstack/firestack/FirestackDatabase.java

Lines changed: 277 additions & 126 deletions
Large diffs are not rendered by default.

android/src/main/java/io/fullstack/firestack/FirestackUtils.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.facebook.react.bridge.ReadableArray;
1818
import com.facebook.react.bridge.ReadableMapKeySetIterator;
1919
import com.facebook.react.bridge.ReadableType;
20+
import com.google.firebase.database.DataSnapshot;
2021

2122
public class FirestackUtils {
2223
private static final String TAG = "FirestackUtils";
@@ -42,6 +43,77 @@ public static void sendEvent(final ReactContext context,
4243
.emit(eventName, params);
4344
}
4445

46+
// snapshot
47+
public static WritableMap dataSnapshotToMap(String name, DataSnapshot dataSnapshot) {
48+
WritableMap data = Arguments.createMap();
49+
50+
data.putString("key", dataSnapshot.getKey());
51+
data.putBoolean("exists", dataSnapshot.exists());
52+
data.putBoolean("hasChildren", dataSnapshot.hasChildren());
53+
54+
data.putDouble("childrenCount", dataSnapshot.getChildrenCount());
55+
56+
WritableMap valueMap = FirestackUtils.castSnapshotValue(dataSnapshot);
57+
data.putMap("value", valueMap);
58+
59+
Object priority = dataSnapshot.getPriority();
60+
if (priority == null) {
61+
data.putString("priority", null);
62+
} else {
63+
data.putString("priority", priority.toString());
64+
}
65+
66+
WritableMap eventMap = Arguments.createMap();
67+
eventMap.putString("eventName", name);
68+
eventMap.putMap("snapshot", data);
69+
return eventMap;
70+
}
71+
72+
public static <Any> Any castSnapshotValue(DataSnapshot snapshot) {
73+
if (snapshot.hasChildren()) {
74+
WritableMap data = Arguments.createMap();
75+
for (DataSnapshot child : snapshot.getChildren()) {
76+
Any castedChild = castSnapshotValue(child);
77+
switch (castedChild.getClass().getName()) {
78+
case "java.lang.Boolean":
79+
data.putBoolean(child.getKey(), (Boolean) castedChild);
80+
break;
81+
case "java.lang.Integer":
82+
data.putInt(child.getKey(), (Integer) castedChild);
83+
break;
84+
case "java.lang.Double":
85+
data.putDouble(child.getKey(), (Double) castedChild);
86+
break;
87+
case "java.lang.String":
88+
data.putString(child.getKey(), (String) castedChild);
89+
break;
90+
case "com.facebook.react.bridge.WritableNativeMap":
91+
data.putMap(child.getKey(), (WritableMap) castedChild);
92+
break;
93+
}
94+
}
95+
return (Any) data;
96+
} else {
97+
if (snapshot.getValue() != null) {
98+
String type = snapshot.getValue().getClass().getName();
99+
switch (type) {
100+
case "java.lang.Boolean":
101+
return (Any)((Boolean) snapshot.getValue());
102+
case "java.lang.Long":
103+
return (Any)((Integer)(((Long) snapshot.getValue()).intValue()));
104+
case "java.lang.Double":
105+
return (Any)((Double) snapshot.getValue());
106+
case "java.lang.String":
107+
return (Any)((String) snapshot.getValue());
108+
default:
109+
return (Any) null;
110+
}
111+
} else {
112+
return (Any) null;
113+
}
114+
}
115+
}
116+
45117
public static Map<String, Object> recursivelyDeconstructReadableMap(ReadableMap readableMap) {
46118
ReadableMapKeySetIterator iterator = readableMap.keySetIterator();
47119
Map<String, Object> deconstructedMap = new HashMap<>();

ios/Firestack/FirestackDatabase.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
}
1818

19-
@property (nonatomic) NSArray *_DBHandles;
19+
@property (nonatomic) NSDictionary *_DBHandles;
2020
@property (nonatomic, weak) FIRDatabaseReference *ref;
2121

2222
@end

0 commit comments

Comments
 (0)