{"version":3,"sources":["Triggers.min__00ecf0bd3e47c7b52b32.js","./src/ui/Triggers/Triggers.ts"],"names":["webpackJsonpCoveo__temporary","284","module","exports","__webpack_require__","__extends","this","extendStatics","Object","setPrototypeOf","__proto__","Array","d","b","p","hasOwnProperty","__","constructor","prototype","create","defineProperty","value","element","options","bindings","_window","Triggers","ID","window","ComponentOptions","initComponentOptions","Assert","exists","notifications","bind","onRootElement","QueryEvents","querySuccess","handleProcessNewQueryResults","_this","data","results","$$","empty","length","showElement","undefined","triggers","toggleClass","executeTriggers","trigger","usageAnalytics","logCustomEvent","analyticsActionCauseList","triggerNotify","notification","content","push","appendChild","className","el","triggerRedirect","redirectedTo","location","replace","queryStateModel","set","QueryStateModel","attributesEnum","q","queryController","executeQuery","beforeExecuteQuery","triggerQuery","query","func","name","params","object","map","index","triggerExecute","executed","apply","logger","error","type","single","triggersOfType","filter","oneOrAllTriggers","take","Number","MAX_VALUE","each","doExport","exportGlobally","Component","Initialization","registerAutoCreateComponent","673"],"mappings":"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","file":"Triggers.min__00ecf0bd3e47c7b52b32.js","sourcesContent":["webpackJsonpCoveo__temporary([56],{\n\n/***/ 284:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Component_1 = __webpack_require__(7);\nvar ComponentOptions_1 = __webpack_require__(8);\nvar Assert_1 = __webpack_require__(5);\nvar QueryEvents_1 = __webpack_require__(11);\nvar Dom_1 = __webpack_require__(1);\nvar AnalyticsActionListMeta_1 = __webpack_require__(9);\nvar QueryStateModel_1 = __webpack_require__(13);\nvar Initialization_1 = __webpack_require__(2);\nvar underscore_1 = __webpack_require__(0);\nvar GlobalExports_1 = __webpack_require__(3);\n__webpack_require__(673);\n/**\n * The Triggers component enables the use of triggers (`notify`, `execute`, `query`, `redirect`) generated by the Coveo\n * Search API (see [Trigger](https://docs.coveo.com/en/1458/)) in the query pipeline (see\n * [Managing the Query Pipeline](https://docs.coveo.com/en/1450/)).\n *\n * Note: adding the Triggers component gives query pipeline administrators the power to influence users' search experience.\n * Bad actors will be able to perform XSS attacks, or redirect users to dangerous sites. Make sure only individuals you trust\n * have query pipeline edit privileges.\n */\nvar Triggers = /** @class */ (function (_super) {\n    __extends(Triggers, _super);\n    /**\n     * Creates a new Triggers component.\n     * @param element The HTMLElement on which to instantiate the component.\n     * @param options The options for the Triggers component.\n     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n     * automatically resolved (with a slower execution time).\n     * @param _window The window on which to execute the triggers.\n     */\n    function Triggers(element, options, bindings, _window) {\n        var _this = _super.call(this, element, Triggers.ID, bindings) || this;\n        _this.element = element;\n        _this.options = options;\n        _this.bindings = bindings;\n        _this._window = _window;\n        _this._window = _this._window || window;\n        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Triggers, options);\n        Assert_1.Assert.exists(element);\n        Assert_1.Assert.exists(_this.options);\n        _this.notifications = [];\n        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, _this.handleProcessNewQueryResults);\n        return _this;\n    }\n    Triggers.prototype.handleProcessNewQueryResults = function (data) {\n        var _this = this;\n        Assert_1.Assert.exists(data);\n        Assert_1.Assert.exists(data.results);\n        Dom_1.$$(this.element).empty();\n        this.notifications.length = 0;\n        var showElement = false;\n        if (data.results.triggers === undefined) {\n            Dom_1.$$(this.element).toggleClass('coveo-visible', showElement);\n            return;\n        }\n        this.executeTriggers(data.results.triggers, 'notify', function (trigger) {\n            _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.triggerNotify, {\n                notification: trigger.content\n            }, _this.element);\n            _this.notifications.push(trigger.content);\n            _this.element.appendChild(Dom_1.$$('div', { className: 'coveo-trigger-notify' }, trigger.content).el);\n            showElement = true;\n        });\n        this.executeTriggers(data.results.triggers, 'redirect', function (trigger) {\n            _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.triggerRedirect, {\n                redirectedTo: trigger.content\n            }, _this.element);\n            _this._window.location.replace(trigger.content);\n        }, true);\n        this.executeTriggers(data.results.triggers, 'query', function (trigger) {\n            _this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.q, trigger.content);\n            _this.queryController.executeQuery({\n                beforeExecuteQuery: function () {\n                    _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.triggerQuery, {\n                        query: trigger.content\n                    }, _this.element);\n                }\n            });\n        }, true);\n        this.executeTriggers(data.results.triggers, 'execute', function (trigger) {\n            try {\n                var func = _this._window['' + trigger.content.name];\n                if (typeof func === 'function') {\n                    var params = underscore_1.object(underscore_1.map(trigger.content.params, function (value, index) {\n                        return ['param' + (index + 1), value];\n                    }));\n                    params['element'] = _this.element;\n                    _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.triggerExecute, {\n                        executed: trigger.content.name\n                    }, _this.element);\n                    func.apply(_this._window, [params]);\n                }\n                else {\n                    _this.logger.error(\"A trigger tried to call the function '\" + trigger.content.name + \"', which doesn't exist.\", _this, data.query, trigger);\n                }\n            }\n            catch (error) {\n                _this.logger.error(\"A trigger called the function '\" + trigger.content.name + \"', which threw an error.\", _this, data.query, trigger);\n            }\n        });\n        Dom_1.$$(this.element).toggleClass('coveo-visible', showElement);\n    };\n    Triggers.prototype.executeTriggers = function (trigger, type, func, single) {\n        if (single === void 0) { single = false; }\n        var triggersOfType = underscore_1.filter(trigger, function (trigger) {\n            return trigger.type == type;\n        });\n        var oneOrAllTriggers = underscore_1.take(triggersOfType, single ? 1 : Number.MAX_VALUE);\n        underscore_1.each(oneOrAllTriggers, func);\n    };\n    Triggers.ID = 'Triggers';\n    Triggers.options = {};\n    Triggers.doExport = function () {\n        GlobalExports_1.exportGlobally({\n            Triggers: Triggers\n        });\n    };\n    return Triggers;\n}(Component_1.Component));\nexports.Triggers = Triggers;\nInitialization_1.Initialization.registerAutoCreateComponent(Triggers);\n\n\n/***/ }),\n\n/***/ 673:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// Triggers.min__00ecf0bd3e47c7b52b32.js","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Assert } from '../../misc/Assert';\nimport { QueryEvents, IQuerySuccessEventArgs } from '../../events/QueryEvents';\nimport { ITriggerNotify, ITriggerExecute, ITriggerRedirect, ITriggerQuery, ITrigger } from '../../rest/Trigger';\nimport { $$ } from '../../utils/Dom';\nimport {\n  IAnalyticsTriggerNotify,\n  analyticsActionCauseList,\n  IAnalyticsTriggerRedirect,\n  IAnalyticsTriggerQuery,\n  IAnalyticsTriggerExecute\n} from '../Analytics/AnalyticsActionListMeta';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { Initialization } from '../Base/Initialization';\nimport { object, map, filter, each, take } from 'underscore';\nimport { exportGlobally } from '../../GlobalExports';\n\nimport 'styling/_Triggers';\n\nexport interface ITriggersOptions {}\n\n/**\n * The Triggers component enables the use of triggers (`notify`, `execute`, `query`, `redirect`) generated by the Coveo\n * Search API (see [Trigger](https://docs.coveo.com/en/1458/)) in the query pipeline (see\n * [Managing the Query Pipeline](https://docs.coveo.com/en/1450/)).\n *\n * Note: adding the Triggers component gives query pipeline administrators the power to influence users' search experience.\n * Bad actors will be able to perform XSS attacks, or redirect users to dangerous sites. Make sure only individuals you trust\n * have query pipeline edit privileges.\n */\nexport class Triggers extends Component {\n  static ID = 'Triggers';\n  static options: ITriggersOptions = {};\n\n  static doExport = () => {\n    exportGlobally({\n      Triggers: Triggers\n    });\n  };\n\n  /**\n   * The list of notifications returned by the Search API for the current query (via `notify` triggers).\n   *\n   * The Triggers component automatically renders this list visually.\n   */\n  public notifications: string[];\n\n  /**\n   * Creates a new Triggers component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Triggers component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param _window The window on which to execute the triggers.\n   */\n  constructor(\n    public element: HTMLElement,\n    public options?: ITriggersOptions,\n    public bindings?: IComponentBindings,\n    public _window?: Window\n  ) {\n    super(element, Triggers.ID, bindings);\n\n    this._window = this._window || window;\n    this.options = ComponentOptions.initComponentOptions(element, Triggers, options);\n    Assert.exists(element);\n    Assert.exists(this.options);\n\n    this.notifications = [];\n\n    this.bind.onRootElement(QueryEvents.querySuccess, this.handleProcessNewQueryResults);\n  }\n\n  private handleProcessNewQueryResults(data: IQuerySuccessEventArgs) {\n    Assert.exists(data);\n    Assert.exists(data.results);\n\n    $$(this.element).empty();\n    this.notifications.length = 0;\n    let showElement = false;\n\n    if (data.results.triggers === undefined) {\n      $$(this.element).toggleClass('coveo-visible', showElement);\n      return;\n    }\n\n    this.executeTriggers(data.results.triggers, 'notify', (trigger: ITriggerNotify) => {\n      this.usageAnalytics.logCustomEvent<IAnalyticsTriggerNotify>(\n        analyticsActionCauseList.triggerNotify,\n        {\n          notification: trigger.content\n        },\n        this.element\n      );\n\n      this.notifications.push(trigger.content);\n      this.element.appendChild($$('div', { className: 'coveo-trigger-notify' }, trigger.content).el);\n\n      showElement = true;\n    });\n\n    this.executeTriggers(\n      data.results.triggers,\n      'redirect',\n      (trigger: ITriggerRedirect) => {\n        this.usageAnalytics.logCustomEvent<IAnalyticsTriggerRedirect>(\n          analyticsActionCauseList.triggerRedirect,\n          {\n            redirectedTo: trigger.content\n          },\n          this.element\n        );\n\n        this._window.location.replace(trigger.content);\n      },\n      true\n    );\n\n    this.executeTriggers(\n      data.results.triggers,\n      'query',\n      (trigger: ITriggerQuery) => {\n        this.queryStateModel.set(QueryStateModel.attributesEnum.q, trigger.content);\n        this.queryController.executeQuery({\n          beforeExecuteQuery: () => {\n            this.usageAnalytics.logCustomEvent<IAnalyticsTriggerQuery>(\n              analyticsActionCauseList.triggerQuery,\n              {\n                query: trigger.content\n              },\n              this.element\n            );\n          }\n        });\n      },\n      true\n    );\n\n    this.executeTriggers(data.results.triggers, 'execute', (trigger: ITriggerExecute) => {\n      try {\n        let func: Function = this._window['' + trigger.content.name];\n        if (typeof func === 'function') {\n          let params = object(\n            map(trigger.content.params, (value, index) => {\n              return ['param' + (index + 1), value];\n            })\n          );\n          params['element'] = this.element;\n\n          this.usageAnalytics.logCustomEvent<IAnalyticsTriggerExecute>(\n            analyticsActionCauseList.triggerExecute,\n            {\n              executed: trigger.content.name\n            },\n            this.element\n          );\n\n          func.apply(this._window, [params]);\n        } else {\n          this.logger.error(\n            `A trigger tried to call the function '${trigger.content.name}', which doesn't exist.`,\n            this,\n            data.query,\n            trigger\n          );\n        }\n      } catch (error) {\n        this.logger.error(`A trigger called the function '${trigger.content.name}', which threw an error.`, this, data.query, trigger);\n      }\n    });\n\n    $$(this.element).toggleClass('coveo-visible', showElement);\n  }\n\n  private executeTriggers(trigger: ITrigger<any>[], type: string, func: (trigger: ITrigger<any>) => any, single: boolean = false) {\n    let triggersOfType = filter(trigger, (trigger: ITrigger<any>) => {\n      return trigger.type == type;\n    });\n    let oneOrAllTriggers = take(triggersOfType, single ? 1 : Number.MAX_VALUE);\n\n    each(oneOrAllTriggers, func);\n  }\n}\n\nInitialization.registerAutoCreateComponent(Triggers);\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Triggers/Triggers.ts"],"sourceRoot":""}