@subiz/widget-v4 4.1.79 → 4.1.81

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 (100) hide show
  1. package/compiled_src/chatbox/time.js +1 -1
  2. package/compiled_src/store/api.js +1 -1
  3. package/compiled_src/store/store.js +24 -4
  4. package/loader.js +1 -1
  5. package/old.md +1 -0
  6. package/package.json +4 -4
  7. package/src/chatbox/time.js +1 -1
  8. package/src/store/api.js +1 -1
  9. package/src/store/store.js +21 -4
  10. package/dist/127.js +0 -273
  11. package/dist/132.js +0 -2796
  12. package/dist/185.js +0 -1885
  13. package/dist/18ffe1df25b.127.js +0 -1
  14. package/dist/18ffe1df25b.132.js +0 -1
  15. package/dist/18ffe1df25b.185.js +0 -1
  16. package/dist/18ffe1df25b.27.js +0 -1
  17. package/dist/18ffe1df25b.278.js +0 -1
  18. package/dist/18ffe1df25b.459.js +0 -1
  19. package/dist/18ffe1df25b.490.js +0 -1
  20. package/dist/18ffe1df25b.74.js +0 -1
  21. package/dist/18ffe1df25b.997.js +0 -1
  22. package/dist/18ffe1df25b.app.js +0 -1
  23. package/dist/18ffe1df25b.index.html +0 -33
  24. package/dist/18ffe1df25b.library.html +0 -33
  25. package/dist/18ffe1df25b.library.js +0 -1
  26. package/dist/18ffe1df25b.preview.html +0 -759
  27. package/dist/18ffe1df25b.preview.js +0 -1
  28. package/dist/18ffe1df25b.screenshoot.js +0 -1
  29. package/dist/18ffe1df25b.webview.js +0 -1
  30. package/dist/27.js +0 -107
  31. package/dist/278.js +0 -406
  32. package/dist/459.js +0 -107
  33. package/dist/490.js +0 -304
  34. package/dist/74.js +0 -372
  35. package/dist/997.js +0 -107
  36. package/dist/HASH +0 -1
  37. package/dist/assets/img/Facebook.64607ec.png +0 -0
  38. package/dist/assets/img/Zalo.6845707.png +0 -0
  39. package/dist/assets/img/award1a.1a58e10.png +0 -0
  40. package/dist/assets/img/award3a.3b74423.png +0 -0
  41. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  42. package/dist/assets/img/award5.39eb7ae.png +0 -0
  43. package/dist/assets/img/bubble_default.7d5e4ab.svg +0 -20
  44. package/dist/assets/img/caret.998eb8f.svg +0 -1
  45. package/dist/assets/img/convos_empty.2353007.svg +0 -72
  46. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  47. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  48. package/dist/assets/img/done_gray.d7e8203.svg +0 -4
  49. package/dist/assets/img/done_green.b817fd4.svg +0 -4
  50. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  51. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  52. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  53. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  54. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  55. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  56. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  57. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  67. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  68. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  69. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  70. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  71. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  72. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  73. package/dist/assets/img/empty.29bed2d.svg +0 -23
  74. package/dist/assets/img/empty_1.0b98af0.svg +0 -11
  75. package/dist/assets/img/examplte_logo.f86535f.svg +0 -1
  76. package/dist/assets/img/external-link.90577cc.svg +0 -1
  77. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  78. package/dist/assets/img/ghn.070f8e3.svg +0 -17
  79. package/dist/assets/img/ghtk.326eac1.svg +0 -18
  80. package/dist/assets/img/image_default.be0698b.png +0 -0
  81. package/dist/assets/img/info.ebce7ea.svg +0 -1
  82. package/dist/assets/img/loader.37000a7.svg +0 -1
  83. package/dist/assets/img/loading_static.a27f0ac.svg +0 -10
  84. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  85. package/dist/assets/img/main-service2.9b99549.png +0 -0
  86. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  87. package/dist/assets/img/package.8d37d0f.svg +0 -5
  88. package/dist/assets/img/package_fade.763c001.svg +0 -1
  89. package/dist/assets/img/rating--average.1ea492c.svg +0 -12
  90. package/dist/assets/img/rating--great.e3d712e.svg +0 -16
  91. package/dist/assets/img/rating--poor.2938a25.svg +0 -12
  92. package/dist/assets/img/search.f9705ff.svg +0 -1
  93. package/dist/assets/img/send.6db52a9.svg +0 -3
  94. package/dist/assets/img/shop.f7dc7d8.svg +0 -1
  95. package/dist/assets/img/shop_faded.df7845a.svg +0 -1
  96. package/dist/assets/img/subiz-mono.877e9f5.svg +0 -3
  97. package/dist/assets/img/x.26fdfa3.svg +0 -5
  98. package/dist/malicious-app.js +0 -15
  99. package/dist/screenshoot.html +0 -7
  100. package/dist/screenshoot.js +0 -10415
@@ -29,7 +29,7 @@ class Time extends _common.Com {
29
29
  if (this.props.ago) {
30
30
  if (this.props.short) {}
31
31
  if (!t && this.props.time > 0) t = ago(this.props.time, new _index.default.Date().getTime(), this.props.t);
32
- } else t = _index.default.shortTime(this.props.time, this.props.tzoffset, Date.now(), forceLocale);
32
+ } else t = _index.default.shortTime(this.props.time, this.props.tzoffset, _index.default.Date.now(), forceLocale);
33
33
  if (this.props.uppercase) t = t.toUpperCase();
34
34
  if (t === this.state.t) return;
35
35
  this.setState({
@@ -145,7 +145,7 @@ class _default {
145
145
  let outuser;
146
146
  for (let i = 0; true; i++) {
147
147
  outuser = await ajax.setBaseUrl(this.ApiURL).withCredentials(true).addQuery('v', '6').addQuery('x-user-ref', this.ref).setParser('json').get(`/accounts/${this.accid}/users/${this.ref}`);
148
- if (outuser.error && _index.default.get(outuser, 'body.code', '').indexOf('locked_account') != -1) break;
148
+ if (outuser.error && _index.default.get(outuser, 'body.error.code', '').indexOf('locked_account') != -1) break;
149
149
  if (!_index.default.get(outuser, 'body.id')) {
150
150
  let sleeptime = Math.min(2000 + i * 400, 60000);
151
151
  await _index.default.sleep(sleeptime);
@@ -326,13 +326,16 @@ class Store {
326
326
  this.pubsub.publish('account');
327
327
  }
328
328
  isMobile() {
329
- return this.forceDevice === 'mobile' || this.device_type == 'mobile';
329
+ if (this.forceDevice) return this.forceDevice === 'mobile';
330
+ return this.device_type == 'mobile' || _index.default.get(window, 'screen.width', 1000) < 576;
330
331
  }
331
332
  isTablet() {
332
- return this.forceDevice === 'tablet' || this.device_type == 'tablet';
333
+ if (this.forceDevice) return this.forceDevice === 'tablet';
334
+ return this.device_type == 'tablet';
333
335
  }
334
336
  isDesktop() {
335
- return this.forceDevice === 'desktop' || !this.isMobile() && !this.isTable();
337
+ if (this.forceDevice) return this.forceDevice === 'desktop';
338
+ return !this.isMobile() && !this.isTable();
336
339
  }
337
340
  disconnect(key) {
338
341
  this.g_sync[key] = 0;
@@ -459,9 +462,26 @@ class Store {
459
462
  if (this.g_haveSentSeenM[lastmsgsent.id]) return;
460
463
  if (lastmsgsent.id === lastmsgsent.data.message.idempotency_key) return;
461
464
  this.api.markAsSeen(id, lastmsgsent.id);
465
+ this.pubsub.publish('events', {
466
+ created: _index.default.Date.now(),
467
+ type: 'message_pong',
468
+ by: {
469
+ type: 'user'
470
+ },
471
+ data: {
472
+ message: {
473
+ conversation_id: id,
474
+ id: '*',
475
+ pongs: [{
476
+ type: 'seen',
477
+ created: _index.default.Date.now()
478
+ }]
479
+ }
480
+ }
481
+ });
462
482
  let convo = this.cache.match('convo_' + id) || {};
463
483
  let mem = _index.default.find(convo.members, m => m.id === user.id);
464
- if (mem) mem.seen_at = Date.now();
484
+ if (mem) mem.seen_at = _index.default.Date.now();
465
485
  this._setConvo(convo);
466
486
  this.g_haveSentSeenM[lastmsgsent.id] = true;
467
487
  });
package/loader.js CHANGED
@@ -44,7 +44,7 @@ subizc2oasp.com
44
44
  }
45
45
 
46
46
  // we will try to inject the loader script the client site
47
- // the first domain to try is: https://subiz.xyz/sbz/app.js?accid=34234234
47
+ // the first domain to try is: https://widget.subiz.net/sbz/app.js?accid=34234234
48
48
  // if fail, try https://storage.googleapis.com/sbz/api.js?accid=34234234.
49
49
  // If fail again, try sbz-65.com, sbz-95.comc, sbz-140.com and sbz-205.com.
50
50
  // If all of those domains failed, we give up
package/old.md ADDED
@@ -0,0 +1 @@
1
+ <script type="text/javascript">var subiz_account_id = "4216";(function() { var sbz = document.createElement("script"); sbz.type = "text/javascript"; sbz.async = true; sbz.src = ("https:" == document.location.protocol ? "https://" : "http://") + "widget.subiz.com/static/js/loader.js?v="+ (new Date()).getFullYear() + ("0" + ((new Date()).getMonth() + 1)).slice(-2) + ("0" + (new Date()).getDate()).slice(-2); var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(sbz, s);})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subiz/widget-v4",
3
- "version": "4.1.79",
3
+ "version": "4.1.81",
4
4
  "main": "./compiled_src/lib.js",
5
5
  "scripts": {
6
6
  "dev": "npx webpack serve --config webpack.dev.js",
@@ -9,7 +9,7 @@
9
9
  "lib": "rm -rf compiled_src && npx babel --out-dir=compiled_src src"
10
10
  },
11
11
  "dependencies": {
12
- "@subiz/ajax": "^3.0.14",
12
+ "@subiz/ajax": "^3.0.16",
13
13
  "@subiz/flow": "^1.1.0",
14
14
  "@subiz/storage": "0.0.8",
15
15
  "@subiz/wsclient": "^4.0.24",
@@ -30,8 +30,8 @@
30
30
  "babel-loader": "^9.1.3",
31
31
  "babel-plugin-syntax-jsx": "^6.18.0",
32
32
  "html-webpack-plugin": "^5.6.0",
33
- "puppeteer": "^22.10.0",
34
- "webpack": "^5.91.0",
33
+ "puppeteer": "^22.12.0",
34
+ "webpack": "^5.92.1",
35
35
  "webpack-bundle-analyzer": "^4.10.2",
36
36
  "webpack-cli": "^5.1.4",
37
37
  "webpack-dev-server": "^5.0.4"
@@ -39,7 +39,7 @@ export default class Time extends Com {
39
39
  }
40
40
 
41
41
  if (!t && this.props.time > 0) t = ago(this.props.time, new sb.Date().getTime(), this.props.t)
42
- } else t = sb.shortTime(this.props.time, this.props.tzoffset, Date.now(), forceLocale)
42
+ } else t = sb.shortTime(this.props.time, this.props.tzoffset, sb.Date.now(), forceLocale)
43
43
 
44
44
  if (this.props.uppercase) t = t.toUpperCase()
45
45
 
package/src/store/api.js CHANGED
@@ -63,7 +63,7 @@ export default class {
63
63
  .addQuery('x-user-ref', this.ref)
64
64
  .setParser('json')
65
65
  .get(`/accounts/${this.accid}/users/${this.ref}`)
66
- if (outuser.error && sb.get(outuser, 'body.code', '').indexOf('locked_account') != -1) break
66
+ if (outuser.error && sb.get(outuser, 'body.error.code', '').indexOf('locked_account') != -1) break
67
67
 
68
68
  if (!sb.get(outuser, 'body.id')) {
69
69
  let sleeptime = Math.min(2000 + i * 400, 60000)
@@ -202,15 +202,18 @@ export default class Store {
202
202
  }
203
203
 
204
204
  isMobile() {
205
- return this.forceDevice === 'mobile' || this.device_type == 'mobile'
205
+ if (this.forceDevice) return this.forceDevice === 'mobile'
206
+ return this.device_type == 'mobile' || sb.get(window, 'screen.width', 1000) < 576
206
207
  }
207
208
 
208
209
  isTablet() {
209
- return this.forceDevice === 'tablet' || this.device_type == 'tablet'
210
+ if (this.forceDevice) return this.forceDevice === 'tablet'
211
+ return this.device_type == 'tablet'
210
212
  }
211
213
 
212
214
  isDesktop() {
213
- return this.forceDevice === 'desktop' || (!this.isMobile() && !this.isTable())
215
+ if (this.forceDevice) return this.forceDevice === 'desktop'
216
+ return !this.isMobile() && !this.isTable()
214
217
  }
215
218
 
216
219
  disconnect(key) {
@@ -523,9 +526,23 @@ export default class Store {
523
526
  // send seen
524
527
  this.api.markAsSeen(id, lastmsgsent.id)
525
528
 
529
+ // fire own event so guest code can update unread number
530
+ this.pubsub.publish('events', {
531
+ created: sb.Date.now(),
532
+ type: 'message_pong',
533
+ by: {type: 'user'},
534
+ data: {
535
+ message: {
536
+ conversation_id: id,
537
+ id: '*',
538
+ pongs: [{type: 'seen', created: sb.Date.now()}],
539
+ },
540
+ },
541
+ })
542
+
526
543
  let convo = this.cache.match('convo_' + id) || {}
527
544
  let mem = sb.find(convo.members, (m) => m.id === user.id)
528
- if (mem) mem.seen_at = Date.now()
545
+ if (mem) mem.seen_at = sb.Date.now()
529
546
  this._setConvo(convo)
530
547
  this.g_haveSentSeenM[lastmsgsent.id] = true
531
548
  })
package/dist/127.js DELETED
@@ -1,273 +0,0 @@
1
- "use strict";
2
- (self["webpackChunk_subiz_widget_v4"] = self["webpackChunk_subiz_widget_v4"] || []).push([[127],{
3
-
4
- /***/ 6127:
5
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
-
7
- __webpack_require__.r(__webpack_exports__);
8
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9
- /* harmony export */ "default": () => (/* binding */ ProductAttachments)
10
- /* harmony export */ });
11
- /* harmony import */ var _util_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6801);
12
- /* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2840);
13
- /* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(172);
14
-
15
-
16
-
17
- class ProductAttachments extends _common_js__WEBPACK_IMPORTED_MODULE_1__/* .Com */ .Mw {
18
- render() {
19
- let byType = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(this.props.ev, 'by.type');
20
- if (byType === 'user') return null;
21
- let acc = this.props.store.matchAccount();
22
- var attachments = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(this.props.ev, 'data.message.attachments', []);
23
- let orders = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.filter(attachments, att => att.type === 'order' && att.order).map(att => att.order);
24
- if (orders.length === 0) return null;
25
- let $orders = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.map(orders, (order, index) => {
26
- calcOrderTotal(order);
27
- let $note = null;
28
- if (order.note) {
29
- $note = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
30
- class: "order_attachment__label"
31
- }, this.props.t('note')), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
32
- class: "order_attachment__note",
33
- title: order.note
34
- }, order.note));
35
- }
36
- let $products = null;
37
- if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.size(order.items) > 0) {
38
- $products = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
39
- class: "order_attachment__label"
40
- }, this.props.t('product')), _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.map(order.items, item => {
41
- let product = item.product || {};
42
- return (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
43
- class: "order_attachment__product"
44
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("img", {
45
- class: "order_attachment__product_img",
46
- alt: '' + _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(product, 'id'),
47
- src: _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(product, 'image', __webpack_require__(2876))
48
- }), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
49
- style: "overflow: hidden !important;"
50
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
51
- class: "order_attachment__product_name",
52
- title: this.props.t.i18n(product.i18n_name) || product.name
53
- }, this.props.t.i18n(product.i18n_name) || product.name), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
54
- class: "order_attachment__product_desc"
55
- }, getProductPropName(product, ' / ')), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
56
- class: "order_attachment__product_desc"
57
- }, this.props.t('qty'), " ", item.quantity, "\xA0\xB7\xA0", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(product.price))));
58
- }));
59
- }
60
- let $total = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
61
- class: "order_attachment__footer"
62
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
63
- class: "d-flex align-items-center justify-content-between"
64
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, this.props.t('total')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("b", {
65
- class: "order_attachment__total"
66
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.total)))));
67
- let phoneattr = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.find(_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'user.attributes', []), attr => attr.key === 'phones') || {
68
- key: 'phones',
69
- text: ''
70
- };
71
- let phone = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'shipping.address.phone', '').trim();
72
- phone = phone || _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.trim(phoneattr.text);
73
- if (phone) phone = this.props.t('phn') + ': ' + phone;
74
- let $shipto = null;
75
- if (displayOrderShippingAddress(order) || phone) {
76
- $shipto = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
77
- class: "order_attachment__label"
78
- }, this.props.t('ship_to')), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, displayOrderShippingAddress(order)), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
79
- class: "order_attachment__text_truncate"
80
- }, phone));
81
- }
82
- let $beforeTax = null;
83
- if (order._discount_before_tax) {
84
- $beforeTax = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
85
- class: "order_attachment__footer"
86
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
87
- class: "d-flex align-items-center justify-content-between"
88
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
89
- class: "order_attachment__label no_margin"
90
- }, this.props.t('subtotal_before_tax')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._order_value))), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
91
- class: "d-flex align-items-center justify-content-between"
92
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
93
- class: "order_attachment__label no_margin"
94
- }, this.props.t('discount_before_tax')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, "-", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._discount_before_tax))));
95
- }
96
- let $subtotal = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
97
- class: "d-flex align-items-center justify-content-between"
98
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
99
- class: "order_attachment__label no_margin"
100
- }, this.props.t('subtotal')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
101
- style: ""
102
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.subtotal)));
103
- let $tax = null;
104
- if (order.total_tax) {
105
- let taxname = '';
106
- if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.size(order._taxM) === 1) {
107
- let tax = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order._taxM, '0.tax', {});
108
- if (tax.name && tax.percentage) taxname = `(${tax.name} ${Math.round(tax.percentage || 0) / 100}%)`;
109
- }
110
- $tax = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
111
- class: "d-flex align-items-center justify-content-between"
112
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
113
- class: "order_attachment__label no_margin"
114
- }, this.props.t('tax'), " ", taxname), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
115
- style: ""
116
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.total_tax)));
117
- }
118
- let $discount = null;
119
- if (order.discount_type === 'percentage' && order.discount_percentage) {
120
- $discount = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
121
- class: "d-flex align-items-center justify-content-between"
122
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
123
- class: "order_attachment__label no_margin"
124
- }, this.props.t('discount_after_tax'), " (", Math.round(order.discount_percentage / 100), "%)"), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
125
- style: ""
126
- }, "-", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._computed_discount)));
127
- }
128
- if (order.discount_type === 'amount' && order.discount_amount) {
129
- $discount = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
130
- class: "d-flex align-items-center justify-content-between"
131
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
132
- class: "order_attachment__label no_margin"
133
- }, this.props.t('discount_after_tax')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
134
- class: "no-shrink"
135
- }, "-", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._computed_discount)));
136
- }
137
- let $shipping = null;
138
- if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'shipping.nominal_fee')) {
139
- $shipping = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
140
- class: "d-flex align-items-center justify-content-between"
141
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
142
- class: "order_attachment__label no_margin"
143
- }, this.props.t('shipping_fee')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
144
- style: ""
145
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'shipping.nominal_fee', 0))));
146
- }
147
- let $adjustment = null;
148
- if (order.adjustment) {
149
- $adjustment = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
150
- class: "d-flex align-items-center justify-content-between"
151
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
152
- class: "order_attachment__label no_margin"
153
- }, order.adjustment_description), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
154
- class: "no-shrink"
155
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.adjustment)));
156
- }
157
- $subtotal = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
158
- class: "order_attachment__footer"
159
- }, $subtotal, $tax, $shipping, $discount, $adjustment);
160
- if (!$shipping && !$adjustment && !$discount && !$tax) {
161
- $subtotal = null;
162
- }
163
- return (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
164
- class: `order_attachment order_attachment__${byType}`
165
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
166
- class: "order_attachment__header"
167
- }, this.props.t('order'), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("span", {
168
- class: "order_attachment__text_muted order_attachment__text_sm"
169
- }, getOrderDisplayName(order))), $products, $shipto, $note, $beforeTax, $subtotal, $total);
170
- });
171
- return $orders;
172
- }
173
- }
174
- function getProductPropName(product, seperator = ' - ') {
175
- let options = op.get(product, 'options', []);
176
- let props = op.get(product, 'props', []);
177
- let multiPropsOptions = op.filter(options, option => op.size(option.values) > 1);
178
- let names = [];
179
- op.each(multiPropsOptions, option => {
180
- let prop = op.find(props, prop => prop.key === option.key) || {};
181
- if (prop.value) names.push(prop.value);
182
- });
183
- return names.join(seperator);
184
- }
185
- function getOrderDisplayName(order = {}) {
186
- return order.number || order.id || '';
187
- }
188
- function displayOrderShippingAddress(order, isShorten) {
189
- let addr = op.get(order, 'shipping.address', {});
190
- let fulladdr = [addr.address, addr.ward, addr.district, addr.province].filter(a => a).join(', ').trim();
191
- if (isShorten) fulladdr = shortenAddr(fulladdr);
192
- return fulladdr;
193
- }
194
- function shortenAddr(str) {
195
- str = str || '';
196
- str = str.replace(/Hà Nội/gi, 'HN');
197
- str = str.replace(/Hồ Chí Minh/gi, 'HCM');
198
- str = str.replace(/Thành Phố/gi, 'TP');
199
- return str;
200
- }
201
- function calcOrderTotal(order) {
202
- let subtotal = 0;
203
- let beforeTaxDiscount = 0;
204
- let ordervalue = 0;
205
- op.map(order.items, item => {
206
- if (!item.product) return 0;
207
- let price = op.get(item, 'product.price', 0) * (item.quantity || 0);
208
- ordervalue += price;
209
- if (item.discount_type == 'percentage') {
210
- if (item.discount_percentage > 0) {
211
- beforeTaxDiscount += price * item.discount_percentage / 10000;
212
- price = price * (1 - (item.discount_percentage || 0) / 10000);
213
- }
214
- } else if (item.discount_type == 'amount') {
215
- if (item.discount_amount > 0) {
216
- beforeTaxDiscount += item.discount_amount;
217
- price = price - (item.discount_amount || 0);
218
- if (price <= 0) price = 0;
219
- }
220
- }
221
- item.total = price;
222
- subtotal += price;
223
- });
224
- let taxM = {};
225
- op.map(order.items, (item, i) => {
226
- if (!item.product) return;
227
- let tax = item.product.tax;
228
- if (!tax) return;
229
- if (!tax.id) return;
230
- let taxprice = item.total * tax.percentage / 10000;
231
- item.total_tax = taxprice;
232
- taxM[i] = {
233
- tax: tax,
234
- taxprice: taxprice
235
- };
236
- });
237
- let totaltax = 0;
238
- op.map(taxM, t => totaltax += t.taxprice);
239
- let computed_discount = 0;
240
- if (order.discount_type == 'percentage' && order.discount_percentage > 0) {
241
- computed_discount = (subtotal + totaltax) * order.discount_percentage / 10000;
242
- } else if (order.discount_type == 'amount') {
243
- computed_discount = order.discount_amount || 0;
244
- }
245
- let shippingfee = op.get(order, 'shipping.nominal_fee', 0);
246
- if (shippingfee > 0) {
247
- if (op.get(order, 'shipping.tax.id')) {
248
- let tax = order.shipping.tax;
249
- let taxprice = shippingfee * (tax.percentage / 10000);
250
- taxM['ship'] = {
251
- tax: tax,
252
- taxprice: taxprice
253
- };
254
- order.shipping.total_tax = taxprice;
255
- }
256
- }
257
- totaltax = 0;
258
- op.map(taxM, t => totaltax += t.taxprice);
259
- let total = subtotal + totaltax - computed_discount + shippingfee;
260
- total += order.adjustment || 0;
261
- if (total < 0) total = 0;
262
- order.subtotal = subtotal;
263
- order._computed_discount = computed_discount;
264
- order._taxM = taxM;
265
- order.total = total;
266
- order.total_tax = totaltax;
267
- order._discount_before_tax = beforeTaxDiscount;
268
- order._order_value = ordervalue;
269
- }
270
-
271
- /***/ })
272
-
273
- }]);