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

Commit d76dfa4

Browse files
Incorrect ordering while using singleEvent as true #405
1 parent 8dbf622 commit d76dfa4

File tree

4 files changed

+47
-15
lines changed

4 files changed

+47
-15
lines changed

docs/DATABASE.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,8 @@ Let's say we have the structure as defined at `setValue`, then use this query to
170170
if (!result.error) {
171171
console.log("Event type: " + result.type);
172172
console.log("Key: " + result.key);
173-
console.log("Value: " + JSON.stringify(result.value));
173+
console.log("Value: " + JSON.stringify(result.value)); // a JSON object
174+
console.log("Children: " + JSON.stringify(result.children)); // an array, added in plugin v 8.0.0
174175
}
175176
};
176177

src/firebase.android.ts

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import { AndroidActivityResultEventData } from "tns-core-modules/application";
33
import lazy from "tns-core-modules/utils/lazy";
44
import { ad as AndroidUtils } from "tns-core-modules/utils/utils";
55
import {
6-
DataSnapshot,
6+
DataSnapshot, FBData, FBDataSingleEvent, FBErrorData, FirebaseQueryResult,
77
firestore,
88
GetAuthTokenOptions,
99
GetAuthTokenResult,
10-
OnDisconnect as OnDisconnectBase,
10+
OnDisconnect as OnDisconnectBase, QueryOptions,
1111
User
1212
} from "./firebase";
1313
import {
@@ -1594,8 +1594,8 @@ firebase.update = (path, val) => {
15941594
});
15951595
};
15961596

1597-
firebase.query = (updateCallback, path, options) => {
1598-
return new Promise((resolve, reject) => {
1597+
firebase.query = (updateCallback: (data: FBDataSingleEvent | FBErrorData) => void, path: string, options: QueryOptions): Promise<any> => {
1598+
return new Promise<any>((resolve, reject) => {
15991599
try {
16001600
if (firebase.instance === null) {
16011601
reject("Run init() first!");
@@ -1681,10 +1681,24 @@ firebase.query = (updateCallback, path, options) => {
16811681
if (options.singleEvent) {
16821682
const listener = new com.google.firebase.database.ValueEventListener({
16831683
onDataChange: snapshot => {
1684-
const data = firebase.getCallbackData("ValueChanged", snapshot);
1685-
if (updateCallback) updateCallback(data);
1684+
1685+
const result = {
1686+
type: "ValueChanged",
1687+
key: snapshot.getKey(),
1688+
value: {},
1689+
children: []
1690+
};
1691+
1692+
for (let iterator = snapshot.getChildren().iterator(); iterator.hasNext();) {
1693+
const snap = iterator.next();
1694+
const val = firebase.toJsObject(snap.getValue());
1695+
result.value[snap.getKey()] = val;
1696+
result.children.push(val);
1697+
}
1698+
1699+
if (updateCallback) updateCallback(result);
16861700
// resolve promise with data in case of single event, see https://github.com/EddyVerbruggen/nativescript-plugin-firebase/issues/126
1687-
resolve(data);
1701+
resolve(result);
16881702
},
16891703
onCancelled: databaseError => {
16901704
if (updateCallback) updateCallback({

src/firebase.d.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,14 @@ export interface FBData {
400400
value: any;
401401
}
402402

403+
export interface FBDataSingleEvent extends FBData {
404+
children?: Array<any>;
405+
}
406+
407+
export interface FBErrorData {
408+
error: string;
409+
}
410+
403411
export interface AuthStateData {
404412
loggedIn?: boolean;
405413
user?: User;
@@ -545,6 +553,12 @@ export interface DataSnapshot {
545553
val(): any;
546554
}
547555

556+
export interface FirebaseQueryResult {
557+
type: string;
558+
key: string;
559+
value: any;
560+
}
561+
548562
export function transaction(path: string, transactionUpdate: (a: any) => any,
549563
onComplete?: (error: Error | null, committed: boolean, dataSnapshot: DataSnapshot) => any): Promise<any>;
550564

@@ -558,7 +572,7 @@ export function update(path: string, value: any): Promise<any>;
558572

559573
export function remove(path: string): Promise<any>;
560574

561-
export function query(onValueEvent: (data: FBData) => void, path: string, options: QueryOptions): Promise<any>;
575+
export function query(onValueEvent: (data: FBData | FBErrorData) => void, path: string, options: QueryOptions): Promise<any>;
562576

563577
export function addChildEventListener(onChildEvent: (data: FBData) => void, path: string): Promise<AddEventListenerResult>;
564578

src/firebase.ios.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import * as application from "tns-core-modules/application/application";
22
import {
3-
DataSnapshot,
3+
DataSnapshot, FBData, FBDataSingleEvent, FirebaseQueryResult,
44
firestore,
55
GetAuthTokenOptions,
66
GetAuthTokenResult,
7-
OnDisconnect as OnDisconnectBase,
7+
OnDisconnect as OnDisconnectBase, QueryOptions,
88
User
99
} from "./firebase";
1010
import {
@@ -1355,8 +1355,8 @@ firebase.update = (path, val) => {
13551355
});
13561356
};
13571357

1358-
firebase.query = (updateCallback, path, options) => {
1359-
return new Promise((resolve, reject) => {
1358+
firebase.query = (updateCallback: (data: FBDataSingleEvent) => void, path: string, options: QueryOptions): Promise<any> => {
1359+
return new Promise<any>((resolve, reject) => {
13601360
try {
13611361
const where = path === undefined ? FIRDatabase.database().reference() : FIRDatabase.database().reference().childByAppendingPath(path);
13621362
let query: FIRDatabaseQuery;
@@ -1440,11 +1440,14 @@ firebase.query = (updateCallback, path, options) => {
14401440
const result = {
14411441
type: "ValueChanged",
14421442
key: snapshot.key,
1443-
value: {}
1443+
value: {},
1444+
children: []
14441445
};
14451446
for (let i = 0; i < snapshot.children.allObjects.count; i++) {
14461447
const snap: FIRDataSnapshot = snapshot.children.allObjects.objectAtIndex(i);
1447-
result.value[snap.key] = firebaseUtils.toJsObject(snap.value);
1448+
const val = firebaseUtils.toJsObject(snap.value);
1449+
result.value[snap.key] = val;
1450+
result.children.push(val);
14481451
}
14491452

14501453
if (updateCallback) updateCallback(result);

0 commit comments

Comments
 (0)