UNPKG

@botonic/react

Version:

Build Chatbots using React

72 lines 3.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MultichannelButton = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); const core_1 = require("@botonic/core"); const react_1 = require("react"); const contexts_1 = require("../../contexts"); const util_1 = require("../../util"); const index_1 = require("../button/index"); const constants_1 = require("../constants"); const multichannel_context_1 = require("./multichannel-context"); const constants_2 = require("./whatsapp/constants"); const MultichannelButton = props => { const requestContext = (0, react_1.useContext)(contexts_1.RequestContext); const multichannelContext = (0, react_1.useContext)(multichannel_context_1.MultichannelContext); const hasUrl = () => Boolean(props.url); const hasPath = () => Boolean(props.path); const hasPayload = () => Boolean(props.payload); const hasPostback = () => hasPath() || hasPayload(); const hasWebview = () => Boolean(props.webview); const getUrl = () => props.url; const _getWebview = () => props.webview; const increaseCurrentIndex = () => { if (typeof multichannelContext.currentIndex === 'number') { multichannelContext.currentIndex += 1; } else if (typeof multichannelContext.currentIndex === 'string') { const lastChar = multichannelContext.currentIndex.charCodeAt(multichannelContext.currentIndex.length - 1); multichannelContext.currentIndex = String.fromCharCode(lastChar + 1); } }; const formatIndex = index => { const boldIndex = multichannelContext.boldIndex ?? false; return boldIndex ? `*${index}*` : index; }; const getText = () => { let text = props.children; const newline = props.newline || ''; const separator = multichannelContext.indexSeparator || ' '; const index = multichannelContext.currentIndex ? `${formatIndex(multichannelContext.currentIndex + separator)} ` : ''; if (hasPostback()) { text = `${newline}${index}${text}`; } else if (hasUrl()) { text = `${newline}- ${text}`; } return text; }; if ((0, core_1.isWhatsapp)(requestContext.session)) { const asText = props.asText ?? true; if (asText) { if (hasUrl()) { return `${getText()}: ${getUrl()}`; } else if (hasPath() || hasPayload()) { const text = getText(); increaseCurrentIndex(); return `${text}`; } else if (hasWebview()) { return (0, jsx_runtime_1.jsx)(index_1.Button, { ...props, children: getText() }); } } return ((0, jsx_runtime_1.jsx)(index_1.Button, { ...props, children: (0, util_1.truncateText)(props.children, constants_2.WHATSAPP_MAX_BUTTON_CHARS) })); } return (0, jsx_runtime_1.jsx)(index_1.Button, { ...props, children: props.children }); }; exports.MultichannelButton = MultichannelButton; exports.MultichannelButton.displayName = constants_1.COMPONENT_DISPLAY_NAMES.MultichannelButton; //# sourceMappingURL=multichannel-button.js.map