@botonic/react 0.24.4 → 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.
@@ -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":"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"}
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;AAuBnC,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,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,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EACxC,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;AA3BY,QAAA,kBAAkB,sBA2B9B"}
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"}
@@ -5,4 +5,5 @@ export * from './logs';
5
5
  export * from './objects';
6
6
  export * from './react';
7
7
  export * from './regexs';
8
+ export * from './strings';
8
9
  export * from './webchat';
@@ -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":"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"}
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;AAuBnC,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,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,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EACxC,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"}
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"}
@@ -5,4 +5,5 @@ export * from './logs';
5
5
  export * from './objects';
6
6
  export * from './react';
7
7
  export * from './regexs';
8
+ export * from './strings';
8
9
  export * from './webchat';
@@ -5,5 +5,6 @@ export * from './logs';
5
5
  export * from './objects';
6
6
  export * from './react';
7
7
  export * from './regexs';
8
+ export * from './strings';
8
9
  export * from './webchat';
9
10
  //# sourceMappingURL=index.js.map
@@ -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,7 @@
1
+ export const truncateText = (text, maxLength, ellipsis = '...') => {
2
+ if (text.length > maxLength) {
3
+ return text.substring(0, maxLength - ellipsis.length) + ellipsis;
4
+ }
5
+ return text;
6
+ };
7
+ //# sourceMappingURL=strings.js.map
@@ -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,6 @@
1
1
  {
2
2
  "name": "@botonic/react",
3
- "version": "0.24.4",
3
+ "version": "0.24.5-alpha.0",
4
4
  "license": "MIT",
5
5
  "description": "Build Chatbots using React",
6
6
  "main": "./lib/cjs",
@@ -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
- sections={JSON.stringify(props.sections)}
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
@@ -5,4 +5,5 @@ export * from './logs'
5
5
  export * from './objects'
6
6
  export * from './react'
7
7
  export * from './regexs'
8
+ export * from './strings'
8
9
  export * from './webchat'
@@ -0,0 +1,6 @@
1
+ export const truncateText = (text, maxLength, ellipsis = '...') => {
2
+ if (text.length > maxLength) {
3
+ return text.substring(0, maxLength - ellipsis.length) + ellipsis
4
+ }
5
+ return text
6
+ }