@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.
Files changed (102) hide show
  1. package/compiled_src/chatbox/Event.js +2 -2
  2. package/compiled_src/chatbox/Events.js +1 -1
  3. package/compiled_src/store/api_fake.js +26 -54
  4. package/compiled_src/store/store.js +3 -3
  5. package/compiled_src/util/common.js +3 -34
  6. package/dist/127.js +273 -0
  7. package/dist/132.js +2796 -0
  8. package/dist/185.js +1885 -0
  9. package/dist/18f3763d12b.127.js +1 -0
  10. package/dist/18f3763d12b.132.js +1 -0
  11. package/dist/18f3763d12b.185.js +1 -0
  12. package/dist/18f3763d12b.27.js +1 -0
  13. package/dist/18f3763d12b.278.js +1 -0
  14. package/dist/18f3763d12b.459.js +1 -0
  15. package/dist/18f3763d12b.490.js +1 -0
  16. package/dist/18f3763d12b.74.js +1 -0
  17. package/dist/18f3763d12b.997.js +1 -0
  18. package/dist/18f3763d12b.app.js +1 -0
  19. package/dist/18f3763d12b.index.html +33 -0
  20. package/dist/18f3763d12b.library.html +33 -0
  21. package/dist/18f3763d12b.library.js +1 -0
  22. package/dist/18f3763d12b.preview.html +759 -0
  23. package/dist/18f3763d12b.preview.js +1 -0
  24. package/dist/18f3763d12b.screenshoot.js +1 -0
  25. package/dist/18f3763d12b.webview.js +1 -0
  26. package/dist/27.js +107 -0
  27. package/dist/278.js +406 -0
  28. package/dist/459.js +107 -0
  29. package/dist/490.js +304 -0
  30. package/dist/74.js +372 -0
  31. package/dist/997.js +107 -0
  32. package/dist/HASH +1 -0
  33. package/dist/assets/img/Facebook.64607ec.png +0 -0
  34. package/dist/assets/img/Zalo.6845707.png +0 -0
  35. package/dist/assets/img/award1a.1a58e10.png +0 -0
  36. package/dist/assets/img/award3a.3b74423.png +0 -0
  37. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  38. package/dist/assets/img/award5.39eb7ae.png +0 -0
  39. package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
  40. package/dist/assets/img/caret.998eb8f.svg +1 -0
  41. package/dist/assets/img/convos_empty.2353007.svg +72 -0
  42. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  43. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  44. package/dist/assets/img/done_gray.d7e8203.svg +4 -0
  45. package/dist/assets/img/done_green.b817fd4.svg +4 -0
  46. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  47. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  48. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  49. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  50. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  51. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  52. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  53. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  54. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  55. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  56. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  57. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  67. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  68. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  69. package/dist/assets/img/empty.29bed2d.svg +23 -0
  70. package/dist/assets/img/empty_1.0b98af0.svg +11 -0
  71. package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
  72. package/dist/assets/img/external-link.90577cc.svg +1 -0
  73. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  74. package/dist/assets/img/ghn.070f8e3.svg +17 -0
  75. package/dist/assets/img/ghtk.326eac1.svg +18 -0
  76. package/dist/assets/img/image_default.be0698b.png +0 -0
  77. package/dist/assets/img/info.ebce7ea.svg +1 -0
  78. package/dist/assets/img/loader.37000a7.svg +1 -0
  79. package/dist/assets/img/loading_static.a27f0ac.svg +10 -0
  80. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  81. package/dist/assets/img/main-service2.9b99549.png +0 -0
  82. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  83. package/dist/assets/img/package.8d37d0f.svg +5 -0
  84. package/dist/assets/img/package_fade.763c001.svg +1 -0
  85. package/dist/assets/img/rating--average.1ea492c.svg +12 -0
  86. package/dist/assets/img/rating--great.e3d712e.svg +16 -0
  87. package/dist/assets/img/rating--poor.2938a25.svg +12 -0
  88. package/dist/assets/img/search.f9705ff.svg +1 -0
  89. package/dist/assets/img/send.6db52a9.svg +3 -0
  90. package/dist/assets/img/shop.f7dc7d8.svg +1 -0
  91. package/dist/assets/img/shop_faded.df7845a.svg +1 -0
  92. package/dist/assets/img/subiz-mono.877e9f5.svg +3 -0
  93. package/dist/assets/img/x.26fdfa3.svg +5 -0
  94. package/dist/malicious-app.js +15 -0
  95. package/dist/screenshoot.html +7 -0
  96. package/dist/screenshoot.js +10423 -0
  97. package/package.json +6 -6
  98. package/src/chatbox/Event.js +2 -2
  99. package/src/chatbox/Events.js +2 -1
  100. package/src/store/api_fake.js +22 -63
  101. package/src/store/store.js +3 -3
  102. 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.getMsgField(ev, 'idempotency') === ev.id && this.props.store.now() - ev.created < 900) {
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.getMsgField(ev, 'idempotency') !== ev.id) {
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.getMsgField(newev, 'idempotency')) byme = true;
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
- fields: [{
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 === _index.default.getMsgField(lastmsgsent, 'idempotency')) return;
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.getMsgField(ev, 'idempotency');
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
- _index.default.setMsgField(event, 'idempotency', idempotency);
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.replace('đ', 'd').replace('Đ', 'D');
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
+ }]);