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

Commit 06fcae8

Browse files
Add the ability to save a DocumentReference #875
1 parent fd20c5e commit 06fcae8

File tree

5 files changed

+19
-2
lines changed

5 files changed

+19
-2
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,14 @@ export class FirestoreComponent {
133133
}
134134

135135
public firestoreUpdate(): void {
136+
// get a document reference so we can add a city reference to our favourite dog
137+
const sfDocRef: firestore.DocumentReference = firebase.firestore().collection("cities").doc("SF");
138+
136139
firebase.firestore().collection("dogs").doc("fave")
137140
.update({
138141
name: "Woofieupdate",
139142
last: "updatedwoofie!",
143+
city: sfDocRef,
140144
updateTs: firestore.FieldValue.serverTimestamp(),
141145
updateTsAlt: firebase.firestore().FieldValue().serverTimestamp(),
142146
lastKnownLocation: firebase.firestore().GeoPoint(4.34, 5.67)

src/firebase-common.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,10 @@ export class DocumentSnapshot implements firestore.DocumentSnapshot {
222222
}
223223
}
224224

225+
export function isDocumentReference(object: any): object is firestore.DocumentReference {
226+
return object && object.discriminator === "docRef";
227+
}
228+
225229
export class QuerySnapshot implements firestore.QuerySnapshot {
226230
public docSnapshots: firestore.DocumentSnapshot[];
227231

src/firebase.android.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { DocumentSnapshot, firebase, GeoPoint, QuerySnapshot } from "./firebase-common";
1+
import { DocumentSnapshot, firebase, GeoPoint, QuerySnapshot, isDocumentReference } from "./firebase-common";
22
import * as appModule from "tns-core-modules/application";
33
import { AndroidActivityResultEventData } from "tns-core-modules/application";
44
import { ad as AndroidUtils, layout } from "tns-core-modules/utils/utils";
@@ -132,6 +132,8 @@ firebase.toHashMap = obj => {
132132
} else if (obj[property] instanceof GeoPoint) {
133133
const geo = <GeoPoint>obj[property];
134134
node.put(property, new com.google.firebase.firestore.GeoPoint(geo.latitude, geo.longitude));
135+
} else if (isDocumentReference(obj[property])) {
136+
node.put(property, obj[property].android);
135137
} else if (Array.isArray(obj[property])) {
136138
node.put(property, firebase.toJavaArray(obj[property]));
137139
} else {
@@ -2308,6 +2310,7 @@ firebase.firestore.onCollectionSnapshot = (colRef: com.google.firebase.firestore
23082310

23092311
firebase.firestore._getDocumentReference = (javaObj, collectionPath, documentPath): firestore.DocumentReference => {
23102312
return {
2313+
discriminator: "docRef",
23112314
id: javaObj.getId(),
23122315
collection: cp => firebase.firestore.collection(`${collectionPath}/${documentPath}/${cp}`),
23132316
set: (data: any, options?: firestore.SetOptions) => firebase.firestore.set(collectionPath, javaObj.getId(), data, options),
@@ -2350,6 +2353,7 @@ firebase.firestore.add = (collectionPath: string, document: any): Promise<firest
23502353
const onSuccessListener = new com.google.android.gms.tasks.OnSuccessListener({
23512354
onSuccess: (docRef: com.google.firebase.firestore.DocumentReference) => {
23522355
resolve({
2356+
discriminator: "docRef",
23532357
id: docRef.getId(),
23542358
collection: cp => firebase.firestore.collection(cp),
23552359
set: (data: any, options?: firestore.SetOptions) => firebase.firestore.set(collectionPath, docRef.getId(), data, options),

src/firebase.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,7 @@ export namespace firestore {
720720
}
721721

722722
export interface DocumentReference {
723+
discriminator: "docRef";
723724
id: string;
724725
collection: (collectionPath: string) => CollectionReference;
725726
set: (document: any, options?: SetOptions) => Promise<void>;

src/firebase.ios.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { firebase, DocumentSnapshot, QuerySnapshot, GeoPoint } from "./firebase-common";
1+
import { firebase, DocumentSnapshot, QuerySnapshot, GeoPoint, isDocumentReference } from "./firebase-common";
22
import * as application from "tns-core-modules/application";
33
import { ios as iOSUtils } from "tns-core-modules/utils/utils";
44
import { getClass } from "tns-core-modules/utils/types";
@@ -2260,6 +2260,7 @@ firebase.firestore.onCollectionSnapshot = (colRef: FIRCollectionReference, callb
22602260

22612261
firebase.firestore._getDocumentReference = (fIRDocumentReference, collectionPath: string, documentPath: string): firestore.DocumentReference => {
22622262
return {
2263+
discriminator: "docRef",
22632264
id: fIRDocumentReference.documentID,
22642265
collection: cp => firebase.firestore.collection(`${collectionPath}/${documentPath}/${cp}`),
22652266
set: (data: any, options?: firestore.SetOptions) => firebase.firestore.set(collectionPath, fIRDocumentReference.documentID, data, options),
@@ -2303,6 +2304,7 @@ firebase.firestore.add = (collectionPath: string, document: any): Promise<firest
23032304
reject(error.localizedDescription);
23042305
} else {
23052306
resolve({
2307+
discriminator: "docRef",
23062308
id: fIRDocumentReference.documentID,
23072309
collection: cp => firebase.firestore.collection(cp),
23082310
set: (data: any, options?: firestore.SetOptions) => firebase.firestore.set(collectionPath, fIRDocumentReference.documentID, data, options),
@@ -2372,6 +2374,8 @@ function fixSpecialFields(item) {
23722374
latitude: geo.latitude,
23732375
longitude: geo.longitude
23742376
});
2377+
} else if (isDocumentReference(item[k])) {
2378+
item[k] = item[k].ios;
23752379
}
23762380
}
23772381
}

0 commit comments

Comments
 (0)