coveo-search-ui
Version:
Coveo JavaScript Search Framework
804 lines (779 loc) • 37 kB
JavaScript
webpackJsonpCoveo__temporary([26,57,58],{
/***/ 141:
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var Dom_1 = __webpack_require__(1);
var _ = __webpack_require__(0);
__webpack_require__(567);
var GlobalExports_1 = __webpack_require__(3);
/**
* A simple `fieldset` HTMLElement containing multiple form widgets.
*/
var FormGroup = /** @class */ (function () {
/**
* Creates a new `FormGroup`.
* @param contents The form widgets to include in the form group.
* @param label The label to display for the form group.
*/
function FormGroup(contents, label) {
var _this = this;
this.labelElement = Dom_1.$$('span', { className: 'coveo-form-group-label' });
this.labelElement.text(label);
this.element = Dom_1.$$('fieldset', { className: 'coveo-form-group' }, this.labelElement);
_.each(contents, function (content) {
_this.element.append(content.build());
});
}
FormGroup.doExport = function () {
GlobalExports_1.exportGlobally({
FormGroup: FormGroup
});
};
/**
* Gets the element on which the form group is bound.
* @returns {HTMLElement} The form group element.
*/
FormGroup.prototype.build = function () {
return this.element.el;
};
return FormGroup;
}());
exports.FormGroup = FormGroup;
/***/ }),
/***/ 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;
/***/ }),
/***/ 276:
/***/ (function(module, exports, __webpack_require__) {
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
__webpack_require__(666);
var _ = __webpack_require__(0);
var BreadcrumbEvents_1 = __webpack_require__(35);
var InitializationEvents_1 = __webpack_require__(17);
var PreferencesPanelEvents_1 = __webpack_require__(101);
var QueryEvents_1 = __webpack_require__(11);
var GlobalExports_1 = __webpack_require__(3);
var Model_1 = __webpack_require__(18);
var QueryStateModel_1 = __webpack_require__(13);
var Strings_1 = __webpack_require__(6);
var AccessibilityUtils_1 = __webpack_require__(48);
var AccessibleButton_1 = __webpack_require__(15);
var Dom_1 = __webpack_require__(1);
var LocalStorageUtils_1 = __webpack_require__(41);
var SVGDom_1 = __webpack_require__(16);
var SVGIcons_1 = __webpack_require__(12);
var Utils_1 = __webpack_require__(4);
var AnalyticsActionListMeta_1 = __webpack_require__(10);
var Component_1 = __webpack_require__(7);
var ComponentOptions_1 = __webpack_require__(8);
var Initialization_1 = __webpack_require__(2);
var Checkbox_1 = __webpack_require__(66);
var FormGroup_1 = __webpack_require__(141);
var MultiSelect_1 = __webpack_require__(194);
var TextInput_1 = __webpack_require__(57);
/**
* The `ResultFiltersPreferences` component allows end users to create custom filters to apply to queries. These filters
* are saved to local storage.
*
* Only advanced end users who understand the Coveo query syntax should use this feature (see
* [Coveo Query Syntax Reference](https://docs.coveo.com/en/1552/searching-with-coveo/coveo-cloud-query-syntax)).
*
* This component is normally accessible through the [`Settings`]{@link Settings} menu. Its usual location in the DOM is
* inside the [`PreferencesPanel`]{@link PreferencesPanel} element.
*
* See also the {@link ResultsPreferences} component.
*/
var ResultsFiltersPreferences = /** @class */ (function (_super) {
__extends(ResultsFiltersPreferences, _super);
/**
* Creates a new `ResultsFiltersPreferences` component.
* @param element The HTMLElement on which to instantiate the component.
* @param options The options for the `ResultsFiltersPreferences` component.
* @param bindings The bindings that the component requires to function normally. If not set, these will be
* automatically resolved (with a slower execution time).
*/
function ResultsFiltersPreferences(element, options, bindings) {
var _this = _super.call(this, element, ResultsFiltersPreferences.ID, bindings) || this;
_this.element = element;
_this.options = options;
_this.bindings = bindings;
_this.preferencePanelCheckboxInput = {};
_this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ResultsFiltersPreferences, options);
_this.preferencePanel = Dom_1.$$(_this.element).closest(Component_1.Component.computeCssClassNameForType('PreferencesPanel'));
if (!_this.preferencePanel) {
_this.logger.warn("Cannot instantiate ResultsFilterPreferences, as there is no \"CoveoPreferencesPanel\" in your page !");
return _this;
}
_this.preferencePanelLocalStorage = new LocalStorageUtils_1.LocalStorageUtils(ResultsFiltersPreferences.ID);
_this.mergeLocalPreferencesWithStaticPreferences();
_this.bindPreferencePanelEvent();
_this.bindBreadcrumbEvent();
_this.bindQueryEvent();
// We need to wait after all components are initialized before building the dom, because this component interacts with Tab
// And we don't know if Tab(s) are initialized before or after this component.
_this.bind.oneRootElement(InitializationEvents_1.InitializationEvents.afterComponentsInitialization, function () { return _this.createDom(); });
_this.bind.oneQueryState(Model_1.MODEL_EVENTS.CHANGE_ONE, QueryStateModel_1.QUERY_STATE_ATTRIBUTES.T, function () { return _this.fromPreferencesToCheckboxInput(); });
return _this;
}
ResultsFiltersPreferences.prototype.createDom = function () {
this.container = new FormGroup_1.FormGroup([], Strings_1.l('ResultsFilteringExpression')).build();
this.element.appendChild(this.container);
this.buildCheckboxesInput();
if (this.options.showAdvancedFilters) {
this.buildAdvancedFilters();
}
};
ResultsFiltersPreferences.prototype.save = function () {
this.fromCheckboxInputToPreferences();
var toSave = _.omit(this.preferences, 'tab');
this.logger.info('Saving preferences', toSave);
this.preferencePanelLocalStorage.save(toSave);
};
ResultsFiltersPreferences.prototype.exitWithoutSave = function () {
this.fromPreferencesToCheckboxInput();
this.hideAdvancedFilterBuilder();
};
ResultsFiltersPreferences.prototype.bindPreferencePanelEvent = function () {
var _this = this;
this.bind.on(this.preferencePanel, PreferencesPanelEvents_1.PreferencesPanelEvents.savePreferences, function () { return _this.save(); });
this.bind.on(this.preferencePanel, PreferencesPanelEvents_1.PreferencesPanelEvents.exitPreferencesWithoutSave, function () { return _this.exitWithoutSave(); });
};
ResultsFiltersPreferences.prototype.bindBreadcrumbEvent = function () {
var _this = this;
if (this.options.includeInBreadcrumb) {
this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.populateBreadcrumb, function (args) {
return _this.handlePopulateBreadcrumb(args);
});
this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.clearBreadcrumb, function () { return _this.handleClearBreadcrumb(); });
}
};
ResultsFiltersPreferences.prototype.bindQueryEvent = function () {
var _this = this;
this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });
};
ResultsFiltersPreferences.prototype.handleBuildingQuery = function (args) {
_.each(this.getActiveFilters(), function (filter) {
if (Utils_1.Utils.isNonEmptyString(filter.expression)) {
args.queryBuilder.advancedExpression.add(filter.expression);
}
});
};
ResultsFiltersPreferences.prototype.handlePopulateBreadcrumb = function (args) {
var actives = this.getActiveFilters();
if (Utils_1.Utils.isNonEmptyArray(actives)) {
var container = Dom_1.$$('div', { className: 'coveo-results-filter-preferences-breadcrumb' });
var title = Dom_1.$$(AccessibilityUtils_1.getHeadingTag(args.headingLevel, 'span'), { className: 'coveo-title' });
title.text(Strings_1.l('FiltersInYourPreferences') + ':');
container.el.appendChild(title.el);
var valuesContainer = Dom_1.$$('span', { className: 'coveo-values' });
container.el.appendChild(valuesContainer.el);
for (var i = 0; i < actives.length; i++) {
valuesContainer.el.appendChild(this.buildBreadcrumb(actives[i]));
}
args.breadcrumbs.push({ element: container.el });
}
};
ResultsFiltersPreferences.prototype.handleClearBreadcrumb = function () {
this.isFullBreadcrumbClear = true;
_.each(this.getActiveFilters(), function (filter) {
filter.selected = false;
});
this.fromPreferencesToCheckboxInput();
this.isFullBreadcrumbClear = false;
};
ResultsFiltersPreferences.prototype.buildAdvancedFilters = function () {
var _this = this;
this.advancedFilters = Dom_1.$$('div', { className: 'coveo-advanced-filters' }, Strings_1.l('Create')).el;
new AccessibleButton_1.AccessibleButton()
.withElement(this.advancedFilters)
.withoutLabelOrTitle()
.withSelectAction(function () { return _this.openAdvancedFilterSectionOrSaveFilters(); })
.build();
this.buildAdvancedFilterInput();
this.buildAdvancedFilterFormValidate();
this.advancedFiltersBuilder = Dom_1.$$('div', { className: 'coveo-advanced-filters-builder' }).el;
this.advancedFiltersBuilder.appendChild(this.advancedFilterFormValidate);
var onlineHelp = Dom_1.$$('a', {
href: 'https://docs.coveo.com/en/2053/index-content/inspect-items-with-the-content-browser#result-filtering-expressions',
className: 'coveo-online-help'
}, '?');
var title = Dom_1.$$(this.container).find('.coveo-form-group-label');
onlineHelp.insertAfter(title);
Dom_1.$$(this.advancedFilters).insertAfter(title);
this.container.appendChild(this.advancedFiltersBuilder);
};
ResultsFiltersPreferences.prototype.buildAdvancedFilterInput = function () {
this.advancedFiltersTextInputCaption = new TextInput_1.TextInput(function () { }, Strings_1.l('Caption'));
this.advancedFiltersTextInputCaption.getInput().setAttribute('required', '');
this.advancedFiltersTextInputExpression = new TextInput_1.TextInput(function () { }, Strings_1.l('Expression'));
this.advancedFiltersTextInputExpression.getInput().setAttribute('required', '');
this.advancedFiltersTabSelect = new MultiSelect_1.MultiSelect(function () { }, this.getAllTabs(), Strings_1.l('Tab'));
};
ResultsFiltersPreferences.prototype.buildAdvancedFilterFormValidate = function () {
var _this = this;
this.advancedFilterFormValidate = Dom_1.$$('form').el;
var formSubmit = Dom_1.$$('input', {
type: 'submit'
});
var saveFormButton = Dom_1.$$('span', {
className: 'coveo-save'
}, SVGIcons_1.SVGIcons.icons.save);
SVGDom_1.SVGDom.addClassToSVGInContainer(saveFormButton.el, 'coveo-save-svg');
new AccessibleButton_1.AccessibleButton()
.withElement(saveFormButton.el)
.withLabel(Strings_1.l('Save'))
.withSelectAction(function () { return formSubmit.el.click(); })
.build();
var closeFormButton = Dom_1.$$('span', {
className: 'coveo-close'
}, SVGIcons_1.SVGIcons.icons.close);
SVGDom_1.SVGDom.addClassToSVGInContainer(closeFormButton.el, 'coveo-close-svg');
new AccessibleButton_1.AccessibleButton()
.withElement(closeFormButton.el)
.withLabel(Strings_1.l('Close'))
.withSelectAction(function () { return _this.hideAdvancedFilterBuilder(); })
.build();
var saveAndCloseContainer = Dom_1.$$('div', {
className: 'coveo-choice-container coveo-close-and-save'
});
saveAndCloseContainer.el.appendChild(saveFormButton.el);
saveAndCloseContainer.el.appendChild(closeFormButton.el);
var inputCaption = this.advancedFiltersTextInputCaption.build();
Dom_1.$$(inputCaption).addClass('coveo-caption');
var filtersTabSelect = this.advancedFiltersTabSelect.build();
Dom_1.$$(filtersTabSelect).addClass('coveo-tab');
var filtersExpression = this.advancedFiltersTextInputExpression.build();
Dom_1.$$(filtersExpression).addClass('coveo-expression');
_.each([inputCaption, filtersExpression, filtersTabSelect, saveAndCloseContainer.el, formSubmit.el], function (el) {
_this.advancedFilterFormValidate.appendChild(el);
});
Dom_1.$$(this.advancedFilterFormValidate).on('submit', function (e) { return _this.validateAndSaveAdvancedFilter(e); });
};
ResultsFiltersPreferences.prototype.getAllTabs = function () {
var tabRef = Component_1.Component.getComponentRef('Tab');
if (tabRef) {
var tabsElement = Dom_1.$$(this.root).findAll('.' + Component_1.Component.computeCssClassName(tabRef));
return _.map(tabsElement, function (tabElement) {
var tab = Component_1.Component.get(tabElement);
return tab.options.id;
});
}
else {
return [];
}
};
ResultsFiltersPreferences.prototype.getPreferencesBoxInputToBuild = function () {
return _.map(this.preferences, function (filter) {
return {
label: filter.caption,
tab: filter.tab,
expression: filter.expression
};
});
};
ResultsFiltersPreferences.prototype.buildCheckboxesInput = function () {
var _this = this;
if (this.preferenceContainer != undefined) {
this.preferenceContainer.remove();
}
var toBuild = this.getPreferencesBoxInputToBuild();
if (Utils_1.Utils.isNonEmptyArray(toBuild)) {
this.preferenceContainer = Dom_1.$$('div', {
className: 'coveo-choices-container'
}).el;
_.each(toBuild, function (filterToBuild) {
var checkbox = new Checkbox_1.Checkbox(function (checkbox) {
_this.save();
var filter = _this.preferences[checkbox.getValue()];
if (!_this.queryController.firstQuery && !_this.isFullBreadcrumbClear) {
_this.fromFilterToAnalyticsEvent(filter, filter.selected ? 'selected' : 'unselected');
_this.queryController.executeQuery({
closeModalBox: false
});
}
}, filterToBuild.label);
Dom_1.$$(checkbox.build()).addClass('coveo-choice-container');
_this.preferencePanelCheckboxInput[filterToBuild.label] = checkbox;
_this.preferenceContainer.appendChild(checkbox.getElement());
});
_.each(Dom_1.$$(this.preferenceContainer).findAll('.coveo-choice-container'), function (choiceContainer) {
choiceContainer.appendChild(Dom_1.$$('div', { className: 'coveo-section coveo-section-edit-delete' }).el);
});
Dom_1.$$(this.container).append(this.preferenceContainer);
this.buildEditAdvancedFilter();
this.buildDeleteAdvancedFilter();
this.fromPreferencesToCheckboxInput();
}
};
ResultsFiltersPreferences.prototype.buildDeleteAdvancedFilter = function () {
var _this = this;
_.each(this.preferences, function (filter) {
if (filter.custom) {
var deleteElement = Dom_1.$$('span', {
className: 'coveo-delete'
}, SVGIcons_1.SVGIcons.icons.delete).el;
new AccessibleButton_1.AccessibleButton()
.withElement(deleteElement)
.withLabel(Strings_1.l('Delete'))
.withSelectAction(function () { return _this.confirmDelete(filter, filterElement_1); })
.build();
SVGDom_1.SVGDom.addClassToSVGInContainer(deleteElement, 'coveo-delete-svg');
var filterElement_1 = _this.getFilterElementByCaption(filter.caption);
var insertInto = Dom_1.$$(filterElement_1).find('.coveo-section-edit-delete');
insertInto.appendChild(deleteElement);
}
});
};
ResultsFiltersPreferences.prototype.buildEditAdvancedFilter = function () {
var _this = this;
_.each(this.preferences, function (filter) {
if (filter.custom) {
var editElement = Dom_1.$$('span', {
className: 'coveo-edit'
}, SVGIcons_1.SVGIcons.icons.edit);
new AccessibleButton_1.AccessibleButton()
.withElement(editElement)
.withLabel(Strings_1.l('Edit'))
.withSelectAction(function () { return _this.editElement(filter, filterElement_2); })
.build();
SVGDom_1.SVGDom.addClassToSVGInContainer(editElement.el, 'coveo-edit-svg');
var filterElement_2 = _this.getFilterElementByCaption(filter.caption);
var insertInto = Dom_1.$$(filterElement_2).find('.coveo-section-edit-delete');
insertInto.appendChild(editElement.el);
}
});
};
ResultsFiltersPreferences.prototype.buildBreadcrumb = function (filter) {
var _this = this;
var elem = Dom_1.$$('span', { className: 'coveo-value' });
var caption = Dom_1.$$('span', { className: 'coveo-caption' });
caption.text(filter.caption);
elem.el.appendChild(caption.el);
var clear = Dom_1.$$('span', { className: 'coveo-clear' }, SVGIcons_1.SVGIcons.icons.mainClear);
elem.el.appendChild(clear.el);
var onSelectAction = function () {
filter.selected = false;
_this.fromFilterToAnalyticsEvent(filter, 'cleared from breadcrumb');
_this.fromPreferencesToCheckboxInput();
};
new AccessibleButton_1.AccessibleButton().withElement(elem).withLabel(Strings_1.l('RemoveFilterOn', filter.caption)).withSelectAction(onSelectAction).build();
return elem.el;
};
ResultsFiltersPreferences.prototype.confirmDelete = function (filter, filterElement) {
if (confirm(Strings_1.l('AreYouSureDeleteFilter', filter.caption, filter.expression))) {
var isSelected = filter.selected;
this.deleteFilterPreference(filter, filterElement);
if (isSelected) {
this.fromFilterToAnalyticsEvent(filter, 'deleted');
this.queryController.executeQuery({
closeModalBox: false
});
}
}
};
ResultsFiltersPreferences.prototype.editElement = function (filter, filterElement) {
var oldCaption = this.preferences[filter.caption].caption;
var oldTab = this.preferences[filter.caption].tab;
var oldExpression = this.preferences[filter.caption].expression;
this.deleteFilterPreference(filter, filterElement);
this.openAdvancedFilterSectionOrSaveFilters();
this.populateEditSection({ tab: oldTab, caption: oldCaption, expression: oldExpression });
};
ResultsFiltersPreferences.prototype.populateEditSection = function (toPopulate) {
if (toPopulate === void 0) { toPopulate = { tab: [''], caption: '', expression: '' }; }
this.advancedFiltersTextInputCaption.setValue(toPopulate.caption);
this.advancedFiltersTextInputExpression.setValue(toPopulate.expression);
this.advancedFiltersTabSelect.setValue(toPopulate.tab);
};
ResultsFiltersPreferences.prototype.deleteFilterPreference = function (filter, filterElement) {
this.preferencePanelLocalStorage.remove(filter.caption);
delete this.preferences[filter.caption];
Dom_1.$$(Dom_1.$$(filterElement).closest('.coveo-choice-container')).detach();
};
ResultsFiltersPreferences.prototype.openAdvancedFilterSectionOrSaveFilters = function () {
if (Dom_1.$$(this.advancedFiltersBuilder).hasClass('coveo-active')) {
Dom_1.$$(Dom_1.$$(this.advancedFilterFormValidate).find('input[type=submit]')).trigger('click');
this.hideAdvancedFilterBuilder();
}
else {
this.populateEditSection();
this.showAdvancedFilterBuilder();
}
};
ResultsFiltersPreferences.prototype.validateAndSaveAdvancedFilter = function (e) {
e.preventDefault();
this.hideAdvancedFilterBuilder();
var caption = this.advancedFiltersTextInputCaption.getValue();
var expression = this.advancedFiltersTextInputExpression.getValue();
var tabs = this.advancedFiltersTabSelect.getValue();
this.preferences[caption] = {
caption: caption,
custom: true,
expression: expression,
tab: tabs,
selected: true
};
this.buildCheckboxesInput();
this.save();
this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.t, this.getActiveTab());
this.advancedFiltersTextInputCaption.reset();
this.advancedFiltersTextInputExpression.reset();
this.advancedFiltersTabSelect.reset();
this.container.appendChild(this.advancedFiltersBuilder);
this.fromFilterToAnalyticsEvent(this.preferences[caption], 'saved');
this.queryController.executeQuery({
closeModalBox: false
});
};
ResultsFiltersPreferences.prototype.fromPreferencesToCheckboxInput = function () {
var _this = this;
_.each(this.getActiveFilters(), function (filter) {
_this.preferencePanelCheckboxInput[filter.caption].select();
});
_.each(this.getInactiveFilters(), function (filter) {
_this.preferencePanelCheckboxInput[filter.caption].reset();
});
_.each(this.getDormantFilters(), function (filter) {
_this.preferencePanelCheckboxInput[filter.caption].select();
});
};
ResultsFiltersPreferences.prototype.fromCheckboxInputToPreferences = function () {
if (this.preferencePanelCheckboxInput) {
var selecteds_1 = _.map(_.filter(this.preferencePanelCheckboxInput, function (checkbox) { return checkbox.isSelected(); }), function (selected) { return selected.getValue(); });
_.each(this.preferences, function (filter) {
if (_.contains(selecteds_1, filter.caption)) {
filter.selected = true;
}
else {
filter.selected = false;
}
});
}
};
ResultsFiltersPreferences.prototype.getDormantFilters = function () {
var _this = this;
var activeTab = this.getActiveTab();
return _.filter(this.preferences, function (filter) {
return filter.selected && !_this.filterIsInActiveTab(filter, activeTab);
});
};
ResultsFiltersPreferences.prototype.getActiveFilters = function () {
var _this = this;
var activeTab = this.getActiveTab();
return _.filter(this.preferences, function (filter) {
return filter.selected && _this.filterIsInActiveTab(filter, activeTab);
});
};
ResultsFiltersPreferences.prototype.getInactiveFilters = function () {
var _this = this;
var activeTab = this.getActiveTab();
return _.filter(this.preferences, function (filter) {
return !filter.selected || !_this.filterIsInActiveTab(filter, activeTab);
});
};
ResultsFiltersPreferences.prototype.getActiveTab = function () {
return this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.t);
};
ResultsFiltersPreferences.prototype.filterIsInActiveTab = function (filter, tab) {
filter.tab = _.compact(filter.tab);
return _.contains(filter.tab, tab) || Utils_1.Utils.isEmptyArray(filter.tab);
};
ResultsFiltersPreferences.prototype.getFilterElementByCaption = function (caption) {
return Dom_1.$$(this.preferenceContainer).find("input[value='" + caption.replace(/'/g, "\\'") + "']").parentElement;
};
ResultsFiltersPreferences.prototype.fromResultsFilterOptionToResultsPreferenceInterface = function () {
var ret = {};
_.each(this.options.filters, function (filter, caption) {
ret[caption] = {
expression: filter.expression,
tab: filter.tab,
selected: filter.selected ? filter.selected : false,
custom: false,
caption: caption
};
});
return ret;
};
ResultsFiltersPreferences.prototype.mergeLocalPreferencesWithStaticPreferences = function () {
var staticPreferences = this.fromResultsFilterOptionToResultsPreferenceInterface();
var localPreferences = this.preferencePanelLocalStorage.load();
var localPreferencesWithoutRemoved = _.filter(localPreferences, function (preference) {
var isCustom = preference.custom;
var existsInStatic = _.find(staticPreferences, function (staticPreference) {
return staticPreference.caption == preference.caption;
});
return isCustom || existsInStatic != undefined;
});
var localToMerge = {};
_.each(localPreferencesWithoutRemoved, function (filter) {
localToMerge[filter.caption] = {
expression: filter.expression,
tab: filter.tab,
selected: filter.selected,
custom: filter.custom,
caption: filter.caption
};
});
this.preferences = Utils_1.Utils.extendDeep(staticPreferences, localToMerge);
};
ResultsFiltersPreferences.prototype.fromFilterToAnalyticsEvent = function (filter, type) {
this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.customfiltersChange, {
customFilterName: filter.caption,
customFilterExpression: filter.expression,
customFilterType: type
});
};
ResultsFiltersPreferences.prototype.enlargeModalBox = function () {
var modalBoxContainer = Dom_1.$$(document.body).find('.coveo-modal-container');
if (modalBoxContainer) {
Dom_1.$$(modalBoxContainer).addClass('coveo-mod-big');
}
};
ResultsFiltersPreferences.prototype.shrinkModalBox = function () {
var modalBoxContainer = Dom_1.$$(document.body).find('.coveo-modal-container');
if (modalBoxContainer) {
Dom_1.$$(modalBoxContainer).removeClass('coveo-mod-big');
}
};
ResultsFiltersPreferences.prototype.showAdvancedFilterBuilder = function () {
if (this.advancedFiltersBuilder) {
Dom_1.$$(this.advancedFiltersBuilder).addClass('coveo-active');
this.enlargeModalBox();
}
};
ResultsFiltersPreferences.prototype.hideAdvancedFilterBuilder = function () {
if (this.advancedFiltersBuilder) {
Dom_1.$$(this.advancedFiltersBuilder).removeClass('coveo-active');
this.shrinkModalBox();
}
};
ResultsFiltersPreferences.ID = 'ResultsFiltersPreferences';
ResultsFiltersPreferences.doExport = function () {
GlobalExports_1.exportGlobally({
ResultsFiltersPreferences: ResultsFiltersPreferences
});
};
/**
* The options for the component
* @componentOptions
*/
ResultsFiltersPreferences.options = {
/**
* Specifies whether to display the active filter(s) in the [`Breadcrumb`]{@link Breadcrumb}.
*
* Default value is `true`.
*/
includeInBreadcrumb: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),
/**
* Specifies whether to show the **Create** button that allows the end user to create filters.
*
* If you set this option to `false`, only the pre-populated
* [`filters`]{@link ResultsFiltersPreferences.options.filters} are available to the end user.
*
* Default value is `true`.
*/
showAdvancedFilters: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),
/**
* Specifies the default filters which all end users can apply.
*
* End users cannot modify or delete these filters. These filters do not count as "user-made" filters, but rather as
* "built-in" filters created by the developer of the search page.
*
* **Note:**
* > You cannot set this option directly in the component markup as an HTML attribute. You must either set it in the
* > [`init`]{@link init} call of your search interface (see
* > [Passing Component Options in the init Call](https://docs.coveo.com/en/346/#passing-component-options-in-the-init-call)),
* > or before the `init` call, using the `options` top-level function (see
* > [Passing Component Options Before the init Call](https://docs.coveo.com/en/346/#passing-component-options-before-the-init-call)).
*
* Filters should follow this definition:
*
* `filters : { [caption : string] : { expression : string, tab? : string[] } }`;
*
* **Example:**
*
* var myFilters = {
* "Only Google Drive Items" : {
* expression : "@connectortype == 'GoogleDriveCrawler'",
* tab : ["Tab1", "Tab2"]
* },
*
* "Another Filter" : {
* expression : [ ... another expression ... ]
* },
*
* [ ... ]
* };
*
* ```javascript
* // You can set the option in the 'init' call:
* Coveo.init(document.querySelector("#search"), {
* ResultsFiltersPreferences : {
* filters : myFilters
* }
* });
*
* // Or before the 'init' call, using the 'options' top-level function:
* // Coveo.options(document.querySelector("#search"), {
* // ResultsFiltersPreferences : {
* filters : myFilters
* }
* // });
* ```
*
* Default value is `undefined`.
*/
filters: ComponentOptions_1.ComponentOptions.buildJsonOption()
};
return ResultsFiltersPreferences;
}(Component_1.Component));
exports.ResultsFiltersPreferences = ResultsFiltersPreferences;
Initialization_1.Initialization.registerAutoCreateComponent(ResultsFiltersPreferences);
/***/ }),
/***/ 567:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
/***/ }),
/***/ 579:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
/***/ }),
/***/ 666:
/***/ (function(module, exports) {
// removed by extract-text-webpack-plugin
/***/ })
});
//# sourceMappingURL=ResultsFiltersPreferences__65d8de8a9f769489e2ff.js.map