@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.
Files changed (99) hide show
  1. package/compiled_src/chatbox/Widget.js +12 -0
  2. package/compiled_src/chatbox/main.js +24 -2
  3. package/compiled_src/util/campaign.js +17 -8
  4. package/dist/132.js +6639 -0
  5. package/dist/178.js +406 -0
  6. package/dist/18754d60df1.132.js +1 -0
  7. package/dist/18754d60df1.178.js +1 -0
  8. package/dist/18754d60df1.213.js +1 -0
  9. package/dist/18754d60df1.335.js +1 -0
  10. package/dist/18754d60df1.362.js +1 -0
  11. package/dist/18754d60df1.441.js +1 -0
  12. package/dist/18754d60df1.605.js +1 -0
  13. package/dist/18754d60df1.678.js +1 -0
  14. package/dist/18754d60df1.782.js +1 -0
  15. package/dist/18754d60df1.app.js +1 -0
  16. package/dist/18754d60df1.index.html +33 -0
  17. package/dist/18754d60df1.library.html +33 -0
  18. package/dist/18754d60df1.library.js +1 -0
  19. package/dist/18754d60df1.preview.html +759 -0
  20. package/dist/18754d60df1.preview.js +1 -0
  21. package/dist/18754d60df1.screenshoot.js +1 -0
  22. package/dist/18754d60df1.webview.js +1 -0
  23. package/dist/213.js +2780 -0
  24. package/dist/335.js +372 -0
  25. package/dist/362.js +107 -0
  26. package/dist/441.js +2919 -0
  27. package/dist/605.js +305 -0
  28. package/dist/678.js +107 -0
  29. package/dist/782.js +107 -0
  30. package/dist/HASH +1 -0
  31. package/dist/assets/img/Facebook.64607ec.png +0 -0
  32. package/dist/assets/img/Zalo.6845707.png +0 -0
  33. package/dist/assets/img/award1a.1a58e10.png +0 -0
  34. package/dist/assets/img/award3a.3b74423.png +0 -0
  35. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  36. package/dist/assets/img/award5.39eb7ae.png +0 -0
  37. package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
  38. package/dist/assets/img/caret.998eb8f.svg +1 -0
  39. package/dist/assets/img/convos_empty.2353007.svg +72 -0
  40. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  41. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  42. package/dist/assets/img/done_gray.d7e8203.svg +4 -0
  43. package/dist/assets/img/done_green.b817fd4.svg +4 -0
  44. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  45. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  46. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  47. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  48. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  49. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  50. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  51. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  52. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  53. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  54. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  55. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  56. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  57. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  67. package/dist/assets/img/empty.29bed2d.svg +23 -0
  68. package/dist/assets/img/empty_1.0b98af0.svg +11 -0
  69. package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
  70. package/dist/assets/img/external-link.90577cc.svg +1 -0
  71. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  72. package/dist/assets/img/ghn.070f8e3.svg +17 -0
  73. package/dist/assets/img/ghtk.326eac1.svg +18 -0
  74. package/dist/assets/img/image_default.be0698b.png +0 -0
  75. package/dist/assets/img/info.ebce7ea.svg +1 -0
  76. package/dist/assets/img/loader.37000a7.svg +1 -0
  77. package/dist/assets/img/loading_static.a27f0ac.svg +10 -0
  78. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  79. package/dist/assets/img/main-service2.9b99549.png +0 -0
  80. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  81. package/dist/assets/img/package.8d37d0f.svg +5 -0
  82. package/dist/assets/img/package_fade.763c001.svg +1 -0
  83. package/dist/assets/img/rating--average.1ea492c.svg +12 -0
  84. package/dist/assets/img/rating--great.e3d712e.svg +16 -0
  85. package/dist/assets/img/rating--poor.2938a25.svg +12 -0
  86. package/dist/assets/img/search.f9705ff.svg +1 -0
  87. package/dist/assets/img/send.6db52a9.svg +3 -0
  88. package/dist/assets/img/shop.f7dc7d8.svg +1 -0
  89. package/dist/assets/img/shop_faded.df7845a.svg +1 -0
  90. package/dist/assets/img/subiz-mono.877e9f5.svg +3 -0
  91. package/dist/assets/img/x.26fdfa3.svg +5 -0
  92. package/dist/malicious-app.js +13 -0
  93. package/dist/screenshoot.html +7 -0
  94. package/dist/screenshoot.js +5677 -0
  95. package/index.html +8 -0
  96. package/package.json +10 -10
  97. package/src/chatbox/Widget.js +14 -0
  98. package/src/chatbox/main.js +24 -1
  99. 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.27",
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.10",
15
+ "@subiz/wsclient": "^4.0.14",
16
16
  "cookie_js": "1.4.2",
17
- "core-js": "^3.29.0",
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.2.12",
23
- "preact": "^10.13.0"
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.0",
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.20.2",
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.4",
34
+ "prettier": "^2.8.7",
35
35
  "puppeteer": "^19.7.3",
36
- "webpack": "^5.76.0",
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.11.1"
39
+ "webpack-dev-server": "^4.13.2"
40
40
  }
41
41
  }
@@ -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
  />
@@ -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, (_) => this.checkExpand())
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
@@ -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
- let doms = []
39
- try {
40
- doms = document.querySelectorAll(selector)
41
- } catch (e) {}
42
- common.map(doms, (dom) => {
43
- if (!dom) return
44
- dom.addEventListener('click', cb, false)
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
+ }