@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.
- package/compiled_src/bot.js +1 -1
- package/compiled_src/call/call.js +2 -2
- package/compiled_src/chatbox/AgentsAvatar.js +1 -1
- package/compiled_src/chatbox/AudioAttachments.js +1 -1
- package/compiled_src/chatbox/ButtonAttachments.js +1 -1
- package/compiled_src/chatbox/Buttons.js +1 -1
- package/compiled_src/chatbox/ChatButton.js +1 -1
- package/compiled_src/chatbox/DropdownSelect.js +2 -2
- package/compiled_src/chatbox/Emoji.js +1 -1
- package/compiled_src/chatbox/Event.js +1 -1
- package/compiled_src/chatbox/Events.js +1 -1
- package/compiled_src/chatbox/FileAttachments.js +1 -1
- package/compiled_src/chatbox/FormAttachment.js +1 -1
- package/compiled_src/chatbox/FormAttachments.js +1 -1
- package/compiled_src/chatbox/FormSubmitAttachments.js +1 -1
- package/compiled_src/chatbox/GenericTemplateAttachments.js +1 -1
- package/compiled_src/chatbox/Header.js +1 -1
- package/compiled_src/chatbox/ImageAttachments.js +2 -2
- package/compiled_src/chatbox/InfoMessage.js +1 -1
- package/compiled_src/chatbox/ListField.js +1 -1
- package/compiled_src/chatbox/MessageInput.js +2 -2
- package/compiled_src/chatbox/Order.js +2 -2
- package/compiled_src/chatbox/OrderAttachments.js +1 -1
- package/compiled_src/chatbox/ProductAttachments.js +1 -1
- package/compiled_src/chatbox/QuickReplies.js +1 -1
- package/compiled_src/chatbox/Rating.js +2 -2
- package/compiled_src/chatbox/TextMessage.js +1 -1
- package/compiled_src/chatbox/Typing.js +17 -2
- package/compiled_src/chatbox/VideoAttachments.js +1 -1
- package/compiled_src/chatbox/Widget.js +37 -9
- package/compiled_src/chatbox/main.js +4 -1
- package/compiled_src/chatbox/releaseAnimation.js +1 -1
- package/compiled_src/chatbox/time.js +1 -1
- package/compiled_src/common.js +1 -1
- package/compiled_src/contact/contact.js +2 -2
- package/compiled_src/lib.js +6 -2
- package/compiled_src/notif/notif.js +2 -2
- package/compiled_src/order/address_picker.js +2 -2
- package/compiled_src/order/icon.js +1 -1
- package/compiled_src/order/index.js +1 -1
- package/compiled_src/order/order.js +2 -2
- package/compiled_src/plugin.js +5 -1
- package/compiled_src/popup/countdown.js +2 -2
- package/compiled_src/popup/popup.js +2 -2
- package/compiled_src/popup/tick.core.commonjs.js +1 -1
- package/compiled_src/store/api.js +2 -2
- package/compiled_src/store/api_fake.js +2 -2
- package/compiled_src/store/store.js +8 -5
- package/dist/132.js +6433 -2568
- package/dist/178.js +406 -0
- package/dist/18a02a9c54e.132.js +1 -0
- package/dist/18a02a9c54e.178.js +1 -0
- package/dist/18a02a9c54e.213.js +1 -0
- package/dist/18a02a9c54e.335.js +1 -0
- package/dist/18a02a9c54e.362.js +1 -0
- package/dist/18a02a9c54e.441.js +1 -0
- package/dist/18a02a9c54e.605.js +1 -0
- package/dist/18a02a9c54e.678.js +1 -0
- package/dist/18a02a9c54e.782.js +1 -0
- package/dist/18a02a9c54e.app.js +1 -0
- package/dist/{18ffe1df25b.index.html → 18a02a9c54e.index.html} +4 -4
- package/dist/{18ffe1df25b.library.html → 18a02a9c54e.library.html} +4 -4
- package/dist/18a02a9c54e.library.js +1 -0
- package/dist/{18ffe1df25b.preview.html → 18a02a9c54e.preview.html} +1 -1
- package/dist/18a02a9c54e.preview.js +1 -0
- package/dist/18a02a9c54e.screenshoot.js +1 -0
- package/dist/18a02a9c54e.webview.js +1 -0
- package/dist/213.js +2780 -0
- package/dist/{74.js → 335.js} +35 -35
- package/dist/{459.js → 362.js} +7 -7
- package/dist/441.js +2855 -0
- package/dist/{490.js → 605.js} +61 -60
- package/dist/{997.js → 678.js} +6 -6
- package/dist/{27.js → 782.js} +7 -7
- package/dist/HASH +1 -1
- package/dist/malicious-app.js +4 -6
- package/dist/screenshoot.html +1 -1
- package/dist/screenshoot.js +1604 -5585
- package/loader.js +1 -1
- package/old.md +1 -0
- package/package.json +1 -1
- package/src/chatbox/Typing.js +13 -1
- package/src/chatbox/Widget.js +40 -7
- package/src/chatbox/main.js +4 -0
- package/src/lib.js +5 -0
- package/src/plugin.js +5 -0
- package/src/store/store.js +6 -3
- package/dist/127.js +0 -273
- package/dist/185.js +0 -1885
- package/dist/18ffe1df25b.127.js +0 -1
- package/dist/18ffe1df25b.132.js +0 -1
- package/dist/18ffe1df25b.185.js +0 -1
- package/dist/18ffe1df25b.27.js +0 -1
- package/dist/18ffe1df25b.278.js +0 -1
- package/dist/18ffe1df25b.459.js +0 -1
- package/dist/18ffe1df25b.490.js +0 -1
- package/dist/18ffe1df25b.74.js +0 -1
- package/dist/18ffe1df25b.997.js +0 -1
- package/dist/18ffe1df25b.app.js +0 -1
- package/dist/18ffe1df25b.library.js +0 -1
- package/dist/18ffe1df25b.preview.js +0 -1
- package/dist/18ffe1df25b.screenshoot.js +0 -1
- package/dist/18ffe1df25b.webview.js +0 -1
- 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.
|
|
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
package/src/chatbox/Typing.js
CHANGED
|
@@ -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')}
|
package/src/chatbox/Widget.js
CHANGED
|
@@ -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'
|
|
162
|
-
field.
|
|
163
|
-
|
|
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'
|
|
167
|
-
field.
|
|
168
|
-
|
|
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
|
|
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}
|
package/src/chatbox/main.js
CHANGED
|
@@ -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')
|
package/src/store/store.js
CHANGED
|
@@ -202,15 +202,18 @@ export default class Store {
|
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
isMobile() {
|
|
205
|
-
|
|
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
|
-
|
|
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'
|
|
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
|
-
}]);
|