coveo-search-ui
Version:
Coveo JavaScript Search Framework
140 lines (131 loc) • 5 kB
JavaScript
webpackJsonpCoveo__temporary([57],{
/***/ 194:
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var Dom_1 = __webpack_require__(1);
var _ = __webpack_require__(0);
var Strings_1 = __webpack_require__(6);
__webpack_require__(579);
var Utils_1 = __webpack_require__(4);
var GlobalExports_1 = __webpack_require__(3);
/**
* A multi select widget with standard styling.
*/
var MultiSelect = /** @class */ (function () {
/**
* Creates a new `MultiSelect`.
* @param onChange The function to call when the widget selected values change. This function takes the current
* `MultiSelect` instance as an argument.
* @param options The values which can be selected with the multi select.
* @param label The label to display for the multi select.
*/
function MultiSelect(onChange, options, label) {
if (onChange === void 0) { onChange = function (multiSelect) { }; }
this.onChange = onChange;
this.options = options;
this.label = label;
this.buildContent();
}
MultiSelect.doExport = function () {
GlobalExports_1.exportGlobally({
MultiSelect: MultiSelect
});
};
/**
* Gets the element on which the multi select is bound.
* @returns {HTMLSelectElement} The multi select element.
*/
MultiSelect.prototype.build = function () {
return this.element;
};
/**
* Gets the element on which the multi select is bound.
* @returns {HTMLSelectElement} The multi select element.
*/
MultiSelect.prototype.getElement = function () {
return this.element;
};
/**
* Gets the currently selected values.
* @returns {string[]} The array of selected multi select values.
*/
MultiSelect.prototype.getValue = function () {
return _.chain(this.element.options)
.toArray()
.filter(function (opt) { return opt.selected; })
.map(function (selected) { return selected.value; })
.value();
};
/**
* Gets the currently un-selected values.
* @returns {string[]} The array of un-selected multi select values.
*/
MultiSelect.prototype.getUnselectedValues = function () {
return _.chain(this.element.options)
.toArray()
.filter(function (opt) { return !opt.selected; })
.map(function (selected) { return selected.value; })
.value();
};
/**
* Sets the currently selected values.
* @param values The values to select.
*/
MultiSelect.prototype.setValue = function (values) {
var currentlySelected = this.getValue();
var currentStateSplit = _.partition(_.toArray(this.element.options), function (opt) {
return _.contains(currentlySelected, opt.value);
});
var newStateToApplySplit = _.partition(_.toArray(this.element.options), function (opt) { return _.contains(values, opt.value); });
_.each(newStateToApplySplit[0], function (toSelect) { return (toSelect.selected = true); });
_.each(newStateToApplySplit[1], function (toUnSelect) { return (toUnSelect.selected = false); });
var hasChanged = false;
if (!Utils_1.Utils.arrayEqual(currentStateSplit[0], newStateToApplySplit[0], false)) {
hasChanged = true;
}
if (!Utils_1.Utils.arrayEqual(currentStateSplit[1], newStateToApplySplit[1], false)) {
hasChanged = true;
}
if (hasChanged) {
Dom_1.$$(this.element).trigger('change');
}
};
/**
* Resets the multi select.
*/
MultiSelect.prototype.reset = function () {
var currentlySelected = this.getValue();
this.element.selectedIndex = -1;
if (!Utils_1.Utils.isEmptyArray(currentlySelected)) {
Dom_1.$$(this.element).trigger('change');
}
};
MultiSelect.prototype.buildContent = function () {
var _this = this;
this.element = Dom_1.$$('select', {
className: 'coveo-multi-select',
multiple: '',
size: this.options.length.toString()
}).el;
var optgroup = Dom_1.$$('optgroup', {
className: 'coveo-list-group',
label: this.label
});
var options = _.map(this.options, function (opt) {
return Dom_1.$$('option', { value: opt, className: 'coveo-list-item' }, Strings_1.l(opt));
});
_.each(options, function (opt) { return optgroup.append(opt.el); });
this.element.appendChild(optgroup.el);
Dom_1.$$(this.element).on('change', function () { return _this.onChange(_this); });
};
return MultiSelect;
}());
exports.MultiSelect = MultiSelect;
/***/ }),
/***/ 579:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
/***/ })
});
//# sourceMappingURL=MultiSelect__65d8de8a9f769489e2ff.js.map