@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.
Files changed (84) hide show
  1. package/assets/img/default.jpg +0 -0
  2. package/assets/img/external-link.svg +1 -0
  3. package/assets/less/message.less +210 -42
  4. package/compiled_src/chatbox/Event.js +22 -2
  5. package/compiled_src/chatbox/OrderAttachments.js +112 -0
  6. package/compiled_src/chatbox/ProductAttachments.js +79 -0
  7. package/compiled_src/chatbox/TextMessage.js +1 -1
  8. package/compiled_src/plugin.js +8 -2
  9. package/compiled_src/store/api.js +1 -0
  10. package/compiled_src/store/store.js +140 -0
  11. package/compiled_src/util/common.js +12 -1
  12. package/compiled_src/util/pubsub.js +6 -3
  13. package/dist/17d517e44e2.178.js +1 -0
  14. package/dist/17d517e44e2.213.js +1 -0
  15. package/dist/17d517e44e2.362.js +1 -0
  16. package/dist/17d517e44e2.441.js +1 -0
  17. package/dist/17d517e44e2.605.js +1 -0
  18. package/dist/17d517e44e2.619.js +1 -0
  19. package/dist/17d517e44e2.678.js +1 -0
  20. package/dist/17d517e44e2.74.js +1 -0
  21. package/dist/17d517e44e2.782.js +1 -0
  22. package/dist/17d517e44e2.app.js +1 -0
  23. package/dist/17d517e44e2.index.html +21 -0
  24. package/dist/17d517e44e2.library.html +21 -0
  25. package/dist/17d517e44e2.library.js +1 -0
  26. package/dist/17d517e44e2.preview.html +759 -0
  27. package/dist/17d517e44e2.preview.js +1 -0
  28. package/dist/HASH +1 -1
  29. package/dist/assets/img/Facebook.64607ec.png +0 -0
  30. package/dist/assets/img/Zalo.6845707.png +0 -0
  31. package/dist/assets/img/award1a.1a58e10.png +0 -0
  32. package/dist/assets/img/award3a.3b74423.png +0 -0
  33. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  34. package/dist/assets/img/award5.39eb7ae.png +0 -0
  35. package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
  36. package/dist/assets/img/convos_empty.2353007.svg +72 -0
  37. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  38. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  39. package/dist/assets/img/done_gray.d7e8203.svg +4 -0
  40. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  41. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  42. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  43. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  44. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  45. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  46. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  47. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  48. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  49. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  50. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  51. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  52. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  53. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  54. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  55. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  56. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  57. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  63. package/dist/assets/img/empty.29bed2d.svg +23 -0
  64. package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
  65. package/dist/assets/img/external-link.90577cc.svg +1 -0
  66. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  67. package/dist/assets/img/image_default.be0698b.png +0 -0
  68. package/dist/assets/img/loading_static.8f403ae.svg +10 -0
  69. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  70. package/dist/assets/img/main-service2.9b99549.png +0 -0
  71. package/dist/assets/img/rating--average.1ea492c.svg +12 -0
  72. package/dist/assets/img/rating--great.e3d712e.svg +16 -0
  73. package/dist/assets/img/rating--poor.2938a25.svg +12 -0
  74. package/dist/assets/img/send.6db52a9.svg +3 -0
  75. package/dist/assets/img/subiz-mono.877e9f5.svg +3 -0
  76. package/package.json +18 -18
  77. package/src/chatbox/Event.js +72 -56
  78. package/src/chatbox/OrderAttachments.js +109 -0
  79. package/src/chatbox/ProductAttachments.js +70 -0
  80. package/src/chatbox/TextMessage.js +1 -1
  81. package/src/plugin.js +9 -4
  82. package/src/store/api.js +2 -5
  83. package/src/store/store.js +138 -8
  84. package/src/util/common.js +6 -0
@@ -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 = /(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/.test(
1105
- navigator.userAgent,
1106
- )
1233
+ let tabletCheck =
1234
+ /(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/.test(
1235
+ navigator.userAgent,
1236
+ )
@@ -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 ''