@subiz/widget-v4 4.0.61 → 4.0.63

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 (154) hide show
  1. package/assets/img/caret.svg +1 -0
  2. package/assets/img/done_green.svg +4 -0
  3. package/assets/img/empty_1.svg +11 -0
  4. package/assets/img/ghn.svg +17 -0
  5. package/assets/img/ghtk.svg +18 -0
  6. package/assets/img/home.svg +1 -0
  7. package/assets/img/info.svg +1 -0
  8. package/assets/img/loader.svg +1 -0
  9. package/assets/img/map-pin.svg +1 -0
  10. package/assets/img/not_found_search.png +0 -0
  11. package/assets/img/package.svg +5 -0
  12. package/assets/img/package_fade.svg +1 -0
  13. package/assets/img/phone.svg +1 -0
  14. package/assets/img/search.svg +1 -0
  15. package/assets/img/shop.svg +1 -0
  16. package/assets/img/shop_faded.svg +1 -0
  17. package/assets/img/user.svg +1 -0
  18. package/assets/img/x.svg +5 -0
  19. package/assets/less/chatbox.less +33 -0
  20. package/assets/less/dropdown_select.less +130 -0
  21. package/assets/less/form.less +7 -20
  22. package/assets/less/order.less +489 -0
  23. package/assets/less/rating.less +3 -8
  24. package/compiled_src/call/call.js +12 -15
  25. package/compiled_src/chatbox/DropdownSelect.js +239 -0
  26. package/compiled_src/chatbox/Event.js +4 -2
  27. package/compiled_src/chatbox/Events.js +1 -0
  28. package/compiled_src/chatbox/MessageInput.js +4 -7
  29. package/compiled_src/chatbox/Order.js +281 -0
  30. package/compiled_src/chatbox/OrderAttachments.js +2 -1
  31. package/compiled_src/chatbox/Rating.js +7 -10
  32. package/compiled_src/chatbox/TextMessage.js +9 -2
  33. package/compiled_src/chatbox/Widget.js +40 -3
  34. package/compiled_src/chatbox/spinner.js +1 -1
  35. package/compiled_src/chatbox/time.js +3 -1
  36. package/compiled_src/common.js +40 -1
  37. package/compiled_src/contact/contact.js +7 -12
  38. package/compiled_src/lib.js +9 -14
  39. package/compiled_src/notif/notif.js +12 -15
  40. package/compiled_src/order/address_picker.js +241 -0
  41. package/compiled_src/order/icon.js +62 -0
  42. package/compiled_src/order/index.js +113 -0
  43. package/compiled_src/order/order.js +1220 -0
  44. package/compiled_src/plugin.js +9 -42
  45. package/compiled_src/popup/countdown.js +4 -7
  46. package/compiled_src/popup/popup.js +9 -12
  47. package/compiled_src/store/api.js +80 -90
  48. package/compiled_src/store/api_fake.js +55 -82
  49. package/compiled_src/store/store.js +163 -158
  50. package/compiled_src/util/common.js +36 -2
  51. package/dist/0b82fa7e5c3b07b40a44.png +1 -0
  52. package/dist/0f4af006e38ee8b93633.png +1 -0
  53. package/dist/{74.js → 132.js} +2232 -235
  54. package/dist/178.js +341 -174
  55. package/dist/17e757ccadd.132.js +1 -0
  56. package/dist/17e757ccadd.178.js +1 -0
  57. package/dist/17e757ccadd.213.js +1 -0
  58. package/dist/17e757ccadd.335.js +1 -0
  59. package/dist/17e757ccadd.362.js +1 -0
  60. package/dist/17e757ccadd.441.js +1 -0
  61. package/dist/17e757ccadd.605.js +1 -0
  62. package/dist/17e757ccadd.678.js +1 -0
  63. package/dist/17e757ccadd.782.js +1 -0
  64. package/dist/17e757ccadd.app.js +1 -0
  65. package/dist/{17db8166252.index.html → 17e757ccadd.index.html} +1 -1
  66. package/dist/{17db8166252.library.html → 17e757ccadd.library.html} +1 -1
  67. package/dist/17e757ccadd.library.js +1 -0
  68. package/dist/{17db8166252.preview.html → 17e757ccadd.preview.html} +1 -1
  69. package/dist/17e757ccadd.preview.js +1 -0
  70. package/dist/17e757ccadd.screenshoot.js +1 -0
  71. package/dist/1ea1c6cd21d25176810c.png +1 -0
  72. package/dist/213.js +18 -88
  73. package/dist/292d42404e1b03398f61.png +1 -0
  74. package/dist/312d376370831b7bea83.png +1 -0
  75. package/dist/313d1bfc1cf776d1aefe.png +1 -0
  76. package/dist/335.js +408 -0
  77. package/dist/362.js +71 -21
  78. package/dist/441.js +69 -43
  79. package/dist/4aa58bb7a66bb44975aa.png +1 -0
  80. package/dist/56ce063bc6c81adb7322.png +1 -0
  81. package/dist/605.js +13 -79
  82. package/dist/678.js +70 -20
  83. package/dist/6a411166ef5cc79e0714.png +1 -0
  84. package/dist/6faf403782fefacc1649.png +1 -0
  85. package/dist/782.js +118 -21
  86. package/dist/79dca33c68fab79c067f.png +1 -0
  87. package/dist/82da1578fa84f9debaeb.png +1 -0
  88. package/dist/8b8e0f0824743974b282.png +1 -0
  89. package/dist/8d551390d81e39130a3c.png +1 -0
  90. package/dist/9fc61b9479877ebdb6c7.png +1 -0
  91. package/dist/HASH +1 -1
  92. package/dist/a165d31dcb3dc90f1057.png +1 -0
  93. package/dist/a98d4a5698812c4426b3.png +1 -0
  94. package/dist/assets/img/caret.998eb8f.svg +1 -0
  95. package/dist/assets/img/done_green.b817fd4.svg +4 -0
  96. package/dist/assets/img/empty_1.0b98af0.svg +11 -0
  97. package/dist/assets/img/ghn.070f8e3.svg +17 -0
  98. package/dist/assets/img/ghtk.326eac1.svg +18 -0
  99. package/dist/assets/img/info.ebce7ea.svg +1 -0
  100. package/dist/assets/img/loader.37000a7.svg +1 -0
  101. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  102. package/dist/assets/img/package.8d37d0f.svg +5 -0
  103. package/dist/assets/img/package_fade.763c001.svg +1 -0
  104. package/dist/assets/img/search.f9705ff.svg +1 -0
  105. package/dist/assets/img/shop.f7dc7d8.svg +1 -0
  106. package/dist/assets/img/shop_faded.df7845a.svg +1 -0
  107. package/dist/assets/img/x.26fdfa3.svg +5 -0
  108. package/dist/c41606bf9d1b604e46d5.png +1 -0
  109. package/dist/ce1f7450ce6c1aacd330.png +1 -0
  110. package/dist/cf8c01e88f4770a6e3e5.png +1 -0
  111. package/dist/dfbcfeab1d5622a737e2.png +1 -0
  112. package/dist/e4893ed8c2f7b8329919.png +1 -0
  113. package/dist/ec2ab4eb4ef73d186186.png +1 -0
  114. package/dist/screenshoot.html +1 -1
  115. package/dist/screenshoot.js +448 -386
  116. package/order.html +19 -771
  117. package/package.json +12 -13
  118. package/src/chatbox/DropdownSelect.js +229 -0
  119. package/src/chatbox/Event.js +2 -2
  120. package/src/chatbox/Events.js +43 -42
  121. package/src/chatbox/Order.js +232 -0
  122. package/src/chatbox/OrderAttachments.js +2 -1
  123. package/src/chatbox/TextMessage.js +21 -12
  124. package/src/chatbox/Widget.js +34 -4
  125. package/src/chatbox/spinner.js +1 -1
  126. package/src/chatbox/time.js +1 -1
  127. package/src/common.js +52 -8
  128. package/src/contact/contact.js +1 -1
  129. package/src/order/address_picker.js +235 -0
  130. package/src/order/icon.js +32 -0
  131. package/src/order/index.js +86 -0
  132. package/src/order/order.js +1157 -0
  133. package/src/order/scratch +211 -0
  134. package/src/plugin.js +7 -52
  135. package/src/store/api.js +26 -1
  136. package/src/store/store.js +46 -9
  137. package/src/util/common.js +48 -2
  138. package/webpack.dev.js +2 -0
  139. package/dist/17db8166252.178.js +0 -1
  140. package/dist/17db8166252.213.js +0 -1
  141. package/dist/17db8166252.362.js +0 -1
  142. package/dist/17db8166252.441.js +0 -1
  143. package/dist/17db8166252.605.js +0 -1
  144. package/dist/17db8166252.619.js +0 -1
  145. package/dist/17db8166252.678.js +0 -1
  146. package/dist/17db8166252.74.js +0 -1
  147. package/dist/17db8166252.782.js +0 -1
  148. package/dist/17db8166252.app.js +0 -1
  149. package/dist/17db8166252.library.js +0 -1
  150. package/dist/17db8166252.preview.js +0 -1
  151. package/dist/17db8166252.screenshoot.js +0 -1
  152. package/dist/619.js +0 -777
  153. package/order.js +0 -0
  154. package/test.js +0 -1
@@ -23,6 +23,8 @@ var _Typing = _interopRequireDefault(require("./Typing.js"));
23
23
 
24
24
  var _Rating = _interopRequireDefault(require("./Rating.js"));
25
25
 
26
+ var _Order = _interopRequireDefault(require("./Order.js"));
27
+
26
28
  var _ListField = _interopRequireDefault(require("./ListField.js"));
27
29
 
28
30
  var _spinner = _interopRequireDefault(require("./spinner.js"));
@@ -50,7 +52,9 @@ class Widget extends _common.Com {
50
52
  this.setState({
51
53
  creating: false,
52
54
  clickedJoin: false,
53
- formData: {}
55
+ formData: {},
56
+ showOrder: false,
57
+ order_id: ''
54
58
  });
55
59
  this.props.store.onUpdate(this, _ => this.forceUpdate());
56
60
  }
@@ -66,6 +70,7 @@ class Widget extends _common.Com {
66
70
  }
67
71
 
68
72
  if (prevProp.cid !== this.props.cid) {
73
+ this.closeOrder();
69
74
  this.setState({
70
75
  clickedJoin: false
71
76
  });
@@ -84,7 +89,6 @@ class Widget extends _common.Com {
84
89
  }
85
90
 
86
91
  render() {
87
- let formRequired = this.isFormRequired();
88
92
  let showform = this.shouldShowForm();
89
93
  let form;
90
94
  let accountSetting = this.props.plugin.chatbox || {};
@@ -637,6 +641,7 @@ class Widget extends _common.Com {
637
641
  onClick: e => this.onContainerClick(e)
638
642
  }, (0, _preact.h)(_Events.default, {
639
643
  isShow: this.props.isShow,
644
+ onLink: this.onLink,
640
645
  store: this.props.store,
641
646
  onFormSubmit: e => this.onEventFormSubmit(e),
642
647
  ref: ref => this.events = ref,
@@ -656,9 +661,41 @@ class Widget extends _common.Com {
656
661
  onRate: e => this.onRate(e),
657
662
  cid: this.props.cid,
658
663
  t: this.props.t
664
+ }), (0, _preact.h)(_Order.default, {
665
+ forceView: this.props.view,
666
+ plugin: this.props.plugin,
667
+ show: this.state.showOrder,
668
+ order_id: this.state.order_id,
669
+ store: this.props.store,
670
+ onClose: this.closeOrder,
671
+ cid: this.props.cid,
672
+ t: this.props.t
659
673
  }), $input);
660
674
  }
661
675
 
676
+ onLink = (e, url) => {
677
+ if (!url) return e.preventDefault();
678
+ let noschemeurl = url.replace(/(^\w+:|^)\/\//, '');
679
+
680
+ if (noschemeurl.startsWith('widget.subiz.com.vn/orders/')) {
681
+ let orderid = noschemeurl.substr('widget.subiz.com.vn/orders/'.length);
682
+ orderid = orderid.split('/')[0];
683
+ this.setState({
684
+ showOrder: true,
685
+ order_id: orderid
686
+ });
687
+ e.preventDefault();
688
+ return;
689
+ }
690
+ };
691
+ closeOrder = e => {
692
+ this.setState({
693
+ showOrder: false,
694
+ order_id: ''
695
+ });
696
+ this.focusInput();
697
+ };
698
+
662
699
  async onStartConvoClick() {
663
700
  var convo = this.props.store.matchConvo(this.props.cid) || {};
664
701
  if (convo.state === 'ended') return this.props.onGo({
@@ -952,5 +989,5 @@ class FormMounter extends _common.Com {
952
989
  }
953
990
 
954
991
  function encode(key) {
955
- return btoa(key).split('=').join('');
992
+ return encodeURIComponent(key);
956
993
  }
@@ -23,7 +23,7 @@ class Spinner extends _common.Com {
23
23
  border-bottom-color: ${borderColor} !important;border-right-color: ${mainColor} !important;`;
24
24
 
25
25
  if (this.props.static) {
26
- let style = `width: ${size}px;height: ${size}px;`;
26
+ let style = `width: ${size}px !important;height: ${size}px !important;`;
27
27
  if (size < 40) return (0, _preact.h)(LoaderIcon, {
28
28
  size: size + '',
29
29
  style: `stroke:${mainColor}`
@@ -60,7 +60,9 @@ class Time extends _common.Com {
60
60
  }
61
61
 
62
62
  render() {
63
- return (0, _preact.h)("span", null, this.state.t);
63
+ return (0, _preact.h)("span", {
64
+ style: this.props.style
65
+ }, this.state.t);
64
66
  }
65
67
 
66
68
  }
@@ -4,6 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Com = exports.Clickaway = void 0;
7
+ exports.downloadLanguage = downloadLanguage;
8
+ exports.langMessages = exports.getLocale = void 0;
7
9
 
8
10
  var _preact = require("preact");
9
11
 
@@ -64,4 +66,41 @@ class Clickaway extends Com {
64
66
 
65
67
  }
66
68
 
67
- exports.Clickaway = Clickaway;
69
+ exports.Clickaway = Clickaway;
70
+
71
+ const getLocale = (plugin, loc) => {
72
+ if (!loc) loc = '';
73
+
74
+ let found = _index.default.find(plugin.locales, l => l.toLowerCase().trim() === loc.toLowerCase().trim());
75
+
76
+ if (found) return found;
77
+ found = _index.default.find(plugin.locales, l => {
78
+ l = l.replace('-', '_').split('_')[0].trim().toLowerCase();
79
+ let compareloc = loc.replace('-', '_').split('_')[0].trim().toLowerCase();
80
+ return l == compareloc;
81
+ });
82
+ if (found) return found;
83
+ return plugin.locale || 'en-US';
84
+ };
85
+
86
+ exports.getLocale = getLocale;
87
+ let langMessages = {};
88
+ exports.langMessages = langMessages;
89
+ let downloadLock = false;
90
+
91
+ function downloadLanguage(store, locale, force) {
92
+ if (downloadLock) return new Promise(resolve => setTimeout(() => downloadLanguage(store, locale, force).then(resolve), 100));
93
+ downloadLock = true;
94
+ let messages;
95
+
96
+ if (locale === 'debug' || langMessages[locale] && !force) {
97
+ downloadLock = false;
98
+ return Promise.resolve();
99
+ }
100
+
101
+ return store.getLocaleContent(locale).then(res => {
102
+ downloadLock = false;
103
+ messages = _index.default.get(res, 'body.messages', []);
104
+ langMessages[locale] = messages;
105
+ });
106
+ }
@@ -12,12 +12,8 @@ var _preact = require("preact");
12
12
 
13
13
  var _common = require("../common.js");
14
14
 
15
- var _jsApiLoader = require("@googlemaps/js-api-loader");
16
-
17
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
16
 
19
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
20
-
21
17
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
22
18
 
23
19
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -25,15 +21,14 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
25
21
  let CSS = (() => Promise.resolve().then(() => _interopRequireWildcard(require('./css.js'))))();
26
22
 
27
23
  class Contact extends _common.Com {
24
+ state = {
25
+ map: false,
26
+ map_loading: false,
27
+ map_initialized: false
28
+ };
29
+
28
30
  constructor(props) {
29
31
  super(props);
30
-
31
- _defineProperty(this, "state", {
32
- map: false,
33
- map_loading: false,
34
- map_initialized: false
35
- });
36
-
37
32
  this.showMap = this.showMap.bind(this);
38
33
  this.hideMap = this.hideMap.bind(this);
39
34
  }
@@ -44,7 +39,7 @@ class Contact extends _common.Com {
44
39
  map_initialized: true,
45
40
  map_loading: true
46
41
  });
47
- await new _jsApiLoader.Loader({
42
+ await new Loader({
48
43
  apiKey: 'YOUR_API_KEY',
49
44
  version: 'weekly'
50
45
  }).load();
@@ -13,8 +13,6 @@ var _plugin = _interopRequireDefault(require("./plugin.js"));
13
13
 
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
15
 
16
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
-
18
16
  var $link = document.createElement('link');
19
17
  $link.href = 'https://fonts.googleapis.com/css2?family=Roboto:wght@400;500&display=swap';
20
18
  $link.rel = 'stylesheet';
@@ -24,18 +22,6 @@ _index.default.preloadWebfonts(['Roboto'], [400, 500]);
24
22
 
25
23
  class Widget {
26
24
  constructor(ApiURL, FileURL, RealtimeURL, inmem, fake, agenttoken) {
27
- _defineProperty(this, "version", () => '4.4');
28
-
29
- _defineProperty(this, "setSetting", setting => this.store.setSetting({
30
- account_setting: setting
31
- }));
32
-
33
- _defineProperty(this, "getSetting", _ => ({
34
- account_setting: _index.default.cloneDeep(this.store.matchAccountSetting())
35
- }));
36
-
37
- _defineProperty(this, "getUser", () => _index.default.parseJSON(_index.default.stringify(this.store.matchUser())));
38
-
39
25
  this.domGate = new _index.default.Gate();
40
26
  this.store = new _store.default(ApiURL, FileURL, RealtimeURL, inmem, fake, agenttoken);
41
27
  window.sbz_store = this.store;
@@ -140,6 +126,15 @@ class Widget {
140
126
  this.pluginMgr.hideCurrentChatbox();
141
127
  }
142
128
 
129
+ version = () => '4.4';
130
+ setSetting = setting => this.store.setSetting({
131
+ account_setting: setting
132
+ });
133
+ getSetting = _ => ({
134
+ account_setting: _index.default.cloneDeep(this.store.matchAccountSetting())
135
+ });
136
+ getUser = () => _index.default.parseJSON(_index.default.stringify(this.store.matchUser()));
137
+
143
138
  async setLocale(locale) {
144
139
  await this.domGate.entry();
145
140
  return this.pluginMgr.setCurrentChatboxLocale(locale);
@@ -13,8 +13,6 @@ var _common = require("../common.js");
13
13
 
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
15
 
16
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
-
18
16
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
17
 
20
18
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -22,21 +20,20 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
22
20
  let notifCSS = (() => Promise.resolve().then(() => _interopRequireWildcard(require('./css.js'))))();
23
21
 
24
22
  class Notif extends _common.Com {
23
+ state = {
24
+ close: true,
25
+ cssready: false,
26
+ closeAnimation: true,
27
+ imageReady: false,
28
+ user: {},
29
+ timestamp: '',
30
+ message: '',
31
+ title: '',
32
+ last_show: 0
33
+ };
34
+
25
35
  constructor(props) {
26
36
  super(props);
27
-
28
- _defineProperty(this, "state", {
29
- close: true,
30
- cssready: false,
31
- closeAnimation: true,
32
- imageReady: false,
33
- user: {},
34
- timestamp: '',
35
- message: '',
36
- title: '',
37
- last_show: 0
38
- });
39
-
40
37
  setTimeout(async () => {
41
38
  let {
42
39
  body: impression
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _index = _interopRequireDefault(require("../util/index.js"));
9
+
10
+ var _common = require("../common.js");
11
+
12
+ var _preact = require("preact");
13
+
14
+ var _spinner = _interopRequireDefault(require("../chatbox/spinner.js"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ class AddressPicker extends _common.Com {
19
+ state = {
20
+ show: false,
21
+ searchValue: '',
22
+ addresses: []
23
+ };
24
+ filterRef = (0, _preact.createRef)();
25
+ overlayRef = (0, _preact.createRef)();
26
+
27
+ constructor(props) {
28
+ super(props);
29
+ document.addEventListener('touchmove', function (e) {});
30
+ }
31
+
32
+ onTouchMove = e => {
33
+ if (e.target === this.overlayRef.current) {
34
+ e.preventDefault();
35
+ e.stopPropagation();
36
+ }
37
+ };
38
+ hideDropdown = () => {
39
+ this.setState({
40
+ show: false,
41
+ searchValue: ''
42
+ });
43
+ };
44
+ onKeydown = e => {
45
+ if (e.key === 'Escape') {
46
+ if (!this.state.show) return;
47
+ if (this.state.searchValue) this.setState({
48
+ searchValue: ''
49
+ });else this.hideDropdown();
50
+ e.preventDefault();
51
+ e.stopPropagation();
52
+ }
53
+
54
+ if (e.key == 'Enter') {}
55
+ };
56
+ doSearch = _index.default.throttle(async () => {
57
+ let requestId = Date.now();
58
+ this.requestId = requestId;
59
+ let res = await this.props.store.suggest_addresses(this.state.searchValue);
60
+ if (this.requestId !== requestId) return;
61
+ this.setState({
62
+ addresses: _index.default.get(res, 'body.addresses', [])
63
+ });
64
+ }, 100);
65
+
66
+ componentDidMount() {
67
+ window.addEventListener('keydown', this.onKeydown);
68
+ }
69
+
70
+ componentWillUnmount() {
71
+ window.removeEventListener('keydown', this.onKeydown);
72
+ }
73
+
74
+ onChangeSearchValue = e => {
75
+ this.setState({
76
+ searchValue: e.target.value
77
+ });
78
+ this.props.onChangeAddress(e.target.value);
79
+ this.doSearch();
80
+ };
81
+
82
+ renderEmpty() {
83
+ return (0, _preact.h)("div", {
84
+ class: "dropdown_select_filter__empty"
85
+ }, (0, _preact.h)("img", {
86
+ class: "dropdown_select_filter__empty_img",
87
+ src: require('../../assets/img/not_found_search.png')
88
+ }), (0, _preact.h)("div", {
89
+ class: "muted",
90
+ style: "text-align: center !important;"
91
+ }, "Kh\xF4ng c\xF3 k\u1EBFt qu\u1EA3"));
92
+ }
93
+
94
+ renderLoading() {
95
+ return (0, _preact.h)("div", {
96
+ class: "dropdown_select_filter__empty pt-3"
97
+ }, (0, _preact.h)(_spinner.default, {
98
+ size: "40",
99
+ static: true
100
+ }), (0, _preact.h)("div", {
101
+ class: "muted mt-2",
102
+ style: "text-align: center !important;"
103
+ }, "\u0110ang t\u1EA3i d\u1EEF li\u1EC7u"));
104
+ }
105
+
106
+ toogleDropdown = async () => {
107
+ await this.setState({
108
+ show: true,
109
+ searchValue: this.props.initAddress || ''
110
+ });
111
+ this.focusFilter();
112
+ };
113
+
114
+ focusFilter() {
115
+ if (!this.filterRef.current) return;
116
+ this.filterRef.current.focus();
117
+ setTimeout(() => {
118
+ if (!this.filterRef.current) return;
119
+ this.filterRef.current.focus();
120
+ }, 100);
121
+ }
122
+
123
+ onSelect = item => {
124
+ this.props.onSelect(item);
125
+ this.hideDropdown();
126
+ };
127
+
128
+ renderDropdown() {
129
+ if (!this.state.show) return null;
130
+
131
+ let $items = _index.default.map(this.state.addresses, (addr, i) => {
132
+ let label = [((addr.address || '') + ' ' + normalize(addr.street)).trim()].join(', ');
133
+ let desc = [normalize(addr.ward), normalize(addr.district), normalize(addr.province)].join(', ');
134
+ return (0, _preact.h)("div", {
135
+ class: "dropdown_select__item",
136
+ onClick: _ => this.onSelect(addr),
137
+ key: i
138
+ }, (0, _preact.h)("div", null, (0, _preact.h)("b", null, label)), (0, _preact.h)("div", {
139
+ style: "opacity: 0.7 !important;"
140
+ }, desc));
141
+ });
142
+
143
+ let $filter = null;
144
+ let $img = (0, _preact.h)("img", {
145
+ class: "dropdown_select_filter__icon",
146
+ src: require('../../assets/img/search.svg')
147
+ });
148
+
149
+ if (this.props.loading) {
150
+ $img = (0, _preact.h)("img", {
151
+ class: "dropdown_select_filter__icon",
152
+ src: require('../../assets/img/loader.svg')
153
+ });
154
+ }
155
+
156
+ $filter = (0, _preact.h)("div", {
157
+ class: "dropdown_select_filter"
158
+ }, $img, (0, _preact.h)("input", {
159
+ ref: this.filterRef,
160
+ value: this.state.searchValue,
161
+ onInput: this.onChangeSearchValue,
162
+ type: "text",
163
+ class: "dropdown_select_filter_input "
164
+ }));
165
+ if ($items.length == 0) $items = this.renderEmpty();
166
+ if (this.props.loading) $items = this.renderLoading();
167
+ let style = `width: ${this.props.width || '150px'} !important;`;
168
+
169
+ if (this.props.full) {
170
+ style = ` top: 20px !important; left: 20px !important; right: 20px !important; width: unset !important; `;
171
+ return (0, _preact.h)("div", {
172
+ class: "dropdown_select__overlay",
173
+ ref: this.overlayRef,
174
+ onClick: this.hideDropdown,
175
+ onTouchMove: this.onTouchMove
176
+ }, (0, _preact.h)("div", {
177
+ class: "dropdown_select",
178
+ style: style,
179
+ onClick: e => {
180
+ e.preventDefault();
181
+ e.stopPropagation();
182
+ }
183
+ }, $filter, (0, _preact.h)("div", {
184
+ class: "dropdown_select__items"
185
+ }, $items)));
186
+ }
187
+
188
+ return (0, _preact.h)("div", {
189
+ class: "dropdown_select",
190
+ style: style
191
+ }, $filter, (0, _preact.h)("div", {
192
+ class: "dropdown_select__items"
193
+ }, $items));
194
+ }
195
+
196
+ onBackgroundScroll = e => {
197
+ console.log('EEEEEEE', e);
198
+ };
199
+
200
+ render() {
201
+ let $name = (0, _preact.h)("div", {
202
+ class: "text-truncate",
203
+ style: "flex: 1 !important;"
204
+ }, this.props.initAddress);
205
+ let style = 'position: relative !important;';
206
+
207
+ if (this.props.full) {
208
+ style = '';
209
+ }
210
+
211
+ return (0, _preact.h)("div", {
212
+ style: style
213
+ }, (0, _preact.h)(_common.Clickaway, {
214
+ onClickaway: this.hideDropdown
215
+ }, (0, _preact.h)("div", {
216
+ type: "text",
217
+ class: 'dropdown_select_input ' + this.props.extra_cls,
218
+ onClick: this.toogleDropdown
219
+ }, $name), this.renderDropdown()));
220
+ }
221
+
222
+ }
223
+
224
+ exports.default = AddressPicker;
225
+
226
+ function normalize(s) {
227
+ let ls = (s + '').toLowerCase();
228
+ if (ls.startsWith('tp ')) return s.substr(3);
229
+ if (ls.startsWith('thanh pho ')) return s.substr('thanh pho '.length);
230
+ if (ls.startsWith('thành phố ')) return s.substr('thành phố '.length);
231
+ if (ls.startsWith('tỉnh ')) return s.substr('tỉnh '.length);
232
+ if (ls.startsWith('huyện ')) return s.substr('huyện '.length);
233
+ if (ls.startsWith('tỉnh ')) return s.substr('tỉnh '.length);
234
+ if (ls.startsWith('xã ')) return s.substr('xã '.length);
235
+ if (ls.startsWith('thị trấn ')) return s.substr('thị trấn '.length);
236
+ if (ls.startsWith('thị xã ')) return s.substr('thị xã '.length);
237
+ if (ls.startsWith('đường ') && (s[7] < '0' || s[7] > '9')) return s.substr('đường '.length);
238
+ if (ls.startsWith('phường ') && (s[7] < '0' || s[7] > '9')) return s.substr('phường '.length);
239
+ if (ls.startsWith('quận ') && (s[7] < '0' || s[7] > '9')) return s.substr('quận '.length);
240
+ return s;
241
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _index = _interopRequireDefault(require("../util/index.js"));
9
+
10
+ var _time = _interopRequireDefault(require("../chatbox/time.js"));
11
+
12
+ var common = _interopRequireWildcard(require("../common.js"));
13
+
14
+ var _DropdownSelect = _interopRequireDefault(require("../chatbox/DropdownSelect.js"));
15
+
16
+ var _preact = require("preact");
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+
22
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
24
+ let promiseMainCSS = (() => Promise.resolve().then(() => _interopRequireWildcard(require('../chatbox/css.js'))))();
25
+
26
+ var $link = document.createElement('link');
27
+ $link.href = 'https://fonts.googleapis.com/css2?family=Roboto:wght@400;500&display=swap';
28
+ $link.rel = 'stylesheet';
29
+ document.head.append($link);
30
+
31
+ _index.default.preloadWebfonts(['Roboto'], [400, 500]);
32
+
33
+ let defaultAvatar = require('../../assets/img/default_avatar.png');
34
+
35
+ class Icon extends common.Com {
36
+ render() {
37
+ if (this.props.name == 'package') {
38
+ if (this.props.active) return (0, _preact.h)("img", {
39
+ style: "width: 18px !important;",
40
+ src: require('../../assets/img/package.svg')
41
+ });
42
+ return (0, _preact.h)("img", {
43
+ style: "width: 18px !important;",
44
+ src: require('../../assets/img/package_fade.svg')
45
+ });
46
+ }
47
+
48
+ if (this.props.name === 'shop') {
49
+ if (this.props.active) return (0, _preact.h)("img", {
50
+ style: "width: 18px !important;",
51
+ src: require('../../assets/img/shop.svg')
52
+ });
53
+ return (0, _preact.h)("img", {
54
+ style: "width: 18px !important;",
55
+ src: require('../../assets/img/shop_faded.svg')
56
+ });
57
+ }
58
+ }
59
+
60
+ }
61
+
62
+ exports.default = Icon;