UNPKG

@react-native-agconnect/clouddb

Version:
98 lines (82 loc) 3.53 kB
/* * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. */ import { NativeEventEmitter, NativeModules, Platform } from 'react-native'; import AGCCloudDBListenerHandler from './AGCCloudDBListenerHandler'; import AGCCloudDBException from './AGCCloudDBException'; const { AGCCloudDBModule } = NativeModules; export default class AGCCloudDBZone { constructor(id){ this.id = id } getCloudDBZoneConfig() { if (Platform.OS === "android") { return AGCCloudDBModule.getCloudDBZoneConfig(this.id); } else { throw new Error('`getCloudDBZoneConfig()` is not supported on IOS platform.'); } } executeUpsert(className, object) { if (object instanceof Array) { return AGCCloudDBModule.executeUpsert(className, object, this.id); } else { let objectArray = [object] return AGCCloudDBModule.executeUpsert(className, objectArray, this.id); } } executeDelete(className, object) { if (object instanceof Array) { return AGCCloudDBModule.executeDelete(className, object, this.id); } else { let objectArray = [object] return AGCCloudDBModule.executeDelete(className, objectArray, this.id); } } executeQuery(query, queryPolicy) { return AGCCloudDBModule.executeQuery(query.queryMap, queryPolicy, this.id); } executeAverageQuery(query, fieldName, queryPolicy) { return AGCCloudDBModule.executeAverageQuery(query.queryMap, fieldName, queryPolicy, this.id); } executeSumQuery(query, fieldName, queryPolicy) { return AGCCloudDBModule.executeSumQuery(query.queryMap, fieldName, queryPolicy, this.id); } executeMaximumQuery(query, fieldName, queryPolicy) { return AGCCloudDBModule.executeMaximumQuery(query.queryMap, fieldName, queryPolicy, this.id); } executeMinimalQuery(query, fieldName, queryPolicy) { return AGCCloudDBModule.executeMinimalQuery(query.queryMap, fieldName, queryPolicy, this.id); } executeCountQuery(query, fieldName, queryPolicy) { return AGCCloudDBModule.executeCountQuery(query.queryMap, fieldName, queryPolicy, this.id); } executeQueryUnsynced(query) { return AGCCloudDBModule.executeQueryUnsynced(query.queryMap, this.id); } subscribeSnapshot(query, queryPolicy, listener) { let eventEmitter = new NativeEventEmitter(AGCCloudDBModule); let listenerId = Math.random().toString(36).substr(2, 9) + Date.now(); let callback = (res) => { if (res != null && res.id == listenerId) { if (res.data != null) { listener(res.data) } else { let error = new AGCCloudDBException(res.error) listener(error) } } } let eventListener = eventEmitter.addListener("onSnapshotUpdate", callback) return AGCCloudDBModule.subscribeSnapshot(query.queryMap, queryPolicy, this.id, listenerId) .then(() => { return new AGCCloudDBListenerHandler(this.id, listenerId, eventListener) }) .catch(error => { eventListener.remove() throw new AGCCloudDBException(error) }) } runTransaction(transaction) { return AGCCloudDBModule.runTransaction(transaction.transactions, this.id); } }