From 80f1e4582c8de2ca177b22e61f73d8da99a0d622 Mon Sep 17 00:00:00 2001 From: Yan Georget Date: Tue, 13 Feb 2018 16:12:42 +0100 Subject: [PATCH] feat: Standardized dialog hooks --- .../src/dialogs/confirmation-dialog.js | 5 +++-- .../src/dialogs/prompt-dialog.js | 12 +++++------- .../botfuel-dialog/src/dialogs/qnas-dialog.js | 15 ++++++--------- .../botfuel-dialog/src/dialogs/text-dialog.js | 18 +++++------------- .../botfuel-dialog/src/dialogs/void-dialog.js | 3 ++- .../botfuel-dialog/src/views/prompt-view.js | 12 ++++++------ packages/botfuel-dialog/src/views/qnas-view.js | 10 +++++----- packages/botfuel-dialog/src/views/text-view.js | 2 +- packages/botfuel-dialog/src/views/view.js | 2 +- .../src/views/greetings-view.en.js | 4 ++-- .../test-qna/src/views/delivery-date-view.js | 7 ++----- 11 files changed, 38 insertions(+), 52 deletions(-) diff --git a/packages/botfuel-dialog/src/dialogs/confirmation-dialog.js b/packages/botfuel-dialog/src/dialogs/confirmation-dialog.js index fd1aadf5..a257cbdb 100644 --- a/packages/botfuel-dialog/src/dialogs/confirmation-dialog.js +++ b/packages/botfuel-dialog/src/dialogs/confirmation-dialog.js @@ -26,8 +26,9 @@ const PromptDialog = require('./prompt-dialog'); */ class ConfirmationDialog extends PromptDialog { /** @inheritDoc */ - async dialogWillComplete(userMessage, { matchedEntities, missingEntities }) { - logger.debug('dialogWillComplete', userMessage, { matchedEntities, missingEntities }); + async dialogWillComplete(userMessage, dialogData) { + logger.debug('dialogWillComplete', userMessage, dialogData); + const { matchedEntities } = dialogData; // Clean entities for this dialog so it can be reused later await this.brain.conversationSet(userMessage.user, this.parameters.namespace, {}); if (matchedEntities.answer.values[0].value) { diff --git a/packages/botfuel-dialog/src/dialogs/prompt-dialog.js b/packages/botfuel-dialog/src/dialogs/prompt-dialog.js index b06e444b..557bdb40 100644 --- a/packages/botfuel-dialog/src/dialogs/prompt-dialog.js +++ b/packages/botfuel-dialog/src/dialogs/prompt-dialog.js @@ -219,17 +219,15 @@ class PromptDialog extends Dialog { ); logger.debug('execute', { missingEntities, matchedEntities }); await this.brain.conversationSet(userId, this.parameters.namespace, matchedEntities); - const dialogData = await this.dialogWillDisplay(userMessage, { + const extraData = await this.dialogWillDisplay(userMessage, { missingEntities, matchedEntities, }); - await this.display(adapter, userMessage, { matchedEntities, missingEntities, dialogData }); + const dialogData = { matchedEntities, missingEntities, extraData }; + await this.display(adapter, userMessage, dialogData); if (Object.keys(missingEntities).length === 0) { - const result = await this.dialogWillComplete(userMessage, { - matchedEntities, - missingEntities, - }); - return result || this.complete(); + const action = await this.dialogWillComplete(userMessage, dialogData); + return action || this.complete(); } return this.wait(); } diff --git a/packages/botfuel-dialog/src/dialogs/qnas-dialog.js b/packages/botfuel-dialog/src/dialogs/qnas-dialog.js index 07a32510..e44f3c4e 100644 --- a/packages/botfuel-dialog/src/dialogs/qnas-dialog.js +++ b/packages/botfuel-dialog/src/dialogs/qnas-dialog.js @@ -36,19 +36,16 @@ class QnasDialog extends Dialog { /** @inheritDoc */ async execute(adapter, userMessage, messageEntities) { logger.debug('execute', userMessage, messageEntities); - const qnas = await this.dialogWillComplete(userMessage, messageEntities); - logger.debug('execute: qnas', qnas); - await this.display(adapter, userMessage, { qnas }); + const extraData = await this.dialogWillDisplay(userMessage, messageEntities); + const qnas = messageEntities[0].value; + const dialogData = { messageEntities, qnas, extraData }; + await this.display(adapter, userMessage, dialogData); if (qnas.length === 1) { - return this.complete(); + const action = await this.dialogWillComplete(userMessage, dialogData); + return action || this.complete(); } return this.wait(); } - - /** @inheritDoc */ - async dialogWillComplete(userMessage, messageEntities) { - return messageEntities[0].value; - } } module.exports = QnasDialog; diff --git a/packages/botfuel-dialog/src/dialogs/text-dialog.js b/packages/botfuel-dialog/src/dialogs/text-dialog.js index 1bb2397e..6ffe58a7 100644 --- a/packages/botfuel-dialog/src/dialogs/text-dialog.js +++ b/packages/botfuel-dialog/src/dialogs/text-dialog.js @@ -22,22 +22,14 @@ const Dialog = require('./dialog'); * @extends Dialog */ class TextDialog extends Dialog { - /** - * @constructor - * @param {Object} config - the bot config - * @param {class} brain - the bot brain - */ - constructor(config, brain) { - super(config, brain, { reentrant: false }); - } - /** @inheritDoc */ async execute(adapter, userMessage, messageEntities) { logger.debug('execute', userMessage, messageEntities); - const data = await this.dialogWillDisplay(userMessage, messageEntities); - await this.display(adapter, userMessage, data); - const result = await this.dialogWillComplete(userMessage, messageEntities); - return result || this.complete(); + const extraData = await this.dialogWillDisplay(userMessage, messageEntities); + const dialogData = { messageEntities, extraData }; + await this.display(adapter, userMessage, dialogData); + const action = await this.dialogWillComplete(userMessage, dialogData); + return action || this.complete(); } } diff --git a/packages/botfuel-dialog/src/dialogs/void-dialog.js b/packages/botfuel-dialog/src/dialogs/void-dialog.js index 3ed2e062..5ea2ef22 100644 --- a/packages/botfuel-dialog/src/dialogs/void-dialog.js +++ b/packages/botfuel-dialog/src/dialogs/void-dialog.js @@ -27,7 +27,8 @@ class VoidDialog extends Dialog { /** @inheritDoc */ async execute(adapter, userMessage, messageEntities) { logger.debug('execute', userMessage, messageEntities); - return this.complete(); + const action = await this.dialogWillComplete(userMessage, { messageEntities }); + return action || this.complete(); } } diff --git a/packages/botfuel-dialog/src/views/prompt-view.js b/packages/botfuel-dialog/src/views/prompt-view.js index 687d7271..40f3c6c6 100644 --- a/packages/botfuel-dialog/src/views/prompt-view.js +++ b/packages/botfuel-dialog/src/views/prompt-view.js @@ -24,9 +24,9 @@ const View = require('./view'); */ class PromptView extends View { /** @inheritDoc */ - render(userMessage, { matchedEntities, missingEntities, dialogData }) { - logger.debug('render', userMessage, { matchedEntities, missingEntities, dialogData }); - return this.renderEntities(matchedEntities, missingEntities, dialogData); + render(userMessage, { matchedEntities, missingEntities, extraData }) { + logger.debug('render', userMessage, { matchedEntities, missingEntities, extraData }); + return this.renderEntities(matchedEntities, missingEntities, extraData); } /** @@ -34,11 +34,11 @@ class PromptView extends View { * @private * @param {Object[]} matchedEntities - the defined entities * @param {String[]} missingEntities - the needed entities - * @param {Object} [dialogData] - additional data from dialogWillDisplay hook + * @param {Object} [extraData] - additional data from dialogWillDisplay hook * @returns {Object[]} the bot messages */ - renderEntities(matchedEntities, missingEntities, dialogData) { - logger.debug('renderEntities', matchedEntities, missingEntities, dialogData); + renderEntities(matchedEntities, missingEntities, extraData) { + logger.debug('renderEntities', matchedEntities, missingEntities, extraData); const messages = []; if (Object.keys(matchedEntities).length !== 0) { messages.push( diff --git a/packages/botfuel-dialog/src/views/qnas-view.js b/packages/botfuel-dialog/src/views/qnas-view.js index 97f324f3..774e380f 100644 --- a/packages/botfuel-dialog/src/views/qnas-view.js +++ b/packages/botfuel-dialog/src/views/qnas-view.js @@ -26,12 +26,12 @@ const View = require('./view'); */ class QnasView extends View { /** @inheritDoc */ - render(userMessage, data) { - logger.debug('render', userMessage, data); - if (data.qnas.length === 1) { - return this.renderAnswer(data.qnas[0].answer); + render(userMessage, { qnas }) { + logger.debug('render', userMessage, qnas); + if (qnas.length === 1) { + return this.renderAnswer(qnas[0].answer); } - return this.renderQuestions(data.qnas); + return this.renderQuestions(qnas); } /** diff --git a/packages/botfuel-dialog/src/views/text-view.js b/packages/botfuel-dialog/src/views/text-view.js index 1e396778..0834cda8 100644 --- a/packages/botfuel-dialog/src/views/text-view.js +++ b/packages/botfuel-dialog/src/views/text-view.js @@ -32,7 +32,7 @@ class TextView extends View { /** * Gets the texts used for building the BotTextMessages. * @param {Object} userMessage - the user message - * @param {Object} data - dialog data used at display time + * @param {Object} data - data used at display time * @returns {String[]} an array of strings */ getTexts(userMessage, data) { diff --git a/packages/botfuel-dialog/src/views/view.js b/packages/botfuel-dialog/src/views/view.js index bfe6e97e..0a4acf3d 100644 --- a/packages/botfuel-dialog/src/views/view.js +++ b/packages/botfuel-dialog/src/views/view.js @@ -36,7 +36,7 @@ class View { /** * Renders a view as an array of bot messages. * @param {Object} userMessage - the user message - * @param {Object} [data] - dialog data used at display time + * @param {Object} [data] - data used at display time * @returns {Object[]} an array of bot messages */ render() { diff --git a/packages/test-complexdialogs/src/views/greetings-view.en.js b/packages/test-complexdialogs/src/views/greetings-view.en.js index 745710c0..42145fae 100644 --- a/packages/test-complexdialogs/src/views/greetings-view.en.js +++ b/packages/test-complexdialogs/src/views/greetings-view.en.js @@ -17,8 +17,8 @@ const { TextView } = require('botfuel-dialog'); class GreetingsView extends TextView { - getTexts(userMessage, data) { - if (data.greeted) { + getTexts(userMessage, { extraData }) { + if (extraData.greeted) { return ['Hello again human!']; } return ['Hello human!']; diff --git a/packages/test-qna/src/views/delivery-date-view.js b/packages/test-qna/src/views/delivery-date-view.js index 6187d07b..78c2be85 100644 --- a/packages/test-qna/src/views/delivery-date-view.js +++ b/packages/test-qna/src/views/delivery-date-view.js @@ -17,14 +17,11 @@ const { TextView, BotTextMessage } = require('botfuel-dialog'); class DeliveryDateView extends TextView { - render(userMessage, data) { - const { date } = data; - const dateStr = date.toISOString().split('T')[0]; - + render(userMessage, { extraData }) { + const dateStr = extraData.date.toISOString().split('T')[0]; const response = new BotTextMessage( `If you purchase today before 10pm, you purchase will be delivered by ${dateStr}.`, ); - return [response]; } }