angularfire
angularfire copied to clipboard
Error passing queryconstraint in a function call
Version info
Angular: "@angular/core": "^14.0.2", Firebase: Firebase 9 AngularFire: "^7.4.1" "rxjs": "~7.4.0", Other (e.g. Ionic/Cordova, Node, browser, operating system):
How to reproduce these conditions
Failing test unit, Stackblitz demonstrating the problem
const constraints1 =[]; constraints1.push(where('read', '==', false)); constraints1.push(orderBy('createdAt', 'desc')); constraints1.push(limit(1)); dataQuery = query(colRef, ...constraints1);
console.log on constraints1 Constraints1:::[{"fa":{"segments":["read"],"offset":0,"len":1},"da":"==","_a":false,"type":"where"},{"fa":{"segments":["createdAt"],"offset":0,"len":1},"wa":"desc","type":"orderBy"},{"type":"limit","ma":1,"ga":"F"}]
This works fine but passing these constraints to a function export interface FirestoreQuery{ [x: string]: any; property:string; value:any;};
async collectionPA<T>( ref: CollectionPredicate<T>, options : FirestoreQuery[] ): Promise<T[] | null> {
let wherelist:FirestoreQuery[] = options.filter(x => x.property === 'where'); let orderByList:FirestoreQuery[] = options.filter(x => x.property === 'orderBy'); let limitList:FirestoreQuery[] = options.filter(x => x.property === 'limit'); if (wherelist instanceof Array) { for (let w of wherelist) { constraints.push(w.value); } } if (orderByList[0] instanceof Array) { // It's an array of array for (let o of orderByList) { constraints.push(o.value); }
**dataQuery = query(colRef, ...constraints);**
}
Console.log on constraints has the following data... Constraints:::["where('read', '==', false)","limit(3)"]
The line give an error
ERROR TypeError: n._apply is not a function
at Uh (index.esm2017.js:18542:30)
at angular-fire.js:227:48
at angular-fire.js:160:59
at _ZoneDelegate.invoke (zone.js:372:26)
at Zone.run (zone.js:134:43)
at NgZone.runOutsideAngular (core.mjs:26414:28)
at runOutsideAngular (angular-fire.js:160:35)
at angular-fire.js:227:21
at firebasehelper.service.ts:202:22
at Generator.next (
Sample data and security rules let options : FirestoreQuery[] =[]; options = [ {property:"where", value: "where('read', '==', false)"}, {property:"orderBy",value:"OrderBy('createdAt', 'desc')"}, {property:"limit", value:"limit(3)"}, ];
const promiseNotify: Observable<any> = fromPromise(this._firebasehelperService.collectionPA('notifications',options));
Debug output
** Errors in the JavaScript console **
** Output from firebase.database().enableLogging(true); **
** Screenshots **
