@subiz/widget-v4 4.1.27 → 4.1.28
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/compiled_src/chatbox/Widget.js +12 -0
- package/compiled_src/chatbox/main.js +24 -2
- package/compiled_src/util/campaign.js +17 -8
- package/dist/132.js +6639 -0
- package/dist/178.js +406 -0
- package/dist/18754d60df1.132.js +1 -0
- package/dist/18754d60df1.178.js +1 -0
- package/dist/18754d60df1.213.js +1 -0
- package/dist/18754d60df1.335.js +1 -0
- package/dist/18754d60df1.362.js +1 -0
- package/dist/18754d60df1.441.js +1 -0
- package/dist/18754d60df1.605.js +1 -0
- package/dist/18754d60df1.678.js +1 -0
- package/dist/18754d60df1.782.js +1 -0
- package/dist/18754d60df1.app.js +1 -0
- package/dist/18754d60df1.index.html +33 -0
- package/dist/18754d60df1.library.html +33 -0
- package/dist/18754d60df1.library.js +1 -0
- package/dist/18754d60df1.preview.html +759 -0
- package/dist/18754d60df1.preview.js +1 -0
- package/dist/18754d60df1.screenshoot.js +1 -0
- package/dist/18754d60df1.webview.js +1 -0
- package/dist/213.js +2780 -0
- package/dist/335.js +372 -0
- package/dist/362.js +107 -0
- package/dist/441.js +2919 -0
- package/dist/605.js +305 -0
- package/dist/678.js +107 -0
- package/dist/782.js +107 -0
- package/dist/HASH +1 -0
- package/dist/assets/img/Facebook.64607ec.png +0 -0
- package/dist/assets/img/Zalo.6845707.png +0 -0
- package/dist/assets/img/award1a.1a58e10.png +0 -0
- package/dist/assets/img/award3a.3b74423.png +0 -0
- package/dist/assets/img/award4a.ed6ccd4.png +0 -0
- package/dist/assets/img/award5.39eb7ae.png +0 -0
- package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
- package/dist/assets/img/caret.998eb8f.svg +1 -0
- package/dist/assets/img/convos_empty.2353007.svg +72 -0
- package/dist/assets/img/default.06e6ee0.jpg +0 -0
- package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
- package/dist/assets/img/done_gray.d7e8203.svg +4 -0
- package/dist/assets/img/done_green.b817fd4.svg +4 -0
- package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
- package/dist/assets/img/empty.29bed2d.svg +23 -0
- package/dist/assets/img/empty_1.0b98af0.svg +11 -0
- package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
- package/dist/assets/img/external-link.90577cc.svg +1 -0
- package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
- package/dist/assets/img/ghn.070f8e3.svg +17 -0
- package/dist/assets/img/ghtk.326eac1.svg +18 -0
- package/dist/assets/img/image_default.be0698b.png +0 -0
- package/dist/assets/img/info.ebce7ea.svg +1 -0
- package/dist/assets/img/loader.37000a7.svg +1 -0
- package/dist/assets/img/loading_static.a27f0ac.svg +10 -0
- package/dist/assets/img/main-service1.d536cc2.png +0 -0
- package/dist/assets/img/main-service2.9b99549.png +0 -0
- package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
- package/dist/assets/img/package.8d37d0f.svg +5 -0
- package/dist/assets/img/package_fade.763c001.svg +1 -0
- package/dist/assets/img/rating--average.1ea492c.svg +12 -0
- package/dist/assets/img/rating--great.e3d712e.svg +16 -0
- package/dist/assets/img/rating--poor.2938a25.svg +12 -0
- package/dist/assets/img/search.f9705ff.svg +1 -0
- package/dist/assets/img/send.6db52a9.svg +3 -0
- package/dist/assets/img/shop.f7dc7d8.svg +1 -0
- package/dist/assets/img/shop_faded.df7845a.svg +1 -0
- package/dist/assets/img/subiz-mono.877e9f5.svg +3 -0
- package/dist/assets/img/x.26fdfa3.svg +5 -0
- package/dist/malicious-app.js +13 -0
- package/dist/screenshoot.html +7 -0
- package/dist/screenshoot.js +5677 -0
- package/index.html +8 -0
- package/package.json +10 -10
- package/src/chatbox/Widget.js +14 -0
- package/src/chatbox/main.js +24 -1
- package/src/util/campaign.js +29 -8
package/index.html
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
15
15
|
<h1>Subiz widget testing</h1>
|
|
16
|
+
<button id="test1">Test 1</button>
|
|
16
17
|
<script>
|
|
17
18
|
function getUrlParameter(name) {
|
|
18
19
|
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]')
|
|
@@ -38,6 +39,13 @@
|
|
|
38
39
|
if (accid == 'acpxkgumifuoofoosble') {
|
|
39
40
|
window.subiz('setViewingProduct', {id: '220170', sku: 'ipx', source_id: 'IPHONE10'})
|
|
40
41
|
}
|
|
42
|
+
|
|
43
|
+
setTimeout(function () {
|
|
44
|
+
const button = document.createElement('button')
|
|
45
|
+
button.innerText = 'test2'
|
|
46
|
+
button.id = 'test2'
|
|
47
|
+
document.body.appendChild(button)
|
|
48
|
+
}, 2000)
|
|
41
49
|
</script>
|
|
42
50
|
</body>
|
|
43
51
|
</html>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@subiz/widget-v4",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.28",
|
|
4
4
|
"main": "./compiled_src/lib.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "npx webpack serve --config webpack.dev.js",
|
|
@@ -12,30 +12,30 @@
|
|
|
12
12
|
"@subiz/ajax": "^3.0.12",
|
|
13
13
|
"@subiz/flow": "^1.0.9",
|
|
14
14
|
"@subiz/storage": "0.0.8",
|
|
15
|
-
"@subiz/wsclient": "^4.0.
|
|
15
|
+
"@subiz/wsclient": "^4.0.14",
|
|
16
16
|
"cookie_js": "1.4.2",
|
|
17
|
-
"core-js": "^3.
|
|
17
|
+
"core-js": "^3.30.0",
|
|
18
18
|
"css-loader": "5.2.7",
|
|
19
19
|
"file-loader": "^6.2.0",
|
|
20
20
|
"less": "^4.1.3",
|
|
21
21
|
"less-loader": "^11.1.0",
|
|
22
|
-
"marked": "^4.
|
|
23
|
-
"preact": "^10.13.
|
|
22
|
+
"marked": "^4.3.0",
|
|
23
|
+
"preact": "^10.13.2"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@babel/cli": "^7.21.0",
|
|
27
|
-
"@babel/core": "^7.21.
|
|
27
|
+
"@babel/core": "^7.21.4",
|
|
28
28
|
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
|
29
29
|
"@babel/plugin-transform-react-jsx": "^7.21.0",
|
|
30
|
-
"@babel/preset-env": "^7.
|
|
30
|
+
"@babel/preset-env": "^7.21.4",
|
|
31
31
|
"babel-loader": "^9.1.2",
|
|
32
32
|
"babel-plugin-syntax-jsx": "^6.18.0",
|
|
33
33
|
"html-webpack-plugin": "^5.5.0",
|
|
34
|
-
"prettier": "^2.8.
|
|
34
|
+
"prettier": "^2.8.7",
|
|
35
35
|
"puppeteer": "^19.7.3",
|
|
36
|
-
"webpack": "^5.
|
|
36
|
+
"webpack": "^5.78.0",
|
|
37
37
|
"webpack-bundle-analyzer": "^4.8.0",
|
|
38
38
|
"webpack-cli": "^5.0.1",
|
|
39
|
-
"webpack-dev-server": "^4.
|
|
39
|
+
"webpack-dev-server": "^4.13.2"
|
|
40
40
|
}
|
|
41
41
|
}
|
package/src/chatbox/Widget.js
CHANGED
|
@@ -25,6 +25,8 @@ export default class Widget extends Com {
|
|
|
25
25
|
constructor(props) {
|
|
26
26
|
super(props)
|
|
27
27
|
this.userSent = {}
|
|
28
|
+
// check user had input form
|
|
29
|
+
this.wasFormInputed = false
|
|
28
30
|
this.setState({
|
|
29
31
|
creating: false,
|
|
30
32
|
clickedJoin: false,
|
|
@@ -241,6 +243,7 @@ export default class Widget extends Com {
|
|
|
241
243
|
}
|
|
242
244
|
|
|
243
245
|
onBooleanChange(key, e) {
|
|
246
|
+
this.wasFormInputed = true
|
|
244
247
|
let formData = sb.cloneDeep(this.state.formData)
|
|
245
248
|
let field = sb.find(formData, (_, fkkey) => fkkey === key)
|
|
246
249
|
if (!field) return
|
|
@@ -250,6 +253,7 @@ export default class Widget extends Com {
|
|
|
250
253
|
}
|
|
251
254
|
|
|
252
255
|
onInputChange(key, val) {
|
|
256
|
+
this.wasFormInputed = true
|
|
253
257
|
let formData = sb.cloneDeep(this.state.formData)
|
|
254
258
|
let field = sb.find(formData, (_, fkkey) => fkkey === key)
|
|
255
259
|
if (!field) return
|
|
@@ -258,6 +262,7 @@ export default class Widget extends Com {
|
|
|
258
262
|
}
|
|
259
263
|
|
|
260
264
|
onListAddItem(key, val) {
|
|
265
|
+
this.wasFormInputed = true
|
|
261
266
|
let formData = sb.cloneDeep(this.state.formData)
|
|
262
267
|
let field = sb.find(formData, (_, fkkey) => fkkey === key)
|
|
263
268
|
if (!field) return
|
|
@@ -268,6 +273,7 @@ export default class Widget extends Com {
|
|
|
268
273
|
}
|
|
269
274
|
|
|
270
275
|
onListRemoveItem(key, index) {
|
|
276
|
+
this.wasFormInputed = true
|
|
271
277
|
let formData = sb.cloneDeep(this.state.formData)
|
|
272
278
|
let field = sb.find(formData, (_, fkkey) => fkkey === key)
|
|
273
279
|
if (!field) return
|
|
@@ -308,6 +314,7 @@ export default class Widget extends Com {
|
|
|
308
314
|
}
|
|
309
315
|
|
|
310
316
|
toggleCheckboxField(key, v) {
|
|
317
|
+
this.wasFormInputed = true
|
|
311
318
|
let formData = sb.cloneDeep(this.state.formData)
|
|
312
319
|
let field = sb.find(formData, (f, fkkey) => f.key === key)
|
|
313
320
|
if (!field) return
|
|
@@ -355,6 +362,7 @@ export default class Widget extends Com {
|
|
|
355
362
|
}
|
|
356
363
|
|
|
357
364
|
toggleRadioField(key, v) {
|
|
365
|
+
this.wasFormInputed = true
|
|
358
366
|
let formData = sb.cloneDeep(this.state.formData)
|
|
359
367
|
let field = sb.find(formData, (f, fkkey) => f.key === key)
|
|
360
368
|
if (!field) return
|
|
@@ -364,6 +372,7 @@ export default class Widget extends Com {
|
|
|
364
372
|
}
|
|
365
373
|
|
|
366
374
|
selectDropdownField(key, v) {
|
|
375
|
+
this.wasFormInputed = true
|
|
367
376
|
let formData = sb.cloneDeep(this.state.formData)
|
|
368
377
|
let field = sb.find(formData, (f, fkkey) => f.key === key)
|
|
369
378
|
if (!field) return
|
|
@@ -722,12 +731,17 @@ export default class Widget extends Com {
|
|
|
722
731
|
this.props.store.createPostback(this.props.cid, postback)
|
|
723
732
|
}
|
|
724
733
|
|
|
734
|
+
onChangeMessageInput() {
|
|
735
|
+
this.wasFormInputed = true
|
|
736
|
+
}
|
|
737
|
+
|
|
725
738
|
renderChat() {
|
|
726
739
|
let $input = (
|
|
727
740
|
<MessageInput
|
|
728
741
|
store={this.props.store}
|
|
729
742
|
ref={this.msgInput}
|
|
730
743
|
cid={this.props.cid}
|
|
744
|
+
onChange={this.onChangeMessageInput}
|
|
731
745
|
onSend={this.sendMessage}
|
|
732
746
|
t={this.props.t}
|
|
733
747
|
/>
|
package/src/chatbox/main.js
CHANGED
|
@@ -14,6 +14,7 @@ export default class Main extends Com {
|
|
|
14
14
|
constructor(props) {
|
|
15
15
|
super(props)
|
|
16
16
|
this.refButton = createRef()
|
|
17
|
+
this.refWidget = createRef()
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
async refreshCSS() {
|
|
@@ -49,7 +50,7 @@ export default class Main extends Com {
|
|
|
49
50
|
|
|
50
51
|
this.checkExpand()
|
|
51
52
|
this.props.store.onResetCSS(this, () => this.refreshCSS())
|
|
52
|
-
this.props.store.onConvoEvent(this, (
|
|
53
|
+
this.props.store.onConvoEvent(this, (ev) => this.onConvoEvent(ev))
|
|
53
54
|
this.props.store.onUpdate(this, (_) => this.checkExpand())
|
|
54
55
|
await this.refreshCSS()
|
|
55
56
|
this.setState({cssready: true})
|
|
@@ -89,11 +90,33 @@ export default class Main extends Com {
|
|
|
89
90
|
onClose={(a) => this.onWidgetClose(a)}
|
|
90
91
|
onGo={(a) => this.showWidget(a)}
|
|
91
92
|
t={this.props.t}
|
|
93
|
+
ref={this.refWidget}
|
|
92
94
|
/>
|
|
93
95
|
</div>
|
|
94
96
|
)
|
|
95
97
|
}
|
|
96
98
|
|
|
99
|
+
onConvoEvent(ev) {
|
|
100
|
+
this.checkExpand()
|
|
101
|
+
this.checkShowBotConvo(ev)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
checkShowBotConvo(ev) {
|
|
105
|
+
let $widget = this.refWidget.current
|
|
106
|
+
if (!$widget) return
|
|
107
|
+
if ($widget.wasFormInputed) return
|
|
108
|
+
if (ev.type !== 'message_sent') return
|
|
109
|
+
if (!this.state.isShowWidget) return
|
|
110
|
+
|
|
111
|
+
let byType = sb.get(ev, 'by.type')
|
|
112
|
+
let byid = sb.get(ev, 'by.id') || ''
|
|
113
|
+
if (!byid.startsWith('bb') || byType !== 'agent') return
|
|
114
|
+
|
|
115
|
+
let cid = sb.get(ev, 'data.message.conversation_id')
|
|
116
|
+
if (!cid) return
|
|
117
|
+
this.showWidget({cid, view: 'chat'})
|
|
118
|
+
}
|
|
119
|
+
|
|
97
120
|
checkExpand() {
|
|
98
121
|
// run on desktop environment only
|
|
99
122
|
if (this.props.store.isMobile()) return
|
package/src/util/campaign.js
CHANGED
|
@@ -35,14 +35,15 @@ export function trackAreaClicked(selector, cb) {
|
|
|
35
35
|
common.map(selector.split('\n'), (selector) => {
|
|
36
36
|
selector = common.trim(selector)
|
|
37
37
|
if (!selector) return
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
on('click', selector, cb)
|
|
39
|
+
//let doms = []
|
|
40
|
+
//try {
|
|
41
|
+
//doms = document.querySelectorAll(selector)
|
|
42
|
+
//} catch (e) {}
|
|
43
|
+
//common.map(doms, (dom) => {
|
|
44
|
+
//if (!dom) return
|
|
45
|
+
//dom.addEventListener('click', cb, false)
|
|
46
|
+
//})
|
|
46
47
|
})
|
|
47
48
|
}
|
|
48
49
|
|
|
@@ -99,3 +100,23 @@ export function trackTimeOnPage(seconds = 0, cb) {
|
|
|
99
100
|
common.clearInterval(timer)
|
|
100
101
|
}, 1000)
|
|
101
102
|
}
|
|
103
|
+
|
|
104
|
+
function on(eventName, selector, fn) {
|
|
105
|
+
document.addEventListener(eventName, function (event) {
|
|
106
|
+
let possibleTargets = document.querySelectorAll(selector)
|
|
107
|
+
let target = event.target
|
|
108
|
+
|
|
109
|
+
for (let i = 0, l = possibleTargets.length; i < l; i++) {
|
|
110
|
+
let el = target
|
|
111
|
+
let p = possibleTargets[i]
|
|
112
|
+
|
|
113
|
+
while (el && el !== document) {
|
|
114
|
+
if (el === p) {
|
|
115
|
+
return fn.call(p, event)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
el = el.parentNode
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
})
|
|
122
|
+
}
|