@subiz/widget-v4 4.0.59 → 4.0.64

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 (152) hide show
  1. package/assets/img/caret.svg +1 -0
  2. package/assets/img/done_green.svg +4 -0
  3. package/assets/img/empty_1.svg +11 -0
  4. package/assets/img/ghn.svg +17 -0
  5. package/assets/img/ghtk.svg +18 -0
  6. package/assets/img/home.svg +1 -0
  7. package/assets/img/info.svg +1 -0
  8. package/assets/img/loader.svg +1 -0
  9. package/assets/img/map-pin.svg +1 -0
  10. package/assets/img/not_found_search.png +0 -0
  11. package/assets/img/package.svg +5 -0
  12. package/assets/img/package_fade.svg +1 -0
  13. package/assets/img/phone.svg +1 -0
  14. package/assets/img/search.svg +1 -0
  15. package/assets/img/shop.svg +1 -0
  16. package/assets/img/shop_faded.svg +1 -0
  17. package/assets/img/user.svg +1 -0
  18. package/assets/img/x.svg +5 -0
  19. package/assets/less/chatbox.less +35 -0
  20. package/assets/less/dropdown_select.less +130 -0
  21. package/assets/less/form.less +7 -20
  22. package/assets/less/order.less +489 -0
  23. package/assets/less/rating.less +3 -8
  24. package/babel.config.js +2 -4
  25. package/compiled_src/bot.js +7 -1
  26. package/compiled_src/chatbox/DropdownSelect.js +248 -0
  27. package/compiled_src/chatbox/Event.js +4 -2
  28. package/compiled_src/chatbox/Events.js +1 -0
  29. package/compiled_src/chatbox/Order.js +285 -0
  30. package/compiled_src/chatbox/OrderAttachments.js +2 -1
  31. package/compiled_src/chatbox/TextMessage.js +9 -2
  32. package/compiled_src/chatbox/Widget.js +44 -3
  33. package/compiled_src/chatbox/main.js +2 -1
  34. package/compiled_src/chatbox/spinner.js +1 -1
  35. package/compiled_src/chatbox/time.js +3 -1
  36. package/compiled_src/common.js +40 -1
  37. package/compiled_src/contact/contact.js +1 -3
  38. package/compiled_src/order/address_picker.js +249 -0
  39. package/compiled_src/order/icon.js +62 -0
  40. package/compiled_src/order/index.js +113 -0
  41. package/compiled_src/order/order.js +1234 -0
  42. package/compiled_src/plugin.js +9 -42
  43. package/compiled_src/popup/popup.js +2 -2
  44. package/compiled_src/store/api.js +20 -0
  45. package/compiled_src/store/store.js +42 -0
  46. package/compiled_src/util/common.js +36 -2
  47. package/dist/0b82fa7e5c3b07b40a44.png +1 -0
  48. package/dist/0f4af006e38ee8b93633.png +1 -0
  49. package/dist/{74.js → 132.js} +2322 -279
  50. package/dist/178.js +341 -174
  51. package/dist/17ee31b89ac.132.js +1 -0
  52. package/dist/17ee31b89ac.178.js +1 -0
  53. package/dist/17ee31b89ac.213.js +1 -0
  54. package/dist/17ee31b89ac.335.js +1 -0
  55. package/dist/17ee31b89ac.362.js +1 -0
  56. package/dist/17ee31b89ac.441.js +1 -0
  57. package/dist/17ee31b89ac.605.js +1 -0
  58. package/dist/17ee31b89ac.678.js +1 -0
  59. package/dist/17ee31b89ac.782.js +1 -0
  60. package/dist/17ee31b89ac.app.js +1 -0
  61. package/dist/{17d939953e0.index.html → 17ee31b89ac.index.html} +3 -18
  62. package/dist/{17d939953e0.library.html → 17ee31b89ac.library.html} +3 -18
  63. package/dist/17ee31b89ac.library.js +1 -0
  64. package/dist/{17d939953e0.preview.html → 17ee31b89ac.preview.html} +1 -1
  65. package/dist/17ee31b89ac.preview.js +1 -0
  66. package/dist/17ee31b89ac.screenshoot.js +1 -0
  67. package/dist/1ea1c6cd21d25176810c.png +1 -0
  68. package/dist/213.js +35 -70
  69. package/dist/292d42404e1b03398f61.png +1 -0
  70. package/dist/312d376370831b7bea83.png +1 -0
  71. package/dist/313d1bfc1cf776d1aefe.png +1 -0
  72. package/dist/335.js +411 -0
  73. package/dist/362.js +71 -21
  74. package/dist/441.js +70 -44
  75. package/dist/4aa58bb7a66bb44975aa.png +1 -0
  76. package/dist/56ce063bc6c81adb7322.png +1 -0
  77. package/dist/605.js +1 -64
  78. package/dist/678.js +70 -20
  79. package/dist/6a411166ef5cc79e0714.png +1 -0
  80. package/dist/6faf403782fefacc1649.png +1 -0
  81. package/dist/782.js +118 -21
  82. package/dist/79dca33c68fab79c067f.png +1 -0
  83. package/dist/82da1578fa84f9debaeb.png +1 -0
  84. package/dist/8b8e0f0824743974b282.png +1 -0
  85. package/dist/8d551390d81e39130a3c.png +1 -0
  86. package/dist/9fc61b9479877ebdb6c7.png +1 -0
  87. package/dist/HASH +1 -1
  88. package/dist/a165d31dcb3dc90f1057.png +1 -0
  89. package/dist/a98d4a5698812c4426b3.png +1 -0
  90. package/dist/assets/img/caret.998eb8f.svg +1 -0
  91. package/dist/assets/img/done_green.b817fd4.svg +4 -0
  92. package/dist/assets/img/empty_1.0b98af0.svg +11 -0
  93. package/dist/assets/img/ghn.070f8e3.svg +17 -0
  94. package/dist/assets/img/ghtk.326eac1.svg +18 -0
  95. package/dist/assets/img/info.ebce7ea.svg +1 -0
  96. package/dist/assets/img/loader.37000a7.svg +1 -0
  97. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  98. package/dist/assets/img/package.8d37d0f.svg +5 -0
  99. package/dist/assets/img/package_fade.763c001.svg +1 -0
  100. package/dist/assets/img/search.f9705ff.svg +1 -0
  101. package/dist/assets/img/shop.f7dc7d8.svg +1 -0
  102. package/dist/assets/img/shop_faded.df7845a.svg +1 -0
  103. package/dist/assets/img/x.26fdfa3.svg +5 -0
  104. package/dist/c41606bf9d1b604e46d5.png +1 -0
  105. package/dist/ce1f7450ce6c1aacd330.png +1 -0
  106. package/dist/cf8c01e88f4770a6e3e5.png +1 -0
  107. package/dist/dfbcfeab1d5622a737e2.png +1 -0
  108. package/dist/e4893ed8c2f7b8329919.png +1 -0
  109. package/dist/ec2ab4eb4ef73d186186.png +1 -0
  110. package/dist/screenshoot.html +1 -1
  111. package/dist/screenshoot.js +211 -48
  112. package/index.html +3 -18
  113. package/order.html +32 -0
  114. package/package.json +14 -15
  115. package/src/bot.js +2 -1
  116. package/src/chatbox/DropdownSelect.js +229 -0
  117. package/src/chatbox/Event.js +2 -2
  118. package/src/chatbox/Events.js +43 -42
  119. package/src/chatbox/Order.js +232 -0
  120. package/src/chatbox/OrderAttachments.js +2 -1
  121. package/src/chatbox/TextMessage.js +21 -12
  122. package/src/chatbox/Widget.js +34 -4
  123. package/src/chatbox/main.js +2 -2
  124. package/src/chatbox/spinner.js +1 -1
  125. package/src/chatbox/time.js +1 -1
  126. package/src/common.js +52 -8
  127. package/src/contact/contact.js +1 -1
  128. package/src/order/address_picker.js +235 -0
  129. package/src/order/icon.js +32 -0
  130. package/src/order/index.js +86 -0
  131. package/src/order/order.js +1157 -0
  132. package/src/order/scratch +211 -0
  133. package/src/plugin.js +7 -52
  134. package/src/popup/popup.js +2 -2
  135. package/src/store/api.js +26 -1
  136. package/src/store/store.js +46 -9
  137. package/src/util/common.js +48 -2
  138. package/webpack.dev.js +2 -0
  139. package/dist/17d939953e0.178.js +0 -1
  140. package/dist/17d939953e0.213.js +0 -1
  141. package/dist/17d939953e0.362.js +0 -1
  142. package/dist/17d939953e0.441.js +0 -1
  143. package/dist/17d939953e0.605.js +0 -1
  144. package/dist/17d939953e0.619.js +0 -1
  145. package/dist/17d939953e0.678.js +0 -1
  146. package/dist/17d939953e0.74.js +0 -1
  147. package/dist/17d939953e0.782.js +0 -1
  148. package/dist/17d939953e0.app.js +0 -1
  149. package/dist/17d939953e0.library.js +0 -1
  150. package/dist/17d939953e0.preview.js +0 -1
  151. package/dist/17d939953e0.screenshoot.js +0 -1
  152. package/dist/619.js +0 -777
@@ -7,6 +7,8 @@ exports.default = void 0;
7
7
 
8
8
  var _index = _interopRequireDefault(require("./util/index.js"));
9
9
 
10
+ var common = _interopRequireWildcard(require("./common.js"));
11
+
10
12
  var _preact = require("preact");
11
13
 
12
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -23,16 +25,13 @@ const LoadPopup = () => Promise.resolve().then(() => _interopRequireWildcard(req
23
25
 
24
26
  const LoadNotif = () => Promise.resolve().then(() => _interopRequireWildcard(require('./notif/notif.js')));
25
27
 
26
- let langMessages = {};
27
- let downloadLock = false;
28
-
29
28
  function Plugin(plugin, store, $container, lib) {
30
29
  if (!$container) throw '$div must is a valid html node';
31
30
  var $div = document.createElement('div');
32
31
  $div.id = plugin.id;
33
32
  $container.appendChild($div);
34
33
 
35
- let _locale = getLocale(plugin, _index.default.detectLang());
34
+ let _locale = common.getLocale(plugin, _index.default.detectLang());
36
35
 
37
36
  var domGate = new _index.default.Gate();
38
37
  var pageIndex = 0;
@@ -165,7 +164,7 @@ function Plugin(plugin, store, $container, lib) {
165
164
  let t = key => {
166
165
  if (_locale === 'debug') return `{{${key}}}`;
167
166
 
168
- let messages = _index.default.get(langMessages, _locale, []);
167
+ let messages = _index.default.get(common.langMessages, _locale, []);
169
168
 
170
169
  let message = _index.default.find(messages, message => message.key === key);
171
170
 
@@ -187,7 +186,7 @@ function Plugin(plugin, store, $container, lib) {
187
186
  t.locale = () => _locale;
188
187
 
189
188
  this.forceDownloadLanguage = async () => {
190
- await downloadLanguage(store, _locale, true);
189
+ await common.downloadLanguage(store, _locale, true);
191
190
  this.update(plugin);
192
191
  };
193
192
 
@@ -197,8 +196,8 @@ function Plugin(plugin, store, $container, lib) {
197
196
 
198
197
  _render();
199
198
 
200
- _locale = getLocale(plugin, locale);
201
- await downloadLanguage(store, _locale);
199
+ _locale = common.getLocale(plugin, locale);
200
+ await common.downloadLanguage(store, _locale);
202
201
  this.t = t;
203
202
 
204
203
  _render();
@@ -237,7 +236,7 @@ function Plugin(plugin, store, $container, lib) {
237
236
  }
238
237
 
239
238
  this.update(plugin);
240
- downloadLanguage(store, _locale).then(() => {
239
+ common.downloadLanguage(store, _locale).then(() => {
241
240
  this.t = t;
242
241
  this.update(plugin);
243
242
  });
@@ -387,36 +386,4 @@ class PluginMgr {
387
386
 
388
387
  }
389
388
 
390
- exports.default = PluginMgr;
391
-
392
- function downloadLanguage(store, locale, force) {
393
- if (downloadLock) return new Promise(resolve => setTimeout(() => downloadLanguage(store, locale, force).then(resolve), 100));
394
- downloadLock = true;
395
- let messages;
396
-
397
- if (locale === 'debug' || langMessages[locale] && !force) {
398
- downloadLock = false;
399
- return Promise.resolve();
400
- }
401
-
402
- return store.getLocaleContent(locale).then(res => {
403
- downloadLock = false;
404
- messages = _index.default.get(res, 'body.messages', []);
405
- langMessages[locale] = messages;
406
- });
407
- }
408
-
409
- const getLocale = (plugin, loc) => {
410
- if (!loc) loc = '';
411
-
412
- let found = _index.default.find(plugin.locales, l => l.toLowerCase().trim() === loc.toLowerCase().trim());
413
-
414
- if (found) return found;
415
- found = _index.default.find(plugin.locales, l => {
416
- l = l.replace('-', '_').split('_')[0].trim().toLowerCase();
417
- let compareloc = loc.replace('-', '_').split('_')[0].trim().toLowerCase();
418
- return l == compareloc;
419
- });
420
- if (found) return found;
421
- return plugin.locale || 'en-US';
422
- };
389
+ exports.default = PluginMgr;
@@ -118,7 +118,7 @@ class Popup extends _common.Com {
118
118
 
119
119
  let form = _index.default.find(page.components, com => com.type === 'form');
120
120
 
121
- if (!form || !form.form) return;
121
+ if (!form || !form.form) return true;
122
122
 
123
123
  let fields = _index.default.get(form, 'form.fields', []);
124
124
 
@@ -275,7 +275,7 @@ class Popup extends _common.Com {
275
275
  }
276
276
 
277
277
  if (hasConversion) {
278
- var formData = new FormData(this._formRef.current);
278
+ var formData = this._formRef.current ? new FormData(this._formRef.current) : new FormData();
279
279
  var summitFields = [];
280
280
 
281
281
  let user = _index.default.cloneDeep(this.props.store.matchUser());
@@ -113,6 +113,26 @@ class _default {
113
113
 
114
114
  _defineProperty(this, "sendConversion", conversion => this.apireq.post(`/accounts/${this.accid}/campaigns/${conversion.campaign_id}/conversions`, conversion));
115
115
 
116
+ _defineProperty(this, "lookupOrder", key => ajax.setBaseUrl(this.ApiURL).setContentType('text/plain').beforeHook(jsonifyTextPlain).setParser('json').addQuery('x-signed-key', key).get(`/orders/123`));
117
+
118
+ _defineProperty(this, "getOrder", id => this.apireq.get(`/accounts/${this.accid}/orders/` + id));
119
+
120
+ _defineProperty(this, "updateOrder", order => this.apireq.post(`/accounts/${this.accid}/orders/` + order.id, order));
121
+
122
+ _defineProperty(this, "fetchShippingAddresses", () => this.apireq.get(`/accounts/${this.accid}/users/${this.uid}/shipping-addresses`));
123
+
124
+ _defineProperty(this, "createShippingAddress", addr => this.apireq.post(`/accounts/${this.accid}/users/${this.uid}/shipping-addresses`, addr));
125
+
126
+ _defineProperty(this, "list_provinces", () => this.apireq.get(`/accounts/${this.accid}/provinces`));
127
+
128
+ _defineProperty(this, "list_districts", p => this.apireq.setQuery(p).get(`/accounts/${this.accid}/districts`));
129
+
130
+ _defineProperty(this, "list_wards", p => this.apireq.setQuery(p).get(`/accounts/${this.accid}/wards`));
131
+
132
+ _defineProperty(this, "suggest_address", keyword => this.apireq.setQuery({
133
+ keyword: keyword
134
+ }).get(`/accounts/${this.accid}/addresses`));
135
+
116
136
  this.FileURL = FileURL;
117
137
  this.ApiURL = ApiURL;
118
138
  this.apireq = ajax.setBaseUrl(ApiURL).withCredentials(true).addQuery('v', '6').setContentType('text/plain').beforeHook(jsonifyTextPlain).setParser('json').beforeHook((param, done) => {
@@ -46,10 +46,14 @@ class Store {
46
46
  return this.kv.match('user');
47
47
  });
48
48
 
49
+ _defineProperty(this, "suggest_addresses", keyword => this.api.suggest_address(keyword));
50
+
49
51
  _defineProperty(this, "matchSession", () => this.kv.match('session') || {});
50
52
 
51
53
  _defineProperty(this, "matchAccount", () => this.cache.match('account'));
52
54
 
55
+ _defineProperty(this, "matchPaymentMethods", () => this.cache.match('payment_methods'));
56
+
53
57
  _defineProperty(this, "matchUnread", () => {
54
58
  let user = this.matchUser();
55
59
  let allconvos = this.matchConvo('*');
@@ -103,6 +107,14 @@ class Store {
103
107
  return this.reconnectGate.open();
104
108
  });
105
109
 
110
+ _defineProperty(this, "list_provinces", () => this.api.list_provinces());
111
+
112
+ _defineProperty(this, "list_districts", p => this.api.list_districts(p));
113
+
114
+ _defineProperty(this, "list_wards", p => this.api.list_wards(p));
115
+
116
+ _defineProperty(this, "list_provices", void 0);
117
+
106
118
  _defineProperty(this, "listEvents", id => {
107
119
  if (!id || id === '*' || typeof id !== 'string') return;
108
120
 
@@ -247,6 +259,24 @@ class Store {
247
259
  return _index.default.Date.now() - (this.g_sync[key] || 0) < 300000;
248
260
  }
249
261
 
262
+ async fetchShippingAddresses() {
263
+ let out = await this.api.fetchShippingAddresses();
264
+ if (out.error) return null;
265
+ this.cache.put('shipping_address', out.body.shipping_addresses);
266
+ }
267
+
268
+ matchShippingAddresses() {
269
+ return this.cache.match('shipping_address');
270
+ }
271
+
272
+ updateOrder(order) {
273
+ return this.api.updateOrder(order);
274
+ }
275
+
276
+ createShippingAddress(addr) {
277
+ return this.api.createShippingAddress(addr);
278
+ }
279
+
250
280
  async overrideAcc(acc) {
251
281
  this.forceAcc = _index.default.cloneDeep(acc);
252
282
  await this.readyGate.entry();
@@ -470,6 +500,7 @@ class Store {
470
500
  }
471
501
 
472
502
  _setUser(user) {
503
+ user = _index.default.cloneDeep(user);
473
504
  let olduser = this.kv.match('user') || {};
474
505
  var accid = olduser.account_id || user.account_id;
475
506
  var id = olduser.id || user.id;
@@ -573,6 +604,9 @@ class Store {
573
604
  this.cache.put('agent', agentM);
574
605
  }
575
606
 
607
+ let pms = _index.default.get(setting, 'payment_methods', []);
608
+
609
+ this.cache.put('payment_methods', pms);
576
610
  this.pubsub.publish('account');
577
611
  }
578
612
 
@@ -795,6 +829,14 @@ class Store {
795
829
  };
796
830
  }
797
831
 
832
+ fetchOrder(id) {
833
+ return this.api.getOrder(id);
834
+ }
835
+
836
+ lookupOrder(key) {
837
+ return this.api.lookupOrder(key);
838
+ }
839
+
798
840
  createPostback(cid, postback) {
799
841
  return this.api.createPostback(cid, postback);
800
842
  }
@@ -47,6 +47,7 @@ exports.replaceCssVariable = replaceCssVariable;
47
47
  exports.replaceCssVariablePlugin = replaceCssVariablePlugin;
48
48
  exports.requestAnimationFrame = void 0;
49
49
  exports.sameDay = sameDay;
50
+ exports.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded;
50
51
  exports.setCss = setCss;
51
52
  exports.setInterval = void 0;
52
53
  exports.setMsgField = setMsgField;
@@ -61,6 +62,7 @@ exports.throttle = throttle;
61
62
  exports.tokenize = tokenize;
62
63
  exports.trim = trim;
63
64
  exports.trimStart = trimStart;
65
+ exports.unicodeToAscii = unicodeToAscii;
64
66
  exports.unixSec = unixSec;
65
67
  exports.usersOfConvo = usersOfConvo;
66
68
 
@@ -998,6 +1000,7 @@ function preloadWebfonts(fonts, done) {
998
1000
  node.style.color = 'transparent';
999
1001
  node.style.fontSize = '20px';
1000
1002
  node.style.height = '0px';
1003
+ node.style.top = '0px';
1001
1004
  node.style.width = '0px';
1002
1005
  node.style.fontWeight = weight;
1003
1006
  node.setAttribute('subiz-preload', font + ':' + weight);
@@ -1133,9 +1136,9 @@ var sleep = ms => new Promise(res => setTimeout(res, ms));
1133
1136
  exports.sleep = sleep;
1134
1137
 
1135
1138
  function formatCurrency(val) {
1136
- if (!val) return 0;
1139
+ if (!val) return '0 đ';
1137
1140
  val = Math.round(val);
1138
- return val.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
1141
+ return val.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') + ' đ';
1139
1142
  }
1140
1143
 
1141
1144
  function replaceFileUrl(src) {
@@ -1161,4 +1164,35 @@ function replaceFileUrl(src) {
1161
1164
  src = src.replace('https://file.mysubiz.com/', fileurl);
1162
1165
  src = src.replace('http://file.mysubiz.com/', fileurl);
1163
1166
  return src;
1167
+ }
1168
+
1169
+ function unicodeToAscii(str) {
1170
+ str = str + '';
1171
+ str = str.replace('đ', 'd').replace('Đ', 'D');
1172
+ return str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
1173
+ }
1174
+
1175
+ function scrollIntoViewIfNeeded($ele) {
1176
+ centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;
1177
+ var parent = $ele.parentNode;
1178
+ var parentComputedStyle = window.getComputedStyle(parent, null);
1179
+ var parentBorderTopWidth = parseInt(parentComputedStyle.getPropertyValue('border-top-width'));
1180
+ var parentBorderLeftWidth = parseInt(parentComputedStyle.getPropertyValue('border-left-width'));
1181
+ var overTop = $ele.offsetTop - parent.offsetTop < parent.scrollTop;
1182
+ var overBottom = $ele.offsetTop - parent.offsetTop + $ele.clientHeight - parentBorderTopWidth > parent.scrollTop + parent.clientHeight;
1183
+ var overLeft = $ele.offsetLeft - parent.offsetLeft < parent.scrollLeft;
1184
+ var overRight = $ele.offsetLeft - parent.offsetLeft + $ele.clientWidth - parentBorderLeftWidth > parent.scrollLeft + parent.clientWidth;
1185
+ var alignWithTop = overTop && !overBottom;
1186
+
1187
+ if ((overTop || overBottom) && centerIfNeeded) {
1188
+ parent.scrollTop = $ele.offsetTop - parent.offsetTop - parent.clientHeight / 2 - parentBorderTopWidth + $ele.clientHeight / 2;
1189
+ }
1190
+
1191
+ if ((overLeft || overRight) && centerIfNeeded) {
1192
+ parent.scrollLeft = $ele.offsetLeft - parent.offsetLeft - parent.clientWidth / 2 - parentBorderLeftWidth + $ele.clientWidth / 2;
1193
+ }
1194
+
1195
+ if ((overTop || overBottom || overLeft || overRight) && !centerIfNeeded) {
1196
+ $ele.scrollIntoView(alignWithTop);
1197
+ }
1164
1198
  }
@@ -0,0 +1 @@
1
+ module.exports = __webpack_public_path__ + "assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png";
@@ -0,0 +1 @@
1
+ module.exports = __webpack_public_path__ + "assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png";