diff --git a/packages/livechat/src/components/App/App.js b/packages/livechat/src/components/App/App.js index f1893bee6c20..e2161042b07b 100644 --- a/packages/livechat/src/components/App/App.js +++ b/packages/livechat/src/components/App/App.js @@ -117,6 +117,7 @@ export class App extends Component { } else { dispatchRestore(); } + Triggers.callbacks.emit('chat-opened-by-visitor'); } handleOpenWindow = () => { diff --git a/packages/livechat/src/lib/triggers.js b/packages/livechat/src/lib/triggers.js index 0df433e6ba35..98c1bf9e65ab 100644 --- a/packages/livechat/src/lib/triggers.js +++ b/packages/livechat/src/lib/triggers.js @@ -1,3 +1,4 @@ +import mitt from 'mitt'; import { route } from 'preact-router'; import { Livechat } from '../api'; @@ -59,6 +60,7 @@ class Triggers { this._triggers = []; this._enabled = true; Triggers.instance = this; + this.callbacks = mitt(); } return Triggers.instance; @@ -89,8 +91,8 @@ class Triggers { } async fire(trigger) { - const { token, firedTriggers = [] } = store.state; - if (!this._enabled) { + const { token, firedTriggers = [], user } = store.state; + if (!this._enabled || user) { return; } const { actions } = trigger; @@ -121,7 +123,10 @@ class Triggers { parentCall('callback', ['assign-agent', normalizeAgent(agent)]); } - route('/trigger-messages'); + const foundCondition = trigger.conditions.find((c) => c.name === 'chat-opened-by-visitor'); + if (!foundCondition) { + route('/trigger-messages'); + } store.setState({ minimized: false }); }); } @@ -136,11 +141,6 @@ class Triggers { processRequest(request) { this._requests.push(request); - if (!this._started) { - return; - } - - this.processTriggers(); } processTriggers() { @@ -163,13 +163,10 @@ class Triggers { break; case 'chat-opened-by-visitor': const openFunc = () => { - const { user } = store.state; - if (user) { - store.off('change', openFunc); - this.fire(trigger); - } + this.fire(trigger); + this.callbacks.off('chat-opened-by-visitor', openFunc); }; - store.on('change', openFunc); + this.callbacks.on('chat-opened-by-visitor', openFunc); break; } }); diff --git a/packages/livechat/src/routes/TriggerMessage/component.js b/packages/livechat/src/routes/TriggerMessage/component.js index a9906bc8c8f7..41f18db445f3 100644 --- a/packages/livechat/src/routes/TriggerMessage/component.js +++ b/packages/livechat/src/routes/TriggerMessage/component.js @@ -18,9 +18,9 @@ class TriggerMessage extends Component { componentDidUpdate() { let height = 0; - this.ref.current.base.children.forEach((el) => { + for (const el of this.ref.current.base.children) { height += el.scrollHeight; - }); + } parentCall('resizeWidget', height); } diff --git a/packages/livechat/src/routes/TriggerMessage/container.js b/packages/livechat/src/routes/TriggerMessage/container.js index 40765f87cc1a..e46f7fd2fa89 100644 --- a/packages/livechat/src/routes/TriggerMessage/container.js +++ b/packages/livechat/src/routes/TriggerMessage/container.js @@ -8,15 +8,16 @@ import TriggerMessage from './component'; export class TriggerMessageContainer extends Component { - handleStart() { + handleStart(props) { parentCall('setFullScreenDocumentMobile'); parentCall('openWidget'); + props.onRestore(); route('/'); } render = (props) => { parentCall('resetDocumentStyle'); - return <TriggerMessage onStartChat={this.handleStart} {...props} />; + return <TriggerMessage onStartChat={() => this.handleStart(props)} {...props} />; } } diff --git a/packages/livechat/tsconfig.json b/packages/livechat/tsconfig.json index 2d0a2cf459aa..286861613866 100644 --- a/packages/livechat/tsconfig.json +++ b/packages/livechat/tsconfig.json @@ -11,6 +11,6 @@ }, "exclude": [ "./node_modules", - "./build" + "./dist" ] }