@botonic/react 1.0.0-dev.1 → 1.0.0-dev.2

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.
Files changed (116) hide show
  1. package/lib/components/button.js +2 -0
  2. package/lib/components/button.js.map +1 -1
  3. package/lib/components/components.js +1 -1
  4. package/lib/components/image.js +47 -5
  5. package/lib/components/image.js.map +1 -1
  6. package/lib/components/index.js +6 -6
  7. package/lib/components/markdown.js +1 -1
  8. package/lib/components/multichannel/multichannel-utils.js +8 -6
  9. package/lib/components/multichannel/multichannel-utils.js.map +1 -1
  10. package/lib/components/timestamps.js +1 -1
  11. package/lib/constants.js +2 -1
  12. package/lib/constants.js.map +1 -1
  13. package/lib/dev-app.js +7 -6
  14. package/lib/dev-app.js.map +1 -1
  15. package/lib/index.d.ts +3 -0
  16. package/lib/index.js +20 -20
  17. package/lib/message-utils.js +1 -1
  18. package/lib/util/dom.js +8 -2
  19. package/lib/util/dom.js.map +1 -1
  20. package/lib/util/environment.js +1 -1
  21. package/lib/util/objects.js +1 -1
  22. package/lib/util/react.js +1 -1
  23. package/lib/util/webchat.js +1 -1
  24. package/lib/webchat/actions.js +3 -1
  25. package/lib/webchat/actions.js.map +1 -1
  26. package/lib/webchat/devices/device-adapter.js +14 -4
  27. package/lib/webchat/devices/device-adapter.js.map +1 -1
  28. package/lib/webchat/devices/scrollbar-controller.js +5 -3
  29. package/lib/webchat/devices/scrollbar-controller.js.map +1 -1
  30. package/lib/webchat/header.js +1 -1
  31. package/lib/webchat/hooks.js +14 -4
  32. package/lib/webchat/hooks.js.map +1 -1
  33. package/lib/webchat/index.js +1 -1
  34. package/lib/webchat/webchat-reducer.js +6 -0
  35. package/lib/webchat/webchat-reducer.js.map +1 -1
  36. package/lib/webchat/webchat.js +21 -4
  37. package/lib/webchat/webchat.js.map +1 -1
  38. package/lib/webchat/webview.js +1 -1
  39. package/lib/webchat-app.js +20 -9
  40. package/lib/webchat-app.js.map +1 -1
  41. package/package.json +6 -6
  42. package/src/components/button.jsx +2 -0
  43. package/src/dev-app.jsx +8 -3
  44. package/src/experimental/components/custom-message.jsx +2 -1
  45. package/src/experimental/components/message.jsx +14 -7
  46. package/src/experimental/constants.js +189 -0
  47. package/src/experimental/contexts.jsx +36 -0
  48. package/src/experimental/dev-app.jsx +14 -7
  49. package/src/experimental/index.js +32 -20
  50. package/src/experimental/msg-to-botonic.jsx +9 -9
  51. package/src/experimental/react-bot.jsx +1 -1
  52. package/src/experimental/util/dom.js +55 -0
  53. package/src/experimental/util/objects.js +39 -0
  54. package/src/experimental/util/webchat.js +61 -0
  55. package/src/experimental/webchat/actions.jsx +24 -0
  56. package/src/experimental/webchat/hooks.js +296 -0
  57. package/src/experimental/webchat/messages-reducer.js +86 -0
  58. package/src/experimental/webchat/session-view.jsx +166 -0
  59. package/src/experimental/webchat/webchat-dev.jsx +23 -19
  60. package/src/experimental/webchat/webchat-reducer.js +68 -0
  61. package/src/experimental/webchat/webchat.jsx +107 -75
  62. package/src/experimental/webchat-app.jsx +34 -15
  63. package/src/index.d.ts +1 -0
  64. package/src/util/dom.js +5 -3
  65. package/src/webchat/devices/device-adapter.js +16 -4
  66. package/src/webchat/devices/scrollbar-controller.js +9 -4
  67. package/src/webchat/webchat.jsx +2 -1
  68. package/src/webchat-app.jsx +6 -4
  69. package/lib/experimental/components/audio.js +0 -46
  70. package/lib/experimental/components/audio.js.map +0 -1
  71. package/lib/experimental/components/carousel.js +0 -194
  72. package/lib/experimental/components/carousel.js.map +0 -1
  73. package/lib/experimental/components/custom-message.js +0 -132
  74. package/lib/experimental/components/custom-message.js.map +0 -1
  75. package/lib/experimental/components/document.js +0 -69
  76. package/lib/experimental/components/document.js.map +0 -1
  77. package/lib/experimental/components/image.js +0 -47
  78. package/lib/experimental/components/image.js.map +0 -1
  79. package/lib/experimental/components/index.js +0 -184
  80. package/lib/experimental/components/index.js.map +0 -1
  81. package/lib/experimental/components/location.js +0 -54
  82. package/lib/experimental/components/location.js.map +0 -1
  83. package/lib/experimental/components/markdown.js +0 -103
  84. package/lib/experimental/components/markdown.js.map +0 -1
  85. package/lib/experimental/components/message.js +0 -353
  86. package/lib/experimental/components/message.js.map +0 -1
  87. package/lib/experimental/components/text.js +0 -80
  88. package/lib/experimental/components/text.js.map +0 -1
  89. package/lib/experimental/components/video.js +0 -49
  90. package/lib/experimental/components/video.js.map +0 -1
  91. package/lib/experimental/components/whatsapp-template.js +0 -53
  92. package/lib/experimental/components/whatsapp-template.js.map +0 -1
  93. package/lib/experimental/dev-app.js +0 -240
  94. package/lib/experimental/dev-app.js.map +0 -1
  95. package/lib/experimental/index.js +0 -1022
  96. package/lib/experimental/index.js.map +0 -1
  97. package/lib/experimental/msg-to-botonic.js +0 -162
  98. package/lib/experimental/msg-to-botonic.js.map +0 -1
  99. package/lib/experimental/node-app.js +0 -97
  100. package/lib/experimental/node-app.js.map +0 -1
  101. package/lib/experimental/react-bot.js +0 -167
  102. package/lib/experimental/react-bot.js.map +0 -1
  103. package/lib/experimental/webchat/assets/Inter-VariableFont_slnt,wght.ttf +0 -0
  104. package/lib/experimental/webchat/assets/botonic-logo-white.svg +0 -16
  105. package/lib/experimental/webchat/assets/messenger.svg +0 -10
  106. package/lib/experimental/webchat/assets/open-new-window.svg +0 -3
  107. package/lib/experimental/webchat/assets/open.svg +0 -3
  108. package/lib/experimental/webchat/assets/telegram.svg +0 -10
  109. package/lib/experimental/webchat/assets/webchat.svg +0 -21
  110. package/lib/experimental/webchat/assets/whatsapp.svg +0 -4
  111. package/lib/experimental/webchat/webchat-dev.js +0 -300
  112. package/lib/experimental/webchat/webchat-dev.js.map +0 -1
  113. package/lib/experimental/webchat/webchat.js +0 -1051
  114. package/lib/experimental/webchat/webchat.js.map +0 -1
  115. package/lib/experimental/webchat-app.js +0 -642
  116. package/lib/experimental/webchat-app.js.map +0 -1
@@ -1,1051 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.Webchat = exports.getParsedAction = void 0;
11
-
12
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
-
14
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
-
16
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
-
18
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
19
-
20
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
21
-
22
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
23
-
24
- var _core = require("@botonic/core");
25
-
26
- var _framerMotion = require("framer-motion");
27
-
28
- var _lodash = _interopRequireDefault(require("lodash.merge"));
29
-
30
- var _react = _interopRequireWildcard(require("react"));
31
-
32
- var _reactTextareaAutosize = _interopRequireDefault(require("react-textarea-autosize"));
33
-
34
- var _styledComponents = _interopRequireWildcard(require("styled-components"));
35
-
36
- var _useAsyncEffect = require("use-async-effect");
37
-
38
- var _uuid = require("uuid");
39
-
40
- var _handoff = require("../../components/handoff");
41
-
42
- var _webchatSettings = require("../../components/webchat-settings");
43
-
44
- var _constants = require("../../constants");
45
-
46
- var _contexts = require("../../contexts");
47
-
48
- var _messageUtils = require("../../message-utils");
49
-
50
- var _dom = require("../../util/dom");
51
-
52
- var _environment = require("../../util/environment");
53
-
54
- var _react2 = require("../../util/react");
55
-
56
- var _regexs = require("../../util/regexs");
57
-
58
- var _webchat = require("../../util/webchat");
59
-
60
- var _attachment = require("../../webchat/components/attachment");
61
-
62
- var _emojiPicker = require("../../webchat/components/emoji-picker");
63
-
64
- var _persistentMenu = require("../../webchat/components/persistent-menu");
65
-
66
- var _sendButton = require("../../webchat/components/send-button");
67
-
68
- var _typingIndicator = require("../../webchat/components/typing-indicator");
69
-
70
- var _deviceAdapter = require("../../webchat/devices/device-adapter");
71
-
72
- var _header = require("../../webchat/header");
73
-
74
- var _hooks = require("../../webchat/hooks");
75
-
76
- var _messageList = require("../../webchat/message-list");
77
-
78
- var _replies = require("../../webchat/replies");
79
-
80
- var _useStorageStateHook = require("../../webchat/use-storage-state-hook");
81
-
82
- var _webview = require("../../webchat/webview");
83
-
84
- var _components = require("../components");
85
-
86
- var _text = require("../components/text");
87
-
88
- var _msgToBotonic = require("../msg-to-botonic");
89
-
90
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
91
-
92
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
93
-
94
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
95
-
96
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
97
-
98
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
99
-
100
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
101
-
102
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
103
-
104
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
105
-
106
- var getParsedAction = function getParsedAction(botonicAction) {
107
- var splittedAction = botonicAction.split('create_case:');
108
- if (splittedAction.length <= 1) return undefined;
109
- return JSON.parse(splittedAction[1]);
110
- };
111
-
112
- exports.getParsedAction = getParsedAction;
113
-
114
- var StyledWebchat = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: fixed;\n right: 20px;\n bottom: 20px;\n width: ", "px;\n height: ", "px;\n margin: auto;\n background-color: ", ";\n border-radius: 10px;\n box-shadow: ", " 0px 0px 12px;\n display: flex;\n flex-direction: column;\n"])), function (props) {
115
- return props.width;
116
- }, function (props) {
117
- return props.height;
118
- }, _constants.COLORS.SOLID_WHITE, _constants.COLORS.SOLID_BLACK_ALPHA_0_2);
119
-
120
- var StyledTriggerButton = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n cursor: pointer;\n position: fixed;\n background: ", ";\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n width: 65px;\n height: 65px;\n bottom: 20px;\n right: 10px;\n padding: 8px;\n"])), _constants.COLORS.SOLID_WHITE);
121
-
122
- var UserInputContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n min-height: 52px;\n display: flex;\n position: relative;\n border-top: 1px solid ", ";\n"])), _constants.COLORS.SOLID_BLACK_ALPHA_0_5);
123
-
124
- var TextAreaContainer = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n"])));
125
-
126
- var FeaturesWrapper = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1;\n"])));
127
-
128
- var TriggerImage = _styledComponents["default"].img(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n max-width: 100%;\n max-height: 100%;\n"])));
129
-
130
- var ErrorMessageContainer = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n display: flex;\n z-index: 1;\n justify-content: center;\n width: 100%;\n"])));
131
-
132
- var ErrorMessage = _styledComponents["default"].div(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n top: 10px;\n font-size: 14px;\n line-height: 20px;\n padding: 4px 11px;\n display: flex;\n background-color: ", ";\n color: ", ";\n border-radius: 5px;\n align-items: center;\n justify-content: center;\n font-family: ", ";\n"])), _constants.COLORS.ERROR_RED, _constants.COLORS.CONCRETE_WHITE, _constants.WEBCHAT.DEFAULTS.FONT_FAMILY);
133
-
134
- var DarkBackgroundMenu = _styledComponents["default"].div(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n background: ", ";\n opacity: 0.3;\n z-index: 1;\n right: 0;\n bottom: 0;\n border-radius: 10px;\n position: absolute;\n width: 100%;\n height: 100%;\n"])), _constants.COLORS.SOLID_BLACK); // eslint-disable-next-line complexity
135
-
136
-
137
- var Webchat = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
138
- var _ref = props.webchatHooks || (0, _hooks.useWebchat)(),
139
- webchatState = _ref.webchatState,
140
- addMessage = _ref.addMessage,
141
- addMessageComponent = _ref.addMessageComponent,
142
- updateMessage = _ref.updateMessage,
143
- updateReplies = _ref.updateReplies,
144
- updateLatestInput = _ref.updateLatestInput,
145
- updateTyping = _ref.updateTyping,
146
- updateWebview = _ref.updateWebview,
147
- updateSession = _ref.updateSession,
148
- updateLastRoutePath = _ref.updateLastRoutePath,
149
- updateHandoff = _ref.updateHandoff,
150
- updateTheme = _ref.updateTheme,
151
- updateDevSettings = _ref.updateDevSettings,
152
- _toggleWebchat = _ref.toggleWebchat,
153
- toggleEmojiPicker = _ref.toggleEmojiPicker,
154
- togglePersistentMenu = _ref.togglePersistentMenu,
155
- _toggleCoverComponent = _ref.toggleCoverComponent,
156
- setError = _ref.setError,
157
- setOnline = _ref.setOnline,
158
- _clearMessages = _ref.clearMessages,
159
- openWebviewT = _ref.openWebviewT,
160
- closeWebviewT = _ref.closeWebviewT,
161
- updateLastMessageDate = _ref.updateLastMessageDate,
162
- setCurrentAttachment = _ref.setCurrentAttachment,
163
- updateJwt = _ref.updateJwt;
164
-
165
- var firstUpdate = (0, _react.useRef)(true);
166
-
167
- var isOnline = function isOnline() {
168
- return webchatState.online;
169
- };
170
-
171
- var currentDateString = function currentDateString() {
172
- return new Date().toISOString();
173
- };
174
-
175
- var theme = (0, _lodash["default"])(webchatState.theme, props.theme);
176
- var initialSession = props.initialSession,
177
- initialDevSettings = props.initialDevSettings,
178
- onStateChange = props.onStateChange;
179
- var getThemeProperty = (0, _webchat._getThemeProperty)(theme);
180
- var storage = props.storage === undefined ? localStorage : props.storage;
181
- var storageKey = typeof props.storageKey === 'function' ? props.storageKey() : props.storageKey;
182
-
183
- var _useStorageState = (0, _useStorageStateHook.useStorageState)(storage, storageKey || _constants.WEBCHAT.DEFAULTS.STORAGE_KEY),
184
- _useStorageState2 = (0, _slicedToArray2["default"])(_useStorageState, 2),
185
- botonicState = _useStorageState2[0],
186
- saveState = _useStorageState2[1];
187
-
188
- var host = props.host || document.body;
189
-
190
- var saveWebchatState = function saveWebchatState(webchatState) {
191
- storage && saveState(JSON.parse((0, _regexs.stringifyWithRegexs)({
192
- messages: webchatState.messagesJSON,
193
- session: webchatState.session,
194
- lastRoutePath: webchatState.lastRoutePath,
195
- devSettings: webchatState.devSettings,
196
- lastMessageUpdate: webchatState.lastMessageUpdate,
197
- themeUpdates: webchatState.themeUpdates,
198
- jwt: webchatState.jwt
199
- })));
200
- };
201
-
202
- var deviceAdapter = new _deviceAdapter.DeviceAdapter();
203
-
204
- var handleAttachment = function handleAttachment(event) {
205
- if (!(0, _messageUtils.isAllowedSize)(event.target.files[0].size)) {
206
- throw new Error("The file is too large. A maximum of ".concat(_constants.MAX_ALLOWED_SIZE_MB, "MB is allowed."));
207
- }
208
-
209
- setCurrentAttachment({
210
- fileName: event.target.files[0].name,
211
- file: event.target.files[0],
212
- // TODO: Attach more files?
213
- attachmentType: (0, _messageUtils.getMediaType)(event.target.files[0].type)
214
- });
215
- };
216
-
217
- (0, _react.useEffect)(function () {
218
- if (webchatState.currentAttachment) sendAttachment(webchatState.currentAttachment);
219
- }, [webchatState.currentAttachment]);
220
-
221
- var sendUserInput = /*#__PURE__*/function () {
222
- var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(input) {
223
- return _regenerator["default"].wrap(function _callee$(_context) {
224
- while (1) {
225
- switch (_context.prev = _context.next) {
226
- case 0:
227
- props.onUserInput && props.onUserInput({
228
- user: webchatState.session.user,
229
- input: input,
230
- session: webchatState.session,
231
- lastRoutePath: webchatState.lastRoutePath
232
- });
233
-
234
- case 1:
235
- case "end":
236
- return _context.stop();
237
- }
238
- }
239
- }, _callee);
240
- }));
241
-
242
- return function sendUserInput(_x) {
243
- return _ref2.apply(this, arguments);
244
- };
245
- }(); // Load styles stored in window._botonicInsertStyles by Webpack
246
-
247
-
248
- (0, _hooks.useComponentWillMount)(function () {
249
- if (window._botonicInsertStyles && window._botonicInsertStyles.length) {
250
- var _iterator = _createForOfIteratorHelper(window._botonicInsertStyles),
251
- _step;
252
-
253
- try {
254
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
255
- var botonicStyle = _step.value;
256
- // Injecting styles at head is needed even if we use shadowDOM
257
- // as some dependencies like simplebar rely on creating ephemeral elements
258
- // on document.body and assume styles will be available globally
259
- document.head.appendChild(botonicStyle); // injecting styles in host node too so that shadowDOM works
260
-
261
- if (props.shadowDOM) host.appendChild(botonicStyle.cloneNode(true));
262
- }
263
- } catch (err) {
264
- _iterator.e(err);
265
- } finally {
266
- _iterator.f();
267
- }
268
-
269
- delete window._botonicInsertStyles;
270
- }
271
-
272
- if (props.shadowDOM) {
273
- // emoji-picker-react injects styles in head, so we need to
274
- // re-inject them in our host node to make it work with shadowDOM
275
- var _iterator2 = _createForOfIteratorHelper(document.querySelectorAll('style')),
276
- _step2;
277
-
278
- try {
279
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
280
- var style = _step2.value;
281
- if (style.textContent && style.textContent.includes('emoji-picker-react')) host.appendChild(style.cloneNode(true));
282
- }
283
- } catch (err) {
284
- _iterator2.e(err);
285
- } finally {
286
- _iterator2.f();
287
- }
288
- }
289
- }); // Load initial state from storage
290
-
291
- (0, _react.useEffect)(function () {
292
- var _ref3 = botonicState || {},
293
- messages = _ref3.messages,
294
- session = _ref3.session,
295
- lastRoutePath = _ref3.lastRoutePath,
296
- devSettings = _ref3.devSettings,
297
- lastMessageUpdate = _ref3.lastMessageUpdate,
298
- themeUpdates = _ref3.themeUpdates;
299
-
300
- session = (0, _webchat.initSession)(session);
301
- updateSession(session);
302
-
303
- if ((0, _webchat.shouldKeepSessionOnReload)({
304
- initialDevSettings: initialDevSettings,
305
- devSettings: devSettings
306
- })) {
307
- if (messages) {
308
- messages.forEach(function (m) {
309
- addMessage(m);
310
- var newComponent = (0, _msgToBotonic.msgToBotonic)(_objectSpread(_objectSpread({}, m), {}, {
311
- delay: 0,
312
- typing: 0
313
- }), props.theme.message && props.theme.message.customTypes || props.theme.customMessageTypes);
314
- if (newComponent) addMessageComponent(newComponent);
315
- });
316
- }
317
-
318
- if (initialSession) updateSession((0, _lodash["default"])(initialSession, session));
319
- if (lastRoutePath) updateLastRoutePath(lastRoutePath);
320
- } else updateSession((0, _lodash["default"])(initialSession, session));
321
-
322
- if (devSettings) updateDevSettings(devSettings);else if (initialDevSettings) updateDevSettings(initialDevSettings);
323
- if (lastMessageUpdate) updateLastMessageDate(lastMessageUpdate);
324
- if (themeUpdates !== undefined) updateTheme((0, _lodash["default"])(props.theme, themeUpdates), themeUpdates);
325
- if (props.onInit) setTimeout(function () {
326
- return props.onInit();
327
- }, 100);
328
- }, []);
329
- (0, _react.useEffect)(function () {
330
- if (!webchatState.isWebchatOpen) return;
331
- deviceAdapter.init(host);
332
- (0, _dom.scrollToBottom)({
333
- behavior: 'auto',
334
- host: host
335
- });
336
- }, [webchatState.isWebchatOpen]);
337
- (0, _react.useEffect)(function () {
338
- if (onStateChange && typeof onStateChange === 'function') {
339
- onStateChange(_objectSpread(_objectSpread({}, webchatState), {}, {
340
- updateJwt: updateJwt
341
- }));
342
- }
343
-
344
- saveWebchatState(webchatState);
345
- }, [webchatState.messagesJSON, webchatState.session, webchatState.lastRoutePath, webchatState.devSettings, webchatState.lastMessageUpdate, webchatState.jwt]);
346
- (0, _useAsyncEffect.useAsyncEffect)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
347
- return _regenerator["default"].wrap(function _callee2$(_context2) {
348
- while (1) {
349
- switch (_context2.prev = _context2.next) {
350
- case 0:
351
- if (!webchatState.online) {
352
- setError({
353
- message: (0, _webchat.getServerErrorMessage)(props.server)
354
- });
355
- } else {
356
- if (!firstUpdate.current) {
357
- setError(undefined);
358
- }
359
- }
360
-
361
- case 1:
362
- case "end":
363
- return _context2.stop();
364
- }
365
- }
366
- }, _callee2);
367
- })), [webchatState.online]);
368
- (0, _hooks.useTyping)({
369
- webchatState: webchatState,
370
- updateTyping: updateTyping,
371
- updateMessage: updateMessage,
372
- host: host
373
- });
374
- (0, _react.useEffect)(function () {
375
- updateTheme((0, _lodash["default"])(props.theme, theme, webchatState.themeUpdates));
376
- }, [props.theme, webchatState.themeUpdates]);
377
-
378
- var openWebview = function openWebview(webviewComponent, params) {
379
- return updateWebview(webviewComponent, params);
380
- };
381
-
382
- var handleSelectedEmoji = function handleSelectedEmoji(event, emojiObject) {
383
- textArea.current.value += emojiObject.emoji;
384
- textArea.current.focus();
385
- };
386
-
387
- var closeWebview = function closeWebview(options) {
388
- updateWebview();
389
-
390
- if (userInputEnabled) {
391
- textArea.current.focus();
392
- }
393
-
394
- if (options && options.payload) {
395
- sendPayload(options.payload);
396
- } else if (options && options.path) {
397
- var params = '';
398
- if (options.params) params = (0, _core.params2queryString)(options.params);
399
- sendPayload("__PATH_PAYLOAD__".concat(options.path, "?").concat(params));
400
- }
401
- };
402
-
403
- var handleMenu = function handleMenu() {
404
- togglePersistentMenu(!webchatState.isPersistentMenuOpen);
405
- };
406
-
407
- var handleEmojiClick = function handleEmojiClick() {
408
- toggleEmojiPicker(!webchatState.isEmojiPickerOpen);
409
- };
410
-
411
- var animationsEnabled = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.enableAnimations, props.enableAnimations !== undefined ? props.enableAnimations : true);
412
- var persistentMenuOptions = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.persistentMenu, props.persistentMenu);
413
- var darkBackgroundMenu = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.darkBackgroundMenu, false);
414
-
415
- var getBlockInputs = function getBlockInputs(rule, inputData) {
416
- return rule.match.some(function (regex) {
417
- if (typeof regex === 'string') regex = (0, _regexs.deserializeRegex)(regex);
418
- return regex.test(inputData);
419
- });
420
- };
421
-
422
- var checkBlockInput = function checkBlockInput(input) {
423
- // if is a text we check if it is a serialized RE
424
- var blockInputs = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.blockInputs, props.blockInputs);
425
- if (!Array.isArray(blockInputs)) return false;
426
-
427
- var _iterator3 = _createForOfIteratorHelper(blockInputs),
428
- _step3;
429
-
430
- try {
431
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
432
- var rule = _step3.value;
433
-
434
- if (getBlockInputs(rule, input.data)) {
435
- addMessageComponent( /*#__PURE__*/_react["default"].createElement(_text.Text, {
436
- id: input.id,
437
- from: _constants.SENDERS.user,
438
- blob: false,
439
- style: {
440
- backgroundColor: _constants.COLORS.SCORPION_GRAY,
441
- borderColor: _constants.COLORS.SCORPION_GRAY,
442
- padding: '8px 12px'
443
- }
444
- }, rule.message));
445
- updateReplies(false);
446
- return true;
447
- }
448
- }
449
- } catch (err) {
450
- _iterator3.e(err);
451
- } finally {
452
- _iterator3.f();
453
- }
454
-
455
- return false;
456
- };
457
-
458
- var closeMenu = function closeMenu() {
459
- togglePersistentMenu(false);
460
- };
461
-
462
- var persistentMenu = function persistentMenu() {
463
- return /*#__PURE__*/_react["default"].createElement(_persistentMenu.OpenedPersistentMenu, {
464
- onClick: closeMenu,
465
- options: persistentMenuOptions,
466
- borderRadius: webchatState.theme.style.borderRadius || '10px'
467
- });
468
- };
469
-
470
- var getCoverComponent = function getCoverComponent() {
471
- return getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.coverComponent, props.coverComponent && (props.coverComponent.component || props.coverComponent));
472
- };
473
-
474
- var CoverComponent = getCoverComponent();
475
-
476
- var closeCoverComponent = function closeCoverComponent() {
477
- _toggleCoverComponent(false);
478
- };
479
-
480
- (0, _react.useEffect)(function () {
481
- if (!CoverComponent) return;
482
- if (!botonicState || botonicState.messages && botonicState.messages.length == 0) _toggleCoverComponent(true);
483
- }, []);
484
-
485
- var coverComponent = function coverComponent() {
486
- var coverComponentProps = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.coverComponentProps, props.coverComponent && props.coverComponent.props);
487
- if (CoverComponent && webchatState.isCoverComponentOpen) return /*#__PURE__*/_react["default"].createElement(CoverComponent, (0, _extends2["default"])({
488
- closeComponent: closeCoverComponent
489
- }, coverComponentProps));
490
- return null;
491
- };
492
-
493
- var messageComponentFromInput = function messageComponentFromInput(input) {
494
- var messageComponent = null;
495
-
496
- if ((0, _messageUtils.isText)(input)) {
497
- messageComponent = /*#__PURE__*/_react["default"].createElement(_text.Text, {
498
- id: input.id,
499
- payload: input.payload,
500
- from: _constants.SENDERS.user
501
- }, input.data);
502
- } else if ((0, _messageUtils.isMedia)(input)) {
503
- var temporaryDisplayUrl = URL.createObjectURL(input.data);
504
- var mediaProps = {
505
- id: input.id,
506
- from: _constants.SENDERS.user,
507
- src: temporaryDisplayUrl
508
- };
509
- if ((0, _messageUtils.isImage)(input)) messageComponent = /*#__PURE__*/_react["default"].createElement(_components.Image, mediaProps);else if ((0, _messageUtils.isAudio)(input)) messageComponent = /*#__PURE__*/_react["default"].createElement(_components.Audio, mediaProps);else if ((0, _messageUtils.isVideo)(input)) messageComponent = /*#__PURE__*/_react["default"].createElement(_components.Video, mediaProps);else if ((0, _messageUtils.isDocument)(input)) messageComponent = /*#__PURE__*/_react["default"].createElement(_components.Document, mediaProps);
510
- }
511
-
512
- return messageComponent;
513
- };
514
-
515
- var sendInput = /*#__PURE__*/function () {
516
- var _ref5 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(input) {
517
- var messageComponent;
518
- return _regenerator["default"].wrap(function _callee3$(_context3) {
519
- while (1) {
520
- switch (_context3.prev = _context3.next) {
521
- case 0:
522
- if (!(!input || Object.keys(input).length == 0)) {
523
- _context3.next = 2;
524
- break;
525
- }
526
-
527
- return _context3.abrupt("return");
528
-
529
- case 2:
530
- if (!((0, _messageUtils.isText)(input) && (!input.data || !input.data.trim()))) {
531
- _context3.next = 4;
532
- break;
533
- }
534
-
535
- return _context3.abrupt("return");
536
-
537
- case 4:
538
- if (!((0, _messageUtils.isText)(input) && checkBlockInput(input))) {
539
- _context3.next = 6;
540
- break;
541
- }
542
-
543
- return _context3.abrupt("return");
544
-
545
- case 6:
546
- if (!input.id) input.id = (0, _uuid.v4)();
547
- messageComponent = messageComponentFromInput(input);
548
- if (messageComponent) addMessageComponent(messageComponent);
549
-
550
- if (!(0, _messageUtils.isMedia)(input)) {
551
- _context3.next = 13;
552
- break;
553
- }
554
-
555
- _context3.next = 12;
556
- return (0, _messageUtils.readDataURL)(input.data);
557
-
558
- case 12:
559
- input.data = _context3.sent;
560
-
561
- case 13:
562
- sendUserInput(input);
563
- updateLatestInput(input);
564
- isOnline() && updateLastMessageDate(currentDateString());
565
- updateReplies(false);
566
- togglePersistentMenu(false);
567
- toggleEmojiPicker(false);
568
-
569
- case 19:
570
- case "end":
571
- return _context3.stop();
572
- }
573
- }
574
- }, _callee3);
575
- }));
576
-
577
- return function sendInput(_x2) {
578
- return _ref5.apply(this, arguments);
579
- };
580
- }();
581
- /* This is the public API this component exposes to its parents
582
- https://stackoverflow.com/questions/37949981/call-child-method-from-parent
583
- */
584
-
585
-
586
- var updateSessionWithUser = function updateSessionWithUser(userToUpdate) {
587
- return updateSession((0, _lodash["default"])(webchatState.session, {
588
- user: userToUpdate
589
- }));
590
- };
591
-
592
- (0, _react.useImperativeHandle)(ref, function () {
593
- return {
594
- addBotResponse: function addBotResponse(_ref6) {
595
- var response = _ref6.response,
596
- session = _ref6.session,
597
- lastRoutePath = _ref6.lastRoutePath;
598
- updateTyping(false);
599
- if (Array.isArray(response)) response.map(function (r) {
600
- return addMessageComponent(r);
601
- });else if (response) addMessageComponent(response);
602
-
603
- if (session) {
604
- updateSession((0, _lodash["default"])(session, {
605
- user: webchatState.session.user
606
- }));
607
- var action = session._botonic_action || '';
608
- var handoff = action.startsWith('create_case');
609
- if (handoff && _environment.isDev) addMessageComponent( /*#__PURE__*/_react["default"].createElement(_handoff.Handoff, null));
610
- updateHandoff(handoff);
611
- }
612
-
613
- if (lastRoutePath) updateLastRoutePath(lastRoutePath);
614
- updateLastMessageDate(currentDateString());
615
- },
616
- setTyping: function setTyping(typing) {
617
- return updateTyping(typing);
618
- },
619
- addUserMessage: function addUserMessage(message) {
620
- return sendInput(message);
621
- },
622
- updateUser: updateSessionWithUser,
623
- openWebchat: function openWebchat() {
624
- return _toggleWebchat(true);
625
- },
626
- closeWebchat: function closeWebchat() {
627
- return _toggleWebchat(false);
628
- },
629
- toggleWebchat: function toggleWebchat() {
630
- return _toggleWebchat(!webchatState.isWebchatOpen);
631
- },
632
- openCoverComponent: function openCoverComponent() {
633
- return _toggleCoverComponent(true);
634
- },
635
- closeCoverComponent: function closeCoverComponent() {
636
- return _toggleCoverComponent(false);
637
- },
638
- toggleCoverComponent: function toggleCoverComponent() {
639
- return _toggleCoverComponent(!webchatState.isCoverComponentOpen);
640
- },
641
- openWebviewApi: function openWebviewApi(component) {
642
- return openWebviewT(component);
643
- },
644
- setError: setError,
645
- setOnline: setOnline,
646
- getMessages: function getMessages() {
647
- return webchatState.messagesJSON;
648
- },
649
- isOnline: isOnline,
650
- clearMessages: function clearMessages() {
651
- _clearMessages();
652
-
653
- updateReplies(false);
654
- },
655
- getLastMessageUpdate: function getLastMessageUpdate() {
656
- return webchatState.lastMessageUpdate;
657
- },
658
- updateMessageInfo: function updateMessageInfo(msgId, messageInfo) {
659
- var messageToUpdate = webchatState.messagesJSON.filter(function (m) {
660
- return m.id == msgId;
661
- })[0];
662
- var updatedMsg = (0, _lodash["default"])(messageToUpdate, messageInfo);
663
- if (updatedMsg.ack === 1) delete updatedMsg.unsentInput;
664
- updateMessage(updatedMsg);
665
- },
666
- updateWebchatSettings: function updateWebchatSettings(settings) {
667
- var themeUpdates = (0, _webchatSettings.normalizeWebchatSettings)(settings);
668
- updateTheme((0, _lodash["default"])(webchatState.theme, themeUpdates), themeUpdates);
669
- }
670
- };
671
- });
672
-
673
- var resolveCase = function resolveCase() {
674
- updateHandoff(false);
675
- updateSession(_objectSpread(_objectSpread({}, webchatState.session), {}, {
676
- _botonic_action: null
677
- }));
678
- };
679
-
680
- var prevSession = (0, _hooks.usePrevious)(webchatState.session);
681
- (0, _react.useEffect)(function () {
682
- // Resume conversation after handoff
683
- if (prevSession && prevSession._botonic_action && !webchatState.session._botonic_action) {
684
- var action = getParsedAction(prevSession._botonic_action);
685
- if (action && action.on_finish) sendPayload(action.on_finish);
686
- }
687
- }, [webchatState.session._botonic_action]);
688
-
689
- var sendText = /*#__PURE__*/function () {
690
- var _ref7 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(text, payload) {
691
- var input;
692
- return _regenerator["default"].wrap(function _callee4$(_context4) {
693
- while (1) {
694
- switch (_context4.prev = _context4.next) {
695
- case 0:
696
- if (text) {
697
- _context4.next = 2;
698
- break;
699
- }
700
-
701
- return _context4.abrupt("return");
702
-
703
- case 2:
704
- input = {
705
- type: _core.INPUT.TEXT,
706
- data: text,
707
- payload: payload
708
- };
709
- _context4.next = 5;
710
- return sendInput(input);
711
-
712
- case 5:
713
- case "end":
714
- return _context4.stop();
715
- }
716
- }
717
- }, _callee4);
718
- }));
719
-
720
- return function sendText(_x3, _x4) {
721
- return _ref7.apply(this, arguments);
722
- };
723
- }();
724
-
725
- var sendPayload = /*#__PURE__*/function () {
726
- var _ref8 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(payload) {
727
- var input;
728
- return _regenerator["default"].wrap(function _callee5$(_context5) {
729
- while (1) {
730
- switch (_context5.prev = _context5.next) {
731
- case 0:
732
- if (payload) {
733
- _context5.next = 2;
734
- break;
735
- }
736
-
737
- return _context5.abrupt("return");
738
-
739
- case 2:
740
- input = {
741
- type: _core.INPUT.POSTBACK,
742
- payload: payload
743
- };
744
- _context5.next = 5;
745
- return sendInput(input);
746
-
747
- case 5:
748
- case "end":
749
- return _context5.stop();
750
- }
751
- }
752
- }, _callee5);
753
- }));
754
-
755
- return function sendPayload(_x5) {
756
- return _ref8.apply(this, arguments);
757
- };
758
- }();
759
-
760
- var sendAttachment = /*#__PURE__*/function () {
761
- var _ref9 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(attachment) {
762
- var attachmentType, input;
763
- return _regenerator["default"].wrap(function _callee6$(_context6) {
764
- while (1) {
765
- switch (_context6.prev = _context6.next) {
766
- case 0:
767
- if (!attachment.file) {
768
- _context6.next = 8;
769
- break;
770
- }
771
-
772
- attachmentType = (0, _messageUtils.getMediaType)(attachment.file.type);
773
-
774
- if (attachmentType) {
775
- _context6.next = 4;
776
- break;
777
- }
778
-
779
- return _context6.abrupt("return");
780
-
781
- case 4:
782
- input = {
783
- type: attachmentType,
784
- data: attachment.file
785
- };
786
- _context6.next = 7;
787
- return sendInput(input);
788
-
789
- case 7:
790
- setCurrentAttachment(undefined);
791
-
792
- case 8:
793
- case "end":
794
- return _context6.stop();
795
- }
796
- }
797
- }, _callee6);
798
- }));
799
-
800
- return function sendAttachment(_x6) {
801
- return _ref9.apply(this, arguments);
802
- };
803
- }();
804
-
805
- var sendTextAreaText = function sendTextAreaText() {
806
- sendText(textArea.current.value);
807
- textArea.current.value = '';
808
- };
809
-
810
- var _onKeyDown = function onKeyDown(event) {
811
- if (event.keyCode == 13 && event.shiftKey == false) {
812
- event.preventDefault();
813
- sendTextAreaText();
814
- }
815
- };
816
-
817
- var webviewRequestContext = {
818
- getString: function getString(stringId) {
819
- return props.getString(stringId, webchatState.session);
820
- },
821
- setLocale: function setLocale(locale) {
822
- return props.getString(locale, webchatState.session);
823
- },
824
- session: webchatState.session || {},
825
- params: webchatState.webviewParams || {},
826
- closeWebview: closeWebview,
827
- defaultDelay: props.defaultDelay || 0,
828
- defaultTyping: props.defaultTyping || 0
829
- };
830
- (0, _react.useEffect)(function () {
831
- if (firstUpdate.current) {
832
- firstUpdate.current = false;
833
- return;
834
- }
835
-
836
- if (webchatState.isWebchatOpen && props.onOpen) props.onOpen();
837
-
838
- if (!webchatState.isWebchatOpen && props.onClose && !firstUpdate.current) {
839
- props.onClose();
840
- toggleEmojiPicker(false);
841
- togglePersistentMenu(false);
842
- }
843
- }, [webchatState.isWebchatOpen]);
844
- var textArea = (0, _react.useRef)();
845
-
846
- var getTriggerImage = function getTriggerImage() {
847
- var triggerImage = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.triggerButtonImage, null);
848
-
849
- if (triggerImage === null) {
850
- webchatState.theme.triggerButtonImage = _constants.WEBCHAT.DEFAULTS.LOGO;
851
- return null;
852
- }
853
-
854
- return triggerImage;
855
- };
856
-
857
- var triggerButtonStyle = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.triggerButtonStyle);
858
- var CustomTriggerButton = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.customTrigger, undefined);
859
-
860
- var triggerButton = function triggerButton() {
861
- if (CustomTriggerButton) {
862
- return /*#__PURE__*/_react["default"].createElement(CustomTriggerButton, null);
863
- }
864
-
865
- return /*#__PURE__*/_react["default"].createElement(StyledTriggerButton, {
866
- role: _constants.ROLES.TRIGGER_BUTTON,
867
- style: _objectSpread({}, triggerButtonStyle)
868
- }, getTriggerImage() && /*#__PURE__*/_react["default"].createElement(TriggerImage, {
869
- src: (0, _environment.resolveImage)(getTriggerImage())
870
- }));
871
- };
872
-
873
- var webchatMessageList = function webchatMessageList() {
874
- return /*#__PURE__*/_react["default"].createElement(_messageList.WebchatMessageList, {
875
- style: {
876
- flex: 1
877
- }
878
- }, webchatState.typing && /*#__PURE__*/_react["default"].createElement(_typingIndicator.TypingIndicator, null));
879
- };
880
-
881
- var webchatReplies = function webchatReplies() {
882
- return /*#__PURE__*/_react["default"].createElement(_replies.WebchatReplies, {
883
- replies: webchatState.replies
884
- });
885
- };
886
-
887
- var isUserInputEnabled = function isUserInputEnabled() {
888
- var isUserInputEnabled = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.enableUserInput, props.enableUserInput !== undefined ? props.enableUserInput : true);
889
- return isUserInputEnabled && !webchatState.isCoverComponentOpen;
890
- };
891
-
892
- var userInputEnabled = isUserInputEnabled();
893
- var emojiPickerEnabled = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.enableEmojiPicker, props.enableEmojiPicker);
894
- var attachmentsEnabled = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.enableAttachments, props.enableAttachments);
895
- var sendButtonEnabled = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.enableSendButton, true);
896
- var CustomSendButton = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.customSendButton, undefined);
897
- var CustomMenuButton = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.customMenuButton, undefined);
898
-
899
- var ConditionalAnimation = function ConditionalAnimation(props) {
900
- return /*#__PURE__*/_react["default"].createElement(_react2.ConditionalWrapper, {
901
- condition: animationsEnabled,
902
- wrapper: function wrapper(children) {
903
- return /*#__PURE__*/_react["default"].createElement(_framerMotion.motion.div, {
904
- whileHover: {
905
- scale: 1.2
906
- }
907
- }, children);
908
- }
909
- }, props.children);
910
- };
911
-
912
- var userInputArea = function userInputArea() {
913
- return userInputEnabled && /*#__PURE__*/_react["default"].createElement(UserInputContainer, {
914
- style: _objectSpread({}, getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.userInputStyle))
915
- }, webchatState.isEmojiPickerOpen && /*#__PURE__*/_react["default"].createElement(_emojiPicker.OpenedEmojiPicker, {
916
- height: webchatState.theme.style.height,
917
- onEmojiClick: handleSelectedEmoji,
918
- onClick: handleEmojiClick
919
- }), persistentMenuOptions && /*#__PURE__*/_react["default"].createElement(FeaturesWrapper, null, /*#__PURE__*/_react["default"].createElement(ConditionalAnimation, null, /*#__PURE__*/_react["default"].createElement("div", {
920
- onClick: handleMenu
921
- }, CustomMenuButton ? /*#__PURE__*/_react["default"].createElement(CustomMenuButton, null) : /*#__PURE__*/_react["default"].createElement(_persistentMenu.PersistentMenu, null)))), /*#__PURE__*/_react["default"].createElement(TextAreaContainer, null, /*#__PURE__*/_react["default"].createElement(_reactTextareaAutosize["default"], {
922
- name: "text",
923
- onFocus: function onFocus() {
924
- return deviceAdapter.onFocus(host);
925
- },
926
- onBlur: function onBlur() {
927
- return deviceAdapter.onBlur();
928
- },
929
- maxRows: 4,
930
- wrap: "soft",
931
- maxLength: "1000",
932
- placeholder: getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.textPlaceholder, _constants.WEBCHAT.DEFAULTS.PLACEHOLDER),
933
- autoFocus: true,
934
- inputRef: textArea,
935
- onKeyDown: function onKeyDown(e) {
936
- return _onKeyDown(e);
937
- },
938
- style: _objectSpread({
939
- display: 'flex',
940
- fontSize: deviceAdapter.fontSize(14),
941
- width: '100%',
942
- border: 'none',
943
- resize: 'none',
944
- overflow: 'auto',
945
- outline: 'none',
946
- flex: '1 1 auto',
947
- padding: 10,
948
- paddingLeft: persistentMenuOptions ? 0 : 10,
949
- fontFamily: 'inherit'
950
- }, getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.userInputBoxStyle))
951
- })), /*#__PURE__*/_react["default"].createElement(FeaturesWrapper, null, emojiPickerEnabled && /*#__PURE__*/_react["default"].createElement(ConditionalAnimation, null, /*#__PURE__*/_react["default"].createElement(_emojiPicker.EmojiPicker, {
952
- onClick: handleEmojiClick
953
- })), attachmentsEnabled && /*#__PURE__*/_react["default"].createElement(ConditionalAnimation, null, /*#__PURE__*/_react["default"].createElement(_attachment.Attachment, {
954
- onChange: handleAttachment,
955
- accept: (0, _messageUtils.getFullMimeWhitelist)().join(',')
956
- })), (sendButtonEnabled || CustomSendButton) && /*#__PURE__*/_react["default"].createElement(ConditionalAnimation, null, /*#__PURE__*/_react["default"].createElement("div", {
957
- onClick: sendTextAreaText
958
- }, CustomSendButton ? /*#__PURE__*/_react["default"].createElement(CustomSendButton, null) : /*#__PURE__*/_react["default"].createElement(_sendButton.SendButton, null)))));
959
- };
960
-
961
- var webchatWebview = function webchatWebview() {
962
- return /*#__PURE__*/_react["default"].createElement(_contexts.RequestContext.Provider, {
963
- value: webviewRequestContext
964
- }, /*#__PURE__*/_react["default"].createElement(_webview.WebviewContainer, {
965
- style: _objectSpread(_objectSpread({}, getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.webviewStyle)), mobileStyle),
966
- webview: webchatState.webview
967
- }));
968
- };
969
-
970
- var mobileStyle = {};
971
-
972
- if ((0, _core.isMobile)(getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.mobileBreakpoint))) {
973
- mobileStyle = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.mobileStyle) || {
974
- width: '100%',
975
- height: '100%',
976
- right: 0,
977
- bottom: 0,
978
- borderRadius: 0
979
- };
980
- }
981
-
982
- (0, _react.useEffect)(function () {
983
- // Prod mode
984
- saveWebchatState(webchatState);
985
- (0, _dom.scrollToBottom)({
986
- host: host
987
- });
988
- }, [webchatState.themeUpdates]); // Only needed for dev/serve mode
989
-
990
- var updateWebchatDevSettings = function updateWebchatDevSettings(settings) {
991
- // eslint-disable-next-line react-hooks/rules-of-hooks
992
- (0, _react.useEffect)(function () {
993
- var themeUpdates = (0, _webchatSettings.normalizeWebchatSettings)(settings);
994
- updateTheme((0, _lodash["default"])(webchatState.theme, themeUpdates), themeUpdates);
995
- }, [webchatState.messagesJSON]);
996
- };
997
-
998
- var DarkenBackground = function DarkenBackground(_ref10) {
999
- var component = _ref10.component;
1000
- return /*#__PURE__*/_react["default"].createElement("div", null, darkBackgroundMenu && /*#__PURE__*/_react["default"].createElement(DarkBackgroundMenu, {
1001
- style: {
1002
- borderRadius: webchatState.theme.style.borderRadius
1003
- }
1004
- }), component);
1005
- };
1006
-
1007
- var WebchatComponent = /*#__PURE__*/_react["default"].createElement(_contexts.WebchatContext.Provider, {
1008
- value: {
1009
- sendText: sendText,
1010
- sendAttachment: sendAttachment,
1011
- sendPayload: sendPayload,
1012
- sendInput: sendInput,
1013
- openWebview: openWebview,
1014
- resolveCase: resolveCase,
1015
- webchatState: webchatState,
1016
- getThemeProperty: getThemeProperty,
1017
- addMessage: addMessage,
1018
- toggleWebchat: _toggleWebchat,
1019
- updateMessage: updateMessage,
1020
- updateReplies: updateReplies,
1021
- updateLatestInput: updateLatestInput,
1022
- updateUser: updateSessionWithUser,
1023
- updateWebchatDevSettings: updateWebchatDevSettings
1024
- }
1025
- }, !webchatState.isWebchatOpen && /*#__PURE__*/_react["default"].createElement("div", {
1026
- onClick: function onClick(event) {
1027
- _toggleWebchat(true);
1028
-
1029
- event.preventDefault();
1030
- }
1031
- }, triggerButton()), webchatState.isWebchatOpen && /*#__PURE__*/_react["default"].createElement(StyledWebchat // TODO: Distinguis between multiple instances of webchat, e.g. `${uniqueId}-botonic-webchat`
1032
- , {
1033
- role: _constants.ROLES.WEBCHAT,
1034
- id: _constants.WEBCHAT.DEFAULTS.ID,
1035
- width: webchatState.width,
1036
- height: webchatState.height,
1037
- style: _objectSpread(_objectSpread({}, webchatState.theme.style), mobileStyle)
1038
- }, /*#__PURE__*/_react["default"].createElement(_header.StyledWebchatHeader, {
1039
- onCloseClick: function onCloseClick() {
1040
- _toggleWebchat(false);
1041
- }
1042
- }), webchatState.error.message && /*#__PURE__*/_react["default"].createElement(ErrorMessageContainer, null, /*#__PURE__*/_react["default"].createElement(ErrorMessage, null, webchatState.error.message)), webchatMessageList(), webchatState.replies && Object.keys(webchatState.replies).length > 0 && webchatReplies(), webchatState.isPersistentMenuOpen && /*#__PURE__*/_react["default"].createElement(DarkenBackground, {
1043
- component: persistentMenu()
1044
- }), !webchatState.handoff && userInputArea(), webchatState.webview && webchatWebview(), webchatState.isCoverComponentOpen && coverComponent()));
1045
-
1046
- return props.shadowDOM ? /*#__PURE__*/_react["default"].createElement(_styledComponents.StyleSheetManager, {
1047
- target: host
1048
- }, WebchatComponent) : WebchatComponent;
1049
- });
1050
- exports.Webchat = Webchat;
1051
- //# sourceMappingURL=webchat.js.map