@subiz/widget-v4 4.1.80 → 4.1.82

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 (104) hide show
  1. package/compiled_src/bot.js +1 -1
  2. package/compiled_src/call/call.js +2 -2
  3. package/compiled_src/chatbox/AgentsAvatar.js +1 -1
  4. package/compiled_src/chatbox/AudioAttachments.js +1 -1
  5. package/compiled_src/chatbox/ButtonAttachments.js +1 -1
  6. package/compiled_src/chatbox/Buttons.js +1 -1
  7. package/compiled_src/chatbox/ChatButton.js +1 -1
  8. package/compiled_src/chatbox/DropdownSelect.js +2 -2
  9. package/compiled_src/chatbox/Emoji.js +1 -1
  10. package/compiled_src/chatbox/Event.js +1 -1
  11. package/compiled_src/chatbox/Events.js +1 -1
  12. package/compiled_src/chatbox/FileAttachments.js +1 -1
  13. package/compiled_src/chatbox/FormAttachment.js +1 -1
  14. package/compiled_src/chatbox/FormAttachments.js +1 -1
  15. package/compiled_src/chatbox/FormSubmitAttachments.js +1 -1
  16. package/compiled_src/chatbox/GenericTemplateAttachments.js +1 -1
  17. package/compiled_src/chatbox/Header.js +1 -1
  18. package/compiled_src/chatbox/ImageAttachments.js +2 -2
  19. package/compiled_src/chatbox/InfoMessage.js +1 -1
  20. package/compiled_src/chatbox/ListField.js +1 -1
  21. package/compiled_src/chatbox/MessageInput.js +2 -2
  22. package/compiled_src/chatbox/Order.js +2 -2
  23. package/compiled_src/chatbox/OrderAttachments.js +1 -1
  24. package/compiled_src/chatbox/ProductAttachments.js +1 -1
  25. package/compiled_src/chatbox/QuickReplies.js +1 -1
  26. package/compiled_src/chatbox/Rating.js +2 -2
  27. package/compiled_src/chatbox/TextMessage.js +1 -1
  28. package/compiled_src/chatbox/Typing.js +17 -2
  29. package/compiled_src/chatbox/VideoAttachments.js +1 -1
  30. package/compiled_src/chatbox/Widget.js +37 -9
  31. package/compiled_src/chatbox/main.js +4 -1
  32. package/compiled_src/chatbox/releaseAnimation.js +1 -1
  33. package/compiled_src/chatbox/time.js +1 -1
  34. package/compiled_src/common.js +1 -1
  35. package/compiled_src/contact/contact.js +2 -2
  36. package/compiled_src/lib.js +6 -2
  37. package/compiled_src/notif/notif.js +2 -2
  38. package/compiled_src/order/address_picker.js +2 -2
  39. package/compiled_src/order/icon.js +1 -1
  40. package/compiled_src/order/index.js +1 -1
  41. package/compiled_src/order/order.js +2 -2
  42. package/compiled_src/plugin.js +5 -1
  43. package/compiled_src/popup/countdown.js +2 -2
  44. package/compiled_src/popup/popup.js +2 -2
  45. package/compiled_src/popup/tick.core.commonjs.js +1 -1
  46. package/compiled_src/store/api.js +2 -2
  47. package/compiled_src/store/api_fake.js +2 -2
  48. package/compiled_src/store/store.js +8 -5
  49. package/dist/132.js +6433 -2568
  50. package/dist/178.js +406 -0
  51. package/dist/18a02a9c54e.132.js +1 -0
  52. package/dist/18a02a9c54e.178.js +1 -0
  53. package/dist/18a02a9c54e.213.js +1 -0
  54. package/dist/18a02a9c54e.335.js +1 -0
  55. package/dist/18a02a9c54e.362.js +1 -0
  56. package/dist/18a02a9c54e.441.js +1 -0
  57. package/dist/18a02a9c54e.605.js +1 -0
  58. package/dist/18a02a9c54e.678.js +1 -0
  59. package/dist/18a02a9c54e.782.js +1 -0
  60. package/dist/18a02a9c54e.app.js +1 -0
  61. package/dist/{18ffe1df25b.index.html → 18a02a9c54e.index.html} +4 -4
  62. package/dist/{18ffe1df25b.library.html → 18a02a9c54e.library.html} +4 -4
  63. package/dist/18a02a9c54e.library.js +1 -0
  64. package/dist/{18ffe1df25b.preview.html → 18a02a9c54e.preview.html} +1 -1
  65. package/dist/18a02a9c54e.preview.js +1 -0
  66. package/dist/18a02a9c54e.screenshoot.js +1 -0
  67. package/dist/18a02a9c54e.webview.js +1 -0
  68. package/dist/213.js +2780 -0
  69. package/dist/{74.js → 335.js} +35 -35
  70. package/dist/{459.js → 362.js} +7 -7
  71. package/dist/441.js +2855 -0
  72. package/dist/{490.js → 605.js} +61 -60
  73. package/dist/{997.js → 678.js} +6 -6
  74. package/dist/{27.js → 782.js} +7 -7
  75. package/dist/HASH +1 -1
  76. package/dist/malicious-app.js +4 -6
  77. package/dist/screenshoot.html +1 -1
  78. package/dist/screenshoot.js +1604 -5585
  79. package/loader.js +1 -1
  80. package/old.md +1 -0
  81. package/package.json +1 -1
  82. package/src/chatbox/Typing.js +13 -1
  83. package/src/chatbox/Widget.js +40 -7
  84. package/src/chatbox/main.js +4 -0
  85. package/src/lib.js +5 -0
  86. package/src/plugin.js +5 -0
  87. package/src/store/store.js +6 -3
  88. package/dist/127.js +0 -273
  89. package/dist/185.js +0 -1885
  90. package/dist/18ffe1df25b.127.js +0 -1
  91. package/dist/18ffe1df25b.132.js +0 -1
  92. package/dist/18ffe1df25b.185.js +0 -1
  93. package/dist/18ffe1df25b.27.js +0 -1
  94. package/dist/18ffe1df25b.278.js +0 -1
  95. package/dist/18ffe1df25b.459.js +0 -1
  96. package/dist/18ffe1df25b.490.js +0 -1
  97. package/dist/18ffe1df25b.74.js +0 -1
  98. package/dist/18ffe1df25b.997.js +0 -1
  99. package/dist/18ffe1df25b.app.js +0 -1
  100. package/dist/18ffe1df25b.library.js +0 -1
  101. package/dist/18ffe1df25b.preview.js +0 -1
  102. package/dist/18ffe1df25b.screenshoot.js +0 -1
  103. package/dist/18ffe1df25b.webview.js +0 -1
  104. package/dist/278.js +0 -406
package/loader.js CHANGED
@@ -44,7 +44,7 @@ subizc2oasp.com
44
44
  }
45
45
 
46
46
  // we will try to inject the loader script the client site
47
- // the first domain to try is: https://subiz.xyz/sbz/app.js?accid=34234234
47
+ // the first domain to try is: https://widget.subiz.net/sbz/app.js?accid=34234234
48
48
  // if fail, try https://storage.googleapis.com/sbz/api.js?accid=34234234.
49
49
  // If fail again, try sbz-65.com, sbz-95.comc, sbz-140.com and sbz-205.com.
50
50
  // If all of those domains failed, we give up
package/old.md ADDED
@@ -0,0 +1 @@
1
+ <script type="text/javascript">var subiz_account_id = "4216";(function() { var sbz = document.createElement("script"); sbz.type = "text/javascript"; sbz.async = true; sbz.src = ("https:" == document.location.protocol ? "https://" : "http://") + "widget.subiz.com/static/js/loader.js?v="+ (new Date()).getFullYear() + ("0" + ((new Date()).getMonth() + 1)).slice(-2) + ("0" + (new Date()).getDate()).slice(-2); var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(sbz, s);})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subiz/widget-v4",
3
- "version": "4.1.80",
3
+ "version": "4.1.82",
4
4
  "main": "./compiled_src/lib.js",
5
5
  "scripts": {
6
6
  "dev": "npx webpack serve --config webpack.dev.js",
@@ -32,7 +32,7 @@ export default class Typing extends Com {
32
32
  if (sb.get(ev, 'type') !== 'conversation_typing') return
33
33
  // dont show typing of agent, some agent dont like this
34
34
  let ag = this.props.store.matchAgent(sb.get(ev, 'by.id')) || {}
35
- if (ag.type == 'agent') return
35
+ if (ag.type == 'agent' && !sb.get(this.props.plugin, 'chatbox.show_agent_typing')) return
36
36
  this.setState({ev: ev, isShow: true})
37
37
  if (this.timer) sb.clearTimeout(this.timer)
38
38
  this.timer = sb.setTimeout(() => {
@@ -44,11 +44,23 @@ export default class Typing extends Com {
44
44
  })
45
45
  }
46
46
 
47
+ ShowTyping() {
48
+ this.setState({isShow: true})
49
+ if (this.timer) sb.clearTimeout(this.timer)
50
+ this.timer = sb.setTimeout(() => {
51
+ this.timer = null
52
+ this.setState({isShow: false})
53
+ }, 5000)
54
+ }
55
+
47
56
  render() {
48
57
  let account = this.props.store.matchAccount()
49
58
  var cls = this.state.isShow ? '' : 'typing--hidden'
50
59
  let byid = sb.get(this.state.ev, 'by.display_id', sb.get(this.state.ev, 'by.id'))
51
60
  let agentName = sb.getAgentDisplayName(account, this.props.store.matchAgent(byid))
61
+ if (sb.get(this.props.plugin, 'chatbox.hide_agent_profile')) {
62
+ agentName = sb.get(account, 'name')
63
+ }
52
64
  return (
53
65
  <div class={`typing ${cls}`}>
54
66
  {agentName} {this.props.t('typing')}
@@ -40,6 +40,7 @@ export default class Widget extends Com {
40
40
  })
41
41
 
42
42
  this.props.store.onUpdate(this, (_) => this.forceUpdate())
43
+ this.refTyping = createRef()
43
44
  }
44
45
 
45
46
  msgInput = createRef()
@@ -71,6 +72,10 @@ export default class Widget extends Com {
71
72
  // this.updateFormDataFields()
72
73
  }
73
74
 
75
+ ShowTyping() {
76
+ this.refTyping.current && this.refTyping.current.ShowTyping()
77
+ }
78
+
74
79
  shouldShowForm() {
75
80
  // always show form when ask agentgroup
76
81
  let form
@@ -158,14 +163,36 @@ export default class Widget extends Com {
158
163
  hasError = true
159
164
  } else field.error = ''
160
165
 
161
- if (key.substr(5) === 'emails' && !sb.isEmail(field.value) && field.is_required) {
162
- field.error = this.props.t('error_email_invalid') // 'The email is not valid'
163
- hasError = true
166
+ if (key.substr(5) === 'emails') {
167
+ if (field.is_required) {
168
+ if (!sb.isEmail(field.value)) {
169
+ field.error = this.props.t('error_email_invalid') // 'The email is not valid'
170
+ hasError = true
171
+ }
172
+ } else {
173
+ let value = field.value || ''
174
+ if (typeof value !== 'string') value = value + '' // try to makesure use ''.trim doesnt errror
175
+ if (value.trim() && !sb.isEmail(field.value)) {
176
+ field.error = this.props.t('error_email_invalid') // 'The email is not valid'
177
+ hasError = true
178
+ }
179
+ }
164
180
  }
165
181
 
166
- if (key.substr(5) === 'phones' && !sb.isPhone(field.value) && field.is_required) {
167
- field.error = this.props.t('error_phone_invalid') // 'Phone number is not valid'
168
- hasError = true
182
+ if (key.substr(5) === 'phones') {
183
+ if (field.is_required) {
184
+ if (!sb.isPhone(field.value)) {
185
+ field.error = this.props.t('error_phone_invalid') // 'The email is not valid'
186
+ hasError = true
187
+ }
188
+ } else {
189
+ let value = field.value || ''
190
+ if (typeof value !== 'string') value = value + '' // try to makesure use ''.trim doesnt errror
191
+ if (value.trim() && !sb.isPhone(field.value)) {
192
+ field.error = this.props.t('error_phone_invalid') // 'The email is not valid'
193
+ hasError = true
194
+ }
195
+ }
169
196
  }
170
197
  })
171
198
  if (hasError) return this.forceUpdate()
@@ -786,7 +813,13 @@ export default class Widget extends Com {
786
813
  onPostback={(e) => this.createPostback(e)}
787
814
  t={this.props.t}
788
815
  />
789
- <Typing store={this.props.store} cid={this.props.cid} t={this.props.t} />
816
+ <Typing
817
+ store={this.props.store}
818
+ cid={this.props.cid}
819
+ t={this.props.t}
820
+ plugin={this.props.plugin}
821
+ ref={this.refTyping}
822
+ />
790
823
  </div>
791
824
  <Rating
792
825
  forceView={this.props.view}
@@ -176,6 +176,10 @@ export default class Main extends Com {
176
176
  this.refButton.current && this.refButton.current.HideGreeting()
177
177
  }
178
178
 
179
+ showTyping() {
180
+ this.refWidget.current && this.refWidget.current.ShowTyping()
181
+ }
182
+
179
183
  hideWidget() {
180
184
  restoreViewport()
181
185
  this.props.store.setIsOpen(false)
package/src/lib.js CHANGED
@@ -202,6 +202,11 @@ class Widget {
202
202
  this.pluginMgr.showCurrentChatbox({view, cid: cid})
203
203
  }
204
204
 
205
+ async showTyping() {
206
+ await this.domGate.entry()
207
+ this.pluginMgr.showCurrentChatboxTyping()
208
+ }
209
+
205
210
  async hideWidget() {
206
211
  await this.domGate.entry()
207
212
  this.pluginMgr.hideCurrentChatbox()
package/src/plugin.js CHANGED
@@ -293,6 +293,11 @@ export default class PluginMgr {
293
293
  if (chatbox) return chatbox.call('showWidget', p)
294
294
  }
295
295
 
296
+ showCurrentChatboxTyping() {
297
+ let chatbox = this.findChatbox()
298
+ if (chatbox) return chatbox.call('showTyping')
299
+ }
300
+
296
301
  showCurrentGreeting() {
297
302
  let chatbox = this.findChatbox()
298
303
  if (chatbox) return chatbox.call('showGreeting')
@@ -202,15 +202,18 @@ export default class Store {
202
202
  }
203
203
 
204
204
  isMobile() {
205
- return this.forceDevice === 'mobile' || this.device_type == 'mobile'
205
+ if (this.forceDevice) return this.forceDevice === 'mobile'
206
+ return this.device_type == 'mobile' || sb.get(window, 'screen.width', 1000) < 576
206
207
  }
207
208
 
208
209
  isTablet() {
209
- return this.forceDevice === 'tablet' || this.device_type == 'tablet'
210
+ if (this.forceDevice) return this.forceDevice === 'tablet'
211
+ return this.device_type == 'tablet'
210
212
  }
211
213
 
212
214
  isDesktop() {
213
- return this.forceDevice === 'desktop' || (!this.isMobile() && !this.isTable())
215
+ if (this.forceDevice) return this.forceDevice === 'desktop'
216
+ return !this.isMobile() && !this.isTable()
214
217
  }
215
218
 
216
219
  disconnect(key) {
package/dist/127.js DELETED
@@ -1,273 +0,0 @@
1
- "use strict";
2
- (self["webpackChunk_subiz_widget_v4"] = self["webpackChunk_subiz_widget_v4"] || []).push([[127],{
3
-
4
- /***/ 6127:
5
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
-
7
- __webpack_require__.r(__webpack_exports__);
8
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9
- /* harmony export */ "default": () => (/* binding */ ProductAttachments)
10
- /* harmony export */ });
11
- /* harmony import */ var _util_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6801);
12
- /* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2840);
13
- /* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(172);
14
-
15
-
16
-
17
- class ProductAttachments extends _common_js__WEBPACK_IMPORTED_MODULE_1__/* .Com */ .Mw {
18
- render() {
19
- let byType = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(this.props.ev, 'by.type');
20
- if (byType === 'user') return null;
21
- let acc = this.props.store.matchAccount();
22
- var attachments = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(this.props.ev, 'data.message.attachments', []);
23
- let orders = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.filter(attachments, att => att.type === 'order' && att.order).map(att => att.order);
24
- if (orders.length === 0) return null;
25
- let $orders = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.map(orders, (order, index) => {
26
- calcOrderTotal(order);
27
- let $note = null;
28
- if (order.note) {
29
- $note = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
30
- class: "order_attachment__label"
31
- }, this.props.t('note')), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
32
- class: "order_attachment__note",
33
- title: order.note
34
- }, order.note));
35
- }
36
- let $products = null;
37
- if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.size(order.items) > 0) {
38
- $products = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
39
- class: "order_attachment__label"
40
- }, this.props.t('product')), _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.map(order.items, item => {
41
- let product = item.product || {};
42
- return (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
43
- class: "order_attachment__product"
44
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("img", {
45
- class: "order_attachment__product_img",
46
- alt: '' + _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(product, 'id'),
47
- src: _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(product, 'image', __webpack_require__(2876))
48
- }), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
49
- style: "overflow: hidden !important;"
50
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
51
- class: "order_attachment__product_name",
52
- title: this.props.t.i18n(product.i18n_name) || product.name
53
- }, this.props.t.i18n(product.i18n_name) || product.name), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
54
- class: "order_attachment__product_desc"
55
- }, getProductPropName(product, ' / ')), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
56
- class: "order_attachment__product_desc"
57
- }, this.props.t('qty'), " ", item.quantity, "\xA0\xB7\xA0", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(product.price))));
58
- }));
59
- }
60
- let $total = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
61
- class: "order_attachment__footer"
62
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
63
- class: "d-flex align-items-center justify-content-between"
64
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, this.props.t('total')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("b", {
65
- class: "order_attachment__total"
66
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.total)))));
67
- let phoneattr = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.find(_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'user.attributes', []), attr => attr.key === 'phones') || {
68
- key: 'phones',
69
- text: ''
70
- };
71
- let phone = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'shipping.address.phone', '').trim();
72
- phone = phone || _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.trim(phoneattr.text);
73
- if (phone) phone = this.props.t('phn') + ': ' + phone;
74
- let $shipto = null;
75
- if (displayOrderShippingAddress(order) || phone) {
76
- $shipto = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
77
- class: "order_attachment__label"
78
- }, this.props.t('ship_to')), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, displayOrderShippingAddress(order)), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
79
- class: "order_attachment__text_truncate"
80
- }, phone));
81
- }
82
- let $beforeTax = null;
83
- if (order._discount_before_tax) {
84
- $beforeTax = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
85
- class: "order_attachment__footer"
86
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
87
- class: "d-flex align-items-center justify-content-between"
88
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
89
- class: "order_attachment__label no_margin"
90
- }, this.props.t('subtotal_before_tax')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._order_value))), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
91
- class: "d-flex align-items-center justify-content-between"
92
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
93
- class: "order_attachment__label no_margin"
94
- }, this.props.t('discount_before_tax')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", null, "-", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._discount_before_tax))));
95
- }
96
- let $subtotal = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
97
- class: "d-flex align-items-center justify-content-between"
98
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
99
- class: "order_attachment__label no_margin"
100
- }, this.props.t('subtotal')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
101
- style: ""
102
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.subtotal)));
103
- let $tax = null;
104
- if (order.total_tax) {
105
- let taxname = '';
106
- if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.size(order._taxM) === 1) {
107
- let tax = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order._taxM, '0.tax', {});
108
- if (tax.name && tax.percentage) taxname = `(${tax.name} ${Math.round(tax.percentage || 0) / 100}%)`;
109
- }
110
- $tax = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
111
- class: "d-flex align-items-center justify-content-between"
112
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
113
- class: "order_attachment__label no_margin"
114
- }, this.props.t('tax'), " ", taxname), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
115
- style: ""
116
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.total_tax)));
117
- }
118
- let $discount = null;
119
- if (order.discount_type === 'percentage' && order.discount_percentage) {
120
- $discount = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
121
- class: "d-flex align-items-center justify-content-between"
122
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
123
- class: "order_attachment__label no_margin"
124
- }, this.props.t('discount_after_tax'), " (", Math.round(order.discount_percentage / 100), "%)"), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
125
- style: ""
126
- }, "-", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._computed_discount)));
127
- }
128
- if (order.discount_type === 'amount' && order.discount_amount) {
129
- $discount = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
130
- class: "d-flex align-items-center justify-content-between"
131
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
132
- class: "order_attachment__label no_margin"
133
- }, this.props.t('discount_after_tax')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
134
- class: "no-shrink"
135
- }, "-", _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order._computed_discount)));
136
- }
137
- let $shipping = null;
138
- if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'shipping.nominal_fee')) {
139
- $shipping = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
140
- class: "d-flex align-items-center justify-content-between"
141
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
142
- class: "order_attachment__label no_margin"
143
- }, this.props.t('shipping_fee')), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
144
- style: ""
145
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(order, 'shipping.nominal_fee', 0))));
146
- }
147
- let $adjustment = null;
148
- if (order.adjustment) {
149
- $adjustment = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
150
- class: "d-flex align-items-center justify-content-between"
151
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
152
- class: "order_attachment__label no_margin"
153
- }, order.adjustment_description), ' ', (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
154
- class: "no-shrink"
155
- }, _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.formatCurrency(order.adjustment)));
156
- }
157
- $subtotal = (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
158
- class: "order_attachment__footer"
159
- }, $subtotal, $tax, $shipping, $discount, $adjustment);
160
- if (!$shipping && !$adjustment && !$discount && !$tax) {
161
- $subtotal = null;
162
- }
163
- return (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
164
- class: `order_attachment order_attachment__${byType}`
165
- }, (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("div", {
166
- class: "order_attachment__header"
167
- }, this.props.t('order'), (0,preact__WEBPACK_IMPORTED_MODULE_2__.h)("span", {
168
- class: "order_attachment__text_muted order_attachment__text_sm"
169
- }, getOrderDisplayName(order))), $products, $shipto, $note, $beforeTax, $subtotal, $total);
170
- });
171
- return $orders;
172
- }
173
- }
174
- function getProductPropName(product, seperator = ' - ') {
175
- let options = op.get(product, 'options', []);
176
- let props = op.get(product, 'props', []);
177
- let multiPropsOptions = op.filter(options, option => op.size(option.values) > 1);
178
- let names = [];
179
- op.each(multiPropsOptions, option => {
180
- let prop = op.find(props, prop => prop.key === option.key) || {};
181
- if (prop.value) names.push(prop.value);
182
- });
183
- return names.join(seperator);
184
- }
185
- function getOrderDisplayName(order = {}) {
186
- return order.number || order.id || '';
187
- }
188
- function displayOrderShippingAddress(order, isShorten) {
189
- let addr = op.get(order, 'shipping.address', {});
190
- let fulladdr = [addr.address, addr.ward, addr.district, addr.province].filter(a => a).join(', ').trim();
191
- if (isShorten) fulladdr = shortenAddr(fulladdr);
192
- return fulladdr;
193
- }
194
- function shortenAddr(str) {
195
- str = str || '';
196
- str = str.replace(/Hà Nội/gi, 'HN');
197
- str = str.replace(/Hồ Chí Minh/gi, 'HCM');
198
- str = str.replace(/Thành Phố/gi, 'TP');
199
- return str;
200
- }
201
- function calcOrderTotal(order) {
202
- let subtotal = 0;
203
- let beforeTaxDiscount = 0;
204
- let ordervalue = 0;
205
- op.map(order.items, item => {
206
- if (!item.product) return 0;
207
- let price = op.get(item, 'product.price', 0) * (item.quantity || 0);
208
- ordervalue += price;
209
- if (item.discount_type == 'percentage') {
210
- if (item.discount_percentage > 0) {
211
- beforeTaxDiscount += price * item.discount_percentage / 10000;
212
- price = price * (1 - (item.discount_percentage || 0) / 10000);
213
- }
214
- } else if (item.discount_type == 'amount') {
215
- if (item.discount_amount > 0) {
216
- beforeTaxDiscount += item.discount_amount;
217
- price = price - (item.discount_amount || 0);
218
- if (price <= 0) price = 0;
219
- }
220
- }
221
- item.total = price;
222
- subtotal += price;
223
- });
224
- let taxM = {};
225
- op.map(order.items, (item, i) => {
226
- if (!item.product) return;
227
- let tax = item.product.tax;
228
- if (!tax) return;
229
- if (!tax.id) return;
230
- let taxprice = item.total * tax.percentage / 10000;
231
- item.total_tax = taxprice;
232
- taxM[i] = {
233
- tax: tax,
234
- taxprice: taxprice
235
- };
236
- });
237
- let totaltax = 0;
238
- op.map(taxM, t => totaltax += t.taxprice);
239
- let computed_discount = 0;
240
- if (order.discount_type == 'percentage' && order.discount_percentage > 0) {
241
- computed_discount = (subtotal + totaltax) * order.discount_percentage / 10000;
242
- } else if (order.discount_type == 'amount') {
243
- computed_discount = order.discount_amount || 0;
244
- }
245
- let shippingfee = op.get(order, 'shipping.nominal_fee', 0);
246
- if (shippingfee > 0) {
247
- if (op.get(order, 'shipping.tax.id')) {
248
- let tax = order.shipping.tax;
249
- let taxprice = shippingfee * (tax.percentage / 10000);
250
- taxM['ship'] = {
251
- tax: tax,
252
- taxprice: taxprice
253
- };
254
- order.shipping.total_tax = taxprice;
255
- }
256
- }
257
- totaltax = 0;
258
- op.map(taxM, t => totaltax += t.taxprice);
259
- let total = subtotal + totaltax - computed_discount + shippingfee;
260
- total += order.adjustment || 0;
261
- if (total < 0) total = 0;
262
- order.subtotal = subtotal;
263
- order._computed_discount = computed_discount;
264
- order._taxM = taxM;
265
- order.total = total;
266
- order.total_tax = totaltax;
267
- order._discount_before_tax = beforeTaxDiscount;
268
- order._order_value = ordervalue;
269
- }
270
-
271
- /***/ })
272
-
273
- }]);