@subiz/widget-v4 4.1.147 → 4.1.149

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 (107) hide show
  1. package/assets/less/message.less +11 -0
  2. package/assets/less/reboot.less +1 -1
  3. package/compiled_src/chatbox/Event.js +2 -1
  4. package/compiled_src/chatbox/block.js +15 -0
  5. package/compiled_src/store/api.js +19 -24
  6. package/compiled_src/store/store.js +1 -1
  7. package/dist/127.js +273 -0
  8. package/dist/132.js +2802 -0
  9. package/dist/185.js +1827 -0
  10. package/dist/197bb8b9cf8.127.js +1 -0
  11. package/dist/197bb8b9cf8.132.js +1 -0
  12. package/dist/197bb8b9cf8.185.js +1 -0
  13. package/dist/197bb8b9cf8.27.js +1 -0
  14. package/dist/197bb8b9cf8.278.js +1 -0
  15. package/dist/197bb8b9cf8.339.js +1 -0
  16. package/dist/197bb8b9cf8.459.js +1 -0
  17. package/dist/197bb8b9cf8.490.js +1 -0
  18. package/dist/197bb8b9cf8.74.js +1 -0
  19. package/dist/197bb8b9cf8.997.js +1 -0
  20. package/dist/197bb8b9cf8.app.js +1 -0
  21. package/dist/197bb8b9cf8.chat.html +1 -0
  22. package/dist/197bb8b9cf8.chat.js +1 -0
  23. package/dist/197bb8b9cf8.form.html +1 -0
  24. package/dist/197bb8b9cf8.form.js +1 -0
  25. package/dist/197bb8b9cf8.index.html +71 -0
  26. package/dist/197bb8b9cf8.library.html +71 -0
  27. package/dist/197bb8b9cf8.library.js +1 -0
  28. package/dist/197bb8b9cf8.preview.html +759 -0
  29. package/dist/197bb8b9cf8.preview.js +1 -0
  30. package/dist/197bb8b9cf8.webview.js +1 -0
  31. package/dist/27.js +107 -0
  32. package/dist/278.js +417 -0
  33. package/dist/459.js +107 -0
  34. package/dist/490.js +305 -0
  35. package/dist/74.js +372 -0
  36. package/dist/997.js +107 -0
  37. package/dist/HASH +1 -0
  38. package/dist/assets/img/Facebook.64607ec.png +0 -0
  39. package/dist/assets/img/Zalo.6845707.png +0 -0
  40. package/dist/assets/img/award1a.1a58e10.png +0 -0
  41. package/dist/assets/img/award3a.3b74423.png +0 -0
  42. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  43. package/dist/assets/img/award5.39eb7ae.png +0 -0
  44. package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
  45. package/dist/assets/img/caret.998eb8f.svg +1 -0
  46. package/dist/assets/img/convos_empty.2353007.svg +72 -0
  47. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  48. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  49. package/dist/assets/img/done_gray.d7e8203.svg +4 -0
  50. package/dist/assets/img/done_green.b817fd4.svg +4 -0
  51. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  52. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  53. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  54. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  55. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  56. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  57. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  67. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  68. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  69. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  70. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  71. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  72. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  73. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  74. package/dist/assets/img/empty.29bed2d.svg +23 -0
  75. package/dist/assets/img/empty_1.0b98af0.svg +11 -0
  76. package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
  77. package/dist/assets/img/external-link.90577cc.svg +1 -0
  78. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  79. package/dist/assets/img/ghn.070f8e3.svg +17 -0
  80. package/dist/assets/img/ghtk.326eac1.svg +18 -0
  81. package/dist/assets/img/image_default.be0698b.png +0 -0
  82. package/dist/assets/img/info.ebce7ea.svg +1 -0
  83. package/dist/assets/img/loader.37000a7.svg +1 -0
  84. package/dist/assets/img/loading_static.a27f0ac.svg +10 -0
  85. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  86. package/dist/assets/img/main-service2.9b99549.png +0 -0
  87. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  88. package/dist/assets/img/package.8d37d0f.svg +5 -0
  89. package/dist/assets/img/package_fade.763c001.svg +1 -0
  90. package/dist/assets/img/rating--average.1ea492c.svg +12 -0
  91. package/dist/assets/img/rating--great.e3d712e.svg +16 -0
  92. package/dist/assets/img/rating--poor.2938a25.svg +12 -0
  93. package/dist/assets/img/search.f9705ff.svg +1 -0
  94. package/dist/assets/img/send.6db52a9.svg +3 -0
  95. package/dist/assets/img/shop.f7dc7d8.svg +1 -0
  96. package/dist/assets/img/shop_faded.df7845a.svg +1 -0
  97. package/dist/assets/img/stars_v2.79cf728.png +0 -0
  98. package/dist/assets/img/subiz-mono.8fbc067.svg +3 -0
  99. package/dist/assets/img/x.26fdfa3.svg +5 -0
  100. package/dist/malicious-app.js +15 -0
  101. package/dist/screenshoot.html +7 -0
  102. package/dist/screenshoot.js +11634 -0
  103. package/package.json +3 -4
  104. package/src/chatbox/Event.js +7 -6
  105. package/src/chatbox/block.js +15 -0
  106. package/src/store/api.js +29 -16
  107. package/src/store/store.js +1 -1
@@ -919,3 +919,14 @@ a.product_attachment__title {
919
919
  font-weight: 500;
920
920
  opacity: 0.4;
921
921
  }
922
+
923
+ .message-text-inline-image-wrapper {
924
+ display: block;
925
+ margin-top: 8px;
926
+ margin-bottom: 8px;
927
+ max-width: 100%;
928
+ }
929
+
930
+ .message-text-inline-image {
931
+ width: 100%;
932
+ }
@@ -51,6 +51,7 @@ a {
51
51
  color: @blue;
52
52
  text-decoration: none;
53
53
  background-color: transparent; // Remove the gray background on active links in IE 10.
54
+ font-weight: 600;
54
55
 
55
56
  &:hover {
56
57
  cursor: pointer;
@@ -204,7 +205,6 @@ textarea {
204
205
  // 2. Change font properties to `inherit` in Safari.
205
206
  //
206
207
 
207
-
208
208
  // Always hide an element with the `hidden` HTML attribute (from PureCSS).
209
209
  // Needed for proper display in IE 10-.
210
210
  [hidden] {
@@ -494,10 +494,11 @@ class Event extends _common.Com {
494
494
  }
495
495
  getSenderName(ev) {
496
496
  let bytype = _index.default.get(ev, 'by.type');
497
- let byid = _index.default.get(ev, 'by.display_id', _index.default.get(ev, 'by.id'));
497
+ let byid = _index.default.get(ev, 'by.display_id', _index.default.get(ev, 'by.id')) || '';
498
498
  if (bytype === 'user') return _index.default.getUserDisplayName(this.props.store.matchUser());
499
499
  let acc = this.props.store.matchAccount();
500
500
  if (bytype === 'agent') return _index.default.getAgentDisplayName(acc, this.props.store.matchAgent(byid));
501
+ if (byid.startsWith('at')) return _index.default.getAgentDisplayName(acc, this.props.store.matchAgent(byid));
501
502
  if (bytype === 'bot') {
502
503
  let bot = this.props.store.matchBot()[byid];
503
504
  if (!bot) return 'Bot';
@@ -99,6 +99,11 @@ class Block extends _common.Com {
99
99
  if (block.type == 'table') {
100
100
  return null;
101
101
  }
102
+ if (block.type === 'image') {
103
+ ele.tag = 'img';
104
+ ele.attrs['src'] = _index.default.get(block, 'image.url');
105
+ ele.attrs['alt'] = block.alt_text;
106
+ }
102
107
  let $body = null;
103
108
  if (_index.default.size(block.content)) {
104
109
  $body = _index.default.map(block.content, block => this.renderBlock(block));
@@ -128,6 +133,16 @@ class Block extends _common.Com {
128
133
  $body = ele.text;
129
134
  }
130
135
  switch (ele.tag) {
136
+ case 'img':
137
+ return (0, _preact.h)("a", {
138
+ class: "message-text-inline-image-wrapper",
139
+ href: _index.default.get(ele, 'attrs.src'),
140
+ target: "_blank"
141
+ }, (0, _preact.h)("img", {
142
+ class: "message-text-inline-image",
143
+ src: _index.default.get(ele, 'attrs.src'),
144
+ alt: _index.default.get(ele, 'attrs.alt') || ''
145
+ }));
131
146
  case 'div':
132
147
  return (0, _preact.h)("div", null, $body);
133
148
  case 'h1':
@@ -60,40 +60,35 @@ class _default {
60
60
  _defineProperty(this, "sendTyping", cid => this.apireq.post(`/accounts/${this.accid}/conversations/${cid}/typing`));
61
61
  _defineProperty(this, "sendLostFocus", () => this.apireq.post(`/accounts/${this.accid}/focuses/${this.uid}/delete`));
62
62
  _defineProperty(this, "uploadToS3", async file => {
63
- let {
64
- body: signed,
63
+ var {
64
+ body,
65
65
  error
66
- } = await this.apireq.post(`/accounts/${this.accid}/files`, {
67
- account_id: this.accid,
66
+ } = await ajax.setBaseUrl('https://api5.subiz.com.vn/4.1').withCredentials(true).setQuery({
68
67
  description: 'upload\n user-client: web-widget',
69
68
  name: file.name.replace(/\s+/g, '_'),
70
69
  size: file.size,
71
70
  type: file.type
72
- });
73
- if (error) return {
74
- body: signed,
75
- error
76
- };
77
- let contentType = file.type || 'application/octet-stream';
78
- ({
79
- error
80
- } = await ajax.setContentType(contentType).put(signed.signed_url, file));
81
- if (error) return {
82
- error
83
- };
84
- let body;
85
- ({
86
- body,
87
- error
88
- } = await this.apireq.post(`/accounts/${this.accid}/files/${signed.id}`, {
89
- account_id: this.accid
90
- }));
71
+ }).setParser('json').beforeHook((param, done) => {
72
+ if (this.token_generator) {
73
+ let user_id = this.profile_id;
74
+ this.token_generator().then(token => {
75
+ if (user_id != this.profile_id) return done(true);
76
+ if (!token) return done(false);
77
+ if (token == 'error') return done(false);
78
+ param.request = param.request.addQuery('x-access-token', token);
79
+ return done(true);
80
+ });
81
+ return;
82
+ }
83
+ if (this.ref) param.request = param.request.addQuery('x-user-ref', this.ref);else if (this.mask) param.request = param.request.addQuery('x-user-mask', this.mask);
84
+ return done(true);
85
+ }).post('/files', file);
91
86
  if (error) return {
92
87
  body,
93
88
  error
94
89
  };
95
90
  return {
96
- url: body.url
91
+ url: _index.default.get(body, 'file.url')
97
92
  };
98
93
  });
99
94
  _defineProperty(this, "time", _ => ajax.setBaseUrl(this.ApiURL).withCredentials(true).setParser('json').get('/time'));
@@ -1067,7 +1067,7 @@ class Store {
1067
1067
  src = src.replace('http://file.subiz.com/', this.FileURL);
1068
1068
  src = src.replace('https://file.mysubiz.com/', this.FileURL);
1069
1069
  src = src.replace('http://file.mysubiz.com/', this.FileURL);
1070
- return src;
1070
+ return src.replace('vcdn.subiz-cdn.com', 'cdn.subiz.net');
1071
1071
  }
1072
1072
  clearBrowserData() {
1073
1073
  _index.default.each(this.cookie.all(), (v, k) => {
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__(8150);
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
+ }]);