@subiz/widget-v4 4.1.74 → 4.1.76
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/compiled_src/chatbox/Event.js +2 -2
- package/compiled_src/chatbox/Events.js +1 -1
- package/compiled_src/store/api_fake.js +26 -54
- package/compiled_src/store/store.js +3 -3
- package/compiled_src/util/common.js +3 -34
- package/dist/127.js +273 -0
- package/dist/132.js +2796 -0
- package/dist/185.js +1885 -0
- package/dist/18f3763d12b.127.js +1 -0
- package/dist/18f3763d12b.132.js +1 -0
- package/dist/18f3763d12b.185.js +1 -0
- package/dist/18f3763d12b.27.js +1 -0
- package/dist/18f3763d12b.278.js +1 -0
- package/dist/18f3763d12b.459.js +1 -0
- package/dist/18f3763d12b.490.js +1 -0
- package/dist/18f3763d12b.74.js +1 -0
- package/dist/18f3763d12b.997.js +1 -0
- package/dist/18f3763d12b.app.js +1 -0
- package/dist/18f3763d12b.index.html +33 -0
- package/dist/18f3763d12b.library.html +33 -0
- package/dist/18f3763d12b.library.js +1 -0
- package/dist/18f3763d12b.preview.html +759 -0
- package/dist/18f3763d12b.preview.js +1 -0
- package/dist/18f3763d12b.screenshoot.js +1 -0
- package/dist/18f3763d12b.webview.js +1 -0
- package/dist/27.js +107 -0
- package/dist/278.js +406 -0
- package/dist/459.js +107 -0
- package/dist/490.js +304 -0
- package/dist/74.js +372 -0
- package/dist/997.js +107 -0
- package/dist/HASH +1 -0
- 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 +20 -0
- package/dist/assets/img/caret.998eb8f.svg +1 -0
- package/dist/assets/img/convos_empty.2353007.svg +72 -0
- 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 +4 -0
- package/dist/assets/img/done_green.b817fd4.svg +4 -0
- 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 +23 -0
- package/dist/assets/img/empty_1.0b98af0.svg +11 -0
- package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
- package/dist/assets/img/external-link.90577cc.svg +1 -0
- package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
- package/dist/assets/img/ghn.070f8e3.svg +17 -0
- package/dist/assets/img/ghtk.326eac1.svg +18 -0
- package/dist/assets/img/image_default.be0698b.png +0 -0
- package/dist/assets/img/info.ebce7ea.svg +1 -0
- package/dist/assets/img/loader.37000a7.svg +1 -0
- package/dist/assets/img/loading_static.a27f0ac.svg +10 -0
- 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 +5 -0
- package/dist/assets/img/package_fade.763c001.svg +1 -0
- package/dist/assets/img/rating--average.1ea492c.svg +12 -0
- package/dist/assets/img/rating--great.e3d712e.svg +16 -0
- package/dist/assets/img/rating--poor.2938a25.svg +12 -0
- package/dist/assets/img/search.f9705ff.svg +1 -0
- package/dist/assets/img/send.6db52a9.svg +3 -0
- package/dist/assets/img/shop.f7dc7d8.svg +1 -0
- package/dist/assets/img/shop_faded.df7845a.svg +1 -0
- package/dist/assets/img/subiz-mono.877e9f5.svg +3 -0
- package/dist/assets/img/x.26fdfa3.svg +5 -0
- package/dist/malicious-app.js +15 -0
- package/dist/screenshoot.html +7 -0
- package/dist/screenshoot.js +10423 -0
- package/package.json +6 -6
- package/src/chatbox/Event.js +2 -2
- package/src/chatbox/Events.js +2 -1
- package/src/store/api_fake.js +22 -63
- package/src/store/store.js +3 -3
- package/src/util/common.js +2 -29
|
@@ -198,7 +198,7 @@ class Event extends _common.Com {
|
|
|
198
198
|
onSelect: e => this.chooseQuickReply(e)
|
|
199
199
|
}));
|
|
200
200
|
}
|
|
201
|
-
if (_index.default.
|
|
201
|
+
if (_index.default.get(ev, 'data.message.idempotency_key') === ev.id && this.props.store.now() - ev.created < 900) {
|
|
202
202
|
_index.default.setTimeout(() => this.setState({
|
|
203
203
|
refresh: this.state.refresh
|
|
204
204
|
}), 1000);
|
|
@@ -206,7 +206,7 @@ class Event extends _common.Com {
|
|
|
206
206
|
let $dot = (0, _preact.h)("div", {
|
|
207
207
|
class: "sending_dot"
|
|
208
208
|
});
|
|
209
|
-
if (this.props.store.now() - ev.created < 900 || _index.default.
|
|
209
|
+
if (this.props.store.now() - ev.created < 900 || _index.default.get(ev, 'data.message.idempotency_key') !== ev.id) {
|
|
210
210
|
$dot = (0, _preact.h)("div", {
|
|
211
211
|
class: "sending_dot sending_dot__hide"
|
|
212
212
|
});
|
|
@@ -134,7 +134,7 @@ class Events extends _common.Com {
|
|
|
134
134
|
if (_index.default.convoOfEv(newev) !== this.props.cid) return;
|
|
135
135
|
let isBottom = this.isBottom();
|
|
136
136
|
var byme = false;
|
|
137
|
-
if (_index.default.get(newev, 'type') === 'message_sent' && newev.id === _index.default.
|
|
137
|
+
if (_index.default.get(newev, 'type') === 'message_sent' && newev.id === _index.default.get(newev, 'data.message.idempotency_key')) byme = true;
|
|
138
138
|
if (byme || isBottom) this.scrollToBottom();
|
|
139
139
|
}
|
|
140
140
|
async loadConvo() {
|
|
@@ -11,7 +11,6 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
|
11
11
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
12
12
|
const ajax = require('@subiz/ajax/src/ajax.js');
|
|
13
13
|
ajax.env.XMLHttpRequest = window.XMLHttpRequest;
|
|
14
|
-
const findAnswer = challenge => challenge.answer;
|
|
15
14
|
function jsonifyTextPlain(param, done) {
|
|
16
15
|
let req = param.request;
|
|
17
16
|
if (req.content_type === 'text/plain' && req.body !== undefined) req.body = _index.default.stringify(req.body);
|
|
@@ -58,7 +57,6 @@ class _default {
|
|
|
58
57
|
_defineProperty(this, "sendLostFocus", data => OK200);
|
|
59
58
|
_defineProperty(this, "sendContentView", data => OK200);
|
|
60
59
|
_defineProperty(this, "uploadToS3", async file => OK200);
|
|
61
|
-
_defineProperty(this, "getChallenge", accid => OK200);
|
|
62
60
|
_defineProperty(this, "time", _ => Promise.resolve({
|
|
63
61
|
code: 200,
|
|
64
62
|
body: new _index.default.Date().toISOString()
|
|
@@ -125,14 +123,6 @@ function makeFakeConvo(accid, convoid, userid, agentid) {
|
|
|
125
123
|
}],
|
|
126
124
|
ended: 1610454875505,
|
|
127
125
|
state: 'ended',
|
|
128
|
-
integration: {
|
|
129
|
-
account_id: accid,
|
|
130
|
-
connector_id: 'subikon',
|
|
131
|
-
name: 'Subiz Widget',
|
|
132
|
-
connector_type: 'subiz',
|
|
133
|
-
state: 'activated',
|
|
134
|
-
id: inteid
|
|
135
|
-
},
|
|
136
126
|
actived: 1610453070259,
|
|
137
127
|
last_message_sent: {
|
|
138
128
|
id: 'evqyiykaoizbwnkaecwphttwk',
|
|
@@ -166,6 +156,27 @@ function makeFakeConvo(accid, convoid, userid, agentid) {
|
|
|
166
156
|
}
|
|
167
157
|
function makeFakeMessages(accid, convoid, userid, agentid) {
|
|
168
158
|
let inteid = accid + '.subizv4.subikon';
|
|
159
|
+
let usermember = {
|
|
160
|
+
type: 'user',
|
|
161
|
+
id: userid,
|
|
162
|
+
last_page_view_url: 'https://subiz.com.vn/',
|
|
163
|
+
conversation_id: convoid,
|
|
164
|
+
membership: 'active',
|
|
165
|
+
invited_by: {
|
|
166
|
+
id: userid,
|
|
167
|
+
type: 'user'
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
let agentmember = {
|
|
171
|
+
type: 'agent',
|
|
172
|
+
conversation_id: convoid,
|
|
173
|
+
id: agentid,
|
|
174
|
+
membership: 'active',
|
|
175
|
+
invited_by: {
|
|
176
|
+
id: userid,
|
|
177
|
+
type: 'user'
|
|
178
|
+
}
|
|
179
|
+
};
|
|
169
180
|
return [{
|
|
170
181
|
id: 'evqyiyjmxrjsylftvnrghrfmq',
|
|
171
182
|
account_id: accid,
|
|
@@ -179,16 +190,7 @@ function makeFakeMessages(accid, convoid, userid, agentid) {
|
|
|
179
190
|
conversation: {
|
|
180
191
|
id: convoid,
|
|
181
192
|
account_id: accid,
|
|
182
|
-
members: [
|
|
183
|
-
type: 'user',
|
|
184
|
-
id: userid,
|
|
185
|
-
last_page_view_url: 'https://subiz.com.vn/',
|
|
186
|
-
membership: 'observer',
|
|
187
|
-
invited_by: {
|
|
188
|
-
id: userid,
|
|
189
|
-
type: 'user'
|
|
190
|
-
}
|
|
191
|
-
}],
|
|
193
|
+
members: [usermember],
|
|
192
194
|
state: 'pending'
|
|
193
195
|
}
|
|
194
196
|
}
|
|
@@ -205,16 +207,7 @@ function makeFakeMessages(accid, convoid, userid, agentid) {
|
|
|
205
207
|
conversation: {
|
|
206
208
|
id: convoid,
|
|
207
209
|
account_id: accid,
|
|
208
|
-
members: [
|
|
209
|
-
type: 'agent',
|
|
210
|
-
id: agentid,
|
|
211
|
-
conversation_id: convoid,
|
|
212
|
-
membership: 'observer',
|
|
213
|
-
invited_by: {
|
|
214
|
-
id: userid,
|
|
215
|
-
type: 'user'
|
|
216
|
-
}
|
|
217
|
-
}],
|
|
210
|
+
members: [agentmember],
|
|
218
211
|
state: 'pending',
|
|
219
212
|
source: 'https://subiz.com.vn/vi/'
|
|
220
213
|
}
|
|
@@ -247,16 +240,7 @@ function makeFakeMessages(accid, convoid, userid, agentid) {
|
|
|
247
240
|
data: {
|
|
248
241
|
conversation: {
|
|
249
242
|
id: convoid,
|
|
250
|
-
members: [
|
|
251
|
-
type: 'user',
|
|
252
|
-
id: userid,
|
|
253
|
-
last_page_view_url: 'https://subiz.com.vn/',
|
|
254
|
-
membership: 'active',
|
|
255
|
-
invited_by: {
|
|
256
|
-
id: userid,
|
|
257
|
-
type: 'user'
|
|
258
|
-
}
|
|
259
|
-
}]
|
|
243
|
+
members: [usermember]
|
|
260
244
|
}
|
|
261
245
|
}
|
|
262
246
|
}, {
|
|
@@ -274,10 +258,7 @@ function makeFakeMessages(accid, convoid, userid, agentid) {
|
|
|
274
258
|
conversation_id: convoid,
|
|
275
259
|
text: 'Xin chào',
|
|
276
260
|
format: 'plaintext',
|
|
277
|
-
|
|
278
|
-
key: 'idempotency',
|
|
279
|
-
value: '"wrueysyjbhqrkiwhsejpqrwqrdkkyaibajdw"'
|
|
280
|
-
}],
|
|
261
|
+
idempotency_key: 'wrueysyjbhqrkiwhsejpqrwqrdkkyaibajdw',
|
|
281
262
|
integration_id: inteid,
|
|
282
263
|
pongs: [{
|
|
283
264
|
member_id: userid,
|
|
@@ -298,16 +279,7 @@ function makeFakeMessages(accid, convoid, userid, agentid) {
|
|
|
298
279
|
data: {
|
|
299
280
|
conversation: {
|
|
300
281
|
id: convoid,
|
|
301
|
-
members: [
|
|
302
|
-
type: 'agent',
|
|
303
|
-
id: agentid,
|
|
304
|
-
conversation_id: convoid,
|
|
305
|
-
membership: 'active',
|
|
306
|
-
invited_by: {
|
|
307
|
-
id: userid,
|
|
308
|
-
type: 'user'
|
|
309
|
-
}
|
|
310
|
-
}]
|
|
282
|
+
members: [agentmember]
|
|
311
283
|
}
|
|
312
284
|
}
|
|
313
285
|
}, {
|
|
@@ -446,7 +446,7 @@ class Store {
|
|
|
446
446
|
var lastmsgsent = events[_index.default.size(events) - 1];
|
|
447
447
|
if (!lastmsgsent) return;
|
|
448
448
|
if (this.g_haveSentSeenM[lastmsgsent.id]) return;
|
|
449
|
-
if (lastmsgsent.id ===
|
|
449
|
+
if (lastmsgsent.id === lastmsgsent.data.message.idempotency_key) return;
|
|
450
450
|
this.api.markAsSeen(id, lastmsgsent.id);
|
|
451
451
|
let convo = this.cache.match('convo_' + id) || {};
|
|
452
452
|
let mem = _index.default.find(convo.members, m => m.id === user.id);
|
|
@@ -683,7 +683,7 @@ class Store {
|
|
|
683
683
|
this.chain.put(cid, oldev.id, _index.default.getMs(oldev.created), oldev);
|
|
684
684
|
}
|
|
685
685
|
if (ev.type === 'message_sent') {
|
|
686
|
-
let idemkey = _index.default.
|
|
686
|
+
let idemkey = _index.default.get(ev, 'data.message.idempotency_key');
|
|
687
687
|
let found = _index.default.find(this.listEvents(cid), oldev => oldev.id === idemkey);
|
|
688
688
|
if (found) {
|
|
689
689
|
this.chain.del(cid, found.id);
|
|
@@ -750,7 +750,7 @@ class Store {
|
|
|
750
750
|
_index.default.convoToEv(cid, event);
|
|
751
751
|
let files = [];
|
|
752
752
|
if (type === 'message_sent') {
|
|
753
|
-
|
|
753
|
+
event.data.message.idempotency_key = idempotency;
|
|
754
754
|
event.data.message.conversation_id = cid;
|
|
755
755
|
await flow.map(event.data.message.attachments, 2, async (att, i) => {
|
|
756
756
|
if (att.type !== 'file') return;
|
|
@@ -20,7 +20,6 @@ exports.formatCurrency = formatCurrency;
|
|
|
20
20
|
exports.getAgentDisplayName = getAgentDisplayName;
|
|
21
21
|
exports.getDayName = getDayName;
|
|
22
22
|
exports.getMs = getMs;
|
|
23
|
-
exports.getMsgField = getMsgField;
|
|
24
23
|
exports.getUrlParameter = getUrlParameter;
|
|
25
24
|
exports.getUserAttr = getUserAttr;
|
|
26
25
|
exports.includes = includes;
|
|
@@ -50,9 +49,7 @@ exports.requestAnimationFrame = void 0;
|
|
|
50
49
|
exports.sameDay = sameDay;
|
|
51
50
|
exports.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded;
|
|
52
51
|
exports.setCss = setCss;
|
|
53
|
-
exports.setInterval = void 0;
|
|
54
|
-
exports.setMsgField = setMsgField;
|
|
55
|
-
exports.setTimeout = void 0;
|
|
52
|
+
exports.setTimeout = exports.setInterval = void 0;
|
|
56
53
|
exports.setUserAttr = setUserAttr;
|
|
57
54
|
exports.shortTime = shortTime;
|
|
58
55
|
exports.size = size;
|
|
@@ -91,16 +88,6 @@ function convoOfEv(ev) {
|
|
|
91
88
|
function convoToEv(convoid, ev) {
|
|
92
89
|
if (!ev) return '';
|
|
93
90
|
switch (ev.type) {
|
|
94
|
-
case 'conversation_state_updated':
|
|
95
|
-
case 'conversation_joined':
|
|
96
|
-
case 'conversation_invited':
|
|
97
|
-
case 'conversation_left':
|
|
98
|
-
case 'conversation_tagged':
|
|
99
|
-
case 'conversation_untagged':
|
|
100
|
-
case 'conversation_typing':
|
|
101
|
-
case 'conversation_rating_requested':
|
|
102
|
-
case 'conversation_rated':
|
|
103
|
-
return op.set(ev, 'data.conversation.id', convoid);
|
|
104
91
|
case 'message_sent':
|
|
105
92
|
case 'message_updated':
|
|
106
93
|
case 'message_pong':
|
|
@@ -108,27 +95,9 @@ function convoToEv(convoid, ev) {
|
|
|
108
95
|
case 'ticket_updated':
|
|
109
96
|
return op.set(ev, 'data.ticket.conversation_id', convoid);
|
|
110
97
|
default:
|
|
111
|
-
return '';
|
|
98
|
+
return op.set(ev, 'data.conversation.id', convoid);
|
|
112
99
|
}
|
|
113
100
|
}
|
|
114
|
-
function setMsgField(ev, key, value) {
|
|
115
|
-
var fields = op.get(ev, 'data.message.fields') || [];
|
|
116
|
-
fields = filter(fields, field => field.key !== key);
|
|
117
|
-
fields.push({
|
|
118
|
-
key: key,
|
|
119
|
-
value: stringify(value)
|
|
120
|
-
});
|
|
121
|
-
op.set(ev, 'data.message.fields', fields);
|
|
122
|
-
}
|
|
123
|
-
function getMsgField(ev, fieldName) {
|
|
124
|
-
var fields = op.get(ev, 'data.message.fields');
|
|
125
|
-
if (size(fields) === 0) return undefined;
|
|
126
|
-
let f = fields.find(f => f.key === fieldName);
|
|
127
|
-
try {
|
|
128
|
-
if (f) return parse(f.value);
|
|
129
|
-
return undefined;
|
|
130
|
-
} catch (e) {}
|
|
131
|
-
}
|
|
132
101
|
function isObject(item) {
|
|
133
102
|
return item && typeof item === 'object' && !Array.isArray(item);
|
|
134
103
|
}
|
|
@@ -975,7 +944,7 @@ function replaceFileUrl(src) {
|
|
|
975
944
|
}
|
|
976
945
|
function unicodeToAscii(str) {
|
|
977
946
|
str = str + '';
|
|
978
|
-
str = str.
|
|
947
|
+
str = str.replaceAll('đ', 'd').replaceAll('Đ', 'D');
|
|
979
948
|
return str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
980
949
|
}
|
|
981
950
|
function scrollIntoViewIfNeeded($ele) {
|
package/dist/127.js
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(self["webpackChunk_subiz_widget_v4"] = self["webpackChunk_subiz_widget_v4"] || []).push([[127],{
|
|
3
|
+
|
|
4
|
+
/***/ 6127:
|
|
5
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
6
|
+
|
|
7
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
9
|
+
/* harmony export */ "default": () => (/* binding */ ProductAttachments)
|
|
10
|
+
/* harmony export */ });
|
|
11
|
+
/* harmony import */ var _util_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6801);
|
|
12
|
+
/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2840);
|
|
13
|
+
/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(172);
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ProductAttachments extends _common_js__WEBPACK_IMPORTED_MODULE_1__/* .Com */ .Mw {
|
|
18
|
+
render() {
|
|
19
|
+
let byType = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(this.props.ev, 'by.type');
|
|
20
|
+
if (byType === 'user') return null;
|
|
21
|
+
let acc = this.props.store.matchAccount();
|
|
22
|
+
var attachments = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(this.props.ev, 'data.message.attachments', []);
|
|
23
|
+
let orders = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.filter(attachments, att => att.type === 'order' && att.order).map(att => att.order);
|
|
24
|
+
if (orders.length === 0) return null;
|
|
25
|
+
let $orders = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.map(orders, (order, index) => {
|
|
26
|
+
calcOrderTotal(order);
|
|
27
|
+
let $note = null;
|
|
28
|
+
if (order.note) {
|
|
29
|
+
$note = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
30
|
+
class: "order_attachment__label"
|
|
31
|
+
}, this.props.t('note')), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
32
|
+
class: "order_attachment__note",
|
|
33
|
+
title: order.note
|
|
34
|
+
}, order.note));
|
|
35
|
+
}
|
|
36
|
+
let $products = null;
|
|
37
|
+
if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.size(order.items) > 0) {
|
|
38
|
+
$products = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
39
|
+
class: "order_attachment__label"
|
|
40
|
+
}, this.props.t('product')), _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.map(order.items, item => {
|
|
41
|
+
let product = item.product || {};
|
|
42
|
+
return (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
43
|
+
class: "order_attachment__product"
|
|
44
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("img", {
|
|
45
|
+
class: "order_attachment__product_img",
|
|
46
|
+
alt: '' + _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(product, 'id'),
|
|
47
|
+
src: _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(product, 'image', __webpack_require__(2876))
|
|
48
|
+
}), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
49
|
+
style: "overflow: hidden !important;"
|
|
50
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
51
|
+
class: "order_attachment__product_name",
|
|
52
|
+
title: this.props.t.i18n(product.i18n_name) || product.name
|
|
53
|
+
}, this.props.t.i18n(product.i18n_name) || product.name), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
54
|
+
class: "order_attachment__product_desc"
|
|
55
|
+
}, getProductPropName(product, ' / ')), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
56
|
+
class: "order_attachment__product_desc"
|
|
57
|
+
}, this.props.t('qty'), " ", item.quantity, "\xA0\xB7\xA0", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(product.price))));
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
let $total = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
61
|
+
class: "order_attachment__footer"
|
|
62
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
63
|
+
class: "d-flex align-items-center justify-content-between"
|
|
64
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, this.props.t('total')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("b", {
|
|
65
|
+
class: "order_attachment__total"
|
|
66
|
+
}, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.total)))));
|
|
67
|
+
let phoneattr = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.find(_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'user.attributes', []), attr => attr.key === 'phones') || {
|
|
68
|
+
key: 'phones',
|
|
69
|
+
text: ''
|
|
70
|
+
};
|
|
71
|
+
let phone = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'shipping.address.phone', '').trim();
|
|
72
|
+
phone = phone || _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.trim(phoneattr.text);
|
|
73
|
+
if (phone) phone = this.props.t('phn') + ': ' + phone;
|
|
74
|
+
let $shipto = null;
|
|
75
|
+
if (displayOrderShippingAddress(order) || phone) {
|
|
76
|
+
$shipto = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
77
|
+
class: "order_attachment__label"
|
|
78
|
+
}, this.props.t('ship_to')), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, displayOrderShippingAddress(order)), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
79
|
+
class: "order_attachment__text_truncate"
|
|
80
|
+
}, phone));
|
|
81
|
+
}
|
|
82
|
+
let $beforeTax = null;
|
|
83
|
+
if (order._discount_before_tax) {
|
|
84
|
+
$beforeTax = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
85
|
+
class: "order_attachment__footer"
|
|
86
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
87
|
+
class: "d-flex align-items-center justify-content-between"
|
|
88
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
89
|
+
class: "order_attachment__label no_margin"
|
|
90
|
+
}, this.props.t('subtotal_before_tax')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._order_value))), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
91
|
+
class: "d-flex align-items-center justify-content-between"
|
|
92
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
93
|
+
class: "order_attachment__label no_margin"
|
|
94
|
+
}, this.props.t('discount_before_tax')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, "-", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._discount_before_tax))));
|
|
95
|
+
}
|
|
96
|
+
let $subtotal = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
97
|
+
class: "d-flex align-items-center justify-content-between"
|
|
98
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
99
|
+
class: "order_attachment__label no_margin"
|
|
100
|
+
}, this.props.t('subtotal')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
101
|
+
style: ""
|
|
102
|
+
}, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.subtotal)));
|
|
103
|
+
let $tax = null;
|
|
104
|
+
if (order.total_tax) {
|
|
105
|
+
let taxname = '';
|
|
106
|
+
if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.size(order._taxM) === 1) {
|
|
107
|
+
let tax = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order._taxM, '0.tax', {});
|
|
108
|
+
if (tax.name && tax.percentage) taxname = `(${tax.name} ${Math.round(tax.percentage || 0) / 100}%)`;
|
|
109
|
+
}
|
|
110
|
+
$tax = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
111
|
+
class: "d-flex align-items-center justify-content-between"
|
|
112
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
113
|
+
class: "order_attachment__label no_margin"
|
|
114
|
+
}, this.props.t('tax'), " ", taxname), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
115
|
+
style: ""
|
|
116
|
+
}, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.total_tax)));
|
|
117
|
+
}
|
|
118
|
+
let $discount = null;
|
|
119
|
+
if (order.discount_type === 'percentage' && order.discount_percentage) {
|
|
120
|
+
$discount = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
121
|
+
class: "d-flex align-items-center justify-content-between"
|
|
122
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
123
|
+
class: "order_attachment__label no_margin"
|
|
124
|
+
}, this.props.t('discount_after_tax'), " (", Math.round(order.discount_percentage / 100), "%)"), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
125
|
+
style: ""
|
|
126
|
+
}, "-", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._computed_discount)));
|
|
127
|
+
}
|
|
128
|
+
if (order.discount_type === 'amount' && order.discount_amount) {
|
|
129
|
+
$discount = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
130
|
+
class: "d-flex align-items-center justify-content-between"
|
|
131
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
132
|
+
class: "order_attachment__label no_margin"
|
|
133
|
+
}, this.props.t('discount_after_tax')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
134
|
+
class: "no-shrink"
|
|
135
|
+
}, "-", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._computed_discount)));
|
|
136
|
+
}
|
|
137
|
+
let $shipping = null;
|
|
138
|
+
if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'shipping.nominal_fee')) {
|
|
139
|
+
$shipping = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
140
|
+
class: "d-flex align-items-center justify-content-between"
|
|
141
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
142
|
+
class: "order_attachment__label no_margin"
|
|
143
|
+
}, this.props.t('shipping_fee')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
144
|
+
style: ""
|
|
145
|
+
}, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'shipping.nominal_fee', 0))));
|
|
146
|
+
}
|
|
147
|
+
let $adjustment = null;
|
|
148
|
+
if (order.adjustment) {
|
|
149
|
+
$adjustment = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
150
|
+
class: "d-flex align-items-center justify-content-between"
|
|
151
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
152
|
+
class: "order_attachment__label no_margin"
|
|
153
|
+
}, order.adjustment_description), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
154
|
+
class: "no-shrink"
|
|
155
|
+
}, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.adjustment)));
|
|
156
|
+
}
|
|
157
|
+
$subtotal = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
158
|
+
class: "order_attachment__footer"
|
|
159
|
+
}, $subtotal, $tax, $shipping, $discount, $adjustment);
|
|
160
|
+
if (!$shipping && !$adjustment && !$discount && !$tax) {
|
|
161
|
+
$subtotal = null;
|
|
162
|
+
}
|
|
163
|
+
return (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
164
|
+
class: `order_attachment order_attachment__${byType}`
|
|
165
|
+
}, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
|
|
166
|
+
class: "order_attachment__header"
|
|
167
|
+
}, this.props.t('order'), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("span", {
|
|
168
|
+
class: "order_attachment__text_muted order_attachment__text_sm"
|
|
169
|
+
}, getOrderDisplayName(order))), $products, $shipto, $note, $beforeTax, $subtotal, $total);
|
|
170
|
+
});
|
|
171
|
+
return $orders;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function getProductPropName(product, seperator = ' - ') {
|
|
175
|
+
let options = op.get(product, 'options', []);
|
|
176
|
+
let props = op.get(product, 'props', []);
|
|
177
|
+
let multiPropsOptions = op.filter(options, option => op.size(option.values) > 1);
|
|
178
|
+
let names = [];
|
|
179
|
+
op.each(multiPropsOptions, option => {
|
|
180
|
+
let prop = op.find(props, prop => prop.key === option.key) || {};
|
|
181
|
+
if (prop.value) names.push(prop.value);
|
|
182
|
+
});
|
|
183
|
+
return names.join(seperator);
|
|
184
|
+
}
|
|
185
|
+
function getOrderDisplayName(order = {}) {
|
|
186
|
+
return order.number || order.id || '';
|
|
187
|
+
}
|
|
188
|
+
function displayOrderShippingAddress(order, isShorten) {
|
|
189
|
+
let addr = op.get(order, 'shipping.address', {});
|
|
190
|
+
let fulladdr = [addr.address, addr.ward, addr.district, addr.province].filter(a => a).join(', ').trim();
|
|
191
|
+
if (isShorten) fulladdr = shortenAddr(fulladdr);
|
|
192
|
+
return fulladdr;
|
|
193
|
+
}
|
|
194
|
+
function shortenAddr(str) {
|
|
195
|
+
str = str || '';
|
|
196
|
+
str = str.replace(/Hà Nội/gi, 'HN');
|
|
197
|
+
str = str.replace(/Hồ Chí Minh/gi, 'HCM');
|
|
198
|
+
str = str.replace(/Thành Phố/gi, 'TP');
|
|
199
|
+
return str;
|
|
200
|
+
}
|
|
201
|
+
function calcOrderTotal(order) {
|
|
202
|
+
let subtotal = 0;
|
|
203
|
+
let beforeTaxDiscount = 0;
|
|
204
|
+
let ordervalue = 0;
|
|
205
|
+
op.map(order.items, item => {
|
|
206
|
+
if (!item.product) return 0;
|
|
207
|
+
let price = op.get(item, 'product.price', 0) * (item.quantity || 0);
|
|
208
|
+
ordervalue += price;
|
|
209
|
+
if (item.discount_type == 'percentage') {
|
|
210
|
+
if (item.discount_percentage > 0) {
|
|
211
|
+
beforeTaxDiscount += price * item.discount_percentage / 10000;
|
|
212
|
+
price = price * (1 - (item.discount_percentage || 0) / 10000);
|
|
213
|
+
}
|
|
214
|
+
} else if (item.discount_type == 'amount') {
|
|
215
|
+
if (item.discount_amount > 0) {
|
|
216
|
+
beforeTaxDiscount += item.discount_amount;
|
|
217
|
+
price = price - (item.discount_amount || 0);
|
|
218
|
+
if (price <= 0) price = 0;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
item.total = price;
|
|
222
|
+
subtotal += price;
|
|
223
|
+
});
|
|
224
|
+
let taxM = {};
|
|
225
|
+
op.map(order.items, (item, i) => {
|
|
226
|
+
if (!item.product) return;
|
|
227
|
+
let tax = item.product.tax;
|
|
228
|
+
if (!tax) return;
|
|
229
|
+
if (!tax.id) return;
|
|
230
|
+
let taxprice = item.total * tax.percentage / 10000;
|
|
231
|
+
item.total_tax = taxprice;
|
|
232
|
+
taxM[i] = {
|
|
233
|
+
tax: tax,
|
|
234
|
+
taxprice: taxprice
|
|
235
|
+
};
|
|
236
|
+
});
|
|
237
|
+
let totaltax = 0;
|
|
238
|
+
op.map(taxM, t => totaltax += t.taxprice);
|
|
239
|
+
let computed_discount = 0;
|
|
240
|
+
if (order.discount_type == 'percentage' && order.discount_percentage > 0) {
|
|
241
|
+
computed_discount = (subtotal + totaltax) * order.discount_percentage / 10000;
|
|
242
|
+
} else if (order.discount_type == 'amount') {
|
|
243
|
+
computed_discount = order.discount_amount || 0;
|
|
244
|
+
}
|
|
245
|
+
let shippingfee = op.get(order, 'shipping.nominal_fee', 0);
|
|
246
|
+
if (shippingfee > 0) {
|
|
247
|
+
if (op.get(order, 'shipping.tax.id')) {
|
|
248
|
+
let tax = order.shipping.tax;
|
|
249
|
+
let taxprice = shippingfee * (tax.percentage / 10000);
|
|
250
|
+
taxM['ship'] = {
|
|
251
|
+
tax: tax,
|
|
252
|
+
taxprice: taxprice
|
|
253
|
+
};
|
|
254
|
+
order.shipping.total_tax = taxprice;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
totaltax = 0;
|
|
258
|
+
op.map(taxM, t => totaltax += t.taxprice);
|
|
259
|
+
let total = subtotal + totaltax - computed_discount + shippingfee;
|
|
260
|
+
total += order.adjustment || 0;
|
|
261
|
+
if (total < 0) total = 0;
|
|
262
|
+
order.subtotal = subtotal;
|
|
263
|
+
order._computed_discount = computed_discount;
|
|
264
|
+
order._taxM = taxM;
|
|
265
|
+
order.total = total;
|
|
266
|
+
order.total_tax = totaltax;
|
|
267
|
+
order._discount_before_tax = beforeTaxDiscount;
|
|
268
|
+
order._order_value = ordervalue;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/***/ })
|
|
272
|
+
|
|
273
|
+
}]);
|