@subiz/widget-v4 4.1.81 → 4.1.83

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 (102) hide show
  1. package/compiled_src/chatbox/Typing.js +16 -1
  2. package/compiled_src/chatbox/Widget.js +35 -7
  3. package/compiled_src/chatbox/main.js +3 -0
  4. package/compiled_src/lib.js +4 -0
  5. package/compiled_src/plugin.js +4 -0
  6. package/dist/127.js +273 -0
  7. package/dist/132.js +2796 -0
  8. package/dist/185.js +1885 -0
  9. package/dist/19077b40b00.127.js +1 -0
  10. package/dist/19077b40b00.132.js +1 -0
  11. package/dist/19077b40b00.185.js +1 -0
  12. package/dist/19077b40b00.27.js +1 -0
  13. package/dist/19077b40b00.278.js +1 -0
  14. package/dist/19077b40b00.459.js +1 -0
  15. package/dist/19077b40b00.490.js +1 -0
  16. package/dist/19077b40b00.74.js +1 -0
  17. package/dist/19077b40b00.997.js +1 -0
  18. package/dist/19077b40b00.app.js +1 -0
  19. package/dist/19077b40b00.index.html +33 -0
  20. package/dist/19077b40b00.library.html +33 -0
  21. package/dist/19077b40b00.library.js +1 -0
  22. package/dist/19077b40b00.preview.html +759 -0
  23. package/dist/19077b40b00.preview.js +1 -0
  24. package/dist/19077b40b00.screenshoot.js +1 -0
  25. package/dist/19077b40b00.webview.js +1 -0
  26. package/dist/27.js +107 -0
  27. package/dist/278.js +406 -0
  28. package/dist/459.js +107 -0
  29. package/dist/490.js +304 -0
  30. package/dist/74.js +372 -0
  31. package/dist/997.js +107 -0
  32. package/dist/HASH +1 -0
  33. package/dist/assets/img/Facebook.64607ec.png +0 -0
  34. package/dist/assets/img/Zalo.6845707.png +0 -0
  35. package/dist/assets/img/award1a.1a58e10.png +0 -0
  36. package/dist/assets/img/award3a.3b74423.png +0 -0
  37. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  38. package/dist/assets/img/award5.39eb7ae.png +0 -0
  39. package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
  40. package/dist/assets/img/caret.998eb8f.svg +1 -0
  41. package/dist/assets/img/convos_empty.2353007.svg +72 -0
  42. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  43. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  44. package/dist/assets/img/done_gray.d7e8203.svg +4 -0
  45. package/dist/assets/img/done_green.b817fd4.svg +4 -0
  46. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  47. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  48. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  49. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  50. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  51. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  52. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  53. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  54. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  55. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  56. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  57. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  67. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  68. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  69. package/dist/assets/img/empty.29bed2d.svg +23 -0
  70. package/dist/assets/img/empty_1.0b98af0.svg +11 -0
  71. package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
  72. package/dist/assets/img/external-link.90577cc.svg +1 -0
  73. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  74. package/dist/assets/img/ghn.070f8e3.svg +17 -0
  75. package/dist/assets/img/ghtk.326eac1.svg +18 -0
  76. package/dist/assets/img/image_default.be0698b.png +0 -0
  77. package/dist/assets/img/info.ebce7ea.svg +1 -0
  78. package/dist/assets/img/loader.37000a7.svg +1 -0
  79. package/dist/assets/img/loading_static.a27f0ac.svg +10 -0
  80. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  81. package/dist/assets/img/main-service2.9b99549.png +0 -0
  82. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  83. package/dist/assets/img/package.8d37d0f.svg +5 -0
  84. package/dist/assets/img/package_fade.763c001.svg +1 -0
  85. package/dist/assets/img/rating--average.1ea492c.svg +12 -0
  86. package/dist/assets/img/rating--great.e3d712e.svg +16 -0
  87. package/dist/assets/img/rating--poor.2938a25.svg +12 -0
  88. package/dist/assets/img/search.f9705ff.svg +1 -0
  89. package/dist/assets/img/send.6db52a9.svg +3 -0
  90. package/dist/assets/img/shop.f7dc7d8.svg +1 -0
  91. package/dist/assets/img/shop_faded.df7845a.svg +1 -0
  92. package/dist/assets/img/subiz-mono.877e9f5.svg +3 -0
  93. package/dist/assets/img/x.26fdfa3.svg +5 -0
  94. package/dist/malicious-app.js +15 -0
  95. package/dist/screenshoot.html +7 -0
  96. package/dist/screenshoot.js +10519 -0
  97. package/package.json +1 -1
  98. package/src/chatbox/Typing.js +13 -1
  99. package/src/chatbox/Widget.js +40 -7
  100. package/src/chatbox/main.js +4 -0
  101. package/src/lib.js +5 -0
  102. package/src/plugin.js +5 -0
@@ -33,7 +33,7 @@ class Typing extends _common.Com {
33
33
  }
34
34
  if (_index.default.get(ev, 'type') !== 'conversation_typing') return;
35
35
  let ag = this.props.store.matchAgent(_index.default.get(ev, 'by.id')) || {};
36
- if (ag.type == 'agent') return;
36
+ if (ag.type == 'agent' && !_index.default.get(this.props.plugin, 'chatbox.show_agent_typing')) return;
37
37
  this.setState({
38
38
  ev: ev,
39
39
  isShow: true
@@ -48,11 +48,26 @@ class Typing extends _common.Com {
48
48
  }, 5000);
49
49
  });
50
50
  }
51
+ ShowTyping() {
52
+ this.setState({
53
+ isShow: true
54
+ });
55
+ if (this.timer) _index.default.clearTimeout(this.timer);
56
+ this.timer = _index.default.setTimeout(() => {
57
+ this.timer = null;
58
+ this.setState({
59
+ isShow: false
60
+ });
61
+ }, 5000);
62
+ }
51
63
  render() {
52
64
  let account = this.props.store.matchAccount();
53
65
  var cls = this.state.isShow ? '' : 'typing--hidden';
54
66
  let byid = _index.default.get(this.state.ev, 'by.display_id', _index.default.get(this.state.ev, 'by.id'));
55
67
  let agentName = _index.default.getAgentDisplayName(account, this.props.store.matchAgent(byid));
68
+ if (_index.default.get(this.props.plugin, 'chatbox.hide_agent_profile')) {
69
+ agentName = _index.default.get(account, 'name');
70
+ }
56
71
  return (0, _preact.h)("div", {
57
72
  class: `typing ${cls}`
58
73
  }, agentName, " ", this.props.t('typing'));
@@ -127,6 +127,7 @@ class Widget extends _common.Com {
127
127
  quickReplyMessage: {}
128
128
  });
129
129
  this.props.store.onUpdate(this, _ => this.forceUpdate());
130
+ this.refTyping = (0, _preact.createRef)();
130
131
  }
131
132
  componentDidMount() {
132
133
  if (!this.props.store.isMobile()) this.focusInput();
@@ -151,6 +152,9 @@ class Widget extends _common.Com {
151
152
  this.updateFormDataFields();
152
153
  }
153
154
  }
155
+ ShowTyping() {
156
+ this.refTyping.current && this.refTyping.current.ShowTyping();
157
+ }
154
158
  shouldShowForm() {
155
159
  let form;
156
160
  let accountSetting = this.props.plugin.chatbox || {};
@@ -217,13 +221,35 @@ class Widget extends _common.Com {
217
221
  field.error = this.props.t('error_empty');
218
222
  hasError = true;
219
223
  } else field.error = '';
220
- if (key.substr(5) === 'emails' && !_index.default.isEmail(field.value) && field.is_required) {
221
- field.error = this.props.t('error_email_invalid');
222
- hasError = true;
224
+ if (key.substr(5) === 'emails') {
225
+ if (field.is_required) {
226
+ if (!_index.default.isEmail(field.value)) {
227
+ field.error = this.props.t('error_email_invalid');
228
+ hasError = true;
229
+ }
230
+ } else {
231
+ let value = field.value || '';
232
+ if (typeof value !== 'string') value = value + '';
233
+ if (value.trim() && !_index.default.isEmail(field.value)) {
234
+ field.error = this.props.t('error_email_invalid');
235
+ hasError = true;
236
+ }
237
+ }
223
238
  }
224
- if (key.substr(5) === 'phones' && !_index.default.isPhone(field.value) && field.is_required) {
225
- field.error = this.props.t('error_phone_invalid');
226
- hasError = true;
239
+ if (key.substr(5) === 'phones') {
240
+ if (field.is_required) {
241
+ if (!_index.default.isPhone(field.value)) {
242
+ field.error = this.props.t('error_phone_invalid');
243
+ hasError = true;
244
+ }
245
+ } else {
246
+ let value = field.value || '';
247
+ if (typeof value !== 'string') value = value + '';
248
+ if (value.trim() && !_index.default.isPhone(field.value)) {
249
+ field.error = this.props.t('error_phone_invalid');
250
+ hasError = true;
251
+ }
252
+ }
227
253
  }
228
254
  });
229
255
  if (hasError) return this.forceUpdate();
@@ -771,7 +797,9 @@ class Widget extends _common.Com {
771
797
  }), (0, _preact.h)(_Typing.default, {
772
798
  store: this.props.store,
773
799
  cid: this.props.cid,
774
- t: this.props.t
800
+ t: this.props.t,
801
+ plugin: this.props.plugin,
802
+ ref: this.refTyping
775
803
  })), (0, _preact.h)(_Rating.default, {
776
804
  forceView: this.props.view,
777
805
  plugin: this.props.plugin,
@@ -161,6 +161,9 @@ class Main extends _common.Com {
161
161
  hideGreeting() {
162
162
  this.refButton.current && this.refButton.current.HideGreeting();
163
163
  }
164
+ showTyping() {
165
+ this.refWidget.current && this.refWidget.current.ShowTyping();
166
+ }
164
167
  hideWidget() {
165
168
  restoreViewport();
166
169
  this.props.store.setIsOpen(false);
@@ -207,6 +207,10 @@ class Widget {
207
207
  cid: cid
208
208
  });
209
209
  }
210
+ async showTyping() {
211
+ await this.domGate.entry();
212
+ this.pluginMgr.showCurrentChatboxTyping();
213
+ }
210
214
  async hideWidget() {
211
215
  await this.domGate.entry();
212
216
  this.pluginMgr.hideCurrentChatbox();
@@ -256,6 +256,10 @@ class PluginMgr {
256
256
  let chatbox = this.findChatbox();
257
257
  if (chatbox) return chatbox.call('showWidget', p);
258
258
  }
259
+ showCurrentChatboxTyping() {
260
+ let chatbox = this.findChatbox();
261
+ if (chatbox) return chatbox.call('showTyping');
262
+ }
259
263
  showCurrentGreeting() {
260
264
  let chatbox = this.findChatbox();
261
265
  if (chatbox) return chatbox.call('showGreeting');
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
+ }]);