@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.
- package/assets/less/message.less +21 -1
- package/compiled_src/chatbox/TextMessage.js +4 -2
- package/compiled_src/chatbox/block.js +15 -7
- package/compiled_src/util/common.js +1 -1
- package/compiled_src/util/extractor.test2.js +61 -0
- package/package.json +1 -1
- package/src/chatbox/TextMessage.js +2 -2
- package/src/chatbox/block.js +17 -7
- package/src/util/common.js +1 -1
- package/src/util/extractor.test2.js +56 -0
- package/dist/127.js +0 -273
- package/dist/132.js +0 -2802
- package/dist/185.js +0 -1827
- package/dist/197bb91766c.127.js +0 -1
- package/dist/197bb91766c.132.js +0 -1
- package/dist/197bb91766c.185.js +0 -1
- package/dist/197bb91766c.27.js +0 -1
- package/dist/197bb91766c.278.js +0 -1
- package/dist/197bb91766c.339.js +0 -1
- package/dist/197bb91766c.459.js +0 -1
- package/dist/197bb91766c.490.js +0 -1
- package/dist/197bb91766c.74.js +0 -1
- package/dist/197bb91766c.997.js +0 -1
- package/dist/197bb91766c.app.js +0 -1
- package/dist/197bb91766c.chat.html +0 -1
- package/dist/197bb91766c.chat.js +0 -1
- package/dist/197bb91766c.form.html +0 -1
- package/dist/197bb91766c.form.js +0 -1
- package/dist/197bb91766c.index.html +0 -71
- package/dist/197bb91766c.library.html +0 -71
- package/dist/197bb91766c.library.js +0 -1
- package/dist/197bb91766c.preview.html +0 -759
- package/dist/197bb91766c.preview.js +0 -1
- package/dist/197bb91766c.webview.js +0 -1
- package/dist/27.js +0 -107
- package/dist/278.js +0 -417
- package/dist/459.js +0 -107
- package/dist/490.js +0 -305
- package/dist/74.js +0 -372
- package/dist/997.js +0 -107
- package/dist/HASH +0 -1
- package/dist/assets/img/Facebook.64607ec.png +0 -0
- package/dist/assets/img/Zalo.6845707.png +0 -0
- package/dist/assets/img/award1a.1a58e10.png +0 -0
- package/dist/assets/img/award3a.3b74423.png +0 -0
- package/dist/assets/img/award4a.ed6ccd4.png +0 -0
- package/dist/assets/img/award5.39eb7ae.png +0 -0
- package/dist/assets/img/bubble_default.7d5e4ab.svg +0 -20
- package/dist/assets/img/caret.998eb8f.svg +0 -1
- package/dist/assets/img/convos_empty.2353007.svg +0 -72
- package/dist/assets/img/default.06e6ee0.jpg +0 -0
- package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
- package/dist/assets/img/done_gray.d7e8203.svg +0 -4
- package/dist/assets/img/done_green.b817fd4.svg +0 -4
- package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
- package/dist/assets/img/empty.29bed2d.svg +0 -23
- package/dist/assets/img/empty_1.0b98af0.svg +0 -11
- package/dist/assets/img/examplte_logo.f86535f.svg +0 -1
- package/dist/assets/img/external-link.90577cc.svg +0 -1
- package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
- package/dist/assets/img/ghn.070f8e3.svg +0 -17
- package/dist/assets/img/ghtk.326eac1.svg +0 -18
- package/dist/assets/img/image_default.be0698b.png +0 -0
- package/dist/assets/img/info.ebce7ea.svg +0 -1
- package/dist/assets/img/loader.37000a7.svg +0 -1
- package/dist/assets/img/loading_static.a27f0ac.svg +0 -10
- package/dist/assets/img/main-service1.d536cc2.png +0 -0
- package/dist/assets/img/main-service2.9b99549.png +0 -0
- package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
- package/dist/assets/img/package.8d37d0f.svg +0 -5
- package/dist/assets/img/package_fade.763c001.svg +0 -1
- package/dist/assets/img/rating--average.1ea492c.svg +0 -12
- package/dist/assets/img/rating--great.e3d712e.svg +0 -16
- package/dist/assets/img/rating--poor.2938a25.svg +0 -12
- package/dist/assets/img/search.f9705ff.svg +0 -1
- package/dist/assets/img/send.6db52a9.svg +0 -3
- package/dist/assets/img/shop.f7dc7d8.svg +0 -1
- package/dist/assets/img/shop_faded.df7845a.svg +0 -1
- package/dist/assets/img/stars_v2.79cf728.png +0 -0
- package/dist/assets/img/subiz-mono.8fbc067.svg +0 -3
- package/dist/assets/img/x.26fdfa3.svg +0 -5
- package/dist/malicious-app.js +0 -15
- package/dist/screenshoot.html +0 -7
- package/dist/screenshoot.js +0 -11635
package/assets/less/message.less
CHANGED
|
@@ -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
|
-
|
|
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:
|
|
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:
|
|
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",
|
|
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",
|
|
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-
|
|
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
|
@@ -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
|
}
|
package/src/chatbox/block.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
)
|
package/src/util/common.js
CHANGED
|
@@ -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-
|
|
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
|
-
}]);
|