@dream11mobile/react-native-firebase
Version:
A well tested, feature rich Firebase implementation for React Native, supporting iOS & Android. Individual module support for Admob, Analytics, Auth, Crash Reporting, Cloud Firestore, Database, Dynamic Links, Functions, Messaging (FCM), Remote Config, Sto
54 lines (43 loc) • 1.63 kB
Flow
/**
* @flow
* FieldValue representation wrapper
*/
import AnyJs from './utils/any';
import { buildNativeArray } from './utils/serialize';
// TODO: Salakar: Refactor in v6
export default class FieldValue {
_type: string;
_elements: AnyJs[] | any;
constructor(type: string, elements?: AnyJs[]) {
this._type = type;
this._elements = elements;
}
get type(): string {
return this._type;
}
get elements(): AnyJs[] {
return this._elements;
}
static delete(): FieldValue {
return new FieldValue(TypeFieldValueDelete);
}
static serverTimestamp(): FieldValue {
return new FieldValue(TypeFieldValueTimestamp);
}
static arrayUnion(...elements: AnyJs[]) {
// TODO Salakar: v6: validate elements, any primitive or FirestoreReference allowed
// TODO Salakar: v6: explicitly deny use of serverTimestamp - only allowed on set/update
// TODO Salakar: v6: explicitly deny use of nested arrays - not supported on sdk
return new FieldValue(TypeFieldValueUnion, buildNativeArray(elements));
}
static arrayRemove(...elements: AnyJs[]) {
// TODO Salakar: v6: validate elements, any primitive or FirestoreReference allowed
// TODO Salakar: v6: explicitly deny use of serverTimestamp - only allowed on set/update
// TODO Salakar: v6: explicitly deny use of nested arrays - not supported on sdk
return new FieldValue(TypeFieldValueRemove, buildNativeArray(elements));
}
}
export const TypeFieldValueDelete = 'delete';
export const TypeFieldValueRemove = 'remove';
export const TypeFieldValueUnion = 'union';
export const TypeFieldValueTimestamp = 'timestamp';