{"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":""}