@@ -11,7 +11,7 @@ import * as appModule from "tns-core-modules/application";
1111import { AndroidActivityResultEventData } from "tns-core-modules/application" ;
1212import { ad as AndroidUtils } from "tns-core-modules/utils/utils" ;
1313import lazy from "tns-core-modules/utils/lazy" ;
14- import { firestore , User , OnDisconnect as OnDisconnectBase } from "./firebase" ;
14+ import { firestore , User , OnDisconnect as OnDisconnectBase , DataSnapshot } from "./firebase" ;
1515
1616declare const android , com : any ;
1717
@@ -1335,6 +1335,10 @@ firebase.updateProfile = arg => {
13351335 } ) ;
13361336} ;
13371337
1338+ /***********************************************
1339+ * Start Realtime Database Functions
1340+ ***********************************************/
1341+
13381342firebase . keepInSync = ( path , switchOn ) => {
13391343 return new Promise ( ( resolve , reject ) => {
13401344 try {
@@ -1793,6 +1797,65 @@ firebase.onDisconnect = (path: string): OnDisconnectBase => {
17931797 return new OnDisconnect ( disconnectInstance ) ;
17941798} ;
17951799
1800+ firebase . transaction = ( path : string , transactionUpdate : ( currentState ) => any ,
1801+ onComplete : ( a : Error | null , b : boolean , c : DataSnapshot ) => Promise < any > ) => {
1802+ return new Promise ( ( resolve , reject ) => {
1803+ if ( ! firebase . initialized ) {
1804+ console . error ( "Please run firebase.init() before firebase.transaction()" ) ;
1805+ throw new Error ( "FirebaseApp is not initialized. Make sure you run firebase.init() first" ) ;
1806+ }
1807+ const dbRef : com . google . firebase . database . DatabaseReference = firebase . instance . child ( path ) ;
1808+ const handler : com . google . firebase . database . Transaction . Handler = new com . google . firebase . database . Transaction . Handler ( {
1809+ doTransaction : ( mutableData : com . google . firebase . database . MutableData ) => {
1810+ const desiredValue = transactionUpdate ( mutableData . getValue ( ) ) ;
1811+ // Java does not have undefined, but web transactions use undefined to detect if an abort() is desired.
1812+ if ( desiredValue === undefined ) {
1813+ return com . google . firebase . database . Transaction . abort ( ) ;
1814+ } else {
1815+ mutableData . setValue ( firebase . toValue ( desiredValue ) ) ;
1816+ return com . google . firebase . database . Transaction . success ( mutableData ) ;
1817+ }
1818+ } ,
1819+ onComplete : ( databaseError : com . google . firebase . database . DatabaseError , commited : boolean , snapshot : com . google . firebase . database . DataSnapshot ) => {
1820+ databaseError !== null ? reject ( databaseError . getMessage ( ) ) :
1821+ resolve ( { committed : commited , snapshot : nativeSnapshotToWebSnapshot ( snapshot ) } ) ;
1822+ }
1823+ } ) ;
1824+ dbRef . runTransaction ( handler ) ;
1825+ } ) ;
1826+ } ;
1827+
1828+ // Converts Android DataSnapshot into Web Datasnapshot
1829+ function nativeSnapshotToWebSnapshot ( snapshot : com . google . firebase . database . DataSnapshot ) : DataSnapshot {
1830+ function forEach ( action : ( datasnapshot : DataSnapshot ) => any ) : boolean {
1831+ let innerSnapshot : DataSnapshot ;
1832+ for ( let iterator = snapshot . getChildren ( ) . iterator ( ) ; iterator . hasNext ( ) ; ) {
1833+ innerSnapshot = nativeSnapshotToWebSnapshot ( iterator . next ( ) ) ;
1834+ if ( action ( innerSnapshot ) ) {
1835+ return true ;
1836+ }
1837+ }
1838+ return false ;
1839+ }
1840+ return {
1841+ key : snapshot . getKey ( ) ,
1842+ ref : snapshot . getRef ( ) ,
1843+ child : ( path : string ) => nativeSnapshotToWebSnapshot ( snapshot . child ( path ) ) ,
1844+ exists : ( ) => snapshot . exists ( ) ,
1845+ forEach : ( func : ( datasnapshot ) => any ) => forEach ( func ) ,
1846+ getPriority : ( ) => firebase . toJsObject ( snapshot . getPriority ( ) ) ,
1847+ hasChild : ( path : string ) => snapshot . hasChild ( path ) ,
1848+ hasChildren : ( ) => snapshot . hasChildren ( ) ,
1849+ numChildren : ( ) => snapshot . getChildrenCount ( ) ,
1850+ toJSON : ( ) => firebase . toJsObject ( snapshot . toString ( ) ) ,
1851+ val : ( ) => firebase . toJsObject ( snapshot . getValue ( ) )
1852+ } ;
1853+ }
1854+
1855+ /***********************************************
1856+ * END Realtime Database Functions
1857+ ***********************************************/
1858+
17961859firebase . sendCrashLog = arg => {
17971860 return new Promise ( ( resolve , reject ) => {
17981861 try {
@@ -2006,6 +2069,7 @@ firebase.firestore.runTransaction = (updateFunction: (transaction: firestore.Tra
20062069 } ) ;
20072070} ;
20082071
2072+
20092073/*
20102074class FirestoreTransaction implements firestore.Transaction {
20112075
0 commit comments