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