@botonic/react 0.20.1-alpha.1 → 0.20.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/app.js +4 -3
- package/lib/app.js.map +1 -1
- package/lib/components/button.js +22 -2
- package/lib/components/button.js.map +1 -1
- package/lib/components/buttons-disabler.js +2 -2
- package/lib/components/carousel.js +2 -2
- package/lib/components/custom-message.js +2 -2
- package/lib/components/document.js +2 -2
- package/lib/components/image.js +28 -32
- package/lib/components/image.js.map +1 -1
- package/lib/components/message.js +2 -2
- package/lib/components/multichannel/facebook/facebook.js +2 -2
- package/lib/components/reply.js +2 -2
- package/lib/components/subtitle.js +2 -2
- package/lib/components/text.js +2 -2
- package/lib/components/timestamps.js +2 -2
- package/lib/components/title.js +2 -2
- package/lib/constants.js +201 -0
- package/lib/constants.js.map +1 -0
- package/lib/contexts.js +57 -0
- package/lib/contexts.js.map +1 -0
- package/lib/dev-app.js +241 -0
- package/lib/dev-app.js.map +1 -0
- package/lib/index.d.ts +241 -0
- package/lib/index.js +131 -0
- package/lib/index.js.map +1 -0
- package/lib/message-utils.js +149 -0
- package/lib/message-utils.js.map +1 -0
- package/lib/msg-to-botonic.js +199 -0
- package/lib/msg-to-botonic.js.map +1 -0
- package/lib/node-app.js +97 -0
- package/lib/node-app.js.map +1 -0
- package/lib/react-bot.js +167 -0
- package/lib/react-bot.js.map +1 -0
- package/lib/util/dom.js +84 -0
- package/lib/util/dom.js.map +1 -0
- package/lib/util/environment.js +42 -0
- package/lib/util/environment.js.map +1 -0
- package/lib/util/error-boundary.js +105 -0
- package/lib/util/error-boundary.js.map +1 -0
- package/lib/util/index.d.ts +9 -0
- package/lib/util/index.js +2 -0
- package/lib/util/index.js.map +1 -0
- package/lib/util/logs.js +28 -0
- package/lib/util/logs.js.map +1 -0
- package/lib/util/objects.js +60 -0
- package/lib/util/objects.js.map +1 -0
- package/lib/util/react.js +75 -0
- package/lib/util/react.js.map +1 -0
- package/lib/util/regexs.js +31 -0
- package/lib/util/regexs.js.map +1 -0
- package/lib/util/webchat.js +92 -0
- package/lib/util/webchat.js.map +1 -0
- package/lib/webchat/actions.js +53 -0
- package/lib/webchat/actions.js.map +1 -0
- package/lib/webchat/components/attachment.js +43 -0
- package/lib/webchat/components/attachment.js.map +1 -0
- package/lib/webchat/components/common.js +33 -0
- package/lib/webchat/components/common.js.map +1 -0
- package/lib/webchat/components/emoji-picker.js +58 -0
- package/lib/webchat/components/emoji-picker.js.map +1 -0
- package/lib/webchat/components/persistent-menu.js +96 -0
- package/lib/webchat/components/persistent-menu.js.map +1 -0
- package/lib/webchat/components/send-button.js +27 -0
- package/lib/webchat/components/send-button.js.map +1 -0
- package/lib/webchat/components/styled-scrollbar.js +55 -0
- package/lib/webchat/components/styled-scrollbar.js.map +1 -0
- package/lib/webchat/components/styled-scrollbar.scss +12 -0
- package/lib/webchat/components/typing-indicator.js +27 -0
- package/lib/webchat/components/typing-indicator.js.map +1 -0
- package/lib/webchat/components/typing-indicator.scss +38 -0
- package/lib/webchat/devices/device-adapter.js +82 -0
- package/lib/webchat/devices/device-adapter.js.map +1 -0
- package/lib/webchat/devices/index.js +32 -0
- package/lib/webchat/devices/index.js.map +1 -0
- package/lib/webchat/devices/scrollbar-controller.js +152 -0
- package/lib/webchat/devices/scrollbar-controller.js.map +1 -0
- package/lib/webchat/devices/webchat-resizer.js +76 -0
- package/lib/webchat/devices/webchat-resizer.js.map +1 -0
- package/lib/webchat/header.js +116 -0
- package/lib/webchat/header.js.map +1 -0
- package/lib/webchat/hooks.js +359 -0
- package/lib/webchat/hooks.js.map +1 -0
- package/lib/webchat/index.d.ts +62 -0
- package/lib/webchat/index.js +32 -0
- package/lib/webchat/index.js.map +1 -0
- package/lib/webchat/message-list.js +88 -0
- package/lib/webchat/message-list.js.map +1 -0
- package/lib/webchat/messages-reducer.js +93 -0
- package/lib/webchat/messages-reducer.js.map +1 -0
- package/lib/webchat/replies.js +78 -0
- package/lib/webchat/replies.js.map +1 -0
- package/lib/webchat/session-view.js +106 -0
- package/lib/webchat/session-view.js.map +1 -0
- package/lib/webchat/use-storage-state-hook.js +29 -0
- package/lib/webchat/use-storage-state-hook.js.map +1 -0
- package/lib/webchat/webchat-dev.js +109 -0
- package/lib/webchat/webchat-dev.js.map +1 -0
- package/lib/webchat/webchat-reducer.js +108 -0
- package/lib/webchat/webchat-reducer.js.map +1 -0
- package/lib/webchat/webchat.js +1059 -0
- package/lib/webchat/webchat.js.map +1 -0
- package/lib/webchat/webview.js +122 -0
- package/lib/webchat/webview.js.map +1 -0
- package/lib/webchat-app.js +653 -0
- package/lib/webchat-app.js.map +1 -0
- package/lib/webchat.template.html +37 -0
- package/lib/webview.js +214 -0
- package/lib/webview.js.map +1 -0
- package/lib/webview.template.html +39 -0
- package/package.json +2 -2
- package/src/components/button.jsx +21 -1
- package/src/components/image.jsx +22 -27
- package/src/components/index.d.ts +5 -1
- package/src/constants.js +1 -0
- package/src/index.d.ts +3 -7
- package/src/index.js +0 -1
- package/src/webchat/actions.jsx +1 -1
- package/src/webchat/hooks.js +5 -5
- package/src/webchat/webchat-reducer.js +3 -3
- package/src/webchat/webchat.jsx +20 -17
- package/src/webchat-app.jsx +4 -4
- package/src/webchat/components/portal-modal/backdrop.jsx +0 -38
- package/src/webchat/components/portal-modal/constants.js +0 -7
- package/src/webchat/components/portal-modal/content.jsx +0 -10
- package/src/webchat/components/portal-modal/index.js +0 -5
- package/src/webchat/components/portal-modal/portal-modal-component.jsx +0 -72
- package/src/webchat/components/portal-modal/portal.jsx +0 -21
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/webchat/devices/scrollbar-controller.js"],"names":["debounced","delay","fn","timerId","args","clearTimeout","setTimeout","stopAtScrollLimit","element","scrollTop","scrollHeight","clientHeight","ScrollbarController","currentDevice","host","webchat","DEVICES","MOBILE","IPHONE","limitScrollBoundaries","ontouchstart","e","handleOnTouchMoveEvents","ontouchmove","onmouseover","handleOnMouseOverEvents","scrollableArea","isScrollable","visible","full","target","currentTarget","toggleOnMouseWheelEvents","parentNode","scrollableContent","hasScrollbar","onmousewheel","preventDefault","toggleOnTouchMoveEvents","frame","dStopAtScrollLimit","window","addEventListener","attachEvent"],"mappings":"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","sourcesContent":["import {\n getScrollableArea,\n getScrollableContent,\n getWebchatElement,\n} from '../../util/dom'\nimport { DEVICES, isMobileDevice } from '.'\n\nconst debounced = (delay, fn) => {\n let timerId\n return function (...args) {\n if (timerId) {\n clearTimeout(timerId)\n }\n timerId = setTimeout(() => {\n fn(...args)\n timerId = null\n }, delay)\n }\n}\n\nconst stopAtScrollLimit = element => {\n if (element.scrollTop === 0) element.scrollTop = 1\n if (element.scrollHeight - element.scrollTop === element.clientHeight)\n element.scrollTop -= 1\n}\n\nexport class ScrollbarController {\n constructor(currentDevice, host) {\n this.currentDevice = currentDevice\n this.webchat = getWebchatElement(host)\n }\n\n handleScrollEvents() {\n /*\n It handles scroll events for Mobile/Desktop.\n \"ontouchmove\" is the phone equivalent for \"onmouseover\"\n */\n if (isMobileDevice()) {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) return\n this.limitScrollBoundaries()\n this.webchat.ontouchstart = e => {\n this.handleOnTouchMoveEvents(e)\n }\n this.webchat.ontouchmove = e => {\n this.handleOnTouchMoveEvents(e)\n }\n } else {\n this.webchat.onmouseover = e => this.handleOnMouseOverEvents(e)\n }\n }\n\n hasScrollbar() {\n const scrollableArea = getScrollableArea(this.webchat)\n const isScrollable =\n scrollableArea.visible.clientHeight - scrollableArea.full.clientHeight < 0\n return isScrollable\n }\n\n handleOnMouseOverEvents(e) {\n let target = e.currentTarget\n while (target) {\n this.toggleOnMouseWheelEvents()\n target = target.parentNode\n }\n }\n\n toggleOnMouseWheelEvents() {\n const scrollableContent = getScrollableContent(this.webchat)\n if (this.hasScrollbar()) {\n scrollableContent.onmousewheel = {}\n return\n }\n scrollableContent.onmousewheel = e => e.preventDefault()\n }\n\n handleOnTouchMoveEvents(e) {\n this.toggleOnTouchMoveEvents()\n }\n\n toggleOnTouchMoveEvents() {\n if (this.hasScrollbar()) {\n this.webchat.ontouchmove = {}\n this.webchat.ontouchstart = {}\n return\n }\n this.webchat.ontouchmove = e => e.preventDefault()\n }\n\n limitScrollBoundaries() {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) return\n /*\n It adds a bounce effect when top or bottom limits of the scrollbar are reached for iOS,\n as an alternative of overscroll-behavior (https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior)\n */\n const frame = getScrollableArea(this.webchat).visible\n const dStopAtScrollLimit = debounced(100, stopAtScrollLimit)\n if (frame) {\n if (window.addEventListener) {\n frame.addEventListener('scroll', () => dStopAtScrollLimit(frame), true)\n } else if (window.attachEvent) {\n frame.attachEvent('scroll', () => dStopAtScrollLimit(frame))\n }\n }\n }\n}\n"],"file":"scrollbar-controller.js"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.WebchatResizer = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _dom = require("../../util/dom");
|
|
15
|
+
|
|
16
|
+
var _ = require(".");
|
|
17
|
+
|
|
18
|
+
var WebchatResizer = /*#__PURE__*/function () {
|
|
19
|
+
function WebchatResizer(currentDevice, host) {
|
|
20
|
+
(0, _classCallCheck2["default"])(this, WebchatResizer);
|
|
21
|
+
this.currentDevice = currentDevice;
|
|
22
|
+
this.host = host;
|
|
23
|
+
this.webchat = (0, _dom.getWebchatElement)(host);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
(0, _createClass2["default"])(WebchatResizer, [{
|
|
27
|
+
key: "onFocus",
|
|
28
|
+
value: function onFocus(onKeyboardShownFn) {
|
|
29
|
+
var _this = this;
|
|
30
|
+
|
|
31
|
+
if (this.currentDevice !== _.DEVICES.MOBILE.IPHONE) return;
|
|
32
|
+
/*
|
|
33
|
+
Based on Tip #4 from https://blog.opendigerati.com/the-eccentric-ways-of-ios-safari-with-the-keyboard-b5aa3f34228d,
|
|
34
|
+
taking window.innerHeight as the amount of pixels the virtual keyboard adds
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
var waitUntilKeyboardIsShown = 400;
|
|
38
|
+
|
|
39
|
+
var calculateNewWebchatElementHeight = function calculateNewWebchatElementHeight() {
|
|
40
|
+
var webchatHeight = _this.webchat.clientHeight; // Some iOS versions keep track of this height with VisualViewport API: https://stackoverflow.com/a/59056851
|
|
41
|
+
|
|
42
|
+
var keyboardOffset = window.visualViewport && window.visualViewport.height || window.innerHeight;
|
|
43
|
+
var newWebchatPercentualHeight = keyboardOffset / webchatHeight;
|
|
44
|
+
|
|
45
|
+
var toTwoDecimal = function toTwoDecimal(toRound) {
|
|
46
|
+
return Math.round(toRound * 100) / 100;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
newWebchatPercentualHeight = toTwoDecimal(newWebchatPercentualHeight) * 100;
|
|
50
|
+
return newWebchatPercentualHeight;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
setTimeout(function () {
|
|
54
|
+
_this.setWebchatElementHeight("".concat(calculateNewWebchatElementHeight(), "%"));
|
|
55
|
+
|
|
56
|
+
(0, _dom.scrollToBottom)(_this.host);
|
|
57
|
+
onKeyboardShownFn();
|
|
58
|
+
}, waitUntilKeyboardIsShown);
|
|
59
|
+
}
|
|
60
|
+
}, {
|
|
61
|
+
key: "onBlur",
|
|
62
|
+
value: function onBlur() {
|
|
63
|
+
if (this.currentDevice !== _.DEVICES.MOBILE.IPHONE) return;
|
|
64
|
+
this.setWebchatElementHeight('100%');
|
|
65
|
+
}
|
|
66
|
+
}, {
|
|
67
|
+
key: "setWebchatElementHeight",
|
|
68
|
+
value: function setWebchatElementHeight(newHeight) {
|
|
69
|
+
this.webchat.style.height = newHeight;
|
|
70
|
+
}
|
|
71
|
+
}]);
|
|
72
|
+
return WebchatResizer;
|
|
73
|
+
}();
|
|
74
|
+
|
|
75
|
+
exports.WebchatResizer = WebchatResizer;
|
|
76
|
+
//# sourceMappingURL=webchat-resizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/webchat/devices/webchat-resizer.js"],"names":["WebchatResizer","currentDevice","host","webchat","onKeyboardShownFn","DEVICES","MOBILE","IPHONE","waitUntilKeyboardIsShown","calculateNewWebchatElementHeight","webchatHeight","clientHeight","keyboardOffset","window","visualViewport","height","innerHeight","newWebchatPercentualHeight","toTwoDecimal","toRound","Math","round","setTimeout","setWebchatElementHeight","newHeight","style"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;IAEaA,c;AACX,0BAAYC,aAAZ,EAA2BC,IAA3B,EAAiC;AAAA;AAC/B,SAAKD,aAAL,GAAqBA,aAArB;AACA,SAAKC,IAAL,GAAYA,IAAZ;AACA,SAAKC,OAAL,GAAe,4BAAkBD,IAAlB,CAAf;AACD;;;;WAED,iBAAQE,iBAAR,EAA2B;AAAA;;AACzB,UAAI,KAAKH,aAAL,KAAuBI,UAAQC,MAAR,CAAeC,MAA1C,EAAkD;AAClD;AACJ;AACA;AACA;;AACI,UAAMC,wBAAwB,GAAG,GAAjC;;AACA,UAAMC,gCAAgC,GAAG,SAAnCA,gCAAmC,GAAM;AAC7C,YAAMC,aAAa,GAAG,KAAI,CAACP,OAAL,CAAaQ,YAAnC,CAD6C,CAE7C;;AACA,YAAMC,cAAc,GACjBC,MAAM,CAACC,cAAP,IAAyBD,MAAM,CAACC,cAAP,CAAsBC,MAAhD,IACAF,MAAM,CAACG,WAFT;AAGA,YAAIC,0BAA0B,GAAGL,cAAc,GAAGF,aAAlD;;AACA,YAAMQ,YAAY,GAAG,SAAfA,YAAe,CAAAC,OAAO;AAAA,iBAAIC,IAAI,CAACC,KAAL,CAAWF,OAAO,GAAG,GAArB,IAA4B,GAAhC;AAAA,SAA5B;;AACAF,QAAAA,0BAA0B,GACxBC,YAAY,CAACD,0BAAD,CAAZ,GAA2C,GAD7C;AAEA,eAAOA,0BAAP;AACD,OAXD;;AAYAK,MAAAA,UAAU,CAAC,YAAM;AACf,QAAA,KAAI,CAACC,uBAAL,WAAgCd,gCAAgC,EAAhE;;AACA,iCAAe,KAAI,CAACP,IAApB;AACAE,QAAAA,iBAAiB;AAClB,OAJS,EAIPI,wBAJO,CAAV;AAKD;;;WAED,kBAAS;AACP,UAAI,KAAKP,aAAL,KAAuBI,UAAQC,MAAR,CAAeC,MAA1C,EAAkD;AAClD,WAAKgB,uBAAL,CAA6B,MAA7B;AACD;;;WAED,iCAAwBC,SAAxB,EAAmC;AACjC,WAAKrB,OAAL,CAAasB,KAAb,CAAmBV,MAAnB,GAA4BS,SAA5B;AACD","sourcesContent":["import { getWebchatElement, scrollToBottom } from '../../util/dom'\nimport { DEVICES } from '.'\n\nexport class WebchatResizer {\n constructor(currentDevice, host) {\n this.currentDevice = currentDevice\n this.host = host\n this.webchat = getWebchatElement(host)\n }\n\n onFocus(onKeyboardShownFn) {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) return\n /*\n Based on Tip #4 from https://blog.opendigerati.com/the-eccentric-ways-of-ios-safari-with-the-keyboard-b5aa3f34228d,\n taking window.innerHeight as the amount of pixels the virtual keyboard adds\n */\n const waitUntilKeyboardIsShown = 400\n const calculateNewWebchatElementHeight = () => {\n const webchatHeight = this.webchat.clientHeight\n // Some iOS versions keep track of this height with VisualViewport API: https://stackoverflow.com/a/59056851\n const keyboardOffset =\n (window.visualViewport && window.visualViewport.height) ||\n window.innerHeight\n let newWebchatPercentualHeight = keyboardOffset / webchatHeight\n const toTwoDecimal = toRound => Math.round(toRound * 100) / 100\n newWebchatPercentualHeight =\n toTwoDecimal(newWebchatPercentualHeight) * 100\n return newWebchatPercentualHeight\n }\n setTimeout(() => {\n this.setWebchatElementHeight(`${calculateNewWebchatElementHeight()}%`)\n scrollToBottom(this.host)\n onKeyboardShownFn()\n }, waitUntilKeyboardIsShown)\n }\n\n onBlur() {\n if (this.currentDevice !== DEVICES.MOBILE.IPHONE) return\n this.setWebchatElementHeight('100%')\n }\n\n setWebchatElementHeight(newHeight) {\n this.webchat.style.height = newHeight\n }\n}\n"],"file":"webchat-resizer.js"}
|
|
@@ -0,0 +1,116 @@
|
|
|
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.WebchatHeader = exports.StyledWebchatHeader = exports.DefaultHeader = void 0;
|
|
11
|
+
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
|
|
14
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
15
|
+
|
|
16
|
+
var _framerMotion = require("framer-motion");
|
|
17
|
+
|
|
18
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
19
|
+
|
|
20
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
21
|
+
|
|
22
|
+
var _constants = require("../constants");
|
|
23
|
+
|
|
24
|
+
var _contexts = require("../contexts");
|
|
25
|
+
|
|
26
|
+
var _environment = require("../util/environment");
|
|
27
|
+
|
|
28
|
+
var _react2 = require("../util/react");
|
|
29
|
+
|
|
30
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
|
|
31
|
+
|
|
32
|
+
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); }
|
|
33
|
+
|
|
34
|
+
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; }
|
|
35
|
+
|
|
36
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
37
|
+
|
|
38
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
39
|
+
|
|
40
|
+
var Header = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n background: linear-gradient(\n 90deg,\n ", " 0%,\n ", " 100%\n );\n height: 55px;\n border-radius: ", ";\n z-index: 2;\n"])), _constants.COLORS.BLEACHED_CEDAR_PURPLE, function (props) {
|
|
41
|
+
return props.color;
|
|
42
|
+
}, _constants.WEBCHAT.DEFAULTS.BORDER_RADIUS_TOP_CORNERS);
|
|
43
|
+
|
|
44
|
+
var ImageContainer = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 10px;\n align-items: center;\n"])));
|
|
45
|
+
|
|
46
|
+
var Image = _styledComponents["default"].img(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n width: 32px;\n border-radius: 50%;\n"])));
|
|
47
|
+
|
|
48
|
+
var TextContainer = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1 1 auto;\n"])));
|
|
49
|
+
|
|
50
|
+
var Title = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n font-family: inherit;\n font-size: 15px;\n font-weight: bold;\n color: ", ";\n"])), _constants.COLORS.SOLID_WHITE);
|
|
51
|
+
|
|
52
|
+
var Subtitle = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n font-family: inherit;\n font-size: 11px;\n color: ", ";\n"])), _constants.COLORS.SOLID_WHITE);
|
|
53
|
+
|
|
54
|
+
var CloseHeader = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 0px 16px;\n cursor: pointer;\n color: ", ";\n font-family: inherit;\n font-size: 36px;\n"])), _constants.COLORS.SOLID_WHITE);
|
|
55
|
+
|
|
56
|
+
var DefaultHeader = function DefaultHeader(props) {
|
|
57
|
+
var getThemeProperty = props.getThemeProperty;
|
|
58
|
+
var animationsEnabled = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.enableAnimations, true);
|
|
59
|
+
var headerImage = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.headerImage, getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.brandImage, _constants.WEBCHAT.DEFAULTS.LOGO));
|
|
60
|
+
var headerTitle = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.headerTitle, _constants.WEBCHAT.DEFAULTS.TITLE);
|
|
61
|
+
var headerSubtitle = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.headerSubtitle, '');
|
|
62
|
+
return /*#__PURE__*/_react["default"].createElement(Header, {
|
|
63
|
+
role: _constants.ROLES.HEADER,
|
|
64
|
+
color: props.color,
|
|
65
|
+
style: _objectSpread({}, getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.headerStyle))
|
|
66
|
+
}, headerImage && /*#__PURE__*/_react["default"].createElement(ImageContainer, null, /*#__PURE__*/_react["default"].createElement(Image, {
|
|
67
|
+
src: (0, _environment.resolveImage)(headerImage)
|
|
68
|
+
})), /*#__PURE__*/_react["default"].createElement(TextContainer, {
|
|
69
|
+
ml: headerImage ? '0px' : '16px'
|
|
70
|
+
}, /*#__PURE__*/_react["default"].createElement(Title, {
|
|
71
|
+
mb: headerSubtitle ? '6px' : '0px'
|
|
72
|
+
}, headerTitle), /*#__PURE__*/_react["default"].createElement(Subtitle, null, headerSubtitle)), /*#__PURE__*/_react["default"].createElement(_react2.ConditionalWrapper, {
|
|
73
|
+
condition: animationsEnabled,
|
|
74
|
+
wrapper: function wrapper(children) {
|
|
75
|
+
return /*#__PURE__*/_react["default"].createElement(_framerMotion.motion.div, {
|
|
76
|
+
whileHover: {
|
|
77
|
+
scale: 1.2
|
|
78
|
+
}
|
|
79
|
+
}, children);
|
|
80
|
+
}
|
|
81
|
+
}, /*#__PURE__*/_react["default"].createElement(CloseHeader, {
|
|
82
|
+
onClick: props.onCloseClick
|
|
83
|
+
}, "\u2A2F")));
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
exports.DefaultHeader = DefaultHeader;
|
|
87
|
+
|
|
88
|
+
var WebchatHeader = function WebchatHeader(props) {
|
|
89
|
+
var _useContext = (0, _react.useContext)(_contexts.WebchatContext),
|
|
90
|
+
webchatState = _useContext.webchatState,
|
|
91
|
+
getThemeProperty = _useContext.getThemeProperty;
|
|
92
|
+
|
|
93
|
+
var handleCloseWebchat = function handleCloseWebchat(event) {
|
|
94
|
+
props.onCloseClick(event.target.value);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
var CustomHeader = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.customHeader);
|
|
98
|
+
|
|
99
|
+
if (CustomHeader) {
|
|
100
|
+
return /*#__PURE__*/_react["default"].createElement(CustomHeader, {
|
|
101
|
+
onCloseClick: handleCloseWebchat
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return /*#__PURE__*/_react["default"].createElement(DefaultHeader, {
|
|
106
|
+
webchatState: webchatState,
|
|
107
|
+
getThemeProperty: getThemeProperty,
|
|
108
|
+
color: getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.brandColor, _constants.COLORS.BOTONIC_BLUE),
|
|
109
|
+
onCloseClick: handleCloseWebchat
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
exports.WebchatHeader = WebchatHeader;
|
|
114
|
+
var StyledWebchatHeader = (0, _styledComponents["default"])(WebchatHeader)(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n border-radius: 8px 8px 0px 0px;\n box-shadow: ", " 0px 2px 5px;\n height: 36px;\n flex: none;\n"])), _constants.COLORS.PIGEON_POST_BLUE_ALPHA_0_5);
|
|
115
|
+
exports.StyledWebchatHeader = StyledWebchatHeader;
|
|
116
|
+
//# sourceMappingURL=header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/webchat/header.jsx"],"names":["Header","styled","div","COLORS","BLEACHED_CEDAR_PURPLE","props","color","WEBCHAT","DEFAULTS","BORDER_RADIUS_TOP_CORNERS","ImageContainer","Image","img","TextContainer","Title","SOLID_WHITE","Subtitle","CloseHeader","DefaultHeader","getThemeProperty","animationsEnabled","CUSTOM_PROPERTIES","enableAnimations","headerImage","brandImage","LOGO","headerTitle","TITLE","headerSubtitle","ROLES","HEADER","headerStyle","children","scale","onCloseClick","WebchatHeader","WebchatContext","webchatState","handleCloseWebchat","event","target","value","CustomHeader","customHeader","brandColor","BOTONIC_BLUE","StyledWebchatHeader","PIGEON_POST_BLUE_ALPHA_0_5"],"mappings":"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","sourcesContent":["import { motion } from 'framer-motion'\nimport React, { useContext } from 'react'\nimport styled from 'styled-components'\n\nimport { COLORS, ROLES, WEBCHAT } from '../constants'\nimport { WebchatContext } from '../contexts'\nimport { resolveImage } from '../util/environment'\nimport { ConditionalWrapper } from '../util/react'\n\nconst Header = styled.div`\n display: flex;\n background: linear-gradient(\n 90deg,\n ${COLORS.BLEACHED_CEDAR_PURPLE} 0%,\n ${props => props.color} 100%\n );\n height: 55px;\n border-radius: ${WEBCHAT.DEFAULTS.BORDER_RADIUS_TOP_CORNERS};\n z-index: 2;\n`\n\nconst ImageContainer = styled.div`\n padding: 10px;\n align-items: center;\n`\n\nconst Image = styled.img`\n width: 32px;\n border-radius: 50%;\n`\n\nconst TextContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1 1 auto;\n`\n\nconst Title = styled.div`\n display: flex;\n font-family: inherit;\n font-size: 15px;\n font-weight: bold;\n color: ${COLORS.SOLID_WHITE};\n`\n\nconst Subtitle = styled.div`\n display: flex;\n font-family: inherit;\n font-size: 11px;\n color: ${COLORS.SOLID_WHITE};\n`\n\nconst CloseHeader = styled.div`\n padding: 0px 16px;\n cursor: pointer;\n color: ${COLORS.SOLID_WHITE};\n font-family: inherit;\n font-size: 36px;\n`\n\nexport const DefaultHeader = props => {\n const { getThemeProperty } = props\n const animationsEnabled = getThemeProperty(\n WEBCHAT.CUSTOM_PROPERTIES.enableAnimations,\n true\n )\n const headerImage = getThemeProperty(\n WEBCHAT.CUSTOM_PROPERTIES.headerImage,\n getThemeProperty(\n WEBCHAT.CUSTOM_PROPERTIES.brandImage,\n WEBCHAT.DEFAULTS.LOGO\n )\n )\n\n const headerTitle = getThemeProperty(\n WEBCHAT.CUSTOM_PROPERTIES.headerTitle,\n WEBCHAT.DEFAULTS.TITLE\n )\n const headerSubtitle = getThemeProperty(\n WEBCHAT.CUSTOM_PROPERTIES.headerSubtitle,\n ''\n )\n\n return (\n <Header\n role={ROLES.HEADER}\n color={props.color}\n style={{ ...getThemeProperty(WEBCHAT.CUSTOM_PROPERTIES.headerStyle) }}\n >\n {headerImage && (\n <ImageContainer>\n <Image src={resolveImage(headerImage)} />\n </ImageContainer>\n )}\n <TextContainer ml={headerImage ? '0px' : '16px'}>\n <Title mb={headerSubtitle ? '6px' : '0px'}>{headerTitle}</Title>\n <Subtitle>{headerSubtitle}</Subtitle>\n </TextContainer>\n <ConditionalWrapper\n condition={animationsEnabled}\n wrapper={children => (\n <motion.div whileHover={{ scale: 1.2 }}>{children}</motion.div>\n )}\n >\n <CloseHeader onClick={props.onCloseClick}>⨯</CloseHeader>\n </ConditionalWrapper>\n </Header>\n )\n}\n\nexport const WebchatHeader = props => {\n const { webchatState, getThemeProperty } = useContext(WebchatContext)\n\n const handleCloseWebchat = event => {\n props.onCloseClick(event.target.value)\n }\n const CustomHeader = getThemeProperty(WEBCHAT.CUSTOM_PROPERTIES.customHeader)\n if (CustomHeader) {\n return <CustomHeader onCloseClick={handleCloseWebchat} />\n }\n return (\n <DefaultHeader\n webchatState={webchatState}\n getThemeProperty={getThemeProperty}\n color={getThemeProperty(\n WEBCHAT.CUSTOM_PROPERTIES.brandColor,\n COLORS.BOTONIC_BLUE\n )}\n onCloseClick={handleCloseWebchat}\n />\n )\n}\n\nexport const StyledWebchatHeader = styled(WebchatHeader)`\n border-radius: 8px 8px 0px 0px;\n box-shadow: ${COLORS.PIGEON_POST_BLUE_ALPHA_0_5} 0px 2px 5px;\n height: 36px;\n flex: none;\n`\n"],"file":"header.js"}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useComponentVisible = useComponentVisible;
|
|
9
|
+
exports.useComponentWillMount = void 0;
|
|
10
|
+
exports.usePrevious = usePrevious;
|
|
11
|
+
exports.useTyping = useTyping;
|
|
12
|
+
exports.useWebchat = useWebchat;
|
|
13
|
+
exports.webchatInitialState = void 0;
|
|
14
|
+
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
|
|
17
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
18
|
+
|
|
19
|
+
var _react = require("react");
|
|
20
|
+
|
|
21
|
+
var _constants = require("../constants");
|
|
22
|
+
|
|
23
|
+
var _dom = require("../util/dom");
|
|
24
|
+
|
|
25
|
+
var _actions = require("./actions");
|
|
26
|
+
|
|
27
|
+
var _webchatReducer = require("./webchat-reducer");
|
|
28
|
+
|
|
29
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
30
|
+
|
|
31
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
32
|
+
|
|
33
|
+
var webchatInitialState = {
|
|
34
|
+
width: _constants.WEBCHAT.DEFAULTS.WIDTH,
|
|
35
|
+
height: _constants.WEBCHAT.DEFAULTS.HEIGHT,
|
|
36
|
+
messagesJSON: [],
|
|
37
|
+
messagesComponents: [],
|
|
38
|
+
replies: [],
|
|
39
|
+
latestInput: {},
|
|
40
|
+
typing: false,
|
|
41
|
+
webview: null,
|
|
42
|
+
webviewParams: null,
|
|
43
|
+
session: {
|
|
44
|
+
user: null
|
|
45
|
+
},
|
|
46
|
+
lastRoutePath: null,
|
|
47
|
+
handoff: false,
|
|
48
|
+
theme: {
|
|
49
|
+
headerTitle: _constants.WEBCHAT.DEFAULTS.TITLE,
|
|
50
|
+
brandColor: _constants.COLORS.BOTONIC_BLUE,
|
|
51
|
+
brandImage: _constants.WEBCHAT.DEFAULTS.LOGO,
|
|
52
|
+
triggerButtonImage: undefined,
|
|
53
|
+
textPlaceholder: _constants.WEBCHAT.DEFAULTS.PLACEHOLDER,
|
|
54
|
+
style: {
|
|
55
|
+
fontFamily: _constants.WEBCHAT.DEFAULTS.FONT_FAMILY
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
themeUpdates: {},
|
|
59
|
+
error: {},
|
|
60
|
+
online: true,
|
|
61
|
+
devSettings: {
|
|
62
|
+
keepSessionOnReload: false
|
|
63
|
+
},
|
|
64
|
+
isWebchatOpen: false,
|
|
65
|
+
isEmojiPickerOpen: false,
|
|
66
|
+
isPersistentMenuOpen: false,
|
|
67
|
+
isCoverComponentOpen: false,
|
|
68
|
+
isCustomComponentRendered: false,
|
|
69
|
+
lastMessageUpdate: undefined,
|
|
70
|
+
currentAttachment: undefined,
|
|
71
|
+
jwt: null
|
|
72
|
+
};
|
|
73
|
+
exports.webchatInitialState = webchatInitialState;
|
|
74
|
+
|
|
75
|
+
function useWebchat() {
|
|
76
|
+
var _useReducer = (0, _react.useReducer)(_webchatReducer.webchatReducer, webchatInitialState),
|
|
77
|
+
_useReducer2 = (0, _slicedToArray2["default"])(_useReducer, 2),
|
|
78
|
+
webchatState = _useReducer2[0],
|
|
79
|
+
webchatDispatch = _useReducer2[1];
|
|
80
|
+
|
|
81
|
+
var addMessage = function addMessage(message) {
|
|
82
|
+
return webchatDispatch({
|
|
83
|
+
type: _actions.ADD_MESSAGE,
|
|
84
|
+
payload: message
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
var addMessageComponent = function addMessageComponent(message) {
|
|
89
|
+
return webchatDispatch({
|
|
90
|
+
type: _actions.ADD_MESSAGE_COMPONENT,
|
|
91
|
+
payload: message
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
var updateMessage = function updateMessage(message) {
|
|
96
|
+
return webchatDispatch({
|
|
97
|
+
type: _actions.UPDATE_MESSAGE,
|
|
98
|
+
payload: message
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
var updateReplies = function updateReplies(replies) {
|
|
103
|
+
return webchatDispatch({
|
|
104
|
+
type: _actions.UPDATE_REPLIES,
|
|
105
|
+
payload: replies
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
var updateLatestInput = function updateLatestInput(input) {
|
|
110
|
+
return webchatDispatch({
|
|
111
|
+
type: _actions.UPDATE_LATEST_INPUT,
|
|
112
|
+
payload: input
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
var updateTyping = function updateTyping(typing) {
|
|
117
|
+
return webchatDispatch({
|
|
118
|
+
type: _actions.UPDATE_TYPING,
|
|
119
|
+
payload: typing
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
var updateWebview = function updateWebview(webview, params) {
|
|
124
|
+
return webchatDispatch({
|
|
125
|
+
type: _actions.UPDATE_WEBVIEW,
|
|
126
|
+
payload: {
|
|
127
|
+
webview: webview,
|
|
128
|
+
webviewParams: params
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
var updateSession = function updateSession(session) {
|
|
134
|
+
webchatDispatch({
|
|
135
|
+
type: _actions.UPDATE_SESSION,
|
|
136
|
+
payload: session
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
var updateLastRoutePath = function updateLastRoutePath(path) {
|
|
141
|
+
return webchatDispatch({
|
|
142
|
+
type: _actions.UPDATE_LAST_ROUTE_PATH,
|
|
143
|
+
payload: path
|
|
144
|
+
});
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
var updateHandoff = function updateHandoff(handoff) {
|
|
148
|
+
return webchatDispatch({
|
|
149
|
+
type: _actions.UPDATE_HANDOFF,
|
|
150
|
+
payload: handoff
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
var updateTheme = function updateTheme(theme) {
|
|
155
|
+
var themeUpdates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
|
|
156
|
+
var payload = themeUpdates !== undefined ? {
|
|
157
|
+
theme: theme,
|
|
158
|
+
themeUpdates: themeUpdates
|
|
159
|
+
} : {
|
|
160
|
+
theme: theme
|
|
161
|
+
};
|
|
162
|
+
webchatDispatch({
|
|
163
|
+
type: _actions.UPDATE_THEME,
|
|
164
|
+
payload: payload
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
var updateDevSettings = function updateDevSettings(settings) {
|
|
169
|
+
return webchatDispatch({
|
|
170
|
+
type: _actions.UPDATE_DEV_SETTINGS,
|
|
171
|
+
payload: settings
|
|
172
|
+
});
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
var toggleWebchat = function toggleWebchat(toggle) {
|
|
176
|
+
return webchatDispatch({
|
|
177
|
+
type: _actions.TOGGLE_WEBCHAT,
|
|
178
|
+
payload: toggle
|
|
179
|
+
});
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
var toggleEmojiPicker = function toggleEmojiPicker(toggle) {
|
|
183
|
+
return webchatDispatch({
|
|
184
|
+
type: _actions.TOGGLE_EMOJI_PICKER,
|
|
185
|
+
payload: toggle
|
|
186
|
+
});
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
var togglePersistentMenu = function togglePersistentMenu(toggle) {
|
|
190
|
+
return webchatDispatch({
|
|
191
|
+
type: _actions.TOGGLE_PERSISTENT_MENU,
|
|
192
|
+
payload: toggle
|
|
193
|
+
});
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
var toggleCoverComponent = function toggleCoverComponent(toggle) {
|
|
197
|
+
return webchatDispatch({
|
|
198
|
+
type: _actions.TOGGLE_COVER_COMPONENT,
|
|
199
|
+
payload: toggle
|
|
200
|
+
});
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
var doRenderCustomComponent = function doRenderCustomComponent(toggle) {
|
|
204
|
+
return webchatDispatch({
|
|
205
|
+
type: _actions.DO_RENDER_CUSTOM_COMPONENT,
|
|
206
|
+
payload: toggle
|
|
207
|
+
});
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
var setError = function setError(error) {
|
|
211
|
+
return webchatDispatch({
|
|
212
|
+
type: _actions.SET_ERROR,
|
|
213
|
+
payload: error
|
|
214
|
+
});
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
var setOnline = function setOnline(online) {
|
|
218
|
+
return webchatDispatch({
|
|
219
|
+
type: _actions.SET_ONLINE,
|
|
220
|
+
payload: online
|
|
221
|
+
});
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
var clearMessages = function clearMessages() {
|
|
225
|
+
webchatDispatch({
|
|
226
|
+
type: _actions.CLEAR_MESSAGES
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
var updateLastMessageDate = function updateLastMessageDate(date) {
|
|
231
|
+
webchatDispatch({
|
|
232
|
+
type: _actions.UPDATE_LAST_MESSAGE_DATE,
|
|
233
|
+
payload: date
|
|
234
|
+
});
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
var setCurrentAttachment = function setCurrentAttachment(attachment) {
|
|
238
|
+
webchatDispatch({
|
|
239
|
+
type: _actions.SET_CURRENT_ATTACHMENT,
|
|
240
|
+
payload: attachment
|
|
241
|
+
});
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
var updateJwt = function updateJwt(jwt) {
|
|
245
|
+
webchatDispatch({
|
|
246
|
+
type: _actions.UPDATE_JWT,
|
|
247
|
+
payload: jwt
|
|
248
|
+
});
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
return {
|
|
252
|
+
webchatState: webchatState,
|
|
253
|
+
webchatDispatch: webchatDispatch,
|
|
254
|
+
addMessage: addMessage,
|
|
255
|
+
addMessageComponent: addMessageComponent,
|
|
256
|
+
updateMessage: updateMessage,
|
|
257
|
+
updateReplies: updateReplies,
|
|
258
|
+
updateLatestInput: updateLatestInput,
|
|
259
|
+
updateTyping: updateTyping,
|
|
260
|
+
updateWebview: updateWebview,
|
|
261
|
+
updateSession: updateSession,
|
|
262
|
+
updateLastRoutePath: updateLastRoutePath,
|
|
263
|
+
updateHandoff: updateHandoff,
|
|
264
|
+
updateTheme: updateTheme,
|
|
265
|
+
updateDevSettings: updateDevSettings,
|
|
266
|
+
toggleWebchat: toggleWebchat,
|
|
267
|
+
toggleEmojiPicker: toggleEmojiPicker,
|
|
268
|
+
togglePersistentMenu: togglePersistentMenu,
|
|
269
|
+
toggleCoverComponent: toggleCoverComponent,
|
|
270
|
+
doRenderCustomComponent: doRenderCustomComponent,
|
|
271
|
+
setError: setError,
|
|
272
|
+
setOnline: setOnline,
|
|
273
|
+
clearMessages: clearMessages,
|
|
274
|
+
updateLastMessageDate: updateLastMessageDate,
|
|
275
|
+
setCurrentAttachment: setCurrentAttachment,
|
|
276
|
+
updateJwt: updateJwt
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
function useTyping(_ref) {
|
|
281
|
+
var webchatState = _ref.webchatState,
|
|
282
|
+
updateTyping = _ref.updateTyping,
|
|
283
|
+
updateMessage = _ref.updateMessage,
|
|
284
|
+
host = _ref.host;
|
|
285
|
+
(0, _react.useEffect)(function () {
|
|
286
|
+
var delayTimeout, typingTimeout;
|
|
287
|
+
(0, _dom.scrollToBottom)({
|
|
288
|
+
host: host
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
try {
|
|
292
|
+
var nextMsg = webchatState.messagesJSON.filter(function (m) {
|
|
293
|
+
return !m.display;
|
|
294
|
+
})[0];
|
|
295
|
+
|
|
296
|
+
if (nextMsg.delay && nextMsg.typing) {
|
|
297
|
+
delayTimeout = setTimeout(function () {
|
|
298
|
+
return updateTyping(true);
|
|
299
|
+
}, nextMsg.delay * 1000);
|
|
300
|
+
} else if (nextMsg.typing) updateTyping(true);
|
|
301
|
+
|
|
302
|
+
var totalDelay = nextMsg.delay + nextMsg.typing;
|
|
303
|
+
if (totalDelay) typingTimeout = setTimeout(function () {
|
|
304
|
+
updateMessage(_objectSpread(_objectSpread({}, nextMsg), {}, {
|
|
305
|
+
display: true
|
|
306
|
+
}));
|
|
307
|
+
updateTyping(false);
|
|
308
|
+
}, totalDelay * 1000);
|
|
309
|
+
} catch (e) {}
|
|
310
|
+
|
|
311
|
+
return function () {
|
|
312
|
+
clearTimeout(delayTimeout);
|
|
313
|
+
clearTimeout(typingTimeout);
|
|
314
|
+
};
|
|
315
|
+
}, [webchatState.messagesJSON, webchatState.typing]);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
function usePrevious(value) {
|
|
319
|
+
var ref = (0, _react.useRef)();
|
|
320
|
+
(0, _react.useEffect)(function () {
|
|
321
|
+
ref.current = value;
|
|
322
|
+
});
|
|
323
|
+
return ref.current;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
function useComponentVisible(initialIsVisible, onClickOutside) {
|
|
327
|
+
var _useState = (0, _react.useState)(initialIsVisible),
|
|
328
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
329
|
+
isComponentVisible = _useState2[0],
|
|
330
|
+
setIsComponentVisible = _useState2[1];
|
|
331
|
+
|
|
332
|
+
var ref = (0, _react.useRef)(null);
|
|
333
|
+
|
|
334
|
+
var handleClickOutside = function handleClickOutside(event) {
|
|
335
|
+
if (ref.current && !ref.current.contains(event.target)) {
|
|
336
|
+
setIsComponentVisible(false);
|
|
337
|
+
onClickOutside();
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
(0, _react.useEffect)(function () {
|
|
342
|
+
document.addEventListener('click', handleClickOutside, false);
|
|
343
|
+
return function () {
|
|
344
|
+
document.removeEventListener('click', handleClickOutside, false);
|
|
345
|
+
};
|
|
346
|
+
});
|
|
347
|
+
return {
|
|
348
|
+
ref: ref,
|
|
349
|
+
isComponentVisible: isComponentVisible,
|
|
350
|
+
setIsComponentVisible: setIsComponentVisible
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
var useComponentWillMount = function useComponentWillMount(func) {
|
|
355
|
+
(0, _react.useMemo)(func, []);
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
exports.useComponentWillMount = useComponentWillMount;
|
|
359
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/webchat/hooks.js"],"names":["webchatInitialState","width","WEBCHAT","DEFAULTS","WIDTH","height","HEIGHT","messagesJSON","messagesComponents","replies","latestInput","typing","webview","webviewParams","session","user","lastRoutePath","handoff","theme","headerTitle","TITLE","brandColor","COLORS","BOTONIC_BLUE","brandImage","LOGO","triggerButtonImage","undefined","textPlaceholder","PLACEHOLDER","style","fontFamily","FONT_FAMILY","themeUpdates","error","online","devSettings","keepSessionOnReload","isWebchatOpen","isEmojiPickerOpen","isPersistentMenuOpen","isCoverComponentOpen","isCustomComponentRendered","lastMessageUpdate","currentAttachment","jwt","useWebchat","webchatReducer","webchatState","webchatDispatch","addMessage","message","type","ADD_MESSAGE","payload","addMessageComponent","ADD_MESSAGE_COMPONENT","updateMessage","UPDATE_MESSAGE","updateReplies","UPDATE_REPLIES","updateLatestInput","input","UPDATE_LATEST_INPUT","updateTyping","UPDATE_TYPING","updateWebview","params","UPDATE_WEBVIEW","updateSession","UPDATE_SESSION","updateLastRoutePath","path","UPDATE_LAST_ROUTE_PATH","updateHandoff","UPDATE_HANDOFF","updateTheme","UPDATE_THEME","updateDevSettings","settings","UPDATE_DEV_SETTINGS","toggleWebchat","toggle","TOGGLE_WEBCHAT","toggleEmojiPicker","TOGGLE_EMOJI_PICKER","togglePersistentMenu","TOGGLE_PERSISTENT_MENU","toggleCoverComponent","TOGGLE_COVER_COMPONENT","doRenderCustomComponent","DO_RENDER_CUSTOM_COMPONENT","setError","SET_ERROR","setOnline","SET_ONLINE","clearMessages","CLEAR_MESSAGES","updateLastMessageDate","date","UPDATE_LAST_MESSAGE_DATE","setCurrentAttachment","attachment","SET_CURRENT_ATTACHMENT","updateJwt","UPDATE_JWT","useTyping","host","delayTimeout","typingTimeout","nextMsg","filter","m","display","delay","setTimeout","totalDelay","e","clearTimeout","usePrevious","value","ref","current","useComponentVisible","initialIsVisible","onClickOutside","isComponentVisible","setIsComponentVisible","handleClickOutside","event","contains","target","document","addEventListener","removeEventListener","useComponentWillMount","func"],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useReducer, useRef, useState } from 'react'\n\nimport { COLORS, WEBCHAT } from '../constants'\nimport { scrollToBottom } from '../util/dom'\nimport {\n ADD_MESSAGE,\n ADD_MESSAGE_COMPONENT,\n CLEAR_MESSAGES,\n DO_RENDER_CUSTOM_COMPONENT,\n SET_CURRENT_ATTACHMENT,\n SET_ERROR,\n SET_ONLINE,\n TOGGLE_COVER_COMPONENT,\n TOGGLE_EMOJI_PICKER,\n TOGGLE_PERSISTENT_MENU,\n TOGGLE_WEBCHAT,\n UPDATE_DEV_SETTINGS,\n UPDATE_HANDOFF,\n UPDATE_JWT,\n UPDATE_LAST_MESSAGE_DATE,\n UPDATE_LAST_ROUTE_PATH,\n UPDATE_LATEST_INPUT,\n UPDATE_MESSAGE,\n UPDATE_REPLIES,\n UPDATE_SESSION,\n UPDATE_THEME,\n UPDATE_TYPING,\n UPDATE_WEBVIEW,\n} from './actions'\nimport { webchatReducer } from './webchat-reducer'\n\nexport const webchatInitialState = {\n width: WEBCHAT.DEFAULTS.WIDTH,\n height: WEBCHAT.DEFAULTS.HEIGHT,\n messagesJSON: [],\n messagesComponents: [],\n replies: [],\n latestInput: {},\n typing: false,\n webview: null,\n webviewParams: null,\n session: { user: null },\n lastRoutePath: null,\n handoff: false,\n theme: {\n headerTitle: WEBCHAT.DEFAULTS.TITLE,\n brandColor: COLORS.BOTONIC_BLUE,\n brandImage: WEBCHAT.DEFAULTS.LOGO,\n triggerButtonImage: undefined,\n textPlaceholder: WEBCHAT.DEFAULTS.PLACEHOLDER,\n style: {\n fontFamily: WEBCHAT.DEFAULTS.FONT_FAMILY,\n },\n },\n themeUpdates: {},\n error: {},\n online: true,\n devSettings: { keepSessionOnReload: false },\n isWebchatOpen: false,\n isEmojiPickerOpen: false,\n isPersistentMenuOpen: false,\n isCoverComponentOpen: false,\n isCustomComponentRendered: false,\n lastMessageUpdate: undefined,\n currentAttachment: undefined,\n jwt: null,\n}\n\nexport function useWebchat() {\n const [webchatState, webchatDispatch] = useReducer(\n webchatReducer,\n webchatInitialState\n )\n\n const addMessage = message =>\n webchatDispatch({ type: ADD_MESSAGE, payload: message })\n const addMessageComponent = message =>\n webchatDispatch({ type: ADD_MESSAGE_COMPONENT, payload: message })\n const updateMessage = message =>\n webchatDispatch({ type: UPDATE_MESSAGE, payload: message })\n const updateReplies = replies =>\n webchatDispatch({ type: UPDATE_REPLIES, payload: replies })\n const updateLatestInput = input =>\n webchatDispatch({ type: UPDATE_LATEST_INPUT, payload: input })\n const updateTyping = typing =>\n webchatDispatch({ type: UPDATE_TYPING, payload: typing })\n const updateWebview = (webview, params) =>\n webchatDispatch({\n type: UPDATE_WEBVIEW,\n payload: { webview, webviewParams: params },\n })\n const updateSession = session => {\n webchatDispatch({\n type: UPDATE_SESSION,\n payload: session,\n })\n }\n\n const updateLastRoutePath = path =>\n webchatDispatch({\n type: UPDATE_LAST_ROUTE_PATH,\n payload: path,\n })\n const updateHandoff = handoff =>\n webchatDispatch({\n type: UPDATE_HANDOFF,\n payload: handoff,\n })\n const updateTheme = (theme, themeUpdates = undefined) => {\n const payload =\n themeUpdates !== undefined ? { theme, themeUpdates } : { theme }\n webchatDispatch({\n type: UPDATE_THEME,\n payload,\n })\n }\n const updateDevSettings = settings =>\n webchatDispatch({\n type: UPDATE_DEV_SETTINGS,\n payload: settings,\n })\n const toggleWebchat = toggle =>\n webchatDispatch({\n type: TOGGLE_WEBCHAT,\n payload: toggle,\n })\n const toggleEmojiPicker = toggle =>\n webchatDispatch({\n type: TOGGLE_EMOJI_PICKER,\n payload: toggle,\n })\n const togglePersistentMenu = toggle =>\n webchatDispatch({\n type: TOGGLE_PERSISTENT_MENU,\n payload: toggle,\n })\n const toggleCoverComponent = toggle =>\n webchatDispatch({\n type: TOGGLE_COVER_COMPONENT,\n payload: toggle,\n })\n const doRenderCustomComponent = toggle =>\n webchatDispatch({\n type: DO_RENDER_CUSTOM_COMPONENT,\n payload: toggle,\n })\n const setError = error =>\n webchatDispatch({\n type: SET_ERROR,\n payload: error,\n })\n const setOnline = online =>\n webchatDispatch({\n type: SET_ONLINE,\n payload: online,\n })\n\n const clearMessages = () => {\n webchatDispatch({\n type: CLEAR_MESSAGES,\n })\n }\n const updateLastMessageDate = date => {\n webchatDispatch({\n type: UPDATE_LAST_MESSAGE_DATE,\n payload: date,\n })\n }\n const setCurrentAttachment = attachment => {\n webchatDispatch({\n type: SET_CURRENT_ATTACHMENT,\n payload: attachment,\n })\n }\n\n const updateJwt = jwt => {\n webchatDispatch({\n type: UPDATE_JWT,\n payload: jwt,\n })\n }\n\n return {\n webchatState,\n webchatDispatch,\n addMessage,\n addMessageComponent,\n updateMessage,\n updateReplies,\n updateLatestInput,\n updateTyping,\n updateWebview,\n updateSession,\n updateLastRoutePath,\n updateHandoff,\n updateTheme,\n updateDevSettings,\n toggleWebchat,\n toggleEmojiPicker,\n togglePersistentMenu,\n toggleCoverComponent,\n doRenderCustomComponent,\n setError,\n setOnline,\n clearMessages,\n updateLastMessageDate,\n setCurrentAttachment,\n updateJwt,\n }\n}\n\nexport function useTyping({ webchatState, updateTyping, updateMessage, host }) {\n useEffect(() => {\n let delayTimeout, typingTimeout\n scrollToBottom({ host })\n try {\n const nextMsg = webchatState.messagesJSON.filter(m => !m.display)[0]\n if (nextMsg.delay && nextMsg.typing) {\n delayTimeout = setTimeout(\n () => updateTyping(true),\n nextMsg.delay * 1000\n )\n } else if (nextMsg.typing) updateTyping(true)\n const totalDelay = nextMsg.delay + nextMsg.typing\n if (totalDelay)\n typingTimeout = setTimeout(() => {\n updateMessage({ ...nextMsg, display: true })\n updateTyping(false)\n }, totalDelay * 1000)\n } catch (e) {}\n return () => {\n clearTimeout(delayTimeout)\n clearTimeout(typingTimeout)\n }\n }, [webchatState.messagesJSON, webchatState.typing])\n}\n\nexport function usePrevious(value) {\n const ref = useRef()\n useEffect(() => {\n ref.current = value\n })\n return ref.current\n}\n\nexport function useComponentVisible(initialIsVisible, onClickOutside) {\n const [isComponentVisible, setIsComponentVisible] = useState(initialIsVisible)\n const ref = useRef(null)\n const handleClickOutside = event => {\n if (ref.current && !ref.current.contains(event.target)) {\n setIsComponentVisible(false)\n onClickOutside()\n }\n }\n useEffect(() => {\n document.addEventListener('click', handleClickOutside, false)\n return () => {\n document.removeEventListener('click', handleClickOutside, false)\n }\n })\n return { ref, isComponentVisible, setIsComponentVisible }\n}\n\nexport const useComponentWillMount = func => {\n useMemo(func, [])\n}\n"],"file":"hooks.js"}
|