UNPKG

@botonic/plugin-flow-builder

Version:

Use Flow Builder to show your contents

135 lines 6.35 kB
import { __awaiter } from "tslib"; import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; import { INPUT, isDev, isWebchat } from '@botonic/core'; import { Multichannel, RequestContext, WebchatSettings, } from '@botonic/react'; import React from 'react'; import { EMPTY_PAYLOAD } from '../constants'; import { FlowHandoff } from '../content-fields'; import { FlowBotAction } from '../content-fields/flow-bot-action'; import { ContentFilterExecutor } from '../filters'; import { getFlowBuilderPlugin } from '../helpers'; import { inputHasTextData } from '../utils'; import { getContentsByAiAgent } from './ai-agent'; import { getContentsByFallback } from './fallback'; import { getContentsByFirstInteraction } from './first-interaction'; import { getContentsByKnowledgeBase } from './knowledge-bases'; import { getContentsByPayload } from './payload'; export class FlowBuilderAction extends React.Component { static executeConversationStart(request) { return __awaiter(this, void 0, void 0, function* () { const context = getContext(request); const contents = yield getContentsByFirstInteraction(context); const filteredContents = yield filterContents(request, contents); yield FlowBuilderAction.trackAllContents(request, filteredContents); yield FlowBuilderAction.doHandoffAndBotActions(request, filteredContents); return { contents: filteredContents }; }); } static botonicInit(request, contentID) { return __awaiter(this, void 0, void 0, function* () { const contents = yield getContents(request, contentID); const filteredContents = yield filterContents(request, contents); yield FlowBuilderAction.trackAllContents(request, filteredContents); yield FlowBuilderAction.doHandoffAndBotActions(request, filteredContents); return { contents: filteredContents }; }); } static trackAllContents(request, contents) { return __awaiter(this, void 0, void 0, function* () { for (const content of contents) { yield content.trackFlow(request); } }); } static doHandoffAndBotActions(request, contents) { return __awaiter(this, void 0, void 0, function* () { const handoffContent = contents.find(content => content instanceof FlowHandoff); if (handoffContent) { yield handoffContent.doHandoff(request); } const botActionContent = contents.find(content => content instanceof FlowBotAction); if (botActionContent) { botActionContent.doBotAction(request); } }); } render() { const { contents, webchatSettingsParams } = this.props; const request = this.context; const shouldSendWebchatSettings = (isWebchat(request.session) || isDev(request.session)) && !!webchatSettingsParams; return (_jsxs(_Fragment, { children: [shouldSendWebchatSettings && (_jsx(WebchatSettings, Object.assign({}, webchatSettingsParams))), contents.map(content => content.toBotonic(content.id, request))] })); } } FlowBuilderAction.contextType = RequestContext; export class FlowBuilderMultichannelAction extends FlowBuilderAction { render() { const { contents, webchatSettingsParams } = this.props; const request = this.context; const shouldSendWebchatSettings = (isWebchat(request.session) || isDev(request.session)) && !!webchatSettingsParams; return (_jsxs(Multichannel, Object.assign({ text: { buttonsAsText: false } }, { children: [shouldSendWebchatSettings && (_jsx(WebchatSettings, Object.assign({}, webchatSettingsParams))), contents.map(content => content.toBotonic(content.id, request))] }))); } } function getContents(request, contentID) { var _a; return __awaiter(this, void 0, void 0, function* () { const context = getContext(request, contentID); if (request.session.is_first_interaction) { return yield getContentsByFirstInteraction(context); } // TODO: Add needed logic when we can define contents for multi locale queue position message if (request.input.type === INPUT.EVENT_QUEUE_POSITION_CHANGED) { return []; } if ((_a = request.input.payload) === null || _a === void 0 ? void 0 : _a.startsWith(EMPTY_PAYLOAD)) { request.input.payload = undefined; } if (request.input.payload || contentID) { const contentsByPayload = yield getContentsByPayload(context); if (contentsByPayload.length > 0) { return contentsByPayload; } return yield getContentsByFallback(context); } if (inputHasTextData(request.input)) { const aiAgentContents = yield getContentsByAiAgent(context); if (aiAgentContents.length > 0) { return aiAgentContents; } const knowledgeBaseContents = yield getContentsByKnowledgeBase(context); if (knowledgeBaseContents.length > 0) { return knowledgeBaseContents; } } return yield getContentsByFallback(context); }); } function filterContents(request, contents) { return __awaiter(this, void 0, void 0, function* () { const flowBuilderPlugin = getFlowBuilderPlugin(request.plugins); const contentFilters = flowBuilderPlugin.contentFilters; const contentFilterExecutor = new 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 = getFlowBuilderPlugin(request.plugins); const cmsApi = flowBuilderPlugin.cmsApi; const resolvedLocale = flowBuilderPlugin.cmsApi.getResolvedLocale(); return { cmsApi, flowBuilderPlugin, request, resolvedLocale, contentID, }; } //# sourceMappingURL=index.js.map