{"version":3,"sources":["./src/ui/Folding/Folding.ts","./src/ui/Sort/SortCriteria.ts"],"names":[],"mappings":"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","file":"Folding__d2b01b0f173a0c131e66.js","sourcesContent":["import { any, clone, each, map, sortBy, without } from 'underscore';\nimport { IBuildingQueryEventArgs, IPreprocessResultsEventArgs, QueryEvents } from '../../events/QueryEvents';\nimport { exportGlobally } from '../../GlobalExports';\nimport { Assert } from '../../misc/Assert';\nimport { IQuery } from '../../rest/Query';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { IQueryResults } from '../../rest/QueryResults';\nimport { $$ } from '../../utils/Dom';\nimport { Utils } from '../../utils/Utils';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IFieldOption, IQueryExpression } from '../Base/IComponentOptions';\nimport { Initialization } from '../Base/Initialization';\nimport { QueryBuilder } from '../Base/QueryBuilder';\nimport { SortCriteria } from '../Sort/SortCriteria';\n\nexport interface IFoldingOptions {\n  field?: IFieldOption;\n  child?: IFieldOption;\n  parent?: IFieldOption;\n\n  childField?: IFieldOption;\n  parentField?: IFieldOption;\n\n  range?: number;\n  rearrange?: SortCriteria;\n\n  enableExpand?: boolean;\n  expandExpression?: IQueryExpression;\n  maximumExpandedResults?: number;\n\n  /**\n   * Manage folding for each results individually\n   */\n  getResult?: (result: IQueryResult) => IQueryResult;\n  /**\n   * Manage folding of all more results\n   */\n  getMoreResults?: (results: IQueryResult[]) => IQueryResult[];\n}\n\ninterface IResultNode {\n  score: number;\n  parent?: IResultNode;\n  result: IQueryResult;\n  children: IResultNode[];\n}\n\n/**\n * The `Folding` component makes it possible to render hierarchic representations of search results sharing a common\n * [`field`]{@link Folding.options.field}.\n *\n * This component has no visual impact on its own. It simply folds certain search results so that the\n * [`ResultFolding`]{@link ResultFolding} and [`ResultAttachments`]{@link ResultAttachments} components can then nicely\n * render them within result templates (see [Result Templates](https://docs.coveo.com/en/413/)).\n *\n * A typical use case of the `Folding` component is to fold email conversations and message board threads results in a\n * result set in order to display them in a convenient format. Messages belonging to a single conversation typically\n * have a unique conversation ID. By indexing this ID on a field, you can use it to fold search results (see\n * [Folding Results](https://docs.coveo.com/en/428/)).\n *\n * **Note:**\n * > There can only be one `Folding` component per [`Tab`]{@link Tab} component.\n *\n */\nexport class Folding extends Component {\n  static ID = 'Folding';\n\n  static doExport = () => {\n    exportGlobally({\n      Folding: Folding\n    });\n  };\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IFoldingOptions = {\n    /**\n     * Specifies the name of the field on which to do the folding.\n     *\n     * Specifying a value for this option is required for this component to work.\n     *\n     * **Note:**\n     * > In an Elasticsearch index, the corresponding field must be configured as a *Facet* field\n     * > (see [Add or Edit Fields](https://docs.coveo.com/en/1982/)).\n     * > This limitation does not apply to Coveo indexes.\n     *\n     * Default value is `@foldingcollection`.\n     */\n    field: ComponentOptions.buildFieldOption({ defaultValue: '@foldingcollection' }),\n    /**\n     * Specifies the field that determines whether a certain result is a child of another top result.\n     *\n     * **Note:**\n     * > In the index, the values of the corresponding field must:\n     * > - Contain alphanumerical characters only.\n     * > - Contain no more than 60 characters.\n     *\n     * Default value is `@foldingchild`.\n     */\n    child: ComponentOptions.buildFieldOption({ defaultValue: '@foldingchild' }),\n    /**\n     * Specifies the field that determines whether a certain result is a top result containing other child results.\n     *\n     * **Note:**\n     * > In the index, the values of the corresponding field must:\n     * > - Contain alphanumerical characters only.\n     * > - Contain no more than 60 characters.\n     *\n     * Default value is `@foldingparent`.\n     */\n    parent: ComponentOptions.buildFieldOption({ defaultValue: '@foldingparent' }),\n\n    /**\n     * This option is deprecated. Instead, use the {@link Folding.options.parent} option.\n     * @deprecated\n     */\n    childField: ComponentOptions.buildFieldOption({\n      deprecated: 'This option is deprecated. Instead, use the data-parent option.'\n    }),\n    /**\n     * This option is deprecated. Instead, use the {@link Folding.options.child} option.\n     * @deprecated\n     */\n    parentField: ComponentOptions.buildFieldOption({\n      deprecated: 'This option is deprecated. Instead, use the data-child option.'\n    }),\n\n    /**\n     * Specifies the maximum number of child results to fold.\n     *\n     * **Example:**\n     * > For an email thread with a total of 20 messages, using the default value of `2` means that the component loads\n     * > up to a maximum of 2 child messages under the original message, unless the end user expands the entire\n     * > conversation using the **Show More** link (see the [`enableExpand`]{@link Folding.options.enableExpand}\n     * > option).\n     *\n     * Default value is `2`. Minimum value is `0`.\n     */\n    range: ComponentOptions.buildNumberOption({ defaultValue: 2, min: 0 }),\n\n    /**\n     * Specifies the sort criteria to apply to the top result and its child results (e.g., `date ascending`,\n     * `@myfield descending`, etc.). See [sortCriteria](https://docs.coveo.com/en/1461/#RestQueryParameters-sortCriteria).\n     *\n     * This option works from the results returned by the index. This means that if only the three most relevant folded results are returned by the index\n     * and you choose to rearrange the folded results by date, then the three most relevant results will be rearranged by date,\n     * meaning that the first folded result is not necessarily the oldest or newest item.\n     *\n     * However, since clicking on the `Show More` button triggers a new query, you would receive new results based on the sort criteria of this option.\n     *\n     * **Example**\n     * > If you are folding email results by conversation and you specify `date descending` as the `rearrange` value of\n     * > the `Folding` component, the component re-arranges email conversations so that the newest email is always the\n     * > top result. Specifying `date ascending` instead always makes the original email the top result, as it is also\n     * > necessarily the oldest.\n     *\n     * By default, the component displays the results in the order that the index returns them.\n     */\n    rearrange: ComponentOptions.buildCustomOption(value => (Utils.isNonEmptyString(value) ? SortCriteria.parse(value) : null)),\n\n    /**\n     * Specifies whether to add a callback function on the top result, allowing to make an additional query to load all\n     * of its child results (e.g., to load all conversations of a given thread).\n     *\n     * Concretely, the [`ResultFolding`]{@link ResultFolding} component uses this for its **Show More** link.\n     *\n     * See also the [`expandExpression`]{@link Folding.options.expandExpression} and\n     * [`maximumExpandedResults`]{@link Folding.options.maximumExpandedResults} options.\n     *\n     * Default value is `true`.\n     */\n    enableExpand: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n    /**\n     * If the [`enableExpand`]{@link Folding.options.enableExpand} option is `true`, specifies a custom constant\n     * expression to send when querying the expanded results.\n     *\n     * Default value is `undefined`.\n     */\n    expandExpression: ComponentOptions.buildQueryExpressionOption({ depend: 'enableExpand' }),\n\n    /**\n     * If the [`enableExpand`]{@link Folding.options.enableExpand} option is `true`, specifies the maximum number of\n     * results to load when expanding.\n     *\n     * Default value is `100`. Minimum value is `1`.\n     */\n    maximumExpandedResults: ComponentOptions.buildNumberOption({ defaultValue: 100, min: 1, depend: 'enableExpand' }),\n\n    /**\n     * Specifies the function that manages the individual folding of each result.\n     *\n     * Default value is:\n     *\n     * ```javascript\n     * var results = result.childResults || [];\n     * // Add the top result at the top of the list.\n     * results.unshift(result);\n     * // Empty childResults just to clean it.\n     * result.childResults = [];\n     * // Fold those results.\n     * results = Coveo.Folding.foldWithParent(results);\n     * // The first result is the top one.\n     * var topResult = results.shift();\n     * // All other results are childResults.\n     * topResult.childResults = results;\n     * return topResult;\n     * ```\n     *\n     * You can pre-process all the result with this option in the [`init`]{@link init} call of your search interface:\n     *\n     * ```javascript\n     * Coveo.init(document.querySelector('#search'), {\n     *    Folding: {\n     *      getResult: function(result) {\n     *        result = Coveo.Folding.defaultGetResult(result);\n     *        // Your code here\n     *      }\n     *    }\n     * })\n     * ```\n     */\n    getResult: ComponentOptions.buildCustomOption<(result: IQueryResult) => IQueryResult>(() => {\n      return null;\n    }),\n\n    /**\n     * Specifies the function that manages the folding of all results.\n     *\n     * Default value is:\n     *\n     * ```javascript\n     * Coveo.Folding.defaultGetMoreResults = function(results) {\n     *    // The results are flat, just do the folding.\n     *    return Coveo.Folding.foldWithParent(results);\n     * }\n     * ```\n     */\n    getMoreResults: ComponentOptions.buildCustomOption<(results: IQueryResult[]) => IQueryResult[]>(() => {\n      return null;\n    })\n  };\n\n  /**\n   * Creates a new `Folding` component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the `Folding` 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   */\n  constructor(public element: HTMLElement, public options: IFoldingOptions, bindings?: IComponentBindings) {\n    super(element, Folding.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, Folding, options);\n\n    Assert.check(Utils.isCoveoField(<string>this.options.field), this.options.field + ' is not a valid field');\n    Assert.exists(this.options.maximumExpandedResults);\n\n    this.swapParentChildFoldingFields();\n\n    this.bind.onRootElement(QueryEvents.buildingQuery, this.handleBuildingQuery);\n    this.bind.onRootElement(QueryEvents.preprocessResults, this.handlepreprocessResults);\n  }\n\n  // From a list of results, return a list of results and their attachments\n  // We use parentResult to build a tree of result\n  static foldWithParent(queryResults: IQueryResult[]): IQueryResult[] {\n    const rootNode: IResultNode = {\n      score: Number.NEGATIVE_INFINITY,\n      children: [],\n      result: <IQueryResult>{\n        raw: false\n      }\n    };\n\n    each(queryResults, (queryResult: IQueryResult, i: number) => {\n      let resultNode = Folding.findUniqueId(rootNode.children, queryResult.uniqueId);\n      // If he have no parent or is parent is him self, add it to the root\n      if (queryResult.parentResult == null || queryResult.parentResult.uniqueId == queryResult.uniqueId) {\n        // Add it only if he do not exist\n        if (resultNode == null) {\n          resultNode = {\n            result: queryResult,\n            score: i,\n            children: []\n          };\n          rootNode.children.push(resultNode);\n          resultNode.parent = rootNode;\n        }\n      } else {\n        // If the resultNode already exist\n        if (resultNode != null) {\n          resultNode.score = Math.min(i, resultNode.score);\n          // Remove himself from his parent because it will be added in his parent. This allowed to remove duplicate.\n          resultNode.parent.children = without(resultNode.parent.children, resultNode);\n        } else {\n          resultNode = {\n            result: queryResult,\n            score: i,\n            children: []\n          };\n        }\n\n        let parentResult = Folding.findUniqueId(rootNode.children, queryResult.parentResult.uniqueId);\n        // If the parent does not already exist, create it and add it the root\n        if (parentResult == null) {\n          parentResult = {\n            result: queryResult.parentResult,\n            score: Number.POSITIVE_INFINITY,\n            children: []\n          };\n          rootNode.children.push(parentResult);\n          parentResult.parent = rootNode;\n        }\n        // Add the resultNode to parent\n        parentResult.children.push(resultNode);\n        resultNode.parent = parentResult;\n        let parent = parentResult;\n        while (parent != null && resultNode.score < parent.score) {\n          parent.score = resultNode.score;\n          parent = parent.parent;\n        }\n      }\n    });\n    const rootResult = Folding.resultNodeToQueryResult(rootNode);\n    // Remove the root from all results\n    each(rootResult.attachments, attachment => (attachment.parentResult = null));\n    return rootResult.attachments;\n  }\n\n  // 99.9% of the folding case will be alright with those default functions.\n  // Otherwise use the options getResult and getMoreResults\n  public static defaultGetResult(result: IQueryResult) {\n    let results: IQueryResult[] = result.childResults || [];\n    // Add the top result at the top of the list\n    results.unshift(result);\n    // Empty childResults just to make it more clean\n    result.childResults = [];\n    // Fold those results\n    results = Folding.foldWithParent(results);\n    // The first result is the top one\n    const topResult = results.shift();\n    // All other the results are childResults\n    topResult.childResults = results;\n\n    return topResult;\n  }\n\n  public static defaultGetMoreResults(results: IQueryResult[]) {\n    // The result are flat, just do the fold\n    return Folding.foldWithParent(results);\n  }\n\n  // Convert ResultNode to QueryResult\n  private static resultNodeToQueryResult(resultNode: IResultNode): IQueryResult {\n    const result = resultNode.result;\n    result.attachments = map(sortBy<IResultNode>(resultNode.children, 'score'), Folding.resultNodeToQueryResult);\n    result.parentResult = resultNode.parent != null ? resultNode.parent.result : null;\n    return result;\n  }\n\n  private static findUniqueId(resultNodes: IResultNode[], uniqueId: string): IResultNode {\n    for (let i = 0; i < resultNodes.length; i++) {\n      if (resultNodes[i].result.uniqueId == uniqueId) {\n        return resultNodes[i];\n      }\n      const resultNode = Folding.findUniqueId(resultNodes[i].children, uniqueId);\n      if (resultNode != null) {\n        return resultNode;\n      }\n    }\n    return null;\n  }\n\n  private swapParentChildFoldingFields() {\n    // Swap \"old\" childField and parentField and assign them to the \"new\" parent option\n    // This needs to be done because connectors push the default data in *reverse* order compared to what the index expect.\n    if (this.options.childField != null) {\n      this.logger.warn('Detecting usage of deprecated option \"childField\". Assigning it automatically to the \"parent\" option instead.');\n      this.logger.warn('The option definition was changed to support universal folding across all sources.');\n      this.logger.warn('To remove this warning, rename the \"childField\" option (data-child-field) to \"parent\" (data-parent).');\n      this.options.parent = this.options.childField;\n    }\n\n    if (this.options.parentField != null) {\n      this.logger.warn('Detecting usage of deprecated option \"parentField\". Assigning it automatically to the \"child\" option instead.');\n      this.logger.warn('The option definition was changed to support universal folding across all sources.');\n      this.logger.warn('To remove this warning, rename the \"parentField\" option (data-parent-field) to \"child\" (data-child).');\n      this.options.child = this.options.parentField;\n    }\n  }\n\n  private handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    Assert.exists(data);\n\n    if (!this.disabled) {\n      data.queryBuilder.childField = <string>this.options.parent;\n      data.queryBuilder.parentField = <string>this.options.child;\n      data.queryBuilder.filterField = <string>this.options.field;\n      data.queryBuilder.filterFieldRange = this.options.range;\n\n      data.queryBuilder.requiredFields.push(<string>this.options.field);\n      if (this.options.parent != null) {\n        data.queryBuilder.requiredFields.push(<string>this.options.parent);\n      }\n      if (this.options.child != null) {\n        data.queryBuilder.requiredFields.push(<string>this.options.child);\n      }\n    }\n  }\n\n  private handlepreprocessResults(data: IPreprocessResultsEventArgs) {\n    Assert.exists(data);\n    Assert.check(\n      !data.results._folded,\n      'Two or more Folding components are active at the same time for the same Tab. Cannot process the results.'\n    );\n    data.results._folded = true;\n\n    const queryResults = data.results;\n\n    const getResult: (result: IQueryResult) => IQueryResult = this.options.getResult || Folding.defaultGetResult;\n    queryResults.results = map(queryResults.results, getResult);\n\n    if (this.options.rearrange) {\n      queryResults.results.forEach(result => {\n        result.childResults = sortBy(result.childResults, result => Utils.getFieldValue(result, this.options.rearrange.sort));\n        if (this.shouldBeReversed(result.childResults)) {\n          result.childResults = result.childResults.reverse();\n        }\n      });\n    }\n\n    this.addLoadMoreHandler(<IQueryResult[]>queryResults.results, data.query);\n  }\n\n  private shouldBeReversed(childResults: IQueryResult[]) {\n    if (this.options.rearrange.direction == 'ascending') {\n      return false;\n    }\n    const childMissingSortByValue = any(childResults, childResult => {\n      return Utils.isNullOrUndefined(Utils.getFieldValue(childResult, this.options.rearrange.sort));\n    });\n    if (childMissingSortByValue) {\n      return false;\n    }\n    return true;\n  }\n\n  private addLoadMoreHandler(results: IQueryResult[], originalQuery: IQuery) {\n    return map(results, result => {\n      if (this.options.enableExpand && !Utils.isNullOrUndefined(Utils.getFieldValue(result, <string>this.options.field))) {\n        result.moreResults = () => {\n          return this.moreResults(result, originalQuery);\n        };\n      }\n      return result;\n    });\n  }\n\n  private moreResults(result: IQueryResult, originalQuery: IQuery): Promise<IQueryResult[]> {\n    const query = clone(originalQuery);\n    const builder = new QueryBuilder();\n\n    query.numberOfResults = this.options.maximumExpandedResults;\n    const fieldValue = Utils.getFieldValue(result, <string>this.options.field);\n\n    if (Utils.isNonEmptyString(fieldValue)) {\n      builder.advancedExpression.addFieldExpression(<string>this.options.field, '=', [fieldValue]);\n      query.aq = builder.build().aq;\n      query.facets = [];\n      query.categoryFacets = [];\n      query.facetOptions = {};\n    }\n\n    if (Utils.isNonEmptyString(originalQuery.q)) {\n      // We add keywords to get the highlight and we add @uri to get all results\n      // To ensure it plays nicely with query syntax, we ensure that the needed part of the query\n      // are correctly surrounded with the no syntax block\n      if (originalQuery.enableQuerySyntax) {\n        query.q = `( ${originalQuery.q} ) OR @uri`;\n      } else {\n        query.enableQuerySyntax = true;\n        query.q = `( <@- ${originalQuery.q} -@> ) OR @uri`;\n      }\n    }\n\n    if (Utils.isNonEmptyString(this.options.expandExpression)) {\n      query.cq = this.options.expandExpression;\n    }\n\n    if (this.options.child != null) {\n      query.parentField = <string>this.options.child;\n    }\n\n    if (this.options.parent != null) {\n      query.childField = <string>this.options.parent;\n    }\n\n    query.filterField = null;\n    query.filterFieldRange = null;\n    query.firstResult = 0;\n\n    if (this.options.rearrange) {\n      this.options.rearrange.putInQueryBuilder(builder);\n      query.sortCriteria = builder.sortCriteria;\n      query.sortField = builder.sortField;\n    } else {\n      query.sortCriteria = originalQuery.sortCriteria;\n      query.sortField = originalQuery.sortField;\n    }\n\n    return this.queryController\n      .getEndpoint()\n      .search(query)\n      .then((results: IQueryResults) => {\n        this.handlePreprocessMoreResults(results);\n        return results.results;\n      })\n      .catch(e => {\n        this.logger.error(`Invalid query performed while trying to retrieve more results for folding.`, e);\n        return [];\n      });\n  }\n\n  private handlePreprocessMoreResults(queryResults: IQueryResults) {\n    const getResults: (results: IQueryResult[]) => IQueryResult[] = this.options.getMoreResults || Folding.defaultGetMoreResults;\n    queryResults.results = getResults(queryResults.results);\n    $$(this.element).trigger(QueryEvents.preprocessMoreResults, {\n      results: queryResults\n    });\n  }\n}\n\nInitialization.registerAutoCreateComponent(Folding);\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Folding/Folding.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"],"sourceRoot":""}