@subiz/widget-v4 4.1.178 → 4.1.184

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 (111) hide show
  1. package/assets/less/base.less +28 -0
  2. package/assets/less/chatbox.less +4 -0
  3. package/assets/less/message.less +0 -8
  4. package/assets/less/widget.less +197 -2
  5. package/assets/less/widget_header.less +2 -1
  6. package/chat.js +0 -1
  7. package/compiled_src/chatbox/ChatButton.js +183 -82
  8. package/compiled_src/chatbox/Widget.js +2 -1
  9. package/compiled_src/chatbox/main.js +44 -53
  10. package/compiled_src/store/store.js +40 -17
  11. package/package.json +5 -5
  12. package/src/chatbox/ChatButton.js +197 -77
  13. package/src/chatbox/Widget.js +4 -2
  14. package/src/chatbox/main.js +30 -52
  15. package/src/store/store.js +56 -18
  16. package/dist/127.js +0 -273
  17. package/dist/132.js +0 -2802
  18. package/dist/185.js +0 -1827
  19. package/dist/1991cfb4656.127.js +0 -1
  20. package/dist/1991cfb4656.132.js +0 -1
  21. package/dist/1991cfb4656.185.js +0 -1
  22. package/dist/1991cfb4656.27.js +0 -1
  23. package/dist/1991cfb4656.278.js +0 -1
  24. package/dist/1991cfb4656.339.js +0 -1
  25. package/dist/1991cfb4656.459.js +0 -1
  26. package/dist/1991cfb4656.490.js +0 -1
  27. package/dist/1991cfb4656.74.js +0 -1
  28. package/dist/1991cfb4656.997.js +0 -1
  29. package/dist/1991cfb4656.app.js +0 -1
  30. package/dist/1991cfb4656.chat.html +0 -1
  31. package/dist/1991cfb4656.chat.js +0 -1
  32. package/dist/1991cfb4656.form.html +0 -1
  33. package/dist/1991cfb4656.form.js +0 -1
  34. package/dist/1991cfb4656.index.html +0 -72
  35. package/dist/1991cfb4656.library.html +0 -72
  36. package/dist/1991cfb4656.library.js +0 -1
  37. package/dist/1991cfb4656.preview.html +0 -759
  38. package/dist/1991cfb4656.preview.js +0 -1
  39. package/dist/1991cfb4656.webview.js +0 -1
  40. package/dist/27.js +0 -107
  41. package/dist/278.js +0 -417
  42. package/dist/459.js +0 -107
  43. package/dist/490.js +0 -305
  44. package/dist/74.js +0 -372
  45. package/dist/997.js +0 -107
  46. package/dist/HASH +0 -1
  47. package/dist/assets/img/Facebook.64607ec.png +0 -0
  48. package/dist/assets/img/Zalo.6845707.png +0 -0
  49. package/dist/assets/img/award1a.1a58e10.png +0 -0
  50. package/dist/assets/img/award3a.3b74423.png +0 -0
  51. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  52. package/dist/assets/img/award5.39eb7ae.png +0 -0
  53. package/dist/assets/img/bubble_default.7d5e4ab.svg +0 -20
  54. package/dist/assets/img/caret.998eb8f.svg +0 -1
  55. package/dist/assets/img/convos_empty.2353007.svg +0 -72
  56. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  57. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  58. package/dist/assets/img/done_gray.d7e8203.svg +0 -4
  59. package/dist/assets/img/done_green.b817fd4.svg +0 -4
  60. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  67. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  68. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  69. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  70. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  71. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  72. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  73. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  74. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  75. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  76. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  77. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  78. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  79. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  80. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  81. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  82. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  83. package/dist/assets/img/empty.29bed2d.svg +0 -23
  84. package/dist/assets/img/empty_1.0b98af0.svg +0 -11
  85. package/dist/assets/img/examplte_logo.f86535f.svg +0 -1
  86. package/dist/assets/img/external-link.90577cc.svg +0 -1
  87. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  88. package/dist/assets/img/ghn.070f8e3.svg +0 -17
  89. package/dist/assets/img/ghtk.326eac1.svg +0 -18
  90. package/dist/assets/img/image_default.be0698b.png +0 -0
  91. package/dist/assets/img/info.ebce7ea.svg +0 -1
  92. package/dist/assets/img/loader.37000a7.svg +0 -1
  93. package/dist/assets/img/loading_static.a27f0ac.svg +0 -10
  94. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  95. package/dist/assets/img/main-service2.9b99549.png +0 -0
  96. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  97. package/dist/assets/img/package.8d37d0f.svg +0 -5
  98. package/dist/assets/img/package_fade.763c001.svg +0 -1
  99. package/dist/assets/img/rating--average.1ea492c.svg +0 -12
  100. package/dist/assets/img/rating--great.e3d712e.svg +0 -16
  101. package/dist/assets/img/rating--poor.2938a25.svg +0 -12
  102. package/dist/assets/img/search.f9705ff.svg +0 -1
  103. package/dist/assets/img/send.6db52a9.svg +0 -3
  104. package/dist/assets/img/shop.f7dc7d8.svg +0 -1
  105. package/dist/assets/img/shop_faded.df7845a.svg +0 -1
  106. package/dist/assets/img/stars_v2.79cf728.png +0 -0
  107. package/dist/assets/img/subiz-mono.8fbc067.svg +0 -3
  108. package/dist/assets/img/x.26fdfa3.svg +0 -5
  109. package/dist/malicious-app.js +0 -17
  110. package/dist/screenshoot.html +0 -7
  111. package/dist/screenshoot.js +0 -11988
@@ -250,8 +250,9 @@ class Widget extends _common.Com {
250
250
  let $body = null;
251
251
  if (this.props.view === 'list') $body = this.renderConvoList();else if (showform) $body = this.renderForm(form, submitLabel, formName);else $body = this.renderChat();
252
252
  let position = _index.default.get(accountSetting, 'desktop_button.position') || 'right';
253
- if (this.props.store.isMobile()) position = _index.default.get(accountSetting, 'mobile_button.position', position);
253
+ if (this.props.store.isMobile() || this.props.store.isEmbededChatMode()) position = _index.default.get(accountSetting, 'mobile_button.position', position);
254
254
  let cls = 'widget-container widget-container--' + position;
255
+ if (this.props.store.isEmbededChatMode()) cls += ' embed-chat';
255
256
  if (!this.props.store.isMobile() && _index.default.get(accountSetting, 'window_mode') === 'full') cls += ' widget-container--full';
256
257
  if (!this.props.isShow) cls += ' widget-container--hide';
257
258
  let hideheader = _index.default.get(accountSetting, 'header.hidden', false);
@@ -40,10 +40,7 @@ class Main extends _common.Com {
40
40
  this.$cssStyleDiv.id = 'subiz-style-for-' + this.props.plugin.id;
41
41
  }
42
42
  this.setState({
43
- cssReady: false,
44
- isShowWidget: false,
45
- widgetView: '',
46
- widgetConvoId: ''
43
+ cssReady: false
47
44
  });
48
45
  this.checkExpand();
49
46
  this.props.store.onResetCSS(this, () => this.refreshCSS());
@@ -59,15 +56,6 @@ class Main extends _common.Com {
59
56
  this.setState({
60
57
  cssReady: true
61
58
  });
62
- if (this.props.store.matchIsOpen() && this.props.store.matchLastview().view) {
63
- if (this.props.store.isMobile()) return;
64
- this.showWidget(Object.assign({}, this.props.store.matchLastview().opts, {
65
- view: this.props.store.matchLastview().view
66
- }));
67
- } else {
68
- restoreViewport();
69
- if (!this.state.isShowWidget) this.hideWidget();
70
- }
71
59
  }
72
60
  render() {
73
61
  if (!this.state.cssReady) {
@@ -83,22 +71,27 @@ class Main extends _common.Com {
83
71
  return null;
84
72
  }
85
73
  if (typeof sbz_info != 'undefined') sbz_info.render_chatbox_main = _index.default.Date.now();
74
+ let lastview = this.props.store.matchLastview() || {};
75
+ let isShowWidget = lastview.screen === 'widget';
76
+ let widgetView = lastview.view;
77
+ let widgetConvoId = _index.default.get(lastview, 'opts.cid');
86
78
  return (0, _preact.h)("div", {
87
- class: this.props.store.isMobile() ? 'mobile' : 'desktop'
79
+ class: this.props.store.isMobile() || this.props.store.isEmbededChatMode() ? 'mobile' : 'desktop'
88
80
  }, (0, _preact.h)(_ChatButton.default, {
89
81
  plugin: this.props.plugin,
90
82
  store: this.props.store,
91
83
  key: "chat_button",
92
84
  ref: this.refButton,
93
- isShow: !this.state.isShowWidget,
85
+ isShow: !isShowWidget,
94
86
  onClick: e => this.showWidget(e),
87
+ onSelectQuickReply: msg => this.onSelectQuickReply(msg),
95
88
  t: this.props.t
96
89
  }), (0, _preact.h)(_Widget.default, {
97
90
  plugin: this.props.plugin,
98
91
  store: this.props.store,
99
- view: this.state.widgetView,
100
- cid: this.state.widgetConvoId,
101
- isShow: this.state.isShowWidget,
92
+ view: widgetView,
93
+ cid: widgetConvoId,
94
+ isShow: isShowWidget,
102
95
  onClose: a => this.onWidgetClose(a),
103
96
  onGo: a => this.showWidget(a),
104
97
  t: this.props.t,
@@ -114,7 +107,8 @@ class Main extends _common.Com {
114
107
  if (!$widget) return;
115
108
  if ($widget.wasFormInputed) return;
116
109
  if (ev.type !== 'message_sent') return;
117
- if (!this.state.isShowWidget) return;
110
+ let isShowWidget = _index.default.get(this.props.store.matchLastview(), 'screen') === 'widget';
111
+ if (!isShowWidget) return;
118
112
  let byType = _index.default.get(ev, 'by.type');
119
113
  let byid = _index.default.get(ev, 'by.id') || '';
120
114
  if (!byid.startsWith('bb') || byType !== 'agent') return;
@@ -128,49 +122,48 @@ class Main extends _common.Com {
128
122
  checkExpand() {
129
123
  if (this.props.store.isMobile()) return;
130
124
  if (this.props.plugin._no_auto_expand) return;
131
- if (this.props.store.matchHasManuallyClosed()) return;
125
+ return;
132
126
  let convoM = this.props.store.matchConvo('*');
133
127
  let redconvo = _index.default.find(convoM, convo => !_index.default.isConvoSeen(convo, this.props.store.matchUser().id));
134
128
  if (!redconvo || !redconvo.id) return;
135
- if (!this.state.isShowWidget) this.showWidget({
129
+ let isShowWidget = _index.default.get(this.props.store.matchLastview(), 'screen') === 'widget';
130
+ if (!isShowWidget) this.showWidget({
136
131
  view: 'chat',
137
132
  cid: redconvo.id
138
133
  });
139
134
  }
140
- getCurrentView() {
141
- return {
142
- is_show_widget: this.state.isShowWidget,
143
- conversation_id: this.state.widgetConvoId,
144
- view: this.state.widgetView
145
- };
135
+ onSelectQuickReply(message) {
136
+ this.showWidget({
137
+ view: 'chat',
138
+ cid: message.conversation_id
139
+ });
140
+ this.forceUpdate(() => {
141
+ this.refWidget.current && this.refWidget.current.sendMessage(message);
142
+ });
146
143
  }
147
144
  async showWidget(p) {
148
- this.refButton.current && this.refButton.current.ClearPreview();
149
- if (!p.view) {
150
- let lastview = this.props.store.matchLastview() || {};
151
- p.view = _index.default.get(lastview, 'view');
152
- p.cid = _index.default.get(lastview, 'opts.cid');
153
- }
154
- p = p || {};
145
+ let cid = p.cid;
146
+ let newView = {
147
+ screen: 'widget',
148
+ minimized: 0,
149
+ view: p.view,
150
+ previewEvent: {},
151
+ opts: {
152
+ cid
153
+ }
154
+ };
155
155
  if (!p.view && !p.cid) {
156
156
  let convoM = this.props.store.matchConvo('*');
157
157
  let redconvo = _index.default.find(convoM, convo => !_index.default.isConvoSeen(convo, this.props.store.matchUser().id));
158
- p.cid = _index.default.get(redconvo, 'id', _index.default.get(convoM, '0.id'));
159
- p.view = 'chat';
158
+ cid = _index.default.get(redconvo, 'id', _index.default.get(convoM, '0.id'));
159
+ newView.view = 'chat';
160
+ newView.opts = {
161
+ cid
162
+ };
160
163
  }
161
164
  if (this.props.store.isMobile()) modifyViewport();
162
- this.setState({
163
- widgetConvoId: p.cid,
164
- widgetView: p.view
165
- });
166
- this.props.store.setIsOpen(true);
165
+ this.props.store.updateLastview(newView);
167
166
  this.forceUpdate();
168
- this.setState({
169
- isShowWidget: true
170
- });
171
- this.props.store.setLastview(p.view, {
172
- cid: p.cid
173
- });
174
167
  }
175
168
  applyMessage(text) {
176
169
  this.refWidget.current && this.refWidget.current.applyMessage(text);
@@ -186,15 +179,13 @@ class Main extends _common.Com {
186
179
  }
187
180
  hideWidget() {
188
181
  restoreViewport();
189
- this.props.store.setIsOpen(false);
190
- this.setState({
191
- isShowWidget: false
182
+ this.props.store.updateLastview({
183
+ screen: 'button',
184
+ previewEvent: {}
192
185
  });
186
+ this.forceUpdate();
193
187
  }
194
188
  onWidgetClose() {
195
- this.refButton.current && this.refButton.current.ClearPreview();
196
- this.refButton.current && this.refButton.current.ClosePreview();
197
- this.props.store.setHasManuallyClosed();
198
189
  this.hideWidget();
199
190
  this.props.store.emitCloseWidgetEvent();
200
191
  }
@@ -50,6 +50,24 @@ class Store {
50
50
  return unreadcount;
51
51
  });
52
52
  _defineProperty(this, "matchPlugin", () => {
53
+ if (this.is_embed_chat_mode) {
54
+ let pluginM = this.cache.match('plugin');
55
+ if (_index.default.size(this.forcePlugins) > 0) pluginM = this.forcePlugins;
56
+ let chatboxs = _index.default.filter(pluginM, (plugin, id) => plugin && plugin.type === 'chatbox');
57
+ if (_index.default.size(chatboxs) === 0) {
58
+ console.error('no chatbox found.');
59
+ return;
60
+ }
61
+ let chatbox = _index.default.find(chatboxs, chatbox => !!chatbox);
62
+ if (!chatbox) {
63
+ chatbox = chatboxs[0];
64
+ }
65
+ chatbox = _index.default.cloneDeep(chatbox);
66
+ chatbox.triggers = undefined;
67
+ return {
68
+ [chatbox.id]: chatbox
69
+ };
70
+ }
53
71
  if (_index.default.size(this.forcePlugins) > 0) return _index.default.cloneDeep(this.forcePlugins);
54
72
  return _index.default.cloneDeep(this.cache.match('plugin')) || {};
55
73
  });
@@ -137,12 +155,21 @@ class Store {
137
155
  _defineProperty(this, "matchLastview", () => {
138
156
  let lastView = this.kv.match('lastview') || {};
139
157
  let user = this.cache.match('user') || {};
140
- if (!user.id) return {};
141
- if (lastView.user_id != user.id) return {};
158
+ if (!user.id) return {
159
+ screen: 'preview'
160
+ };
161
+ if (lastView.user_id != user.id) return {
162
+ screen: 'preview'
163
+ };
164
+ if (!lastView.screen) {
165
+ lastView.screen = 'preview';
166
+ if (lastView.view === 'list' || lastView.view === 'chat') {
167
+ lastView.screen = 'widget';
168
+ }
169
+ }
142
170
  return lastView;
143
171
  });
144
172
  _defineProperty(this, "matchIsOpen", () => !!this.kv.match('isopen'));
145
- _defineProperty(this, "matchHasManuallyClosed", () => !!this.kv.match('hasManuallyClosed'));
146
173
  _defineProperty(this, "matchClosePreviewAt", () => this.kv.match('close_preview_at') || 0);
147
174
  _defineProperty(this, "checkFormToken", (accid, token) => this.api.checkFormToken(accid, token));
148
175
  _defineProperty(this, "submitForm2", (accid, token, data) => this.api.submitForm2(accid, token, data));
@@ -176,24 +203,20 @@ class Store {
176
203
  _defineProperty(this, "onConnection", (o, cb) => this.pubsub.on2(o, 'connection', cb));
177
204
  _defineProperty(this, "onResetCSS", (o, cb) => this.pubsub.on2(o, 'resetCSS', cb));
178
205
  _defineProperty(this, "onHighlight", (o, cb) => this.pubsub.on2(o, 'highlight', cb));
179
- _defineProperty(this, "setHasManuallyClosed", () => this.kv.put('hasManuallyClosed', true));
180
- _defineProperty(this, "setIsOpen", isopen => {
181
- let lastisopen = this.kv.match('isopen');
182
- this.kv.put('isopen', isopen);
183
- if (!lastisopen && isopen) {
184
- sendEventToThirdParty('SUBIZ Chat', 'Opened', 'Subiz Windows');
185
- }
186
- });
187
206
  _defineProperty(this, "closePreview", () => this.kv.put('close_preview_at', new _index.default.Date().getTime()));
188
- _defineProperty(this, "setLastview", (view, opts) => {
207
+ _defineProperty(this, "updateLastview", obj => {
189
208
  let user = this.cache.match('user') || {};
190
209
  if (!user.id) return;
191
- this.kv.put('lastview', {
192
- user_id: user.id,
193
- view,
194
- opts
195
- });
210
+ let lastview = this.matchLastview() || {};
211
+ let newview = {
212
+ ...lastview,
213
+ ...obj,
214
+ user_id: user.id
215
+ };
216
+ this.kv.put('lastview', newview);
217
+ this.pubsub.publish('lastview', newview, lastview);
196
218
  });
219
+ _defineProperty(this, "onLastview", (o, cb) => this.pubsub.on2(o, 'lastview', cb));
197
220
  _defineProperty(this, "timeDiff", 0);
198
221
  this.connectionStatus = 'active';
199
222
  this.CONNECTION_CHECK_INTERVAL = 3000;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subiz/widget-v4",
3
- "version": "4.1.178",
3
+ "version": "4.1.184",
4
4
  "main": "./compiled_src/lib.js",
5
5
  "scripts": {
6
6
  "dev": "npx webpack serve --config webpack.dev.js",
@@ -13,10 +13,10 @@
13
13
  "@subiz/flow": "^1.1.0",
14
14
  "@subiz/wsclient": "^4.0.34",
15
15
  "cookie_js": "1.4.2",
16
- "core-js": "^3.45.1",
16
+ "core-js": "^3.46.0",
17
17
  "css-loader": "5.2.7",
18
18
  "file-loader": "^6.2.0",
19
- "less": "^4.4.1",
19
+ "less": "^4.4.2",
20
20
  "less-loader": "^12.3.0",
21
21
  "preact": "10.19.3"
22
22
  },
@@ -29,8 +29,8 @@
29
29
  "babel-loader": "^10.0.0",
30
30
  "babel-plugin-syntax-jsx": "^6.18.0",
31
31
  "html-webpack-plugin": "^5.6.4",
32
- "puppeteer": "^24.22.2",
33
- "webpack": "^5.101.3",
32
+ "puppeteer": "^24.24.0",
33
+ "webpack": "^5.102.1",
34
34
  "webpack-bundle-analyzer": "^4.10.2",
35
35
  "webpack-cli": "^6.0.1",
36
36
  "webpack-dev-server": "^5.2.2"