UNPKG

@botonic/react

Version:

Build Chatbots using React

76 lines 4.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MultichannelCarousel = void 0; const tslib_1 = require("tslib"); const jsx_runtime_1 = require("react/jsx-runtime"); const core_1 = require("@botonic/core"); const react_1 = tslib_1.__importStar(require("react")); const contexts_1 = require("../../contexts"); const index_1 = require("../button/index"); const carousel_1 = require("../carousel"); const image_1 = require("../image"); const text_1 = require("../text"); const whatsapp_cta_url_button_1 = require("../whatsapp-cta-url-button"); const multichannel_utils_1 = require("./multichannel-utils"); const markdown_meta_1 = require("./whatsapp/markdown-meta"); const MultichannelCarousel = props => { const requestContext = (0, react_1.useContext)(contexts_1.RequestContext); if ((0, core_1.isDev)(requestContext.session) || (0, core_1.isWebchat)(requestContext.session)) { return (0, jsx_runtime_1.jsx)(carousel_1.Carousel, Object.assign({}, props, { children: props.children })); } const messages = []; const childrenElements = props.children.map(e => e.props.children); childrenElements.forEach((element, i) => { const { imageProps, title, subtitle, buttons } = parseCarouselElement(element); const textMessage = getTextMessage(requestContext.session, title, subtitle); if (imageProps === null || imageProps === void 0 ? void 0 : imageProps.src) { const messageWithImage = (0, jsx_runtime_1.jsx)(image_1.Image, { src: imageProps.src }); messages.push(messageWithImage); } if ((0, core_1.isWhatsapp)(requestContext.session) && buttons.some(button => button.url)) { const messageWithButtonUrl = ((0, jsx_runtime_1.jsx)(whatsapp_cta_url_button_1.WhatsappCTAUrlButton, { body: title, footer: `_${subtitle}_`, displayText: buttons[0].text, url: buttons[0].url }, `carousel-element-${i}-cta-url`)); messages.push(messageWithButtonUrl); } const messageWithButtons = buttons.some(button => button.payload) ? ((0, jsx_runtime_1.jsxs)(text_1.Text, { children: [textMessage, buttons .filter(button => (0, core_1.isWhatsapp)(requestContext.session) && !button.url) .map(button => ((0, jsx_runtime_1.jsx)(index_1.Button, Object.assign({ payload: button.payload, url: button.url }, { children: button.text }), `carousel-element-${i}-button`)))] }, `carousel-element-${i}-text`)) : ([]); messages.push(messageWithButtons); }); return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: messages }); }; exports.MultichannelCarousel = MultichannelCarousel; function getButtons(node) { return [].concat((0, multichannel_utils_1.getFilteredElements)(node, multichannel_utils_1.isMultichannelButton)); } function parseCarouselElement(element) { let imageProps, title, subtitle; const buttonsChildren = []; for (const node of element) { if ((0, multichannel_utils_1.isNodePic)(node)) imageProps = node.props; if ((0, multichannel_utils_1.isNodeTitle)(node)) title = node.props.children; if ((0, multichannel_utils_1.isNodeSubtitle)(node)) subtitle = node.props.children; if ((0, multichannel_utils_1.isMultichannelButton)(node)) buttonsChildren.push(node); if (Array.isArray(node)) buttonsChildren.push(...getButtons(node)); } const buttons = buttonsChildren.map(button => { return { text: button.props.children, payload: button.props.payload, url: button.props.url, }; }); return { imageProps, title, subtitle, buttons }; } function getTextMessage(session, title, subtitle) { const formattedTextMessage = `**${title}**${subtitle ? ` _${subtitle}_` : ''}`; return (0, core_1.isWhatsapp)(session) || (0, core_1.isFacebook)(session) ? (0, markdown_meta_1.convertToMarkdownMeta)(formattedTextMessage) : formattedTextMessage; } //# sourceMappingURL=multichannel-carousel.js.map