Browse Source

Subclass Backbone.Model in order to return a promise for `save`

JC Brand 6 years ago
parent
commit
96bf4e13ed
2 changed files with 21 additions and 1 deletions
  1. 20 0
      src/headless/converse-core.js
  2. 1 1
      src/headless/converse-roster.js

+ 20 - 0
src/headless/converse-core.js

@@ -282,6 +282,26 @@ _converse.__ = function (str) {
     return i18n.translate.apply(i18n, arguments);
 }
 
+_converse.Model = Backbone.Model.extend({
+
+    save (key, val, options={}) {
+        const args = arguments;
+        return new Promise((resolve, reject) => {
+            const callback = options.success;
+            options.success = () => {
+                resolve();
+                callback.apply(this, args);
+            }
+            const errback = options.error;
+            options.error = (e) => {
+                reject(e);
+                errback.apply(this, args);
+            }
+            return Backbone.Model.prototype.save.call(this, key, val, options);
+        });
+    }
+});
+
 const __ = _converse.__;
 
 const PROMISES = [

+ 1 - 1
src/headless/converse-roster.js

@@ -189,7 +189,7 @@ converse.plugins.add('converse-roster', {
         });
 
 
-        _converse.ModelWithVCardAndPresence = Backbone.Model.extend({
+        _converse.ModelWithVCardAndPresence = _converse.Model.extend({
             initialize () {
                 this.setVCard();
                 this.setPresence();