UNPKG

@botonic/plugin-flow-builder

Version:

Use Flow Builder to show your contents

133 lines 6.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FlowBuilderMultichannelAction = exports.FlowBuilderAction = void 0; const tslib_1 = require("tslib"); const jsx_runtime_1 = require("react/jsx-runtime"); const core_1 = require("@botonic/core"); const react_1 = require("@botonic/react"); const react_2 = tslib_1.__importDefault(require("react")); const content_fields_1 = require("../content-fields"); const flow_bot_action_1 = require("../content-fields/flow-bot-action"); const filters_1 = require("../filters"); const helpers_1 = require("../helpers"); const tracking_1 = require("../tracking"); const utils_1 = require("../utils"); const ai_agent_1 = require("./ai-agent"); const fallback_1 = require("./fallback"); const first_interaction_1 = require("./first-interaction"); const knowledge_bases_1 = require("./knowledge-bases"); const payload_1 = require("./payload"); class FlowBuilderAction extends react_2.default.Component { static executeConversationStart(request) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const context = getContext(request); const contents = yield (0, first_interaction_1.getContentsByFirstInteraction)(context); const filteredContents = yield filterContents(request, contents); yield (0, tracking_1.trackFlowContent)(request, filteredContents); yield FlowBuilderAction.doHandoffAndBotActions(request, filteredContents); return { contents: filteredContents }; }); } static botonicInit(request, contentID) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const contents = yield getContents(request, contentID); const filteredContents = yield filterContents(request, contents); yield (0, tracking_1.trackFlowContent)(request, filteredContents); yield FlowBuilderAction.doHandoffAndBotActions(request, filteredContents); return { contents: filteredContents }; }); } static doHandoffAndBotActions(request, contents) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const handoffContent = contents.find(content => content instanceof content_fields_1.FlowHandoff); if (handoffContent) { yield handoffContent.doHandoff(request); } const botActionContent = contents.find(content => content instanceof flow_bot_action_1.FlowBotAction); if (botActionContent) { botActionContent.doBotAction(request); } }); } render() { const { contents, webchatSettingsParams } = this.props; const request = this.context; const shouldSendWebchatSettings = ((0, core_1.isWebchat)(request.session) || (0, core_1.isDev)(request.session)) && !!webchatSettingsParams; return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [shouldSendWebchatSettings && ((0, jsx_runtime_1.jsx)(react_1.WebchatSettings, Object.assign({}, webchatSettingsParams))), contents.map(content => content.toBotonic(content.id, request))] })); } } exports.FlowBuilderAction = FlowBuilderAction; FlowBuilderAction.contextType = react_1.RequestContext; class FlowBuilderMultichannelAction extends FlowBuilderAction { render() { const { contents, webchatSettingsParams } = this.props; const request = this.context; const shouldSendWebchatSettings = ((0, core_1.isWebchat)(request.session) || (0, core_1.isDev)(request.session)) && !!webchatSettingsParams; return ((0, jsx_runtime_1.jsxs)(react_1.Multichannel, Object.assign({ text: { buttonsAsText: false } }, { children: [shouldSendWebchatSettings && ((0, jsx_runtime_1.jsx)(react_1.WebchatSettings, Object.assign({}, webchatSettingsParams))), contents.map(content => content.toBotonic(content.id, request))] }))); } } exports.FlowBuilderMultichannelAction = FlowBuilderMultichannelAction; function getContents(request, contentID) { var _a; return tslib_1.__awaiter(this, void 0, void 0, function* () { const context = getContext(request, contentID); if (request.session.is_first_interaction) { return yield (0, first_interaction_1.getContentsByFirstInteraction)(context); } // TODO: Add needed logic when we can define contents for multi locale queue position message if (request.input.type === core_1.INPUT.EVENT_QUEUE_POSITION_CHANGED) { return []; } if ((_a = request.input.payload) === null || _a === void 0 ? void 0 : _a.startsWith('do-nothing')) { request.input.payload = undefined; } if (request.input.payload || contentID) { const contentsByPayload = yield (0, payload_1.getContentsByPayload)(context); if (contentsByPayload.length > 0) { return contentsByPayload; } return yield (0, fallback_1.getContentsByFallback)(context); } if ((0, utils_1.inputHasTextData)(request.input)) { const aiAgentContents = yield (0, ai_agent_1.getContentsByAiAgent)(context); if (aiAgentContents.length > 0) { return aiAgentContents; } const knowledgeBaseContents = yield (0, knowledge_bases_1.getContentsByKnowledgeBase)(context); if (knowledgeBaseContents.length > 0) { return knowledgeBaseContents; } } return yield (0, fallback_1.getContentsByFallback)(context); }); } function filterContents(request, contents) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const flowBuilderPlugin = (0, helpers_1.getFlowBuilderPlugin)(request.plugins); const contentFilters = flowBuilderPlugin.contentFilters; const contentFilterExecutor = new filters_1.ContentFilterExecutor({ filters: contentFilters, }); const filteredContents = []; for (const content of contents) { const filteredContent = yield contentFilterExecutor.filter(request, content); filteredContents.push(filteredContent); } return filteredContents; }); } function getContext(request, contentID) { const flowBuilderPlugin = (0, helpers_1.getFlowBuilderPlugin)(request.plugins); const cmsApi = flowBuilderPlugin.cmsApi; const resolvedLocale = flowBuilderPlugin.cmsApi.getResolvedLocale(); return { cmsApi, flowBuilderPlugin, request, resolvedLocale, contentID, }; } //# sourceMappingURL=index.js.map