diff --git a/public/index.html b/public/index.html
index 2614593..b4cc3d8 100644
--- a/public/index.html
+++ b/public/index.html
@@ -25,7 +25,7 @@
anonymousDisplayName: 'Anonymous',
position: 'bottom right',
size: 'large',
- maxWaitTime: 6000*3,
+ maxWaitTime: 1000*60*3, // 3 minutes
}
EmbeddableChatbox.mount(config);
diff --git a/src/components/chatbox.jsx b/src/components/chatbox.jsx
index f803b83..7ed5c93 100644
--- a/src/components/chatbox.jsx
+++ b/src/components/chatbox.jsx
@@ -167,6 +167,7 @@ class ChatBox extends React.Component {
await this.state.client.stopClient()
await this.state.client.clearStores()
this.setState({ client: null })
+ window.clearInterval(this.state.waitIntervalId) // no more waiting messages
}
this.state.localStorage.clear()
@@ -487,8 +488,6 @@ class ChatBox extends React.Component {
handleChatOffline = () => {
this.exitChat(false) // close the chat connection but keep chatbox state
- window.clearInterval(this.state.waitIntervalId) // no more waiting messages
- window.clearInterval(this.state.waitTimeoutId) // no more waiting messages
this.setState({ ready: true }) // no more loading animation
}
@@ -546,7 +545,6 @@ class ChatBox extends React.Component {
this.verifyAllRoomDevices(client, room)
this.setState({ facilitatorId: sender, ready: true })
window.clearInterval(this.state.waitIntervalId)
- window.clearInterval(this.state.waitTimeoutId)
}
});
@@ -568,6 +566,23 @@ class ChatBox extends React.Component {
this.setState({ typingStatus: null })
}
});
+
+ client.on("event", (event) => {
+ const eventType = event.getType()
+ const content = event.getContent()
+
+ if (eventType === 'm.bot.signal') {
+ this.handleBotSignal(content.signal)
+ }
+ })
+ }
+
+ handleBotSignal = (signal) => {
+ switch (signal) {
+ case 'END_CHAT':
+ this.displayBotMessage({ body: this.props.exitMessage })
+ return this.exitChat(false); // keep chat state
+ }
}
componentDidUpdate(prevProps, prevState) {
@@ -624,14 +639,7 @@ class ChatBox extends React.Component {
}
}, this.props.waitInterval)
- const waitTimeoutId = window.setTimeout(() => {
- if (!this.state.facilitatorId && !this.state.ready) {
- this.displayBotMessage({ body: this.props.chatUnavailableMessage })
- this.handleChatOffline()
- }
- }, this.props.maxWaitTime)
-
- this.setState({ waitIntervalId, waitTimeoutId })
+ this.setState({ waitIntervalId })
}
handleRejectTerms = () => {
diff --git a/src/setupTests.js b/src/setupTests.js
new file mode 100644
index 0000000..de70497
--- /dev/null
+++ b/src/setupTests.js
@@ -0,0 +1,3 @@
+import { configure } from 'enzyme';
+import Adapter from 'enzyme-adapter-react-16';
+configure({ adapter: new Adapter() });
\ No newline at end of file