@botonic/react
Version:
Build Chatbots using React
72 lines • 3.29 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.MultichannelButton = 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 util_1 = require("../../util");
const index_1 = require("../button/index");
const multichannel_context_1 = require("./multichannel-context");
const constants_1 = require("./whatsapp/constants");
const MultichannelButton = props => {
var _a;
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 => {
var _a;
const boldIndex = (_a = multichannelContext.boldIndex) !== null && _a !== void 0 ? _a : 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 = (_a = props.asText) !== null && _a !== void 0 ? _a : 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, Object.assign({}, props, { children: getText() }));
}
return ((0, jsx_runtime_1.jsx)(index_1.Button, Object.assign({}, props, { children: (0, util_1.truncateText)(props.children, constants_1.WHATSAPP_MAX_BUTTON_CHARS) })));
}
return (0, jsx_runtime_1.jsx)(index_1.Button, Object.assign({}, props, { children: props.children }));
};
exports.MultichannelButton = MultichannelButton;
//# sourceMappingURL=multichannel-button.js.map
;