js-data-firebase icon indicating copy to clipboard operation
js-data-firebase copied to clipboard

Add reference (docs) on how to delete a resource child object attribute on update

Open fabiozaffani opened this issue 9 years ago • 3 comments

This is due to this specific part of the code inside the update() method:

itemRef.once('value', dataSnapshot => {
  try {
    let item = dataSnapshot.val() || {};
    let fields, removed, i;
    if (resourceConfig.relations) {
      fields = resourceConfig.relationFields;
      removed = [];
      for (i = 0; i < fields.length; i++) {
        removed.push(attrs[fields[i]]);
        delete attrs[fields[i]];
      }
    }
    DSUtils.deepMixIn(item, attrs);
    if (resourceConfig.relations) {
      fields = resourceConfig.relationFields;
      for (i = 0; i < fields.length; i++) {
        let toAddBack = removed.shift();
        if (toAddBack) {
          attrs[fields[i]] = toAddBack;
        }
      }
    }
    itemRef.set(item, err => {
      if (err) {
        reject(err);
      } else {
        resolve(item);
      }
    });
  } catch (err) {
    reject(err);
}

The DSUtils.deepMixIn will try to deep merge the updated object with the existing one, so in order to be able to remove a list of objects inside a attribute child we have to set it's value to NULL, deleting it or setting it to an empty object will just cause the deepMixIn to override the updated value with the data already existing in the database.

fabiozaffani avatar Nov 22 '15 13:11 fabiozaffani

Related to #22

fabiozaffani avatar Jan 24 '16 20:01 fabiozaffani

This would be solved by fixing #22 right?

jmdobry avatar Sep 20 '16 14:09 jmdobry

@jmdobry I think it wouldn't, the logic being applied here is to fetch the current data from firebase and merge with the new one being passed before setting it back to firebase. However, if the data was directly set in the firebase database with, for example, an attribute/property set with an empty object {}, it would delete the field at firebase, while doing the same thing here it would not work.

fabiozaffani avatar Oct 19 '16 02:10 fabiozaffani