angular / angular/angularfire

Error passing queryconstraint in a function call

Open
#3,253 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
7.8k
Forks
2.2k
Avg merge
22h 28m
Merged PRs (30d)
6

Description

### 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(
ref: CollectionPredicate,
options : FirestoreQuery[]
): Promise {

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 = fromPromise(this._firebasehelperService.collectionPA('notifications',options));

### Debug output

** Errors in the JavaScript console **

** Output from `firebase.database().enableLogging(true);` **

** Screenshots **
![image](https://user-images.githubusercontent.com/39094436/183267403-67962346-05f4-4341-a387-920e7a6c0810.png)

### Expected behavior

### Actual behavior

Contributor guide

Open the contributing guide

Research direction

The reported call is at firebasehelper.service.ts:202; reproduce it with Angular 14, Firebase 9, and AngularFire 7.4.1 using the shown options. Compare query(colRef, ...constraints) with the direct constraints1 example and verify what values reach the call. Done means a minimal confirmed reproduction with a clear expected-versus-actual result.

Written by the indexing model from the issue text.

Assessment

Tech stack
angular, firebase, typescript
Domain
database
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.