@subiz/widget-v4 4.1.69 → 4.1.71

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 (102) hide show
  1. package/compiled_src/chatbox/AgentsAvatar.js +102 -108
  2. package/compiled_src/chatbox/ButtonAttachments.js +16 -23
  3. package/compiled_src/chatbox/Buttons.js +36 -43
  4. package/compiled_src/chatbox/ChatButton.js +5 -1
  5. package/compiled_src/chatbox/Rating.js +1 -1
  6. package/compiled_src/chatbox/Widget.js +1 -1
  7. package/dist/132.js +2796 -0
  8. package/dist/18e74ca84ff.132.js +1 -0
  9. package/dist/18e74ca84ff.27.js +1 -0
  10. package/dist/18e74ca84ff.278.js +1 -0
  11. package/dist/18e74ca84ff.459.js +1 -0
  12. package/dist/18e74ca84ff.490.js +1 -0
  13. package/dist/18e74ca84ff.497.js +1 -0
  14. package/dist/18e74ca84ff.74.js +1 -0
  15. package/dist/18e74ca84ff.997.js +1 -0
  16. package/dist/18e74ca84ff.app.js +1 -0
  17. package/dist/18e74ca84ff.index.html +33 -0
  18. package/dist/18e74ca84ff.library.html +33 -0
  19. package/dist/18e74ca84ff.library.js +1 -0
  20. package/dist/18e74ca84ff.preview.html +759 -0
  21. package/dist/18e74ca84ff.preview.js +1 -0
  22. package/dist/18e74ca84ff.screenshoot.js +1 -0
  23. package/dist/18e74ca84ff.webview.js +1 -0
  24. package/dist/27.js +107 -0
  25. package/dist/278.js +406 -0
  26. package/dist/459.js +107 -0
  27. package/dist/490.js +304 -0
  28. package/dist/497.js +6721 -0
  29. package/dist/74.js +372 -0
  30. package/dist/997.js +107 -0
  31. package/dist/HASH +1 -0
  32. package/dist/assets/img/Facebook.64607ec.png +0 -0
  33. package/dist/assets/img/Zalo.6845707.png +0 -0
  34. package/dist/assets/img/award1a.1a58e10.png +0 -0
  35. package/dist/assets/img/award3a.3b74423.png +0 -0
  36. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  37. package/dist/assets/img/award5.39eb7ae.png +0 -0
  38. package/dist/assets/img/bubble_default.7d5e4ab.svg +20 -0
  39. package/dist/assets/img/caret.998eb8f.svg +1 -0
  40. package/dist/assets/img/convos_empty.2353007.svg +72 -0
  41. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  42. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  43. package/dist/assets/img/done_gray.d7e8203.svg +4 -0
  44. package/dist/assets/img/done_green.b817fd4.svg +4 -0
  45. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  46. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  47. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  48. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  49. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  50. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  51. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  52. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  53. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  54. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  55. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  56. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  57. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  67. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  68. package/dist/assets/img/empty.29bed2d.svg +23 -0
  69. package/dist/assets/img/empty_1.0b98af0.svg +11 -0
  70. package/dist/assets/img/examplte_logo.f86535f.svg +1 -0
  71. package/dist/assets/img/external-link.90577cc.svg +1 -0
  72. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  73. package/dist/assets/img/ghn.070f8e3.svg +17 -0
  74. package/dist/assets/img/ghtk.326eac1.svg +18 -0
  75. package/dist/assets/img/image_default.be0698b.png +0 -0
  76. package/dist/assets/img/info.ebce7ea.svg +1 -0
  77. package/dist/assets/img/loader.37000a7.svg +1 -0
  78. package/dist/assets/img/loading_static.a27f0ac.svg +10 -0
  79. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  80. package/dist/assets/img/main-service2.9b99549.png +0 -0
  81. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  82. package/dist/assets/img/package.8d37d0f.svg +5 -0
  83. package/dist/assets/img/package_fade.763c001.svg +1 -0
  84. package/dist/assets/img/rating--average.1ea492c.svg +12 -0
  85. package/dist/assets/img/rating--great.e3d712e.svg +16 -0
  86. package/dist/assets/img/rating--poor.2938a25.svg +12 -0
  87. package/dist/assets/img/search.f9705ff.svg +1 -0
  88. package/dist/assets/img/send.6db52a9.svg +3 -0
  89. package/dist/assets/img/shop.f7dc7d8.svg +1 -0
  90. package/dist/assets/img/shop_faded.df7845a.svg +1 -0
  91. package/dist/assets/img/subiz-mono.877e9f5.svg +3 -0
  92. package/dist/assets/img/x.26fdfa3.svg +5 -0
  93. package/dist/malicious-app.js +15 -0
  94. package/dist/screenshoot.html +7 -0
  95. package/dist/screenshoot.js +6354 -0
  96. package/package.json +1 -1
  97. package/src/chatbox/AgentsAvatar.js +118 -134
  98. package/src/chatbox/ButtonAttachments.js +13 -20
  99. package/src/chatbox/Buttons.js +29 -37
  100. package/src/chatbox/ChatButton.js +6 -1
  101. package/src/chatbox/Rating.js +1 -1
  102. package/src/chatbox/Widget.js +2 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subiz/widget-v4",
3
- "version": "4.1.69",
3
+ "version": "4.1.71",
4
4
  "main": "./compiled_src/lib.js",
5
5
  "scripts": {
6
6
  "dev": "npx webpack serve --config webpack.dev.js",
@@ -3,161 +3,98 @@ import {Com} from '../common.js'
3
3
  import {h} from 'preact'
4
4
 
5
5
  // ['mode', 'tooltipPos', 'agent_ids', 'border'],
6
- export default class AgentsAvatar extends Com {
7
- constructor(props) {
8
- super(props)
9
- }
10
-
11
- render() {
12
- let accountSetting = this.props.plugin.chatbox
13
- let acc = this.props.store.matchAccount() || {}
14
- var tooltippos = this.props.tooltipPos || 'bottom'
15
- var mode = this.props.mode || 'primary'
16
-
17
- if (accountSetting && accountSetting.hide_agent_profile) {
18
- return (
19
- <div class={`group-avatar group-avatar--${mode}`}>
20
- <div class='d-inline-block pos-relative' data-tooltip={acc.name} data-tooltip-position={tooltippos}>
21
- <img
22
- width={35}
23
- height={35}
24
- alt='agent avatar left'
25
- class='avatar group-avatar--agent-left'
26
- src={this.props.store.replaceFileUrl(acc.logo_url) || require('../../assets/img/image_default.png')}
27
- />
28
- </div>
29
- </div>
30
- )
31
- }
32
-
33
- let agentM = this.props.store.matchAgent('*')
34
- var agents = sb.map(this.props.agent_ids, (id) => agentM[id])
35
- if (this.props.agent_ids === undefined || sb.size(this.props.agent_ids) === 0) {
36
- var agids = sb.get(accountSetting, 'header.agent_ids', [])
37
- agids = sb.filter(agids, (id) => !!agentM[id])
38
- if (agids.length !== 0) {
39
- agents = sb.map(agids, (id) => agentM[id])
40
- } else {
41
- agents = sb.filter(agentM, (agent) => agent.type === 'agent')
42
- }
43
- }
6
+ export default function AgentsAvatar(props) {
7
+ let accountSetting = props.plugin.chatbox
8
+ let acc = props.store.matchAccount() || {}
9
+ var tooltippos = props.tooltipPos || 'bottom'
10
+ var mode = props.mode || 'primary'
44
11
 
45
- agents = sb.filter(agents, (ag) => !!ag)
46
- if (agents.length === 0) {
47
- // use account avatar
48
- return (
49
- <div class={`group-avatar group-avatar--${mode}`}>
50
- <div class='d-inline-block pos-relative' data-tooltip={acc.name} data-tooltip-position={tooltippos}>
51
- <img
52
- width={35}
53
- height={35}
54
- alt='agent avatar left'
55
- class='avatar group-avatar--agent-left'
56
- src={this.props.store.replaceFileUrl(acc.logo_url) || require('../../assets/img/image_default.png')}
57
- />
58
- </div>
12
+ if (accountSetting && accountSetting.hide_agent_profile) {
13
+ return (
14
+ <div class={`group-avatar group-avatar--${mode}`}>
15
+ <div class='d-inline-block pos-relative' data-tooltip={acc.name} data-tooltip-position={tooltippos}>
16
+ <img
17
+ width={35}
18
+ height={35}
19
+ alt='agent avatar left'
20
+ class='avatar group-avatar--agent-left'
21
+ src={props.store.replaceFileUrl(acc.logo_url) || require('../../assets/img/image_default.png')}
22
+ />
59
23
  </div>
60
- )
61
- }
24
+ </div>
25
+ )
26
+ }
62
27
 
63
- // 1 agent
64
- if (agents.length === 1) {
65
- var agent = agents[0]
66
- var groupClass = mode === 'primary' ? 'group-avatar--agent-middle' : 'group-avatar--agent-left'
67
- return (
68
- <div class={`group-avatar group-avatar--${mode}`}>
69
- <div
70
- class='d-inline-block pos-relative'
71
- data-tooltip={agent.fullname || acc.name}
72
- data-tooltip-position={tooltippos}
73
- >
74
- <img
75
- width={35}
76
- height={35}
77
- class={`avatar ${groupClass}`}
78
- alt='agent avatar'
79
- src={this.props.store.replaceFileUrl(agent.avatar_url) || require('../../assets/img/default_avatar.png')}
80
- />
81
- </div>
82
- </div>
83
- )
28
+ let agentM = props.store.matchAgent('*')
29
+ var agents = sb.map(props.agent_ids, (id) => agentM[id])
30
+ if (props.agent_ids === undefined || sb.size(props.agent_ids) === 0) {
31
+ var agids = sb.get(accountSetting, 'header.agent_ids', [])
32
+ agids = sb.filter(agids, (id) => !!agentM[id])
33
+ if (agids.length !== 0) {
34
+ agents = sb.map(agids, (id) => agentM[id])
35
+ } else {
36
+ agents = sb.filter(agentM, (agent) => agent.type === 'agent')
84
37
  }
38
+ }
85
39
 
86
- // 2 agent
87
- if (agents.length === 2) {
88
- let leftAgent = agents[0]
89
- let rightAgent = agents[1]
90
- return (
91
- <div class={`group-avatar group-avatar--${mode}`}>
92
- <div
93
- class='d-inline-block pos-relative'
94
- data-tooltip={leftAgent.fullname || acc.name}
95
- data-tooltip-position={tooltippos}
96
- >
97
- <img
98
- width={35}
99
- height={35}
100
- alt='agent avatar left'
101
- class='avatar group-avatar--agent-left'
102
- src={
103
- this.props.store.replaceFileUrl(leftAgent.avatar_url) || require('../../assets/img/default_avatar.png')
104
- }
105
- />
106
- </div>
107
- <div
108
- class='d-inline-block pos-relative'
109
- data-tooltip={rightAgent.fullname || acc.name}
110
- data-tooltip-position={tooltippos}
111
- >
112
- <img
113
- alt='agent avatar right'
114
- width={35}
115
- height={35}
116
- class='avatar group-avatar--agent-right'
117
- src={
118
- this.props.store.replaceFileUrl(rightAgent.avatar_url) || require('../../assets/img/default_avatar.png')
119
- }
120
- />
121
- </div>
40
+ agents = sb.filter(agents, (ag) => !!ag)
41
+ if (agents.length === 0) {
42
+ // use account avatar
43
+ return (
44
+ <div class={`group-avatar group-avatar--${mode}`}>
45
+ <div class='d-inline-block pos-relative' data-tooltip={acc.name} data-tooltip-position={tooltippos}>
46
+ <img
47
+ width={35}
48
+ height={35}
49
+ alt='agent avatar left'
50
+ class='avatar group-avatar--agent-left'
51
+ src={props.store.replaceFileUrl(acc.logo_url) || require('../../assets/img/image_default.png')}
52
+ />
122
53
  </div>
123
- )
124
- }
125
-
126
- // >=3 agent
54
+ </div>
55
+ )
56
+ }
127
57
 
128
- let leftAgent = agents[0]
129
- let middleAgent = agents[1]
130
- let rightAgent = agents[2]
58
+ // 1 agent
59
+ if (agents.length === 1) {
60
+ var agent = agents[0]
61
+ var groupClass = mode === 'primary' ? 'group-avatar--agent-middle' : 'group-avatar--agent-left'
131
62
  return (
132
63
  <div class={`group-avatar group-avatar--${mode}`}>
133
64
  <div
134
65
  class='d-inline-block pos-relative'
135
- data-tooltip={leftAgent.fullname || acc.name}
66
+ data-tooltip={agent.fullname || acc.name}
136
67
  data-tooltip-position={tooltippos}
137
68
  >
138
69
  <img
139
70
  width={35}
140
71
  height={35}
141
- alt='agent avatar left'
142
- class='avatar group-avatar--agent-left'
143
- src={
144
- this.props.store.replaceFileUrl(leftAgent.avatar_url) || require('../../assets/img/default_avatar.png')
145
- }
72
+ class={`avatar ${groupClass}`}
73
+ alt='agent avatar'
74
+ src={props.store.replaceFileUrl(agent.avatar_url) || require('../../assets/img/default_avatar.png')}
146
75
  />
147
76
  </div>
77
+ </div>
78
+ )
79
+ }
80
+
81
+ // 2 agent
82
+ if (agents.length === 2) {
83
+ let leftAgent = agents[0]
84
+ let rightAgent = agents[1]
85
+ return (
86
+ <div class={`group-avatar group-avatar--${mode}`}>
148
87
  <div
149
88
  class='d-inline-block pos-relative'
150
- data-tooltip={middleAgent.fullname || acc.name}
89
+ data-tooltip={leftAgent.fullname || acc.name}
151
90
  data-tooltip-position={tooltippos}
152
91
  >
153
92
  <img
154
- alt='agent avatar middle'
155
93
  width={35}
156
94
  height={35}
157
- class='avatar group-avatar--agent-middle'
158
- src={
159
- this.props.store.replaceFileUrl(middleAgent.avatar_url) || require('../../assets/img/default_avatar.png')
160
- }
95
+ alt='agent avatar left'
96
+ class='avatar group-avatar--agent-left'
97
+ src={props.store.replaceFileUrl(leftAgent.avatar_url) || require('../../assets/img/default_avatar.png')}
161
98
  />
162
99
  </div>
163
100
  <div
@@ -166,16 +103,63 @@ export default class AgentsAvatar extends Com {
166
103
  data-tooltip-position={tooltippos}
167
104
  >
168
105
  <img
106
+ alt='agent avatar right'
169
107
  width={35}
170
108
  height={35}
171
- alt='agent avatar right'
172
109
  class='avatar group-avatar--agent-right'
173
- src={
174
- this.props.store.replaceFileUrl(rightAgent.avatar_url) || require('../../assets/img/default_avatar.png')
175
- }
110
+ src={props.store.replaceFileUrl(rightAgent.avatar_url) || require('../../assets/img/default_avatar.png')}
176
111
  />
177
112
  </div>
178
113
  </div>
179
114
  )
180
115
  }
116
+
117
+ // >=3 agent
118
+
119
+ let leftAgent = agents[0]
120
+ let middleAgent = agents[1]
121
+ let rightAgent = agents[2]
122
+ return (
123
+ <div class={`group-avatar group-avatar--${mode}`}>
124
+ <div
125
+ class='d-inline-block pos-relative'
126
+ data-tooltip={leftAgent.fullname || acc.name}
127
+ data-tooltip-position={tooltippos}
128
+ >
129
+ <img
130
+ width={35}
131
+ height={35}
132
+ alt='agent avatar left'
133
+ class='avatar group-avatar--agent-left'
134
+ src={props.store.replaceFileUrl(leftAgent.avatar_url) || require('../../assets/img/default_avatar.png')}
135
+ />
136
+ </div>
137
+ <div
138
+ class='d-inline-block pos-relative'
139
+ data-tooltip={middleAgent.fullname || acc.name}
140
+ data-tooltip-position={tooltippos}
141
+ >
142
+ <img
143
+ alt='agent avatar middle'
144
+ width={35}
145
+ height={35}
146
+ class='avatar group-avatar--agent-middle'
147
+ src={props.store.replaceFileUrl(middleAgent.avatar_url) || require('../../assets/img/default_avatar.png')}
148
+ />
149
+ </div>
150
+ <div
151
+ class='d-inline-block pos-relative'
152
+ data-tooltip={rightAgent.fullname || acc.name}
153
+ data-tooltip-position={tooltippos}
154
+ >
155
+ <img
156
+ width={35}
157
+ height={35}
158
+ alt='agent avatar right'
159
+ class='avatar group-avatar--agent-right'
160
+ src={props.store.replaceFileUrl(rightAgent.avatar_url) || require('../../assets/img/default_avatar.png')}
161
+ />
162
+ </div>
163
+ </div>
164
+ )
181
165
  }
@@ -1,26 +1,19 @@
1
1
  import Buttons from './Buttons.js'
2
2
  import sb from '../util/index.js'
3
- import { Com } from '../common.js'
4
- import { h } from 'preact'
3
+ import {h} from 'preact'
5
4
 
6
- export default class ButtonAttachments extends Com {
7
- constructor (props) {
8
- super(props)
9
- }
5
+ export default function ButtonAttachments(props) {
6
+ // dont support user sent button yet
7
+ let byType = sb.get(props.ev, 'by.type')
8
+ if (byType === 'user') return null
10
9
 
11
- render () {
12
- // dont support user sent button yet
13
- let byType = sb.get(this.props.ev, 'by.type')
14
- if (byType === 'user') return null
10
+ // filter out all button
11
+ let buttons = []
12
+ let attachments = sb.get(props.ev, 'data.message.attachments', [])
13
+ sb.each(attachments, (att, i) => {
14
+ if (!att || sb.get(att, 'type') !== 'button') return
15
+ sb.each(sb.get(att, 'buttons') || [], (btn) => buttons.push(btn))
16
+ })
15
17
 
16
- // filter out all button
17
- let buttons = []
18
- let attachments = sb.get(this.props.ev, 'data.message.attachments', [])
19
- sb.each(attachments, (att, i) => {
20
- if (!att || sb.get(att, 'type') !== 'button') return
21
- sb.each(sb.get(att, 'buttons') || [], btn => buttons.push(btn))
22
- })
23
-
24
- return <Buttons store={this.props.store} buttons={buttons} t={this.props.t}/>
25
- }
18
+ return <Buttons store={props.store} buttons={buttons} t={props.t} />
26
19
  }
@@ -1,44 +1,36 @@
1
1
  import sb from '../util/index.js'
2
- import {Com} from '../common.js'
3
2
  import {h} from 'preact'
4
3
 
5
- export default class Buttons extends Com {
6
- constructor(props) {
7
- super(props)
8
- }
4
+ export default function Buttons(props) {
5
+ if (sb.size(props.buttons) === 0) return null
6
+ var $buttons = sb.map(props.buttons, (button, index) => {
7
+ if (button.type === 'call_button') {
8
+ return (
9
+ <a class='url-button-attachment' href={'tel:' + button.phone_number} key={index} title={button.title}>
10
+ {props.t.i18n(button.i18n_title) || button.title}
11
+ </a>
12
+ )
13
+ }
9
14
 
10
- render() {
11
- if (sb.size(this.props.buttons) === 0) return null
12
- var $buttons = sb.map(this.props.buttons, (button, index) => {
13
- if (button.type === 'call_button') {
14
- return (
15
- <a class='url-button-attachment' href={'tel:' + button.phone_number} key={index} title={button.title}>
16
- {this.props.t.i18n(button.i18n_title) || button.title}
17
- </a>
18
- )
19
- }
15
+ if (button.type === 'url_button') {
16
+ return (
17
+ <a class='url-button-attachment' href={button.url} target='_blank' key={index} title={button.title}>
18
+ {props.t.i18n(button.i18n_title) || button.title || button.url}
19
+ </a>
20
+ )
21
+ }
20
22
 
21
- if (button.type === 'url_button') {
22
- return (
23
- <a class='url-button-attachment' href={button.url} target='_blank' key={index} title={button.title}>
24
- {this.props.t.i18n(button.i18n_title) || button.title || button.url}
25
- </a>
26
- )
27
- }
23
+ if (button.type === 'postback_button') {
24
+ return (
25
+ <a class='url-button-attachment' href='javascript:;' onClick={(_) => props.onSelect(button)}>
26
+ {props.t.i18n(button.i18n_title) || button.title}
27
+ </a>
28
+ )
29
+ }
28
30
 
29
- if (button.type === 'postback_button') {
30
- return (
31
- <a class='url-button-attachment' href='javascript:;' onClick={(_) => this.props.onSelect(button)}>
32
- {this.props.t.i18n(button.i18n_title) || button.title}
33
- </a>
34
- )
35
- }
36
-
37
- if (button.type === 'widget_ask_desktop_notify_button') return null
38
- if (button.type === 'widget_ask_contact_info_button') return null
39
- return null
40
- })
41
-
42
- return <div class='button-attachments'>{$buttons}</div>
43
- }
31
+ if (button.type === 'widget_ask_desktop_notify_button') return null
32
+ if (button.type === 'widget_ask_contact_info_button') return null
33
+ return null
34
+ })
35
+ return <div class='button-attachments'>{$buttons}</div>
44
36
  }
@@ -128,7 +128,12 @@ export default class ChatButton extends Com {
128
128
 
129
129
  let greeting = sb.get(accountSetting, 'greeting', {})
130
130
  let text = this.props.t.i18n(sb.get(greeting, 'greeting', {})) || greeting.message
131
- if (!text || !greeting.enabled) {
131
+
132
+ let enabled = greeting.enabled
133
+ if (this.props.store.isMobile()) {
134
+ enabled = enabled && !sb.get(greeting, 'mobile_disabled')
135
+ }
136
+ if (!text || !enabled) {
132
137
  this.setState({previewEvent: {}})
133
138
  return
134
139
  }
@@ -121,7 +121,7 @@ export default class Rating extends Com {
121
121
  let foundUser = false
122
122
  sb.map(this.props.store.listEvents(this.props.cid), (ev) => {
123
123
  if (!ev || !ev.by) return
124
- if (ev.by.type == 'user') foundUser = true
124
+ if (ev.by.type == 'user' && ev.type == 'message_sent') foundUser = true
125
125
  if (ev.type === 'conversation_state_updated' && sb.get(ev, 'data.conversation.state') === 'ended') {
126
126
  ended = ev
127
127
  }
@@ -258,7 +258,8 @@ export default class Widget extends Com {
258
258
  }
259
259
 
260
260
  this.setState({formData})
261
- if (!this.props.store.isMobile()) this.focusInput()
261
+ // dont steal focus on mobile or trying to override form
262
+ if (!this.props.store.isMobile() && !form._updated) this.focusInput()
262
263
  }
263
264
 
264
265
  onBooleanChange(key, e) {