@subiz/widget-v4 4.1.150 → 4.1.152

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 (106) hide show
  1. package/assets/less/message.less +21 -1
  2. package/compiled_src/chatbox/TextMessage.js +4 -2
  3. package/compiled_src/chatbox/block.js +15 -7
  4. package/compiled_src/util/common.js +1 -1
  5. package/compiled_src/util/extractor.test2.js +61 -0
  6. package/package.json +1 -1
  7. package/src/chatbox/TextMessage.js +2 -2
  8. package/src/chatbox/block.js +17 -7
  9. package/src/util/common.js +1 -1
  10. package/src/util/extractor.test2.js +56 -0
  11. package/dist/127.js +0 -273
  12. package/dist/132.js +0 -2802
  13. package/dist/185.js +0 -1827
  14. package/dist/197bb91766c.127.js +0 -1
  15. package/dist/197bb91766c.132.js +0 -1
  16. package/dist/197bb91766c.185.js +0 -1
  17. package/dist/197bb91766c.27.js +0 -1
  18. package/dist/197bb91766c.278.js +0 -1
  19. package/dist/197bb91766c.339.js +0 -1
  20. package/dist/197bb91766c.459.js +0 -1
  21. package/dist/197bb91766c.490.js +0 -1
  22. package/dist/197bb91766c.74.js +0 -1
  23. package/dist/197bb91766c.997.js +0 -1
  24. package/dist/197bb91766c.app.js +0 -1
  25. package/dist/197bb91766c.chat.html +0 -1
  26. package/dist/197bb91766c.chat.js +0 -1
  27. package/dist/197bb91766c.form.html +0 -1
  28. package/dist/197bb91766c.form.js +0 -1
  29. package/dist/197bb91766c.index.html +0 -71
  30. package/dist/197bb91766c.library.html +0 -71
  31. package/dist/197bb91766c.library.js +0 -1
  32. package/dist/197bb91766c.preview.html +0 -759
  33. package/dist/197bb91766c.preview.js +0 -1
  34. package/dist/197bb91766c.webview.js +0 -1
  35. package/dist/27.js +0 -107
  36. package/dist/278.js +0 -417
  37. package/dist/459.js +0 -107
  38. package/dist/490.js +0 -305
  39. package/dist/74.js +0 -372
  40. package/dist/997.js +0 -107
  41. package/dist/HASH +0 -1
  42. package/dist/assets/img/Facebook.64607ec.png +0 -0
  43. package/dist/assets/img/Zalo.6845707.png +0 -0
  44. package/dist/assets/img/award1a.1a58e10.png +0 -0
  45. package/dist/assets/img/award3a.3b74423.png +0 -0
  46. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  47. package/dist/assets/img/award5.39eb7ae.png +0 -0
  48. package/dist/assets/img/bubble_default.7d5e4ab.svg +0 -20
  49. package/dist/assets/img/caret.998eb8f.svg +0 -1
  50. package/dist/assets/img/convos_empty.2353007.svg +0 -72
  51. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  52. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  53. package/dist/assets/img/done_gray.d7e8203.svg +0 -4
  54. package/dist/assets/img/done_green.b817fd4.svg +0 -4
  55. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  56. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  57. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  67. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  68. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  69. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  70. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  71. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  72. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  73. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  74. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  75. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  76. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  77. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  78. package/dist/assets/img/empty.29bed2d.svg +0 -23
  79. package/dist/assets/img/empty_1.0b98af0.svg +0 -11
  80. package/dist/assets/img/examplte_logo.f86535f.svg +0 -1
  81. package/dist/assets/img/external-link.90577cc.svg +0 -1
  82. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  83. package/dist/assets/img/ghn.070f8e3.svg +0 -17
  84. package/dist/assets/img/ghtk.326eac1.svg +0 -18
  85. package/dist/assets/img/image_default.be0698b.png +0 -0
  86. package/dist/assets/img/info.ebce7ea.svg +0 -1
  87. package/dist/assets/img/loader.37000a7.svg +0 -1
  88. package/dist/assets/img/loading_static.a27f0ac.svg +0 -10
  89. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  90. package/dist/assets/img/main-service2.9b99549.png +0 -0
  91. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  92. package/dist/assets/img/package.8d37d0f.svg +0 -5
  93. package/dist/assets/img/package_fade.763c001.svg +0 -1
  94. package/dist/assets/img/rating--average.1ea492c.svg +0 -12
  95. package/dist/assets/img/rating--great.e3d712e.svg +0 -16
  96. package/dist/assets/img/rating--poor.2938a25.svg +0 -12
  97. package/dist/assets/img/search.f9705ff.svg +0 -1
  98. package/dist/assets/img/send.6db52a9.svg +0 -3
  99. package/dist/assets/img/shop.f7dc7d8.svg +0 -1
  100. package/dist/assets/img/shop_faded.df7845a.svg +0 -1
  101. package/dist/assets/img/stars_v2.79cf728.png +0 -0
  102. package/dist/assets/img/subiz-mono.8fbc067.svg +0 -3
  103. package/dist/assets/img/x.26fdfa3.svg +0 -5
  104. package/dist/malicious-app.js +0 -15
  105. package/dist/screenshoot.html +0 -7
  106. package/dist/screenshoot.js +0 -11635
@@ -923,10 +923,30 @@ a.product_attachment__title {
923
923
  .message-text-inline-image-wrapper {
924
924
  display: block;
925
925
  margin-top: 8px;
926
- margin-bottom: 8px;
926
+ margin-bottom: 8px;
927
927
  max-width: 100%;
928
928
  }
929
929
 
930
930
  .message-text-inline-image {
931
931
  width: 100%;
932
932
  }
933
+
934
+ .text-message-ul {
935
+ display: block;
936
+ list-style-type: disc;
937
+ margin-block-start: 8px;
938
+ margin-block-end: 8px;
939
+ padding-inline-start: 20px;
940
+ }
941
+
942
+ .text-message-ol {
943
+ display: block;
944
+ list-style-type: decimal;
945
+ margin-block-start: 8px;
946
+ margin-block-end: 8px;
947
+ padding-inline-start: 20px;
948
+ }
949
+
950
+ .text-message-li {
951
+ display: list-item;
952
+ }
@@ -81,7 +81,8 @@ class TextMessage extends _common.Com {
81
81
  title: t
82
82
  }, (0, _preact.h)(_block.default, {
83
83
  block: block,
84
- onLink: this.props.onLink
84
+ onLink: this.props.onLink,
85
+ textMessage: true
85
86
  }), this.renderTime());
86
87
  }
87
88
  let msgcls = 'message-user message-text--user';
@@ -91,7 +92,8 @@ class TextMessage extends _common.Com {
91
92
  title: t
92
93
  }, (0, _preact.h)(_block.default, {
93
94
  block: block,
94
- onLink: this.props.onLink
95
+ onLink: this.props.onLink,
96
+ textMessage: true
95
97
  }));
96
98
  }
97
99
  }
@@ -35,9 +35,9 @@ class Block extends _common.Com {
35
35
  });
36
36
  if (block.type == 'bullet_list' || block.type == 'ordered_list') {
37
37
  if (block.type == 'bullet_list') {
38
- ele.tag = 'ol';
39
- } else {
40
38
  ele.tag = 'ul';
39
+ } else {
40
+ ele.tag = 'ol';
41
41
  }
42
42
  }
43
43
  if (block.type == 'list_item') {
@@ -135,11 +135,11 @@ class Block extends _common.Com {
135
135
  switch (ele.tag) {
136
136
  case 'img':
137
137
  return (0, _preact.h)("a", {
138
- class: "message-text-inline-image-wrapper",
138
+ class: this.props.textMessage ? 'message-text-inline-image-wrapper' : '',
139
139
  href: _index.default.get(ele, 'attrs.src'),
140
140
  target: "_blank"
141
141
  }, (0, _preact.h)("img", {
142
- class: "message-text-inline-image",
142
+ class: this.props.textMessage ? 'message-text-inline-image' : '',
143
143
  src: _index.default.get(ele, 'attrs.src'),
144
144
  alt: _index.default.get(ele, 'attrs.alt') || ''
145
145
  }));
@@ -158,9 +158,17 @@ class Block extends _common.Com {
158
158
  case 'h6':
159
159
  return (0, _preact.h)("h6", null, $body);
160
160
  case 'ol':
161
- return (0, _preact.h)("ol", null, $body);
161
+ return (0, _preact.h)("ol", {
162
+ class: this.props.textMessage ? 'text-message-ol' : ''
163
+ }, $body);
162
164
  case 'ul':
163
- return (0, _preact.h)("ul", null, $body);
165
+ return (0, _preact.h)("ul", {
166
+ class: this.props.textMessage ? 'text-message-ul' : ''
167
+ }, $body);
168
+ case 'li':
169
+ return (0, _preact.h)("li", {
170
+ class: this.props.textMessage ? 'text-message-li' : ''
171
+ }, $body);
164
172
  case 'span':
165
173
  return (0, _preact.h)("span", null, $body);
166
174
  case 'em':
@@ -172,7 +180,7 @@ class Block extends _common.Com {
172
180
  case 'a':
173
181
  return (0, _preact.h)("a", {
174
182
  href: ele.attrs['href'],
175
- target: ele.attrs['target'],
183
+ target: this.props.textMessage ? '_blank' : ele.attrs['target'],
176
184
  title: ele.attrs['title']
177
185
  }, $body);
178
186
  case 'Emoji':
@@ -141,7 +141,7 @@ function extractEmojis(text) {
141
141
  }
142
142
  function extractLinks(text) {
143
143
  text = text || '';
144
- var reg = /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9@:%_\+.,~#?&//=]*)/gim;
144
+ var reg = /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z()]{2,6}\b([-a-zA-Z0-9@:%_\+.,~#?&//=]*)/gim;
145
145
  var out = [];
146
146
  var match;
147
147
  while (match = reg.exec(text)) {
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ function extractLinks(text) {
4
+ text = text || '';
5
+ var reg = /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z()]{2,6}\b([-a-zA-Z0-9@:%_\+.,~#?&//=]*)/gim;
6
+ var out = [];
7
+ var match;
8
+ while (match = reg.exec(text)) {
9
+ out.push({
10
+ index: match.index,
11
+ length: reg.lastIndex - match.index
12
+ });
13
+ }
14
+ return out;
15
+ }
16
+ function main() {
17
+ var tcs = [{
18
+ text: '',
19
+ out: []
20
+ }, {
21
+ text: 'vao https://subiz.com a',
22
+ out: [{
23
+ index: 4,
24
+ length: 17
25
+ }]
26
+ }, {
27
+ text: 'day htt://a.com',
28
+ out: [{
29
+ index: 10,
30
+ length: 5
31
+ }]
32
+ }, {
33
+ text: 'chao http://http.ne/22',
34
+ out: [{
35
+ index: 5,
36
+ length: 17
37
+ }]
38
+ }, {
39
+ text: 'chao google.com',
40
+ out: [{
41
+ index: 5,
42
+ length: 10
43
+ }]
44
+ }, {
45
+ text: 'Bạn có thể xem hình ảnh của Mazda2 1.5L AT qua liên kết dưới đây:',
46
+ out: []
47
+ }, {
48
+ text: 'Giá: 386.000.000 VNĐ',
49
+ out: []
50
+ }];
51
+ for (var i = 0; i < tcs.length; i++) {
52
+ var tc = tcs[i];
53
+ var out = extractLinks(tc.text);
54
+ if (JSON.stringify(out) !== JSON.stringify(tc.out)) {
55
+ console.error('FAIL', tc.text, '\n', JSON.stringify(out, null, 4), '\n', JSON.stringify(tc.out, null, 4));
56
+ } else {
57
+ console.info('PASS', tc.text);
58
+ }
59
+ }
60
+ }
61
+ main();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subiz/widget-v4",
3
- "version": "4.1.150",
3
+ "version": "4.1.152",
4
4
  "main": "./compiled_src/lib.js",
5
5
  "scripts": {
6
6
  "dev": "npx webpack serve --config webpack.dev.js",
@@ -80,7 +80,7 @@ export default class TextMessage extends Com {
80
80
  if (byType === 'agent') {
81
81
  return (
82
82
  <div class='message-agent message-text--agent' title={t}>
83
- <Block block={block} onLink={this.props.onLink} />
83
+ <Block block={block} onLink={this.props.onLink} textMessage/>
84
84
  {this.renderTime()}
85
85
  </div>
86
86
  )
@@ -89,7 +89,7 @@ export default class TextMessage extends Com {
89
89
  if (this.props.ev._error) msgcls += ' message-user--error'
90
90
  return (
91
91
  <div class={msgcls} title={t}>
92
- <Block block={block} onLink={this.props.onLink} />
92
+ <Block block={block} onLink={this.props.onLink} textMessage/>
93
93
  </div>
94
94
  )
95
95
  }
@@ -32,9 +32,9 @@ export default class Block extends Com {
32
32
  })
33
33
  if (block.type == 'bullet_list' || block.type == 'ordered_list') {
34
34
  if (block.type == 'bullet_list') {
35
- ele.tag = 'ol'
36
- } else {
37
35
  ele.tag = 'ul'
36
+ } else {
37
+ ele.tag = 'ol'
38
38
  }
39
39
  }
40
40
 
@@ -145,9 +145,13 @@ export default class Block extends Com {
145
145
  switch (ele.tag) {
146
146
  case 'img':
147
147
  return (
148
- <a class='message-text-inline-image-wrapper' href={sb.get(ele, 'attrs.src')} target='_blank'>
148
+ <a
149
+ class={this.props.textMessage ? 'message-text-inline-image-wrapper' : ''}
150
+ href={sb.get(ele, 'attrs.src')}
151
+ target='_blank'
152
+ >
149
153
  <img
150
- class='message-text-inline-image'
154
+ class={this.props.textMessage ? 'message-text-inline-image' : ''}
151
155
  src={sb.get(ele, 'attrs.src')}
152
156
  alt={sb.get(ele, 'attrs.alt') || ''}
153
157
  />
@@ -168,9 +172,11 @@ export default class Block extends Com {
168
172
  case 'h6':
169
173
  return <h6>{$body}</h6>
170
174
  case 'ol':
171
- return <ol>{$body}</ol>
175
+ return <ol class={this.props.textMessage ? 'text-message-ol' : ''}>{$body}</ol>
172
176
  case 'ul':
173
- return <ul>{$body}</ul>
177
+ return <ul class={this.props.textMessage ? 'text-message-ul' : ''}>{$body}</ul>
178
+ case 'li':
179
+ return <li class={this.props.textMessage ? 'text-message-li' : ''}>{$body}</li>
174
180
  case 'span':
175
181
  return <span>{$body}</span>
176
182
  case 'em':
@@ -181,7 +187,11 @@ export default class Block extends Com {
181
187
  return <hr />
182
188
  case 'a':
183
189
  return (
184
- <a href={ele.attrs['href']} target={ele.attrs['target']} title={ele.attrs['title']}>
190
+ <a
191
+ href={ele.attrs['href']}
192
+ target={this.props.textMessage ? '_blank' : ele.attrs['target']}
193
+ title={ele.attrs['title']}
194
+ >
185
195
  {$body}
186
196
  </a>
187
197
  )
@@ -97,7 +97,7 @@ export function extractEmojis(text) {
97
97
 
98
98
  export function extractLinks(text) {
99
99
  text = text || ''
100
- var reg = /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9@:%_\+.,~#?&//=]*)/gim
100
+ var reg = /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z()]{2,6}\b([-a-zA-Z0-9@:%_\+.,~#?&//=]*)/gim
101
101
  var out = []
102
102
  var match
103
103
  while ((match = reg.exec(text))) {
@@ -0,0 +1,56 @@
1
+ // somehow require error so we need copy paste function test here
2
+ function extractLinks(text) {
3
+ text = text || ''
4
+ var reg = /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z()]{2,6}\b([-a-zA-Z0-9@:%_\+.,~#?&//=]*)/gim
5
+ var out = []
6
+ var match
7
+ while ((match = reg.exec(text))) {
8
+ out.push({index: match.index, length: reg.lastIndex - match.index})
9
+ }
10
+
11
+ return out
12
+ }
13
+
14
+ function main() {
15
+ var tcs = [
16
+ {
17
+ text: '',
18
+ out: [],
19
+ },
20
+ {
21
+ text: 'vao https://subiz.com a',
22
+ out: [{ index: 4, length: 17 }],
23
+ },
24
+ {
25
+ text: 'day htt://a.com',
26
+ out: [{ index: 10, length: 5 }],
27
+ },
28
+ {
29
+ text: 'chao http://http.ne/22',
30
+ out: [{ index: 5, length: 17 }],
31
+ },
32
+ {
33
+ text: 'chao google.com',
34
+ out: [{ index: 5, length: 10 }],
35
+ },
36
+ {
37
+ text: 'Bạn có thể xem hình ảnh của Mazda2 1.5L AT qua liên kết dưới đây:',
38
+ out: [],
39
+ },
40
+ {
41
+ text: 'Giá: 386.000.000 VNĐ',
42
+ out: [],
43
+ },
44
+ ]
45
+
46
+ for (var i = 0; i < tcs.length; i++) {
47
+ var tc = tcs[i]
48
+ var out = extractLinks(tc.text)
49
+ if (JSON.stringify(out) !== JSON.stringify(tc.out)) {
50
+ console.error('FAIL', tc.text, '\n', JSON.stringify(out, null, 4), '\n', JSON.stringify(tc.out, null, 4))
51
+ } else {
52
+ console.info('PASS', tc.text)
53
+ }
54
+ }
55
+ }
56
+ main()
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__(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
- }]);