@@ -160,21 +160,24 @@ class DatabaseRef extends ReferenceBase {
160
160
161
161
setAt ( val ) {
162
162
const path = this . dbPath ( ) ;
163
- return promisify ( 'set' , FirestackDatabase ) ( path , val )
163
+ const value = this . _serializeValue ( val ) ;
164
+ return promisify ( 'set' , FirestackDatabase ) ( path , value )
164
165
}
165
166
166
167
updateAt ( val ) {
167
168
const path = this . dbPath ( ) ;
168
- return promisify ( 'update' , FirestackDatabase ) ( path , val )
169
+ const value = this . _serializeValue ( val ) ;
170
+ return promisify ( 'update' , FirestackDatabase ) ( path , value )
169
171
}
170
172
171
173
removeAt ( key ) {
172
174
const path = this . dbPath ( ) ;
173
175
return promisify ( 'remove' , FirestackDatabase ) ( path )
174
176
}
175
177
176
- push ( value = { } ) {
178
+ push ( val = { } ) {
177
179
const path = this . dbPath ( ) ;
180
+ const value = this . _serializeValue ( val ) ;
178
181
return promisify ( 'push' , FirestackDatabase ) ( path , value )
179
182
. then ( ( { ref} ) => {
180
183
return new DatabaseRef ( this . db , ref . split ( separator ) )
@@ -231,6 +234,34 @@ class DatabaseRef extends ReferenceBase {
231
234
return Promise . all ( promises ) ;
232
235
}
233
236
237
+ // Sanitize value
238
+ // As Firebase cannot store date objects.
239
+ _serializeValue ( obj = { } ) {
240
+ return Object . keys ( obj ) . reduce ( ( sum , key ) => {
241
+ let val = obj [ key ] ;
242
+ if ( val instanceof Date ) {
243
+ val = val . toISOString ( ) ;
244
+ }
245
+ return {
246
+ ...sum ,
247
+ [ key ] : val
248
+ }
249
+ } , { } ) ;
250
+ }
251
+
252
+ _deserializeValue ( obj = { } ) {
253
+ return Object . keys ( obj ) . reduce ( ( sum , key ) => {
254
+ let val = obj [ key ] ;
255
+ if ( val instanceof Date ) {
256
+ val = val . getTime ( ) ;
257
+ }
258
+ return {
259
+ ...sum ,
260
+ [ key ] : val
261
+ }
262
+ } , { } ) ;
263
+ }
264
+
234
265
// Modifiers
235
266
orderByKey ( ) {
236
267
return this . query . setOrderBy ( 'orderByKey' ) ;
0 commit comments