@botonic/react 0.20.1-alpha.1 → 0.20.1
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/components/image.js +6 -52
- package/lib/components/image.js.map +1 -1
- package/lib/constants.js +200 -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 +239 -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 +51 -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 +350 -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 +102 -0
- package/lib/webchat/webchat-reducer.js.map +1 -0
- package/lib/webchat/webchat.js +1041 -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 +643 -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/image.jsx +3 -37
- package/src/index.d.ts +0 -2
- package/src/index.js +0 -1
- package/src/webchat/actions.jsx +0 -1
- package/src/webchat/hooks.js +0 -8
- package/src/webchat/webchat-reducer.js +0 -4
- package/src/webchat/webchat.jsx +0 -18
- package/src/webchat-app.jsx +0 -8
- 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-app.jsx"],"names":["WebchatApp","theme","persistentMenu","coverComponent","blockInputs","enableEmojiPicker","enableAttachments","enableUserInput","enableAnimations","hostId","shadowDOM","defaultDelay","defaultTyping","storage","storageKey","onInit","onOpen","onClose","onMessage","onConnectionChange","appId","visibility","server","Boolean","console","warn","WEBCHAT","DEFAULTS","HOST_ID","webchatRef","host","id","document","getElementById","createElement","body","firstChild","insertBefore","appendChild","attachShadow","mode","node","shadowRoot","args","user","input","from","SENDERS","message","hubtypeService","postMessage","onConnectionRegained","session","messagesJSON","lastMessage","length","lastMessageId","lastMessageUpdateDate","getLastMessageUpdate","HubtypeService","onEvent","event","onServiceEvent","unsentInputs","current","getMessages","filter","msg","ack","unsentInput","action","online","setOnline","updateMessageInfo","type","updateWebchatSettings","data","setTyping","bot","addBotMessage","updateUser","addBotResponse","response","customTypes","customMessageTypes","text","INPUT","TEXT","addUserMessage","payload","POSTBACK","typing","openWebchat","closeWebchat","toggleWebchat","openCoverComponent","closeCoverComponent","toggleCoverComponent","clearMessages","resolveWebchatVisibility","msgId","messageInfo","settings","optionsAtRuntime","webchatOptions","createRootElement","onInitWebchat","onOpenWebchat","onCloseWebchat","onUserInput","webchatState","onStateChange","getWebchatVisibility","status","isOnline","undefined","isWebchatVisible","dest","isVisible","getComponent","getReactMountNode"],"mappings":"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","sourcesContent":["import { HubtypeService, INPUT } from '@botonic/core'\nimport merge from 'lodash.merge'\nimport React, { createRef } from 'react'\nimport { render } from 'react-dom'\n\nimport { SENDERS, WEBCHAT } from './constants'\nimport { msgToBotonic } from './msg-to-botonic'\nimport { isShadowDOMSupported, onDOMLoaded } from './util/dom'\nimport { Webchat } from './webchat/webchat'\n\nexport class WebchatApp {\n constructor({\n theme = {},\n persistentMenu,\n coverComponent,\n blockInputs,\n enableEmojiPicker,\n enableAttachments,\n enableUserInput,\n enableAnimations,\n hostId,\n shadowDOM,\n defaultDelay,\n defaultTyping,\n storage,\n storageKey,\n onInit,\n onOpen,\n onClose,\n onMessage,\n onConnectionChange,\n appId,\n visibility,\n server,\n }) {\n this.theme = theme\n this.persistentMenu = persistentMenu\n this.coverComponent = coverComponent\n this.blockInputs = blockInputs\n this.enableEmojiPicker = enableEmojiPicker\n this.enableAttachments = enableAttachments\n this.enableUserInput = enableUserInput\n this.enableAnimations = enableAnimations\n this.shadowDOM = Boolean(\n typeof shadowDOM === 'function' ? shadowDOM() : shadowDOM\n )\n if (this.shadowDOM && !isShadowDOMSupported()) {\n console.warn('[botonic] ShadowDOM not supported on this browser')\n this.shadowDOM = false\n }\n this.hostId = hostId || WEBCHAT.DEFAULTS.HOST_ID\n this.defaultDelay = defaultDelay\n this.defaultTyping = defaultTyping\n this.storage = storage\n this.storageKey = storageKey\n this.onInit = onInit\n this.onOpen = onOpen\n this.onClose = onClose\n this.onMessage = onMessage\n this.onConnectionChange = onConnectionChange\n this.visibility = visibility\n this.server = server\n this.webchatRef = createRef()\n this.appId = appId\n }\n\n createRootElement(host) {\n // Create root element <div id='root'> if not exists\n // Create shadowDOM to root element if needed\n if (host) {\n if (host.id && this.hostId) {\n if (host.id != this.hostId) {\n console.warn(\n `[botonic] Host ID \"${host.id}\" don't match 'hostId' option: ${this.hostId}. Using value: ${host.id}.`\n )\n this.hostId = host.id\n }\n } else if (host.id) this.hostId = host.id\n else if (this.hostId) host.id = this.hostId\n } else {\n host = document.getElementById(this.hostId)\n }\n if (!host) {\n host = document.createElement('div')\n host.id = this.hostId\n if (document.body.firstChild)\n document.body.insertBefore(host, document.body.firstChild)\n else document.body.appendChild(host)\n }\n this.host = this.shadowDOM ? host.attachShadow({ mode: 'open' }) : host\n }\n\n getReactMountNode(node) {\n if (!node) node = this.host\n return node.shadowRoot ? node.shadowRoot : node\n }\n\n onInitWebchat(...args) {\n this.onInit && this.onInit(this, ...args)\n }\n\n onOpenWebchat(...args) {\n this.onOpen && this.onOpen(this, ...args)\n }\n\n onCloseWebchat(...args) {\n this.onClose && this.onClose(this, ...args)\n }\n\n async onUserInput({ user, input }) {\n this.onMessage &&\n this.onMessage(this, { from: SENDERS.user, message: input })\n return this.hubtypeService.postMessage(user, input)\n }\n\n async onConnectionRegained() {\n return this.hubtypeService.onConnectionRegained()\n }\n\n onStateChange({ session: { user }, messagesJSON }) {\n const lastMessage = messagesJSON[messagesJSON.length - 1]\n const lastMessageId = lastMessage && lastMessage.id\n const lastMessageUpdateDate = this.getLastMessageUpdate()\n if (this.hubtypeService) {\n this.hubtypeService.lastMessageId = lastMessageId\n this.hubtypeService.lastMessageUpdateDate = lastMessageUpdateDate\n } else if (!this.hubtypeService && user) {\n this.hubtypeService = new HubtypeService({\n appId: this.appId,\n user,\n lastMessageId,\n lastMessageUpdateDate,\n onEvent: event => this.onServiceEvent(event),\n unsentInputs: () =>\n this.webchatRef.current\n .getMessages()\n .filter(msg => msg.ack === 0 && msg.unsentInput),\n server: this.server,\n })\n }\n }\n\n onServiceEvent(event) {\n if (event.action === 'connectionChange') {\n this.onConnectionChange && this.onConnectionChange(this, event.online)\n this.webchatRef.current.setOnline(event.online)\n } else if (event.action === 'update_message_info')\n this.updateMessageInfo(event.message.id, event.message)\n else if (event.message.type === 'update_webchat_settings')\n this.updateWebchatSettings(event.message.data)\n else if (event.message.type === 'sender_action')\n this.setTyping(event.message.data === 'typing_on')\n else {\n this.onMessage &&\n this.onMessage(this, { from: SENDERS.bot, message: event.message })\n this.addBotMessage(event.message)\n }\n }\n\n updateUser(user) {\n this.webchatRef.current.updateUser(user)\n }\n\n addBotMessage(message) {\n this.webchatRef.current.addBotResponse({\n response: msgToBotonic(\n message,\n (this.theme.message && this.theme.message.customTypes) ||\n this.theme.customMessageTypes\n ),\n })\n }\n\n addBotText(text) {\n this.addBotMessage({ type: INPUT.TEXT, data: text })\n }\n\n addUserMessage(message) {\n this.webchatRef.current.addUserMessage(message)\n }\n\n addUserText(text) {\n this.webchatRef.current.addUserMessage({ type: INPUT.TEXT, data: text })\n }\n\n addUserPayload(payload) {\n this.webchatRef.current.addUserMessage({ type: INPUT.POSTBACK, payload })\n }\n\n setTyping(typing) {\n this.webchatRef.current.setTyping(typing)\n }\n\n open() {\n this.webchatRef.current.openWebchat()\n }\n\n close() {\n this.webchatRef.current.closeWebchat()\n }\n\n toggle() {\n this.webchatRef.current.toggleWebchat()\n }\n\n openCoverComponent() {\n this.webchatRef.current.openCoverComponent()\n }\n\n closeCoverComponent() {\n this.webchatRef.current.closeCoverComponent()\n }\n\n toggleCoverComponent() {\n this.webchatRef.current.toggleCoverComponent()\n }\n\n getMessages() {\n return this.webchatRef.current.getMessages()\n }\n\n clearMessages() {\n this.webchatRef.current.clearMessages()\n }\n\n async getVisibility() {\n return this.resolveWebchatVisibility({\n appId: this.appId,\n visibility: this.visibility,\n })\n }\n\n getLastMessageUpdate() {\n return this.webchatRef.current.getLastMessageUpdate()\n }\n\n updateMessageInfo(msgId, messageInfo) {\n return this.webchatRef.current.updateMessageInfo(msgId, messageInfo)\n }\n\n updateWebchatSettings(settings) {\n return this.webchatRef.current.updateWebchatSettings(settings)\n }\n\n // eslint-disable-next-line complexity\n getComponent(host, optionsAtRuntime = {}) {\n let {\n theme = {},\n persistentMenu,\n coverComponent,\n blockInputs,\n enableAttachments,\n enableUserInput,\n enableAnimations,\n enableEmojiPicker,\n defaultDelay,\n defaultTyping,\n storage,\n storageKey,\n onInit,\n onOpen,\n onClose,\n onMessage,\n onConnectionChange,\n appId,\n visibility,\n server,\n hostId,\n ...webchatOptions\n } = optionsAtRuntime\n theme = merge(this.theme, theme)\n persistentMenu = persistentMenu || this.persistentMenu\n coverComponent = coverComponent || this.coverComponent\n blockInputs = blockInputs || this.blockInputs\n enableEmojiPicker = enableEmojiPicker || this.enableEmojiPicker\n enableAttachments = enableAttachments || this.enableAttachments\n enableUserInput = enableUserInput || this.enableUserInput\n enableAnimations = enableAnimations || this.enableAnimations\n defaultDelay = defaultDelay || this.defaultDelay\n defaultTyping = defaultTyping || this.defaultTyping\n storage = storage || this.storage\n storageKey = storageKey || this.storageKey\n server = server || this.server\n this.onInit = onInit || this.onInit\n this.onOpen = onOpen || this.onOpen\n this.onClose = onClose || this.onClose\n this.onMessage = onMessage || this.onMessage\n this.onConnectionChange = onConnectionChange || this.onConnectionChange\n this.visibility = visibility || this.visibility\n this.appId = appId || this.appId\n this.hostId = hostId || this.hostId\n this.createRootElement(host)\n return (\n <Webchat\n {...webchatOptions}\n ref={this.webchatRef}\n host={this.host}\n shadowDOM={this.shadowDOM}\n theme={theme}\n persistentMenu={persistentMenu}\n coverComponent={coverComponent}\n blockInputs={blockInputs}\n enableEmojiPicker={enableEmojiPicker}\n enableAttachments={enableAttachments}\n enableUserInput={enableUserInput}\n enableAnimations={enableAnimations}\n storage={storage}\n storageKey={storageKey}\n defaultDelay={defaultDelay}\n defaultTyping={defaultTyping}\n onInit={(...args) => this.onInitWebchat(...args)}\n onOpen={(...args) => this.onOpenWebchat(...args)}\n onClose={(...args) => this.onCloseWebchat(...args)}\n onUserInput={(...args) => this.onUserInput(...args)}\n onStateChange={webchatState => this.onStateChange(webchatState)}\n server={server}\n />\n )\n }\n\n async isWebchatVisible({ appId }) {\n try {\n const { status } = await HubtypeService.getWebchatVisibility({\n appId,\n })\n return status === 200\n } catch (e) {\n return false\n }\n }\n\n isOnline() {\n return this.webchatRef.current.isOnline()\n }\n\n async resolveWebchatVisibility(optionsAtRuntime) {\n let { appId, visibility } = optionsAtRuntime\n visibility = visibility || this.visibility\n if (visibility === undefined || visibility === true) return true\n if (typeof visibility === 'function' && visibility()) return true\n if (visibility === 'dynamic' && (await this.isWebchatVisible({ appId })))\n return true\n return false\n }\n\n async render(dest, optionsAtRuntime = {}) {\n onDOMLoaded(async () => {\n const isVisible = await this.resolveWebchatVisibility(optionsAtRuntime)\n if (isVisible)\n render(\n this.getComponent(dest, optionsAtRuntime),\n this.getReactMountNode(dest)\n )\n })\n }\n}\n"],"file":"webchat-app.js"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en-US">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>Botonic</title>
|
|
7
|
+
<style>
|
|
8
|
+
html,
|
|
9
|
+
body,
|
|
10
|
+
#root {
|
|
11
|
+
width: 100%;
|
|
12
|
+
height: 100%;
|
|
13
|
+
margin: 0px;
|
|
14
|
+
padding: 0px;
|
|
15
|
+
background-color: #f1f0f0;
|
|
16
|
+
}
|
|
17
|
+
#root {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
justify-content: center;
|
|
21
|
+
}
|
|
22
|
+
body::after {
|
|
23
|
+
content: '';
|
|
24
|
+
width: 200px;
|
|
25
|
+
height: 200px;
|
|
26
|
+
background-color: red;
|
|
27
|
+
}
|
|
28
|
+
</style>
|
|
29
|
+
</head>
|
|
30
|
+
<body>
|
|
31
|
+
<script type="text/javascript">
|
|
32
|
+
document.addEventListener('DOMContentLoaded', function (event) {
|
|
33
|
+
Botonic.render()
|
|
34
|
+
})
|
|
35
|
+
</script>
|
|
36
|
+
</body>
|
|
37
|
+
</html>
|
package/lib/webview.js
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.WebviewApp = void 0;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
16
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
17
|
+
|
|
18
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
19
|
+
|
|
20
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
21
|
+
|
|
22
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
23
|
+
|
|
24
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
25
|
+
|
|
26
|
+
var _core = require("@botonic/core");
|
|
27
|
+
|
|
28
|
+
var _axios = _interopRequireDefault(require("axios"));
|
|
29
|
+
|
|
30
|
+
var _react = _interopRequireDefault(require("react"));
|
|
31
|
+
|
|
32
|
+
var _reactDom = require("react-dom");
|
|
33
|
+
|
|
34
|
+
var _reactRouterDom = require("react-router-dom");
|
|
35
|
+
|
|
36
|
+
var _contexts = require("./contexts");
|
|
37
|
+
|
|
38
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
39
|
+
|
|
40
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
41
|
+
|
|
42
|
+
var App = /*#__PURE__*/function (_React$Component) {
|
|
43
|
+
(0, _inherits2["default"])(App, _React$Component);
|
|
44
|
+
|
|
45
|
+
var _super = _createSuper(App);
|
|
46
|
+
|
|
47
|
+
function App(props) {
|
|
48
|
+
var _this;
|
|
49
|
+
|
|
50
|
+
(0, _classCallCheck2["default"])(this, App);
|
|
51
|
+
_this = _super.call(this, props);
|
|
52
|
+
var url = new URL(window.location.href);
|
|
53
|
+
var params = Array.from(url.searchParams.entries()).filter(function (_ref) {
|
|
54
|
+
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
55
|
+
key = _ref2[0],
|
|
56
|
+
value = _ref2[1];
|
|
57
|
+
|
|
58
|
+
return key != 'context';
|
|
59
|
+
}).reduce(function (o, _ref3) {
|
|
60
|
+
var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
|
|
61
|
+
key = _ref4[0],
|
|
62
|
+
value = _ref4[1];
|
|
63
|
+
|
|
64
|
+
o[key] = value;
|
|
65
|
+
return o;
|
|
66
|
+
}, {});
|
|
67
|
+
var session = JSON.parse(url.searchParams.get('context') || {});
|
|
68
|
+
_this.state = {
|
|
69
|
+
session: session,
|
|
70
|
+
params: params
|
|
71
|
+
};
|
|
72
|
+
return _this;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
(0, _createClass2["default"])(App, [{
|
|
76
|
+
key: "close",
|
|
77
|
+
value: function () {
|
|
78
|
+
var _close = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(options) {
|
|
79
|
+
var payload, s, baseUrl, resp;
|
|
80
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
81
|
+
while (1) {
|
|
82
|
+
switch (_context.prev = _context.next) {
|
|
83
|
+
case 0:
|
|
84
|
+
payload = options ? options.payload : null;
|
|
85
|
+
if (options.path) payload = "__PATH_PAYLOAD__".concat(options.path);
|
|
86
|
+
|
|
87
|
+
if (!payload) {
|
|
88
|
+
_context.next = 15;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (options.params) {
|
|
93
|
+
payload = "".concat(payload, "?").concat((0, _core.params2queryString)(options.params));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
s = this.state.session;
|
|
97
|
+
_context.prev = 5;
|
|
98
|
+
baseUrl = s._hubtype_api || 'https://api.hubtype.com';
|
|
99
|
+
_context.next = 9;
|
|
100
|
+
return (0, _axios["default"])({
|
|
101
|
+
method: 'post',
|
|
102
|
+
url: "".concat(baseUrl, "/v1/bots/").concat(s.bot.id, "/send_postback/"),
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
104
|
+
data: {
|
|
105
|
+
payload: payload,
|
|
106
|
+
chat_id: s.user.id
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
case 9:
|
|
111
|
+
resp = _context.sent;
|
|
112
|
+
_context.next = 15;
|
|
113
|
+
break;
|
|
114
|
+
|
|
115
|
+
case 12:
|
|
116
|
+
_context.prev = 12;
|
|
117
|
+
_context.t0 = _context["catch"](5);
|
|
118
|
+
console.log(_context.t0);
|
|
119
|
+
|
|
120
|
+
case 15:
|
|
121
|
+
if (!(this.state.session.user.provider === _core.PROVIDER.WHATSAPP)) {
|
|
122
|
+
_context.next = 19;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
location.href = 'https://wa.me/' + this.state.session.user.imp_id;
|
|
127
|
+
_context.next = 27;
|
|
128
|
+
break;
|
|
129
|
+
|
|
130
|
+
case 19:
|
|
131
|
+
try {
|
|
132
|
+
window.MessengerExtensions.requestCloseBrowser(function () {
|
|
133
|
+
return undefined;
|
|
134
|
+
}, function (err) {
|
|
135
|
+
return console.log(err);
|
|
136
|
+
});
|
|
137
|
+
} catch (e) {}
|
|
138
|
+
|
|
139
|
+
_context.prev = 20;
|
|
140
|
+
_context.next = 23;
|
|
141
|
+
return parent.postMessage('botonicCloseWebview', '*');
|
|
142
|
+
|
|
143
|
+
case 23:
|
|
144
|
+
_context.next = 27;
|
|
145
|
+
break;
|
|
146
|
+
|
|
147
|
+
case 25:
|
|
148
|
+
_context.prev = 25;
|
|
149
|
+
_context.t1 = _context["catch"](20);
|
|
150
|
+
|
|
151
|
+
case 27:
|
|
152
|
+
case "end":
|
|
153
|
+
return _context.stop();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}, _callee, this, [[5, 12], [20, 25]]);
|
|
157
|
+
}));
|
|
158
|
+
|
|
159
|
+
function close(_x) {
|
|
160
|
+
return _close.apply(this, arguments);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return close;
|
|
164
|
+
}()
|
|
165
|
+
}, {
|
|
166
|
+
key: "render",
|
|
167
|
+
value: function render() {
|
|
168
|
+
var _this2 = this;
|
|
169
|
+
|
|
170
|
+
var requestContext = {
|
|
171
|
+
getString: function getString(stringId) {
|
|
172
|
+
return (0, _core.getString)(_this2.props.locales, _this2.state.session.__locale, stringId);
|
|
173
|
+
},
|
|
174
|
+
session: this.state.session || {},
|
|
175
|
+
params: this.state.params || {},
|
|
176
|
+
closeWebview: this.close.bind(this)
|
|
177
|
+
};
|
|
178
|
+
return /*#__PURE__*/_react["default"].createElement(_contexts.RequestContext.Provider, {
|
|
179
|
+
value: requestContext
|
|
180
|
+
}, this.props.webviews.map(function (Webview, i) {
|
|
181
|
+
return /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Route, {
|
|
182
|
+
key: i,
|
|
183
|
+
path: "/".concat(Webview.name),
|
|
184
|
+
component: Webview
|
|
185
|
+
});
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
}]);
|
|
189
|
+
return App;
|
|
190
|
+
}(_react["default"].Component);
|
|
191
|
+
|
|
192
|
+
var WebviewApp = /*#__PURE__*/function () {
|
|
193
|
+
function WebviewApp(_ref5) {
|
|
194
|
+
var webviews = _ref5.webviews,
|
|
195
|
+
locales = _ref5.locales;
|
|
196
|
+
(0, _classCallCheck2["default"])(this, WebviewApp);
|
|
197
|
+
this.webviews = webviews;
|
|
198
|
+
this.locales = locales;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
(0, _createClass2["default"])(WebviewApp, [{
|
|
202
|
+
key: "render",
|
|
203
|
+
value: function render(dest) {
|
|
204
|
+
(0, _reactDom.render)( /*#__PURE__*/_react["default"].createElement(_reactRouterDom.BrowserRouter, null, /*#__PURE__*/_react["default"].createElement(App, {
|
|
205
|
+
webviews: this.webviews,
|
|
206
|
+
locales: this.locales
|
|
207
|
+
})), dest);
|
|
208
|
+
}
|
|
209
|
+
}]);
|
|
210
|
+
return WebviewApp;
|
|
211
|
+
}();
|
|
212
|
+
|
|
213
|
+
exports.WebviewApp = WebviewApp;
|
|
214
|
+
//# sourceMappingURL=webview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/webview.jsx"],"names":["App","props","url","URL","window","location","href","params","Array","from","searchParams","entries","filter","key","value","reduce","o","session","JSON","parse","get","state","options","payload","path","s","baseUrl","_hubtype_api","method","bot","id","data","chat_id","user","resp","console","log","provider","PROVIDER","WHATSAPP","imp_id","MessengerExtensions","requestCloseBrowser","undefined","err","e","parent","postMessage","requestContext","getString","stringId","locales","__locale","closeWebview","close","bind","webviews","map","Webview","i","name","React","Component","WebviewApp","dest"],"mappings":"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","sourcesContent":["import { getString, params2queryString, PROVIDER } from '@botonic/core'\nimport axios from 'axios'\nimport React from 'react'\nimport { render } from 'react-dom'\nimport { BrowserRouter, Route } from 'react-router-dom'\n\nimport { RequestContext } from './contexts'\n\nclass App extends React.Component {\n constructor(props) {\n super(props)\n const url = new URL(window.location.href)\n const params = Array.from(url.searchParams.entries())\n .filter(([key, value]) => key != 'context')\n .reduce((o, [key, value]) => {\n o[key] = value\n return o\n }, {})\n const session = JSON.parse(url.searchParams.get('context') || {})\n this.state = { session, params }\n }\n\n async close(options) {\n let payload = options ? options.payload : null\n if (options.path) payload = `__PATH_PAYLOAD__${options.path}`\n if (payload) {\n if (options.params) {\n payload = `${payload}?${params2queryString(options.params)}`\n }\n const s = this.state.session\n try {\n const baseUrl = s._hubtype_api || 'https://api.hubtype.com'\n const resp = await axios({\n method: 'post',\n url: `${baseUrl}/v1/bots/${s.bot.id}/send_postback/`,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n data: { payload: payload, chat_id: s.user.id },\n })\n } catch (e) {\n console.log(e)\n }\n }\n if (this.state.session.user.provider === PROVIDER.WHATSAPP) {\n location.href = 'https://wa.me/' + this.state.session.user.imp_id\n } else {\n try {\n window.MessengerExtensions.requestCloseBrowser(\n () => undefined,\n err => console.log(err)\n )\n } catch (e) {}\n try {\n await parent.postMessage('botonicCloseWebview', '*')\n } catch (e) {}\n }\n }\n\n render() {\n const requestContext = {\n getString: stringId =>\n getString(this.props.locales, this.state.session.__locale, stringId),\n session: this.state.session || {},\n params: this.state.params || {},\n closeWebview: this.close.bind(this),\n }\n\n return (\n <RequestContext.Provider value={requestContext}>\n {this.props.webviews.map((Webview, i) => (\n <Route key={i} path={`/${Webview.name}`} component={Webview} />\n ))}\n </RequestContext.Provider>\n )\n }\n}\n\nexport class WebviewApp {\n constructor({ webviews, locales }) {\n this.webviews = webviews\n this.locales = locales\n }\n\n render(dest) {\n render(\n <BrowserRouter>\n <App webviews={this.webviews} locales={this.locales} />\n </BrowserRouter>,\n dest\n )\n }\n}\n"],"file":"webview.js"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<html>
|
|
2
|
+
<head>
|
|
3
|
+
<title></title>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<style>
|
|
7
|
+
html,
|
|
8
|
+
body,
|
|
9
|
+
#root {
|
|
10
|
+
width: 100%;
|
|
11
|
+
height: 100%;
|
|
12
|
+
margin: 0px;
|
|
13
|
+
padding: 0px;
|
|
14
|
+
}
|
|
15
|
+
</style>
|
|
16
|
+
</head>
|
|
17
|
+
|
|
18
|
+
<body>
|
|
19
|
+
<script>
|
|
20
|
+
;(function (d, s, id) {
|
|
21
|
+
var js,
|
|
22
|
+
fjs = d.getElementsByTagName(s)[0]
|
|
23
|
+
if (d.getElementById(id)) {
|
|
24
|
+
return
|
|
25
|
+
}
|
|
26
|
+
js = d.createElement(s)
|
|
27
|
+
js.id = id
|
|
28
|
+
js.src = 'https://connect.facebook.net/en_US/messenger.Extensions.js'
|
|
29
|
+
fjs.parentNode.insertBefore(js, fjs)
|
|
30
|
+
})(document, 'script', 'Messenger')
|
|
31
|
+
</script>
|
|
32
|
+
<div id="root"></div>
|
|
33
|
+
<script type="text/javascript">
|
|
34
|
+
document.addEventListener('DOMContentLoaded', function (event) {
|
|
35
|
+
BotonicWebview.render(document.getElementById('root'))
|
|
36
|
+
})
|
|
37
|
+
</script>
|
|
38
|
+
</body>
|
|
39
|
+
</html>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botonic/react",
|
|
3
|
-
"version": "0.20.1
|
|
3
|
+
"version": "0.20.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Build Chatbots using React",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"README.md"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@botonic/core": "
|
|
31
|
+
"@botonic/core": "^0.20.1",
|
|
32
32
|
"axios": "^0.24.0",
|
|
33
33
|
"emoji-picker-react": "^3.2.3",
|
|
34
34
|
"framer-motion": "^3.1.1",
|
package/src/components/image.jsx
CHANGED
|
@@ -1,24 +1,15 @@
|
|
|
1
1
|
import { INPUT, isBrowser } from '@botonic/core'
|
|
2
|
-
import React
|
|
2
|
+
import React from 'react'
|
|
3
3
|
import styled from 'styled-components'
|
|
4
4
|
|
|
5
5
|
import { ROLES } from '../constants'
|
|
6
|
-
import { PortalModalComponent } from '../webchat/components/portal-modal'
|
|
7
6
|
import { Message } from './message'
|
|
8
7
|
|
|
9
8
|
const StyledImage = styled.img`
|
|
10
9
|
border-radius: 8px;
|
|
11
10
|
max-width: 150px;
|
|
12
11
|
max-height: 150px;
|
|
13
|
-
margin:
|
|
14
|
-
cursor: ${props => (props.isHovered ? 'pointer' : 'none')};
|
|
15
|
-
`
|
|
16
|
-
|
|
17
|
-
const StyledPreviewImage = styled.img`
|
|
18
|
-
width: 100%;
|
|
19
|
-
max-width: 75vw;
|
|
20
|
-
max-height: 75vh;
|
|
21
|
-
object-fit: contain;
|
|
12
|
+
margin: 10px;
|
|
22
13
|
`
|
|
23
14
|
|
|
24
15
|
const serialize = imageProps => {
|
|
@@ -26,33 +17,8 @@ const serialize = imageProps => {
|
|
|
26
17
|
}
|
|
27
18
|
|
|
28
19
|
export const Image = props => {
|
|
29
|
-
const [isHovered, setIsHovered] = useState(false)
|
|
30
|
-
const [isModalOpen, setIsModalOpen] = useState(false)
|
|
31
|
-
|
|
32
20
|
let content = props.children
|
|
33
|
-
|
|
34
|
-
if (isBrowser()) {
|
|
35
|
-
content = (
|
|
36
|
-
<>
|
|
37
|
-
<StyledImage
|
|
38
|
-
src={props.src}
|
|
39
|
-
isHovered={isHovered}
|
|
40
|
-
onMouseEnter={() => setIsHovered(true)}
|
|
41
|
-
onMouseLeave={() => setIsHovered(false)}
|
|
42
|
-
onClick={() => setIsModalOpen(true)}
|
|
43
|
-
/>
|
|
44
|
-
{isModalOpen && (
|
|
45
|
-
<PortalModalComponent
|
|
46
|
-
open={isModalOpen}
|
|
47
|
-
onClose={() => setIsModalOpen(false)}
|
|
48
|
-
locked={false}
|
|
49
|
-
>
|
|
50
|
-
<StyledPreviewImage src={props.src} />
|
|
51
|
-
</PortalModalComponent>
|
|
52
|
-
)}
|
|
53
|
-
</>
|
|
54
|
-
)
|
|
55
|
-
}
|
|
21
|
+
if (isBrowser()) content = <StyledImage src={props.src} />
|
|
56
22
|
return (
|
|
57
23
|
<Message
|
|
58
24
|
role={ROLES.IMAGE_MESSAGE}
|
package/src/index.d.ts
CHANGED
|
@@ -204,8 +204,6 @@ export class WebchatApp {
|
|
|
204
204
|
updateLastMessageDate(date: string): void
|
|
205
205
|
updateUser(user: core.SessionUser): void
|
|
206
206
|
updateWebchatSettings(settings: WebchatSettingsProps): void
|
|
207
|
-
openModal(customContent: React.ReactNode): void
|
|
208
|
-
closeModal(): void
|
|
209
207
|
}
|
|
210
208
|
|
|
211
209
|
export interface WebchatContextProps {
|
package/src/index.js
CHANGED
|
@@ -5,7 +5,6 @@ export { DevApp } from './dev-app'
|
|
|
5
5
|
export { msgsToBotonic, msgToBotonic } from './msg-to-botonic'
|
|
6
6
|
export { NodeApp } from './node-app'
|
|
7
7
|
export { staticAsset } from './util/environment'
|
|
8
|
-
export * from './webchat/components/portal-modal'
|
|
9
8
|
export { getBotonicApp, Webchat } from './webchat/index.js'
|
|
10
9
|
export { WebchatApp } from './webchat-app'
|
|
11
10
|
export { WebviewApp } from './webview'
|
package/src/webchat/actions.jsx
CHANGED
|
@@ -14,7 +14,6 @@ export const TOGGLE_WEBCHAT = 'toggleWebchat'
|
|
|
14
14
|
export const TOGGLE_EMOJI_PICKER = 'toggleEmojiPicker'
|
|
15
15
|
export const TOGGLE_PERSISTENT_MENU = 'togglePersistentMenu'
|
|
16
16
|
export const TOGGLE_COVER_COMPONENT = 'toggleCoverComponent'
|
|
17
|
-
export const TOGGLE_MODAL = 'toggleModal'
|
|
18
17
|
export const SET_ERROR = 'setError'
|
|
19
18
|
export const CLEAR_MESSAGES = 'clearMessages'
|
|
20
19
|
export const UPDATE_LAST_MESSAGE_DATE = 'updateLastMessageDate'
|
package/src/webchat/hooks.js
CHANGED
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
SET_ONLINE,
|
|
12
12
|
TOGGLE_COVER_COMPONENT,
|
|
13
13
|
TOGGLE_EMOJI_PICKER,
|
|
14
|
-
TOGGLE_MODAL,
|
|
15
14
|
TOGGLE_PERSISTENT_MENU,
|
|
16
15
|
TOGGLE_WEBCHAT,
|
|
17
16
|
UPDATE_DEV_SETTINGS,
|
|
@@ -60,7 +59,6 @@ export const webchatInitialState = {
|
|
|
60
59
|
isEmojiPickerOpen: false,
|
|
61
60
|
isPersistentMenuOpen: false,
|
|
62
61
|
isCoverComponentOpen: false,
|
|
63
|
-
isModalOpen: false,
|
|
64
62
|
lastMessageUpdate: undefined,
|
|
65
63
|
currentAttachment: undefined,
|
|
66
64
|
jwt: null,
|
|
@@ -139,11 +137,6 @@ export function useWebchat() {
|
|
|
139
137
|
type: TOGGLE_COVER_COMPONENT,
|
|
140
138
|
payload: toggle,
|
|
141
139
|
})
|
|
142
|
-
const toggleModal = toggle =>
|
|
143
|
-
webchatDispatch({
|
|
144
|
-
type: TOGGLE_MODAL,
|
|
145
|
-
payload: toggle,
|
|
146
|
-
})
|
|
147
140
|
const setError = error =>
|
|
148
141
|
webchatDispatch({
|
|
149
142
|
type: SET_ERROR,
|
|
@@ -199,7 +192,6 @@ export function useWebchat() {
|
|
|
199
192
|
toggleEmojiPicker,
|
|
200
193
|
togglePersistentMenu,
|
|
201
194
|
toggleCoverComponent,
|
|
202
|
-
toggleModal,
|
|
203
195
|
setError,
|
|
204
196
|
setOnline,
|
|
205
197
|
clearMessages,
|
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
SET_ONLINE,
|
|
5
5
|
TOGGLE_COVER_COMPONENT,
|
|
6
6
|
TOGGLE_EMOJI_PICKER,
|
|
7
|
-
TOGGLE_MODAL,
|
|
8
7
|
TOGGLE_PERSISTENT_MENU,
|
|
9
8
|
TOGGLE_WEBCHAT,
|
|
10
9
|
UPDATE_DEV_SETTINGS,
|
|
@@ -19,7 +18,6 @@ import {
|
|
|
19
18
|
} from './actions'
|
|
20
19
|
import { messagesReducer } from './messages-reducer'
|
|
21
20
|
|
|
22
|
-
// eslint-disable-next-line complexity
|
|
23
21
|
export function webchatReducer(state, action) {
|
|
24
22
|
switch (action.type) {
|
|
25
23
|
case UPDATE_WEBVIEW:
|
|
@@ -43,8 +41,6 @@ export function webchatReducer(state, action) {
|
|
|
43
41
|
return { ...state, isPersistentMenuOpen: action.payload }
|
|
44
42
|
case TOGGLE_COVER_COMPONENT:
|
|
45
43
|
return { ...state, isCoverComponentOpen: action.payload }
|
|
46
|
-
case TOGGLE_MODAL:
|
|
47
|
-
return { ...state, isModalOpen: action.payload }
|
|
48
44
|
case SET_ERROR:
|
|
49
45
|
return { ...state, error: action.payload || {} }
|
|
50
46
|
case SET_ONLINE:
|
package/src/webchat/webchat.jsx
CHANGED
|
@@ -6,7 +6,6 @@ import React, {
|
|
|
6
6
|
useEffect,
|
|
7
7
|
useImperativeHandle,
|
|
8
8
|
useRef,
|
|
9
|
-
useState,
|
|
10
9
|
} from 'react'
|
|
11
10
|
import Textarea from 'react-textarea-autosize'
|
|
12
11
|
import styled, { StyleSheetManager } from 'styled-components'
|
|
@@ -47,7 +46,6 @@ import {
|
|
|
47
46
|
initSession,
|
|
48
47
|
shouldKeepSessionOnReload,
|
|
49
48
|
} from '../util/webchat'
|
|
50
|
-
import { PortalModalComponent } from '../webchat/components/portal-modal'
|
|
51
49
|
import { Attachment } from './components/attachment'
|
|
52
50
|
import { EmojiPicker, OpenedEmojiPicker } from './components/emoji-picker'
|
|
53
51
|
import {
|
|
@@ -185,7 +183,6 @@ export const Webchat = forwardRef((props, ref) => {
|
|
|
185
183
|
toggleEmojiPicker,
|
|
186
184
|
togglePersistentMenu,
|
|
187
185
|
toggleCoverComponent,
|
|
188
|
-
toggleModal,
|
|
189
186
|
setError,
|
|
190
187
|
setOnline,
|
|
191
188
|
clearMessages,
|
|
@@ -202,8 +199,6 @@ export const Webchat = forwardRef((props, ref) => {
|
|
|
202
199
|
const { initialSession, initialDevSettings, onStateChange } = props
|
|
203
200
|
const getThemeProperty = _getThemeProperty(theme)
|
|
204
201
|
|
|
205
|
-
const [customModalContent, setCustomModalContent] = useState(undefined)
|
|
206
|
-
|
|
207
202
|
const storage = props.storage === undefined ? localStorage : props.storage
|
|
208
203
|
const storageKey =
|
|
209
204
|
typeof props.storageKey === 'function'
|
|
@@ -564,11 +559,6 @@ export const Webchat = forwardRef((props, ref) => {
|
|
|
564
559
|
toggleWebchat: () => toggleWebchat(!webchatState.isWebchatOpen),
|
|
565
560
|
openCoverComponent: () => toggleCoverComponent(true),
|
|
566
561
|
closeCoverComponent: () => toggleCoverComponent(false),
|
|
567
|
-
openModal: customModalContent => {
|
|
568
|
-
setCustomModalContent(customModalContent)
|
|
569
|
-
toggleModal(true)
|
|
570
|
-
},
|
|
571
|
-
closeModal: () => toggleModal(false),
|
|
572
562
|
toggleCoverComponent: () =>
|
|
573
563
|
toggleCoverComponent(!webchatState.isCoverComponentOpen),
|
|
574
564
|
openWebviewApi: component => openWebviewT(component),
|
|
@@ -958,14 +948,6 @@ export const Webchat = forwardRef((props, ref) => {
|
|
|
958
948
|
{!webchatState.handoff && userInputArea()}
|
|
959
949
|
{webchatState.webview && webchatWebview()}
|
|
960
950
|
{webchatState.isCoverComponentOpen && coverComponent()}
|
|
961
|
-
{webchatState.isModalOpen && (
|
|
962
|
-
<PortalModalComponent
|
|
963
|
-
open={webchatState.isModalOpen}
|
|
964
|
-
onClose={() => toggleModal(false)}
|
|
965
|
-
locked={false}
|
|
966
|
-
customContent={customModalContent}
|
|
967
|
-
/>
|
|
968
|
-
)}
|
|
969
951
|
</StyledWebchat>
|
|
970
952
|
)}
|
|
971
953
|
</WebchatContext.Provider>
|
package/src/webchat-app.jsx
CHANGED
|
@@ -211,14 +211,6 @@ export class WebchatApp {
|
|
|
211
211
|
this.webchatRef.current.closeCoverComponent()
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
-
openModal(customModalContent) {
|
|
215
|
-
this.webchatRef.current.openModal(customModalContent)
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
closeModal() {
|
|
219
|
-
this.webchatRef.current.closeModal()
|
|
220
|
-
}
|
|
221
|
-
|
|
222
214
|
toggleCoverComponent() {
|
|
223
215
|
this.webchatRef.current.toggleCoverComponent()
|
|
224
216
|
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import styled from 'styled-components'
|
|
2
|
-
|
|
3
|
-
import { MODAL_ACTIVE_CLASSNAME, MODAL_CONTENT_CLASSNAME } from './constants'
|
|
4
|
-
|
|
5
|
-
export const Backdrop = styled.div`
|
|
6
|
-
position: fixed;
|
|
7
|
-
top: 0;
|
|
8
|
-
right: 0;
|
|
9
|
-
bottom: 0;
|
|
10
|
-
left: 0;
|
|
11
|
-
background-color: rgba(51, 51, 51, 0.3);
|
|
12
|
-
backdrop-filter: blur(1px);
|
|
13
|
-
opacity: 0;
|
|
14
|
-
transition: all 100ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
15
|
-
transition-delay: 200ms;
|
|
16
|
-
display: flex;
|
|
17
|
-
align-items: center;
|
|
18
|
-
justify-content: center;
|
|
19
|
-
|
|
20
|
-
& .${MODAL_CONTENT_CLASSNAME} {
|
|
21
|
-
transform: translateY(100px);
|
|
22
|
-
transition: all 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
23
|
-
opacity: 0;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
&.${MODAL_ACTIVE_CLASSNAME} {
|
|
27
|
-
transition-duration: 250ms;
|
|
28
|
-
transition-delay: 0ms;
|
|
29
|
-
opacity: 1;
|
|
30
|
-
|
|
31
|
-
& .${MODAL_CONTENT_CLASSNAME} {
|
|
32
|
-
transform: translateY(0);
|
|
33
|
-
opacity: 1;
|
|
34
|
-
transition-delay: 150ms;
|
|
35
|
-
transition-duration: 350ms;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
`
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import styled from 'styled-components'
|
|
2
|
-
|
|
3
|
-
export const ModalContent = styled.div`
|
|
4
|
-
position: relative;
|
|
5
|
-
padding: 4px;
|
|
6
|
-
box-sizing: border-box;
|
|
7
|
-
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
|
|
8
|
-
background-color: white;
|
|
9
|
-
border-radius: 2px;
|
|
10
|
-
`
|