From b00807bb6b0937dfc1edffe6fbdf0e0f4fba9fde Mon Sep 17 00:00:00 2001 From: Ben Delaney Date: Fri, 29 Jan 2021 20:13:04 +1100 Subject: [PATCH 1/2] Add iOS support for FieldPath queries --- src/firebase.ios.ts | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/firebase.ios.ts b/src/firebase.ios.ts index a5dac1a3..ce75a126 100755 --- a/src/firebase.ios.ts +++ b/src/firebase.ios.ts @@ -2441,30 +2441,32 @@ firebase.firestore._getQuery = (collectionPath: string, query: FIRQuery): firest }; }; -firebase.firestore.where = (collectionPath: string, fieldPath: string, opStr: firestore.WhereFilterOp, value: any, query?: FIRQuery): firestore.Query => { +firebase.firestore.where = (collectionPath: string, fieldPath: string | FIRFieldPath, opStr: firestore.WhereFilterOp, value: any, query?: FIRQuery): firestore.Query => { ensureFirestore(); try { query = query || FIRFirestore.firestore().collectionWithPath(collectionPath); value = fixSpecialField(value); + let queryFieldPathType = fieldPath instanceof FIRFieldPath ? 'FieldPath' : 'Field' + if (opStr === "<") { - query = query.queryWhereFieldIsLessThan(fieldPath, value); + query = query[`queryWhere${queryFieldPathType}IsLessThan`](fieldPath, value); } else if (opStr === "<=") { - query = query.queryWhereFieldIsLessThanOrEqualTo(fieldPath, value); + query = query[`queryWhere${queryFieldPathType}IsLessThanOrEqualTo`](fieldPath, value); } else if (opStr === "==") { - query = query.queryWhereFieldIsEqualTo(fieldPath, value); + query = query[`queryWhere${queryFieldPathType}IsEqualTo`](fieldPath, value); } else if (opStr === ">=") { - query = query.queryWhereFieldIsGreaterThanOrEqualTo(fieldPath, value); + query = query[`queryWhere${queryFieldPathType}IsGreaterThanOrEqualTo`](fieldPath, value); } else if (opStr === ">") { - query = query.queryWhereFieldIsGreaterThan(fieldPath, value); + query = query[`queryWhere${queryFieldPathType}IsGreaterThan`](fieldPath, value); } else if (opStr === "array-contains") { - query = query.queryWhereFieldArrayContains(fieldPath, value); + query = query[`queryWhere${queryFieldPathType}ArrayContains`](fieldPath, value); } else if (opStr === "array-contains-any") { - query = query.queryWhereFieldArrayContainsAny(fieldPath, value); + query = query[`queryWhere${queryFieldPathType}ArrayContainsAny`](fieldPath, value); } else if (opStr === "in") { - query = query.queryWhereFieldIn(fieldPath, value); + query = query[`queryWhere${queryFieldPathType}In`](fieldPath, value); } else { - console.log("Illegal argument for opStr: " + opStr); + console.error("Illegal argument for opStr: " + opStr); return null; } From 0d68aaa8be8277fa7fc159a36fea2b9f4ac76666 Mon Sep 17 00:00:00 2001 From: Ben Delaney Date: Fri, 29 Jan 2021 20:20:28 +1100 Subject: [PATCH 2/2] Add missing FieldPath.documentId() --- src/firebase.android.ts | 5 +++++ src/firebase.ios.ts | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/firebase.android.ts b/src/firebase.android.ts index cc352ba0..17e31d04 100755 --- a/src/firebase.android.ts +++ b/src/firebase.android.ts @@ -2933,5 +2933,10 @@ export class QuerySnapshot implements firestore.QuerySnapshot { this.docSnapshots.map(snapshot => callback(snapshot)); } } +firebase.firestore.FieldPath = class { + static documentId() { + return com.google.firebase.firestore.FieldPath.documentId(); + } +} export * from './firebase-common'; diff --git a/src/firebase.ios.ts b/src/firebase.ios.ts index ce75a126..6f6428e2 100755 --- a/src/firebase.ios.ts +++ b/src/firebase.ios.ts @@ -2519,6 +2519,11 @@ firebase.firestore.endBefore = (collectionPath: string, snapshotOrFieldValue: Do return firebase.firestore._getQuery(collectionPath, query.queryEndingBeforeValues([snapshotOrFieldValue, ...fieldValues])); } }; +firebase.firestore.FieldPath = class { + static documentId() { + return FIRFieldPath.documentID(); + } +} @NativeClass() class GIDSignInDelegateImpl extends NSObject implements GIDSignInDelegate {