UNPKG

botbuilder-dialogs-adaptive

Version:

Rule system for the Microsoft BotBuilder dialog system.

61 lines 2.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FirstSelector = void 0; const triggerSelector_1 = require("../triggerSelector"); /** * Select the first true rule implementation of TriggerSelector */ class FirstSelector extends triggerSelector_1.TriggerSelector { /** * Initialize the selector with the set of rules. * * @param conditionals Possible rules to match. * @param evaluate A boolean representing if rules should be evaluated on select. */ initialize(conditionals, evaluate) { this._conditionals = conditionals; this._evaluate = evaluate; } /** * Select the best rule to execute. * * @param actionContext Dialog context for evaluation. * @returns A Promise with a number array. */ select(actionContext) { let selection; let lowestPriority = Number.MAX_SAFE_INTEGER; if (this._evaluate) { for (let i = 0; i < this._conditionals.length; i++) { const conditional = this._conditionals[i]; const expression = conditional.getExpression(); const { value, error } = expression.tryEvaluate(actionContext.state); if (value && !error) { const priority = conditional.currentPriority(actionContext); if (priority >= 0 && priority < lowestPriority) { selection = conditional; lowestPriority = priority; } } } } else { for (let i = 0; i < this._conditionals.length; i++) { const conditional = this._conditionals[i]; const priority = conditional.currentPriority(actionContext); if (priority >= 0 && priority < lowestPriority) { selection = conditional; lowestPriority = priority; } } } const result = []; if (selection) { result.push(selection); } return Promise.resolve(result); } } exports.FirstSelector = FirstSelector; FirstSelector.$kind = 'Microsoft.FirstSelector'; //# sourceMappingURL=firstSelector.js.map