diff --git a/app/assets/javascripts/discourse/adapters/rest.js.es6 b/app/assets/javascripts/discourse/adapters/rest.js.es6 index a00cdd1841..f3f275730d 100644 --- a/app/assets/javascripts/discourse/adapters/rest.js.es6 +++ b/app/assets/javascripts/discourse/adapters/rest.js.es6 @@ -4,8 +4,14 @@ const _identityMap = {}; const RestModel = Ember.Object.extend({ update(attrs) { - const self = this; - return this.store.update(this.get('__type'), this.get('id'), attrs).then(function(result) { + const self = this, + type = this.get('__type'); + return this.store.update(type, this.get('id'), attrs).then(function(result) { + if (result && result[type]) { + Object.keys(result).forEach(function(k) { + attrs[k] = result[k]; + }); + } self.setProperties(attrs); return result; }); @@ -42,9 +48,20 @@ export default Ember.Object.extend({ update(type, id, attrs) { const data = {}; - data[this.serverName(type)] = attrs; + data[Ember.String.underscore(type)] = attrs; - return Discourse.ajax(this.pathFor(type, id), { method: 'PUT', data }); + return Discourse.ajax(this.pathFor(type, id), { method: 'PUT', data }).then(function (result) { + if (result && result[type] && result[type].id) { + const oldRecord = _identityMap[type][id]; + delete _identityMap[type][id]; + _identityMap[type][result[type].id] = oldRecord; + } + return result; + }); + }, + + createRecord(type, attrs) { + return this._hydrate(type, attrs); }, _hydrate(type, obj) { diff --git a/app/assets/javascripts/discourse/mixins/modal-functionality.js.es6 b/app/assets/javascripts/discourse/mixins/modal-functionality.js.es6 index 1eef2431f0..83b0bce41c 100644 --- a/app/assets/javascripts/discourse/mixins/modal-functionality.js.es6 +++ b/app/assets/javascripts/discourse/mixins/modal-functionality.js.es6 @@ -2,9 +2,6 @@ export default Em.Mixin.create({ needs: ['modal'], flash: function(message, messageClass) { - this.set('flashMessage', Em.Object.create({ - message: message, - messageClass: messageClass - })); + this.set('flashMessage', Em.Object.create({ message, messageClass })); } }); diff --git a/app/assets/javascripts/discourse/models/store.js.es6 b/app/assets/javascripts/discourse/models/store.js.es6 index 8fcd0d86ae..d95e6a0102 100644 --- a/app/assets/javascripts/discourse/models/store.js.es6 +++ b/app/assets/javascripts/discourse/models/store.js.es6 @@ -7,6 +7,10 @@ export default Ember.Object.extend({ find(type, id) { const adapter = this.container.lookup('adapter:' + type) || this.container.lookup('adapter:rest'); return adapter.find(type, id); - } + }, + createRecord(type, attrs) { + const adapter = this.container.lookup('adapter:' + type) || this.container.lookup('adapter:rest'); + return adapter.createRecord(type, attrs); + } });