Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit 12dc2e9

Browse files
arrayUnion with objects produces null values #1138
1 parent ef96b73 commit 12dc2e9

2 files changed

Lines changed: 9 additions & 3 deletions

File tree

demo-ng/app/tabs/firestore/firestore.component.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,12 @@ export class FirestoreComponent {
238238
fieldToDelete: firestore.FieldValue.delete(),
239239
updateTs: firebase.firestore().FieldValue().serverTimestamp(),
240240
// just fyi - both of these work:
241-
colors: firestore.FieldValue.arrayUnion("red", "blue")
242-
// colors: firebase.firestore().FieldValue().arrayUnion(["red", "blue"])
241+
colors: firestore.FieldValue.arrayUnion("red", "blue"),
242+
messages: firebase.firestore().FieldValue().arrayUnion({
243+
message: "Test 1",
244+
source: "central",
245+
time: Date.now()
246+
})
243247
})
244248
.then(() => console.log("Woofie updated from 'arrayUnion'"))
245249
.catch(err => console.log("Updating Woofie from 'arrayUnion' failed, error: " + JSON.stringify(err)));

src/firebase.android.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,9 @@ firebase.toHashMap = obj => {
127127
const fieldValue: FieldValue = obj[property];
128128
if (fieldValue.type === "ARRAY_UNION") {
129129
// nested arrays are not allowed, so harden against wrong usage: arrayUnion(["foo", "bar"]) vs arrayUnion("foo", "bar")
130-
node.put(property, com.google.firebase.firestore.FieldValue.arrayUnion(Array.isArray(fieldValue.value[0]) ? fieldValue.value[0] : fieldValue.value));
130+
let values: Array<any> = Array.isArray(fieldValue.value[0]) ? fieldValue.value[0] : fieldValue.value;
131+
values = values.map(v => typeof(v) === "object" ? firebase.toHashMap(v) : v);
132+
node.put(property, com.google.firebase.firestore.FieldValue.arrayUnion(values));
131133
} else if (fieldValue.type === "ARRAY_REMOVE") {
132134
node.put(property, com.google.firebase.firestore.FieldValue.arrayRemove(Array.isArray(fieldValue.value[0]) ? fieldValue.value[0] : fieldValue.value));
133135
} else {

0 commit comments

Comments
 (0)