@subiz/widget-v4 4.0.91 → 4.0.93
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/compiled_src/bot.js +0 -11
- package/compiled_src/call/call.js +0 -61
- package/compiled_src/call/css.js +0 -2
- package/compiled_src/chatbox/AgentsAvatar.js +0 -16
- package/compiled_src/chatbox/AudioAttachments.js +0 -14
- package/compiled_src/chatbox/ButtonAttachments.js +1 -14
- package/compiled_src/chatbox/Buttons.js +0 -13
- package/compiled_src/chatbox/ChatButton.js +1 -78
- package/compiled_src/chatbox/DropdownSelect.js +3 -44
- package/compiled_src/chatbox/Emoji.js +0 -7
- package/compiled_src/chatbox/Event.js +0 -59
- package/compiled_src/chatbox/Events.js +4 -44
- package/compiled_src/chatbox/FileAttachments.js +0 -14
- package/compiled_src/chatbox/FormAttachment.js +1 -52
- package/compiled_src/chatbox/FormAttachments.js +0 -14
- package/compiled_src/chatbox/FormSubmitAttachments.js +0 -11
- package/compiled_src/chatbox/GenericTemplateAttachments.js +1 -20
- package/compiled_src/chatbox/Header.js +1 -46
- package/compiled_src/chatbox/ImageAttachments.js +0 -16
- package/compiled_src/chatbox/InfoMessage.js +0 -13
- package/compiled_src/chatbox/ListField.js +0 -16
- package/compiled_src/chatbox/MessageInput.js +1 -47
- package/compiled_src/chatbox/Order.js +0 -35
- package/compiled_src/chatbox/OrderAttachments.js +1 -23
- package/compiled_src/chatbox/PoweredBy.js +0 -7
- package/compiled_src/chatbox/ProductAttachments.js +0 -19
- package/compiled_src/chatbox/QuickReplies.js +0 -18
- package/compiled_src/chatbox/Rating.js +0 -37
- package/compiled_src/chatbox/ShadowDomRoot.js +0 -9
- package/compiled_src/chatbox/TextMessage.js +0 -64
- package/compiled_src/chatbox/Typing.js +0 -15
- package/compiled_src/chatbox/VideoAttachments.js +0 -14
- package/compiled_src/chatbox/Widget.js +6 -167
- package/compiled_src/chatbox/css.js +0 -2
- package/compiled_src/chatbox/dragscroll.js +1 -5
- package/compiled_src/chatbox/main.js +3 -43
- package/compiled_src/chatbox/releaseAnimation.js +0 -11
- package/compiled_src/chatbox/spinner.js +0 -10
- package/compiled_src/chatbox/time.js +0 -22
- package/compiled_src/chatbox/touchscroll.js +0 -7
- package/compiled_src/common.js +0 -22
- package/compiled_src/contact/contact.js +2 -52
- package/compiled_src/contact/css.js +0 -2
- package/compiled_src/lib.js +19 -46
- package/compiled_src/notif/css.js +0 -2
- package/compiled_src/notif/notif.js +0 -63
- package/compiled_src/order/address_picker.js +4 -38
- package/compiled_src/order/icon.js +0 -16
- package/compiled_src/order/index.js +1 -34
- package/compiled_src/order/order.js +2 -156
- package/compiled_src/plugin.js +1 -77
- package/compiled_src/popup/countdown.js +2 -33
- package/compiled_src/popup/css.js +0 -2
- package/compiled_src/popup/popup.js +2 -165
- package/compiled_src/popup/tick.core.commonjs.js +72 -222
- package/compiled_src/popup/tick.view.flip.commonjs.js +23 -31
- package/compiled_src/store/api.js +103 -66
- package/compiled_src/store/api_fake.js +3 -39
- package/compiled_src/store/realtime_fake.js +0 -6
- package/compiled_src/store/store.js +46 -257
- package/compiled_src/util/campaign.js +0 -13
- package/compiled_src/util/common.js +15 -190
- package/compiled_src/util/common.test.js +0 -4
- package/compiled_src/util/extractor.js +1 -21
- package/compiled_src/util/extractor.test.js +0 -3
- package/compiled_src/util/gate.js +0 -7
- package/compiled_src/util/gate.test.js +1 -2
- package/compiled_src/util/index.js +1 -7
- package/compiled_src/util/mutex.js +31 -0
- package/compiled_src/util/op.js +1 -14
- package/compiled_src/util/pubsub.js +0 -6
- package/compiled_src/util/pubsub.test.js +0 -2
- package/package.json +12 -12
- package/src/chatbox/main.js +3 -3
- package/src/lib.js +24 -2
- package/src/store/api.js +111 -22
- package/src/store/api_fake.js +5 -6
- package/src/store/store.js +38 -14
- package/src/util/common.js +0 -4
- package/src/util/index.js +1 -0
- package/src/util/mutex.js +27 -0
- package/dist/0b82fa7e5c3b07b40a44.png +0 -1
- package/dist/0f4af006e38ee8b93633.png +0 -1
- package/dist/132.js +0 -6777
- package/dist/178.js +0 -573
- package/dist/17f00e48d38.132.js +0 -1
- package/dist/17f00e48d38.178.js +0 -1
- package/dist/17f00e48d38.213.js +0 -1
- package/dist/17f00e48d38.335.js +0 -1
- package/dist/17f00e48d38.362.js +0 -1
- package/dist/17f00e48d38.441.js +0 -1
- package/dist/17f00e48d38.605.js +0 -1
- package/dist/17f00e48d38.678.js +0 -1
- package/dist/17f00e48d38.782.js +0 -1
- package/dist/17f00e48d38.app.js +0 -1
- package/dist/17f00e48d38.index.html +0 -22
- package/dist/17f00e48d38.library.html +0 -22
- package/dist/17f00e48d38.library.js +0 -1
- package/dist/17f00e48d38.preview.html +0 -759
- package/dist/17f00e48d38.preview.js +0 -1
- package/dist/17f00e48d38.screenshoot.js +0 -1
- package/dist/1ea1c6cd21d25176810c.png +0 -1
- package/dist/213.js +0 -3188
- package/dist/292d42404e1b03398f61.png +0 -1
- package/dist/312d376370831b7bea83.png +0 -1
- package/dist/313d1bfc1cf776d1aefe.png +0 -1
- package/dist/335.js +0 -411
- package/dist/362.js +0 -157
- package/dist/441.js +0 -2732
- package/dist/4aa58bb7a66bb44975aa.png +0 -1
- package/dist/56ce063bc6c81adb7322.png +0 -1
- package/dist/605.js +0 -328
- package/dist/678.js +0 -157
- package/dist/6a411166ef5cc79e0714.png +0 -1
- package/dist/6faf403782fefacc1649.png +0 -1
- package/dist/782.js +0 -204
- package/dist/79dca33c68fab79c067f.png +0 -1
- package/dist/82da1578fa84f9debaeb.png +0 -1
- package/dist/8b8e0f0824743974b282.png +0 -1
- package/dist/8d551390d81e39130a3c.png +0 -1
- package/dist/9fc61b9479877ebdb6c7.png +0 -1
- package/dist/HASH +0 -1
- package/dist/a165d31dcb3dc90f1057.png +0 -1
- package/dist/a98d4a5698812c4426b3.png +0 -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 +0 -20
- package/dist/assets/img/caret.998eb8f.svg +0 -1
- package/dist/assets/img/convos_empty.2353007.svg +0 -72
- 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 +0 -4
- package/dist/assets/img/done_green.b817fd4.svg +0 -4
- 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 +0 -23
- package/dist/assets/img/empty_1.0b98af0.svg +0 -11
- package/dist/assets/img/examplte_logo.f86535f.svg +0 -1
- package/dist/assets/img/external-link.90577cc.svg +0 -1
- package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
- package/dist/assets/img/ghn.070f8e3.svg +0 -17
- package/dist/assets/img/ghtk.326eac1.svg +0 -18
- package/dist/assets/img/image_default.be0698b.png +0 -0
- package/dist/assets/img/info.ebce7ea.svg +0 -1
- package/dist/assets/img/loader.37000a7.svg +0 -1
- package/dist/assets/img/loading_static.8f403ae.svg +0 -10
- package/dist/assets/img/main-service1.d536cc2.png +0 -0
- package/dist/assets/img/main-service2.9b99549.png +0 -0
- package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
- package/dist/assets/img/package.8d37d0f.svg +0 -5
- package/dist/assets/img/package_fade.763c001.svg +0 -1
- package/dist/assets/img/rating--average.1ea492c.svg +0 -12
- package/dist/assets/img/rating--great.e3d712e.svg +0 -16
- package/dist/assets/img/rating--poor.2938a25.svg +0 -12
- package/dist/assets/img/search.f9705ff.svg +0 -1
- package/dist/assets/img/send.6db52a9.svg +0 -3
- package/dist/assets/img/shop.f7dc7d8.svg +0 -1
- package/dist/assets/img/shop_faded.df7845a.svg +0 -1
- package/dist/assets/img/subiz-mono.877e9f5.svg +0 -3
- package/dist/assets/img/x.26fdfa3.svg +0 -5
- package/dist/c41606bf9d1b604e46d5.png +0 -1
- package/dist/ce1f7450ce6c1aacd330.png +0 -1
- package/dist/cf8c01e88f4770a6e3e5.png +0 -1
- package/dist/dfbcfeab1d5622a737e2.png +0 -1
- package/dist/e4893ed8c2f7b8329919.png +0 -1
- package/dist/ec2ab4eb4ef73d186186.png +0 -1
- package/dist/malicious-app.js +0 -13
- package/dist/screenshoot.html +0 -7
- package/dist/screenshoot.js +0 -5919
|
@@ -4,66 +4,39 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _index = _interopRequireDefault(require("../util/index.js"));
|
|
9
|
-
|
|
10
8
|
var _Emoji = _interopRequireDefault(require("./Emoji.js"));
|
|
11
|
-
|
|
12
9
|
var _PoweredBy = _interopRequireDefault(require("./PoweredBy.js"));
|
|
13
|
-
|
|
14
10
|
var _AgentsAvatar = _interopRequireDefault(require("./AgentsAvatar.js"));
|
|
15
|
-
|
|
16
11
|
var _Header = _interopRequireDefault(require("./Header.js"));
|
|
17
|
-
|
|
18
12
|
var _MessageInput = _interopRequireDefault(require("./MessageInput.js"));
|
|
19
|
-
|
|
20
13
|
var _Events = _interopRequireDefault(require("./Events.js"));
|
|
21
|
-
|
|
22
14
|
var _Typing = _interopRequireDefault(require("./Typing.js"));
|
|
23
|
-
|
|
24
15
|
var _Rating = _interopRequireDefault(require("./Rating.js"));
|
|
25
|
-
|
|
26
16
|
var _Order = _interopRequireDefault(require("./Order.js"));
|
|
27
|
-
|
|
28
17
|
var _ListField = _interopRequireDefault(require("./ListField.js"));
|
|
29
|
-
|
|
30
18
|
var _spinner = _interopRequireDefault(require("./spinner.js"));
|
|
31
|
-
|
|
32
19
|
var _time = _interopRequireDefault(require("./time.js"));
|
|
33
|
-
|
|
34
20
|
var _common = require("../common.js");
|
|
35
|
-
|
|
36
21
|
var _preact = require("preact");
|
|
37
|
-
|
|
38
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
39
|
-
|
|
40
23
|
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; }
|
|
41
|
-
|
|
42
24
|
var send = require('../../assets/img/send.svg');
|
|
43
|
-
|
|
44
25
|
var checkedimg = require('../../assets/img/done_gray.svg');
|
|
45
|
-
|
|
46
26
|
var empty = require('../../assets/img/empty.svg');
|
|
47
|
-
|
|
48
27
|
const defaultAvatar = 'https://file-subiz.com/fiqoahedjbgwclpouoml-avatar_default_baa8a1d7.png';
|
|
49
|
-
|
|
50
28
|
class Widget extends _common.Com {
|
|
51
29
|
constructor(props) {
|
|
52
30
|
super(props);
|
|
53
|
-
|
|
54
31
|
_defineProperty(this, "msgInput", (0, _preact.createRef)());
|
|
55
|
-
|
|
56
32
|
_defineProperty(this, "sendMessage", async message => {
|
|
57
33
|
let hasPostback = _index.default.find(message.attachments, att => att.type === 'postback');
|
|
58
|
-
|
|
59
34
|
if (this.isFormRequired() && hasPostback) {
|
|
60
35
|
this.onStartConvoClick();
|
|
61
36
|
this.fillQuickReplyToQuestion(message);
|
|
62
37
|
return;
|
|
63
38
|
}
|
|
64
|
-
|
|
65
39
|
let text = message.text;
|
|
66
|
-
|
|
67
40
|
if (!this.props.cid) {
|
|
68
41
|
this.creating = true;
|
|
69
42
|
const {
|
|
@@ -74,8 +47,8 @@ class Widget extends _common.Com {
|
|
|
74
47
|
message: text,
|
|
75
48
|
initial_by: this.props.store.matchUser().id
|
|
76
49
|
});
|
|
77
|
-
|
|
78
|
-
|
|
50
|
+
if (error) {
|
|
51
|
+
}
|
|
79
52
|
|
|
80
53
|
this.creating = false;
|
|
81
54
|
this.props.store.sendConvoEvent(convo.id, 'message_sent', {
|
|
@@ -87,16 +60,13 @@ class Widget extends _common.Com {
|
|
|
87
60
|
});
|
|
88
61
|
return;
|
|
89
62
|
}
|
|
90
|
-
|
|
91
63
|
this.props.store.sendConvoEvent(this.props.cid, 'message_sent', {
|
|
92
64
|
message
|
|
93
65
|
});
|
|
94
66
|
});
|
|
95
|
-
|
|
96
67
|
_defineProperty(this, "onLink", (e, url) => {
|
|
97
68
|
if (!url) return e.preventDefault();
|
|
98
69
|
let noschemeurl = url.replace(/(^\w+:|^)\/\//, '');
|
|
99
|
-
|
|
100
70
|
if (noschemeurl.startsWith('widget.subiz.com.vn/orders/')) {
|
|
101
71
|
let orderid = noschemeurl.substr('widget.subiz.com.vn/orders/'.length);
|
|
102
72
|
orderid = orderid.split('/')[0];
|
|
@@ -108,7 +78,6 @@ class Widget extends _common.Com {
|
|
|
108
78
|
return;
|
|
109
79
|
}
|
|
110
80
|
});
|
|
111
|
-
|
|
112
81
|
_defineProperty(this, "closeOrder", e => {
|
|
113
82
|
this.setState({
|
|
114
83
|
showOrder: false,
|
|
@@ -116,7 +85,6 @@ class Widget extends _common.Com {
|
|
|
116
85
|
});
|
|
117
86
|
this.focusInput();
|
|
118
87
|
});
|
|
119
|
-
|
|
120
88
|
this.userSent = {};
|
|
121
89
|
this.setState({
|
|
122
90
|
creating: false,
|
|
@@ -128,17 +96,14 @@ class Widget extends _common.Com {
|
|
|
128
96
|
});
|
|
129
97
|
this.props.store.onUpdate(this, _ => this.forceUpdate());
|
|
130
98
|
}
|
|
131
|
-
|
|
132
99
|
componentDidMount() {
|
|
133
100
|
if (!this.props.store.isMobile()) this.focusInput();
|
|
134
101
|
}
|
|
135
|
-
|
|
136
102
|
componentDidUpdate(prevProp) {
|
|
137
103
|
if (prevProp.isShow !== this.props.isShow) {
|
|
138
104
|
if (this.props.isShow && !this.props.store.isMobile()) this.focusInput();
|
|
139
105
|
if (this.props.isShow && this.props.store.isMobile()) this.blur();
|
|
140
106
|
}
|
|
141
|
-
|
|
142
107
|
if (prevProp.cid !== this.props.cid) {
|
|
143
108
|
this.closeOrder();
|
|
144
109
|
this.setState({
|
|
@@ -150,24 +115,19 @@ class Widget extends _common.Com {
|
|
|
150
115
|
if (!this.props.store.isMobile()) this.focusInput();
|
|
151
116
|
}, 100);
|
|
152
117
|
}
|
|
153
|
-
|
|
154
118
|
this.updateFormDataFields();
|
|
155
119
|
}
|
|
156
|
-
|
|
157
120
|
shouldShowForm() {
|
|
158
121
|
let form;
|
|
159
122
|
let accountSetting = this.props.plugin.chatbox || {};
|
|
160
123
|
let acc = this.props.store.matchAccount() || {};
|
|
161
124
|
if (_index.default.get(accountSetting, 'prechat_form.enabled')) form = accountSetting.prechat_form;
|
|
162
|
-
|
|
163
125
|
let offlineEnabled = _index.default.get(accountSetting, 'offline_form.enabled');
|
|
164
|
-
|
|
165
126
|
if (this.isOffline(acc, accountSetting) && offlineEnabled) form = accountSetting.offline_form;
|
|
166
127
|
if (!this.hasSentMessage(this.props.cid) && form && (_index.default.size(form.groups) || form.group_required)) return true;
|
|
167
128
|
let formRequired = this.isFormRequired();
|
|
168
129
|
return formRequired && !this.props.cid || formRequired && this.props.cid && this.state.clickedJoin;
|
|
169
130
|
}
|
|
170
|
-
|
|
171
131
|
render() {
|
|
172
132
|
let showform = this.shouldShowForm();
|
|
173
133
|
let form;
|
|
@@ -175,26 +135,21 @@ class Widget extends _common.Com {
|
|
|
175
135
|
let acc = this.props.store.matchAccount() || {};
|
|
176
136
|
let submitLabel = this.props.t('prechat_form_btn');
|
|
177
137
|
if (_index.default.get(accountSetting, 'prechat_form.enabled')) form = accountSetting.prechat_form;
|
|
178
|
-
|
|
179
138
|
let offlineEnabled = _index.default.get(accountSetting, 'offline_form.enabled');
|
|
180
|
-
|
|
181
139
|
if (this.isOffline(acc, accountSetting) && offlineEnabled) {
|
|
182
140
|
form = accountSetting.offline_form;
|
|
183
141
|
submitLabel = this.props.t('offline_form_btn');
|
|
184
142
|
}
|
|
185
|
-
|
|
186
143
|
if (this.props.view === 'offline_form') {
|
|
187
144
|
showform = true;
|
|
188
145
|
form = accountSetting.offline_form;
|
|
189
146
|
submitLabel = this.props.t('offline_form_btn');
|
|
190
147
|
}
|
|
191
|
-
|
|
192
148
|
if (this.props.view === 'prechat_form') {
|
|
193
149
|
showform = true;
|
|
194
150
|
form = accountSetting.prechat_form;
|
|
195
151
|
submitLabel = this.props.t('prechat_form_btn');
|
|
196
152
|
}
|
|
197
|
-
|
|
198
153
|
let $body = null;
|
|
199
154
|
if (this.props.view === 'list') $body = this.renderConvoList();else if (showform) $body = this.renderForm(form, submitLabel);else $body = this.renderChat();
|
|
200
155
|
let position = _index.default.get(accountSetting, 'desktop_button.position') || 'right';
|
|
@@ -215,35 +170,27 @@ class Widget extends _common.Com {
|
|
|
215
170
|
})
|
|
216
171
|
}), $body);
|
|
217
172
|
}
|
|
218
|
-
|
|
219
173
|
async submitPrechatForm(form) {
|
|
220
174
|
var hasError = false;
|
|
221
|
-
|
|
222
175
|
_index.default.map(this.state.formData, (field, key) => {
|
|
223
176
|
if (field.is_required && (field.value === undefined || field.value === '' || _index.default.size(field.value) === 0 && Array.isArray(field.value))) {
|
|
224
177
|
field.error = this.props.t('error_empty');
|
|
225
178
|
hasError = true;
|
|
226
179
|
} else field.error = '';
|
|
227
|
-
|
|
228
180
|
if (key.substr(5) === 'emails' && !_index.default.isEmail(field.value) && field.is_required) {
|
|
229
181
|
field.error = this.props.t('error_email_invalid');
|
|
230
182
|
hasError = true;
|
|
231
183
|
}
|
|
232
|
-
|
|
233
184
|
if (key.substr(5) === 'phones' && !_index.default.isPhone(field.value) && field.is_required) {
|
|
234
185
|
field.error = this.props.t('error_phone_invalid');
|
|
235
186
|
hasError = true;
|
|
236
187
|
}
|
|
237
188
|
});
|
|
238
|
-
|
|
239
189
|
if (hasError) return this.forceUpdate();
|
|
240
190
|
|
|
241
191
|
let data = _index.default.cloneDeep(this.state.formData);
|
|
242
|
-
|
|
243
192
|
let user = _index.default.cloneDeep(this.props.store.matchUser());
|
|
244
|
-
|
|
245
193
|
let is_lead = false;
|
|
246
|
-
|
|
247
194
|
_index.default.map(data, (field, key) => {
|
|
248
195
|
if (!key.startsWith('attr:')) return;
|
|
249
196
|
var attr = {
|
|
@@ -254,19 +201,14 @@ class Widget extends _common.Com {
|
|
|
254
201
|
if (field.type === 'datetime') attr.datetime = new _index.default.Date(field.value).toISOString();
|
|
255
202
|
if (field.type === 'list') attr.list = field.value;
|
|
256
203
|
if (field.type === 'text' || field.type === 'boolean') attr[field.type] = field.value;
|
|
257
|
-
|
|
258
204
|
_index.default.setUserAttr(user, attr);
|
|
259
205
|
});
|
|
260
|
-
|
|
261
206
|
if (is_lead) _index.default.setUserAttr(user, {
|
|
262
207
|
key: 'lead_source',
|
|
263
208
|
text: 'widget'
|
|
264
209
|
});
|
|
265
|
-
|
|
266
210
|
let firstmsg = _index.default.get(data, 'question.value');
|
|
267
|
-
|
|
268
211
|
let groupid = _index.default.get(data, 'group.value', '');
|
|
269
|
-
|
|
270
212
|
if (this.props.cid) {
|
|
271
213
|
this.props.store.setUser(user);
|
|
272
214
|
this.setState({
|
|
@@ -283,9 +225,11 @@ class Widget extends _common.Com {
|
|
|
283
225
|
attachments: this.state.quickReplyMessage.attachments
|
|
284
226
|
}
|
|
285
227
|
});
|
|
228
|
+
|
|
286
229
|
this.setState({
|
|
287
230
|
quickReplyMessage: {}
|
|
288
231
|
});
|
|
232
|
+
|
|
289
233
|
if (form.end_conversation_after_submit) await this.props.store.endConvo(this.props.cid);
|
|
290
234
|
return;
|
|
291
235
|
}
|
|
@@ -311,7 +255,6 @@ class Widget extends _common.Com {
|
|
|
311
255
|
error,
|
|
312
256
|
convo
|
|
313
257
|
} = await this.props.store.startConvo(req);
|
|
314
|
-
|
|
315
258
|
if (error) {
|
|
316
259
|
this.setState({
|
|
317
260
|
creating: false,
|
|
@@ -319,7 +262,6 @@ class Widget extends _common.Com {
|
|
|
319
262
|
});
|
|
320
263
|
return;
|
|
321
264
|
}
|
|
322
|
-
|
|
323
265
|
let newconvoid = convo.id;
|
|
324
266
|
this.userSent[newconvoid] = true;
|
|
325
267
|
this.props.onGo({
|
|
@@ -336,7 +278,6 @@ class Widget extends _common.Com {
|
|
|
336
278
|
});
|
|
337
279
|
if (!this.props.store.isMobile()) this.focusInput();
|
|
338
280
|
}
|
|
339
|
-
|
|
340
281
|
formMounted(form) {
|
|
341
282
|
let formData = this.fillForm(form);
|
|
342
283
|
formData['question'] = {
|
|
@@ -351,36 +292,27 @@ class Widget extends _common.Com {
|
|
|
351
292
|
});
|
|
352
293
|
if (!this.props.store.isMobile()) this.focusInput();
|
|
353
294
|
}
|
|
354
|
-
|
|
355
295
|
onBooleanChange(key, e) {
|
|
356
296
|
let formData = _index.default.cloneDeep(this.state.formData);
|
|
357
|
-
|
|
358
297
|
let field = _index.default.find(formData, (_, fkkey) => fkkey === key);
|
|
359
|
-
|
|
360
298
|
if (!field) return;
|
|
361
299
|
field.value = e.target.checked;
|
|
362
300
|
this.setState({
|
|
363
301
|
formData
|
|
364
302
|
});
|
|
365
303
|
}
|
|
366
|
-
|
|
367
304
|
onInputChange(key, val) {
|
|
368
305
|
let formData = _index.default.cloneDeep(this.state.formData);
|
|
369
|
-
|
|
370
306
|
let field = _index.default.find(formData, (_, fkkey) => fkkey === key);
|
|
371
|
-
|
|
372
307
|
if (!field) return;
|
|
373
308
|
field.value = val;
|
|
374
309
|
this.setState({
|
|
375
310
|
formData
|
|
376
311
|
});
|
|
377
312
|
}
|
|
378
|
-
|
|
379
313
|
onListAddItem(key, val) {
|
|
380
314
|
let formData = _index.default.cloneDeep(this.state.formData);
|
|
381
|
-
|
|
382
315
|
let field = _index.default.find(formData, (_, fkkey) => fkkey === key);
|
|
383
|
-
|
|
384
316
|
if (!field) return;
|
|
385
317
|
field.value = field.value || [];
|
|
386
318
|
field.value.push(val);
|
|
@@ -388,12 +320,9 @@ class Widget extends _common.Com {
|
|
|
388
320
|
formData
|
|
389
321
|
});
|
|
390
322
|
}
|
|
391
|
-
|
|
392
323
|
onListRemoveItem(key, index) {
|
|
393
324
|
let formData = _index.default.cloneDeep(this.state.formData);
|
|
394
|
-
|
|
395
325
|
let field = _index.default.find(formData, (_, fkkey) => fkkey === key);
|
|
396
|
-
|
|
397
326
|
if (!field) return;
|
|
398
327
|
field.value = field.value || [];
|
|
399
328
|
field.value.splice(index, 1);
|
|
@@ -401,15 +330,12 @@ class Widget extends _common.Com {
|
|
|
401
330
|
formData
|
|
402
331
|
});
|
|
403
332
|
}
|
|
404
|
-
|
|
405
333
|
renderFields() {
|
|
406
334
|
if (_index.default.size(this.state.formData) === 0) return null;
|
|
407
|
-
|
|
408
335
|
let $fields = _index.default.map(this.state.formData, (field, key) => {
|
|
409
336
|
if (this.state.quickReplyMessage.text && key === 'question') return null;
|
|
410
337
|
let $field = null;
|
|
411
338
|
var errclass = field.error ? 'input--error' : '';
|
|
412
|
-
|
|
413
339
|
if (field.type === 'text') {
|
|
414
340
|
if (key === 'question') {
|
|
415
341
|
$field = (0, _preact.h)("textarea", {
|
|
@@ -475,11 +401,9 @@ class Widget extends _common.Com {
|
|
|
475
401
|
}))));
|
|
476
402
|
} else if (field.type === 'list') {
|
|
477
403
|
let selected = this.state.formData[key].value || [];
|
|
478
|
-
|
|
479
404
|
let items = _index.default.filter(_index.default.get(field, 'list', []), item => {
|
|
480
405
|
return !_index.default.includes(selected, item);
|
|
481
406
|
});
|
|
482
|
-
|
|
483
407
|
$field = (0, _preact.h)(_ListField.default, {
|
|
484
408
|
selected: selected,
|
|
485
409
|
items: items,
|
|
@@ -494,9 +418,7 @@ class Widget extends _common.Com {
|
|
|
494
418
|
type: "date"
|
|
495
419
|
});
|
|
496
420
|
}
|
|
497
|
-
|
|
498
421
|
let label = '';
|
|
499
|
-
|
|
500
422
|
if (field.key === 'fullname') {
|
|
501
423
|
label = this.props.t('fullname');
|
|
502
424
|
} else if (field.key === 'emails') {
|
|
@@ -506,7 +428,6 @@ class Widget extends _common.Com {
|
|
|
506
428
|
} else if (field.key === 'question') {
|
|
507
429
|
label = field.label || this.props.t('your_question');
|
|
508
430
|
}
|
|
509
|
-
|
|
510
431
|
if (field.label) label = field.label;
|
|
511
432
|
return (0, _preact.h)("div", null, (0, _preact.h)("div", {
|
|
512
433
|
class: "label"
|
|
@@ -516,12 +437,10 @@ class Widget extends _common.Com {
|
|
|
516
437
|
class: "form-control--valid-input--error"
|
|
517
438
|
}, field.error) : '', $field);
|
|
518
439
|
});
|
|
519
|
-
|
|
520
440
|
return (0, _preact.h)("div", {
|
|
521
441
|
class: "pt-2"
|
|
522
442
|
}, $fields);
|
|
523
443
|
}
|
|
524
|
-
|
|
525
444
|
renderForm(form, submitLabel) {
|
|
526
445
|
let $loading = null;
|
|
527
446
|
if (this.state.creating) $loading = (0, _preact.h)("span", {
|
|
@@ -554,29 +473,22 @@ class Widget extends _common.Com {
|
|
|
554
473
|
onClick: _ => this.submitPrechatForm(form)
|
|
555
474
|
}, submitLabel, " ", $loading)));
|
|
556
475
|
}
|
|
557
|
-
|
|
558
476
|
goToConvo(cid) {
|
|
559
477
|
this.props.onGo({
|
|
560
478
|
view: 'chat',
|
|
561
479
|
cid
|
|
562
480
|
});
|
|
563
481
|
}
|
|
564
|
-
|
|
565
482
|
renderConvoList() {
|
|
566
483
|
let convoM = this.props.store.matchConvo('*');
|
|
567
|
-
|
|
568
484
|
var convos = _index.default.map(convoM, convo => this.props.store.matchConvo(convo.id));
|
|
569
|
-
|
|
570
485
|
convos = _index.default.filter(convos, convo => !!convo);
|
|
571
486
|
convos = _index.default.orderBy(convos, 'created', 'desc');
|
|
572
|
-
|
|
573
487
|
var $convos = _index.default.map(convos, convo => {
|
|
574
488
|
let ags = _index.default.filter(convo.members, m => {
|
|
575
489
|
return (m.type === 'agent' || m.type === 'bot') && m.membership === 'active';
|
|
576
490
|
});
|
|
577
|
-
|
|
578
491
|
let agentids = _index.default.map(ags, m => m.id);
|
|
579
|
-
|
|
580
492
|
agentids = agentids || _index.default.agentsOfConvo(convo)[0];
|
|
581
493
|
return (0, _preact.h)("div", {
|
|
582
494
|
class: "convo-list--item",
|
|
@@ -591,11 +503,9 @@ class Widget extends _common.Com {
|
|
|
591
503
|
agent_ids: agentids
|
|
592
504
|
}), this.renderConvoSummary(convo));
|
|
593
505
|
});
|
|
594
|
-
|
|
595
506
|
let $body = (0, _preact.h)("div", {
|
|
596
507
|
class: "convo-list--list"
|
|
597
508
|
}, $convos);
|
|
598
|
-
|
|
599
509
|
if (_index.default.size(convos) === 0) {
|
|
600
510
|
$body = (0, _preact.h)("div", {
|
|
601
511
|
class: "convo-list--list"
|
|
@@ -608,7 +518,6 @@ class Widget extends _common.Com {
|
|
|
608
518
|
class: "empty-desc"
|
|
609
519
|
}, this.props.t('empty_convo'))));
|
|
610
520
|
}
|
|
611
|
-
|
|
612
521
|
return (0, _preact.h)("div", {
|
|
613
522
|
class: "convo-list"
|
|
614
523
|
}, (0, _preact.h)("div", {
|
|
@@ -629,7 +538,6 @@ class Widget extends _common.Com {
|
|
|
629
538
|
store: this.props.store
|
|
630
539
|
})));
|
|
631
540
|
}
|
|
632
|
-
|
|
633
541
|
blur() {
|
|
634
542
|
if (this.props.store.isPreview) return;
|
|
635
543
|
var $input = this.msgInput.current;
|
|
@@ -640,16 +548,13 @@ class Widget extends _common.Com {
|
|
|
640
548
|
|
|
641
549
|
focusInput() {
|
|
642
550
|
if (this.props.store.isPreview) return;
|
|
643
|
-
|
|
644
551
|
if (this.shouldShowForm()) {
|
|
645
552
|
let firstemptykey = '';
|
|
646
|
-
|
|
647
553
|
_index.default.map(this.state.formData, (field, key) => {
|
|
648
554
|
if (field.type !== 'text') return;
|
|
649
555
|
if (firstemptykey) return;
|
|
650
556
|
if (!field.value) firstemptykey = key;
|
|
651
557
|
});
|
|
652
|
-
|
|
653
558
|
setTimeout(() => {
|
|
654
559
|
var $input = this['form_' + encode(firstemptykey)];
|
|
655
560
|
if (!$input) return;
|
|
@@ -657,7 +562,6 @@ class Widget extends _common.Com {
|
|
|
657
562
|
}, 300);
|
|
658
563
|
return;
|
|
659
564
|
}
|
|
660
|
-
|
|
661
565
|
var $input = this.msgInput.current;
|
|
662
566
|
if (!$input) return;
|
|
663
567
|
setTimeout(() => $input.focus());
|
|
@@ -673,24 +577,19 @@ class Widget extends _common.Com {
|
|
|
673
577
|
});
|
|
674
578
|
this.focusInput();
|
|
675
579
|
}
|
|
676
|
-
|
|
677
580
|
fillQuickReplyToQuestion(message) {
|
|
678
581
|
let formData = this.state.formData;
|
|
679
|
-
|
|
680
582
|
if (formData) {
|
|
681
583
|
_index.default.set(formData, 'question.value', message.text);
|
|
682
584
|
}
|
|
683
|
-
|
|
684
585
|
this.setState({
|
|
685
586
|
formData,
|
|
686
587
|
quickReplyMessage: message
|
|
687
588
|
});
|
|
688
589
|
}
|
|
689
|
-
|
|
690
590
|
createPostback(postback) {
|
|
691
591
|
this.props.store.createPostback(this.props.cid, postback);
|
|
692
592
|
}
|
|
693
|
-
|
|
694
593
|
renderChat() {
|
|
695
594
|
let $input = (0, _preact.h)(_MessageInput.default, {
|
|
696
595
|
store: this.props.store,
|
|
@@ -700,7 +599,6 @@ class Widget extends _common.Com {
|
|
|
700
599
|
t: this.props.t
|
|
701
600
|
});
|
|
702
601
|
let convo = this.props.store.matchConvo(this.props.cid) || {};
|
|
703
|
-
|
|
704
602
|
if (this.isFormRequired() || convo.state === 'ended') {
|
|
705
603
|
$input = (0, _preact.h)("div", {
|
|
706
604
|
class: "message-input message-input--preform"
|
|
@@ -709,7 +607,6 @@ class Widget extends _common.Com {
|
|
|
709
607
|
onClick: e => this.onStartConvoClick(e)
|
|
710
608
|
}, this.props.t('offline_preform_btn')));
|
|
711
609
|
}
|
|
712
|
-
|
|
713
610
|
return (0, _preact.h)("div", {
|
|
714
611
|
class: "widget-body"
|
|
715
612
|
}, (0, _preact.h)("div", {
|
|
@@ -749,7 +646,6 @@ class Widget extends _common.Com {
|
|
|
749
646
|
t: this.props.t
|
|
750
647
|
}), $input);
|
|
751
648
|
}
|
|
752
|
-
|
|
753
649
|
async onStartConvoClick() {
|
|
754
650
|
var convo = this.props.store.matchConvo(this.props.cid) || {};
|
|
755
651
|
if (convo.state === 'ended') return this.props.onGo({
|
|
@@ -761,73 +657,59 @@ class Widget extends _common.Com {
|
|
|
761
657
|
quickReplyMessage: {}
|
|
762
658
|
});
|
|
763
659
|
}
|
|
764
|
-
|
|
765
660
|
onEventFormSubmit() {
|
|
766
661
|
this.focusInput();
|
|
767
662
|
}
|
|
768
|
-
|
|
769
663
|
onContainerClick() {
|
|
770
664
|
var selection = window.getSelection();
|
|
771
665
|
if (selection.toString().length > 0) return;
|
|
772
666
|
if (!this.props.store.isMobile()) this.focusInput();
|
|
773
667
|
}
|
|
774
|
-
|
|
775
668
|
isFormRequired() {
|
|
669
|
+
|
|
776
670
|
let form;
|
|
777
671
|
let accountSetting = this.props.plugin.chatbox || {};
|
|
778
672
|
let acc = this.props.store.matchAccount() || {};
|
|
779
673
|
if (_index.default.get(accountSetting, 'prechat_form.enabled')) form = accountSetting.prechat_form;
|
|
780
674
|
|
|
781
675
|
let offlineEnabled = _index.default.get(accountSetting, 'offline_form.enabled');
|
|
782
|
-
|
|
783
676
|
if (this.isOffline(acc, accountSetting) && offlineEnabled) form = accountSetting.offline_form;
|
|
784
677
|
if (!form) return false;
|
|
785
678
|
let formData = this.fillForm(form);
|
|
679
|
+
|
|
786
680
|
let convo = this.props.store.matchConvo(this.props.cid) || {};
|
|
787
681
|
if (convo.state === 'ended') return true;
|
|
788
682
|
if (convo.state && convo.state !== 'pending') delete formData.group;
|
|
789
683
|
return !!_index.default.find(formData, field => field.is_required && (field.value == null || field.value === ''));
|
|
790
684
|
}
|
|
791
|
-
|
|
792
685
|
renderConvoSummary(convo) {
|
|
793
686
|
let accountSetting = this.props.plugin.chatbox || {};
|
|
794
687
|
let agentM = this.props.store.matchAgent('*');
|
|
795
|
-
|
|
796
688
|
let ags = _index.default.filter(convo.members, m => {
|
|
797
689
|
return (m.type === 'agent' || m.type === 'bot') && m.membership === 'active';
|
|
798
690
|
});
|
|
799
|
-
|
|
800
691
|
let agentids = _index.default.map(ags, m => m.id);
|
|
801
|
-
|
|
802
692
|
agentids = agentids || _index.default.agentsOfConvo(convo)[0];
|
|
803
|
-
|
|
804
693
|
let agents = _index.default.map(agentids, id => agentM[id] || {
|
|
805
694
|
avatar_url: defaultAvatar,
|
|
806
695
|
fullname: 'Offline Agent'
|
|
807
696
|
});
|
|
808
|
-
|
|
809
697
|
var name = _index.default.each(agents, ag => ag.fullname).join(', ');
|
|
810
|
-
|
|
811
698
|
if (accountSetting.hide_agent_profile || !name) name = this.props.store.matchAccount().name;
|
|
812
699
|
if (!name) name = this.props.t('agent');
|
|
813
700
|
var $you = null;
|
|
814
|
-
|
|
815
701
|
if (convo.lastSenderType === 'user') {
|
|
816
702
|
$you = (0, _preact.h)("span", {
|
|
817
703
|
class: "yourmessage"
|
|
818
704
|
}, this.props.t('you'), ":");
|
|
819
705
|
}
|
|
820
|
-
|
|
821
706
|
let seen = _index.default.isConvoSeen(convo, this.props.store.matchUser().id);
|
|
822
|
-
|
|
823
707
|
var lastmsg = this.renderMessagePreview(convo.last_message_sent || {
|
|
824
708
|
data: {
|
|
825
709
|
message: _index.default.get(convo, 'last_message')
|
|
826
710
|
}
|
|
827
711
|
});
|
|
828
|
-
|
|
829
712
|
var time = _index.default.getMs(_index.default.get(convo, 'last_message_sent.created')) || _index.default.getMs(_index.default.get(convo, 'last_sent.created')) || _index.default.getMs(convo.created);
|
|
830
|
-
|
|
831
713
|
var $tim = (0, _preact.h)(_time.default, {
|
|
832
714
|
ago: true,
|
|
833
715
|
time: time,
|
|
@@ -837,7 +719,6 @@ class Widget extends _common.Com {
|
|
|
837
719
|
let $unread = seen ? null : (0, _preact.h)("div", {
|
|
838
720
|
class: "convo-list--item-unread"
|
|
839
721
|
});
|
|
840
|
-
|
|
841
722
|
if (convo.state === 'ended') {
|
|
842
723
|
$unread = (0, _preact.h)("img", {
|
|
843
724
|
alt: "conversation ended",
|
|
@@ -846,7 +727,6 @@ class Widget extends _common.Com {
|
|
|
846
727
|
title: this.props.t('conversation_ended')
|
|
847
728
|
});
|
|
848
729
|
}
|
|
849
|
-
|
|
850
730
|
return (0, _preact.h)("div", {
|
|
851
731
|
class: "convo-list--convo-last-info"
|
|
852
732
|
}, (0, _preact.h)("div", {
|
|
@@ -861,31 +741,23 @@ class Widget extends _common.Com {
|
|
|
861
741
|
class: "convo-list--convo-last-message"
|
|
862
742
|
}, $you, lastmsg), $unread));
|
|
863
743
|
}
|
|
864
|
-
|
|
865
744
|
agentsOfConvo(convo) {
|
|
866
745
|
let agentM = this.props.store.matchAgent('*');
|
|
867
|
-
|
|
868
746
|
var agentids = _index.default.agentsOfConvo(convo, true);
|
|
869
|
-
|
|
870
747
|
return _index.default.map(agentids, id => agentM[id] || {
|
|
871
748
|
avatar_url: defaultAvatar,
|
|
872
749
|
fullname: 'Offline Agent'
|
|
873
750
|
});
|
|
874
751
|
}
|
|
875
|
-
|
|
876
752
|
renderMessagePreview(ev) {
|
|
877
753
|
let defmsg = this.props.t('sent_you_a_message');
|
|
878
|
-
|
|
879
754
|
let message = _index.default.get(ev, 'data.message.text');
|
|
880
|
-
|
|
881
755
|
var format = _index.default.get(ev, 'data.message.format');
|
|
882
756
|
|
|
883
757
|
if (format !== 'plaintext') message = defmsg;
|
|
884
758
|
if (!message && _index.default.size(_index.default.get(ev, 'data.message.attachments')) > 0) message = defmsg;
|
|
885
759
|
if (!message) return null;
|
|
886
|
-
|
|
887
760
|
let byType = _index.default.get(ev, 'by.type');
|
|
888
|
-
|
|
889
761
|
return (0, _preact.h)("div", {
|
|
890
762
|
class: "convo-list--convo-last-mes"
|
|
891
763
|
}, _index.default.map(_index.default.extractText(message), tag => {
|
|
@@ -896,31 +768,23 @@ class Widget extends _common.Com {
|
|
|
896
768
|
return tag.text;
|
|
897
769
|
}));
|
|
898
770
|
}
|
|
899
|
-
|
|
900
771
|
userHasSent(cid) {
|
|
901
772
|
var convo = this.props.store.matchConvo(cid) || {};
|
|
902
773
|
let user = this.props.store.matchUser();
|
|
903
774
|
if (this.userSent[cid]) return true;
|
|
904
|
-
|
|
905
775
|
let joined = _index.default.find(convo.members, mem => mem.id === user.id && (mem.membership === 'active' || mem.last_sent > 0));
|
|
906
|
-
|
|
907
776
|
return joined;
|
|
908
777
|
}
|
|
909
|
-
|
|
910
778
|
hasSentMessage(cid) {
|
|
911
779
|
let convo = this.props.store.matchConvo(cid) || {};
|
|
912
|
-
|
|
913
780
|
let joined = _index.default.find(convo.members, mem => {
|
|
914
781
|
if (mem.type === 'bot') return true;
|
|
915
782
|
return mem.last_sent;
|
|
916
783
|
});
|
|
917
|
-
|
|
918
784
|
return joined;
|
|
919
785
|
}
|
|
920
|
-
|
|
921
786
|
isOffline(acc, accSetting) {
|
|
922
787
|
let enableWhen = _index.default.get(accSetting, 'offline_form.enable_when');
|
|
923
|
-
|
|
924
788
|
let isonline = true;
|
|
925
789
|
if (enableWhen === 'all_agents_offline') isonline = acc.is_online;
|
|
926
790
|
if (enableWhen === 'out_of_bussiness_hour') isonline = acc.is_in_business_hour;
|
|
@@ -932,35 +796,27 @@ class Widget extends _common.Com {
|
|
|
932
796
|
let accountSetting = this.props.plugin.chatbox || {};
|
|
933
797
|
let acc = this.props.store.matchAccount() || {};
|
|
934
798
|
if (_index.default.get(accountSetting, 'prechat_form.enabled')) form = accountSetting.prechat_form;
|
|
935
|
-
|
|
936
799
|
let offlineEnabled = _index.default.get(accountSetting, 'offline_form.enabled');
|
|
937
|
-
|
|
938
800
|
if (this.isOffline(acc, accountSetting) && offlineEnabled) {
|
|
939
801
|
form = accountSetting.offline_form;
|
|
940
802
|
}
|
|
941
|
-
|
|
942
803
|
if (this.props.view === 'offline_form') {
|
|
943
804
|
form = accountSetting.offline_form;
|
|
944
805
|
}
|
|
945
|
-
|
|
946
806
|
if (this.props.view === 'prechat_form') {
|
|
947
807
|
form = accountSetting.prechat_form;
|
|
948
808
|
}
|
|
949
|
-
|
|
950
809
|
if (_index.default.size(form) === 0) return [];
|
|
951
810
|
var data = {};
|
|
952
|
-
|
|
953
811
|
_index.default.each(form.fields, f => {
|
|
954
812
|
var newf = Object.assign({}, f);
|
|
955
813
|
|
|
956
814
|
if (f.type === 'list') {
|
|
957
815
|
newf.list = f.list;
|
|
958
816
|
}
|
|
959
|
-
|
|
960
817
|
newf.label = this.props.t.i18n(_index.default.get(f, `i18n_label`, {})) || f.label;
|
|
961
818
|
data['attr:' + f.key] = newf;
|
|
962
819
|
});
|
|
963
|
-
|
|
964
820
|
if (form.group_required && _index.default.size(form.groups) > 0) {
|
|
965
821
|
data['group'] = {
|
|
966
822
|
key: 'group',
|
|
@@ -980,53 +836,42 @@ class Widget extends _common.Com {
|
|
|
980
836
|
label: this.props.t.i18n(_index.default.get(form, `i18n_question_label`, {})) || form.question_label,
|
|
981
837
|
type: 'text'
|
|
982
838
|
};
|
|
983
|
-
|
|
984
839
|
if (this.isFormChanged(this.state.formData, data)) {
|
|
985
840
|
this.setState({
|
|
986
841
|
formData: data
|
|
987
842
|
});
|
|
988
843
|
}
|
|
989
844
|
}
|
|
990
|
-
|
|
991
845
|
isFormChanged(oldForm, newForm) {
|
|
992
846
|
let oldKeys = Object.keys(oldForm);
|
|
993
847
|
let newKeys = Object.keys(newForm);
|
|
994
848
|
if (oldKeys.length !== newKeys.length) return true;
|
|
995
|
-
|
|
996
849
|
for (let i = 0; i < oldKeys.length; i++) {
|
|
997
850
|
if (_index.default.get(oldForm, `${oldKeys[i]}.label`) !== _index.default.get(newForm, `${newKeys[i]}.label`)) return true;
|
|
998
851
|
if (_index.default.get(oldForm, `${oldKeys[i]}.is_required`) !== _index.default.get(newForm, `${newKeys[i]}.is_required`)) return true;
|
|
999
|
-
|
|
1000
852
|
if (_index.default.stringify(_index.default.get(oldForm, `${oldKeys[i]}.list`)) !== _index.default.stringify(_index.default.get(newForm, `${newKeys[i]}.list`))) {
|
|
1001
853
|
return true;
|
|
1002
854
|
}
|
|
1003
855
|
}
|
|
1004
|
-
|
|
1005
856
|
return false;
|
|
1006
857
|
}
|
|
1007
|
-
|
|
1008
858
|
fillForm(form) {
|
|
1009
859
|
if (_index.default.size(form) === 0) return [];
|
|
1010
860
|
var data = {};
|
|
1011
861
|
let user = this.props.store.matchUser();
|
|
1012
|
-
|
|
1013
862
|
_index.default.each(form.fields, f => {
|
|
1014
863
|
var newf = Object.assign({}, f);
|
|
1015
864
|
newf.value = _index.default.getUserAttr(user, f.key, f.type);
|
|
1016
865
|
if (f.type === 'boolean' && !newf.value) newf.value = false;
|
|
1017
|
-
|
|
1018
866
|
if (f.type === 'datetime' && newf.value) {
|
|
1019
867
|
newf.value = new _index.default.Date(data.value).toLocaleDateString('en-CA');
|
|
1020
868
|
}
|
|
1021
|
-
|
|
1022
869
|
if (f.type === 'list') {
|
|
1023
870
|
newf.list = f.list;
|
|
1024
871
|
}
|
|
1025
|
-
|
|
1026
872
|
newf.label = this.props.t.i18n(_index.default.get(f, `i18n_label`, {})) || f.label;
|
|
1027
873
|
data['attr:' + f.key] = newf;
|
|
1028
874
|
});
|
|
1029
|
-
|
|
1030
875
|
if (form.group_required && _index.default.size(form.groups) > 0) {
|
|
1031
876
|
data['group'] = {
|
|
1032
877
|
key: 'group',
|
|
@@ -1039,21 +884,15 @@ class Widget extends _common.Com {
|
|
|
1039
884
|
}))
|
|
1040
885
|
};
|
|
1041
886
|
}
|
|
1042
|
-
|
|
1043
887
|
return data;
|
|
1044
888
|
}
|
|
1045
|
-
|
|
1046
889
|
}
|
|
1047
|
-
|
|
1048
890
|
exports.default = Widget;
|
|
1049
|
-
|
|
1050
891
|
class FormMounter extends _common.Com {
|
|
1051
892
|
componentDidMount() {
|
|
1052
893
|
this.props.onMount(this.props.form);
|
|
1053
894
|
}
|
|
1054
|
-
|
|
1055
895
|
}
|
|
1056
|
-
|
|
1057
896
|
function encode(key) {
|
|
1058
897
|
return encodeURIComponent(key);
|
|
1059
898
|
}
|