discourse/app/assets/javascripts/select-kit/components/list-setting.js.es6
Joffrey JAFFEUX 0431942f3d
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**
2020-02-03 14:22:14 +01:00

45 lines
1.2 KiB
JavaScript

import MultiSelectComponent from "select-kit/components/multi-select";
import { MAIN_COLLECTION } from "select-kit/components/select-kit";
import { computed } from "@ember/object";
import { readOnly } from "@ember/object/computed";
import { makeArray } from "discourse-common/lib/helpers";
export default MultiSelectComponent.extend({
pluginApiIdentifiers: ["list-setting"],
classNames: ["list-setting"],
choices: null,
nameProperty: null,
valueProperty: null,
content: readOnly("choices"),
selectKitOptions: {
filterable: true,
selectedNameComponent: "selectedNameComponent"
},
modifyComponentForRow(collection) {
if (
collection === MAIN_COLLECTION &&
this.settingName &&
this.settingName.indexOf("color") > -1
) {
return "create-color-row";
}
},
selectedNameComponent: computed("settingName", function() {
if (this.settingName && this.settingName.indexOf("color") > -1) {
return "selected-color";
} else {
return "selected-name";
}
}),
deselect(value) {
this.onChangeChoices &&
this.onChangeChoices([...new Set([value, ...makeArray(this.choices)])]);
this._super(...arguments);
}
});