botbuilder-dialogs-adaptive
Version:
Rule system for the Microsoft BotBuilder dialog system.
61 lines • 2.27 kB
JavaScript
;
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