@botonic/react 0.24.4-alpha.0 → 0.24.5-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/multichannel/multichannel-button.js +2 -7
- package/lib/cjs/components/multichannel/multichannel-button.js.map +1 -1
- package/lib/cjs/components/whatsapp-button-list.d.ts +3 -0
- package/lib/cjs/components/whatsapp-button-list.js +26 -2
- package/lib/cjs/components/whatsapp-button-list.js.map +1 -1
- package/lib/cjs/util/index.d.ts +1 -0
- package/lib/cjs/util/index.js +1 -0
- package/lib/cjs/util/index.js.map +1 -1
- package/lib/cjs/util/strings.d.ts +1 -0
- package/lib/cjs/util/strings.js +11 -0
- package/lib/cjs/util/strings.js.map +1 -0
- package/lib/esm/components/multichannel/multichannel-button.js +1 -6
- package/lib/esm/components/multichannel/multichannel-button.js.map +1 -1
- package/lib/esm/components/whatsapp-button-list.d.ts +3 -0
- package/lib/esm/components/whatsapp-button-list.js +25 -1
- package/lib/esm/components/whatsapp-button-list.js.map +1 -1
- package/lib/esm/util/index.d.ts +1 -0
- package/lib/esm/util/index.js +1 -0
- package/lib/esm/util/index.js.map +1 -1
- package/lib/esm/util/strings.d.ts +1 -0
- package/lib/esm/util/strings.js +7 -0
- package/lib/esm/util/strings.js.map +1 -0
- package/package.json +1 -1
- package/src/components/multichannel/multichannel-button.jsx +1 -7
- package/src/components/whatsapp-button-list.tsx +36 -1
- package/src/util/index.ts +1 -0
- package/src/util/strings.ts +6 -0
|
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
6
|
const react_1 = tslib_1.__importStar(require("react"));
|
|
7
7
|
const contexts_1 = require("../../contexts");
|
|
8
|
+
const strings_1 = require("../../util/strings");
|
|
8
9
|
const button_1 = require("../button");
|
|
9
10
|
const multichannel_context_1 = require("./multichannel-context");
|
|
10
11
|
const multichannel_utils_1 = require("./multichannel-utils");
|
|
@@ -48,12 +49,6 @@ const MultichannelButton = props => {
|
|
|
48
49
|
}
|
|
49
50
|
return text;
|
|
50
51
|
};
|
|
51
|
-
const truncateText = (text, maxLength, ellipsis = '...') => {
|
|
52
|
-
if (text.length > maxLength) {
|
|
53
|
-
return text.substring(0, maxLength - ellipsis.length) + ellipsis;
|
|
54
|
-
}
|
|
55
|
-
return text;
|
|
56
|
-
};
|
|
57
52
|
if ((0, multichannel_utils_1.isWhatsapp)(requestContext)) {
|
|
58
53
|
const asText = (_a = props.asText) !== null && _a !== void 0 ? _a : true;
|
|
59
54
|
if (asText) {
|
|
@@ -68,7 +63,7 @@ const MultichannelButton = props => {
|
|
|
68
63
|
else if (hasWebview())
|
|
69
64
|
return (0, jsx_runtime_1.jsx)(button_1.Button, Object.assign({}, props, { children: getText() }));
|
|
70
65
|
}
|
|
71
|
-
return ((0, jsx_runtime_1.jsx)(button_1.Button, Object.assign({}, props, { children: truncateText(props.children, multichannel_utils_1.WHATSAPP_MAX_BUTTON_CHARS) })));
|
|
66
|
+
return ((0, jsx_runtime_1.jsx)(button_1.Button, Object.assign({}, props, { children: (0, strings_1.truncateText)(props.children, multichannel_utils_1.WHATSAPP_MAX_BUTTON_CHARS) })));
|
|
72
67
|
}
|
|
73
68
|
return (0, jsx_runtime_1.jsx)(button_1.Button, Object.assign({}, props, { children: props.children }));
|
|
74
69
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multichannel-button.js","sourceRoot":"src/","sources":["components/multichannel/multichannel-button.jsx"],"names":[],"mappings":";;;;;AAAA,uDAAyC;AAEzC,6CAA+C;AAC/C,sCAAkC;AAClC,iEAA4D;AAC5D,6DAA4E;AAErE,MAAM,kBAAkB,GAAG,KAAK,CAAC,EAAE;;IACxC,MAAM,cAAc,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAA;IACjD,MAAM,mBAAmB,GAAG,IAAA,kBAAU,EAAC,0CAAmB,CAAC,CAAA;IAE3D,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEvC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAEzC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAE/C,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,UAAU,EAAE,CAAA;IAEnD,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAE/C,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA;IAC9B,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAA;IAEtC,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAChC,IAAI,OAAO,mBAAmB,CAAC,YAAY,KAAK,QAAQ,EAAE;YACxD,mBAAmB,CAAC,YAAY,IAAI,CAAC,CAAA;SACtC;aAAM,IAAI,OAAO,mBAAmB,CAAC,YAAY,KAAK,QAAQ,EAAE;YAC/D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,UAAU,CAC1D,mBAAmB,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAC5C,CAAA;YACD,mBAAmB,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;SACrE;IACH,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,EAAE;;QAC1B,MAAM,SAAS,GAAG,MAAA,mBAAmB,CAAC,SAAS,mCAAI,KAAK,CAAA;QACxD,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA;IACzC,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAA;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAA;QACnC,MAAM,SAAS,GAAG,mBAAmB,CAAC,cAAc,IAAI,GAAG,CAAA;QAC3D,MAAM,KAAK,GAAG,mBAAmB,CAAC,YAAY;YAC5C,CAAC,CAAC,GAAG,WAAW,CAAC,mBAAmB,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG;YACjE,CAAC,CAAC,EAAE,CAAA;QACN,IAAI,WAAW,EAAE,EAAE;YACjB,IAAI,GAAG,OAAO,GAAG,GAAG,KAAK,GAAG,IAAI,EAAE,CAAA;SACnC;aAAM,IAAI,MAAM,EAAE,EAAE;YACnB,IAAI,GAAG,OAAO,GAAG,KAAK,IAAI,EAAE,CAAA;SAC7B;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,
|
|
1
|
+
{"version":3,"file":"multichannel-button.js","sourceRoot":"src/","sources":["components/multichannel/multichannel-button.jsx"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export declare const WHATSAPP_MAX_BUTTON_LIST_CHARS = 24;
|
|
2
|
+
export declare const WHATSAPP_MAX_BUTTON_LIST_DESCRIPTION_CHARS = 72;
|
|
3
|
+
export declare const WHATSAPP_MAX_BUTTON_LIST_ID_CHARS = 200;
|
|
1
4
|
export interface WhatsappButtonListSectionProps {
|
|
2
5
|
title?: string;
|
|
3
6
|
rows: WhatsappButtonListRowProps[];
|
|
@@ -1,15 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WhatsappButtonList = void 0;
|
|
3
|
+
exports.WhatsappButtonList = exports.WHATSAPP_MAX_BUTTON_LIST_ID_CHARS = exports.WHATSAPP_MAX_BUTTON_LIST_DESCRIPTION_CHARS = exports.WHATSAPP_MAX_BUTTON_LIST_CHARS = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const core_1 = require("@botonic/core");
|
|
6
|
+
const util_1 = require("../util");
|
|
6
7
|
const react_1 = require("../util/react");
|
|
7
8
|
const message_1 = require("./message");
|
|
9
|
+
const multichannel_utils_1 = require("./multichannel/multichannel-utils");
|
|
10
|
+
// TODO: Add validation in component
|
|
11
|
+
exports.WHATSAPP_MAX_BUTTON_LIST_CHARS = 24;
|
|
12
|
+
exports.WHATSAPP_MAX_BUTTON_LIST_DESCRIPTION_CHARS = 72;
|
|
13
|
+
exports.WHATSAPP_MAX_BUTTON_LIST_ID_CHARS = 200;
|
|
8
14
|
const serialize = _whatsappButtonListProps => {
|
|
9
15
|
// TODO: Implement to have data persistance in localStorage, not needed for this WhatsApp development
|
|
10
16
|
return {};
|
|
11
17
|
};
|
|
12
18
|
const WhatsappButtonList = (props) => {
|
|
19
|
+
const trucateSectionsContents = (sections) => {
|
|
20
|
+
const trucateRowContents = (row) => {
|
|
21
|
+
const title = (0, util_1.truncateText)(row.title, exports.WHATSAPP_MAX_BUTTON_LIST_CHARS);
|
|
22
|
+
const description = row.description
|
|
23
|
+
? (0, util_1.truncateText)(row.description, exports.WHATSAPP_MAX_BUTTON_LIST_DESCRIPTION_CHARS)
|
|
24
|
+
: undefined;
|
|
25
|
+
if (row.id.length > exports.WHATSAPP_MAX_BUTTON_LIST_ID_CHARS) {
|
|
26
|
+
console.error(`Button id "${row.id}" exceeds the maximum length of ${exports.WHATSAPP_MAX_BUTTON_LIST_ID_CHARS} characters`);
|
|
27
|
+
}
|
|
28
|
+
return Object.assign(Object.assign({}, row), { title, description });
|
|
29
|
+
};
|
|
30
|
+
return sections.map(section => ({
|
|
31
|
+
title: section.title
|
|
32
|
+
? (0, util_1.truncateText)(section.title, exports.WHATSAPP_MAX_BUTTON_LIST_CHARS)
|
|
33
|
+
: undefined,
|
|
34
|
+
rows: section.rows.map(trucateRowContents),
|
|
35
|
+
}));
|
|
36
|
+
};
|
|
13
37
|
const renderBrowser = () => {
|
|
14
38
|
// Return a dummy message for browser
|
|
15
39
|
const message = `${JSON.stringify(props)}`;
|
|
@@ -18,7 +42,7 @@ const WhatsappButtonList = (props) => {
|
|
|
18
42
|
const renderNode = () => {
|
|
19
43
|
return (
|
|
20
44
|
// @ts-ignore Property 'message' does not exist on type 'JSX.IntrinsicElements'.
|
|
21
|
-
(0, jsx_runtime_1.jsx)("message", Object.assign({}, props, { sections: JSON.stringify(props.sections), type: core_1.INPUT.WHATSAPP_BUTTON_LIST })));
|
|
45
|
+
(0, jsx_runtime_1.jsx)("message", Object.assign({}, props, { button: (0, util_1.truncateText)(props.button, multichannel_utils_1.WHATSAPP_MAX_BUTTON_CHARS), sections: JSON.stringify(trucateSectionsContents(props.sections)), type: core_1.INPUT.WHATSAPP_BUTTON_LIST })));
|
|
22
46
|
};
|
|
23
47
|
return (0, react_1.renderComponent)({ renderBrowser, renderNode });
|
|
24
48
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whatsapp-button-list.js","sourceRoot":"src/","sources":["components/whatsapp-button-list.tsx"],"names":[],"mappings":";;;;AAAA,wCAAqC;AAGrC,yCAA+C;AAC/C,uCAAmC;
|
|
1
|
+
{"version":3,"file":"whatsapp-button-list.js","sourceRoot":"src/","sources":["components/whatsapp-button-list.tsx"],"names":[],"mappings":";;;;AAAA,wCAAqC;AAGrC,kCAAsC;AACtC,yCAA+C;AAC/C,uCAAmC;AACnC,0EAA6E;AAE7E,oCAAoC;AAEvB,QAAA,8BAA8B,GAAG,EAAE,CAAA;AACnC,QAAA,0CAA0C,GAAG,EAAE,CAAA;AAC/C,QAAA,iCAAiC,GAAG,GAAG,CAAA;AAoBpD,MAAM,SAAS,GAAG,wBAAwB,CAAC,EAAE;IAC3C,qGAAqG;IACrG,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAEM,MAAM,kBAAkB,GAAG,CAAC,KAA8B,EAAE,EAAE;IACnE,MAAM,uBAAuB,GAAG,CAC9B,QAA0C,EACR,EAAE;QACpC,MAAM,kBAAkB,GAAG,CACzB,GAA+B,EACH,EAAE;YAC9B,MAAM,KAAK,GAAG,IAAA,mBAAY,EAAC,GAAG,CAAC,KAAK,EAAE,sCAA8B,CAAC,CAAA;YACrE,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW;gBACjC,CAAC,CAAC,IAAA,mBAAY,EACV,GAAG,CAAC,WAAW,EACf,kDAA0C,CAC3C;gBACH,CAAC,CAAC,SAAS,CAAA;YACb,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,yCAAiC,EAAE;gBACrD,OAAO,CAAC,KAAK,CACX,cAAc,GAAG,CAAC,EAAE,mCAAmC,yCAAiC,aAAa,CACtG,CAAA;aACF;YACD,uCAAY,GAAG,KAAE,KAAK,EAAE,WAAW,IAAE;QACvC,CAAC,CAAA;QAED,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;gBAClB,CAAC,CAAC,IAAA,mBAAY,EAAC,OAAO,CAAC,KAAK,EAAE,sCAA8B,CAAC;gBAC7D,CAAC,CAAC,SAAS;YACb,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC;SAC3C,CAAC,CAAC,CAAA;IACL,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,qCAAqC;QACrC,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;QAC1C,OAAO,CACL,uBAAC,iBAAO,kBACN,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IACpB,KAAK,IACT,IAAI,EAAE,YAAK,CAAC,oBAAoB,gBAE/B,OAAO,IACA,CACX,CAAA;IACH,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,OAAO;QACL,gFAAgF;QAChF,oDACM,KAAK,IACT,MAAM,EAAE,IAAA,mBAAY,EAAC,KAAK,CAAC,MAAM,EAAE,8CAAyB,CAAC,EAC7D,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EACjE,IAAI,EAAE,YAAK,CAAC,oBAAoB,IAChC,CACH,CAAA;IACH,CAAC,CAAA;IAED,OAAO,IAAA,uBAAe,EAAC,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAA;AACvD,CAAC,CAAA;AAzDY,QAAA,kBAAkB,sBAyD9B"}
|
package/lib/cjs/util/index.d.ts
CHANGED
package/lib/cjs/util/index.js
CHANGED
|
@@ -8,5 +8,6 @@ tslib_1.__exportStar(require("./logs"), exports);
|
|
|
8
8
|
tslib_1.__exportStar(require("./objects"), exports);
|
|
9
9
|
tslib_1.__exportStar(require("./react"), exports);
|
|
10
10
|
tslib_1.__exportStar(require("./regexs"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./strings"), exports);
|
|
11
12
|
tslib_1.__exportStar(require("./webchat"), exports);
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["util/index.ts"],"names":[],"mappings":";;;AAAA,gDAAqB;AACrB,wDAA6B;AAC7B,2DAAgC;AAChC,iDAAsB;AACtB,oDAAyB;AACzB,kDAAuB;AACvB,mDAAwB;AACxB,oDAAyB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["util/index.ts"],"names":[],"mappings":";;;AAAA,gDAAqB;AACrB,wDAA6B;AAC7B,2DAAgC;AAChC,iDAAsB;AACtB,oDAAyB;AACzB,kDAAuB;AACvB,mDAAwB;AACxB,oDAAyB;AACzB,oDAAyB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const truncateText: (text: any, maxLength: any, ellipsis?: string) => any;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.truncateText = void 0;
|
|
4
|
+
const truncateText = (text, maxLength, ellipsis = '...') => {
|
|
5
|
+
if (text.length > maxLength) {
|
|
6
|
+
return text.substring(0, maxLength - ellipsis.length) + ellipsis;
|
|
7
|
+
}
|
|
8
|
+
return text;
|
|
9
|
+
};
|
|
10
|
+
exports.truncateText = truncateText;
|
|
11
|
+
//# sourceMappingURL=strings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.js","sourceRoot":"src/","sources":["util/strings.ts"],"names":[],"mappings":";;;AAAO,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE;IAChE,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAA;KACjE;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AALY,QAAA,YAAY,gBAKxB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import React, { useContext } from 'react';
|
|
3
3
|
import { RequestContext } from '../../contexts';
|
|
4
|
+
import { truncateText } from '../../util/strings';
|
|
4
5
|
import { Button } from '../button';
|
|
5
6
|
import { MultichannelContext } from './multichannel-context';
|
|
6
7
|
import { isWhatsapp, WHATSAPP_MAX_BUTTON_CHARS } from './multichannel-utils';
|
|
@@ -44,12 +45,6 @@ export const MultichannelButton = props => {
|
|
|
44
45
|
}
|
|
45
46
|
return text;
|
|
46
47
|
};
|
|
47
|
-
const truncateText = (text, maxLength, ellipsis = '...') => {
|
|
48
|
-
if (text.length > maxLength) {
|
|
49
|
-
return text.substring(0, maxLength - ellipsis.length) + ellipsis;
|
|
50
|
-
}
|
|
51
|
-
return text;
|
|
52
|
-
};
|
|
53
48
|
if (isWhatsapp(requestContext)) {
|
|
54
49
|
const asText = (_a = props.asText) !== null && _a !== void 0 ? _a : true;
|
|
55
50
|
if (asText) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multichannel-button.js","sourceRoot":"src/","sources":["components/multichannel/multichannel-button.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAE5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,EAAE;;IACxC,MAAM,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IACjD,MAAM,mBAAmB,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAA;IAE3D,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEvC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAEzC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAE/C,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,UAAU,EAAE,CAAA;IAEnD,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAE/C,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA;IAC9B,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAA;IAEtC,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAChC,IAAI,OAAO,mBAAmB,CAAC,YAAY,KAAK,QAAQ,EAAE;YACxD,mBAAmB,CAAC,YAAY,IAAI,CAAC,CAAA;SACtC;aAAM,IAAI,OAAO,mBAAmB,CAAC,YAAY,KAAK,QAAQ,EAAE;YAC/D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,UAAU,CAC1D,mBAAmB,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAC5C,CAAA;YACD,mBAAmB,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;SACrE;IACH,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,EAAE;;QAC1B,MAAM,SAAS,GAAG,MAAA,mBAAmB,CAAC,SAAS,mCAAI,KAAK,CAAA;QACxD,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA;IACzC,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAA;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAA;QACnC,MAAM,SAAS,GAAG,mBAAmB,CAAC,cAAc,IAAI,GAAG,CAAA;QAC3D,MAAM,KAAK,GAAG,mBAAmB,CAAC,YAAY;YAC5C,CAAC,CAAC,GAAG,WAAW,CAAC,mBAAmB,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG;YACjE,CAAC,CAAC,EAAE,CAAA;QACN,IAAI,WAAW,EAAE,EAAE;YACjB,IAAI,GAAG,OAAO,GAAG,GAAG,KAAK,GAAG,IAAI,EAAE,CAAA;SACnC;aAAM,IAAI,MAAM,EAAE,EAAE;YACnB,IAAI,GAAG,OAAO,GAAG,KAAK,IAAI,EAAE,CAAA;SAC7B;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,
|
|
1
|
+
{"version":3,"file":"multichannel-button.js","sourceRoot":"src/","sources":["components/multichannel/multichannel-button.jsx"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export declare const WHATSAPP_MAX_BUTTON_LIST_CHARS = 24;
|
|
2
|
+
export declare const WHATSAPP_MAX_BUTTON_LIST_DESCRIPTION_CHARS = 72;
|
|
3
|
+
export declare const WHATSAPP_MAX_BUTTON_LIST_ID_CHARS = 200;
|
|
1
4
|
export interface WhatsappButtonListSectionProps {
|
|
2
5
|
title?: string;
|
|
3
6
|
rows: WhatsappButtonListRowProps[];
|
|
@@ -1,12 +1,36 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { INPUT } from '@botonic/core';
|
|
3
|
+
import { truncateText } from '../util';
|
|
3
4
|
import { renderComponent } from '../util/react';
|
|
4
5
|
import { Message } from './message';
|
|
6
|
+
import { WHATSAPP_MAX_BUTTON_CHARS } from './multichannel/multichannel-utils';
|
|
7
|
+
// TODO: Add validation in component
|
|
8
|
+
export const WHATSAPP_MAX_BUTTON_LIST_CHARS = 24;
|
|
9
|
+
export const WHATSAPP_MAX_BUTTON_LIST_DESCRIPTION_CHARS = 72;
|
|
10
|
+
export const WHATSAPP_MAX_BUTTON_LIST_ID_CHARS = 200;
|
|
5
11
|
const serialize = _whatsappButtonListProps => {
|
|
6
12
|
// TODO: Implement to have data persistance in localStorage, not needed for this WhatsApp development
|
|
7
13
|
return {};
|
|
8
14
|
};
|
|
9
15
|
export const WhatsappButtonList = (props) => {
|
|
16
|
+
const trucateSectionsContents = (sections) => {
|
|
17
|
+
const trucateRowContents = (row) => {
|
|
18
|
+
const title = truncateText(row.title, WHATSAPP_MAX_BUTTON_LIST_CHARS);
|
|
19
|
+
const description = row.description
|
|
20
|
+
? truncateText(row.description, WHATSAPP_MAX_BUTTON_LIST_DESCRIPTION_CHARS)
|
|
21
|
+
: undefined;
|
|
22
|
+
if (row.id.length > WHATSAPP_MAX_BUTTON_LIST_ID_CHARS) {
|
|
23
|
+
console.error(`Button id "${row.id}" exceeds the maximum length of ${WHATSAPP_MAX_BUTTON_LIST_ID_CHARS} characters`);
|
|
24
|
+
}
|
|
25
|
+
return Object.assign(Object.assign({}, row), { title, description });
|
|
26
|
+
};
|
|
27
|
+
return sections.map(section => ({
|
|
28
|
+
title: section.title
|
|
29
|
+
? truncateText(section.title, WHATSAPP_MAX_BUTTON_LIST_CHARS)
|
|
30
|
+
: undefined,
|
|
31
|
+
rows: section.rows.map(trucateRowContents),
|
|
32
|
+
}));
|
|
33
|
+
};
|
|
10
34
|
const renderBrowser = () => {
|
|
11
35
|
// Return a dummy message for browser
|
|
12
36
|
const message = `${JSON.stringify(props)}`;
|
|
@@ -15,7 +39,7 @@ export const WhatsappButtonList = (props) => {
|
|
|
15
39
|
const renderNode = () => {
|
|
16
40
|
return (
|
|
17
41
|
// @ts-ignore Property 'message' does not exist on type 'JSX.IntrinsicElements'.
|
|
18
|
-
_jsx("message", Object.assign({}, props, { sections: JSON.stringify(props.sections), type: INPUT.WHATSAPP_BUTTON_LIST })));
|
|
42
|
+
_jsx("message", Object.assign({}, props, { button: truncateText(props.button, WHATSAPP_MAX_BUTTON_CHARS), sections: JSON.stringify(trucateSectionsContents(props.sections)), type: INPUT.WHATSAPP_BUTTON_LIST })));
|
|
19
43
|
};
|
|
20
44
|
return renderComponent({ renderBrowser, renderNode });
|
|
21
45
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whatsapp-button-list.js","sourceRoot":"src/","sources":["components/whatsapp-button-list.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAGrC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"whatsapp-button-list.js","sourceRoot":"src/","sources":["components/whatsapp-button-list.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAGrC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAE7E,oCAAoC;AAEpC,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,CAAA;AAChD,MAAM,CAAC,MAAM,0CAA0C,GAAG,EAAE,CAAA;AAC5D,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAAG,CAAA;AAoBpD,MAAM,SAAS,GAAG,wBAAwB,CAAC,EAAE;IAC3C,qGAAqG;IACrG,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAA8B,EAAE,EAAE;IACnE,MAAM,uBAAuB,GAAG,CAC9B,QAA0C,EACR,EAAE;QACpC,MAAM,kBAAkB,GAAG,CACzB,GAA+B,EACH,EAAE;YAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAA;YACrE,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW;gBACjC,CAAC,CAAC,YAAY,CACV,GAAG,CAAC,WAAW,EACf,0CAA0C,CAC3C;gBACH,CAAC,CAAC,SAAS,CAAA;YACb,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,iCAAiC,EAAE;gBACrD,OAAO,CAAC,KAAK,CACX,cAAc,GAAG,CAAC,EAAE,mCAAmC,iCAAiC,aAAa,CACtG,CAAA;aACF;YACD,uCAAY,GAAG,KAAE,KAAK,EAAE,WAAW,IAAE;QACvC,CAAC,CAAA;QAED,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;gBAClB,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,8BAA8B,CAAC;gBAC7D,CAAC,CAAC,SAAS;YACb,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC;SAC3C,CAAC,CAAC,CAAA;IACL,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,qCAAqC;QACrC,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;QAC1C,OAAO,CACL,KAAC,OAAO,kBACN,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IACpB,KAAK,IACT,IAAI,EAAE,KAAK,CAAC,oBAAoB,gBAE/B,OAAO,IACA,CACX,CAAA;IACH,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,OAAO;QACL,gFAAgF;QAChF,kCACM,KAAK,IACT,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,yBAAyB,CAAC,EAC7D,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EACjE,IAAI,EAAE,KAAK,CAAC,oBAAoB,IAChC,CACH,CAAA;IACH,CAAC,CAAA;IAED,OAAO,eAAe,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAA;AACvD,CAAC,CAAA"}
|
package/lib/esm/util/index.d.ts
CHANGED
package/lib/esm/util/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["util/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["util/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const truncateText: (text: any, maxLength: any, ellipsis?: string) => any;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.js","sourceRoot":"src/","sources":["util/strings.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE;IAChE,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAA;KACjE;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { useContext } from 'react'
|
|
2
2
|
|
|
3
3
|
import { RequestContext } from '../../contexts'
|
|
4
|
+
import { truncateText } from '../../util/strings'
|
|
4
5
|
import { Button } from '../button'
|
|
5
6
|
import { MultichannelContext } from './multichannel-context'
|
|
6
7
|
import { isWhatsapp, WHATSAPP_MAX_BUTTON_CHARS } from './multichannel-utils'
|
|
@@ -53,13 +54,6 @@ export const MultichannelButton = props => {
|
|
|
53
54
|
return text
|
|
54
55
|
}
|
|
55
56
|
|
|
56
|
-
const truncateText = (text, maxLength, ellipsis = '...') => {
|
|
57
|
-
if (text.length > maxLength) {
|
|
58
|
-
return text.substring(0, maxLength - ellipsis.length) + ellipsis
|
|
59
|
-
}
|
|
60
|
-
return text
|
|
61
|
-
}
|
|
62
|
-
|
|
63
57
|
if (isWhatsapp(requestContext)) {
|
|
64
58
|
const asText = props.asText ?? true
|
|
65
59
|
if (asText) {
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { INPUT } from '@botonic/core'
|
|
2
2
|
import React from 'react'
|
|
3
3
|
|
|
4
|
+
import { truncateText } from '../util'
|
|
4
5
|
import { renderComponent } from '../util/react'
|
|
5
6
|
import { Message } from './message'
|
|
7
|
+
import { WHATSAPP_MAX_BUTTON_CHARS } from './multichannel/multichannel-utils'
|
|
6
8
|
|
|
7
9
|
// TODO: Add validation in component
|
|
8
10
|
|
|
11
|
+
export const WHATSAPP_MAX_BUTTON_LIST_CHARS = 24
|
|
12
|
+
export const WHATSAPP_MAX_BUTTON_LIST_DESCRIPTION_CHARS = 72
|
|
13
|
+
export const WHATSAPP_MAX_BUTTON_LIST_ID_CHARS = 200
|
|
9
14
|
export interface WhatsappButtonListSectionProps {
|
|
10
15
|
title?: string
|
|
11
16
|
rows: WhatsappButtonListRowProps[]
|
|
@@ -31,6 +36,35 @@ const serialize = _whatsappButtonListProps => {
|
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
export const WhatsappButtonList = (props: WhatsappButtonListProps) => {
|
|
39
|
+
const trucateSectionsContents = (
|
|
40
|
+
sections: WhatsappButtonListSectionProps[]
|
|
41
|
+
): WhatsappButtonListSectionProps[] => {
|
|
42
|
+
const trucateRowContents = (
|
|
43
|
+
row: WhatsappButtonListRowProps
|
|
44
|
+
): WhatsappButtonListRowProps => {
|
|
45
|
+
const title = truncateText(row.title, WHATSAPP_MAX_BUTTON_LIST_CHARS)
|
|
46
|
+
const description = row.description
|
|
47
|
+
? truncateText(
|
|
48
|
+
row.description,
|
|
49
|
+
WHATSAPP_MAX_BUTTON_LIST_DESCRIPTION_CHARS
|
|
50
|
+
)
|
|
51
|
+
: undefined
|
|
52
|
+
if (row.id.length > WHATSAPP_MAX_BUTTON_LIST_ID_CHARS) {
|
|
53
|
+
console.error(
|
|
54
|
+
`Button id "${row.id}" exceeds the maximum length of ${WHATSAPP_MAX_BUTTON_LIST_ID_CHARS} characters`
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
return { ...row, title, description }
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return sections.map(section => ({
|
|
61
|
+
title: section.title
|
|
62
|
+
? truncateText(section.title, WHATSAPP_MAX_BUTTON_LIST_CHARS)
|
|
63
|
+
: undefined,
|
|
64
|
+
rows: section.rows.map(trucateRowContents),
|
|
65
|
+
}))
|
|
66
|
+
}
|
|
67
|
+
|
|
34
68
|
const renderBrowser = () => {
|
|
35
69
|
// Return a dummy message for browser
|
|
36
70
|
const message = `${JSON.stringify(props)}`
|
|
@@ -50,7 +84,8 @@ export const WhatsappButtonList = (props: WhatsappButtonListProps) => {
|
|
|
50
84
|
// @ts-ignore Property 'message' does not exist on type 'JSX.IntrinsicElements'.
|
|
51
85
|
<message
|
|
52
86
|
{...props}
|
|
53
|
-
|
|
87
|
+
button={truncateText(props.button, WHATSAPP_MAX_BUTTON_CHARS)}
|
|
88
|
+
sections={JSON.stringify(trucateSectionsContents(props.sections))}
|
|
54
89
|
type={INPUT.WHATSAPP_BUTTON_LIST}
|
|
55
90
|
/>
|
|
56
91
|
)
|
package/src/util/index.ts
CHANGED