@subiz/widget-v4 4.1.83 → 4.1.85

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 (108) hide show
  1. package/compiled_src/chatbox/ChatButton.js +7 -29
  2. package/compiled_src/chatbox/TextMessage.js +17 -96
  3. package/compiled_src/chatbox/block.js +152 -0
  4. package/compiled_src/notif/notif.js +35 -35
  5. package/compiled_src/util/common.js +174 -1
  6. package/compiled_src/util/index.js +0 -2
  7. package/package.json +2 -2
  8. package/src/chatbox/ChatButton.js +5 -36
  9. package/src/chatbox/Emoji.js +1 -1
  10. package/src/chatbox/TextMessage.js +18 -96
  11. package/src/chatbox/block.js +161 -0
  12. package/src/common.js +2 -10
  13. package/src/notif/notif.js +30 -43
  14. package/src/util/common.js +224 -0
  15. package/src/util/index.js +0 -3
  16. package/compiled_src/util/extractor.js +0 -136
  17. package/dist/127.js +0 -273
  18. package/dist/132.js +0 -2796
  19. package/dist/185.js +0 -1885
  20. package/dist/19077b40b00.127.js +0 -1
  21. package/dist/19077b40b00.132.js +0 -1
  22. package/dist/19077b40b00.185.js +0 -1
  23. package/dist/19077b40b00.27.js +0 -1
  24. package/dist/19077b40b00.278.js +0 -1
  25. package/dist/19077b40b00.459.js +0 -1
  26. package/dist/19077b40b00.490.js +0 -1
  27. package/dist/19077b40b00.74.js +0 -1
  28. package/dist/19077b40b00.997.js +0 -1
  29. package/dist/19077b40b00.app.js +0 -1
  30. package/dist/19077b40b00.index.html +0 -33
  31. package/dist/19077b40b00.library.html +0 -33
  32. package/dist/19077b40b00.library.js +0 -1
  33. package/dist/19077b40b00.preview.html +0 -759
  34. package/dist/19077b40b00.preview.js +0 -1
  35. package/dist/19077b40b00.screenshoot.js +0 -1
  36. package/dist/19077b40b00.webview.js +0 -1
  37. package/dist/27.js +0 -107
  38. package/dist/278.js +0 -406
  39. package/dist/459.js +0 -107
  40. package/dist/490.js +0 -304
  41. package/dist/74.js +0 -372
  42. package/dist/997.js +0 -107
  43. package/dist/HASH +0 -1
  44. package/dist/assets/img/Facebook.64607ec.png +0 -0
  45. package/dist/assets/img/Zalo.6845707.png +0 -0
  46. package/dist/assets/img/award1a.1a58e10.png +0 -0
  47. package/dist/assets/img/award3a.3b74423.png +0 -0
  48. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  49. package/dist/assets/img/award5.39eb7ae.png +0 -0
  50. package/dist/assets/img/bubble_default.7d5e4ab.svg +0 -20
  51. package/dist/assets/img/caret.998eb8f.svg +0 -1
  52. package/dist/assets/img/convos_empty.2353007.svg +0 -72
  53. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  54. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  55. package/dist/assets/img/done_gray.d7e8203.svg +0 -4
  56. package/dist/assets/img/done_green.b817fd4.svg +0 -4
  57. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  67. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  68. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  69. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  70. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  71. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  72. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  73. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  74. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  75. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  76. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  77. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  78. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  79. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  80. package/dist/assets/img/empty.29bed2d.svg +0 -23
  81. package/dist/assets/img/empty_1.0b98af0.svg +0 -11
  82. package/dist/assets/img/examplte_logo.f86535f.svg +0 -1
  83. package/dist/assets/img/external-link.90577cc.svg +0 -1
  84. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  85. package/dist/assets/img/ghn.070f8e3.svg +0 -17
  86. package/dist/assets/img/ghtk.326eac1.svg +0 -18
  87. package/dist/assets/img/image_default.be0698b.png +0 -0
  88. package/dist/assets/img/info.ebce7ea.svg +0 -1
  89. package/dist/assets/img/loader.37000a7.svg +0 -1
  90. package/dist/assets/img/loading_static.a27f0ac.svg +0 -10
  91. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  92. package/dist/assets/img/main-service2.9b99549.png +0 -0
  93. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  94. package/dist/assets/img/package.8d37d0f.svg +0 -5
  95. package/dist/assets/img/package_fade.763c001.svg +0 -1
  96. package/dist/assets/img/rating--average.1ea492c.svg +0 -12
  97. package/dist/assets/img/rating--great.e3d712e.svg +0 -16
  98. package/dist/assets/img/rating--poor.2938a25.svg +0 -12
  99. package/dist/assets/img/search.f9705ff.svg +0 -1
  100. package/dist/assets/img/send.6db52a9.svg +0 -3
  101. package/dist/assets/img/shop.f7dc7d8.svg +0 -1
  102. package/dist/assets/img/shop_faded.df7845a.svg +0 -1
  103. package/dist/assets/img/subiz-mono.877e9f5.svg +0 -3
  104. package/dist/assets/img/x.26fdfa3.svg +0 -5
  105. package/dist/malicious-app.js +0 -15
  106. package/dist/screenshoot.html +0 -7
  107. package/dist/screenshoot.js +0 -10519
  108. package/src/util/extractor.js +0 -166
@@ -1,5 +1,133 @@
1
1
  var op = require('./op.js')
2
2
 
3
+
4
+ export function extractEmojis (text) {
5
+ var out = []
6
+ for (var i = 0; i < text.length; i++) {
7
+ for (var e = 0; e < emojis.length; e++) {
8
+ if (text.indexOf(emojis[e], i) !== i) continue
9
+ out.push({ index: i, length: emojis[e].length })
10
+ i += emojis[e].length - 1
11
+ break
12
+ }
13
+ }
14
+
15
+ return out
16
+ }
17
+
18
+ export function extractLinks (text) {
19
+ text = text || ''
20
+ var reg = /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.,~#?&//=]*)/gim
21
+ var out = []
22
+ var match
23
+ while ((match = reg.exec(text))) {
24
+ out.push({ index: match.index, length: reg.lastIndex - match.index })
25
+ }
26
+
27
+ return out
28
+ }
29
+
30
+ export function extractEmails (text) {
31
+ text = text || ''
32
+ var reg = /(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/gim
33
+
34
+ var out = []
35
+ var match
36
+ while ((match = reg.exec(text))) {
37
+ out.push({ index: match.index, length: reg.lastIndex - match.index })
38
+ }
39
+
40
+ return out
41
+ }
42
+
43
+ export function extractPhones (msg) {
44
+ msg = msg || ''
45
+ var fgmsg = ''
46
+ // fine-grained msg
47
+ // remove '-' in number-number
48
+ // remove ' ' in number number
49
+ // remove '.' in number.number
50
+
51
+ var realchmap = {}
52
+ for (var i = 0; i < msg.length; i++) {
53
+ var ch = msg.charAt(i)
54
+
55
+ if (ch !== '.' && ch !== '-' && ch !== ' ') {
56
+ fgmsg += ch
57
+ realchmap[fgmsg.length - 1] = i
58
+ continue
59
+ }
60
+
61
+ var prevCh = i > 0 ? msg.charAt(i - 1) : '-'
62
+ var nextCh = i < msg.length - 1 ? msg.charAt(i + 1) : '-'
63
+
64
+ if ('0123456789'.indexOf(prevCh) !== -1 && '0123456789'.indexOf(nextCh) !== -1) continue
65
+ fgmsg += ch
66
+ realchmap[fgmsg.length - 1] = i
67
+ }
68
+
69
+ var reg = /([0-9]{8,13})/gim
70
+
71
+ var out = []
72
+ var match
73
+ while ((match = reg.exec(fgmsg))) {
74
+ out.push({ index: realchmap[match.index], length: realchmap[reg.lastIndex - 1] - realchmap[match.index] + 1 })
75
+ }
76
+
77
+ return out
78
+ }
79
+
80
+ export function extract (text, extractor, type) {
81
+ if (!text) return []
82
+ var out = []
83
+ var lastindex = 0
84
+ var tags = extractor(text)
85
+ if (size(tags) === 0) return [{ type: 'text', text }]
86
+ each(tags, tag => {
87
+ out.push({ type: 'text', text: text.substr(lastindex, tag.index - lastindex) })
88
+ out.push({ type, text: text.substr(tag.index, tag.length) })
89
+ lastindex = tag.index + tag.length
90
+ })
91
+ var lastTag = last(tags)
92
+ out.push({
93
+ type: 'text',
94
+ text: text.substr(lastTag.index + lastTag.length, text.length - lastTag.index + lastTag.length),
95
+ })
96
+
97
+ return filter(out, o => o.text !== '')
98
+ }
99
+
100
+ export function pipeExtracts (text, extractors) {
101
+ var out = []
102
+ if (size(extractors) === 0) return [{ type: 'text', text }]
103
+ var ext = extractors.shift()
104
+
105
+ var tags = extract(text, ext, ext.type)
106
+ each(tags, t => {
107
+ if (t.type !== 'text') return out.push(t)
108
+ out = out.concat(pipeExtracts(t.text, extractors.slice()))
109
+ })
110
+
111
+ return out
112
+ }
113
+
114
+ export function extractText (text) {
115
+ var link = extractLinks
116
+ link.type = 'link'
117
+
118
+ var email = extractEmails
119
+ email.type = 'email'
120
+
121
+ var phone = extractPhones
122
+ phone.type = 'phone'
123
+
124
+ var emoji = extractEmojis
125
+ emoji.type = 'emoji'
126
+
127
+ return pipeExtracts(text, [email, link, phone, emoji])
128
+ }
129
+
130
+
3
131
  export function parseJSON(str) {
4
132
  try {
5
133
  return parse(str)
@@ -1143,3 +1271,99 @@ const ALL_CURRENCIES = [
1143
1271
 
1144
1272
  //}
1145
1273
  //}
1274
+
1275
+ export function blockToText(block) {
1276
+ return _blockToText(block).trim()
1277
+ }
1278
+
1279
+ function _blockToText(block) {
1280
+ if (!block || !block.type) return ''
1281
+ let out = ''
1282
+ if (block.type == 'bullet_list' || block.type == 'ordered_list') {
1283
+ map(block.content, (item) => {
1284
+ preifx = '\n* '
1285
+ if (block.type == 'ordered_list') {
1286
+ prefix = i + '\n. '
1287
+ }
1288
+ out += prefix + blockToText(item).trim()
1289
+ })
1290
+ return out
1291
+ }
1292
+
1293
+ if (block.type == 'heading' || block.type == 'paragraph') {
1294
+ out += '\n'
1295
+ }
1296
+
1297
+ if (
1298
+ block.type == '' ||
1299
+ block.type == 'text' ||
1300
+ block.type == 'link' ||
1301
+ block.type == 'mention-agent' ||
1302
+ block.type == 'dynamic-field'
1303
+ ) {
1304
+ return out + block.text
1305
+ }
1306
+
1307
+ if (block.type == 'horizontal_rule') return out + '\n---\n'
1308
+ if (block.type == 'emoji') {
1309
+ let code
1310
+ if (size(block.attrs) > 0) code = block.attrs['code']
1311
+ if (code == '') code = block.text
1312
+
1313
+ if (code != '') {
1314
+ let emoji = find(LEXICAL_EMOJI_LIST, (emoji) => emoji.code === code)
1315
+ out + op.get(emoji, 'text', code)
1316
+ }
1317
+ return out
1318
+ }
1319
+
1320
+ map(block.content, (block) => {
1321
+ out += blockToText(block)
1322
+ })
1323
+ return out
1324
+ }
1325
+
1326
+
1327
+ let emojis = [
1328
+ 'like',
1329
+ 'unlike',
1330
+ 'wink',
1331
+ 'tongue-out',
1332
+ 'tired',
1333
+ 'surprised',
1334
+ 'smiling',
1335
+ 'sleepy',
1336
+ 'sad',
1337
+ 'neutral',
1338
+ 'heart-eyes',
1339
+ 'grinning',
1340
+ 'crying',
1341
+ 'confused',
1342
+ 'angry',
1343
+
1344
+ 'cry',
1345
+ 'heart_eyes',
1346
+ 'neutral_face',
1347
+ 'emoji--disappointed',
1348
+ 'smile',
1349
+ 'open_mouth',
1350
+ 'tired_face',
1351
+ 'stuck_out_tongue',
1352
+ 'moyai',
1353
+ 'thumbsdown',
1354
+ 'dislike',
1355
+ 'thumbsup',
1356
+ 'ok_hand',
1357
+ 'octopus',
1358
+ 'pig2',
1359
+ 'wave',
1360
+ 'mouse',
1361
+ 'mouse2',
1362
+ 'rat',
1363
+ ]
1364
+ emojis = map(emojis, e => ':' + e + ':')
1365
+
1366
+ function absLink(url) {
1367
+ if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('//')) return 'http://' + url
1368
+ return url
1369
+ }
package/src/util/index.js CHANGED
@@ -26,9 +26,6 @@ sb.set = op.set
26
26
 
27
27
  sb.Pubsub = require('./pubsub.js').default
28
28
 
29
- import * as extractor from './extractor.js'
30
- sb = Object.assign(sb, extractor)
31
-
32
29
  import * as campaign from './campaign.js'
33
30
  sb = Object.assign(sb, campaign)
34
31
 
@@ -1,136 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.extract = extract;
7
- exports.extractEmails = extractEmails;
8
- exports.extractEmojis = extractEmojis;
9
- exports.extractLinks = extractLinks;
10
- exports.extractPhones = extractPhones;
11
- exports.extractText = extractText;
12
- exports.pipeExtracts = pipeExtracts;
13
- var common = require('./common.js');
14
- let emojis = ['like', 'unlike', 'wink', 'tongue-out', 'tired', 'surprised', 'smiling', 'sleepy', 'sad', 'neutral', 'heart-eyes', 'grinning', 'crying', 'confused', 'angry', 'cry', 'heart_eyes', 'neutral_face', 'emoji--disappointed', 'smile', 'open_mouth', 'tired_face', 'stuck_out_tongue', 'moyai', 'thumbsdown', 'dislike', 'thumbsup', 'ok_hand', 'octopus', 'pig2', 'wave', 'mouse', 'mouse2', 'rat'];
15
- emojis = common.map(emojis, e => ':' + e + ':');
16
- function extractEmojis(text) {
17
- var out = [];
18
- for (var i = 0; i < text.length; i++) {
19
- for (var e = 0; e < emojis.length; e++) {
20
- if (text.indexOf(emojis[e], i) !== i) continue;
21
- out.push({
22
- index: i,
23
- length: emojis[e].length
24
- });
25
- i += emojis[e].length - 1;
26
- break;
27
- }
28
- }
29
- return out;
30
- }
31
- function extractLinks(text) {
32
- text = text || '';
33
- var reg = /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.,~#?&//=]*)/gim;
34
- var out = [];
35
- var match;
36
- while (match = reg.exec(text)) {
37
- out.push({
38
- index: match.index,
39
- length: reg.lastIndex - match.index
40
- });
41
- }
42
- return out;
43
- }
44
- function extractEmails(text) {
45
- text = text || '';
46
- var reg = /(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/gim;
47
- var out = [];
48
- var match;
49
- while (match = reg.exec(text)) {
50
- out.push({
51
- index: match.index,
52
- length: reg.lastIndex - match.index
53
- });
54
- }
55
- return out;
56
- }
57
- function extractPhones(msg) {
58
- msg = msg || '';
59
- var fgmsg = '';
60
- var realchmap = {};
61
- for (var i = 0; i < msg.length; i++) {
62
- var ch = msg.charAt(i);
63
- if (ch !== '.' && ch !== '-' && ch !== ' ') {
64
- fgmsg += ch;
65
- realchmap[fgmsg.length - 1] = i;
66
- continue;
67
- }
68
- var prevCh = i > 0 ? msg.charAt(i - 1) : '-';
69
- var nextCh = i < msg.length - 1 ? msg.charAt(i + 1) : '-';
70
- if ('0123456789'.indexOf(prevCh) !== -1 && '0123456789'.indexOf(nextCh) !== -1) continue;
71
- fgmsg += ch;
72
- realchmap[fgmsg.length - 1] = i;
73
- }
74
- var reg = /([0-9]{8,13})/gim;
75
- var out = [];
76
- var match;
77
- while (match = reg.exec(fgmsg)) {
78
- out.push({
79
- index: realchmap[match.index],
80
- length: realchmap[reg.lastIndex - 1] - realchmap[match.index] + 1
81
- });
82
- }
83
- return out;
84
- }
85
- function extract(text, extractor, type) {
86
- if (!text) return [];
87
- var out = [];
88
- var lastindex = 0;
89
- var tags = extractor(text);
90
- if (common.size(tags) === 0) return [{
91
- type: 'text',
92
- text
93
- }];
94
- common.each(tags, tag => {
95
- out.push({
96
- type: 'text',
97
- text: text.substr(lastindex, tag.index - lastindex)
98
- });
99
- out.push({
100
- type,
101
- text: text.substr(tag.index, tag.length)
102
- });
103
- lastindex = tag.index + tag.length;
104
- });
105
- var lastTag = common.last(tags);
106
- out.push({
107
- type: 'text',
108
- text: text.substr(lastTag.index + lastTag.length, text.length - lastTag.index + lastTag.length)
109
- });
110
- return common.filter(out, o => o.text !== '');
111
- }
112
- function pipeExtracts(text, extractors) {
113
- var out = [];
114
- if (common.size(extractors) === 0) return [{
115
- type: 'text',
116
- text
117
- }];
118
- var ext = extractors.shift();
119
- var tags = extract(text, ext, ext.type);
120
- common.each(tags, t => {
121
- if (t.type !== 'text') return out.push(t);
122
- out = out.concat(pipeExtracts(t.text, extractors.slice()));
123
- });
124
- return out;
125
- }
126
- function extractText(text) {
127
- var link = extractLinks;
128
- link.type = 'link';
129
- var email = extractEmails;
130
- email.type = 'email';
131
- var phone = extractPhones;
132
- phone.type = 'phone';
133
- var emoji = extractEmojis;
134
- emoji.type = 'emoji';
135
- return pipeExtracts(text, [email, link, phone, emoji]);
136
- }
package/dist/127.js DELETED
@@ -1,273 +0,0 @@
1
- "use strict";
2
- (self["webpackChunk_subiz_widget_v4"] = self["webpackChunk_subiz_widget_v4"] || []).push([[127],{
3
-
4
- /***/ 6127:
5
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
-
7
- __webpack_require__.r(__webpack_exports__);
8
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9
- /* harmony export */ "default": () => (/* binding */ ProductAttachments)
10
- /* harmony export */ });
11
- /* harmony import */ var _util_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6801);
12
- /* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2840);
13
- /* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(172);
14
-
15
-
16
-
17
- class ProductAttachments extends _common_js__WEBPACK_IMPORTED_MODULE_1__/* .Com */ .Mw {
18
- render() {
19
- let byType = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(this.props.ev, 'by.type');
20
- if (byType === 'user') return null;
21
- let acc = this.props.store.matchAccount();
22
- var attachments = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(this.props.ev, 'data.message.attachments', []);
23
- let orders = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.filter(attachments, att => att.type === 'order' && att.order).map(att => att.order);
24
- if (orders.length === 0) return null;
25
- let $orders = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.map(orders, (order, index) => {
26
- calcOrderTotal(order);
27
- let $note = null;
28
- if (order.note) {
29
- $note = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
30
- class: "order_attachment__label"
31
- }, this.props.t('note')), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
32
- class: "order_attachment__note",
33
- title: order.note
34
- }, order.note));
35
- }
36
- let $products = null;
37
- if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.size(order.items) > 0) {
38
- $products = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
39
- class: "order_attachment__label"
40
- }, this.props.t('product')), _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.map(order.items, item => {
41
- let product = item.product || {};
42
- return (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
43
- class: "order_attachment__product"
44
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("img", {
45
- class: "order_attachment__product_img",
46
- alt: '' + _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(product, 'id'),
47
- src: _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(product, 'image', __webpack_require__(2876))
48
- }), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
49
- style: "overflow: hidden !important;"
50
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
51
- class: "order_attachment__product_name",
52
- title: this.props.t.i18n(product.i18n_name) || product.name
53
- }, this.props.t.i18n(product.i18n_name) || product.name), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
54
- class: "order_attachment__product_desc"
55
- }, getProductPropName(product, ' / ')), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
56
- class: "order_attachment__product_desc"
57
- }, this.props.t('qty'), " ", item.quantity, "\xA0\xB7\xA0", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(product.price))));
58
- }));
59
- }
60
- let $total = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
61
- class: "order_attachment__footer"
62
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
63
- class: "d-flex align-items-center justify-content-between"
64
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, this.props.t('total')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("b", {
65
- class: "order_attachment__total"
66
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.total)))));
67
- let phoneattr = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.find(_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'user.attributes', []), attr => attr.key === 'phones') || {
68
- key: 'phones',
69
- text: ''
70
- };
71
- let phone = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'shipping.address.phone', '').trim();
72
- phone = phone || _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.trim(phoneattr.text);
73
- if (phone) phone = this.props.t('phn') + ': ' + phone;
74
- let $shipto = null;
75
- if (displayOrderShippingAddress(order) || phone) {
76
- $shipto = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
77
- class: "order_attachment__label"
78
- }, this.props.t('ship_to')), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, displayOrderShippingAddress(order)), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
79
- class: "order_attachment__text_truncate"
80
- }, phone));
81
- }
82
- let $beforeTax = null;
83
- if (order._discount_before_tax) {
84
- $beforeTax = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
85
- class: "order_attachment__footer"
86
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
87
- class: "d-flex align-items-center justify-content-between"
88
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
89
- class: "order_attachment__label no_margin"
90
- }, this.props.t('subtotal_before_tax')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._order_value))), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
91
- class: "d-flex align-items-center justify-content-between"
92
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
93
- class: "order_attachment__label no_margin"
94
- }, this.props.t('discount_before_tax')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, "-", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._discount_before_tax))));
95
- }
96
- let $subtotal = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
97
- class: "d-flex align-items-center justify-content-between"
98
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
99
- class: "order_attachment__label no_margin"
100
- }, this.props.t('subtotal')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
101
- style: ""
102
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.subtotal)));
103
- let $tax = null;
104
- if (order.total_tax) {
105
- let taxname = '';
106
- if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.size(order._taxM) === 1) {
107
- let tax = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order._taxM, '0.tax', {});
108
- if (tax.name && tax.percentage) taxname = `(${tax.name} ${Math.round(tax.percentage || 0) / 100}%)`;
109
- }
110
- $tax = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
111
- class: "d-flex align-items-center justify-content-between"
112
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
113
- class: "order_attachment__label no_margin"
114
- }, this.props.t('tax'), " ", taxname), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
115
- style: ""
116
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.total_tax)));
117
- }
118
- let $discount = null;
119
- if (order.discount_type === 'percentage' && order.discount_percentage) {
120
- $discount = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
121
- class: "d-flex align-items-center justify-content-between"
122
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
123
- class: "order_attachment__label no_margin"
124
- }, this.props.t('discount_after_tax'), " (", Math.round(order.discount_percentage / 100), "%)"), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
125
- style: ""
126
- }, "-", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._computed_discount)));
127
- }
128
- if (order.discount_type === 'amount' && order.discount_amount) {
129
- $discount = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
130
- class: "d-flex align-items-center justify-content-between"
131
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
132
- class: "order_attachment__label no_margin"
133
- }, this.props.t('discount_after_tax')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
134
- class: "no-shrink"
135
- }, "-", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._computed_discount)));
136
- }
137
- let $shipping = null;
138
- if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'shipping.nominal_fee')) {
139
- $shipping = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
140
- class: "d-flex align-items-center justify-content-between"
141
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
142
- class: "order_attachment__label no_margin"
143
- }, this.props.t('shipping_fee')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
144
- style: ""
145
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'shipping.nominal_fee', 0))));
146
- }
147
- let $adjustment = null;
148
- if (order.adjustment) {
149
- $adjustment = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
150
- class: "d-flex align-items-center justify-content-between"
151
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
152
- class: "order_attachment__label no_margin"
153
- }, order.adjustment_description), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
154
- class: "no-shrink"
155
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.adjustment)));
156
- }
157
- $subtotal = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
158
- class: "order_attachment__footer"
159
- }, $subtotal, $tax, $shipping, $discount, $adjustment);
160
- if (!$shipping && !$adjustment && !$discount && !$tax) {
161
- $subtotal = null;
162
- }
163
- return (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
164
- class: `order_attachment order_attachment__${byType}`
165
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
166
- class: "order_attachment__header"
167
- }, this.props.t('order'), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("span", {
168
- class: "order_attachment__text_muted order_attachment__text_sm"
169
- }, getOrderDisplayName(order))), $products, $shipto, $note, $beforeTax, $subtotal, $total);
170
- });
171
- return $orders;
172
- }
173
- }
174
- function getProductPropName(product, seperator = ' - ') {
175
- let options = op.get(product, 'options', []);
176
- let props = op.get(product, 'props', []);
177
- let multiPropsOptions = op.filter(options, option => op.size(option.values) > 1);
178
- let names = [];
179
- op.each(multiPropsOptions, option => {
180
- let prop = op.find(props, prop => prop.key === option.key) || {};
181
- if (prop.value) names.push(prop.value);
182
- });
183
- return names.join(seperator);
184
- }
185
- function getOrderDisplayName(order = {}) {
186
- return order.number || order.id || '';
187
- }
188
- function displayOrderShippingAddress(order, isShorten) {
189
- let addr = op.get(order, 'shipping.address', {});
190
- let fulladdr = [addr.address, addr.ward, addr.district, addr.province].filter(a => a).join(', ').trim();
191
- if (isShorten) fulladdr = shortenAddr(fulladdr);
192
- return fulladdr;
193
- }
194
- function shortenAddr(str) {
195
- str = str || '';
196
- str = str.replace(/Hà Nội/gi, 'HN');
197
- str = str.replace(/Hồ Chí Minh/gi, 'HCM');
198
- str = str.replace(/Thành Phố/gi, 'TP');
199
- return str;
200
- }
201
- function calcOrderTotal(order) {
202
- let subtotal = 0;
203
- let beforeTaxDiscount = 0;
204
- let ordervalue = 0;
205
- op.map(order.items, item => {
206
- if (!item.product) return 0;
207
- let price = op.get(item, 'product.price', 0) * (item.quantity || 0);
208
- ordervalue += price;
209
- if (item.discount_type == 'percentage') {
210
- if (item.discount_percentage > 0) {
211
- beforeTaxDiscount += price * item.discount_percentage / 10000;
212
- price = price * (1 - (item.discount_percentage || 0) / 10000);
213
- }
214
- } else if (item.discount_type == 'amount') {
215
- if (item.discount_amount > 0) {
216
- beforeTaxDiscount += item.discount_amount;
217
- price = price - (item.discount_amount || 0);
218
- if (price <= 0) price = 0;
219
- }
220
- }
221
- item.total = price;
222
- subtotal += price;
223
- });
224
- let taxM = {};
225
- op.map(order.items, (item, i) => {
226
- if (!item.product) return;
227
- let tax = item.product.tax;
228
- if (!tax) return;
229
- if (!tax.id) return;
230
- let taxprice = item.total * tax.percentage / 10000;
231
- item.total_tax = taxprice;
232
- taxM[i] = {
233
- tax: tax,
234
- taxprice: taxprice
235
- };
236
- });
237
- let totaltax = 0;
238
- op.map(taxM, t => totaltax += t.taxprice);
239
- let computed_discount = 0;
240
- if (order.discount_type == 'percentage' && order.discount_percentage > 0) {
241
- computed_discount = (subtotal + totaltax) * order.discount_percentage / 10000;
242
- } else if (order.discount_type == 'amount') {
243
- computed_discount = order.discount_amount || 0;
244
- }
245
- let shippingfee = op.get(order, 'shipping.nominal_fee', 0);
246
- if (shippingfee > 0) {
247
- if (op.get(order, 'shipping.tax.id')) {
248
- let tax = order.shipping.tax;
249
- let taxprice = shippingfee * (tax.percentage / 10000);
250
- taxM['ship'] = {
251
- tax: tax,
252
- taxprice: taxprice
253
- };
254
- order.shipping.total_tax = taxprice;
255
- }
256
- }
257
- totaltax = 0;
258
- op.map(taxM, t => totaltax += t.taxprice);
259
- let total = subtotal + totaltax - computed_discount + shippingfee;
260
- total += order.adjustment || 0;
261
- if (total < 0) total = 0;
262
- order.subtotal = subtotal;
263
- order._computed_discount = computed_discount;
264
- order._taxM = taxM;
265
- order.total = total;
266
- order.total_tax = totaltax;
267
- order._discount_before_tax = beforeTaxDiscount;
268
- order._order_value = ordervalue;
269
- }
270
-
271
- /***/ })
272
-
273
- }]);