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