{"version":3,"sources":["webpack://CoveoForSitecore/./src/resolvers/nodes/QueryRankingNodeExpressionResolver.ts","webpack://CoveoForSitecore/./src/ui/scopes/CoveoForSitecoreRankingExpression.ts"],"names":[],"mappings":"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","file":"CoveoForSitecoreRankingExpression.js","sourcesContent":["import { IQueryNode } from './queryNodes/QueryNodeTypes';\r\nimport { IQueryNodeParser } from './queryNodes/QueryNodeParser';\r\nimport { QueryNodeTreeParserFactory } from './queryNodes/QueryNodeTreeParserFactory';\r\nimport { ICoveoFieldHandler } from '../../handlers/CoveoFieldsHandler';\r\nimport { Context } from '../../base/Context';\r\n\r\nimport { QueryBuilder, IRankingFunction, Logger } from 'coveo-search-ui';\r\n\r\nexport interface IQueryRankingNode {\r\n rankingExpressions: IRankingExpressionNode[];\r\n rankingFunctions: IRankingFunction[];\r\n textualRankingExpressions: ITextualRankingExpression[];\r\n}\r\n\r\nexport interface IRankingExpressionNode {\r\n expression: IQueryNode;\r\n modifier: number;\r\n}\r\n\r\nexport interface ITextualRankingExpression {\r\n expression: string;\r\n}\r\n\r\n/*\r\n Matches \"@[x]\"\" and return x as matching group.\r\n Examples:\r\n * @[blublu] gives \"blublu\".\r\n * @[[blublu]] gives \"[blublu]\"\r\n * @[blublu]] gives \"blublu]\"\r\n*/\r\nconst rankingExpressionFieldsRegex: RegExp = /@\\[(.*?\\]*)\\]/g;\r\n\r\nexport class QueryRankingNodeExpressionResolver implements IQueryRankingNodeExpressionResolver {\r\n constructor(private parser: IQueryNodeParser, private fieldsHandler: ICoveoFieldHandler) {}\r\n\r\n parseQueryRankingNode(queryRankingNode: IQueryRankingNode): QueryBuilder {\r\n const queryBuilder = new QueryBuilder();\r\n queryRankingNode.rankingExpressions.map((ranking) => {\r\n const parsedExpression = this.parser.parse(ranking.expression);\r\n if (parsedExpression !== '') {\r\n queryBuilder.advancedExpression.add(\r\n `$qre(expression:'${parsedExpression}', modifier:${ranking.modifier})`\r\n );\r\n }\r\n });\r\n queryRankingNode.rankingFunctions.forEach((rankingFunction) => {\r\n rankingFunction.expression = this.translateRankingExpressionFieldNames(rankingFunction.expression);\r\n queryBuilder.rankingFunctions.push(rankingFunction);\r\n });\r\n queryRankingNode.textualRankingExpressions\r\n .filter((rankingExpression) => rankingExpression.expression !== '')\r\n .forEach((rankingExpression) => {\r\n queryBuilder.advancedExpression.add(rankingExpression.expression);\r\n });\r\n return queryBuilder;\r\n }\r\n\r\n private translateRankingExpressionFieldNames(expression: string): string {\r\n expression.replace(rankingExpressionFieldsRegex, (matchingExpression, matchingGroup) => {\r\n return this.fieldsHandler.toCoveo(matchingGroup);\r\n });\r\n return expression;\r\n }\r\n}\r\n\r\nexport interface IQueryRankingNodeExpressionResolver {\r\n parseQueryRankingNode(queryRankingNode: IQueryRankingNode): QueryBuilder;\r\n}\r\n\r\nexport class QueryRankingNodeExpressionResolverFactory {\r\n createQueryFilterNodeExpression(logger: Logger): IQueryRankingNodeExpressionResolver {\r\n const parserFactory = new QueryNodeTreeParserFactory();\r\n const parser = parserFactory.createParser(logger);\r\n return new QueryRankingNodeExpressionResolver(parser, Context.fields);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ComponentOptions,\r\n IComponentBindings,\r\n Initialization,\r\n QueryEvents,\r\n QueryBuilder,\r\n IBuildingQueryEventArgs,\r\n} from 'coveo-search-ui';\r\n\r\nimport { isTabCurrentlySelected } from '../../utils/TabUtils';\r\nimport {\r\n IQueryRankingNode,\r\n IQueryRankingNodeExpressionResolver,\r\n QueryRankingNodeExpressionResolverFactory,\r\n} from '../../resolvers/nodes/QueryRankingNodeExpressionResolver';\r\n\r\nexport interface ICoveoForSitecoreRankingExpressionOptions {\r\n scScopeToTab: string;\r\n scRankingExpression: string;\r\n scRankingScopeNode: IQueryRankingNode;\r\n}\r\n\r\nexport class CoveoForSitecoreRankingExpression extends Component {\r\n private nodeResolver: IQueryRankingNodeExpressionResolver;\r\n\r\n static ID = 'ForSitecoreRankingExpression';\r\n\r\n static options: ICoveoForSitecoreRankingExpressionOptions = {\r\n scScopeToTab: ComponentOptions.buildStringOption(),\r\n scRankingExpression: ComponentOptions.buildStringOption(),\r\n scRankingScopeNode: ComponentOptions.buildCustomOption<IQueryRankingNode>((value) => {\r\n return JSON.parse(value);\r\n }),\r\n };\r\n\r\n constructor(\r\n public element: HTMLElement,\r\n public options: ICoveoForSitecoreRankingExpressionOptions,\r\n public bindings: IComponentBindings\r\n ) {\r\n super(element, CoveoForSitecoreRankingExpression.ID, bindings);\r\n\r\n this.options = ComponentOptions.initComponentOptions(element, CoveoForSitecoreRankingExpression, options);\r\n this.bind.onRootElement(QueryEvents.buildingQuery, this.onBuildingQuery);\r\n }\r\n\r\n private onBuildingQuery(buildingQuery: IBuildingQueryEventArgs): void {\r\n if (this.shouldAddRankingExpression()) {\r\n if (!!this.options.scRankingExpression) {\r\n buildingQuery.queryBuilder.advancedExpression.add(this.options.scRankingExpression.trim());\r\n }\r\n if (!!this.options.scRankingScopeNode) {\r\n const resolver = this.getNodeResolver();\r\n const builder = resolver.parseQueryRankingNode(this.options.scRankingScopeNode);\r\n builder.rankingFunctions.forEach((rankingFunction) =>\r\n buildingQuery.queryBuilder.rankingFunctions.push(rankingFunction)\r\n );\r\n this.copyQueryBuilderAttributes(builder, buildingQuery.queryBuilder);\r\n }\r\n }\r\n }\r\n\r\n private copyQueryBuilderAttributes(from: QueryBuilder, to: QueryBuilder): void {\r\n from.rankingFunctions.forEach((rankingFunction) => to.rankingFunctions.push(rankingFunction));\r\n to.advancedExpression.fromExpressionBuilder(from.advancedExpression);\r\n }\r\n\r\n private getNodeResolver(): IQueryRankingNodeExpressionResolver {\r\n return (\r\n this.nodeResolver ||\r\n (this.nodeResolver = new QueryRankingNodeExpressionResolverFactory().createQueryFilterNodeExpression(\r\n this.logger\r\n ))\r\n );\r\n }\r\n\r\n private shouldAddRankingExpression(): boolean {\r\n return isTabCurrentlySelected(this.options.scScopeToTab, this.searchInterface);\r\n }\r\n}\r\n\r\nInitialization.registerAutoCreateComponent(CoveoForSitecoreRankingExpression);\r\n"],"sourceRoot":""}