FIX: makes setting-object capable of defining value/name properties itself (#9003)
This commit is contained in:
parent
30e2867547
commit
74f2d48018
|
@ -1,5 +1,7 @@
|
|||
import discourseComputed from "discourse-common/utils/decorators";
|
||||
import { computed } from "@ember/object";
|
||||
import Mixin from "@ember/object/mixin";
|
||||
import { isPresent } from "@ember/utils";
|
||||
|
||||
export default Mixin.create({
|
||||
@discourseComputed("value", "default")
|
||||
|
@ -10,6 +12,34 @@ export default Mixin.create({
|
|||
return val.toString() !== defaultVal.toString();
|
||||
},
|
||||
|
||||
computedValueProperty: computed(
|
||||
"valueProperty",
|
||||
"validValues.[]",
|
||||
function() {
|
||||
if (isPresent(this.valueProperty)) {
|
||||
return this.valueProperty;
|
||||
}
|
||||
|
||||
if (isPresent(this.validValues.get("firstObject.value"))) {
|
||||
return "value";
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
),
|
||||
|
||||
computedNameProperty: computed("nameProperty", "validValues.[]", function() {
|
||||
if (isPresent(this.nameProperty)) {
|
||||
return this.nameProperty;
|
||||
}
|
||||
|
||||
if (isPresent(this.validValues.get("firstObject.name"))) {
|
||||
return "name";
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}),
|
||||
|
||||
@discourseComputed("valid_values")
|
||||
validValues(validValues) {
|
||||
const vals = [],
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
{{combo-box
|
||||
valueProperty="value"
|
||||
content=setting.validValues
|
||||
value=value
|
||||
onChange=(action (mut value))
|
||||
valueProperty=setting.computedValueProperty
|
||||
nameProperty=setting.computedNameProperty
|
||||
options=(hash
|
||||
castInteger=true
|
||||
allowAny=setting.allowsNone
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
import EmberObject from "@ember/object";
|
||||
import Setting from "admin/mixins/setting-object";
|
||||
|
||||
QUnit.module("mixin:setting-object");
|
||||
|
||||
QUnit.test("flat array", assert => {
|
||||
const FooSetting = EmberObject.extend(Setting);
|
||||
|
||||
const fooSettingInstance = FooSetting.create({
|
||||
valid_values: ["foo", "bar"]
|
||||
});
|
||||
|
||||
assert.equal(fooSettingInstance.computedValueProperty, null);
|
||||
assert.equal(fooSettingInstance.computedNameProperty, null);
|
||||
});
|
||||
|
||||
QUnit.test("object", assert => {
|
||||
const FooSetting = EmberObject.extend(Setting);
|
||||
|
||||
const fooSettingInstance = FooSetting.create({
|
||||
valid_values: [{ value: "foo", name: "bar" }]
|
||||
});
|
||||
|
||||
assert.equal(fooSettingInstance.computedValueProperty, "value");
|
||||
assert.equal(fooSettingInstance.computedNameProperty, "name");
|
||||
});
|
||||
|
||||
QUnit.test("no values", assert => {
|
||||
const FooSetting = EmberObject.extend(Setting);
|
||||
|
||||
const fooSettingInstance = FooSetting.create({
|
||||
valid_values: []
|
||||
});
|
||||
|
||||
assert.equal(fooSettingInstance.computedValueProperty, null);
|
||||
assert.equal(fooSettingInstance.computedNameProperty, null);
|
||||
});
|
||||
|
||||
QUnit.test("value/name properties defined", assert => {
|
||||
const FooSetting = EmberObject.extend(Setting);
|
||||
|
||||
const fooSettingInstance = FooSetting.create({
|
||||
valueProperty: "foo",
|
||||
nameProperty: "bar",
|
||||
valid_values: []
|
||||
});
|
||||
|
||||
assert.equal(fooSettingInstance.computedValueProperty, "foo");
|
||||
assert.equal(fooSettingInstance.computedNameProperty, "bar");
|
||||
});
|
Loading…
Reference in New Issue