@subiz/widget-v4 4.1.101 → 4.1.103

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 (55) hide show
  1. package/assets/img/subiz-mono.svg +1 -1
  2. package/assets/less/form.less +44 -31
  3. package/assets/less/widget.less +18 -14
  4. package/assets/less/widget_header.less +1 -1
  5. package/compiled_src/chatbox/PoweredBy.js +2 -2
  6. package/compiled_src/chatbox/Widget.js +27 -19
  7. package/dist/132.js +6433 -2568
  8. package/dist/178.js +406 -0
  9. package/dist/18a02a9c54e.132.js +1 -0
  10. package/dist/18a02a9c54e.178.js +1 -0
  11. package/dist/18a02a9c54e.213.js +1 -0
  12. package/dist/18a02a9c54e.335.js +1 -0
  13. package/dist/18a02a9c54e.362.js +1 -0
  14. package/dist/18a02a9c54e.441.js +1 -0
  15. package/dist/18a02a9c54e.605.js +1 -0
  16. package/dist/18a02a9c54e.678.js +1 -0
  17. package/dist/18a02a9c54e.782.js +1 -0
  18. package/dist/18a02a9c54e.app.js +1 -0
  19. package/dist/{191a179639e.index.html → 18a02a9c54e.index.html} +4 -28
  20. package/dist/{191a179639e.library.html → 18a02a9c54e.library.html} +4 -28
  21. package/dist/18a02a9c54e.library.js +1 -0
  22. package/dist/{191a179639e.preview.html → 18a02a9c54e.preview.html} +1 -1
  23. package/dist/18a02a9c54e.preview.js +1 -0
  24. package/dist/18a02a9c54e.screenshoot.js +1 -0
  25. package/dist/18a02a9c54e.webview.js +1 -0
  26. package/dist/213.js +2780 -0
  27. package/dist/{74.js → 335.js} +35 -35
  28. package/dist/{459.js → 362.js} +7 -7
  29. package/dist/441.js +2855 -0
  30. package/dist/{490.js → 605.js} +82 -82
  31. package/dist/{997.js → 678.js} +6 -6
  32. package/dist/{27.js → 782.js} +7 -7
  33. package/dist/HASH +1 -1
  34. package/dist/malicious-app.js +4 -6
  35. package/dist/screenshoot.html +1 -1
  36. package/dist/screenshoot.js +2501 -6728
  37. package/package.json +3 -3
  38. package/src/chatbox/PoweredBy.js +1 -1
  39. package/src/chatbox/Widget.js +28 -19
  40. package/dist/127.js +0 -273
  41. package/dist/185.js +0 -1885
  42. package/dist/191a179639e.127.js +0 -1
  43. package/dist/191a179639e.132.js +0 -1
  44. package/dist/191a179639e.185.js +0 -1
  45. package/dist/191a179639e.27.js +0 -1
  46. package/dist/191a179639e.278.js +0 -1
  47. package/dist/191a179639e.459.js +0 -1
  48. package/dist/191a179639e.490.js +0 -1
  49. package/dist/191a179639e.74.js +0 -1
  50. package/dist/191a179639e.997.js +0 -1
  51. package/dist/191a179639e.app.js +0 -1
  52. package/dist/191a179639e.library.js +0 -1
  53. package/dist/191a179639e.preview.js +0 -1
  54. package/dist/191a179639e.webview.js +0 -1
  55. package/dist/278.js +0 -406
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subiz/widget-v4",
3
- "version": "4.1.101",
3
+ "version": "4.1.103",
4
4
  "main": "./compiled_src/lib.js",
5
5
  "scripts": {
6
6
  "dev": "npx webpack serve --config webpack.dev.js",
@@ -30,10 +30,10 @@
30
30
  "babel-loader": "^9.1.3",
31
31
  "babel-plugin-syntax-jsx": "^6.18.0",
32
32
  "html-webpack-plugin": "^5.6.0",
33
- "puppeteer": "^23.2.1",
33
+ "puppeteer": "^23.3.0",
34
34
  "webpack": "^5.94.0",
35
35
  "webpack-bundle-analyzer": "^4.10.2",
36
36
  "webpack-cli": "^5.1.4",
37
- "webpack-dev-server": "^5.0.4"
37
+ "webpack-dev-server": "^5.1.0"
38
38
  }
39
39
  }
@@ -11,7 +11,7 @@ export default function PoweredBy(props) {
11
11
  return (
12
12
  <div class='poweredby'>
13
13
  <a href={link} class='poweredby--text' target='_blank' title='Subiz'>
14
- <img width='14' height='10' class='poweredby--subiz-logo' src={logo} alt='powerred by subiz' /> Subiz
14
+ <img width='17' height='12' class='poweredby--subiz-logo' src={logo} alt='powerred by subiz' /> Subiz
15
15
  </a>
16
16
  </div>
17
17
  )
@@ -214,7 +214,7 @@ export default class Widget extends Com {
214
214
 
215
215
  if (is_lead) sb.setUserAttr(user, {key: 'lead_source', text: 'widget'})
216
216
 
217
- let firstmsg = sb.get(data, 'question.value')
217
+ let firstmsg = sb.get(data, 'question.value', this.props.t('get_started'))
218
218
  let groupid = sb.get(data, 'group.value', '')
219
219
 
220
220
  // creating convo
@@ -279,13 +279,6 @@ export default class Widget extends Com {
279
279
  formMounted = (form) => {
280
280
  // waiting for element to be created
281
281
  let formData = this.fillForm(form)
282
- formData['question'] = {
283
- key: 'question',
284
- is_required: true,
285
- label: this.props.t.i18n(sb.get(form, `i18n_question_label`, {})) || form.question_label,
286
- type: 'text',
287
- value: this.state.quickReplyMessage.text,
288
- }
289
282
 
290
283
  this.setState({formData})
291
284
  // dont steal focus on mobile or trying to override form
@@ -302,6 +295,11 @@ export default class Widget extends Com {
302
295
  this.setState({formData})
303
296
  }
304
297
 
298
+ onKeywordField(e, form, formName, key) {
299
+ if (e.code == 'Enter') {
300
+ this.submitPrechatForm(form, formName)
301
+ }
302
+ }
305
303
  onInputChange(key, val) {
306
304
  this.wasFormInputed = true
307
305
  let formData = sb.cloneDeep(this.state.formData)
@@ -447,7 +445,7 @@ export default class Widget extends Com {
447
445
  )
448
446
  }
449
447
 
450
- renderFields() {
448
+ renderFields(form, formName) {
451
449
  if (sb.size(this.state.formData) === 0) return null
452
450
  let $fields = sb.map(this.state.formData, (field, key) => {
453
451
  // not display question when click bot quick reply
@@ -484,6 +482,7 @@ export default class Widget extends Com {
484
482
  value={field.value || ''}
485
483
  onInput={(e) => this.onInputChange(key, e.target.value)}
486
484
  onChange={(e) => this.onInputChange(key, e.target.value)}
485
+ onKeyDown={(e) => this.onKeywordField(e, form, formName, key)}
487
486
  ref={(ref) => {
488
487
  this['form_' + encode(key)] = ref
489
488
  }}
@@ -604,7 +603,7 @@ export default class Widget extends Com {
604
603
  <div class='flex-grow-1'>
605
604
  <div class='form mt-3 pl-3 pr-3 pt-3 pb-3 d-flex flex-column'>
606
605
  <div>{title}</div>
607
- {this.renderFields()}
606
+ {this.renderFields(form, formName)}
608
607
  </div>
609
608
  </div>
610
609
 
@@ -730,9 +729,7 @@ export default class Widget extends Com {
730
729
 
731
730
  fillQuickReplyToQuestion(message) {
732
731
  let formData = this.state.formData
733
- if (formData) {
734
- sb.set(formData, 'question.value', message.text)
735
- }
732
+ if (formData) sb.set(formData, 'question.value', message.text || this.props.t('get_started'))
736
733
  this.setState({formData, quickReplyMessage: message})
737
734
  }
738
735
 
@@ -1085,12 +1082,14 @@ export default class Widget extends Com {
1085
1082
  }
1086
1083
  }
1087
1084
 
1088
- // add question field
1089
- data['question'] = {
1090
- key: 'question',
1091
- is_required: true,
1092
- label: this.props.t.i18n(sb.get(form, `i18n_question_label`, {})) || form.question_label,
1093
- type: 'text',
1085
+ if (form.question_required) {
1086
+ // add question field
1087
+ data['question'] = {
1088
+ key: 'question',
1089
+ is_required: true,
1090
+ label: this.props.t.i18n(sb.get(form, `i18n_question_label`, {})) || form.question_label,
1091
+ type: 'text',
1092
+ }
1094
1093
  }
1095
1094
 
1096
1095
  if (this.isFormChanged(this.state.formData, data)) {
@@ -1156,6 +1155,16 @@ export default class Widget extends Com {
1156
1155
  list: sb.map(form.groups, (group) => ({value: group.id, label: group.name})),
1157
1156
  }
1158
1157
  }
1158
+
1159
+ if (form.question_required) {
1160
+ data['question'] = {
1161
+ key: 'question',
1162
+ is_required: true,
1163
+ label: this.props.t.i18n(sb.get(form, `i18n_question_label`, {})) || form.question_label,
1164
+ type: 'text',
1165
+ value: this.state.quickReplyMessage.text,
1166
+ }
1167
+ }
1159
1168
  return data
1160
1169
  }
1161
1170
  }
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
- }]);