@@ -2115,6 +2115,159 @@ firebase.invites.getInvitation = () => {
21152115 } ) ;
21162116} ;
21172117
2118+ class FirestoreWriteBatch implements firestore . WriteBatch {
2119+
2120+ public nativeWriteBatch : com . google . firebase . firestore . WriteBatch ;
2121+
2122+ public set = ( documentRef : firestore . DocumentReference , data : firestore . DocumentData , options ?: firestore . SetOptions ) : firestore . WriteBatch => {
2123+ if ( options && options . merge ) {
2124+ this . nativeWriteBatch . set ( documentRef . android , firebase . toValue ( data ) , com . google . firebase . firestore . SetOptions . merge ( ) ) ;
2125+ } else {
2126+ this . nativeWriteBatch . set ( documentRef . android , firebase . toValue ( data ) ) ;
2127+ }
2128+ return this ;
2129+ } ;
2130+
2131+ public update = ( documentRef : firestore . DocumentReference , data : firestore . UpdateData ) : firestore . WriteBatch => {
2132+ this . nativeWriteBatch . update ( documentRef . android , firebase . toValue ( data ) ) ;
2133+ return this ;
2134+ } ;
2135+
2136+ public delete = ( documentRef : firestore . DocumentReference ) : firestore . WriteBatch => {
2137+ this . nativeWriteBatch . delete ( documentRef . android ) ;
2138+ return this ;
2139+ } ;
2140+
2141+ public commit ( ) : Promise < void > {
2142+ return new Promise ( ( resolve , reject ) => {
2143+ const onCompleteListener = new com . google . android . gms . tasks . OnCompleteListener ( {
2144+ onComplete : task => {
2145+ if ( ! task . isSuccessful ( ) ) {
2146+ const ex = task . getException ( ) ;
2147+ reject ( ex && ex . getReason ? ex . getReason ( ) : ex ) ;
2148+ } else {
2149+ resolve ( ) ;
2150+ }
2151+ }
2152+ } ) ;
2153+ this . nativeWriteBatch . commit ( ) . addOnCompleteListener ( onCompleteListener ) ;
2154+ } ) ;
2155+ } ;
2156+ }
2157+
2158+ firebase . firestore . batch = ( ) : firestore . WriteBatch => {
2159+ const batch = new FirestoreWriteBatch ( ) ;
2160+ batch . nativeWriteBatch = com . google . firebase . firestore . FirebaseFirestore . getInstance ( ) . batch ( ) ;
2161+ return batch ;
2162+ } ;
2163+
2164+ /*
2165+ class FirestoreTransaction implements firestore.Transaction {
2166+
2167+ public nativeTransaction: com.google.firebase.firestore.Transaction;
2168+
2169+ public get = (documentRef: firestore.DocumentReference): DocumentSnapshot => {
2170+ const docSnapshot: com.google.firebase.firestore.DocumentSnapshot = this.nativeTransaction.get(documentRef.android);
2171+ return new DocumentSnapshot(docSnapshot ? docSnapshot.getId() : null, docSnapshot.exists(), firebase.toJsObject(docSnapshot.getData()));
2172+ };
2173+
2174+ public set = (documentRef: firestore.DocumentReference, data: firestore.DocumentData, options?: firestore.SetOptions): firestore.Transaction => {
2175+ console.log(">>> in tx.set");
2176+ if (options && options.merge) {
2177+ this.nativeTransaction.set(documentRef.android, firebase.toValue(data), com.google.firebase.firestore.SetOptions.merge());
2178+ } else {
2179+ this.nativeTransaction.set(documentRef.android, firebase.toValue(data));
2180+ }
2181+ return this;
2182+ };
2183+
2184+ public update = (documentRef: firestore.DocumentReference, data: firestore.UpdateData): firestore.Transaction => {
2185+ console.log(">>> in tx.update");
2186+ this.nativeTransaction.update(documentRef.android, firebase.toValue(data));
2187+ return this;
2188+ };
2189+
2190+ public delete = (documentRef: firestore.DocumentReference): firestore.Transaction => {
2191+ console.log(">>> in tx.delete");
2192+ this.nativeTransaction.delete(documentRef.android);
2193+ return this;
2194+ }
2195+ };
2196+
2197+ firebase.firestore.Transaction = (nativeTransaction: com.google.firebase.firestore.Transaction): firestore.Transaction => {
2198+ const tx = new FirestoreTransaction();
2199+ tx.nativeTransaction = nativeTransaction;
2200+ return tx;
2201+ };
2202+
2203+ firebase.firestore.runTransaction = (updateFunction: (transaction: firestore.Transaction) => Promise<any>): Promise<void> => {
2204+ return new Promise((resolve, reject) => {
2205+
2206+ const onSuccessListenert = new com.google.android.gms.tasks.OnSuccessListener({
2207+ onSuccess: () => {
2208+ const i = 1;
2209+ }
2210+ });
2211+
2212+ const l = new java.util.ArrayList();
2213+ l.add("foooo");
2214+ l.add("barrr");
2215+ org.nativescript.plugins.firebase.FirebaseFirestore.STATE = onSuccessListenert; // for this assignment to 'stick', this needs to be a real Java object
2216+ org.nativescript.plugins.firebase.FirebaseFirestore.UPDATE_FUNCTION = updateFunction;
2217+ console.log(">>> STATE: " + org.nativescript.plugins.firebase.FirebaseFirestore.STATE);
2218+ console.log(">>> UPDATE_FUNCTION: " + org.nativescript.plugins.firebase.FirebaseFirestore.UPDATE_FUNCTION);
2219+
2220+ let worker;
2221+ if (global['TNS_WEBPACK']) {
2222+ const WorkerScript = require('nativescript-worker-loader!./android-firestoretx-worker.js');
2223+ worker = new WorkerScript();
2224+ } else {
2225+ worker = new Worker('./android-firestoretx-worker.js');
2226+ }
2227+
2228+ (<any>global).theUpdateFunction = updateFunction;
2229+
2230+ worker.onmessage = msg => {
2231+ console.log(">>> msg from worker, stringified: " + JSON.stringify(msg));
2232+ };
2233+
2234+ worker.onerror = err => {
2235+ console.log(">>> worker err: " + JSON.stringify(err));
2236+ };
2237+
2238+ worker.postMessage({
2239+ in: "innn",
2240+ someArray: l,
2241+ onSuccessListenert: onSuccessListenert
2242+ // updateFunction: updateFunction
2243+ });
2244+
2245+ const onSuccessListener = new com.google.android.gms.tasks.OnSuccessListener({
2246+ onSuccess: resolve // TODO does this syntax work? if so: refactor other instances... otherwise use: onSuccess: () => resolve()
2247+ });
2248+
2249+ const onFailureListener = new com.google.android.gms.tasks.OnFailureListener({
2250+ onFailure: exception => reject(exception.getMessage())
2251+ });
2252+
2253+ // TODO apply is called from java to js, so that makes it run on the main/UI thread.. so doesn't work
2254+ // .. can we share native objects via appcontext (for a worker)?
2255+ const txFunction = new com.google.firebase.firestore.Transaction.Function({
2256+ apply: (nativeTransaction: com.google.firebase.firestore.Transaction) => {
2257+ const tx = new firebase.firestore.Transaction(nativeTransaction);
2258+ return updateFunction(tx);
2259+ }
2260+ });
2261+
2262+ com.google.firebase.firestore.FirebaseFirestore.getInstance().runTransaction(txFunction)
2263+ .addOnSuccessListener(onSuccessListener)
2264+ .addOnFailureListener(onFailureListener);
2265+
2266+ // org.nativescript.plugins.firebase.FirebaseFirestore.runTransaction(txFunction, onSuccessListener, onFailureListener);
2267+ });
2268+ };
2269+ */
2270+
21182271firebase . firestore . collection = ( collectionPath : string ) : firestore . CollectionReference => {
21192272 try {
21202273
0 commit comments