- Add support of custom properties names for the "_addGroup" function

- Handle groups in ajax callback
This commit is contained in:
fabien.leconte 2016-10-10 14:17:35 +02:00
parent e3bb6f0f4f
commit aa04aec6e1
4 changed files with 37 additions and 21 deletions

View file

@ -1,4 +1,4 @@
/*! choices.js v2.1.0 | (c) 2016 Josh Johnson | https://github.com/jshjohnson/Choices#readme */ /*! choices.js v2.2.2 | (c) 2016 Josh Johnson | https://github.com/jshjohnson/Choices#readme */
/******/ (function(modules) { // webpackBootstrap /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache /******/ // The module cache
/******/ var installedModules = {}; /******/ var installedModules = {};
@ -908,7 +908,7 @@
var isSelected = result.selected ? result.selected : false; var isSelected = result.selected ? result.selected : false;
var isDisabled = result.disabled ? result.disabled : false; var isDisabled = result.disabled ? result.disabled : false;
if (result.choices) { if (result.choices) {
_this13._addGroup(result, index); _this13._addGroup(result, index, value, label);
} else { } else {
_this13._addChoice(isSelected, isDisabled, result[value], result[label]); _this13._addChoice(isSelected, isDisabled, result[value], result[label]);
} }
@ -1298,8 +1298,14 @@
// Remove loading states/text // Remove loading states/text
_this16._handleLoadingState(false); _this16._handleLoadingState(false);
// Add each result as a choice // Add each result as a choice
parsedResults.forEach(function (result) { parsedResults.forEach(function (result, index) {
_this16._addChoice(!!result.selected, !!result.disabled, result[value], result[label]); var isSelected = result.selected ? result.selected : false;
var isDisabled = result.disabled ? result.disabled : false;
if (result.choices) {
_this16._addGroup(result, index, value, label);
} else {
_this16._addChoice(isSelected, isDisabled, result[value], result[label]);
}
}); });
} }
_this16.containerOuter.removeAttribute('aria-busy'); _this16.containerOuter.removeAttribute('aria-busy');
@ -1564,7 +1570,6 @@
// If backspace or delete key is pressed and the input has no value // If backspace or delete key is pressed and the input has no value
if (hasFocusedInput && !e.target.value && _this17.passedElement.type !== 'select-one') { if (hasFocusedInput && !e.target.value && _this17.passedElement.type !== 'select-one') {
_this17._handleBackspace(activeItems); _this17._handleBackspace(activeItems);
_this17._handleLoadingState(false);
e.preventDefault(); e.preventDefault();
} }
}; };
@ -2202,6 +2207,8 @@
* Add group to dropdown * Add group to dropdown
* @param {Object} group Group to add * @param {Object} group Group to add
* @param {Number} id Group ID * @param {Number} id Group ID
* @param {String} [valueKey] name of the value property on the object
* @param {String} [labelKey] name of the label property on the object
* @return * @return
* @private * @private
*/ */
@ -2211,6 +2218,9 @@
value: function _addGroup(group, id) { value: function _addGroup(group, id) {
var _this22 = this; var _this22 = this;
var valueKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'value';
var labelKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'label';
var groupChoices = (0, _utils.isType)('Object', group) ? group.choices : Array.from(group.getElementsByTagName('OPTION')); var groupChoices = (0, _utils.isType)('Object', group) ? group.choices : Array.from(group.getElementsByTagName('OPTION'));
var groupId = id; var groupId = id;
var isDisabled = group.disabled ? group.disabled : false; var isDisabled = group.disabled ? group.disabled : false;
@ -2224,12 +2234,12 @@
var label = void 0; var label = void 0;
if ((0, _utils.isType)('Object', option)) { if ((0, _utils.isType)('Object', option)) {
label = option.label || option.value; label = option[labelKey] || option[valueKey];
} else { } else {
label = option.innerHTML; label = option.innerHTML;
} }
_this22._addChoice(isOptSelected, isOptDisabled, option.value, label, groupId); _this22._addChoice(isOptSelected, isOptDisabled, option[valueKey], label, groupId);
}); });
} else { } else {
this.store.dispatch((0, _index3.addGroup)(group.label, group.id, false, group.disabled)); this.store.dispatch((0, _index3.addGroup)(group.label, group.id, false, group.disabled));
@ -2314,10 +2324,8 @@
// User's custom templates // User's custom templates
var callbackTemplate = this.config.callbackOnCreateTemplates; var callbackTemplate = this.config.callbackOnCreateTemplates;
var userTemplates = {}; var userTemplates = {};
if (callbackTemplate) { if (callbackTemplate && (0, _utils.isType)('Function', callbackTemplate)) {
if ((0, _utils.isType)('Function', callbackTemplate)) { userTemplates = callbackTemplate(this, _utils.strToEl);
userTemplates = callbackTemplate(this, _utils.strToEl);
}
} }
this.config.templates = (0, _utils.extend)(templates, userTemplates); this.config.templates = (0, _utils.extend)(templates, userTemplates);
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -750,7 +750,7 @@ export default class Choices {
const isSelected = result.selected ? result.selected : false; const isSelected = result.selected ? result.selected : false;
const isDisabled = result.disabled ? result.disabled : false; const isDisabled = result.disabled ? result.disabled : false;
if (result.choices) { if (result.choices) {
this._addGroup(result, index); this._addGroup(result, index, value, label);
} else { } else {
this._addChoice(isSelected, isDisabled, result[value], result[label]); this._addChoice(isSelected, isDisabled, result[value], result[label]);
} }
@ -1082,8 +1082,14 @@ export default class Choices {
// Remove loading states/text // Remove loading states/text
this._handleLoadingState(false); this._handleLoadingState(false);
// Add each result as a choice // Add each result as a choice
parsedResults.forEach((result) => { parsedResults.forEach((result, index) => {
this._addChoice(!!result.selected, !!result.disabled, result[value], result[label]); const isSelected = result.selected ? result.selected : false;
const isDisabled = result.disabled ? result.disabled : false;
if (result.choices) {
this._addGroup(result, index, value, label);
} else {
this._addChoice(isSelected, isDisabled, result[value], result[label]);
}
}); });
} }
this.containerOuter.removeAttribute('aria-busy'); this.containerOuter.removeAttribute('aria-busy');
@ -1901,10 +1907,12 @@ export default class Choices {
* Add group to dropdown * Add group to dropdown
* @param {Object} group Group to add * @param {Object} group Group to add
* @param {Number} id Group ID * @param {Number} id Group ID
* @param {String} [valueKey] name of the value property on the object
* @param {String} [labelKey] name of the label property on the object
* @return * @return
* @private * @private
*/ */
_addGroup(group, id) { _addGroup(group, id, valueKey = 'value', labelKey = 'label') {
const groupChoices = isType('Object', group) ? group.choices : Array.from(group.getElementsByTagName('OPTION')); const groupChoices = isType('Object', group) ? group.choices : Array.from(group.getElementsByTagName('OPTION'));
const groupId = id; const groupId = id;
const isDisabled = group.disabled ? group.disabled : false; const isDisabled = group.disabled ? group.disabled : false;
@ -1918,12 +1926,12 @@ export default class Choices {
let label; let label;
if (isType('Object', option)) { if (isType('Object', option)) {
label = option.label || option.value; label = option[labelKey] || option[valueKey];
} else { } else {
label = option.innerHTML; label = option.innerHTML;
} }
this._addChoice(isOptSelected, isOptDisabled, option.value, label, groupId); this._addChoice(isOptSelected, isOptDisabled, option[valueKey], label, groupId);
}); });
} else { } else {
this.store.dispatch(addGroup(group.label, group.id, false, group.disabled)); this.store.dispatch(addGroup(group.label, group.id, false, group.disabled));