{"version":3,"sources":["./src/ui/Sort/Sort.ts","./src/ui/Sort/SortCriteria.ts","./sass/_Sort.scss"],"names":[],"mappings":"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","file":"Sort__d2b01b0f173a0c131e66.js","sourcesContent":["import 'styling/_Sort';\nimport { exportGlobally } from '../../GlobalExports';\nimport { IBuildingQueryEventArgs, IQueryErrorEventArgs, IQuerySuccessEventArgs, QueryEvents } from '../../events/QueryEvents';\nimport { Assert } from '../../misc/Assert';\nimport { MODEL_EVENTS } from '../../models/Model';\nimport { QUERY_STATE_ATTRIBUTES, QueryStateModel } from '../../models/QueryStateModel';\nimport { $$ } from '../../utils/Dom';\nimport { SVGDom } from '../../utils/SVGDom';\nimport { SVGIcons } from '../../utils/SVGIcons';\nimport { Utils } from '../../utils/Utils';\nimport { logSortEvent } from '../Analytics/SharedAnalyticsCalls';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Initialization } from '../Base/Initialization';\nimport { SortCriteria, VALID_DIRECTION } from './SortCriteria';\nimport { AccessibleButton, ArrowDirection } from '../../utils/AccessibleButton';\nimport { l } from '../../strings/Strings';\nimport { findIndex, find, any } from 'underscore';\n\nexport interface ISortOptions {\n  sortCriteria?: SortCriteria[];\n  caption?: string;\n}\n/**\n * The `Sort` component renders a widget that the end user can interact with to select the criterion to use when sorting query results.\n *\n * To improve accessibility, it's recommended to group `Sort` components in a container with `role=\"radiogroup\"`.\n */\nexport class Sort extends Component {\n  static ID = 'Sort';\n\n  static doExport = () => {\n    exportGlobally({\n      Sort: Sort,\n      SortCriteria: SortCriteria\n    });\n  };\n\n  /**\n   * Options for the component\n   * @componentOptions\n   */\n  static options: ISortOptions = {\n    /**\n     * The sort criterion/criteria the end user can select/toggle between when interacting with this component instance.\n     *\n     * The available sort criteria are:\n     * - `relevancy`\n     * - `date ascending`/`date descending`\n     * - `qre`\n     * - `@field ascending`/`@field descending`, where you must replace `field` with the name of a sortable field in your index (e.g., `data-sort-criteria=\"@size ascending\"`).\n     *\n     * You can specify a comma separated list of sort criteria to toggle between when interacting with this component instance (e.g., `data-sort-criteria=\"date descending,date ascending\"`).\n     *\n     * You can specify multiple sort criteria to be used in the same request by separating them with a semicolon (e.g., `data-sort-criteria=\"@size ascending;date ascending\"` ).\n     *\n     * Interacting with this component instance will cycle through those criteria in the order they are listed in.\n     * Typically, you should only specify a list of sort criteria when you want the end user to be able to to toggle the direction of a `date` or `@field` sort criteria.\n     * Otherwise, you should configure a distinct `Sort` component instance for each sort criterion you want to make available in your search page.\n     *\n     * You must specify a valid value for this option in order for this component instance to work correctly.\n     *\n     * Examples:\n     *\n     * - `data-sort-criteria=\"date ascending\"` createes a Sort component that allows to sort on `date ascending`, without being able to toggle the order.\n     * - `data-sort-criteria=\"date ascending, date descending\"` creates a Sort component that allows end users to toggle between `date ascending` and `date descending` on click.\n     * - `data-sort-criteria=\"@size ascending; date descending\"` creates a Sort component that only allows end users to sort on `@size ascending`. The index then applies a second sort on `date descending` when two items are of equal value.\n     * - `data-sort-criteria=\"@size ascending; date descending, @size descending; date descending\"` creates a Sort component that allows end users to toggle between `@size ascending` and `@size descending`. For each value, the index applies a second sort on `date descending` when two items are of equal value.\n     */\n    sortCriteria: ComponentOptions.buildCustomListOption(\n      values => {\n        return values.map(criteria => {\n          // 'any' because Underscore won't accept the union type as an argument.\n          if (typeof criteria === 'string') {\n            return new SortCriteria(criteria);\n          } else {\n            return criteria as SortCriteria;\n          }\n        });\n      },\n      { required: true }\n    ),\n\n    /**\n     * The caption to display on this component instance.\n     *\n     * By default, the component uses the text content of the element it is instanciated on.\n     */\n    caption: ComponentOptions.buildLocalizedStringOption({ required: true })\n  };\n\n  private currentCriteria: SortCriteria;\n\n  private sortButton: HTMLElement;\n  private directionButton: HTMLElement;\n  private radioGroup: HTMLElement;\n\n  /**\n   * Creates a new `Sort` component instance.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for this component instance.\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   */\n  constructor(public element: HTMLElement, public options?: ISortOptions, bindings?: IComponentBindings) {\n    super(element, Sort.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, Sort, options);\n\n    Assert.isLargerOrEqualsThan(1, this.options.sortCriteria.length);\n\n    this.bind.onQueryState(MODEL_EVENTS.CHANGE_ONE, QUERY_STATE_ATTRIBUTES.SORT, () => this.handleQueryStateChanged());\n    this.bind.onRootElement(QueryEvents.querySuccess, (args: IQuerySuccessEventArgs) => this.handleQuerySuccess(args));\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n    this.bind.onRootElement(QueryEvents.queryError, (args: IQueryErrorEventArgs) => this.handleQueryError(args));\n    this.ensureDom();\n  }\n\n  public createDom() {\n    const el = $$(this.element);\n    el.on('click', () => this.selectAndExecuteQuery());\n    const innerText = el.text();\n    el.empty();\n\n    this.findOrCreateRadioGroup();\n    this.createSortButton(innerText);\n    if (this.isToggle()) {\n      this.createDirectionButton();\n    }\n\n    this.update();\n  }\n\n  /**\n   * Selects this `Sort` component.\n   *\n   * Updates the state model if selecting this component toggles its current [`sortCriteria`]{@link Sort.options.sortCriteria}.\n   *\n   * @param direction The sort direction. Can be one of: `ascending`, `descending`.\n   */\n  public select(direction?: string) {\n    if (direction) {\n      this.currentCriteria = find(this.options.sortCriteria, (criteria: SortCriteria) => {\n        return criteria.direction == direction;\n      });\n      this.updateQueryStateModel();\n    } else if (Utils.exists(this.currentCriteria)) {\n      this.selectNextCriteria();\n    } else {\n      this.selectFirstCriteria();\n    }\n  }\n\n  /**\n   * Selects this `Sort` component, then triggers a query if selecting this component toggles its current [`sortCriteria`]{@link Sort.options.sortCriteria}.\n   *\n   * Also logs an event in the usage analytics with the new current sort criteria.\n   */\n\n  public selectAndExecuteQuery() {\n    var oldCriteria = this.currentCriteria;\n    this.select();\n    if (oldCriteria != this.currentCriteria) {\n      this.executeSearchQuery();\n    }\n  }\n\n  public enable() {\n    $$(this.element).removeClass('coveo-tab-disabled');\n    this.update();\n    super.enable();\n  }\n\n  public disable() {\n    $$(this.element).addClass('coveo-tab-disabled');\n    super.disable();\n  }\n\n  /**\n   * Gets the current [`sortCriteria`]{@link Sort.options.sortCriteria} of this `Sort` component.\n   * @returns {SortCriteria}\n   */\n  public getCurrentCriteria(): SortCriteria {\n    return this.currentCriteria;\n  }\n\n  /**\n   * Indicates whether the name of any of the available [`sortCriteria`]{@link Sort.options.sortCriteria} of this `Sort` component matches the argument.\n   * @param sortId The sort criteria name to look for (e.g., `date descending`).\n   */\n  public match(sortId: string) {\n    return any(this.options.sortCriteria, (sortCriteria: SortCriteria) => sortId == sortCriteria.toString());\n  }\n\n  private findOrCreateRadioGroup() {\n    this.radioGroup = this.findRadioGroup();\n    if (!this.radioGroup) {\n      this.element.setAttribute('role', 'radiogroup');\n      this.radioGroup = this.element;\n    }\n  }\n\n  private createSortButton(innerText?: string) {\n    this.sortButton = $$('span').el;\n    this.sortButton.innerText = this.options.caption || innerText;\n    new AccessibleButton()\n      .withElement(this.sortButton)\n      .withEnterKeyboardAction(() => this.selectAndExecuteQuery())\n      .withArrowsAction((direction, e) => this.onArrowPressed(direction, e))\n      .withLabel(this.isToggle() ? this.getDirectionalLabel(this.initialDirection as VALID_DIRECTION) : this.getOmnidirectionalLabel())\n      .withRole('radio')\n      .build();\n    this.element.appendChild(this.sortButton);\n  }\n\n  private createDirectionButton() {\n    this.directionButton = $$('span', { className: 'coveo-icon' }, ...this.createIcons()).el;\n    new AccessibleButton()\n      .withElement(this.directionButton)\n      .withSelectAction(e => {\n        e.stopPropagation();\n        this.selectNextCriteriaAndExecuteQuery();\n      })\n      .withArrowsAction((direction, e) => this.onArrowPressed(direction, e))\n      .withLabel(\n        this.getDirectionalLabel(\n          this.initialDirection === VALID_DIRECTION.DESCENDING ? VALID_DIRECTION.ASCENDING : VALID_DIRECTION.DESCENDING\n        )\n      )\n      .withRole('radio')\n      .build();\n    this.element.appendChild(this.directionButton);\n  }\n\n  private onArrowPressed(direction: ArrowDirection, e: Event) {\n    this.selectNextRadioButton(direction === ArrowDirection.RIGHT || direction === ArrowDirection.DOWN ? 1 : -1);\n    e.stopPropagation();\n  }\n\n  private createIcons() {\n    const iconAscending = $$('span', { className: 'coveo-sort-icon-ascending' }, SVGIcons.icons.arrowUp);\n    SVGDom.addClassToSVGInContainer(iconAscending.el, 'coveo-sort-icon-ascending-svg');\n    const iconDescending = $$('span', { className: 'coveo-sort-icon-descending' }, SVGIcons.icons.arrowDown);\n    SVGDom.addClassToSVGInContainer(iconDescending.el, 'coveo-sort-icon-descending-svg');\n    return [iconAscending, iconDescending];\n  }\n\n  private findRadioGroup(element = this.element) {\n    if (!element || element === document.body) {\n      return null;\n    }\n    if (element.getAttribute('role') === 'radiogroup') {\n      return element;\n    }\n    return this.findRadioGroup(element.parentElement);\n  }\n\n  private selectNextRadioButton(direction = 1) {\n    const radioButtons = $$(this.radioGroup).findAll('[role=\"radio\"]');\n    const currentIndex = findIndex(radioButtons, radio => radio.getAttribute('aria-checked') === 'true');\n    let indexToSelect: number;\n    const isAnythingSelected = currentIndex !== -1;\n    if (isAnythingSelected) {\n      indexToSelect = (currentIndex + direction + radioButtons.length) % radioButtons.length;\n    } else {\n      if (direction >= 0) {\n        indexToSelect = 0;\n      } else {\n        indexToSelect = radioButtons.length - 1;\n      }\n    }\n    const radioToSelect = radioButtons[indexToSelect];\n    radioToSelect.focus();\n    radioToSelect.click();\n  }\n\n  private executeSearchQuery() {\n    this.queryController.deferExecuteQuery({\n      beforeExecuteQuery: () => logSortEvent(this.usageAnalytics, this.currentCriteria.sort + this.currentCriteria.direction)\n    });\n  }\n\n  private selectFirstCriteria() {\n    this.currentCriteria = this.options.sortCriteria[0];\n    this.updateQueryStateModel();\n  }\n\n  private selectNextCriteria() {\n    const indexOfCurrentCriteria = this.currentCriteria ? this.options.sortCriteria.indexOf(this.currentCriteria) : 0;\n    this.currentCriteria = this.options.sortCriteria[(indexOfCurrentCriteria + 1) % this.options.sortCriteria.length];\n    this.updateQueryStateModel();\n  }\n\n  private selectNextCriteriaAndExecuteQuery() {\n    const oldCriteria = this.currentCriteria;\n    this.selectNextCriteria();\n    if (oldCriteria != this.currentCriteria) {\n      this.executeSearchQuery();\n    }\n  }\n\n  private handleQueryStateChanged() {\n    this.update();\n  }\n\n  private update() {\n    // Basically, if the criteria in the model fits with one of ours, it'll become our active criteria\n    var sortCriteria = <string>this.queryStateModel.get(QueryStateModel.attributesEnum.sort);\n    if (Utils.isNonEmptyString(sortCriteria)) {\n      var criteriaFromModel = SortCriteria.parse(sortCriteria);\n      this.currentCriteria = find(this.options.sortCriteria, (criteria: SortCriteria) => criteriaFromModel.equals(criteria));\n    } else {\n      this.currentCriteria = null;\n    }\n    this.updateAppearance();\n    this.updateAccessibilityProperties();\n  }\n\n  private get captionIsDefined() {\n    return Utils.isNonEmptyString(this.options.caption);\n  }\n\n  private get currentDirection() {\n    return this.currentCriteria ? this.currentCriteria.direction : this.initialDirection;\n  }\n\n  private get initialDirection() {\n    return this.options.sortCriteria[0].direction;\n  }\n\n  private get displayedSortText() {\n    return this.captionIsDefined ? this.options.caption : this.element.textContent;\n  }\n\n  private handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    Assert.exists(data);\n\n    var sort = this.queryStateModel.get(QueryStateModel.attributesEnum.sort);\n    if (sort == QueryStateModel.defaultAttributes.sort || this.isSelected()) {\n      if (this.currentCriteria) {\n        this.currentCriteria.putInQueryBuilder(data.queryBuilder);\n      }\n    }\n  }\n\n  private handleQuerySuccess(data: IQuerySuccessEventArgs) {\n    if (data.results.results.length == 0) {\n      $$(this.element).addClass('coveo-sort-hidden');\n    } else {\n      $$(this.element).removeClass('coveo-sort-hidden');\n    }\n  }\n\n  private handleQueryError(data: IQueryErrorEventArgs) {\n    $$(this.element).addClass('coveo-sort-hidden');\n  }\n\n  private isToggle(): boolean {\n    return this.options.sortCriteria.length > 1;\n  }\n\n  private isSelected(): boolean {\n    return Utils.exists(this.currentCriteria);\n  }\n\n  private updateAppearance() {\n    $$(this.element).toggleClass('coveo-selected', this.isSelected());\n    if (this.isToggle()) {\n      $$(this.element).removeClass('coveo-ascending');\n      $$(this.element).removeClass('coveo-descending');\n      if (this.isSelected()) {\n        $$(this.element).addClass(this.currentDirection === 'ascending' ? 'coveo-ascending' : 'coveo-descending');\n      }\n    }\n  }\n\n  private updateAccessibilityProperties() {\n    this.sortButton.setAttribute('aria-controls', this.resultListsIds);\n    const directionIsInitial = this.currentDirection === this.initialDirection;\n    this.sortButton.setAttribute('aria-checked', `${this.isSelected() && directionIsInitial}`);\n    if (this.isToggle()) {\n      this.directionButton.setAttribute('aria-controls', this.resultListsIds);\n      this.directionButton.setAttribute('aria-checked', `${this.isSelected() && !directionIsInitial}`);\n    }\n  }\n\n  private get resultListsIds() {\n    const resultLists = this.searchInterface.getComponents('ResultList') as Component[];\n    return resultLists.map(resultList => resultList.element.id).join(' ');\n  }\n\n  private getDirectionalLabel(direction: VALID_DIRECTION) {\n    const localizedCaption = l(this.displayedSortText);\n    return direction === VALID_DIRECTION.DESCENDING\n      ? l('SortResultsByDescending', localizedCaption)\n      : l('SortResultsByAscending', localizedCaption);\n  }\n\n  private getOmnidirectionalLabel(): string {\n    const localizedCaption = l(this.displayedSortText);\n    return l('SortResultsBy', localizedCaption);\n  }\n\n  private updateQueryStateModel() {\n    this.queryStateModel.set(QueryStateModel.attributesEnum.sort, this.currentCriteria.toString());\n  }\n}\n\nInitialization.registerAutoCreateComponent(Sort);\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Sort/Sort.ts","import { chain, contains, first, values } from 'underscore';\nimport { Assert } from '../../misc/Assert';\nimport { QueryBuilder } from '../../ui/Base/QueryBuilder';\n\nexport enum VALID_SORT {\n  RELEVANCY = 'relevancy',\n  DATE = 'date',\n  QRE = 'qre'\n}\n\nexport enum VALID_DIRECTION {\n  ASCENDING = 'ascending',\n  DESCENDING = 'descending'\n}\n\nexport class SortCriterion {\n  private static sortsNeedingDirection = [VALID_SORT.DATE];\n\n  /**\n   * Create a new SortCriteria\n   * @param sort The sort criteria (e.g.: relevancy, date)\n   * @param direction The direction by which to sort (e.g.: ascending, descending)\n   */\n  constructor(public sort: VALID_SORT, public direction: VALID_DIRECTION | '' = '') {\n    if (!SortCriterion.sortIsField(sort)) {\n      Assert.check(\n        this.isValidSort(sort),\n        `${sort} is not a valid sort criteria. Valid values are ${values(VALID_SORT)} or a valid index sortable index field.`\n      );\n    }\n    if (SortCriterion.sortNeedsDirection(sort)) {\n      Assert.check(\n        this.isValidDirection(direction),\n        `${direction} is not a valid sort criteria direction. Valid values are ${values(VALID_DIRECTION)}`\n      );\n    } else {\n      Assert.check(direction == '');\n    }\n  }\n\n  private isValidDirection(direction: string): direction is VALID_DIRECTION {\n    return chain(VALID_DIRECTION)\n      .values()\n      .contains(direction as any)\n      .value();\n  }\n\n  private isValidSort(sort: string): sort is VALID_SORT {\n    return chain(VALID_SORT)\n      .values()\n      .contains(sort as any)\n      .value();\n  }\n\n  private static sortIsField(criteria: string) {\n    return criteria.charAt(0) == '@';\n  }\n\n  private static sortNeedsDirection(sort: string) {\n    return contains(SortCriterion.sortsNeedingDirection, sort) || SortCriterion.sortIsField(sort);\n  }\n}\n\nexport class SortCriteria {\n  private criteria: SortCriterion[] = [];\n\n  constructor(rawCriteriaString: string) {\n    const criteria = rawCriteriaString.split(';');\n    criteria.forEach(criterion => {\n      const split = criterion.match(/\\S+/g);\n      this.criteria.push(new SortCriterion(split[0] as VALID_SORT, split[1] as VALID_DIRECTION));\n    });\n  }\n\n  public get direction() {\n    return first(this.criteria).direction;\n  }\n\n  public get sort() {\n    return first(this.criteria).sort;\n  }\n\n  /**\n   * Return a new SortCriteria from a string\n   * @param criteria The string from which to create the SortCriteria\n   */\n  static parse(criteria: string): SortCriteria {\n    return new SortCriteria(criteria);\n  }\n\n  /**\n   * Put the sort criteria in the passed queryBuilder\n   * @param queryBuilder The queryBuilder in which to put the sort criteria.\n   */\n  public putInQueryBuilder(queryBuilder: QueryBuilder) {\n    Assert.exists(queryBuilder);\n    queryBuilder.sortCriteria = this.toString()\n      .split(';')\n      .join(',');\n  }\n\n  /**\n   * Returns a string representation of the sort criteria (e.g.: 'date ascending').\n   */\n  public toString(): string {\n    return this.criteria\n      .map(criterion => {\n        return criterion.direction ? `${criterion.sort} ${criterion.direction}` : `${criterion.sort}`;\n      })\n      .join(';');\n  }\n\n  /**\n   * Checks if the SortCriteria is equal to another.\n   * @param criteria The SortCriteria to compare with\n   */\n  public equals(criteria: SortCriteria): boolean {\n    return criteria.toString() == this.toString();\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Sort/SortCriteria.ts","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sass/_Sort.scss\n// module id = 577\n// module chunks = 24 41 88"],"sourceRoot":""}