diff --git a/assets/javascripts/discourse/mixins/undo-changes.js.es6 b/assets/javascripts/discourse/mixins/undo-changes.js.es6 index 43df47f4..776be1cd 100644 --- a/assets/javascripts/discourse/mixins/undo-changes.js.es6 +++ b/assets/javascripts/discourse/mixins/undo-changes.js.es6 @@ -3,14 +3,15 @@ import { default as wizardSchema } from '../lib/wizard-schema'; import { set, get } from "@ember/object"; import Mixin from "@ember/object/mixin"; import { observes } from 'discourse-common/utils/decorators'; +import { deepEqual } from 'discourse-common/lib/object'; export default Mixin.create({ didInsertElement() { this._super(...arguments); this.setupObservers(); - + const obj = this.get(this.componentType); - + this.setProperties({ originalObject: JSON.parse(JSON.stringify(obj)), undoIcon: obj.isNew ? 'times' : 'undo', @@ -22,11 +23,11 @@ export default Mixin.create({ this._super(...arguments); this.removeObservers(); }, - + removeObservers(objType=null) { const componentType = this.componentType; const obj = this.get(componentType); - + let opts = { objectType: objType || obj.type } @@ -35,44 +36,44 @@ export default Mixin.create({ obj.removeObserver(property, this, this.toggleUndo); }); }, - + setupObservers(objType=null) { const componentType = this.componentType; const obj = this.get(componentType); - + let opts = { objectType: objType || obj.type } - + listProperties(componentType, opts).forEach(property => { obj.addObserver(property, this, this.toggleUndo); }); }, - + revertToOriginal(revertBasic=false) { const original = JSON.parse(JSON.stringify(this.originalObject)); const componentType = this.componentType; const obj = this.get(componentType); const objSchema = wizardSchema[componentType]; const basicDefaults = objSchema.basic; - + if (revertBasic) { Object.keys(basicDefaults).forEach(property => { let value; - + if (original.hasOwnProperty(property)) { value = get(original, property); } else if (basicDefaults.hasOwnProperty(property)) { value = get(basicDefaults, property); } - + set(obj, property, value); }); } - + if (objSchema.types && obj.type) { let typeDefaults = objSchema.types[obj.type]; - + Object.keys(typeDefaults).forEach(property => { let value; @@ -81,45 +82,45 @@ export default Mixin.create({ } else if (typeDefaults.hasOwnProperty(property)) { value = get(typeDefaults, property); } - + set(obj, property, value); }); } }, - + toggleUndo() { const current = this.get(this.componentType); const original = this.originalObject; - this.set('showUndo', !_.isEqual(current, original)); + this.set('showUndo', !deepEqual(current, original)); }, - + actions: { undoChanges() { const componentType = this.componentType; const original = this.get('originalObject'); const obj = this.get(componentType); - + this.removeObservers(obj.type); this.revertToOriginal(true); this.set('showUndo', false); this.setupObservers(this.get(componentType).type); }, - + changeType(type) { const componentType = this.componentType; const original = this.get('originalObject'); const obj = this.get(componentType); - + this.removeObservers(obj.type); obj.set('type', type); this.revertToOriginal(); this.set('showUndo', type !== original.type); this.setupObservers(type); }, - + mappedFieldUpdated(property, mappedComponent, type) { const obj = this.get(this.componentType); - obj.notifyPropertyChange(property); + obj.notifyPropertyChange(property); } } -}) \ No newline at end of file +}) diff --git a/assets/javascripts/wizard/lib/user-search.js.es6 b/assets/javascripts/wizard/lib/user-search.js.es6 index 6b242fd4..617825d1 100644 --- a/assets/javascripts/wizard/lib/user-search.js.es6 +++ b/assets/javascripts/wizard/lib/user-search.js.es6 @@ -1,5 +1,6 @@ import { CANCELLED_STATUS } from 'discourse/lib/autocomplete'; import getUrl from 'discourse-common/lib/get-url'; +import discourseDebounce from "discourse/lib/debounce"; var cache = {}, cacheTopicId, @@ -39,7 +40,7 @@ function performSearch(term, topicId, includeGroups, includeMentionableGroups, i }); } -var debouncedSearch = _.debounce(performSearch, 300); +var debouncedSearch = discourseDebounce(performSearch, 300); function organizeResults(r, options) { if (r === CANCELLED_STATUS) { return r; }