@subiz/widget-v4 4.0.91 → 4.0.93

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 (194) hide show
  1. package/compiled_src/bot.js +0 -11
  2. package/compiled_src/call/call.js +0 -61
  3. package/compiled_src/call/css.js +0 -2
  4. package/compiled_src/chatbox/AgentsAvatar.js +0 -16
  5. package/compiled_src/chatbox/AudioAttachments.js +0 -14
  6. package/compiled_src/chatbox/ButtonAttachments.js +1 -14
  7. package/compiled_src/chatbox/Buttons.js +0 -13
  8. package/compiled_src/chatbox/ChatButton.js +1 -78
  9. package/compiled_src/chatbox/DropdownSelect.js +3 -44
  10. package/compiled_src/chatbox/Emoji.js +0 -7
  11. package/compiled_src/chatbox/Event.js +0 -59
  12. package/compiled_src/chatbox/Events.js +4 -44
  13. package/compiled_src/chatbox/FileAttachments.js +0 -14
  14. package/compiled_src/chatbox/FormAttachment.js +1 -52
  15. package/compiled_src/chatbox/FormAttachments.js +0 -14
  16. package/compiled_src/chatbox/FormSubmitAttachments.js +0 -11
  17. package/compiled_src/chatbox/GenericTemplateAttachments.js +1 -20
  18. package/compiled_src/chatbox/Header.js +1 -46
  19. package/compiled_src/chatbox/ImageAttachments.js +0 -16
  20. package/compiled_src/chatbox/InfoMessage.js +0 -13
  21. package/compiled_src/chatbox/ListField.js +0 -16
  22. package/compiled_src/chatbox/MessageInput.js +1 -47
  23. package/compiled_src/chatbox/Order.js +0 -35
  24. package/compiled_src/chatbox/OrderAttachments.js +1 -23
  25. package/compiled_src/chatbox/PoweredBy.js +0 -7
  26. package/compiled_src/chatbox/ProductAttachments.js +0 -19
  27. package/compiled_src/chatbox/QuickReplies.js +0 -18
  28. package/compiled_src/chatbox/Rating.js +0 -37
  29. package/compiled_src/chatbox/ShadowDomRoot.js +0 -9
  30. package/compiled_src/chatbox/TextMessage.js +0 -64
  31. package/compiled_src/chatbox/Typing.js +0 -15
  32. package/compiled_src/chatbox/VideoAttachments.js +0 -14
  33. package/compiled_src/chatbox/Widget.js +6 -167
  34. package/compiled_src/chatbox/css.js +0 -2
  35. package/compiled_src/chatbox/dragscroll.js +1 -5
  36. package/compiled_src/chatbox/main.js +3 -43
  37. package/compiled_src/chatbox/releaseAnimation.js +0 -11
  38. package/compiled_src/chatbox/spinner.js +0 -10
  39. package/compiled_src/chatbox/time.js +0 -22
  40. package/compiled_src/chatbox/touchscroll.js +0 -7
  41. package/compiled_src/common.js +0 -22
  42. package/compiled_src/contact/contact.js +2 -52
  43. package/compiled_src/contact/css.js +0 -2
  44. package/compiled_src/lib.js +19 -46
  45. package/compiled_src/notif/css.js +0 -2
  46. package/compiled_src/notif/notif.js +0 -63
  47. package/compiled_src/order/address_picker.js +4 -38
  48. package/compiled_src/order/icon.js +0 -16
  49. package/compiled_src/order/index.js +1 -34
  50. package/compiled_src/order/order.js +2 -156
  51. package/compiled_src/plugin.js +1 -77
  52. package/compiled_src/popup/countdown.js +2 -33
  53. package/compiled_src/popup/css.js +0 -2
  54. package/compiled_src/popup/popup.js +2 -165
  55. package/compiled_src/popup/tick.core.commonjs.js +72 -222
  56. package/compiled_src/popup/tick.view.flip.commonjs.js +23 -31
  57. package/compiled_src/store/api.js +103 -66
  58. package/compiled_src/store/api_fake.js +3 -39
  59. package/compiled_src/store/realtime_fake.js +0 -6
  60. package/compiled_src/store/store.js +46 -257
  61. package/compiled_src/util/campaign.js +0 -13
  62. package/compiled_src/util/common.js +15 -190
  63. package/compiled_src/util/common.test.js +0 -4
  64. package/compiled_src/util/extractor.js +1 -21
  65. package/compiled_src/util/extractor.test.js +0 -3
  66. package/compiled_src/util/gate.js +0 -7
  67. package/compiled_src/util/gate.test.js +1 -2
  68. package/compiled_src/util/index.js +1 -7
  69. package/compiled_src/util/mutex.js +31 -0
  70. package/compiled_src/util/op.js +1 -14
  71. package/compiled_src/util/pubsub.js +0 -6
  72. package/compiled_src/util/pubsub.test.js +0 -2
  73. package/package.json +12 -12
  74. package/src/chatbox/main.js +3 -3
  75. package/src/lib.js +24 -2
  76. package/src/store/api.js +111 -22
  77. package/src/store/api_fake.js +5 -6
  78. package/src/store/store.js +38 -14
  79. package/src/util/common.js +0 -4
  80. package/src/util/index.js +1 -0
  81. package/src/util/mutex.js +27 -0
  82. package/dist/0b82fa7e5c3b07b40a44.png +0 -1
  83. package/dist/0f4af006e38ee8b93633.png +0 -1
  84. package/dist/132.js +0 -6777
  85. package/dist/178.js +0 -573
  86. package/dist/17f00e48d38.132.js +0 -1
  87. package/dist/17f00e48d38.178.js +0 -1
  88. package/dist/17f00e48d38.213.js +0 -1
  89. package/dist/17f00e48d38.335.js +0 -1
  90. package/dist/17f00e48d38.362.js +0 -1
  91. package/dist/17f00e48d38.441.js +0 -1
  92. package/dist/17f00e48d38.605.js +0 -1
  93. package/dist/17f00e48d38.678.js +0 -1
  94. package/dist/17f00e48d38.782.js +0 -1
  95. package/dist/17f00e48d38.app.js +0 -1
  96. package/dist/17f00e48d38.index.html +0 -22
  97. package/dist/17f00e48d38.library.html +0 -22
  98. package/dist/17f00e48d38.library.js +0 -1
  99. package/dist/17f00e48d38.preview.html +0 -759
  100. package/dist/17f00e48d38.preview.js +0 -1
  101. package/dist/17f00e48d38.screenshoot.js +0 -1
  102. package/dist/1ea1c6cd21d25176810c.png +0 -1
  103. package/dist/213.js +0 -3188
  104. package/dist/292d42404e1b03398f61.png +0 -1
  105. package/dist/312d376370831b7bea83.png +0 -1
  106. package/dist/313d1bfc1cf776d1aefe.png +0 -1
  107. package/dist/335.js +0 -411
  108. package/dist/362.js +0 -157
  109. package/dist/441.js +0 -2732
  110. package/dist/4aa58bb7a66bb44975aa.png +0 -1
  111. package/dist/56ce063bc6c81adb7322.png +0 -1
  112. package/dist/605.js +0 -328
  113. package/dist/678.js +0 -157
  114. package/dist/6a411166ef5cc79e0714.png +0 -1
  115. package/dist/6faf403782fefacc1649.png +0 -1
  116. package/dist/782.js +0 -204
  117. package/dist/79dca33c68fab79c067f.png +0 -1
  118. package/dist/82da1578fa84f9debaeb.png +0 -1
  119. package/dist/8b8e0f0824743974b282.png +0 -1
  120. package/dist/8d551390d81e39130a3c.png +0 -1
  121. package/dist/9fc61b9479877ebdb6c7.png +0 -1
  122. package/dist/HASH +0 -1
  123. package/dist/a165d31dcb3dc90f1057.png +0 -1
  124. package/dist/a98d4a5698812c4426b3.png +0 -1
  125. package/dist/assets/img/Facebook.64607ec.png +0 -0
  126. package/dist/assets/img/Zalo.6845707.png +0 -0
  127. package/dist/assets/img/award1a.1a58e10.png +0 -0
  128. package/dist/assets/img/award3a.3b74423.png +0 -0
  129. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  130. package/dist/assets/img/award5.39eb7ae.png +0 -0
  131. package/dist/assets/img/bubble_default.7d5e4ab.svg +0 -20
  132. package/dist/assets/img/caret.998eb8f.svg +0 -1
  133. package/dist/assets/img/convos_empty.2353007.svg +0 -72
  134. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  135. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  136. package/dist/assets/img/done_gray.d7e8203.svg +0 -4
  137. package/dist/assets/img/done_green.b817fd4.svg +0 -4
  138. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  139. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  140. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  141. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  142. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  143. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  144. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  145. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  146. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  147. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  148. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  149. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  150. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  151. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  152. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  153. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  154. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  155. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  156. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  157. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  158. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  159. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  160. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  161. package/dist/assets/img/empty.29bed2d.svg +0 -23
  162. package/dist/assets/img/empty_1.0b98af0.svg +0 -11
  163. package/dist/assets/img/examplte_logo.f86535f.svg +0 -1
  164. package/dist/assets/img/external-link.90577cc.svg +0 -1
  165. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  166. package/dist/assets/img/ghn.070f8e3.svg +0 -17
  167. package/dist/assets/img/ghtk.326eac1.svg +0 -18
  168. package/dist/assets/img/image_default.be0698b.png +0 -0
  169. package/dist/assets/img/info.ebce7ea.svg +0 -1
  170. package/dist/assets/img/loader.37000a7.svg +0 -1
  171. package/dist/assets/img/loading_static.8f403ae.svg +0 -10
  172. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  173. package/dist/assets/img/main-service2.9b99549.png +0 -0
  174. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  175. package/dist/assets/img/package.8d37d0f.svg +0 -5
  176. package/dist/assets/img/package_fade.763c001.svg +0 -1
  177. package/dist/assets/img/rating--average.1ea492c.svg +0 -12
  178. package/dist/assets/img/rating--great.e3d712e.svg +0 -16
  179. package/dist/assets/img/rating--poor.2938a25.svg +0 -12
  180. package/dist/assets/img/search.f9705ff.svg +0 -1
  181. package/dist/assets/img/send.6db52a9.svg +0 -3
  182. package/dist/assets/img/shop.f7dc7d8.svg +0 -1
  183. package/dist/assets/img/shop_faded.df7845a.svg +0 -1
  184. package/dist/assets/img/subiz-mono.877e9f5.svg +0 -3
  185. package/dist/assets/img/x.26fdfa3.svg +0 -5
  186. package/dist/c41606bf9d1b604e46d5.png +0 -1
  187. package/dist/ce1f7450ce6c1aacd330.png +0 -1
  188. package/dist/cf8c01e88f4770a6e3e5.png +0 -1
  189. package/dist/dfbcfeab1d5622a737e2.png +0 -1
  190. package/dist/e4893ed8c2f7b8329919.png +0 -1
  191. package/dist/ec2ab4eb4ef73d186186.png +0 -1
  192. package/dist/malicious-app.js +0 -13
  193. package/dist/screenshoot.html +0 -7
  194. package/dist/screenshoot.js +0 -5919
@@ -4,31 +4,22 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _index = _interopRequireDefault(require("../util/index.js"));
9
-
10
8
  var _ListField = _interopRequireDefault(require("./ListField.js"));
11
-
12
9
  var _common = require("../common.js");
13
-
14
10
  var _preact = require("preact");
15
-
16
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
12
  class FormAttachment extends _common.Com {
19
13
  constructor(props) {
20
14
  super(props);
21
15
  this.props.store.onUpdate(this, _ => this.forceUpdate());
22
16
  let user = this.props.store.matchUser();
23
17
  let fields = _index.default.get(this.props.form, 'fields') || [];
24
-
25
18
  let formData = _index.default.map(fields, field => {
26
19
  let is_required = field.is_required || false;
27
20
  var state = _index.default.parseJSON(field.state) || {};
28
21
  if (!is_required) is_required = state.require || false;
29
-
30
22
  var userattr = _index.default.getUserAttr(user, field.name, state.type || 'text');
31
-
32
23
  return {
33
24
  name: field.name,
34
25
  items: field.items,
@@ -38,25 +29,20 @@ class FormAttachment extends _common.Com {
38
29
  type: field.input_type
39
30
  };
40
31
  });
41
-
42
32
  this.setState({
43
33
  formData
44
34
  });
45
35
  }
46
-
47
36
  isSummited() {
48
37
  let found = _index.default.find(this.state.formData, field => !!field.answered);
49
-
50
38
  if (found) return true;
51
39
  let convo = this.props.store.matchConvo(_index.default.convoOfEv(this.props.ev));
52
40
  return convo.state === 'ended';
53
41
  }
54
-
55
42
  render() {
56
43
  if (_index.default.size(this.state.formData) === 0) return null;
57
44
  let $fields = this.renderFields();
58
45
  let $submitbutton = null;
59
-
60
46
  if (!this.isSummited()) {
61
47
  $submitbutton = (0, _preact.h)("div", {
62
48
  class: "mt-2"
@@ -66,18 +52,16 @@ class FormAttachment extends _common.Com {
66
52
  class: "form-attachment--submit-btn"
67
53
  }, this.props.t('btn_submit_form_attachment')));
68
54
  }
69
-
70
55
  return (0, _preact.h)("div", {
71
56
  class: "form-attachment",
72
57
  onClick: e => e.stopPropagation()
73
58
  }, this.props.t(this.props.form.title) || this.props.t('capture_lead_title'), $fields, $submitbutton);
74
59
  }
75
-
76
60
  focus() {
77
61
  if (this.props.store.isPreview) return;
78
62
  if (_index.default.size(this.state.formData) === 0) return;
79
- let $field;
80
63
 
64
+ let $field;
81
65
  if (this.isFormFilled()) {
82
66
  var keys = Object.keys(this.state.formData);
83
67
  var lastkey = keys[_index.default.size(keys) - 1];
@@ -88,30 +72,23 @@ class FormAttachment extends _common.Com {
88
72
  if (!firstunfilledfield) return;
89
73
  $field = this['field.' + encode(firstunfilledfield.name)];
90
74
  }
91
-
92
75
  if ($field) $field.focus();
93
76
  }
94
-
95
77
  firstUnfilledField() {
96
78
  return _index.default.find(this.state.formData, field => field.value == null || field.value === '');
97
79
  }
98
-
99
80
  isFormFilled() {
100
81
  return !_index.default.find(this.state.formData, field => field.value == null || field.value === '');
101
82
  }
102
-
103
83
  onInputChange(index, val) {
104
84
  let formData = _index.default.cloneDeep(this.state.formData);
105
-
106
85
  formData[index].value = val;
107
86
  this.setState({
108
87
  formData
109
88
  });
110
89
  }
111
-
112
90
  onListAddItem(index, val) {
113
91
  let formData = _index.default.cloneDeep(this.state.formData);
114
-
115
92
  let field = formData[index];
116
93
  field.value = field.value || [];
117
94
  field.value.push(val);
@@ -119,10 +96,8 @@ class FormAttachment extends _common.Com {
119
96
  formData
120
97
  });
121
98
  }
122
-
123
99
  onListRemoveItem(index, vindex) {
124
100
  let formData = _index.default.cloneDeep(this.state.formData);
125
-
126
101
  let field = formData[index];
127
102
  field.value = field.value || [];
128
103
  field.value.splice(vindex, 1);
@@ -130,14 +105,12 @@ class FormAttachment extends _common.Com {
130
105
  formData
131
106
  });
132
107
  }
133
-
134
108
  renderFields() {
135
109
  if (_index.default.size(this.state.formData) === 0) return null;
136
110
  let $fields = null;
137
111
  $fields = _index.default.map(this.state.formData, (field, index) => {
138
112
  let $field = null;
139
113
  var errclass = field.error ? 'input--error' : '';
140
-
141
114
  if (field.type === 'text') {
142
115
  if (this.isSummited()) {
143
116
  $field = (0, _preact.h)("div", {
@@ -211,9 +184,7 @@ class FormAttachment extends _common.Com {
211
184
  }, (0, _preact.h)("div", null)));
212
185
  } else if (field.type === 'list') {
213
186
  let selected = field.value || [];
214
-
215
187
  let items = _index.default.filter(_index.default.get(field, 'items', []), item => !selected.includes(item));
216
-
217
188
  $field = (0, _preact.h)(_ListField.default, {
218
189
  selected: selected,
219
190
  items: items,
@@ -231,9 +202,7 @@ class FormAttachment extends _common.Com {
231
202
  type: "date"
232
203
  });
233
204
  }
234
-
235
205
  let label = field.label;
236
-
237
206
  if (field.name === 'fullname') {
238
207
  label = this.props.t('fullname');
239
208
  } else if (field.name === 'emails') {
@@ -241,7 +210,6 @@ class FormAttachment extends _common.Com {
241
210
  } else if (field.name === 'phones') {
242
211
  label = this.props.t('phones');
243
212
  }
244
-
245
213
  return (0, _preact.h)("div", null, (0, _preact.h)("p", {
246
214
  class: "label mt-3"
247
215
  }, label, field.is_required ? (0, _preact.h)("span", {
@@ -252,10 +220,8 @@ class FormAttachment extends _common.Com {
252
220
  });
253
221
  return (0, _preact.h)("div", null, $fields);
254
222
  }
255
-
256
223
  async submit() {
257
224
  var hasError = false;
258
-
259
225
  _index.default.map(this.state.formData, field => {
260
226
  if (field.is_required && (field.value === undefined || field.value === '' || _index.default.size(field.value) === 0 && Array.isArray(field.value))) {
261
227
  field.error = this.props.t('error_empty');
@@ -263,7 +229,6 @@ class FormAttachment extends _common.Com {
263
229
  } else {
264
230
  field.error = '';
265
231
  }
266
-
267
232
  if (field.name === 'emails' && field.value) {
268
233
  if (!_index.default.isEmail(field.value)) {
269
234
  field.error = this.props.t('error_email_invalid');
@@ -271,49 +236,38 @@ class FormAttachment extends _common.Com {
271
236
  }
272
237
  }
273
238
  });
274
-
275
239
  this.forceUpdate();
276
240
  if (hasError) return;
277
241
  let user = {};
278
-
279
242
  let formData = _index.default.cloneDeep(this.state.formData);
280
-
281
243
  _index.default.map(formData, field => {
282
244
  var attr = {
283
245
  key: field.name
284
246
  };
285
247
  field.answered = new _index.default.Date().getTime();
286
-
287
248
  if (field.type === 'number') {
288
249
  attr.number = parseInt(field.value);
289
250
  field.answer = _index.default.stringify(attr.number);
290
251
  }
291
-
292
252
  if (field.type === 'datetime') {
293
253
  attr.datetime = new _index.default.Date(field.value).toISOString();
294
254
  field.answer = _index.default.stringify(attr.datetime);
295
255
  }
296
-
297
256
  if (field.type === 'list') {
298
257
  attr.list = field.value;
299
258
  field.answer = _index.default.stringify(attr.list);
300
259
  }
301
-
302
260
  if (field.type === 'text' || field.type === 'boolean') {
303
261
  attr[field.type] = field.value;
304
262
  field.answer = _index.default.stringify(field.value);
305
263
  }
306
-
307
264
  _index.default.setUserAttr(user, attr);
308
265
  });
309
-
310
266
  _index.default.map(formData, field => {
311
267
  let ffield = _index.default.find(this.props.form.fields, ffield => ffield.name === field.name);
312
-
313
268
  if (!ffield) return;
314
269
  ffield.answered = field.answered;
315
270
  });
316
-
317
271
  this.setState({
318
272
  formData
319
273
  });
@@ -328,19 +282,14 @@ class FormAttachment extends _common.Com {
328
282
  }
329
283
  }]
330
284
  };
331
-
332
285
  let cid = _index.default.convoOfEv(this.props.ev);
333
-
334
286
  this.props.store.sendConvoEvent(cid, 'message_sent', {
335
287
  message
336
288
  });
337
289
  this.props.onSubmit && this.props.onSubmit();
338
290
  }
339
-
340
291
  }
341
-
342
292
  exports.default = FormAttachment;
343
-
344
293
  function encode(key) {
345
294
  return btoa(key).split('=').join('');
346
295
  }
@@ -4,36 +4,26 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _index = _interopRequireDefault(require("../util/index.js"));
9
-
10
8
  var _FormAttachment = _interopRequireDefault(require("./FormAttachment.js"));
11
-
12
9
  var _common = require("../common.js");
13
-
14
10
  var _preact = require("preact");
15
-
16
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
12
  class FormAttachments extends _common.Com {
19
13
  constructor(props) {
20
14
  super(props);
21
15
  }
22
-
23
16
  render() {
24
17
  let byType = _index.default.get(this.props.ev, 'by.type');
25
-
26
18
  if (byType === 'user') return;
27
19
  let forms = [];
28
20
  let attachments = _index.default.get(this.props.ev, 'data.message.attachments') || [];
29
-
30
21
  _index.default.each(attachments, att => {
31
22
  if (!att) return;
32
23
  if (att.type !== 'form' && att.type !== 'ask_info_form') return;
33
24
  att.form._type = att.type;
34
25
  forms.push(att.form);
35
26
  });
36
-
37
27
  let $forms = _index.default.map(forms, (form, formIndex) => {
38
28
  return (0, _preact.h)(_FormAttachment.default, {
39
29
  store: this.props.store,
@@ -47,18 +37,14 @@ class FormAttachments extends _common.Com {
47
37
  t: this.props.t
48
38
  });
49
39
  });
50
-
51
40
  if ($forms.length === 0) return null;
52
41
  return (0, _preact.h)("div", {
53
42
  class: "message-agent"
54
43
  }, $forms);
55
44
  }
56
-
57
45
  focus() {
58
46
  var $form = this['form.0'];
59
47
  if ($form) $form.focus();
60
48
  }
61
-
62
49
  }
63
-
64
50
  exports.default = FormAttachments;
@@ -4,39 +4,28 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _index = _interopRequireDefault(require("../util/index.js"));
9
-
10
8
  var _common = require("../common.js");
11
-
12
9
  var _preact = require("preact");
13
-
14
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
11
  class FormSubmitAttachments extends _common.Com {
17
12
  constructor(props) {
18
13
  super(props);
19
14
  }
20
-
21
15
  render() {
22
16
  return null;
23
17
  let submits = [];
24
18
  let attachments = _index.default.get(this.props.ev, 'data.message.attachments') || [];
25
-
26
19
  _index.default.each(attachments, att => {
27
20
  if (!att) return;
28
21
  if (att.type !== 'form_submit') return;
29
22
  if (!att.form_submit) return;
30
23
  submits.push(att.form_submit);
31
24
  });
32
-
33
25
  let $submits = _index.default.map(submits, (submit, index) => (0, _preact.h)("div", {
34
26
  class: "info-message"
35
27
  }, (0, _preact.h)("span", null, this.props.tt('prechat_form_thanks'))));
36
-
37
28
  return (0, _preact.h)("div", null, $submits);
38
29
  }
39
-
40
30
  }
41
-
42
31
  exports.default = FormSubmitAttachments;
@@ -4,32 +4,24 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _Buttons = _interopRequireDefault(require("./Buttons.js"));
9
-
10
8
  var _index = _interopRequireDefault(require("../util/index.js"));
11
-
12
9
  var _touchscroll = _interopRequireDefault(require("./touchscroll"));
13
-
14
10
  var _common = require("../common.js");
15
-
16
11
  var _preact = require("preact");
17
-
18
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
13
  class GenericTemplateAttachments extends _common.Com {
21
14
  constructor(props) {
22
15
  super(props);
23
16
  this.state = {
24
17
  focusing: 0
25
18
  };
19
+
26
20
  this.galleryRef = (0, _preact.createRef)();
27
21
  }
28
-
29
22
  componentDidMount() {
30
23
  this.bindDrag();
31
24
  }
32
-
33
25
  focus(eleindex) {
34
26
  this.setState({
35
27
  focusing: eleindex
@@ -42,15 +34,11 @@ class GenericTemplateAttachments extends _common.Com {
42
34
 
43
35
  render() {
44
36
  let byType = _index.default.get(this.props.ev, 'by.type');
45
-
46
37
  if (byType === 'user') return null;
47
38
 
48
39
  let attachments = _index.default.get(this.props.ev, 'data.message.attachments', []);
49
-
50
40
  let generics = _index.default.filter(attachments, att => _index.default.get(att, 'type') === 'generic');
51
-
52
41
  if (generics.length === 0) return null;
53
-
54
42
  var $generics = _index.default.map(generics, (gen, index) => {
55
43
  var $eles = _index.default.map(gen.elements, ele => {
56
44
  let title = this.props.t.i18n(ele.i18n_title) || ele.title;
@@ -75,9 +63,7 @@ class GenericTemplateAttachments extends _common.Com {
75
63
  t: this.props.t
76
64
  }));
77
65
  });
78
-
79
66
  let elements = _index.default.get(attachments, '0.elements', []);
80
-
81
67
  let leftNavigatorCls = 'generic-attachment-navigator generic-attachment-navigator--left';
82
68
  let rightNavigatorCls = 'generic-attachment-navigator generic-attachment-navigator--right';
83
69
  if (this.state.focusing === 0) leftNavigatorCls += ' generic-attachment-navigator--disabled';
@@ -99,17 +85,12 @@ class GenericTemplateAttachments extends _common.Com {
99
85
  class: "generic-attachment-navigator-icon"
100
86
  }, "\u203A"))));
101
87
  });
102
-
103
88
  return $generics;
104
89
  }
105
-
106
90
  bindDrag() {
107
91
  if (!this.props.store.isMobile()) return;
108
92
  let eles = document.getElementsByClassName('generic-attachment');
109
-
110
93
  _index.default.map(eles, ele => (0, _touchscroll.default)(ele, () => {}));
111
94
  }
112
-
113
95
  }
114
-
115
96
  exports.default = GenericTemplateAttachments;
@@ -4,34 +4,25 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _AgentsAvatar = _interopRequireDefault(require("./AgentsAvatar.js"));
9
-
10
8
  var _index = _interopRequireDefault(require("../util/index.js"));
11
-
12
9
  var _common = require("../common.js");
13
-
14
10
  var _preact = require("preact");
15
-
16
11
  var _Emoji = _interopRequireDefault(require("./Emoji.js"));
17
-
18
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
13
  class Header extends _common.Com {
21
14
  constructor(props) {
22
15
  super(props);
23
16
  }
24
-
25
17
  render() {
26
18
  let headerMode = 'collapsed';
27
19
  let cls = 'widget-header';
28
20
  let renderSocial = false;
29
21
  let renderTeam = false;
30
22
  let renderCollapsed = this.props.view !== 'list' && headerMode === 'collapsed';
31
- let accSetting = this.props.plugin.chatbox || {};
32
23
 
24
+ let accSetting = this.props.plugin.chatbox || {};
33
25
  let layout = _index.default.get(accSetting, 'header.layout');
34
-
35
26
  if (renderCollapsed) {
36
27
  cls += ' widget-header--collapsed';
37
28
  } else {
@@ -39,23 +30,17 @@ class Header extends _common.Com {
39
30
  renderSocial = layout === 'social';
40
31
  renderTeam = !renderSocial;
41
32
  }
42
-
43
33
  return (0, _preact.h)("div", {
44
34
  class: cls
45
35
  }, this.renderCollapsedHeader(renderCollapsed), this.renderSocial(renderSocial), this.renderTeam(renderTeam));
46
36
  }
47
-
48
37
  renderCollapsedHeader(show) {
49
38
  let accSetting = this.props.plugin.chatbox || {};
50
39
  let acc = this.props.store.matchAccount();
51
40
  let state = acc.is_online ? this.props.t('agent_online') : this.props.t('agent_offline');
52
-
53
41
  let tagline = _index.default.get(accSetting, `tagline`, {});
54
-
55
42
  let desc = this.props.t.i18n(tagline) || accSetting.introduction || state;
56
-
57
43
  let agentIdsJoined = _index.default.map(this.getAgentJoined(this.props.cid), agent => agent.id);
58
-
59
44
  let cls = 'widget-header--inner widget-header--inner--collapsed';
60
45
  if (!show) cls += ' widget-header--inner--hidden';
61
46
  return (0, _preact.h)("div", {
@@ -74,15 +59,12 @@ class Header extends _common.Com {
74
59
  title: desc
75
60
  }, desc)), this.renderCloseButton());
76
61
  }
77
-
78
62
  renderSocial(show) {
79
63
  let accSetting = this.props.plugin.chatbox || {};
80
64
  let acc = this.props.store.matchAccount();
81
65
  let links = _index.default.get(accSetting, 'header.links') || [];
82
-
83
66
  let $links = _index.default.map(links, link => {
84
67
  if (!link.url || !link.type || link.type === 'subiz') return null;
85
-
86
68
  if (link.type === 'email') {
87
69
  return (0, _preact.h)("div", null, (0, _preact.h)("a", {
88
70
  href: `mailto:${link.url}`,
@@ -91,7 +73,6 @@ class Header extends _common.Com {
91
73
  class: `social__links-logo social__links-logo--${link.type}`
92
74
  })));
93
75
  }
94
-
95
76
  return (0, _preact.h)("div", null, (0, _preact.h)("a", {
96
77
  href: link.url,
97
78
  target: "_blank",
@@ -101,21 +82,16 @@ class Header extends _common.Com {
101
82
  class: `social__links-logo social__links-logo--${link.type}`
102
83
  })));
103
84
  });
104
-
105
85
  const DEFTEAMINTO = `Chúng tôi sẵn sàng trợ giúp :wave:.
106
86
  Vui lòng hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi của bạn`;
107
-
108
87
  let tagline = _index.default.get(accSetting, `tagline`, {});
109
-
110
88
  var teamintro = this.props.t.i18n(tagline) || accSetting.introduction || this.props.t('team_intro') || DEFTEAMINTO;
111
-
112
89
  var tags = _index.default.extractText(teamintro).map(tag => {
113
90
  if (tag.type === 'emoji') return (0, _preact.h)(_Emoji.default, {
114
91
  emojiCode: tag.text
115
92
  });
116
93
  return tag.text;
117
94
  });
118
-
119
95
  let cls = 'widget-header--inner widget-header--inner--expanded';
120
96
  if (!show) cls += ' widget-header--inner--hidden';
121
97
  return (0, _preact.h)("div", {
@@ -138,23 +114,18 @@ Vui lòng hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi
138
114
  class: "social__links"
139
115
  }, $links)))));
140
116
  }
141
-
142
117
  renderTeam(show) {
143
118
  let accSetting = this.props.plugin.chatbox || {};
144
119
  const DEFTEAMINTO = `Chúng tôi sẵn sàng trợ giúp :wave:.
145
120
  Vui lòng hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi của bạn`;
146
-
147
121
  let tagline = _index.default.get(accSetting, `tagline`, {});
148
-
149
122
  var teamintro = this.props.t.i18n(tagline) || accSetting.introduction || this.props.t('team_intro') || DEFTEAMINTO;
150
-
151
123
  var tags = _index.default.extractText(teamintro).map(tag => {
152
124
  if (tag.type === 'emoji') return (0, _preact.h)(_Emoji.default, {
153
125
  emojiCode: tag.text
154
126
  });
155
127
  return tag.text;
156
128
  });
157
-
158
129
  let cls = 'widget-header--inner widget-header--inner--expanded';
159
130
  if (!show) cls += ' widget-header--inner--hidden';
160
131
  return (0, _preact.h)("div", {
@@ -179,36 +150,29 @@ Vui lòng hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi
179
150
  class: "widget-header--description"
180
151
  }, tags)))));
181
152
  }
182
-
183
153
  getTitle() {
184
154
  let accSetting = this.props.plugin.chatbox || {};
185
155
  let acc = this.props.store.matchAccount();
186
156
  let agentsJoined = this.getAgentJoined(this.props.cid);
187
-
188
157
  let caption = _index.default.get(this.props.plugin, 'chatbox.caption', {});
189
-
190
158
  let title = this.props.t.i18n(caption) || accSetting.title;
191
159
  return getJoinedNameMember(agentsJoined) || title || acc.name || this.props.t('widget_title');
192
160
  }
193
-
194
161
  renderBackButton() {
195
162
  let allconvos = this.props.store.matchConvo('*');
196
163
  if (_index.default.size(allconvos) === 0) return null;
197
164
  var $unreadcount = null;
198
165
  let user = this.props.store.matchUser();
199
166
  let unreadcount = 0;
200
-
201
167
  _index.default.map(allconvos, convo => {
202
168
  if (convo.id == this.props.cid) return;
203
169
  if (!_index.default.isConvoSeen(convo, user.id)) unreadcount++;
204
170
  });
205
-
206
171
  if (unreadcount !== 0) {
207
172
  $unreadcount = (0, _preact.h)("span", {
208
173
  class: "widget-header--total-unread-convo"
209
174
  }, unreadcount);
210
175
  }
211
-
212
176
  return (0, _preact.h)("div", {
213
177
  class: `widget-header--wrap-button-back ${unreadcount ? 'widget-header--has-convo-unred' : ''}`,
214
178
  onClick: e => this.onBackClick(e)
@@ -217,7 +181,6 @@ Vui lòng hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi
217
181
  "data-tooltip": this.props.t('menu_back')
218
182
  }), $unreadcount);
219
183
  }
220
-
221
184
  renderCloseButton() {
222
185
  let accSetting = this.props.plugin.chatbox || {};
223
186
  if (accSetting.hide_close_button) return null;
@@ -230,29 +193,21 @@ Vui lòng hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi
230
193
  class: "widget-header--button-close-icon"
231
194
  }));
232
195
  }
233
-
234
196
  onBackClick(e) {
235
197
  e.stopPropagation();
236
198
  e.preventDefault();
237
199
  this.props.onGotoList && this.props.onGotoList();
238
200
  }
239
-
240
201
  onCloseClick(e) {
241
202
  e.stopPropagation();
242
203
  e.preventDefault();
243
204
  this.props.onClose && this.props.onClose();
244
205
  }
245
-
246
206
  getAgentJoined(cid) {
247
207
  var convo = this.props.store.matchConvo(cid) || {};
248
-
249
208
  let joined = _index.default.filter(convo.members, mem => mem.type === 'agent' && mem.membership === 'active');
250
-
251
209
  return joined;
252
210
  }
253
-
254
211
  }
255
-
256
212
  exports.default = Header;
257
-
258
213
  let getJoinedNameMember = agents => _index.default.map(agents, agent => agent.name).join(', ');
@@ -4,42 +4,29 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _index = _interopRequireDefault(require("../util/index.js"));
9
-
10
8
  var _common = require("../common.js");
11
-
12
9
  var _preact = require("preact");
13
-
14
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
11
  class ImageAttachment extends _common.Com {
17
12
  constructor(props) {
18
13
  super(props);
19
14
  }
20
-
21
15
  render() {
22
16
  var attachments = _index.default.get(this.props.ev, 'data.message.attachments', []);
23
-
24
17
  var images = [];
25
-
26
18
  let byType = _index.default.get(this.props.ev, 'by.type');
27
-
28
19
  _index.default.each(attachments, (att, i) => {
29
20
  if (!att) return;
30
21
  if (!_index.default.includes(att.mimetype, 'image')) return;
31
22
  if (!att.url) return;
32
23
  var uri = att.url;
33
-
34
24
  if (!uri.startsWith('https://') && !uri.startsWith('http://') && !uri.startsWith('content://') && !uri.startsWith('data:')) {
35
25
  att.url = this.props.store.FileURL + uri;
36
26
  }
37
-
38
27
  images.push(att);
39
28
  });
40
-
41
29
  if (images.length === 0) return null;
42
-
43
30
  var $images = _index.default.map(images, (image, index) => (0, _preact.h)("div", {
44
31
  class: `image-attachment image-attachment--${byType}`
45
32
  }, (0, _preact.h)("a", {
@@ -51,7 +38,6 @@ class ImageAttachment extends _common.Com {
51
38
  src: this.props.store.replaceFileUrl(image.thumbnail_url || image.url),
52
39
  onload: e => this.props.onLoad && this.props.onLoad()
53
40
  }))));
54
-
55
41
  if (byType === 'agent') {
56
42
  return (0, _preact.h)("div", {
57
43
  class: "message-agent"
@@ -62,7 +48,5 @@ class ImageAttachment extends _common.Com {
62
48
  }, $images);
63
49
  }
64
50
  }
65
-
66
51
  }
67
-
68
52
  exports.default = ImageAttachment;