UNPKG

type2docfx

Version:

A tool to convert json format output from TypeDoc to universal reference model for DocFx to consume.

93 lines (87 loc) 3.52 kB
/** * @module botbuilder-dialogs */ /** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ import { Dialog } from '../dialog'; import { DialogSet } from '../dialogSet'; import { PromptOptions, PromptValidator, formatPrompt } from './prompt'; import * as Recognizers from '@microsoft/recognizers-text-number'; const numberModel = Recognizers.NumberRecognizer.instance.getNumberModel('en-us'); /** * Prompts a user to enter a number. By default the prompt will return to the calling dialog * a `number` representing the users input. * * **Example usage:** * * ```JavaScript * const { DialogSet, NumberPrompt } = require('botbuilder-dialogs'); * * const dialogs = new DialogSet(); * * dialogs.add('numberPrompt', new NumberPrompt()); * * dialogs.add('numberDemo', [ * function (context) { * return dialogs.prompt(context, 'numberPrompt', `number: enter a number`); * }, * function (context, value) { * context.reply(`Recognized value: ${value}`); * return dialogs.end(context); * } * ]); * ``` */ export class NumberPrompt implements Dialog { /** * Creates a new instance of the prompt. * * **Example usage:** * * ```JavaScript * dialogs.add('agePrompt', new NumberPrompt((context, value) => { * if (value === undefined || value < 1 || value > 110) { * context.reply(`Please enter a valid age between 1 and 110.`); * return Promise.resolve(); * } else { * return dialogs.end(context, value); * } * })); * ``` * @param validator (Optional) validator that will be called each time the user responds to the prompt. */ constructor(private validator?: PromptValidator<number|undefined>) {} public begin(context: BotContext, dialogs: DialogSet, options: PromptOptions): Promise<void> { // Persist options const instance = dialogs.getInstance<PromptOptions>(context); instance.state = options || {}; // Send initial prompt if (instance.state.prompt) { context.reply(formatPrompt(instance.state.prompt, instance.state.speak)) } return Promise.resolve(); } public continue(context: BotContext, dialogs: DialogSet): Promise<void> { // Recognize value const options = dialogs.getInstance<PromptOptions>(context).state; const utterance = context.request && context.request.text ? context.request.text : ''; const results = numberModel.parse(utterance); const value = results.length > 0 && results[0].resolution ? parseFloat(results[0].resolution.value) : undefined; if (this.validator) { // Call validator for further processing return Promise.resolve(this.validator(context, value, dialogs)); } else if (typeof value === 'number') { // Return recognized value return dialogs.end(context, value); } else { if (options.retryPrompt) { // Send retry prompt to user context.reply(formatPrompt(options.retryPrompt, options.retrySpeak)); } else if (options.prompt) { // Send original prompt to user context.reply(formatPrompt(options.prompt, options.speak)); } return Promise.resolve(); } } }