@subiz/widget-v4 4.0.48 → 4.0.52
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/assets/img/default.jpg +0 -0
- package/assets/img/external-link.svg +1 -0
- package/assets/less/message.less +210 -42
- package/compiled_src/chatbox/Event.js +22 -2
- package/compiled_src/chatbox/OrderAttachments.js +112 -0
- package/compiled_src/chatbox/ProductAttachments.js +79 -0
- package/compiled_src/chatbox/TextMessage.js +1 -1
- package/compiled_src/plugin.js +8 -2
- package/compiled_src/store/api.js +1 -0
- package/compiled_src/store/store.js +140 -0
- package/compiled_src/util/common.js +12 -1
- package/compiled_src/util/pubsub.js +6 -3
- package/dist/17d517e44e2.178.js +1 -0
- package/dist/17d517e44e2.213.js +1 -0
- package/dist/17d517e44e2.362.js +1 -0
- package/dist/17d517e44e2.441.js +1 -0
- package/dist/17d517e44e2.605.js +1 -0
- package/dist/17d517e44e2.619.js +1 -0
- package/dist/17d517e44e2.678.js +1 -0
- package/dist/17d517e44e2.74.js +1 -0
- package/dist/17d517e44e2.782.js +1 -0
- package/dist/17d517e44e2.app.js +1 -0
- package/dist/17d517e44e2.index.html +21 -0
- package/dist/17d517e44e2.library.html +21 -0
- package/dist/17d517e44e2.library.js +1 -0
- package/dist/17d517e44e2.preview.html +759 -0
- package/dist/17d517e44e2.preview.js +1 -0
- package/dist/HASH +1 -1
- package/dist/assets/img/Facebook.64607ec.png +0 -0
- package/dist/assets/img/Zalo.6845707.png +0 -0
- package/dist/assets/img/award1a.1a58e10.png +0 -0
- package/dist/assets/img/award3a.3b74423.png +0 -0
- package/dist/assets/img/award4a.ed6ccd4.png +0 -0
- package/dist/assets/img/award5.39eb7ae.png +0 -0
- package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
- package/dist/assets/img/convos_empty.2353007.svg +72 -0
- package/dist/assets/img/default.06e6ee0.jpg +0 -0
- package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
- package/dist/assets/img/done_gray.d7e8203.svg +4 -0
- package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
- package/dist/assets/img/empty.29bed2d.svg +23 -0
- package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
- package/dist/assets/img/external-link.90577cc.svg +1 -0
- package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
- package/dist/assets/img/image_default.be0698b.png +0 -0
- package/dist/assets/img/loading_static.8f403ae.svg +10 -0
- package/dist/assets/img/main-service1.d536cc2.png +0 -0
- package/dist/assets/img/main-service2.9b99549.png +0 -0
- package/dist/assets/img/rating--average.1ea492c.svg +12 -0
- package/dist/assets/img/rating--great.e3d712e.svg +16 -0
- package/dist/assets/img/rating--poor.2938a25.svg +12 -0
- package/dist/assets/img/send.6db52a9.svg +3 -0
- package/dist/assets/img/subiz-mono.877e9f5.svg +3 -0
- package/package.json +18 -18
- package/src/chatbox/Event.js +72 -56
- package/src/chatbox/OrderAttachments.js +109 -0
- package/src/chatbox/ProductAttachments.js +70 -0
- package/src/chatbox/TextMessage.js +1 -1
- package/src/plugin.js +9 -4
- package/src/store/api.js +2 -5
- package/src/store/store.js +138 -8
- package/src/util/common.js +6 -0
package/src/store/store.js
CHANGED
|
@@ -149,7 +149,7 @@ export default class Store {
|
|
|
149
149
|
overridePlugin(plugins) {
|
|
150
150
|
if (!Array.isArray(plugins)) throw 'plugins must be be an array'
|
|
151
151
|
let pluginM = {}
|
|
152
|
-
sb.map(plugins, function(plugin) {
|
|
152
|
+
sb.map(plugins, function (plugin) {
|
|
153
153
|
pluginM[plugin.id] = plugin
|
|
154
154
|
})
|
|
155
155
|
this.forcePlugins = pluginM
|
|
@@ -930,6 +930,135 @@ export default class Store {
|
|
|
930
930
|
setTimeout(() => this.loopTime(), 60000)
|
|
931
931
|
}
|
|
932
932
|
|
|
933
|
+
getOrderTotal(order) {
|
|
934
|
+
let subtotal = 0
|
|
935
|
+
sb.map(order.items, (item) => {
|
|
936
|
+
if (!item.product) return 0
|
|
937
|
+
let price = item.product.price * item.quantity
|
|
938
|
+
|
|
939
|
+
if (item.discount_type) {
|
|
940
|
+
if (item.discount_type == 'percentage') {
|
|
941
|
+
if (item.discount_before_tax && item.discount_percentage > 0) {
|
|
942
|
+
price = price * (1 - item.discount_percentage / 10000)
|
|
943
|
+
}
|
|
944
|
+
} else if (item.discount_type == 'amount') {
|
|
945
|
+
let computed_discount = item.discount
|
|
946
|
+
if (item.discount_before_tax && computed_discount > 0) {
|
|
947
|
+
price = price - computed_discount
|
|
948
|
+
if (price <= 0) price = 0
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
subtotal += price
|
|
953
|
+
})
|
|
954
|
+
|
|
955
|
+
let computed_discount = 0
|
|
956
|
+
// add specific item discount after tax to computed_discount
|
|
957
|
+
sb.map(order.items, (item) => {
|
|
958
|
+
if (!item.discount_type) return
|
|
959
|
+
if (!item.product) return 0
|
|
960
|
+
let price = item.product.price * item.quantity
|
|
961
|
+
|
|
962
|
+
let tax = item.product.tax
|
|
963
|
+
let taxprice = 0
|
|
964
|
+
if (tax && tax.id) taxprice = (price * tax.percentage) / 10000
|
|
965
|
+
|
|
966
|
+
if (item.discount_type == 'percentage' && !item.discount_before_tax && item.discount_percentage > 0) {
|
|
967
|
+
computed_discount += ((price + taxprice) * item.discount_percentage) / 10000
|
|
968
|
+
} else if (item.discount_type == 'amount') {
|
|
969
|
+
let itemdiscount = item.discount
|
|
970
|
+
if (!item.discount_before_tax && itemdiscount > 0) {
|
|
971
|
+
// CAUTION: easy to miss condition
|
|
972
|
+
if (itemdiscount > price + taxprice) itemdiscount = price + taxprice
|
|
973
|
+
computed_discount += itemdiscount
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
})
|
|
977
|
+
|
|
978
|
+
// TAX
|
|
979
|
+
let totaltax = 0
|
|
980
|
+
let taxM = {}
|
|
981
|
+
sb.map(order.items, (item, i) => {
|
|
982
|
+
if (!item.product) return
|
|
983
|
+
let tax = item.product.tax
|
|
984
|
+
if (!tax) return
|
|
985
|
+
if (!tax.id) return
|
|
986
|
+
let price = item.product.price * item.quantity
|
|
987
|
+
|
|
988
|
+
if (item.discount_type) {
|
|
989
|
+
if (item.discount_type == 'percentage') {
|
|
990
|
+
if (item.discount_before_tax && item.discount_percentage > 0) {
|
|
991
|
+
price = price * (1 - item.discount_percentage / 10000)
|
|
992
|
+
}
|
|
993
|
+
} else if (item.discount_type == 'amount') {
|
|
994
|
+
let computed_discount = item.discount
|
|
995
|
+
if (item.discount_before_tax && computed_discount > 0) {
|
|
996
|
+
price = price - computed_discount
|
|
997
|
+
if (price <= 0) price = 0
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
let taxprice = (price * tax.percentage) / 10000
|
|
1002
|
+
|
|
1003
|
+
taxM[i] = {
|
|
1004
|
+
tax: tax,
|
|
1005
|
+
taxprice: taxprice,
|
|
1006
|
+
}
|
|
1007
|
+
})
|
|
1008
|
+
|
|
1009
|
+
// have discount before tax
|
|
1010
|
+
if (order.discount_before_tax) {
|
|
1011
|
+
// decrease tax by discount percentage
|
|
1012
|
+
if (order.discount_type == 'percentage' && order.discount_percentage > 0) {
|
|
1013
|
+
sb.map(taxM, (t) => {
|
|
1014
|
+
t.taxprice = t.taxprice * (1 - order.discount_percentage / 10000)
|
|
1015
|
+
})
|
|
1016
|
+
computed_discount += (subtotal * order.discount_percentage) / 10000
|
|
1017
|
+
} else if (order.discount_type == 'amount') {
|
|
1018
|
+
let discount = order.discount
|
|
1019
|
+
if (subtotal > 0) {
|
|
1020
|
+
sb.map(taxM, (t) => {
|
|
1021
|
+
// CAUTION: easy to miss
|
|
1022
|
+
if (discount > subtotal) discount = subtotal
|
|
1023
|
+
|
|
1024
|
+
t.taxprice = t.taxprice * (1 - discount / subtotal)
|
|
1025
|
+
})
|
|
1026
|
+
}
|
|
1027
|
+
computed_discount += discount
|
|
1028
|
+
}
|
|
1029
|
+
} else {
|
|
1030
|
+
if (order.discount_type == 'percentage' && order.discount_percentage > 0) {
|
|
1031
|
+
let taxprice = 0
|
|
1032
|
+
sb.map(taxM, (t) => (taxprice += t.taxprice))
|
|
1033
|
+
computed_discount += ((subtotal + taxprice) * order.discount_percentage) / 10000
|
|
1034
|
+
} else if (order.discount_type == 'amount') {
|
|
1035
|
+
let discount = order.discount
|
|
1036
|
+
computed_discount += discount
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
// SHIP
|
|
1041
|
+
let shippingfee = lo.get(order, 'shipping.fee')
|
|
1042
|
+
if (shippingfee > 0) {
|
|
1043
|
+
if (sb.get(order, 'shipping.tax.id')) {
|
|
1044
|
+
let tax = order.shipping.tax
|
|
1045
|
+
let taxprice = (shippingfee * tax.percentage) / 10000
|
|
1046
|
+
taxM['ship'] = {tax: tax, taxprice: taxprice}
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
let taxprice = 0
|
|
1051
|
+
sb.map(taxM, (t) => (taxprice += t.taxprice))
|
|
1052
|
+
let total = subtotal + taxprice - computed_discount + shippingfee
|
|
1053
|
+
|
|
1054
|
+
// add adjustment
|
|
1055
|
+
let adj = order.adjustment
|
|
1056
|
+
total += adj
|
|
1057
|
+
|
|
1058
|
+
if (total < 0) total = 0
|
|
1059
|
+
return {subtotal, computed_discount, taxM, total}
|
|
1060
|
+
}
|
|
1061
|
+
|
|
933
1062
|
replaceFileUrl(src) {
|
|
934
1063
|
if (!src) return ''
|
|
935
1064
|
|
|
@@ -1042,7 +1171,7 @@ function getGaClientId() {
|
|
|
1042
1171
|
if (!hasGA()) return clientId
|
|
1043
1172
|
|
|
1044
1173
|
var allTrackers = window.ga.getAll() || []
|
|
1045
|
-
allTrackers.forEach(function(tracker) {
|
|
1174
|
+
allTrackers.forEach(function (tracker) {
|
|
1046
1175
|
clientId = tracker.get('clientId')
|
|
1047
1176
|
})
|
|
1048
1177
|
|
|
@@ -1059,7 +1188,7 @@ function getGaTrackingIds() {
|
|
|
1059
1188
|
if (!hasGA()) return trackingIds
|
|
1060
1189
|
|
|
1061
1190
|
const allTrackers = window.ga.getAll() || []
|
|
1062
|
-
allTrackers.forEach(function(tracker) {
|
|
1191
|
+
allTrackers.forEach(function (tracker) {
|
|
1063
1192
|
var trackingId = tracker.get('trackingId')
|
|
1064
1193
|
if (trackingId) trackingIds.push(trackingId)
|
|
1065
1194
|
})
|
|
@@ -1077,7 +1206,7 @@ function sendToGA(category, action, label) {
|
|
|
1077
1206
|
if (!hasGA()) return
|
|
1078
1207
|
|
|
1079
1208
|
const allTrackers = window.ga.getAll() || []
|
|
1080
|
-
allTrackers.forEach(function(tracker) {
|
|
1209
|
+
allTrackers.forEach(function (tracker) {
|
|
1081
1210
|
const name = tracker.get('name')
|
|
1082
1211
|
window.ga(name + '.send', 'event', category, action, label)
|
|
1083
1212
|
})
|
|
@@ -1090,7 +1219,7 @@ function sendEventToThirdParty(category, action, label) {
|
|
|
1090
1219
|
}
|
|
1091
1220
|
|
|
1092
1221
|
// from http://detectmobilebrowsers.com/
|
|
1093
|
-
let mobileCheck = (function(a) {
|
|
1222
|
+
let mobileCheck = (function (a) {
|
|
1094
1223
|
return (
|
|
1095
1224
|
/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
|
|
1096
1225
|
a,
|
|
@@ -1101,6 +1230,7 @@ let mobileCheck = (function(a) {
|
|
|
1101
1230
|
)
|
|
1102
1231
|
})(navigator.userAgent || navigator.vendor || window.opera)
|
|
1103
1232
|
|
|
1104
|
-
let tabletCheck =
|
|
1105
|
-
|
|
1106
|
-
|
|
1233
|
+
let tabletCheck =
|
|
1234
|
+
/(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/.test(
|
|
1235
|
+
navigator.userAgent,
|
|
1236
|
+
)
|
package/src/util/common.js
CHANGED
|
@@ -1071,6 +1071,12 @@ export function getUrlParameter() {
|
|
|
1071
1071
|
|
|
1072
1072
|
export var sleep = (ms) => new Promise((res) => setTimeout(res, ms))
|
|
1073
1073
|
|
|
1074
|
+
export function formatCurrency(val) {
|
|
1075
|
+
if (!val) return 0
|
|
1076
|
+
val = Math.round(val)
|
|
1077
|
+
return val.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1074
1080
|
function replaceFileUrl(src) {
|
|
1075
1081
|
let fileurl = 'https://vcdn.subiz-cdn.com/file/'
|
|
1076
1082
|
if (!src) return ''
|