Skip to content

Commit 1860850

Browse files
author
Michael Dijkstra
committed
Update Chatwoot open logic
1 parent dc0f5ec commit 1860850

2 files changed

Lines changed: 38 additions & 9 deletions

File tree

src/components/Chatwoot/index.tsx

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import React, { CSSProperties } from 'react'
44
const styles: {
55
button: CSSProperties
66
img: CSSProperties
7+
close: CSSProperties
78
} = {
89
button: {
910
borderRadius: '100px',
@@ -14,13 +15,21 @@ const styles: {
1415
height: '64px',
1516
position: 'fixed',
1617
width: '64px',
17-
zIndex: 2147483001,
18+
zIndex: 2147483001, // 1 more than the actual widget
1819
userSelect: 'none'
1920
},
2021
img: {
2122
height: '24px',
2223
margin: '20px',
2324
width: '24px'
25+
},
26+
close: {
27+
backgroundColor: "#fff",
28+
height: "24px",
29+
left: "32px",
30+
position: "absolute",
31+
top: "20px",
32+
width: "2px",
2433
}
2534
}
2635

@@ -43,11 +52,18 @@ const Provider = ({ color }: Props): JSX.Element | null => {
4352
backgroundColor: color
4453
}}
4554
>
46-
<img
47-
style={styles.img}
48-
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAUVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////8IN+deAAAAGnRSTlMAAwgJEBk0TVheY2R5eo+ut8jb5OXs8fX2+cjRDTIAAADsSURBVHgBldZbkoMgFIThRgQv8SKKgGf/C51UnJqaRI30/9zfe+NQUQ3TvG7bOk9DVeCmshmj/CuOTYnrdBfkUOg0zlOtl9OWVuEk4+QyZ3DIevmSt/ioTvK1VH/s5bY3YdM9SBZ/mUUyWgx+U06ycgp7D8msxSvtc4HXL9BLdj2elSEfhBJAI0QNgJEBI1BEBsQClVBVGDgwYOLAhJkDM1YOrNg4sLFAsLJgZsHEgoEFFQt0JAFGFjQsKAMJ0LFAexKgZYFyJIDxJIBNJEDNAtSJBLCeBDCOBFAPzwFA94ED+zmhwDO9358r8ANtIsMXi7qVAwAAAABJRU5ErkJggg=="
49-
alt="bubble-icon"
50-
/>
55+
{state === 'initial' ? (
56+
<img
57+
style={styles.img}
58+
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAUVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////8IN+deAAAAGnRSTlMAAwgJEBk0TVheY2R5eo+ut8jb5OXs8fX2+cjRDTIAAADsSURBVHgBldZbkoMgFIThRgQv8SKKgGf/C51UnJqaRI30/9zfe+NQUQ3TvG7bOk9DVeCmshmj/CuOTYnrdBfkUOg0zlOtl9OWVuEk4+QyZ3DIevmSt/ioTvK1VH/s5bY3YdM9SBZ/mUUyWgx+U06ycgp7D8msxSvtc4HXL9BLdj2elSEfhBJAI0QNgJEBI1BEBsQClVBVGDgwYOLAhJkDM1YOrNg4sLFAsLJgZsHEgoEFFQt0JAFGFjQsKAMJ0LFAexKgZYFyJIDxJIBNJEDNAtSJBLCeBDCOBFAPzwFA94ED+zmhwDO9358r8ANtIsMXi7qVAwAAAABJRU5ErkJggg=="
59+
alt="bubble-icon"
60+
/>
61+
) : (
62+
<>
63+
<div style={{ ...styles.close, transform: "rotate(45deg)" }} />
64+
<div style={{ ...styles.close, transform: "rotate(-45deg)" }} />
65+
</>
66+
)}
5167
</div>
5268
</div>
5369
)

src/providers/chatwoot.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { State } from 'types'
2+
import waitForLoad from '../utils/waitForLoad'
23

34
const domain = 'https://app.chatwoot.com'
45

@@ -21,15 +22,16 @@ declare global {
2122
}
2223

2324
/* eslint-disable */
24-
const loadScript = (onload: () => void, baseUrl: string): void => {
25-
if (window.$chatwoot) return
25+
const loadScript = (onload: () => void, baseUrl: string): boolean => {
26+
if (window.$chatwoot) return false
2627
;(function(d, t) {
2728
var script: HTMLScriptElement = d.createElement('script')
2829
var fisrtScript = d.getElementsByTagName('script')[0]
2930
script.src = baseUrl + '/packs/js/sdk.js'
3031
fisrtScript.parentNode?.insertBefore(script, fisrtScript)
3132
script.onload = onload
3233
})(document)
34+
return true
3335
}
3436
/* eslint-enable */
3537

@@ -44,17 +46,28 @@ const load = ({
4446
setState: (state: State) => void
4547
baseUrl?: string
4648
}): void => {
47-
loadScript(function() {
49+
const loaded = loadScript(function() {
4850
setTimeout(() => setState('complete'), 1000)
4951
window.chatwootSDK.run({
5052
websiteToken: providerKey,
5153
baseUrl,
5254
locale
5355
})
5456
}, baseUrl)
57+
58+
// Continue as long as userlike hasn’t already been initialised.
59+
if (loaded) {
60+
waitForLoad(
61+
() => !!window.$chatwoot?.hasLoaded,
62+
// Allow chatwoot to complete loading before removing fake widget
63+
() => setTimeout(() => setState('complete'), 2000)
64+
)
65+
}
5566
}
5667

5768
const open = (): void => {
69+
window.chatwootSettings = window.chatwootSettings || {}
70+
window.chatwootSettings.showPopoutButton = true
5871
window.addEventListener('chatwoot:ready', function() {
5972
window.$chatwoot.toggle()
6073
})

0 commit comments

Comments
 (0)