@subiz/widget-v4 4.1.78 → 4.1.80

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 (144) hide show
  1. package/compiled_src/bot.js +1 -1
  2. package/compiled_src/call/call.js +2 -2
  3. package/compiled_src/chatbox/AgentsAvatar.js +1 -1
  4. package/compiled_src/chatbox/AudioAttachments.js +1 -1
  5. package/compiled_src/chatbox/ButtonAttachments.js +1 -1
  6. package/compiled_src/chatbox/Buttons.js +1 -1
  7. package/compiled_src/chatbox/ChatButton.js +1 -1
  8. package/compiled_src/chatbox/DropdownSelect.js +2 -2
  9. package/compiled_src/chatbox/Emoji.js +1 -1
  10. package/compiled_src/chatbox/Event.js +1 -1
  11. package/compiled_src/chatbox/Events.js +1 -1
  12. package/compiled_src/chatbox/FileAttachments.js +1 -1
  13. package/compiled_src/chatbox/FormAttachment.js +1 -1
  14. package/compiled_src/chatbox/FormAttachments.js +1 -1
  15. package/compiled_src/chatbox/FormSubmitAttachments.js +1 -1
  16. package/compiled_src/chatbox/GenericTemplateAttachments.js +1 -1
  17. package/compiled_src/chatbox/Header.js +1 -1
  18. package/compiled_src/chatbox/ImageAttachments.js +2 -2
  19. package/compiled_src/chatbox/InfoMessage.js +1 -1
  20. package/compiled_src/chatbox/ListField.js +1 -1
  21. package/compiled_src/chatbox/MessageInput.js +2 -2
  22. package/compiled_src/chatbox/Order.js +2 -2
  23. package/compiled_src/chatbox/OrderAttachments.js +1 -1
  24. package/compiled_src/chatbox/ProductAttachments.js +1 -1
  25. package/compiled_src/chatbox/QuickReplies.js +1 -1
  26. package/compiled_src/chatbox/Rating.js +2 -2
  27. package/compiled_src/chatbox/TextMessage.js +1 -1
  28. package/compiled_src/chatbox/Typing.js +1 -1
  29. package/compiled_src/chatbox/VideoAttachments.js +1 -1
  30. package/compiled_src/chatbox/Widget.js +2 -2
  31. package/compiled_src/chatbox/main.js +1 -1
  32. package/compiled_src/chatbox/releaseAnimation.js +1 -1
  33. package/compiled_src/chatbox/time.js +2 -2
  34. package/compiled_src/common.js +1 -1
  35. package/compiled_src/contact/contact.js +2 -2
  36. package/compiled_src/lib.js +2 -2
  37. package/compiled_src/notif/notif.js +2 -2
  38. package/compiled_src/order/address_picker.js +2 -2
  39. package/compiled_src/order/icon.js +1 -1
  40. package/compiled_src/order/index.js +1 -1
  41. package/compiled_src/order/order.js +2 -2
  42. package/compiled_src/plugin.js +1 -1
  43. package/compiled_src/popup/countdown.js +2 -2
  44. package/compiled_src/popup/popup.js +2 -2
  45. package/compiled_src/popup/tick.core.commonjs.js +1 -1
  46. package/compiled_src/store/api.js +3 -3
  47. package/compiled_src/store/api_fake.js +2 -2
  48. package/compiled_src/store/store.js +53 -20
  49. package/dist/127.js +273 -0
  50. package/dist/132.js +2796 -0
  51. package/dist/185.js +1885 -0
  52. package/dist/18ffe1df25b.127.js +1 -0
  53. package/dist/18ffe1df25b.132.js +1 -0
  54. package/dist/18ffe1df25b.185.js +1 -0
  55. package/dist/18ffe1df25b.27.js +1 -0
  56. package/dist/18ffe1df25b.278.js +1 -0
  57. package/dist/18ffe1df25b.459.js +1 -0
  58. package/dist/18ffe1df25b.490.js +1 -0
  59. package/dist/18ffe1df25b.74.js +1 -0
  60. package/dist/18ffe1df25b.997.js +1 -0
  61. package/dist/18ffe1df25b.app.js +1 -0
  62. package/dist/18ffe1df25b.index.html +33 -0
  63. package/dist/18ffe1df25b.library.html +33 -0
  64. package/dist/18ffe1df25b.library.js +1 -0
  65. package/dist/18ffe1df25b.preview.html +759 -0
  66. package/dist/18ffe1df25b.preview.js +1 -0
  67. package/dist/18ffe1df25b.screenshoot.js +1 -0
  68. package/dist/18ffe1df25b.webview.js +1 -0
  69. package/dist/27.js +107 -0
  70. package/dist/278.js +406 -0
  71. package/dist/459.js +107 -0
  72. package/dist/490.js +304 -0
  73. package/dist/74.js +372 -0
  74. package/dist/997.js +107 -0
  75. package/dist/HASH +1 -0
  76. package/dist/assets/img/Facebook.64607ec.png +0 -0
  77. package/dist/assets/img/Zalo.6845707.png +0 -0
  78. package/dist/assets/img/award1a.1a58e10.png +0 -0
  79. package/dist/assets/img/award3a.3b74423.png +0 -0
  80. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  81. package/dist/assets/img/award5.39eb7ae.png +0 -0
  82. package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
  83. package/dist/assets/img/caret.998eb8f.svg +1 -0
  84. package/dist/assets/img/convos_empty.2353007.svg +72 -0
  85. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  86. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  87. package/dist/assets/img/done_gray.d7e8203.svg +4 -0
  88. package/dist/assets/img/done_green.b817fd4.svg +4 -0
  89. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  90. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  91. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  92. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  93. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  94. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  95. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  96. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  97. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  98. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  99. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  100. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  101. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  102. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  103. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  104. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  105. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  106. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  107. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  108. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  109. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  110. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  111. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  112. package/dist/assets/img/empty.29bed2d.svg +23 -0
  113. package/dist/assets/img/empty_1.0b98af0.svg +11 -0
  114. package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
  115. package/dist/assets/img/external-link.90577cc.svg +1 -0
  116. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  117. package/dist/assets/img/ghn.070f8e3.svg +17 -0
  118. package/dist/assets/img/ghtk.326eac1.svg +18 -0
  119. package/dist/assets/img/image_default.be0698b.png +0 -0
  120. package/dist/assets/img/info.ebce7ea.svg +1 -0
  121. package/dist/assets/img/loader.37000a7.svg +1 -0
  122. package/dist/assets/img/loading_static.a27f0ac.svg +10 -0
  123. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  124. package/dist/assets/img/main-service2.9b99549.png +0 -0
  125. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  126. package/dist/assets/img/package.8d37d0f.svg +5 -0
  127. package/dist/assets/img/package_fade.763c001.svg +1 -0
  128. package/dist/assets/img/rating--average.1ea492c.svg +12 -0
  129. package/dist/assets/img/rating--great.e3d712e.svg +16 -0
  130. package/dist/assets/img/rating--poor.2938a25.svg +12 -0
  131. package/dist/assets/img/search.f9705ff.svg +1 -0
  132. package/dist/assets/img/send.6db52a9.svg +3 -0
  133. package/dist/assets/img/shop.f7dc7d8.svg +1 -0
  134. package/dist/assets/img/shop_faded.df7845a.svg +1 -0
  135. package/dist/assets/img/subiz-mono.877e9f5.svg +3 -0
  136. package/dist/assets/img/x.26fdfa3.svg +5 -0
  137. package/dist/malicious-app.js +15 -0
  138. package/dist/screenshoot.html +7 -0
  139. package/dist/screenshoot.js +10415 -0
  140. package/package.json +8 -8
  141. package/src/chatbox/Events.js +1 -1
  142. package/src/chatbox/time.js +1 -1
  143. package/src/store/api.js +1 -1
  144. package/src/store/store.js +55 -21
@@ -9,8 +9,8 @@ var _storage = _interopRequireDefault(require("@subiz/storage"));
9
9
  var _api = _interopRequireDefault(require("./api.js"));
10
10
  var _api_fake = _interopRequireDefault(require("./api_fake.js"));
11
11
  var _realtime_fake = _interopRequireDefault(require("./realtime_fake.js"));
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
14
14
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
15
15
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
16
16
  var flow = require('@subiz/flow');
@@ -79,25 +79,35 @@ class Store {
79
79
  _defineProperty(this, "list_provinces", () => this.api.list_provinces());
80
80
  _defineProperty(this, "list_districts", p => this.api.list_districts(p));
81
81
  _defineProperty(this, "list_wards", p => this.api.list_wards(p));
82
+ _defineProperty(this, "outofmsgM", {});
82
83
  _defineProperty(this, "listEvents", id => {
83
84
  if (!id || id === '*' || typeof id !== 'string') return;
84
- if (!this.isInsync('events' + id)) {
85
- _index.default.setTimeout(async () => {
86
- await this.readyGate.entry();
87
- await this.reconnectGate.entry(undefined, true);
88
- if (this.isInsync('events' + id)) return this.reconnectGate.open();
89
- this.markSync('events' + id);
90
- await this.chain.reload(id, (type, anchor, limit) => this.listmessageapi(type, anchor, limit));
91
- this.pubsub.publish('account');
92
- return this.reconnectGate.open();
93
- }, 10);
94
- }
95
85
  return this.chain.listM(id);
96
86
  });
97
87
  _defineProperty(this, "fetchMoreEvents", async convoid => {
88
+ if (!this.isInsync('events' + convoid)) {
89
+ await this.readyGate.entry();
90
+ await this.reconnectGate.entry(undefined, true);
91
+ if (this.isInsync('events' + convoid)) return this.reconnectGate.open();
92
+ this.markSync('events' + convoid);
93
+ await this.chain.reload(convoid, () => {
94
+ return [[], ''];
95
+ });
96
+ let out = await this._doFetchMsg(convoid);
97
+ this.reconnectGate.open();
98
+ return out;
99
+ }
100
+ return this._doFetchMsg(convoid);
101
+ });
102
+ _defineProperty(this, "_doFetchMsg", async convoid => {
98
103
  let {
99
104
  error
100
- } = await this.chain.fetchMore(convoid, 50, (type, anchor, limit) => this.listmessageapi(type, anchor, limit));
105
+ } = await this.chain.fetchMore(convoid, 150, async (type, anchor, limit) => {
106
+ if (this.outofmsgM[convoid]) return [[], ''];
107
+ let [events, newanchor, error, outofmsg] = await this.listmessageapi(type, anchor, limit);
108
+ if (outofmsg) this.outofmsgM[convoid] = true;
109
+ return [events, newanchor, error];
110
+ });
101
111
  this.pubsub.publish('account');
102
112
  return {
103
113
  error
@@ -134,6 +144,7 @@ class Store {
134
144
  _defineProperty(this, "now", () => _index.default.Date.now() + this.timeDiff);
135
145
  _defineProperty(this, "seenQueue", []);
136
146
  _defineProperty(this, "matchTrafficSource", () => this.kv.match('traffic_source'));
147
+ _defineProperty(this, "_alreadyReceived", {});
137
148
  _defineProperty(this, "_typing", _index.default.throttle(convoid => this.api.sendTyping(convoid), 3000, {
138
149
  trailing: false
139
150
  }));
@@ -448,9 +459,26 @@ class Store {
448
459
  if (this.g_haveSentSeenM[lastmsgsent.id]) return;
449
460
  if (lastmsgsent.id === lastmsgsent.data.message.idempotency_key) return;
450
461
  this.api.markAsSeen(id, lastmsgsent.id);
462
+ this.pubsub.publish('events', {
463
+ created: _index.default.Date.now(),
464
+ type: 'message_pong',
465
+ by: {
466
+ type: 'user'
467
+ },
468
+ data: {
469
+ message: {
470
+ conversation_id: id,
471
+ id: '*',
472
+ pongs: [{
473
+ type: 'seen',
474
+ created: _index.default.Date.now()
475
+ }]
476
+ }
477
+ }
478
+ });
451
479
  let convo = this.cache.match('convo_' + id) || {};
452
480
  let mem = _index.default.find(convo.members, m => m.id === user.id);
453
- if (mem) mem.seen_at = Date.now();
481
+ if (mem) mem.seen_at = _index.default.Date.now();
454
482
  this._setConvo(convo);
455
483
  this.g_haveSentSeenM[lastmsgsent.id] = true;
456
484
  });
@@ -626,8 +654,6 @@ class Store {
626
654
  let members = _index.default.get(ev, 'data.conversation.members', []);
627
655
  let me = _index.default.find(members, m => m.id === this.cache.match('user').id);
628
656
  if (me) {
629
- await this.chain.reload(cid, (type, anchor, limit) => this.listmessageapi(type, anchor, limit));
630
- this.markSync('events' + cid);
631
657
  if (!alreadyFetched) {
632
658
  let {
633
659
  body: apiconvo
@@ -642,7 +668,10 @@ class Store {
642
668
  }
643
669
  if (ev.type === 'message_sent') {
644
670
  if (_index.default.get(ev, 'by.id') !== user.id) {
645
- this.api.markAsReceived(cid, ev.id);
671
+ if (!this._alreadyReceived[ev.id]) {
672
+ this._alreadyReceived[ev.id] = true;
673
+ this.api.markAsReceived(cid, ev.id);
674
+ }
646
675
  }
647
676
  }
648
677
  if (_index.default.startsWith(ev.type, 'message_') || _index.default.startsWith(ev.type, 'conversation_')) {
@@ -911,10 +940,14 @@ class Store {
911
940
  if (_index.default.get(ev, 'by.id') === user.id) continue;
912
941
  let pongbyme = _index.default.find(_index.default.get(ev, 'data.message.pongs'), p => p.member_id === user.id);
913
942
  if (pongbyme) break;
914
- this.api.markAsReceived(convoid, ev.id);
943
+ if (!this._alreadyReceived[ev.id]) {
944
+ this._alreadyReceived[ev.id] = true;
945
+ this.api.markAsReceived(convoid, ev.id);
946
+ }
915
947
  break;
916
948
  }
917
- return [events, anchor];
949
+ let outofmsg = _index.default.size(events) < limit;
950
+ return [events, anchor, undefined, outofmsg];
918
951
  }
919
952
  async loopTime() {
920
953
  if (this._die) return;
package/dist/127.js ADDED
@@ -0,0 +1,273 @@
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
+ }]);