mirror of
https://github.com/zhigang1992/react-native-firebase.git
synced 2026-04-29 04:35:43 +08:00
push updates
This commit is contained in:
@@ -21,7 +21,7 @@ import {
|
||||
pathParent,
|
||||
pathChild,
|
||||
isValidPath,
|
||||
// generateDatabaseId,
|
||||
generateDatabaseId,
|
||||
isNumber,
|
||||
isNull,
|
||||
isUndefined,
|
||||
@@ -35,6 +35,7 @@ import DatabaseQuery from './DatabaseQuery';
|
||||
import DatabaseQueryModifiers from './DatabaseQueryModifiers';
|
||||
import DatabaseOnDisconnect from './DatabaseOnDisconnect';
|
||||
import DatabaseDataSnapshot from './DatabaseDataSnapshot';
|
||||
import DatabaseThenableReference from './DatabaseThenableReference';
|
||||
|
||||
const internalRefs = ['.info/connected', '.info/serverTimeOffset'];
|
||||
|
||||
@@ -113,7 +114,14 @@ export default class DatabaseReference extends DatabaseQuery {
|
||||
);
|
||||
}
|
||||
|
||||
// TODO validate keys
|
||||
const keys = Object.keys(values);
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
if (!isValidPath(keys[i])) {
|
||||
throw new Error(
|
||||
`firebase.database().update(*) 'values' contains an invalid path. Paths must be non-empty strings and can't contain ".", "#", "$", "[", or "]"`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isUndefined(onComplete) && !isFunction(onComplete)) {
|
||||
throw new Error(
|
||||
@@ -250,15 +258,32 @@ export default class DatabaseReference extends DatabaseQuery {
|
||||
* @param onComplete
|
||||
* @returns {DatabaseReference}
|
||||
*/
|
||||
// push(value, onComplete) {
|
||||
// TODO validate value?
|
||||
//
|
||||
// const id = generateDatabaseId(this._database._serverTime);
|
||||
// const pushRef = this.child(id);
|
||||
// const thennablePushRef = this.child(id);
|
||||
//
|
||||
// return thennablePushRef;
|
||||
// }
|
||||
push(value, onComplete) {
|
||||
if (!isUndefined(onComplete) && !isFunction(onComplete)) {
|
||||
throw new Error('TODO');
|
||||
}
|
||||
|
||||
const id = generateDatabaseId(this._database._serverTime);
|
||||
|
||||
if (isUndefined(value) || isNull(value)) {
|
||||
return new DatabaseThenableReference(
|
||||
this._database,
|
||||
pathChild(this.path, id),
|
||||
Promise.resolve(this.child(id)),
|
||||
);
|
||||
}
|
||||
|
||||
const pushRef = this.child(id);
|
||||
|
||||
const promise = pushRef.set(value, onComplete).then(() => pushRef);
|
||||
|
||||
// Prevent unhandled promise rejection if onComplete is passed
|
||||
if (onComplete) {
|
||||
promise.catch(() => {});
|
||||
}
|
||||
|
||||
return new DatabaseThenableReference(this._database, pathChild(this.path, id), promise);
|
||||
}
|
||||
|
||||
/**
|
||||
* @url https://firebase.google.com/docs/reference/js/firebase.database.Reference#ondisconnect
|
||||
|
||||
Reference in New Issue
Block a user