Merge branch 'master' into rich-comp
Dieser Commit ist enthalten in:
Commit
8a0dc999b3
3 geänderte Dateien mit 27 neuen und 24 gelöschten Zeilen
|
@ -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);
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
|
|
@ -80,6 +80,7 @@
|
|||
//= require discourse/app/helpers/category-link
|
||||
//= require discourse/app/helpers/user-avatar
|
||||
//= require discourse/app/helpers/format-username
|
||||
//= require discourse/app/helpers/share-url
|
||||
//= require discourse-common/addon/helpers/component-for-collection
|
||||
//= require discourse-common/addon/helpers/component-for-row
|
||||
//= require discourse-common/addon/lib/raw-templates
|
||||
|
|
|
@ -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; }
|
||||
|
|
Laden …
In neuem Issue referenzieren