angularfire icon indicating copy to clipboard operation
angularfire copied to clipboard

Error passing queryconstraint in a function call

Open Alsmith141510 opened this issue 3 years ago • 0 comments
trafficstars

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 () Steps to set up and reproduce

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 ** image

Expected behavior

Actual behavior

Alsmith141510 avatar Aug 06 '22 22:08 Alsmith141510