DEV: select-kit 2 (#7998)

This new iteration of select-kit focuses on following best principales and disallowing mutations inside select-kit components. A best effort has been made to avoid breaking changes, however if you content was a flat array, eg: ["foo", "bar"] You will need to set valueProperty=null and nameProperty=null on the component.

Also almost every component should have an `onChange` handler now to decide what to do with the updated data. **select-kit will not mutate your data by itself anymore**
This commit is contained in:
Joffrey JAFFEUX
2020-02-03 14:22:14 +01:00
committed by GitHub
parent 0e2cbee339
commit 0431942f3d
278 changed files with 7566 additions and 6957 deletions

View File

@ -1,20 +1,18 @@
import discourseComputed from "discourse-common/utils/decorators";
import { makeArray } from "discourse-common/lib/helpers";
import { empty, alias } from "@ember/object/computed";
import { empty, reads } from "@ember/object/computed";
import Component from "@ember/component";
import { on } from "discourse-common/utils/decorators";
export default Component.extend({
classNameBindings: [":value-list"],
inputInvalid: empty("newValue"),
inputDelimiter: null,
inputType: null,
newValue: "",
collection: null,
values: null,
noneKey: alias("addKey"),
noneKey: reads("addKey"),
@on("didReceiveAttrs")
_setupCollection() {
@ -47,7 +45,7 @@ export default Component.extend({
addValue(newValue) {
if (this.inputInvalid) return;
this.set("newValue", "");
this.set("newValue", null);
this._addValue(newValue);
},
@ -62,12 +60,26 @@ export default Component.extend({
_addValue(value) {
this.collection.addObject(value);
if (this.choices) {
this.set("choices", this.choices.rejectBy("id", value));
} else {
this.set("choices", []);
}
this._saveValues();
},
_removeValue(value) {
const collection = this.collection;
collection.removeObject(value);
this.collection.removeObject(value);
const item = { id: value, name: value };
if (this.choices) {
this.choices.addObject(item);
} else {
this.set("choices", makeArray(item));
}
this._saveValues();
},