touchstudy-core 0.1.14 → 0.1.15
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/dist/assets/iconChatBubble.d.ts +3 -0
- package/dist/assets/iconChecked.d.ts +3 -0
- package/dist/assets/iconPersonActive.d.ts +3 -0
- package/dist/assets/iconPersonNoActive.d.ts +3 -0
- package/dist/assets/iconSendMessenger.d.ts +4 -0
- package/dist/components/Chats/ChatContainer.d.ts +0 -1
- package/dist/components/Chats/ChatHeader.d.ts +9 -6
- package/dist/components/Chats/ChatItem.d.ts +6 -21
- package/dist/components/Chats/ChatList.d.ts +1 -2
- package/dist/components/Chats/ChatRightItem.d.ts +1 -5
- package/dist/components/Chats/InputChat.d.ts +6 -3
- package/dist/components/Chats/apiClient/conversationService.d.ts +2 -0
- package/dist/components/Chats/configs/constants.d.ts +5 -0
- package/dist/components/Chats/configs/types.d.ts +79 -15
- package/dist/components/Chats/hooks/useChatContainer.d.ts +20 -25
- package/dist/components/Chats/hooks/useDialog.d.ts +6 -0
- package/dist/components/Chats/hooks/useMessageList.d.ts +3 -5
- package/dist/containers/Login/apiClient/index.d.ts +0 -1
- package/dist/containers/Login/views/Login.d.ts +3 -0
- package/dist/containers/Login/views/block/BlockLogin.d.ts +3 -0
- package/dist/index.css +349 -0
- package/dist/index.d.ts +12 -8
- package/dist/index.js +1612 -1225
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +1591 -1214
- package/dist/index.modern.js.map +1 -1
- package/dist/layouts/TheAcademyDropdown.d.ts +10 -0
- package/dist/redux/commons/action.d.ts +1 -0
- package/dist/services/academyService.d.ts +3 -0
- package/dist/services/accountService.d.ts +5 -0
- package/dist/utils/constants.d.ts +11 -7
- package/dist/utils/hooks/index.d.ts +3 -0
- package/dist/utils/hooks/useAutoAcademyDomain.d.ts +2 -0
- package/dist/utils/{useGoogleSignOut.d.ts → hooks/useGoogleSignOut.d.ts} +1 -1
- package/dist/utils/{useLanguage.d.ts → hooks/useLanguage.d.ts} +1 -1
- package/dist/utils/hooks/useLogin.d.ts +7 -0
- package/dist/utils/hooks/useSwitchAcademy.d.ts +10 -0
- package/dist/utils/types/academy.d.ts +6 -0
- package/dist/utils/types/login.d.ts +33 -0
- package/package.json +2 -1
- package/dist/components/Chats/hooks/useConversationList.d.ts +0 -20
- package/dist/components/Chats/hooks/useExamList.d.ts +0 -6
package/dist/index.js
CHANGED
@@ -10,21 +10,21 @@ var formik = require('formik');
|
|
10
10
|
var yup = require('yup');
|
11
11
|
var GoogleLogin = require('@leecheuk/react-google-login');
|
12
12
|
var GoogleLogin__default = _interopDefault(GoogleLogin);
|
13
|
-
var axios = _interopDefault(require('axios'));
|
14
13
|
var reactRedux = require('react-redux');
|
14
|
+
var axios = _interopDefault(require('axios'));
|
15
|
+
var reactI18next = require('react-i18next');
|
15
16
|
var gapiScript = require('gapi-script');
|
16
17
|
var i18n = _interopDefault(require('i18next'));
|
17
|
-
var reactI18next = require('react-i18next');
|
18
18
|
var io5 = require('react-icons/io5');
|
19
19
|
require('moment/locale/ko.js');
|
20
20
|
require('moment/locale/en-au.js');
|
21
|
+
var go = require('react-icons/go');
|
22
|
+
var reactToastify = require('react-toastify');
|
21
23
|
var Select = require('react-select');
|
22
24
|
var Select__default = _interopDefault(Select);
|
23
25
|
var fa = require('react-icons/fa');
|
24
|
-
var
|
25
|
-
var io = require('react-icons/io');
|
26
|
+
var material = require('@mui/material');
|
26
27
|
var Pusher = _interopDefault(require('pusher-js'));
|
27
|
-
var reactToastify = require('react-toastify');
|
28
28
|
var CreatableSelect = _interopDefault(require('react-select/creatable'));
|
29
29
|
var pi = require('react-icons/pi');
|
30
30
|
var _ = _interopDefault(require('lodash'));
|
@@ -34,20 +34,23 @@ var setAlert = toolkit.createAction("common/setAlert");
|
|
34
34
|
var setUser = toolkit.createAction("common/setUser");
|
35
35
|
var setLanguage = toolkit.createAction("common/setLanguage");
|
36
36
|
var reset = toolkit.createAction("common/reset");
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
var GOOGLE_CLIENT_ID =
|
37
|
+
var setReFetchUserAcademies = toolkit.createAction("common/setReFetchUserAcademies");
|
38
|
+
|
39
|
+
var GOOGLE_RECAPTCHA_KEY = process.env.REACT_APP_GOOGLE_RECAPTCHA_KEY || "";
|
40
|
+
var GOOGLE_CLIENT_ID = process.env.REACT_APP_GOOGLE_CLIENT_ID || "";
|
41
|
+
var GOOGLE_RECAPTCHA_ID = process.env.REACT_APP_GOOGLE_RECAPTCHA_ID || "";
|
42
|
+
var GOOGLE_RECAPTCHA_SECRET = process.env.REACT_APP_GOOGLE_RECAPTCHA_SECRET || "";
|
43
|
+
var BASE_URL = process.env.REACT_APP_BASE_URL || "";
|
44
|
+
var SUPER_ADMIN_BASE_URL = process.env.REACT_APP_SUPER_ADMIN_BASE_URL || "";
|
45
|
+
var PUSHER_CONFIG = {
|
46
|
+
cluster: process.env.REACT_APP_PUSHER_CONFIG_CLUSTER || "",
|
47
|
+
key: process.env.REACT_APP_PUSHER_CONFIG_KEY || ""
|
48
|
+
};
|
41
49
|
var ACCESS_TOKEN = "ACCESS_TOKEN";
|
50
|
+
var ACADEMY_DOMAIN = "ACADEMY_DOMAIN";
|
51
|
+
var AcademyHeaders = "Academy-Headers";
|
42
52
|
var DATE_MIN_VALUE = "0001-01-01T00:00:00+00:00";
|
43
53
|
var DATE_TIME_MIN_VALUE = "0001-01-01T00:00:00";
|
44
|
-
var BASE_URL = function () {
|
45
|
-
return isLocalHost ? "https://localhost:7045" : "https://api.studypeak.io";
|
46
|
-
}();
|
47
|
-
var PUSHER_CONFIG = {
|
48
|
-
cluster: "ap1",
|
49
|
-
key: "9018c77328885a14150b"
|
50
|
-
};
|
51
54
|
var EXAM_CHANNEL = "presence-exam-channel";
|
52
55
|
var EXAM_STUDENT_CHANNEL = "EXAM-CHANNEL-{examCode}-STUDENT-{studentId}";
|
53
56
|
var getAccessToken = function getAccessToken() {
|
@@ -57,6 +60,13 @@ var getAccessToken = function getAccessToken() {
|
|
57
60
|
return null;
|
58
61
|
}
|
59
62
|
};
|
63
|
+
var getAcademyDomain = function getAcademyDomain() {
|
64
|
+
try {
|
65
|
+
return localStorage.getItem(ACADEMY_DOMAIN);
|
66
|
+
} catch (err) {
|
67
|
+
return null;
|
68
|
+
}
|
69
|
+
};
|
60
70
|
var encodeParams = function encodeParams(params) {
|
61
71
|
return Object.keys(params).filter(function (key) {
|
62
72
|
return params[key] || params[key] === 0 || params[key] === false;
|
@@ -79,6 +89,46 @@ var utcToLocalTime = (function (time, FORMAT) {
|
|
79
89
|
}
|
80
90
|
});
|
81
91
|
|
92
|
+
function _extends() {
|
93
|
+
_extends = Object.assign ? Object.assign.bind() : function (target) {
|
94
|
+
for (var i = 1; i < arguments.length; i++) {
|
95
|
+
var source = arguments[i];
|
96
|
+
for (var key in source) {
|
97
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
98
|
+
target[key] = source[key];
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
return target;
|
103
|
+
};
|
104
|
+
return _extends.apply(this, arguments);
|
105
|
+
}
|
106
|
+
function _objectWithoutPropertiesLoose(source, excluded) {
|
107
|
+
if (source == null) return {};
|
108
|
+
var target = {};
|
109
|
+
var sourceKeys = Object.keys(source);
|
110
|
+
var key, i;
|
111
|
+
for (i = 0; i < sourceKeys.length; i++) {
|
112
|
+
key = sourceKeys[i];
|
113
|
+
if (excluded.indexOf(key) >= 0) continue;
|
114
|
+
target[key] = source[key];
|
115
|
+
}
|
116
|
+
return target;
|
117
|
+
}
|
118
|
+
|
119
|
+
var stylesGlobal = {"btn-login-google":"_2HqmH","block-login":"_wWIyO","box-login":"_38Lo1","dropdown-menu":"_1krbH","header-avatar":"_RQaHE","dropdown-menu-flag":"_XK8oS","dropdown-content":"_3ys4W","dropdown-change":"_ToOW_","item-address":"_3sQlR","item-logout":"_3bqSM","title-address":"_1jgSI","img-avatar":"_35Ttz","item-contact":"_1wc7o","content-text":"_3S4f2","dropdown-content-language":"_3ajui","dropdown-item-language":"_3Y_y4","dropdown-item-language-active":"_CzNMi","dropdown-academy":"_3CMVp","image-academy":"_2ibYC","academy-btn":"_1JMRU","switch-icon":"_N4FNf","dropdown-content-academy":"_31Dr0","dropdown-academy-item":"_3bjcz","noGutters":"_31ZQk","custom-col-2":"_3yXyK","custom-col-3":"_1RsJQ","custom-col-5":"_L42CP","custom-col-10":"_2u6eL","custom-row":"_8x7OP","custom-col":"_1JmTh","custom-col-4":"_3HO1e","custom-col-8":"_Oy31M","custom-col-12":"_3aUKo","custom-container":"_39LRs","form-label":"__Ut-u","form-control":"_2k4dX","btn-outline-primary":"_2PWdX"};
|
120
|
+
|
121
|
+
var AuthenticationMessage;
|
122
|
+
(function (AuthenticationMessage) {
|
123
|
+
AuthenticationMessage["NotAllowedToRegister"] = "NotAllowedToRegister";
|
124
|
+
AuthenticationMessage["InvalidGoogleToken"] = "InvalidGoogleToken";
|
125
|
+
})(AuthenticationMessage || (AuthenticationMessage = {}));
|
126
|
+
(function (Role) {
|
127
|
+
Role["Student"] = "Student";
|
128
|
+
Role["Teacher"] = "Teacher";
|
129
|
+
Role["Admin"] = "Admin";
|
130
|
+
})(exports.Role || (exports.Role = {}));
|
131
|
+
|
82
132
|
// A type of promise-like that resolves synchronously and supports only one observer
|
83
133
|
|
84
134
|
const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.iterator || (Symbol.iterator = Symbol("Symbol.iterator"))) : "@@iterator";
|
@@ -98,7 +148,18 @@ function _catch(body, recover) {
|
|
98
148
|
return result;
|
99
149
|
}
|
100
150
|
|
101
|
-
|
151
|
+
// Asynchronously await a promise and invoke a finally continuation that always overrides the result
|
152
|
+
function _finally(body, finalizer) {
|
153
|
+
try {
|
154
|
+
var result = body();
|
155
|
+
} catch (e) {
|
156
|
+
return finalizer();
|
157
|
+
}
|
158
|
+
if (result && result.then) {
|
159
|
+
return result.then(finalizer, finalizer);
|
160
|
+
}
|
161
|
+
return finalizer();
|
162
|
+
}
|
102
163
|
|
103
164
|
var api = axios.create({
|
104
165
|
baseURL: BASE_URL,
|
@@ -120,10 +181,17 @@ var apiUpload = axios.create({
|
|
120
181
|
[api, apiUpload].forEach(function (i) {
|
121
182
|
return i.interceptors.request.use(function (config) {
|
122
183
|
var token = getAccessToken();
|
184
|
+
var searchParams = new URLSearchParams(window.location.search);
|
185
|
+
var paramDomain = searchParams.get('domain');
|
186
|
+
var academyDomainStorage = getAcademyDomain();
|
187
|
+
var academyDomain = paramDomain || academyDomainStorage;
|
123
188
|
if (token) {
|
124
189
|
config.headers.Authorization = "Bearer " + token;
|
125
190
|
localStorage.setItem("LAST_TIME_REQUETST", moment().utc().format("YYYY-MM-DD HH:mm:ss"));
|
126
191
|
}
|
192
|
+
if (academyDomain && !config.headers[AcademyHeaders]) {
|
193
|
+
config.headers[AcademyHeaders] = "" + academyDomain;
|
194
|
+
}
|
127
195
|
return config;
|
128
196
|
}, function (error) {
|
129
197
|
return Promise.reject(error);
|
@@ -137,32 +205,34 @@ var apiUpload = axios.create({
|
|
137
205
|
console.log({
|
138
206
|
error: error
|
139
207
|
});
|
140
|
-
if (((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 401) {
|
141
|
-
window.location.href = "/login";
|
142
|
-
}
|
143
|
-
if (((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.status) == 403) {
|
208
|
+
if (((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 401 || ((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.status) == 403) {
|
144
209
|
localStorage.removeItem(ACCESS_TOKEN);
|
145
|
-
localStorage.removeItem("USER_EMAIL");
|
146
210
|
window.location.href = "/login";
|
147
211
|
}
|
148
212
|
return Promise.reject(error);
|
149
213
|
});
|
150
214
|
});
|
151
215
|
|
152
|
-
var
|
153
|
-
|
216
|
+
var AUTH_URL = BASE_URL + "/api/auth";
|
217
|
+
var AUTH_SUPER_ADMIN_URL = SUPER_ADMIN_BASE_URL + "/api/auth";
|
218
|
+
var getInfo = function getInfo() {
|
219
|
+
return api.get(AUTH_URL + "/info");
|
220
|
+
};
|
221
|
+
var getSuperAdminInfoFromWeb = function getSuperAdminInfoFromWeb() {
|
222
|
+
return api.get(AUTH_SUPER_ADMIN_URL + "/info");
|
223
|
+
};
|
224
|
+
var apiLoginGoogle = function apiLoginGoogle(body) {
|
225
|
+
return api.post(AUTH_URL + "/login", body);
|
226
|
+
};
|
227
|
+
var apiLoginGoogleSuperAdmin = function apiLoginGoogleSuperAdmin(body) {
|
228
|
+
return api.post(AUTH_SUPER_ADMIN_URL + "/login", body);
|
229
|
+
};
|
230
|
+
var apiLoginWithAccessToken = function apiLoginWithAccessToken(body, domain) {
|
231
|
+
var _headers;
|
232
|
+
return api.post(AUTH_URL + "/login/access-token", body, {
|
233
|
+
headers: (_headers = {}, _headers[AcademyHeaders] = domain, _headers)
|
234
|
+
});
|
154
235
|
};
|
155
|
-
|
156
|
-
var AuthenticationMessage;
|
157
|
-
(function (AuthenticationMessage) {
|
158
|
-
AuthenticationMessage["NotAllowedToRegister"] = "NotAllowedToRegister";
|
159
|
-
AuthenticationMessage["InvalidGoogleToken"] = "InvalidGoogleToken";
|
160
|
-
})(AuthenticationMessage || (AuthenticationMessage = {}));
|
161
|
-
(function (Role) {
|
162
|
-
Role["Student"] = "Student";
|
163
|
-
Role["Teacher"] = "Teacher";
|
164
|
-
Role["Admin"] = "Admin";
|
165
|
-
})(exports.Role || (exports.Role = {}));
|
166
236
|
|
167
237
|
var useGoogleSignOut = function useGoogleSignOut(props) {
|
168
238
|
var dispatch = reactRedux.useDispatch();
|
@@ -181,9 +251,15 @@ var useGoogleSignOut = function useGoogleSignOut(props) {
|
|
181
251
|
}),
|
182
252
|
signOut = _useGoogleLogout.signOut,
|
183
253
|
loaded = _useGoogleLogout.loaded;
|
184
|
-
var handleSignOut = function handleSignOut() {
|
254
|
+
var handleSignOut = function handleSignOut(isRemoveDomainStorage) {
|
255
|
+
if (isRemoveDomainStorage === void 0) {
|
256
|
+
isRemoveDomainStorage = false;
|
257
|
+
}
|
185
258
|
localStorage.removeItem("USER_INFORMATION");
|
186
259
|
localStorage.removeItem(ACCESS_TOKEN);
|
260
|
+
if (isRemoveDomainStorage) {
|
261
|
+
localStorage.removeItem(ACADEMY_DOMAIN);
|
262
|
+
}
|
187
263
|
try {
|
188
264
|
signOut();
|
189
265
|
} catch (error) {
|
@@ -200,7 +276,120 @@ var useGoogleSignOut = function useGoogleSignOut(props) {
|
|
200
276
|
};
|
201
277
|
};
|
202
278
|
|
203
|
-
var ERROR_MESSAGE = "
|
279
|
+
var ERROR_MESSAGE = "request_login_fail";
|
280
|
+
var useLogin = function useLogin(onNavigate, homeAcademyUrl, homeUrl, registerUrl) {
|
281
|
+
var dispatch = reactRedux.useDispatch();
|
282
|
+
var _useTranslation = reactI18next.useTranslation(),
|
283
|
+
t = _useTranslation.t;
|
284
|
+
var _useGoogleSignOut = useGoogleSignOut({
|
285
|
+
onNavigate: onNavigate
|
286
|
+
}),
|
287
|
+
handleSignOut = _useGoogleSignOut.handleSignOut;
|
288
|
+
var searchParams = new URLSearchParams(window.location.search);
|
289
|
+
var paramDomain = searchParams.get('domain');
|
290
|
+
var handleLoginGoogle = function handleLoginGoogle(data, isLogout) {
|
291
|
+
if (isLogout === void 0) {
|
292
|
+
isLogout = true;
|
293
|
+
}
|
294
|
+
try {
|
295
|
+
var academyDomain = paramDomain || getAcademyDomain();
|
296
|
+
var isStudent = data.role === exports.Role.Student;
|
297
|
+
return Promise.resolve(handleLogin(function () {
|
298
|
+
return new Promise(function (resolve, reject) {
|
299
|
+
try {
|
300
|
+
var _temp = _catch(function () {
|
301
|
+
return Promise.resolve(academyDomain ? apiLoginGoogle(data) : apiLoginGoogleSuperAdmin(data)).then(function (loginResponse) {
|
302
|
+
var result = loginResponse.data;
|
303
|
+
resolve(result);
|
304
|
+
});
|
305
|
+
}, function (error) {
|
306
|
+
!!academyDomain && localStorage.removeItem(ACADEMY_DOMAIN);
|
307
|
+
reject(error);
|
308
|
+
});
|
309
|
+
return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
|
310
|
+
} catch (e) {
|
311
|
+
return Promise.reject(e);
|
312
|
+
}
|
313
|
+
});
|
314
|
+
}, isStudent, isLogout)).then(function () {});
|
315
|
+
} catch (e) {
|
316
|
+
return Promise.reject(e);
|
317
|
+
}
|
318
|
+
};
|
319
|
+
var handleLoginAccessToken = function handleLoginAccessToken(data, isLogout, domain) {
|
320
|
+
if (isLogout === void 0) {
|
321
|
+
isLogout = true;
|
322
|
+
}
|
323
|
+
try {
|
324
|
+
var isStudent = data.role === exports.Role.Student;
|
325
|
+
return Promise.resolve(handleLogin(function () {
|
326
|
+
return new Promise(function (resolve, reject) {
|
327
|
+
try {
|
328
|
+
var _temp2 = _catch(function () {
|
329
|
+
return Promise.resolve(apiLoginWithAccessToken(data, domain)).then(function (loginResponse) {
|
330
|
+
var result = loginResponse.data;
|
331
|
+
resolve(result);
|
332
|
+
});
|
333
|
+
}, function (error) {
|
334
|
+
reject(error);
|
335
|
+
});
|
336
|
+
return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
|
337
|
+
} catch (e) {
|
338
|
+
return Promise.reject(e);
|
339
|
+
}
|
340
|
+
});
|
341
|
+
}, isStudent, isLogout)).then(function () {});
|
342
|
+
} catch (e) {
|
343
|
+
return Promise.reject(e);
|
344
|
+
}
|
345
|
+
};
|
346
|
+
var handleLogin = function handleLogin(apiLogin, isStudent, isLogout) {
|
347
|
+
if (isLogout === void 0) {
|
348
|
+
isLogout = true;
|
349
|
+
}
|
350
|
+
try {
|
351
|
+
var _temp4 = function _temp4() {
|
352
|
+
dispatch(setLoading(false));
|
353
|
+
};
|
354
|
+
dispatch(setLoading(true));
|
355
|
+
var _temp3 = _catch(function () {
|
356
|
+
return Promise.resolve(apiLogin()).then(function (loginResponse) {
|
357
|
+
var isFirstLogin = loginResponse.isFirstLogin,
|
358
|
+
token = loginResponse.token,
|
359
|
+
user = loginResponse.user;
|
360
|
+
var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain);
|
361
|
+
var needToRegister = isStudent && isFirstLogin && isAcademy;
|
362
|
+
var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
|
363
|
+
redirectLoginUser(user, token, redirectUrl);
|
364
|
+
});
|
365
|
+
}, function (error) {
|
366
|
+
var _error$response, _error$response$data, _error$response2, _error$response2$data, _error$response3;
|
367
|
+
var message = undefined;
|
368
|
+
message = t((error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.message) || (error === null || error === void 0 ? void 0 : (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : (_error$response2$data = _error$response2.data) === null || _error$response2$data === void 0 ? void 0 : _error$response2$data.title) || (error === null || error === void 0 ? void 0 : (_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data) || ERROR_MESSAGE);
|
369
|
+
message && alert(message);
|
370
|
+
isLogout && handleSignOut();
|
371
|
+
});
|
372
|
+
return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
|
373
|
+
} catch (e) {
|
374
|
+
return Promise.reject(e);
|
375
|
+
}
|
376
|
+
};
|
377
|
+
var redirectLoginUser = function redirectLoginUser(data, token, redirectUrl) {
|
378
|
+
localStorage.setItem(ACCESS_TOKEN, token);
|
379
|
+
!data.academyDomain && localStorage.removeItem(ACADEMY_DOMAIN);
|
380
|
+
!!data.academyDomain && localStorage.setItem(ACADEMY_DOMAIN, data.academyDomain);
|
381
|
+
dispatch(setUser(_extends({}, data)));
|
382
|
+
if (redirectUrl) {
|
383
|
+
onNavigate(redirectUrl);
|
384
|
+
}
|
385
|
+
};
|
386
|
+
return {
|
387
|
+
handleLoginGoogle: handleLoginGoogle,
|
388
|
+
handleLoginAccessToken: handleLoginAccessToken,
|
389
|
+
redirectLoginUser: redirectLoginUser
|
390
|
+
};
|
391
|
+
};
|
392
|
+
|
204
393
|
var schema = yup.object({
|
205
394
|
email: yup.string().email("Email is invalid").required("Email is required"),
|
206
395
|
password: yup.string().required("Password is required"),
|
@@ -210,65 +399,32 @@ var BlockLogin = function BlockLogin(_ref) {
|
|
210
399
|
var defaultInfo = _ref.defaultInfo,
|
211
400
|
onNavigate = _ref.onNavigate,
|
212
401
|
_ref$role = _ref.role,
|
213
|
-
role = _ref$role === void 0 ? exports.Role.Student : _ref$role
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
402
|
+
role = _ref$role === void 0 ? exports.Role.Student : _ref$role,
|
403
|
+
homeAcademyUrl = _ref.homeAcademyUrl,
|
404
|
+
homeUrl = _ref.homeUrl,
|
405
|
+
registerUrl = _ref.registerUrl;
|
406
|
+
var _useLogin = useLogin(onNavigate, homeAcademyUrl, homeUrl, registerUrl),
|
407
|
+
handleLoginGoogle = _useLogin.handleLoginGoogle;
|
219
408
|
var onSuccessGoogle = function onSuccessGoogle(res) {
|
220
409
|
try {
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
dispatch(setLoading(true));
|
240
|
-
var _temp = _catch(function () {
|
241
|
-
return Promise.resolve(apiLoginGoogle(infoLogin, role)).then(function (res1) {
|
242
|
-
var isFirstLogin = res1.data.isFirstLogin;
|
243
|
-
var tokenJWT = res1.data.token;
|
244
|
-
localStorage.setItem("USER_INFORMATION", JSON.stringify(infoLogin));
|
245
|
-
localStorage.setItem(ACCESS_TOKEN, tokenJWT);
|
246
|
-
if (role === exports.Role.Student && isFirstLogin) {
|
247
|
-
onNavigate("/register/info");
|
248
|
-
} else {
|
249
|
-
onNavigate("/");
|
250
|
-
}
|
251
|
-
});
|
252
|
-
}, function (error) {
|
253
|
-
var _error$response, _error$response$data;
|
254
|
-
var message = undefined;
|
255
|
-
var type = error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.type;
|
256
|
-
if (type === AuthenticationMessage.NotAllowedToRegister) {
|
257
|
-
alert("가입 권한이 없는 계정입니다. 관리자에게 문의하세요.");
|
258
|
-
} else if (type) {
|
259
|
-
var _error$response2, _error$response2$data;
|
260
|
-
message = (error === null || error === void 0 ? void 0 : (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : (_error$response2$data = _error$response2.data) === null || _error$response2$data === void 0 ? void 0 : _error$response2$data.message) || ERROR_MESSAGE;
|
261
|
-
} else {
|
262
|
-
var _error$response3;
|
263
|
-
message = (error === null || error === void 0 ? void 0 : (_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data) || ERROR_MESSAGE;
|
264
|
-
}
|
265
|
-
message && alert(message);
|
266
|
-
handleSignOut();
|
267
|
-
});
|
268
|
-
return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
|
269
|
-
}
|
270
|
-
}();
|
271
|
-
return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(function () {}) : void 0);
|
410
|
+
if (!!(res !== null && res !== void 0 && res.accessToken)) {
|
411
|
+
var _res$profileObj = res.profileObj,
|
412
|
+
email = _res$profileObj.email,
|
413
|
+
imageUrl = _res$profileObj.imageUrl,
|
414
|
+
name = _res$profileObj.name;
|
415
|
+
var accessToken = res.tokenObj.id_token;
|
416
|
+
var googleId = res.googleId;
|
417
|
+
var infoLogin = {
|
418
|
+
imageUrl: imageUrl,
|
419
|
+
fullName: name,
|
420
|
+
email: email,
|
421
|
+
token: accessToken,
|
422
|
+
googleId: googleId,
|
423
|
+
role: role
|
424
|
+
};
|
425
|
+
handleLoginGoogle(infoLogin);
|
426
|
+
}
|
427
|
+
return Promise.resolve();
|
272
428
|
} catch (e) {
|
273
429
|
return Promise.reject(e);
|
274
430
|
}
|
@@ -284,17 +440,17 @@ var BlockLogin = function BlockLogin(_ref) {
|
|
284
440
|
}, function (formikProps) {
|
285
441
|
var handleSubmit = formikProps.handleSubmit;
|
286
442
|
return React__default.createElement(reactstrap.Row, {
|
287
|
-
className: "" +
|
443
|
+
className: "" + stylesGlobal["box-login"]
|
288
444
|
}, React__default.createElement(reactstrap.Col, {
|
289
445
|
className: "p-0 d-flex justify-content-center"
|
290
446
|
}, React__default.createElement(reactstrap.Form, {
|
291
|
-
className: "" +
|
447
|
+
className: "" + stylesGlobal["block-login"],
|
292
448
|
onSubmit: handleSubmit
|
293
449
|
}, React__default.createElement("div", {
|
294
|
-
className: "" +
|
450
|
+
className: "" + stylesGlobal["block-form"]
|
295
451
|
}, React__default.createElement("img", {
|
296
452
|
src: "/images/logo.jpeg",
|
297
|
-
className: "" +
|
453
|
+
className: "" + stylesGlobal["img-login-rectangle"]
|
298
454
|
}), React__default.createElement(reactstrap.Col, {
|
299
455
|
className: "p-0 mt-1 mb-4"
|
300
456
|
}, React__default.createElement(GoogleLogin__default, {
|
@@ -303,7 +459,7 @@ var BlockLogin = function BlockLogin(_ref) {
|
|
303
459
|
onSuccess: onSuccessGoogle,
|
304
460
|
onFailure: onFailureGoogle,
|
305
461
|
cookiePolicy: "single_host_origin",
|
306
|
-
className: "" +
|
462
|
+
className: "" + stylesGlobal["btn-login-google"],
|
307
463
|
isSignedIn: true
|
308
464
|
}))))));
|
309
465
|
});
|
@@ -323,7 +479,7 @@ var defaultInfo = {
|
|
323
479
|
captcha: "",
|
324
480
|
rememberMe: false
|
325
481
|
};
|
326
|
-
var useLogin = function useLogin(onNavigate) {
|
482
|
+
var useLogin$1 = function useLogin(onNavigate) {
|
327
483
|
var _useState = React.useState(false),
|
328
484
|
openLogin = _useState[0],
|
329
485
|
setOpenLogin = _useState[1];
|
@@ -360,13 +516,14 @@ var useLogin = function useLogin(onNavigate) {
|
|
360
516
|
};
|
361
517
|
};
|
362
518
|
|
519
|
+
var _excluded = ["onNavigate"];
|
363
520
|
var Login = function Login(_ref) {
|
364
521
|
var onNavigate = _ref.onNavigate,
|
365
|
-
|
366
|
-
var _useLogin = useLogin(onNavigate),
|
522
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
|
523
|
+
var _useLogin = useLogin$1(onNavigate),
|
367
524
|
defaultInfo = _useLogin.defaultInfo;
|
368
525
|
return React__default.createElement("div", {
|
369
|
-
className:
|
526
|
+
className: stylesGlobal["login"] + " container-fluid font-family-lato"
|
370
527
|
}, React__default.createElement(reactstrap.Row, {
|
371
528
|
className: "h-100"
|
372
529
|
}, React__default.createElement(reactstrap.Col, {
|
@@ -374,11 +531,10 @@ var Login = function Login(_ref) {
|
|
374
531
|
md: 12,
|
375
532
|
xs: 12,
|
376
533
|
className: "d-flex justify-content-center h-100 align-items-center"
|
377
|
-
}, React__default.createElement(BlockLogin, {
|
534
|
+
}, React__default.createElement(BlockLogin, Object.assign({
|
378
535
|
defaultInfo: defaultInfo,
|
379
|
-
onNavigate: onNavigate
|
380
|
-
|
381
|
-
}))));
|
536
|
+
onNavigate: onNavigate
|
537
|
+
}, rest)))));
|
382
538
|
};
|
383
539
|
|
384
540
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
@@ -582,7 +738,8 @@ var initialState = {
|
|
582
738
|
type: "",
|
583
739
|
message: ""
|
584
740
|
},
|
585
|
-
user: null
|
741
|
+
user: null,
|
742
|
+
isReFetchUserAcademies: false
|
586
743
|
};
|
587
744
|
var commonReducer = toolkit.createReducer(initialState, function (builder) {
|
588
745
|
builder.addCase(setLoading, function (state, action) {
|
@@ -595,6 +752,8 @@ var commonReducer = toolkit.createReducer(initialState, function (builder) {
|
|
595
752
|
state.language = action.payload;
|
596
753
|
}).addCase(reset, function (_state, _action) {
|
597
754
|
return initialState;
|
755
|
+
}).addCase(setReFetchUserAcademies, function (state, action) {
|
756
|
+
state.isReFetchUserAcademies = action.payload;
|
598
757
|
});
|
599
758
|
});
|
600
759
|
|
@@ -658,11 +817,6 @@ var Loading = function Loading() {
|
|
658
817
|
}))) : null;
|
659
818
|
};
|
660
819
|
|
661
|
-
var AUTH_URL = BASE_URL + "/api/auth";
|
662
|
-
var getInfo = function getInfo() {
|
663
|
-
return api.get(AUTH_URL + "/info");
|
664
|
-
};
|
665
|
-
|
666
820
|
var LayoutContext = function LayoutContext(_ref) {
|
667
821
|
var children = _ref.children,
|
668
822
|
role = _ref.role,
|
@@ -671,6 +825,8 @@ var LayoutContext = function LayoutContext(_ref) {
|
|
671
825
|
onNavigate: onNavigate
|
672
826
|
}),
|
673
827
|
handleSignOut = _useGoogleSignOut.handleSignOut;
|
828
|
+
var _useTranslation = reactI18next.useTranslation(),
|
829
|
+
t = _useTranslation.t;
|
674
830
|
var dispatch = reactRedux.useDispatch();
|
675
831
|
var user = reactRedux.useSelector(function (state) {
|
676
832
|
var _state$common;
|
@@ -682,7 +838,7 @@ var LayoutContext = function LayoutContext(_ref) {
|
|
682
838
|
};
|
683
839
|
var checkRoleUser = React.useCallback(function () {
|
684
840
|
if (!user) return;
|
685
|
-
if (!roles.includes(role)) {
|
841
|
+
if (!roles.includes(role) && !!user.academyDomain) {
|
686
842
|
alert(user.email + " not allow to register " + role);
|
687
843
|
resetAuth();
|
688
844
|
}
|
@@ -699,7 +855,7 @@ var LayoutContext = function LayoutContext(_ref) {
|
|
699
855
|
}
|
700
856
|
dispatch(setLoading(true));
|
701
857
|
var _temp = _catch(function () {
|
702
|
-
return Promise.resolve(getInfo()).then(function (info) {
|
858
|
+
return Promise.resolve(getAcademyDomain() ? getInfo() : getSuperAdminInfoFromWeb()).then(function (info) {
|
703
859
|
if (!info) {
|
704
860
|
resetAuth();
|
705
861
|
}
|
@@ -709,7 +865,7 @@ var LayoutContext = function LayoutContext(_ref) {
|
|
709
865
|
console.log({
|
710
866
|
err: err
|
711
867
|
});
|
712
|
-
role ===
|
868
|
+
alert(t(role === exports.Role.Student ? "student_login_again" : role === exports.Role.Admin ? "admin_login_again" : "teacher_login_again"));
|
713
869
|
resetAuth();
|
714
870
|
});
|
715
871
|
return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
|
@@ -728,12 +884,12 @@ var ConfirmDialog = function ConfirmDialog(_ref) {
|
|
728
884
|
var open = _ref.open,
|
729
885
|
text = _ref.text,
|
730
886
|
_ref$cancelText = _ref.cancelText,
|
731
|
-
cancelText = _ref$cancelText === void 0 ? "
|
887
|
+
cancelText = _ref$cancelText === void 0 ? "아니요" : _ref$cancelText,
|
732
888
|
_ref$okText = _ref.okText,
|
733
|
-
okText = _ref$okText === void 0 ? "
|
889
|
+
okText = _ref$okText === void 0 ? "예" : _ref$okText,
|
734
890
|
isDelete = _ref.isDelete,
|
735
891
|
_ref$title = _ref.title,
|
736
|
-
title = _ref$title === void 0 ? "
|
892
|
+
title = _ref$title === void 0 ? "확인" : _ref$title,
|
737
893
|
toggle = _ref.toggle,
|
738
894
|
onConfirm = _ref.onConfirm,
|
739
895
|
confirmText = _ref.confirmText;
|
@@ -997,6 +1153,7 @@ var number_question = "{{number}}번";
|
|
997
1153
|
var answer_rate = "정답률";
|
998
1154
|
var seconds = "초";
|
999
1155
|
var search_placeholder = "시험 이름으로 검색하기";
|
1156
|
+
var search_by_student = "학생명으로 검색하기";
|
1000
1157
|
var study_touch = "영어연구소";
|
1001
1158
|
var exam_information = "시험정보";
|
1002
1159
|
var issue_number = "문제번호";
|
@@ -1064,6 +1221,55 @@ var the_seventh = "일곱번째";
|
|
1064
1221
|
var the_eighth = "여덟번째";
|
1065
1222
|
var the_ninth = "아홉번째";
|
1066
1223
|
var the_tenth = "열번째";
|
1224
|
+
var full_name_required = "성명은 필수 항목입니다";
|
1225
|
+
var email_required = "이메일은 필수입니다";
|
1226
|
+
var enter_full_name = "이름을 입력하세요";
|
1227
|
+
var enter_email = "이메일을 입력하세요";
|
1228
|
+
var admin = "관리자";
|
1229
|
+
var active = "활동적인";
|
1230
|
+
var create_new_user = "새 사용자 만들기";
|
1231
|
+
var update_user = "사용자 업데이트";
|
1232
|
+
var save = "구하다";
|
1233
|
+
var create_academy = "아카데미 만들기";
|
1234
|
+
var update_academy = "아카데미 업데이트";
|
1235
|
+
var connection_string = "연결 문자열";
|
1236
|
+
var image = "영상";
|
1237
|
+
var enter_academy_name = "학원명을 입력하세요";
|
1238
|
+
var enter_connection_string = "연결 문자열을 입력하세요";
|
1239
|
+
var academy_name_required = "아카데미 이름이 필요합니다";
|
1240
|
+
var connection_string_required = "연결 문자열 이름이 필요합니다";
|
1241
|
+
var not_allow_register_account_contact_admin = "가입 권한이 없는 계정입니다. 관리자에게 문의하세요.";
|
1242
|
+
var request_login_fail = "로그인 실패 요청!";
|
1243
|
+
var student_login_again = "학생, 다시 로그인해주세요.";
|
1244
|
+
var teacher_login_again = "선생님, 다시 로그인해주세요.";
|
1245
|
+
var admin_login_again = "선생님, 다시 로그인해주세요.";
|
1246
|
+
var domain_required = "도메인 이름이 필요합니다";
|
1247
|
+
var domain_name = "도메인 이름";
|
1248
|
+
var enter_academy_domain = "아카데미 도메인을 입력하세요";
|
1249
|
+
var created_by = "창조자";
|
1250
|
+
var modification_code = "시험 코드 수정은 불가능합니다.";
|
1251
|
+
var total_student_joined = "학생이 합류했습니다";
|
1252
|
+
var copy_to_clipboard = "클립 보드에 복사";
|
1253
|
+
var code_exam = "시험 코드";
|
1254
|
+
var button = {
|
1255
|
+
close: "닫기",
|
1256
|
+
send: "보내기"
|
1257
|
+
};
|
1258
|
+
var question_and_answer = "질문 및 답변";
|
1259
|
+
var problem_number_question = "문제 {{number}}번";
|
1260
|
+
var teacher_in_charge = "담당 교사";
|
1261
|
+
var counselor = "상담교사";
|
1262
|
+
var new_question = "새로운 질문";
|
1263
|
+
var hour = "시간";
|
1264
|
+
var minute = "분";
|
1265
|
+
var second = "두번째";
|
1266
|
+
var question_order = "{{number}} 번";
|
1267
|
+
var send_message = "메시지 보내기";
|
1268
|
+
var class_inquiry = "수업 문의";
|
1269
|
+
var no_academies_available = "이용 가능한 아카데미가 없습니다";
|
1270
|
+
var not_allow_register = "역할 등록을 허용하지 않음";
|
1271
|
+
var credentials_invalid = "자격 증명이 잘못되었습니다.";
|
1272
|
+
var role_is_invalid = "역할이 잘못되었습니다";
|
1067
1273
|
var lang_ko = {
|
1068
1274
|
problem_solving: problem_solving,
|
1069
1275
|
my_story: my_story,
|
@@ -1109,6 +1315,7 @@ var lang_ko = {
|
|
1109
1315
|
answer_rate: answer_rate,
|
1110
1316
|
seconds: seconds,
|
1111
1317
|
search_placeholder: search_placeholder,
|
1318
|
+
search_by_student: search_by_student,
|
1112
1319
|
study_touch: study_touch,
|
1113
1320
|
exam_information: exam_information,
|
1114
1321
|
issue_number: issue_number,
|
@@ -1175,7 +1382,54 @@ var lang_ko = {
|
|
1175
1382
|
the_seventh: the_seventh,
|
1176
1383
|
the_eighth: the_eighth,
|
1177
1384
|
the_ninth: the_ninth,
|
1178
|
-
the_tenth: the_tenth
|
1385
|
+
the_tenth: the_tenth,
|
1386
|
+
full_name_required: full_name_required,
|
1387
|
+
email_required: email_required,
|
1388
|
+
enter_full_name: enter_full_name,
|
1389
|
+
enter_email: enter_email,
|
1390
|
+
admin: admin,
|
1391
|
+
active: active,
|
1392
|
+
create_new_user: create_new_user,
|
1393
|
+
update_user: update_user,
|
1394
|
+
save: save,
|
1395
|
+
create_academy: create_academy,
|
1396
|
+
update_academy: update_academy,
|
1397
|
+
connection_string: connection_string,
|
1398
|
+
image: image,
|
1399
|
+
enter_academy_name: enter_academy_name,
|
1400
|
+
enter_connection_string: enter_connection_string,
|
1401
|
+
academy_name_required: academy_name_required,
|
1402
|
+
connection_string_required: connection_string_required,
|
1403
|
+
not_allow_register_account_contact_admin: not_allow_register_account_contact_admin,
|
1404
|
+
request_login_fail: request_login_fail,
|
1405
|
+
student_login_again: student_login_again,
|
1406
|
+
teacher_login_again: teacher_login_again,
|
1407
|
+
admin_login_again: admin_login_again,
|
1408
|
+
domain_required: domain_required,
|
1409
|
+
domain_name: domain_name,
|
1410
|
+
enter_academy_domain: enter_academy_domain,
|
1411
|
+
created_by: created_by,
|
1412
|
+
modification_code: modification_code,
|
1413
|
+
total_student_joined: total_student_joined,
|
1414
|
+
copy_to_clipboard: copy_to_clipboard,
|
1415
|
+
code_exam: code_exam,
|
1416
|
+
button: button,
|
1417
|
+
question_and_answer: question_and_answer,
|
1418
|
+
problem_number_question: problem_number_question,
|
1419
|
+
teacher_in_charge: teacher_in_charge,
|
1420
|
+
counselor: counselor,
|
1421
|
+
new_question: new_question,
|
1422
|
+
hour: hour,
|
1423
|
+
minute: minute,
|
1424
|
+
second: second,
|
1425
|
+
question_order: question_order,
|
1426
|
+
send_message: send_message,
|
1427
|
+
class_inquiry: class_inquiry,
|
1428
|
+
no_academies_available: no_academies_available,
|
1429
|
+
not_allow_register: not_allow_register,
|
1430
|
+
credentials_invalid: credentials_invalid,
|
1431
|
+
role_is_invalid: role_is_invalid,
|
1432
|
+
"q&a": "질의응답"
|
1179
1433
|
};
|
1180
1434
|
|
1181
1435
|
var problem_solving$1 = "Problem Solving";
|
@@ -1222,6 +1476,7 @@ var number_question$1 = "No.{{number}}";
|
|
1222
1476
|
var answer_rate$1 = "Answer rate";
|
1223
1477
|
var seconds$1 = "s";
|
1224
1478
|
var search_placeholder$1 = "Search by exam name";
|
1479
|
+
var search_by_student$1 = "Search by student name";
|
1225
1480
|
var study_touch$1 = "Study touch";
|
1226
1481
|
var exam_information$1 = "Exam information";
|
1227
1482
|
var issue_number$1 = "Issue number";
|
@@ -1325,6 +1580,55 @@ var the_seventh$1 = "The seventh";
|
|
1325
1580
|
var the_eighth$1 = "The eighth";
|
1326
1581
|
var the_ninth$1 = "The ninth";
|
1327
1582
|
var the_tenth$1 = "The tenth";
|
1583
|
+
var full_name_required$1 = "Full name is required";
|
1584
|
+
var email_required$1 = "Email is required";
|
1585
|
+
var enter_full_name$1 = "Enter full name";
|
1586
|
+
var enter_email$1 = "Enter email";
|
1587
|
+
var admin$1 = "Admin";
|
1588
|
+
var active$1 = "Active";
|
1589
|
+
var create_new_user$1 = "Create new user";
|
1590
|
+
var update_user$1 = "Update user";
|
1591
|
+
var save$1 = "Save";
|
1592
|
+
var create_academy$1 = "Create academy";
|
1593
|
+
var update_academy$1 = "Update academy";
|
1594
|
+
var connection_string$1 = "Connection string";
|
1595
|
+
var image$1 = "Image";
|
1596
|
+
var enter_academy_name$1 = "Enter academy name";
|
1597
|
+
var enter_connection_string$1 = "Enter connection string";
|
1598
|
+
var academy_name_required$1 = "Academy name required";
|
1599
|
+
var connection_string_required$1 = "Connection string name required";
|
1600
|
+
var not_allow_register_account_contact_admin$1 = "This account does not have permission to sign up. Please contact your administrator.";
|
1601
|
+
var request_login_fail$1 = "Request login failure!";
|
1602
|
+
var student_login_again$1 = "Student, please log in again.";
|
1603
|
+
var teacher_login_again$1 = "Teacher, please log in again.";
|
1604
|
+
var admin_login_again$1 = "Admin, please log in again.";
|
1605
|
+
var domain_required$1 = "Domain name required";
|
1606
|
+
var domain_name$1 = "Domain name";
|
1607
|
+
var enter_academy_domain$1 = "Enter academy domain";
|
1608
|
+
var created_by$1 = "Created by";
|
1609
|
+
var modification_code$1 = "Modification of test code is not possible";
|
1610
|
+
var total_student_joined$1 = "Students have joined";
|
1611
|
+
var code_exam$1 = "Exam code";
|
1612
|
+
var copy_to_clipboard$1 = "Copy to clipboard";
|
1613
|
+
var button$1 = {
|
1614
|
+
close: "Close",
|
1615
|
+
send: "Send"
|
1616
|
+
};
|
1617
|
+
var question_and_answer$1 = "Question And Answer";
|
1618
|
+
var problem_number_question$1 = "Problem No.{{number}}";
|
1619
|
+
var teacher_in_charge$1 = "Teacher In Charge";
|
1620
|
+
var counselor$1 = "Counselor";
|
1621
|
+
var new_question$1 = "New Question";
|
1622
|
+
var hour$1 = "hour";
|
1623
|
+
var minute$1 = "minutes";
|
1624
|
+
var second$1 = "second";
|
1625
|
+
var question_order$1 = "Number {{number}}";
|
1626
|
+
var send_message$1 = "Send Message";
|
1627
|
+
var class_inquiry$1 = "Class inquiry";
|
1628
|
+
var no_academies_available$1 = "No academies available";
|
1629
|
+
var not_allow_register$1 = "Not allow to register role";
|
1630
|
+
var credentials_invalid$1 = "Credentials is invalid";
|
1631
|
+
var role_is_invalid$1 = "Role is invalid";
|
1328
1632
|
var lang_en = {
|
1329
1633
|
problem_solving: problem_solving$1,
|
1330
1634
|
my_story: my_story$1,
|
@@ -1370,6 +1674,7 @@ var lang_en = {
|
|
1370
1674
|
answer_rate: answer_rate$1,
|
1371
1675
|
seconds: seconds$1,
|
1372
1676
|
search_placeholder: search_placeholder$1,
|
1677
|
+
search_by_student: search_by_student$1,
|
1373
1678
|
study_touch: study_touch$1,
|
1374
1679
|
exam_information: exam_information$1,
|
1375
1680
|
issue_number: issue_number$1,
|
@@ -1472,7 +1777,54 @@ var lang_en = {
|
|
1472
1777
|
the_seventh: the_seventh$1,
|
1473
1778
|
the_eighth: the_eighth$1,
|
1474
1779
|
the_ninth: the_ninth$1,
|
1475
|
-
the_tenth: the_tenth$1
|
1780
|
+
the_tenth: the_tenth$1,
|
1781
|
+
full_name_required: full_name_required$1,
|
1782
|
+
email_required: email_required$1,
|
1783
|
+
enter_full_name: enter_full_name$1,
|
1784
|
+
enter_email: enter_email$1,
|
1785
|
+
admin: admin$1,
|
1786
|
+
active: active$1,
|
1787
|
+
create_new_user: create_new_user$1,
|
1788
|
+
update_user: update_user$1,
|
1789
|
+
save: save$1,
|
1790
|
+
create_academy: create_academy$1,
|
1791
|
+
update_academy: update_academy$1,
|
1792
|
+
connection_string: connection_string$1,
|
1793
|
+
image: image$1,
|
1794
|
+
enter_academy_name: enter_academy_name$1,
|
1795
|
+
enter_connection_string: enter_connection_string$1,
|
1796
|
+
academy_name_required: academy_name_required$1,
|
1797
|
+
connection_string_required: connection_string_required$1,
|
1798
|
+
not_allow_register_account_contact_admin: not_allow_register_account_contact_admin$1,
|
1799
|
+
request_login_fail: request_login_fail$1,
|
1800
|
+
student_login_again: student_login_again$1,
|
1801
|
+
teacher_login_again: teacher_login_again$1,
|
1802
|
+
admin_login_again: admin_login_again$1,
|
1803
|
+
domain_required: domain_required$1,
|
1804
|
+
domain_name: domain_name$1,
|
1805
|
+
enter_academy_domain: enter_academy_domain$1,
|
1806
|
+
created_by: created_by$1,
|
1807
|
+
modification_code: modification_code$1,
|
1808
|
+
total_student_joined: total_student_joined$1,
|
1809
|
+
code_exam: code_exam$1,
|
1810
|
+
copy_to_clipboard: copy_to_clipboard$1,
|
1811
|
+
button: button$1,
|
1812
|
+
question_and_answer: question_and_answer$1,
|
1813
|
+
problem_number_question: problem_number_question$1,
|
1814
|
+
teacher_in_charge: teacher_in_charge$1,
|
1815
|
+
counselor: counselor$1,
|
1816
|
+
new_question: new_question$1,
|
1817
|
+
hour: hour$1,
|
1818
|
+
minute: minute$1,
|
1819
|
+
second: second$1,
|
1820
|
+
question_order: question_order$1,
|
1821
|
+
send_message: send_message$1,
|
1822
|
+
class_inquiry: class_inquiry$1,
|
1823
|
+
no_academies_available: no_academies_available$1,
|
1824
|
+
not_allow_register: not_allow_register$1,
|
1825
|
+
credentials_invalid: credentials_invalid$1,
|
1826
|
+
role_is_invalid: role_is_invalid$1,
|
1827
|
+
"q&a": "Q&A"
|
1476
1828
|
};
|
1477
1829
|
|
1478
1830
|
i18n.use(reactI18next.initReactI18next).init({
|
@@ -1566,9 +1918,9 @@ var TheLanguageDropdown = function TheLanguageDropdown() {
|
|
1566
1918
|
return React__default.createElement(reactstrap.Dropdown, {
|
1567
1919
|
isOpen: dropdownOpen,
|
1568
1920
|
toggle: toggle,
|
1569
|
-
className: "" +
|
1921
|
+
className: "" + stylesGlobal["dropdown-menu"]
|
1570
1922
|
}, React__default.createElement(reactstrap.DropdownToggle, {
|
1571
|
-
className:
|
1923
|
+
className: stylesGlobal["header-avatar"] + " d-flex align-items-center"
|
1572
1924
|
}, React__default.createElement("span", {
|
1573
1925
|
style: {
|
1574
1926
|
color: "#000",
|
@@ -1577,7 +1929,7 @@ var TheLanguageDropdown = function TheLanguageDropdown() {
|
|
1577
1929
|
alignItems: 'center'
|
1578
1930
|
}
|
1579
1931
|
}, !!currentLanguage && React__default.createElement("img", {
|
1580
|
-
className: "mr-2 " +
|
1932
|
+
className: "mr-2 " + stylesGlobal['dropdown-menu-flag'],
|
1581
1933
|
src: currentLanguage.image
|
1582
1934
|
}), !!currentLanguage && currentLanguage.shortName, React__default.createElement(io5.IoChevronDown, {
|
1583
1935
|
className: "ml-2",
|
@@ -1587,16 +1939,16 @@ var TheLanguageDropdown = function TheLanguageDropdown() {
|
|
1587
1939
|
marginTop: "2px"
|
1588
1940
|
}
|
1589
1941
|
}))), React__default.createElement(reactstrap.DropdownMenu, {
|
1590
|
-
className:
|
1942
|
+
className: stylesGlobal["dropdown-content-language"]
|
1591
1943
|
}, LANGUAGES.map(function (lang, index) {
|
1592
1944
|
return React__default.createElement(reactstrap.DropdownItem, {
|
1593
1945
|
key: lang.code,
|
1594
|
-
className:
|
1946
|
+
className: stylesGlobal["dropdown-change"] + " px-0 py-0 " + (index === LANGUAGES.length - 1 ? "pb-2" : "pt-2"),
|
1595
1947
|
onClick: function onClick() {
|
1596
1948
|
return setItemLanguage(lang.code);
|
1597
1949
|
}
|
1598
1950
|
}, React__default.createElement("div", {
|
1599
|
-
className:
|
1951
|
+
className: stylesGlobal["dropdown-item-language"] + " " + stylesGlobal["item-logout"] + " " + (language == lang.code ? stylesGlobal['dropdown-item-language-active'] : "") + " d-flex align-items-center w-100"
|
1600
1952
|
}, React__default.createElement("span", {
|
1601
1953
|
className: "mr-2 d-flex hover-opacity"
|
1602
1954
|
}, React__default.createElement("img", {
|
@@ -1609,6 +1961,196 @@ var TheLanguageDropdown = function TheLanguageDropdown() {
|
|
1609
1961
|
})));
|
1610
1962
|
};
|
1611
1963
|
|
1964
|
+
var ACADEMY_URL = BASE_URL + "/api/academy";
|
1965
|
+
var SUPER_ADMIN_ACADEMY_URL = SUPER_ADMIN_BASE_URL + "/api/academies";
|
1966
|
+
var getAcademyList = function getAcademyList(role) {
|
1967
|
+
return api.get(SUPER_ADMIN_ACADEMY_URL + "/active", {
|
1968
|
+
params: {
|
1969
|
+
role: role
|
1970
|
+
}
|
1971
|
+
});
|
1972
|
+
};
|
1973
|
+
var getUserAcademies = function getUserAcademies(role) {
|
1974
|
+
return api.get("" + ACADEMY_URL, {
|
1975
|
+
params: {
|
1976
|
+
role: role
|
1977
|
+
}
|
1978
|
+
});
|
1979
|
+
};
|
1980
|
+
var switchAcademy = function switchAcademy(academyId) {
|
1981
|
+
return api.post(ACADEMY_URL + "/switch-academy?academyId=" + academyId);
|
1982
|
+
};
|
1983
|
+
|
1984
|
+
var useSwitchAcademy = function useSwitchAcademy(role, navigate, homeAcademyUrl, homeUrl) {
|
1985
|
+
if (role === void 0) {
|
1986
|
+
role = exports.Role.Student;
|
1987
|
+
}
|
1988
|
+
var dispatch = reactRedux.useDispatch();
|
1989
|
+
var _useLogin = useLogin(navigate, homeAcademyUrl, homeUrl),
|
1990
|
+
handleLoginAccessToken = _useLogin.handleLoginAccessToken;
|
1991
|
+
var _useState = React.useState(false),
|
1992
|
+
dropdownOpen = _useState[0],
|
1993
|
+
setDropdownOpen = _useState[1];
|
1994
|
+
var toggleDropdown = function toggleDropdown() {
|
1995
|
+
return setDropdownOpen(function (prevState) {
|
1996
|
+
return !prevState;
|
1997
|
+
});
|
1998
|
+
};
|
1999
|
+
var _useState2 = React.useState([]),
|
2000
|
+
academyList = _useState2[0],
|
2001
|
+
setAcademyList = _useState2[1];
|
2002
|
+
var user = reactRedux.useSelector(function (state) {
|
2003
|
+
var _state$common;
|
2004
|
+
return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
|
2005
|
+
});
|
2006
|
+
var isReFetchUserAcademies = reactRedux.useSelector(function (state) {
|
2007
|
+
var _state$common2;
|
2008
|
+
return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : _state$common2.isReFetchUserAcademies;
|
2009
|
+
});
|
2010
|
+
var getAcademies = function getAcademies(isLoading) {
|
2011
|
+
if (isLoading === void 0) {
|
2012
|
+
isLoading = true;
|
2013
|
+
}
|
2014
|
+
try {
|
2015
|
+
var _temp3 = function _temp3() {
|
2016
|
+
isLoading && dispatch(setLoading(false));
|
2017
|
+
};
|
2018
|
+
if (!user) return Promise.resolve();
|
2019
|
+
var isSuperAdminUser = user && !user.academyDomain;
|
2020
|
+
var isSuperAdminRole = user.roles.includes(exports.Role.Admin);
|
2021
|
+
isLoading && dispatch(setLoading(true));
|
2022
|
+
var _temp2 = _catch(function () {
|
2023
|
+
return Promise.resolve(isSuperAdminUser ? getAcademyList(role) : getUserAcademies(role)).then(function (res) {
|
2024
|
+
var items = res.data.items || [];
|
2025
|
+
if (isReFetchUserAcademies) dispatch(setReFetchUserAcademies(false));
|
2026
|
+
setAcademyList(items);
|
2027
|
+
var _temp = function () {
|
2028
|
+
if (!isSuperAdminRole && isSuperAdminUser && role == exports.Role.Admin && items.length > 0) {
|
2029
|
+
return Promise.resolve(handleSwitchAcademy(items[0], false)).then(function () {});
|
2030
|
+
}
|
2031
|
+
}();
|
2032
|
+
if (_temp && _temp.then) return _temp.then(function () {});
|
2033
|
+
});
|
2034
|
+
}, function (error) {
|
2035
|
+
var _error$response, _error$response$data;
|
2036
|
+
reactToastify.toast.error((error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.tile) || "Get user academies failed");
|
2037
|
+
});
|
2038
|
+
return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2));
|
2039
|
+
} catch (e) {
|
2040
|
+
return Promise.reject(e);
|
2041
|
+
}
|
2042
|
+
};
|
2043
|
+
var handleSwitchAcademy = function handleSwitchAcademy(selectedAcademy, isLoading) {
|
2044
|
+
if (isLoading === void 0) {
|
2045
|
+
isLoading = true;
|
2046
|
+
}
|
2047
|
+
try {
|
2048
|
+
var _temp5 = function _temp5() {
|
2049
|
+
isLoading && dispatch(setLoading(false));
|
2050
|
+
};
|
2051
|
+
isLoading && dispatch(setLoading(true));
|
2052
|
+
var academyId = selectedAcademy ? selectedAcademy.id : 0;
|
2053
|
+
var academyDomain = selectedAcademy ? selectedAcademy.domain : undefined;
|
2054
|
+
var _temp4 = _catch(function () {
|
2055
|
+
return Promise.resolve(switchAcademy(academyId)).then(function (res) {
|
2056
|
+
var data = res.data;
|
2057
|
+
var requestBody = {
|
2058
|
+
accessToken: data.accessToken,
|
2059
|
+
email: user.email,
|
2060
|
+
academyId: academyId,
|
2061
|
+
role: role
|
2062
|
+
};
|
2063
|
+
academyDomain && localStorage.setItem(ACADEMY_DOMAIN, academyDomain);
|
2064
|
+
!academyDomain && localStorage.removeItem(ACADEMY_DOMAIN);
|
2065
|
+
return Promise.resolve(handleLoginAccessToken(requestBody, false, user.academyDomain ? academyDomain : undefined)).then(function () {});
|
2066
|
+
});
|
2067
|
+
}, function (error) {
|
2068
|
+
var _error$response2, _error$response2$data;
|
2069
|
+
reactToastify.toast.error((error === null || error === void 0 ? void 0 : (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : (_error$response2$data = _error$response2.data) === null || _error$response2$data === void 0 ? void 0 : _error$response2$data.title) || "Switch academy failed");
|
2070
|
+
});
|
2071
|
+
return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4));
|
2072
|
+
} catch (e) {
|
2073
|
+
return Promise.reject(e);
|
2074
|
+
}
|
2075
|
+
};
|
2076
|
+
React.useEffect(function () {
|
2077
|
+
getAcademies();
|
2078
|
+
}, [user === null || user === void 0 ? void 0 : user.academyDomain, user === null || user === void 0 ? void 0 : user.email]);
|
2079
|
+
React.useEffect(function () {
|
2080
|
+
isReFetchUserAcademies && getAcademies(false);
|
2081
|
+
}, [isReFetchUserAcademies]);
|
2082
|
+
var selectedAcademy = React.useMemo(function () {
|
2083
|
+
return academyList.find(function (i) {
|
2084
|
+
var _user$academyDomain;
|
2085
|
+
return i.domain.trim().toLowerCase() === (user === null || user === void 0 ? void 0 : (_user$academyDomain = user.academyDomain) === null || _user$academyDomain === void 0 ? void 0 : _user$academyDomain.trim().toLowerCase());
|
2086
|
+
});
|
2087
|
+
}, [user === null || user === void 0 ? void 0 : user.academyDomain, JSON.stringify(academyList)]);
|
2088
|
+
return {
|
2089
|
+
selectedAcademy: selectedAcademy,
|
2090
|
+
dropdownOpen: dropdownOpen,
|
2091
|
+
academyList: academyList,
|
2092
|
+
toggleDropdown: toggleDropdown,
|
2093
|
+
handleSwitchAcademy: handleSwitchAcademy
|
2094
|
+
};
|
2095
|
+
};
|
2096
|
+
|
2097
|
+
var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
|
2098
|
+
var _selectedAcademy$name, _selectedAcademy$name2;
|
2099
|
+
var homeAcademyUrl = _ref.homeAcademyUrl,
|
2100
|
+
homeUrl = _ref.homeUrl,
|
2101
|
+
navigate = _ref.navigate,
|
2102
|
+
role = _ref.role;
|
2103
|
+
var _useSwitchAcademy = useSwitchAcademy(role, navigate, homeAcademyUrl, homeUrl),
|
2104
|
+
dropdownOpen = _useSwitchAcademy.dropdownOpen,
|
2105
|
+
academyList = _useSwitchAcademy.academyList,
|
2106
|
+
toggleDropdown = _useSwitchAcademy.toggleDropdown,
|
2107
|
+
handleSwitchAcademy = _useSwitchAcademy.handleSwitchAcademy,
|
2108
|
+
selectedAcademy = _useSwitchAcademy.selectedAcademy;
|
2109
|
+
var firstLetter = selectedAcademy === null || selectedAcademy === void 0 ? void 0 : (_selectedAcademy$name = selectedAcademy.name) === null || _selectedAcademy$name === void 0 ? void 0 : (_selectedAcademy$name2 = _selectedAcademy$name.charAt(0)) === null || _selectedAcademy$name2 === void 0 ? void 0 : _selectedAcademy$name2.toUpperCase();
|
2110
|
+
return React__default.createElement(reactstrap.Dropdown, {
|
2111
|
+
isOpen: dropdownOpen,
|
2112
|
+
toggle: toggleDropdown,
|
2113
|
+
className: stylesGlobal["dropdown-menu"] + " " + stylesGlobal["dropdown-academy"]
|
2114
|
+
}, React__default.createElement(reactstrap.DropdownToggle, {
|
2115
|
+
className: stylesGlobal["header-avatar"] + " d-flex align-items-center"
|
2116
|
+
}, React__default.createElement("div", {
|
2117
|
+
className: "" + stylesGlobal["image-academy"]
|
2118
|
+
}, selectedAcademy !== null && selectedAcademy !== void 0 && selectedAcademy.image ? React__default.createElement("img", {
|
2119
|
+
src: selectedAcademy === null || selectedAcademy === void 0 ? void 0 : selectedAcademy.image,
|
2120
|
+
alt: selectedAcademy === null || selectedAcademy === void 0 ? void 0 : selectedAcademy.name
|
2121
|
+
}) : React__default.createElement("span", null, firstLetter)), React__default.createElement("p", {
|
2122
|
+
className: "text-start mb-0",
|
2123
|
+
style: {
|
2124
|
+
fontSize: 14,
|
2125
|
+
fontWeight: 600,
|
2126
|
+
color: "#5458D5",
|
2127
|
+
minWidth: 150
|
2128
|
+
}
|
2129
|
+
}, (selectedAcademy === null || selectedAcademy === void 0 ? void 0 : selectedAcademy.name) || "No selected academy"), React__default.createElement("div", {
|
2130
|
+
className: "" + stylesGlobal["switch-icon"]
|
2131
|
+
}, React__default.createElement(go.GoArrowSwitch, {
|
2132
|
+
size: 14
|
2133
|
+
}))), React__default.createElement(reactstrap.DropdownMenu, {
|
2134
|
+
className: stylesGlobal["dropdown-content-academy"]
|
2135
|
+
}, academyList.map(function (academy) {
|
2136
|
+
return React__default.createElement(reactstrap.DropdownItem, {
|
2137
|
+
key: academy.id,
|
2138
|
+
className: stylesGlobal["dropdown-academy-item"] + " px-0 py-0",
|
2139
|
+
onClick: function onClick() {
|
2140
|
+
return handleSwitchAcademy(academy);
|
2141
|
+
}
|
2142
|
+
}, React__default.createElement("div", {
|
2143
|
+
className: stylesGlobal["dropdown-item-language"] + " " + stylesGlobal["item-logout"] + " " + (academy.id == (selectedAcademy === null || selectedAcademy === void 0 ? void 0 : selectedAcademy.id) ? stylesGlobal["dropdown-item-language-active"] : "") + " d-flex align-items-center w-100"
|
2144
|
+
}, React__default.createElement("span", {
|
2145
|
+
className: "mr-2 d-flex hover-opacity " + stylesGlobal["image-academy"]
|
2146
|
+
}, academy.image ? React__default.createElement("img", {
|
2147
|
+
src: academy.image
|
2148
|
+
}) : React__default.createElement("span", null, academy.name.charAt(0).toUpperCase())), academy.name));
|
2149
|
+
}), !academyList.length && React__default.createElement("p", {
|
2150
|
+
className: "px-2 text-center"
|
2151
|
+
}, "No academies available")));
|
2152
|
+
};
|
2153
|
+
|
1612
2154
|
var minutesToTimeSpan = (function (time) {
|
1613
2155
|
var h = Math.floor(time / 60);
|
1614
2156
|
var m = time % 60;
|
@@ -1636,44 +2178,17 @@ var canAccess = function canAccess(userRoles, componentRoles) {
|
|
1636
2178
|
return true;
|
1637
2179
|
};
|
1638
2180
|
|
1639
|
-
|
1640
|
-
|
1641
|
-
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
|
1650
|
-
};
|
1651
|
-
return _extends.apply(this, arguments);
|
1652
|
-
}
|
1653
|
-
function _objectWithoutPropertiesLoose(source, excluded) {
|
1654
|
-
if (source == null) return {};
|
1655
|
-
var target = {};
|
1656
|
-
var sourceKeys = Object.keys(source);
|
1657
|
-
var key, i;
|
1658
|
-
for (i = 0; i < sourceKeys.length; i++) {
|
1659
|
-
key = sourceKeys[i];
|
1660
|
-
if (excluded.indexOf(key) >= 0) continue;
|
1661
|
-
target[key] = source[key];
|
1662
|
-
}
|
1663
|
-
return target;
|
1664
|
-
}
|
1665
|
-
|
1666
|
-
var _excluded = ["isDefault", "defaultValue", "options", "isDisabled", "scrollBottom", "value", "isMulti"];
|
1667
|
-
var DropdownIndicator = function DropdownIndicator(props) {
|
1668
|
-
return React__default.createElement(Select.components.DropdownIndicator, Object.assign({}, props), React__default.createElement(fa.FaCaretDown, {
|
1669
|
-
color: "#5458D5"
|
1670
|
-
}));
|
1671
|
-
};
|
1672
|
-
var CustomOption = function CustomOption(props) {
|
1673
|
-
return React__default.createElement(Select.components.Option, Object.assign({}, props), React__default.createElement("div", {
|
1674
|
-
style: {
|
1675
|
-
fontSize: "14px",
|
1676
|
-
fontWeight: 500
|
2181
|
+
var _excluded$1 = ["isDefault", "defaultValue", "options", "isDisabled", "scrollBottom", "value", "isMulti"];
|
2182
|
+
var DropdownIndicator = function DropdownIndicator(props) {
|
2183
|
+
return React__default.createElement(Select.components.DropdownIndicator, Object.assign({}, props), React__default.createElement(fa.FaCaretDown, {
|
2184
|
+
color: "#5458D5"
|
2185
|
+
}));
|
2186
|
+
};
|
2187
|
+
var CustomOption = function CustomOption(props) {
|
2188
|
+
return React__default.createElement(Select.components.Option, Object.assign({}, props), React__default.createElement("div", {
|
2189
|
+
style: {
|
2190
|
+
fontSize: "14px",
|
2191
|
+
fontWeight: 500
|
1677
2192
|
}
|
1678
2193
|
}, props.data.label));
|
1679
2194
|
};
|
@@ -1708,7 +2223,7 @@ var CustomSelect = function CustomSelect(_ref) {
|
|
1708
2223
|
scrollBottom = _ref.scrollBottom,
|
1709
2224
|
value = _ref.value,
|
1710
2225
|
isMulti = _ref.isMulti,
|
1711
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
|
2226
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
|
1712
2227
|
var _useTranslation = reactI18next.useTranslation(),
|
1713
2228
|
t = _useTranslation.t;
|
1714
2229
|
var initialValues = Array.isArray(value) ? options.filter(function (i) {
|
@@ -1737,7 +2252,161 @@ var CustomSelect = function CustomSelect(_ref) {
|
|
1737
2252
|
}, rest));
|
1738
2253
|
};
|
1739
2254
|
|
1740
|
-
var styles
|
2255
|
+
var styles = {"header__avatar":"_2oGcJ","header__select":"_2y2XV","body":"_ntGyI","list":"_m7Fwt","list__item__header":"_3BM8N","list__item__avatar":"_1ReOK","list__item__avatar-container":"_2qbld","list__item__message":"_3s01i","list__item__message--reply-from":"_2Qxi3","list__item__message--reply-from-right":"_34Vx4","list__item__message--reply":"_3uheq","list__item__message--reply-right":"_2iBr7","reply-text":"_3ZPjO","container-custom":"_38A9k","student-row-col-1":"_Jt5t0","student-row-col-1-active":"_14DKj","row-col-2":"_qHGiR","inputBox":"_2iY67","inputBoxTable":"_3pCw0","background-chat":"_zILbw","wrap-content":"_38gsM","name-sender":"_Lfzyw","content-chat-sender":"_1X73E","content-chat-receiver":"_32V7T","custom-scroll":"_2Uul2","btn-send":"_395lb","btn-chat":"_gDYwm","input-chat":"_22TX5","btn-cancel":"_1u-eg","btn-register":"_22r6_","form-label-dialog":"_jADIA","form-select-width":"_WncPd","padding-content":"_3hz3H"};
|
2256
|
+
|
2257
|
+
var iconPersonNoActive = function iconPersonNoActive(_ref) {
|
2258
|
+
var _ref$width = _ref.width,
|
2259
|
+
width = _ref$width === void 0 ? "16" : _ref$width,
|
2260
|
+
_ref$height = _ref.height,
|
2261
|
+
height = _ref$height === void 0 ? "16" : _ref$height,
|
2262
|
+
color = _ref.color;
|
2263
|
+
return React__default.createElement("svg", {
|
2264
|
+
width: width,
|
2265
|
+
height: height,
|
2266
|
+
viewBox: "0 0 16 16",
|
2267
|
+
fill: color,
|
2268
|
+
xmlns: "http://www.w3.org/2000/svg"
|
2269
|
+
}, React__default.createElement("path", {
|
2270
|
+
d: "M10.395 2.01813C9.78691 1.36156 8.93753 1 8.00003 1C7.05753 1 6.20534 1.35937 5.60003 2.01187C4.98815 2.67156 4.69003 3.56813 4.76003 4.53625C4.89878 6.44625 6.35222 8 8.00003 8C9.64784 8 11.0988 6.44656 11.2397 4.53687C11.3107 3.5775 11.0107 2.68281 10.395 2.01813Z",
|
2271
|
+
fill: "#5458D5"
|
2272
|
+
}), React__default.createElement("path", {
|
2273
|
+
d: "M13.5001 15H2.50006C2.35608 15.0019 2.21349 14.9716 2.08267 14.9115C1.95185 14.8513 1.83609 14.7627 1.74381 14.6522C1.54068 14.4094 1.45881 14.0778 1.51943 13.7425C1.78318 12.2794 2.60631 11.0503 3.90006 10.1875C5.04943 9.42156 6.50537 9 8.00006 9C9.49474 9 10.9507 9.42188 12.1001 10.1875C13.3938 11.05 14.2169 12.2791 14.4807 13.7422C14.5413 14.0775 14.4594 14.4091 14.2563 14.6519C14.1641 14.7625 14.0483 14.8511 13.9175 14.9113C13.7867 14.9715 13.6441 15.0018 13.5001 15Z",
|
2274
|
+
fill: "#5458D5"
|
2275
|
+
}));
|
2276
|
+
};
|
2277
|
+
|
2278
|
+
var ChatRightItem = function ChatRightItem(_ref) {
|
2279
|
+
var content = _ref.content,
|
2280
|
+
createdAt = _ref.createdAt,
|
2281
|
+
sender = _ref.sender,
|
2282
|
+
showTimestamp = _ref.showTimestamp,
|
2283
|
+
isStudent = _ref.isStudent,
|
2284
|
+
showName = _ref.showName,
|
2285
|
+
contentType = _ref.contentType;
|
2286
|
+
var _useTranslation = reactI18next.useTranslation(),
|
2287
|
+
t = _useTranslation.t;
|
2288
|
+
return React__default.createElement("div", null, showTimestamp && React__default.createElement(material.Typography, {
|
2289
|
+
fontWeight: 500,
|
2290
|
+
fontSize: "12px",
|
2291
|
+
lineHeight: "14.32px",
|
2292
|
+
color: "#97A1AF",
|
2293
|
+
textAlign: "center"
|
2294
|
+
}, utcToLocalTime(createdAt, t("date_time_format"))), React__default.createElement(material.Grid, {
|
2295
|
+
item: true,
|
2296
|
+
xs: 12,
|
2297
|
+
display: "flex",
|
2298
|
+
justifyContent: "flex-end",
|
2299
|
+
padding: "4px 0"
|
2300
|
+
}, React__default.createElement(material.Box, null, showName && isStudent && React__default.createElement(material.Box, {
|
2301
|
+
gap: "8px",
|
2302
|
+
className: " " + styles["name-sender"],
|
2303
|
+
display: "flex",
|
2304
|
+
alignItems: "center",
|
2305
|
+
flexDirection: "row"
|
2306
|
+
}, React__default.createElement(iconPersonNoActive, null), React__default.createElement(material.Typography, {
|
2307
|
+
fontWeight: 700,
|
2308
|
+
fontSize: 14,
|
2309
|
+
padding: "4px",
|
2310
|
+
lineHeight: "16.71px",
|
2311
|
+
color: "#5458D5"
|
2312
|
+
}, sender === null || sender === void 0 ? void 0 : sender.fullName)), contentType ? React__default.createElement("img", {
|
2313
|
+
src: content,
|
2314
|
+
style: {
|
2315
|
+
backgroundRepeat: "no-repeat",
|
2316
|
+
width: "200px",
|
2317
|
+
height: "200px",
|
2318
|
+
position: "relative",
|
2319
|
+
backgroundSize: "cover"
|
2320
|
+
}
|
2321
|
+
}) : React__default.createElement("div", {
|
2322
|
+
className: styles["wrap-content"] + " " + styles["content-chat-receiver"],
|
2323
|
+
style: {
|
2324
|
+
"float": "inline-end"
|
2325
|
+
}
|
2326
|
+
}, React__default.createElement(material.Typography, {
|
2327
|
+
fontWeight: 500,
|
2328
|
+
fontSize: "14px",
|
2329
|
+
lineHeight: "16.71px",
|
2330
|
+
color: "#fffff"
|
2331
|
+
}, content)))));
|
2332
|
+
};
|
2333
|
+
|
2334
|
+
var ChatLeftItem = function ChatLeftItem(_ref) {
|
2335
|
+
var content = _ref.content,
|
2336
|
+
sender = _ref.sender,
|
2337
|
+
createdAt = _ref.createdAt,
|
2338
|
+
showTimestamp = _ref.showTimestamp,
|
2339
|
+
isStudent = _ref.isStudent,
|
2340
|
+
showName = _ref.showName,
|
2341
|
+
contentType = _ref.contentType;
|
2342
|
+
var _useTranslation = reactI18next.useTranslation(),
|
2343
|
+
t = _useTranslation.t;
|
2344
|
+
return React__default.createElement("div", null, showTimestamp && React__default.createElement(material.Typography, {
|
2345
|
+
fontWeight: 500,
|
2346
|
+
fontSize: "12px",
|
2347
|
+
lineHeight: "14.32px",
|
2348
|
+
color: "#97A1AF",
|
2349
|
+
textAlign: "center"
|
2350
|
+
}, utcToLocalTime(createdAt, t("date_time_format"))), React__default.createElement(material.Grid, {
|
2351
|
+
item: true,
|
2352
|
+
xs: 12,
|
2353
|
+
padding: "4px 0"
|
2354
|
+
}, showName && React__default.createElement(material.Box, {
|
2355
|
+
gap: "4px",
|
2356
|
+
display: "flex",
|
2357
|
+
padding: "4px",
|
2358
|
+
flexDirection: "row",
|
2359
|
+
className: "" + styles["name-sender"]
|
2360
|
+
}, isStudent ? React__default.createElement(React.Fragment, null, React__default.createElement(material.Typography, {
|
2361
|
+
fontWeight: 500,
|
2362
|
+
fontSize: 14,
|
2363
|
+
lineHeight: "16.71px",
|
2364
|
+
color: "#97A1AF"
|
2365
|
+
}, t("counselor")), React__default.createElement(material.Typography, {
|
2366
|
+
fontWeight: 700,
|
2367
|
+
fontSize: 14,
|
2368
|
+
lineHeight: "16.71px",
|
2369
|
+
color: "#97A1AF"
|
2370
|
+
}, sender === null || sender === void 0 ? void 0 : sender.fullName)) : React__default.createElement(React.Fragment, null, React__default.createElement(material.Typography, {
|
2371
|
+
fontWeight: 700,
|
2372
|
+
fontSize: 14,
|
2373
|
+
lineHeight: "16.71px",
|
2374
|
+
color: "#5458D5"
|
2375
|
+
}, sender === null || sender === void 0 ? void 0 : sender.fullName), React__default.createElement(material.Typography, {
|
2376
|
+
fontWeight: 500,
|
2377
|
+
fontSize: 14,
|
2378
|
+
lineHeight: "16.71px",
|
2379
|
+
color: "#5458D5"
|
2380
|
+
}, t("student")))), React__default.createElement(material.Box, {
|
2381
|
+
padding: "4px 0px"
|
2382
|
+
}), contentType ? React__default.createElement("img", {
|
2383
|
+
src: content,
|
2384
|
+
style: {
|
2385
|
+
backgroundRepeat: "no-repeat",
|
2386
|
+
width: "200px",
|
2387
|
+
height: "200px",
|
2388
|
+
position: "relative",
|
2389
|
+
backgroundSize: "cover"
|
2390
|
+
}
|
2391
|
+
}) : React__default.createElement("div", {
|
2392
|
+
className: styles["wrap-content"] + " " + styles["content-chat-sender"]
|
2393
|
+
}, React__default.createElement(material.Typography, {
|
2394
|
+
fontWeight: 500,
|
2395
|
+
fontSize: "14px",
|
2396
|
+
lineHeight: "16.71px",
|
2397
|
+
color: "#414E62"
|
2398
|
+
}, content))));
|
2399
|
+
};
|
2400
|
+
|
2401
|
+
(function (ChatItemType) {
|
2402
|
+
ChatItemType[ChatItemType["Default"] = 0] = "Default";
|
2403
|
+
ChatItemType[ChatItemType["Exam"] = 1] = "Exam";
|
2404
|
+
ChatItemType[ChatItemType["Class"] = 2] = "Class";
|
2405
|
+
})(exports.ChatItemType || (exports.ChatItemType = {}));
|
2406
|
+
var ChatItem = function ChatItem(props) {
|
2407
|
+
var isMe = props.isMe;
|
2408
|
+
return React__default.createElement(React.Fragment, null, isMe ? React__default.createElement(ChatRightItem, Object.assign({}, props)) : React__default.createElement(ChatLeftItem, Object.assign({}, props)));
|
2409
|
+
};
|
1741
2410
|
|
1742
2411
|
var MessageSortBy;
|
1743
2412
|
(function (MessageSortBy) {
|
@@ -1751,7 +2420,7 @@ var OrderBy;
|
|
1751
2420
|
var StudentSortBy;
|
1752
2421
|
(function (StudentSortBy) {
|
1753
2422
|
StudentSortBy["CreatedAt"] = "CreatedAt";
|
1754
|
-
StudentSortBy["
|
2423
|
+
StudentSortBy["FullName"] = "FullName";
|
1755
2424
|
})(StudentSortBy || (StudentSortBy = {}));
|
1756
2425
|
var StudentOrderBy;
|
1757
2426
|
(function (StudentOrderBy) {
|
@@ -1776,370 +2445,460 @@ var MessageStatus;
|
|
1776
2445
|
MessageStatus["SentError"] = "Sent fail, Retry";
|
1777
2446
|
})(MessageStatus || (MessageStatus = {}));
|
1778
2447
|
|
1779
|
-
var
|
1780
|
-
|
1781
|
-
|
1782
|
-
|
1783
|
-
|
1784
|
-
|
1785
|
-
|
1786
|
-
|
1787
|
-
|
1788
|
-
showExamHeader = _ref$showExamHeader === void 0 ? false : _ref$showExamHeader,
|
1789
|
-
_ref$isFirst = _ref.isFirst,
|
1790
|
-
isFirst = _ref$isFirst === void 0 ? true : _ref$isFirst,
|
1791
|
-
isLast = _ref.isLast,
|
1792
|
-
actionLink = _ref.actionLink,
|
1793
|
-
examId = _ref.examId,
|
1794
|
-
examTitle = _ref.examTitle,
|
1795
|
-
parentContent = _ref.parentContent,
|
1796
|
-
status = _ref.status,
|
1797
|
-
selectedReplyMessageId = _ref.selectedReplyMessageId,
|
1798
|
-
selectedReplyItemRef = _ref.selectedReplyItemRef,
|
1799
|
-
onAddExamMessage = _ref.onAddExamMessage,
|
1800
|
-
onReTrySendMessage = _ref.onReTrySendMessage,
|
1801
|
-
onGotoParentMessage = _ref.onGotoParentMessage;
|
1802
|
-
var _useState = React.useState(false),
|
1803
|
-
isShowTime = _useState[0],
|
1804
|
-
setShowTime = _useState[1];
|
1805
|
-
var _useState2 = React.useState(false),
|
1806
|
-
isShowInfo = _useState2[0],
|
1807
|
-
setShowInfo = _useState2[1];
|
1808
|
-
var _useTranslation = reactI18next.useTranslation(),
|
1809
|
-
t = _useTranslation.t;
|
1810
|
-
var handleShowInfo = function handleShowInfo() {
|
1811
|
-
setShowInfo(!isShowInfo);
|
1812
|
-
!isFirst && !isSystemLog && setShowTime(!isShowInfo);
|
1813
|
-
};
|
1814
|
-
var handleReTrySendMessage = function handleReTrySendMessage() {
|
1815
|
-
if (status !== MessageStatus.SentError || !content) return;
|
1816
|
-
onReTrySendMessage === null || onReTrySendMessage === void 0 ? void 0 : onReTrySendMessage({
|
1817
|
-
content: content,
|
1818
|
-
examId: examId,
|
1819
|
-
examTitle: examTitle,
|
1820
|
-
parentContent: parentContent,
|
1821
|
-
parentId: parentId
|
1822
|
-
});
|
1823
|
-
};
|
1824
|
-
React.useEffect(function () {
|
1825
|
-
setShowTime(isSystemLog || !!isFirst);
|
1826
|
-
}, [isFirst, isSystemLog]);
|
1827
|
-
return React__default.createElement("li", {
|
1828
|
-
ref: selectedReplyMessageId === id ? selectedReplyItemRef : undefined,
|
1829
|
-
className: "px-3 " + (!isLast ? "pb-1" : "pb-3") + " " + (!!examCode ? "border border-top-0 border-info" : "") + " " + (!!examCode && isLast ? "border-bottom-1 mb-3" : "border-bottom-0")
|
1830
|
-
}, showExamHeader && isFirst && React__default.createElement("div", {
|
1831
|
-
className: "d-flex bg-info justify-content-between px-3 mb-3 py-1 " + styles$1["list__item__header"]
|
1832
|
-
}, React__default.createElement(reactRouterDom.Link, {
|
1833
|
-
to: "" + (actionLink || "/"),
|
1834
|
-
className: "text-black"
|
1835
|
-
}, examTitle), !!examId && !!examTitle && !!examCode && React__default.createElement("span", {
|
1836
|
-
className: "pointer text-black",
|
1837
|
-
onClick: function onClick() {
|
1838
|
-
return onAddExamMessage === null || onAddExamMessage === void 0 ? void 0 : onAddExamMessage(examId, examTitle, examCode);
|
1839
|
-
}
|
1840
|
-
}, "Add message to exam")), isSystemLog || !!isFirst ? React__default.createElement("p", {
|
1841
|
-
className: "mb-0 py-1 px-3 fs-6 text-muted text-center"
|
1842
|
-
}, utcToLocalTime(createdAt, t("date_time_format"))) : React__default.createElement(reactstrap.Collapse, {
|
1843
|
-
className: "w-100",
|
1844
|
-
isOpen: isShowTime
|
1845
|
-
}, React__default.createElement("p", {
|
1846
|
-
className: "mb-0 py-1 px-3 fs-6 text-muted text-center"
|
1847
|
-
}, utcToLocalTime(createdAt, t("date_time_format")))), isSystemLog ? React__default.createElement("div", {
|
1848
|
-
className: "text-center w-100"
|
1849
|
-
}, React__default.createElement(reactRouterDom.Link, {
|
1850
|
-
to: "" + (actionLink || "/"),
|
1851
|
-
title: "See the results",
|
1852
|
-
className: "text-primary"
|
1853
|
-
}, content)) : React__default.createElement("div", {
|
1854
|
-
className: "d-flex align-items-start w-100 flex-row-reverse"
|
1855
|
-
}, React__default.createElement("div", {
|
1856
|
-
className: "d-flex flex-column align-items-end"
|
1857
|
-
}, parentId && React__default.createElement("p", {
|
1858
|
-
className: "px-3 bg-light opacity-50 pointer " + styles$1["list__item__message"] + " " + styles$1["list__item__message--reply-from-right"] + " mb-0 fw-medium " + styles$1["reply-text"],
|
1859
|
-
onClick: function onClick() {
|
1860
|
-
return onGotoParentMessage === null || onGotoParentMessage === void 0 ? void 0 : onGotoParentMessage(parentId);
|
1861
|
-
}
|
1862
|
-
}, React__default.createElement("b", null, "Reply To:"), " ", parentContent), React__default.createElement("p", {
|
1863
|
-
className: "mb-0 py-2 px-3 fw-medium pointer " + styles$1["list__item__message"] + " " + (parentId ? styles$1["list__item__message--reply-right"] : "") + " text-end bg-primary text-white",
|
1864
|
-
onClick: handleShowInfo
|
1865
|
-
}, content), status !== MessageStatus.Default && React__default.createElement("p", {
|
1866
|
-
onClick: handleReTrySendMessage,
|
1867
|
-
className: "fs-6 mb-0 " + (status === MessageStatus.SentError ? "text-danger text-decoration-underline pointer" : "")
|
1868
|
-
}, status), !isSystemLog && status === MessageStatus.Default && React__default.createElement(reactstrap.Collapse, {
|
1869
|
-
isOpen: isShowInfo
|
1870
|
-
}, React__default.createElement("p", {
|
1871
|
-
className: "mb-0 py-1 px-3 fs-6 text-muted text-end"
|
1872
|
-
}, isRead ? "seen" : "sent")))));
|
1873
|
-
};
|
1874
|
-
|
1875
|
-
var ChatLeftItem = function ChatLeftItem(_ref) {
|
1876
|
-
var id = _ref.id,
|
1877
|
-
avatar = _ref.avatar,
|
1878
|
-
content = _ref.content,
|
1879
|
-
createdAt = _ref.createdAt,
|
1880
|
-
examCode = _ref.examCode,
|
1881
|
-
isSystemLog = _ref.isSystemLog,
|
1882
|
-
parentId = _ref.parentId,
|
1883
|
-
_ref$showExamHeader = _ref.showExamHeader,
|
1884
|
-
showExamHeader = _ref$showExamHeader === void 0 ? false : _ref$showExamHeader,
|
1885
|
-
_ref$isFirst = _ref.isFirst,
|
1886
|
-
isFirst = _ref$isFirst === void 0 ? true : _ref$isFirst,
|
1887
|
-
isLast = _ref.isLast,
|
1888
|
-
actionLink = _ref.actionLink,
|
1889
|
-
examId = _ref.examId,
|
1890
|
-
examTitle = _ref.examTitle,
|
1891
|
-
parentContent = _ref.parentContent,
|
1892
|
-
onAddExamMessage = _ref.onAddExamMessage,
|
1893
|
-
onReply = _ref.onReply,
|
1894
|
-
selectedReplyMessageId = _ref.selectedReplyMessageId,
|
1895
|
-
onToggleReply = _ref.onToggleReply,
|
1896
|
-
selectedReplyItemRef = _ref.selectedReplyItemRef,
|
1897
|
-
onGotoParentMessage = _ref.onGotoParentMessage;
|
1898
|
-
var _useState = React.useState(false),
|
1899
|
-
isShowTime = _useState[0],
|
1900
|
-
setShowTime = _useState[1];
|
1901
|
-
var _useState2 = React.useState(false),
|
1902
|
-
isShowInfo = _useState2[0],
|
1903
|
-
setShowInfo = _useState2[1];
|
1904
|
-
var _useTranslation = reactI18next.useTranslation(),
|
1905
|
-
t = _useTranslation.t;
|
1906
|
-
var handleShowInfo = function handleShowInfo() {
|
1907
|
-
if (!id) return;
|
1908
|
-
setShowInfo(!isShowInfo);
|
1909
|
-
onToggleReply === null || onToggleReply === void 0 ? void 0 : onToggleReply(id);
|
1910
|
-
!isFirst && !isSystemLog && setShowTime(!isShowInfo);
|
1911
|
-
};
|
1912
|
-
var handleReply = function handleReply() {
|
1913
|
-
if (!id) return;
|
1914
|
-
onReply === null || onReply === void 0 ? void 0 : onReply(id, content || "", examId);
|
1915
|
-
};
|
1916
|
-
React.useEffect(function () {
|
1917
|
-
setShowTime(isSystemLog || !!isFirst);
|
1918
|
-
}, [isFirst, isSystemLog]);
|
1919
|
-
return React__default.createElement("li", {
|
1920
|
-
ref: selectedReplyMessageId === id ? selectedReplyItemRef : undefined,
|
1921
|
-
className: "px-3 " + (!isLast ? "pb-1" : "pb-3") + " " + (!!examCode ? "border border-top-0 border-info" : "") + " " + (!!examCode && isLast ? "border-bottom-1 mb-3" : "border-bottom-0")
|
1922
|
-
}, showExamHeader && isFirst && React__default.createElement("div", {
|
1923
|
-
className: "d-flex bg-info justify-content-between px-3 mb-3 py-1 " + styles$1["list__item__header"]
|
1924
|
-
}, React__default.createElement(reactRouterDom.Link, {
|
1925
|
-
to: "" + (actionLink || "/"),
|
1926
|
-
className: "text-black"
|
1927
|
-
}, examTitle), !!examId && !!examTitle && !!examCode && React__default.createElement("span", {
|
1928
|
-
className: "pointer text-black",
|
1929
|
-
onClick: function onClick() {
|
1930
|
-
return onAddExamMessage === null || onAddExamMessage === void 0 ? void 0 : onAddExamMessage(examId, examTitle, examCode);
|
1931
|
-
}
|
1932
|
-
}, "Add message to exam")), isSystemLog || !!isFirst ? React__default.createElement("p", {
|
1933
|
-
className: "mb-0 py-1 px-3 fs-6 text-muted text-center"
|
1934
|
-
}, utcToLocalTime(createdAt, t("date_time_format"))) : React__default.createElement(reactstrap.Collapse, {
|
1935
|
-
className: "w-100",
|
1936
|
-
isOpen: isShowTime
|
1937
|
-
}, React__default.createElement("p", {
|
1938
|
-
className: "mb-0 py-1 px-3 fs-6 text-muted text-center"
|
1939
|
-
}, utcToLocalTime(createdAt, t("date_time_format")))), isSystemLog ? React__default.createElement("div", {
|
1940
|
-
className: "text-center w-100"
|
1941
|
-
}, React__default.createElement(reactRouterDom.Link, {
|
1942
|
-
to: "" + (actionLink || "/"),
|
1943
|
-
title: "See the results",
|
1944
|
-
className: "text-primary"
|
1945
|
-
}, content)) : React__default.createElement("div", {
|
1946
|
-
className: "d-flex align-items-start w-100"
|
1947
|
-
}, React__default.createElement("div", {
|
1948
|
-
className: "rounded-circle " + styles$1["list__item__avatar-container"] + " bg-light me-2 mt-1 " + (isFirst ? "" : "opacity-0")
|
1949
|
-
}, isFirst && React__default.createElement("img", {
|
1950
|
-
className: styles$1["list__item__avatar"] + " bg-light rounded-circle",
|
1951
|
-
src: avatar
|
1952
|
-
})), React__default.createElement("div", {
|
1953
|
-
className: "d-flex flex-column"
|
1954
|
-
}, parentId && React__default.createElement("p", {
|
1955
|
-
className: "opacity-50 mb-0 px-3 fw-medium pointer " + styles$1["list__item__message"] + " " + styles$1["list__item__message--reply-from"] + " " + styles$1["reply-text"] + " text-start bg-light",
|
1956
|
-
onClick: function onClick() {
|
1957
|
-
return onGotoParentMessage === null || onGotoParentMessage === void 0 ? void 0 : onGotoParentMessage(parentId);
|
1958
|
-
}
|
1959
|
-
}, React__default.createElement("b", null, "Reply To:"), " ", parentContent), React__default.createElement("p", {
|
1960
|
-
className: "mb-0 py-2 px-3 fw-medium pointer " + styles$1["list__item__message"] + " " + (parentId ? styles$1["list__item__message--reply"] : "") + " text-start bg-light",
|
1961
|
-
onClick: handleShowInfo
|
1962
|
-
}, content), !isSystemLog && React__default.createElement(reactstrap.Collapse, {
|
1963
|
-
className: "w-100",
|
1964
|
-
isOpen: selectedReplyMessageId === id
|
1965
|
-
}, React__default.createElement("p", {
|
1966
|
-
onClick: handleReply,
|
1967
|
-
className: "mb-0 py-1 px-3 fs-6 text-primary text-left pointer"
|
1968
|
-
}, "Reply")))));
|
2448
|
+
var types = {
|
2449
|
+
__proto__: null,
|
2450
|
+
get MessageSortBy () { return MessageSortBy; },
|
2451
|
+
get OrderBy () { return OrderBy; },
|
2452
|
+
get StudentSortBy () { return StudentSortBy; },
|
2453
|
+
get StudentOrderBy () { return StudentOrderBy; },
|
2454
|
+
get MessageAction () { return MessageAction; },
|
2455
|
+
get MessageSourceType () { return MessageSourceType; },
|
2456
|
+
get MessageStatus () { return MessageStatus; }
|
1969
2457
|
};
|
1970
2458
|
|
1971
|
-
|
1972
|
-
|
1973
|
-
|
1974
|
-
|
1975
|
-
|
1976
|
-
|
1977
|
-
|
1978
|
-
|
1979
|
-
|
1980
|
-
|
1981
|
-
|
2459
|
+
var ExamStatus;
|
2460
|
+
(function (ExamStatus) {
|
2461
|
+
ExamStatus["Default"] = "Default";
|
2462
|
+
ExamStatus["Pending"] = "Pending";
|
2463
|
+
ExamStatus["Inprogress"] = "Inprogress";
|
2464
|
+
ExamStatus["Completed"] = "Completed";
|
2465
|
+
})(ExamStatus || (ExamStatus = {}));
|
2466
|
+
var Roles;
|
2467
|
+
(function (Roles) {
|
2468
|
+
Roles["Student"] = "Student";
|
2469
|
+
Roles["Teacher"] = "Teacher";
|
2470
|
+
Roles["Admin"] = "Admin";
|
2471
|
+
})(Roles || (Roles = {}));
|
2472
|
+
var MESSAGE_DEFAULT_FILTER = {
|
2473
|
+
currentPage: 1,
|
2474
|
+
pageSize: 15,
|
2475
|
+
textSearch: "",
|
2476
|
+
sortColumnDirection: OrderBy.DESC,
|
2477
|
+
sortColumnName: MessageSortBy.CreatedAt
|
1982
2478
|
};
|
1983
2479
|
|
1984
2480
|
var ChatList = function ChatList(_ref) {
|
1985
2481
|
var _ref$messages = _ref.messages,
|
1986
2482
|
messages = _ref$messages === void 0 ? [] : _ref$messages,
|
1987
|
-
|
1988
|
-
onReply = _ref.onReply,
|
2483
|
+
roles = _ref.roles,
|
1989
2484
|
onReTrySendMessage = _ref.onReTrySendMessage,
|
1990
2485
|
listItemRef = _ref.listItemRef;
|
1991
|
-
var
|
1992
|
-
|
1993
|
-
|
1994
|
-
|
1995
|
-
|
1996
|
-
|
1997
|
-
|
1998
|
-
|
1999
|
-
|
2000
|
-
|
2001
|
-
|
2002
|
-
|
2003
|
-
|
2004
|
-
|
2005
|
-
behavior: "smooth"
|
2486
|
+
var filterMessage = React.useMemo(function () {
|
2487
|
+
var prevTime = 0;
|
2488
|
+
var prevSender;
|
2489
|
+
return messages.map(function (message) {
|
2490
|
+
var _message$sender, _message$sender2;
|
2491
|
+
var currentTime = new Date(message.createdAt).getTime();
|
2492
|
+
var showTimestamp = !prevTime || currentTime - prevTime > 20 * 60 * 1000;
|
2493
|
+
var showName = ((_message$sender = message.sender) === null || _message$sender === void 0 ? void 0 : _message$sender.fullName) !== prevSender;
|
2494
|
+
prevSender = (_message$sender2 = message.sender) === null || _message$sender2 === void 0 ? void 0 : _message$sender2.fullName;
|
2495
|
+
prevTime = currentTime;
|
2496
|
+
return _extends({}, message, {
|
2497
|
+
showTimestamp: showTimestamp,
|
2498
|
+
showName: showName
|
2499
|
+
});
|
2006
2500
|
});
|
2007
|
-
}, [
|
2501
|
+
}, [JSON.stringify(messages)]);
|
2502
|
+
var isStudent = roles === null || roles === void 0 ? void 0 : roles.includes(Roles.Student);
|
2008
2503
|
return React__default.createElement("ul", {
|
2009
2504
|
ref: listItemRef,
|
2010
|
-
className: styles
|
2011
|
-
}, React__default.createElement("li", {
|
2012
|
-
className: "flex-grow-1",
|
2013
|
-
key: "start-of-list"
|
2014
|
-
}), !(messages !== null && messages !== void 0 && messages.length) && React__default.createElement("li", {
|
2505
|
+
className: styles["list"] + " " + styles["padding-content"] + " d-flex h-100 flex-column mb-0 " + (!(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) ? 'justify-content-center' : '')
|
2506
|
+
}, !(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) && React__default.createElement("li", {
|
2015
2507
|
className: "text-muted text-center fst-italic fs-6"
|
2016
|
-
}, "No message"), !!(
|
2508
|
+
}, "No message"), !!(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) && filterMessage.map(function (message) {
|
2017
2509
|
return React__default.createElement(ChatItem, Object.assign({
|
2018
2510
|
key: message.id
|
2019
2511
|
}, message, {
|
2020
|
-
|
2021
|
-
|
2022
|
-
selectedReplyMessageId: selectedReplyMessageId,
|
2023
|
-
onToggleReply: handleToggleReply,
|
2024
|
-
selectedReplyItemRef: selectedReplyItemRef,
|
2025
|
-
onReTrySendMessage: onReTrySendMessage,
|
2026
|
-
onGotoParentMessage: handleSelectParentMessage
|
2512
|
+
isStudent: isStudent,
|
2513
|
+
onReTrySendMessage: onReTrySendMessage
|
2027
2514
|
}));
|
2028
2515
|
}));
|
2029
2516
|
};
|
2030
2517
|
|
2518
|
+
var iconSendMessage = function iconSendMessage(_ref) {
|
2519
|
+
var _ref$width = _ref.width,
|
2520
|
+
width = _ref$width === void 0 ? "16" : _ref$width,
|
2521
|
+
_ref$height = _ref.height,
|
2522
|
+
height = _ref$height === void 0 ? "16" : _ref$height,
|
2523
|
+
color = _ref.color;
|
2524
|
+
return React__default.createElement("svg", {
|
2525
|
+
width: width,
|
2526
|
+
height: height,
|
2527
|
+
viewBox: "0 0 16 16",
|
2528
|
+
fill: color,
|
2529
|
+
xmlns: "http://www.w3.org/2000/svg"
|
2530
|
+
}, React__default.createElement("path", {
|
2531
|
+
d: "M14.8934 7.09539L14.8884 7.0932L1.54219 1.55758C1.42993 1.51059 1.30778 1.49217 1.18666 1.50395C1.06554 1.51573 0.949225 1.55734 0.848125 1.62508C0.741311 1.69507 0.653573 1.79052 0.592805 1.90283C0.532037 2.01515 0.500145 2.14081 0.5 2.26852V5.80883C0.50006 5.98341 0.561019 6.15249 0.67237 6.28695C0.783722 6.42141 0.938491 6.5128 1.11 6.54539L8.38906 7.89133C8.41767 7.89675 8.44348 7.91199 8.46205 7.93441C8.48062 7.95683 8.49078 7.98503 8.49078 8.01414C8.49078 8.04325 8.48062 8.07145 8.46205 8.09387C8.44348 8.1163 8.41767 8.13153 8.38906 8.13695L1.11031 9.48289C0.938851 9.5154 0.784092 9.60667 0.67269 9.74101C0.561288 9.87534 0.500219 10.0443 0.5 10.2188V13.7598C0.499917 13.8817 0.530111 14.0018 0.587871 14.1092C0.645632 14.2166 0.729152 14.3079 0.830938 14.3751C0.953375 14.4564 1.09706 14.4999 1.24406 14.5001C1.34626 14.5 1.4474 14.4795 1.54156 14.4398L14.8875 8.9357L14.8934 8.93289C15.0731 8.85569 15.2262 8.72751 15.3337 8.56421C15.4413 8.40092 15.4986 8.20968 15.4986 8.01414C15.4986 7.81861 15.4413 7.62736 15.3337 7.46407C15.2262 7.30077 15.0731 7.1726 14.8934 7.09539Z",
|
2532
|
+
fill: "white"
|
2533
|
+
}));
|
2534
|
+
};
|
2535
|
+
|
2031
2536
|
var InputChat = function InputChat(_ref) {
|
2032
2537
|
var text = _ref.text,
|
2033
|
-
parentText = _ref.parentText,
|
2034
|
-
examTitle = _ref.examTitle,
|
2035
2538
|
inputRef = _ref.inputRef,
|
2036
2539
|
onChangeInput = _ref.onChangeInput,
|
2037
2540
|
onSubmit = _ref.onSubmit,
|
2038
|
-
|
2541
|
+
isCompleted = _ref.isCompleted,
|
2542
|
+
handleUploadImage = _ref.handleUploadImage,
|
2543
|
+
selectedFile = _ref.selectedFile,
|
2544
|
+
handleDeleteSelectedImage = _ref.handleDeleteSelectedImage;
|
2545
|
+
var _useTranslation = reactI18next.useTranslation(),
|
2546
|
+
t = _useTranslation.t;
|
2547
|
+
var fileInputRef = React.useRef(null);
|
2039
2548
|
var handleSubmit = function handleSubmit() {
|
2040
|
-
if (!text.trim().length) return;
|
2041
2549
|
onSubmit();
|
2042
2550
|
};
|
2043
2551
|
var handleInputChange = function handleInputChange(event) {
|
2044
2552
|
onChangeInput(event.target.value);
|
2045
2553
|
};
|
2046
2554
|
var handleKeyPressEnter = function handleKeyPressEnter(e) {
|
2047
|
-
if (e.
|
2555
|
+
if (e.key === "Enter") {
|
2556
|
+
handleSubmit();
|
2557
|
+
return;
|
2558
|
+
}
|
2048
2559
|
};
|
2049
|
-
var
|
2050
|
-
|
2560
|
+
var handleSelectedFile = function handleSelectedFile(e) {
|
2561
|
+
var files = e.target.files;
|
2562
|
+
handleUploadImage(files[0]);
|
2563
|
+
if (fileInputRef.current) {
|
2564
|
+
fileInputRef.current.value = "";
|
2565
|
+
}
|
2051
2566
|
};
|
2052
|
-
return React__default.createElement(
|
2053
|
-
|
2054
|
-
|
2055
|
-
|
2056
|
-
},
|
2057
|
-
|
2058
|
-
|
2059
|
-
|
2060
|
-
}, React__default.createElement(
|
2061
|
-
|
2062
|
-
|
2063
|
-
|
2064
|
-
|
2065
|
-
}, React__default.createElement(
|
2066
|
-
|
2067
|
-
|
2068
|
-
|
2069
|
-
|
2070
|
-
},
|
2071
|
-
|
2072
|
-
|
2073
|
-
|
2074
|
-
|
2075
|
-
|
2076
|
-
|
2077
|
-
|
2078
|
-
|
2567
|
+
return React__default.createElement(material.Grid, {
|
2568
|
+
item: true,
|
2569
|
+
xs: 12,
|
2570
|
+
padding: "16px"
|
2571
|
+
}, React__default.createElement(material.Box, {
|
2572
|
+
display: "flex",
|
2573
|
+
flexDirection: "row",
|
2574
|
+
gap: "24px"
|
2575
|
+
}, React__default.createElement(material.Box, {
|
2576
|
+
display: "flex",
|
2577
|
+
flexDirection: "column",
|
2578
|
+
gap: "7px",
|
2579
|
+
width: "100%"
|
2580
|
+
}, React__default.createElement(material.Box, {
|
2581
|
+
display: "flex",
|
2582
|
+
border: "1px solid #97A1AF",
|
2583
|
+
borderRadius: "6px",
|
2584
|
+
flexDirection: "column"
|
2585
|
+
}, selectedFile && React__default.createElement("div", {
|
2586
|
+
style: {
|
2587
|
+
position: "relative",
|
2588
|
+
margin: "10px",
|
2589
|
+
width: "fit-content"
|
2590
|
+
}
|
2591
|
+
}, React__default.createElement("img", {
|
2592
|
+
src: selectedFile === null || selectedFile === void 0 ? void 0 : selectedFile.content,
|
2593
|
+
style: {
|
2594
|
+
backgroundRepeat: "no-repeat",
|
2595
|
+
width: "100px",
|
2596
|
+
height: "100px",
|
2597
|
+
backgroundSize: "cover"
|
2598
|
+
}
|
2079
2599
|
}), React__default.createElement("div", {
|
2080
|
-
|
2600
|
+
style: {
|
2601
|
+
position: "absolute",
|
2602
|
+
right: 0,
|
2603
|
+
top: 0,
|
2604
|
+
cursor: "pointer"
|
2605
|
+
},
|
2606
|
+
onClick: handleDeleteSelectedImage
|
2607
|
+
}, React__default.createElement(io5.IoCloseOutline, {
|
2608
|
+
color: "#fff",
|
2609
|
+
size: 30
|
2610
|
+
}))), React__default.createElement("input", {
|
2611
|
+
className: styles["input-chat"],
|
2612
|
+
style: {
|
2613
|
+
border: "none"
|
2614
|
+
},
|
2615
|
+
placeholder: t("send_message"),
|
2616
|
+
ref: inputRef,
|
2617
|
+
value: text,
|
2618
|
+
width: "100%",
|
2619
|
+
onKeyPress: handleKeyPressEnter,
|
2620
|
+
onChange: handleInputChange,
|
2621
|
+
disabled: isCompleted
|
2622
|
+
})), React__default.createElement(material.Typography, {
|
2623
|
+
fontWeight: 500,
|
2624
|
+
fontSize: "10px",
|
2625
|
+
lineHeight: "11.93px",
|
2626
|
+
color: "#97A1AF"
|
2627
|
+
}, "\uC548\uB0B4 \uD14D\uC2A4\uD2B8\uC785\uB2C8\uB2E4.")), React__default.createElement(material.Box, {
|
2628
|
+
display: "flex",
|
2629
|
+
justifyContent: "flex-end",
|
2630
|
+
alignItems: "flex-start",
|
2631
|
+
gap: "8px"
|
2632
|
+
}, React__default.createElement(material.Button, {
|
2633
|
+
variant: "outlined",
|
2634
|
+
component: "label"
|
2635
|
+
}, React__default.createElement(fa.FaImage, null), React__default.createElement("input", {
|
2636
|
+
type: "file",
|
2637
|
+
hidden: true,
|
2638
|
+
ref: fileInputRef,
|
2639
|
+
accept: "image/png, image/gif, image/jpeg",
|
2640
|
+
onChangeCapture: handleSelectedFile
|
2641
|
+
})), React__default.createElement(material.Button, {
|
2642
|
+
variant: "contained",
|
2643
|
+
sx: {
|
2644
|
+
bgcolor: isCompleted ? "#EBEBFF !important" : "#5458D5 !important"
|
2645
|
+
},
|
2646
|
+
className: styles["btn-send"],
|
2647
|
+
disabled: isCompleted,
|
2081
2648
|
onClick: handleSubmit
|
2082
|
-
}, React__default.createElement(
|
2083
|
-
|
2084
|
-
|
2649
|
+
}, React__default.createElement(iconSendMessage, null), React__default.createElement(material.Typography, {
|
2650
|
+
fontWeight: 700,
|
2651
|
+
fontSize: "13px",
|
2652
|
+
lineHeight: "15.51px"
|
2653
|
+
}, t("button.send"))))));
|
2085
2654
|
};
|
2086
2655
|
|
2087
|
-
var
|
2088
|
-
var
|
2089
|
-
|
2090
|
-
|
2091
|
-
|
2092
|
-
|
2093
|
-
|
2094
|
-
|
2095
|
-
|
2096
|
-
|
2097
|
-
|
2656
|
+
var iconChecked = function iconChecked(_ref) {
|
2657
|
+
var _ref$width = _ref.width,
|
2658
|
+
width = _ref$width === void 0 ? "16" : _ref$width,
|
2659
|
+
_ref$height = _ref.height,
|
2660
|
+
height = _ref$height === void 0 ? "16" : _ref$height,
|
2661
|
+
color = _ref.color;
|
2662
|
+
return React__default.createElement("svg", {
|
2663
|
+
width: width,
|
2664
|
+
height: height,
|
2665
|
+
viewBox: "0 0 16 16",
|
2666
|
+
fill: color,
|
2667
|
+
xmlns: "http://www.w3.org/2000/svg"
|
2668
|
+
}, React__default.createElement("path", {
|
2669
|
+
d: "M8 1.5C4.41594 1.5 1.5 4.41594 1.5 8C1.5 11.5841 4.41594 14.5 8 14.5C11.5841 14.5 14.5 11.5841 14.5 8C14.5 4.41594 11.5841 1.5 8 1.5ZM11.3828 5.82156L7.18281 10.8216C7.13674 10.8764 7.07941 10.9208 7.01471 10.9516C6.95001 10.9823 6.87945 10.9989 6.80781 11H6.79938C6.72929 11 6.66 10.9852 6.59599 10.9567C6.53198 10.9282 6.47468 10.8865 6.42781 10.8344L4.62781 8.83438C4.5821 8.78589 4.54654 8.72876 4.52322 8.66633C4.4999 8.60391 4.4893 8.53745 4.49203 8.47087C4.49477 8.40429 4.51078 8.33892 4.53914 8.27862C4.56749 8.21831 4.60761 8.16429 4.65715 8.11971C4.70668 8.07514 4.76463 8.04091 4.82757 8.01905C4.89052 7.99719 4.95721 7.98813 5.02371 7.9924C5.09021 7.99668 5.15518 8.01421 5.21481 8.04396C5.27444 8.0737 5.32752 8.11507 5.37094 8.16562L6.78625 9.73812L10.6172 5.17844C10.7031 5.07909 10.8247 5.01754 10.9556 5.00711C11.0866 4.99668 11.2164 5.03819 11.317 5.12268C11.4175 5.20717 11.4808 5.32784 11.4931 5.45862C11.5055 5.5894 11.4658 5.71977 11.3828 5.82156Z",
|
2670
|
+
fill: "#5458D5"
|
2671
|
+
}));
|
2672
|
+
};
|
2673
|
+
|
2674
|
+
var CONVERSATION_URL = BASE_URL + "/api/conversation";
|
2675
|
+
var apiAddMessage = function apiAddMessage(conversationId, message) {
|
2676
|
+
return api.post(CONVERSATION_URL + "/" + conversationId + "/messages", message);
|
2677
|
+
};
|
2678
|
+
var getMessagesByConversation = function getMessagesByConversation(conversationId, filter) {
|
2679
|
+
return api.get(CONVERSATION_URL + "/" + conversationId + "/messages", {
|
2680
|
+
params: filter
|
2098
2681
|
});
|
2682
|
+
};
|
2683
|
+
var completeConversation = function completeConversation(conversationId) {
|
2684
|
+
return api.post(CONVERSATION_URL + "/" + conversationId + "/finish");
|
2685
|
+
};
|
2686
|
+
var apiUploadFile = function apiUploadFile(file) {
|
2687
|
+
return apiUpload.post(BASE_URL + "/api/file/upload", file);
|
2688
|
+
};
|
2689
|
+
|
2690
|
+
var useDialog = function useDialog() {
|
2691
|
+
var _useState = React.useState(false),
|
2692
|
+
openConfirmDialog = _useState[0],
|
2693
|
+
setOpenConfirmDialog = _useState[1];
|
2694
|
+
var toggleConfirmDialog = function toggleConfirmDialog() {
|
2695
|
+
setOpenConfirmDialog(function (state) {
|
2696
|
+
return !state;
|
2697
|
+
});
|
2698
|
+
};
|
2699
|
+
var handleConfirm = function handleConfirm(conversationId) {
|
2700
|
+
try {
|
2701
|
+
var _temp2 = function _temp2() {
|
2702
|
+
setLoading(false);
|
2703
|
+
};
|
2704
|
+
setLoading(true);
|
2705
|
+
var _temp = _catch(function () {
|
2706
|
+
return Promise.resolve(completeConversation(conversationId)).then(function () {
|
2707
|
+
toggleConfirmDialog();
|
2708
|
+
reactToastify.toast.success("Complete conversation success");
|
2709
|
+
});
|
2710
|
+
}, function () {
|
2711
|
+
reactToastify.toast.error("Failed to complete conversation");
|
2712
|
+
});
|
2713
|
+
return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
|
2714
|
+
} catch (e) {
|
2715
|
+
return Promise.reject(e);
|
2716
|
+
}
|
2717
|
+
};
|
2718
|
+
return {
|
2719
|
+
openConfirmDialog: openConfirmDialog,
|
2720
|
+
toggleConfirmDialog: toggleConfirmDialog,
|
2721
|
+
handleConfirm: handleConfirm
|
2722
|
+
};
|
2723
|
+
};
|
2724
|
+
|
2725
|
+
var ChatHeader = function ChatHeader(_ref) {
|
2726
|
+
var fullName = _ref.fullName,
|
2727
|
+
examTitle = _ref.examTitle,
|
2728
|
+
questionOrder = _ref.questionOrder,
|
2729
|
+
conversationId = _ref.conversationId,
|
2730
|
+
isCompleted = _ref.isCompleted,
|
2731
|
+
durationExam = _ref.durationExam,
|
2732
|
+
createdAt = _ref.createdAt,
|
2733
|
+
teacherName = _ref.teacherName,
|
2734
|
+
roles = _ref.roles;
|
2735
|
+
var _useDialog = useDialog(),
|
2736
|
+
openConfirmDialog = _useDialog.openConfirmDialog,
|
2737
|
+
toggleConfirmDialog = _useDialog.toggleConfirmDialog,
|
2738
|
+
handleConfirm = _useDialog.handleConfirm;
|
2099
2739
|
var _useTranslation = reactI18next.useTranslation(),
|
2100
2740
|
t = _useTranslation.t;
|
2101
|
-
var
|
2102
|
-
|
2741
|
+
var isStudent = roles === null || roles === void 0 ? void 0 : roles.includes(Roles.Student);
|
2742
|
+
var filterDurationExam = React.useMemo(function () {
|
2743
|
+
if (!durationExam) return;
|
2744
|
+
return moment.duration(durationExam);
|
2745
|
+
}, [durationExam]);
|
2746
|
+
var renderHeader = function renderHeader() {
|
2747
|
+
return isStudent ? React__default.createElement(material.Grid, {
|
2748
|
+
item: true,
|
2749
|
+
xs: 12,
|
2750
|
+
borderTop: "1px solid #E4E7EC",
|
2751
|
+
borderBottom: "1px solid #E4E7EC",
|
2752
|
+
minHeight: "64px",
|
2753
|
+
padding: "16px 8px",
|
2754
|
+
display: "flex",
|
2755
|
+
alignItems: "center",
|
2756
|
+
justifyContent: "space-between"
|
2757
|
+
}, React__default.createElement(material.Box, {
|
2758
|
+
padding: "8px 12px",
|
2759
|
+
display: "flex",
|
2760
|
+
alignItems: "center",
|
2761
|
+
gap: "24px",
|
2762
|
+
border: "1px solid #EBEBFF",
|
2763
|
+
borderRadius: "6px"
|
2764
|
+
}, React__default.createElement(material.Box, {
|
2765
|
+
display: "flex",
|
2766
|
+
alignItems: "center",
|
2767
|
+
flexDirection: "row",
|
2768
|
+
gap: "8px"
|
2769
|
+
}, React__default.createElement(iconPersonNoActive, null), React__default.createElement(material.Typography, {
|
2770
|
+
fontWeight: 500,
|
2771
|
+
fontSize: "14px",
|
2772
|
+
lineHeight: "16.71px",
|
2773
|
+
color: "#5458D5"
|
2774
|
+
}, t("counselor"))), React__default.createElement(material.Typography, {
|
2775
|
+
fontWeight: 700,
|
2776
|
+
fontSize: "14px",
|
2777
|
+
lineHeight: "16.71px",
|
2778
|
+
color: "#5458D5"
|
2779
|
+
}, teacherName)), React__default.createElement(material.Box, {
|
2780
|
+
display: "flex",
|
2781
|
+
alignItems: "start",
|
2782
|
+
color: "#5458D5",
|
2783
|
+
gap: "6px",
|
2784
|
+
flexDirection: "column"
|
2785
|
+
}, React__default.createElement(material.Typography, {
|
2786
|
+
fontWeight: 600,
|
2787
|
+
fontSize: "12px",
|
2788
|
+
lineHeight: "14.32px"
|
2789
|
+
}, examTitle), React__default.createElement(material.Box, {
|
2790
|
+
display: "flex",
|
2791
|
+
flexDirection: "row",
|
2792
|
+
gap: "4px"
|
2793
|
+
}, React__default.createElement(material.Typography, {
|
2794
|
+
fontWeight: 600,
|
2795
|
+
fontSize: "12px",
|
2796
|
+
lineHeight: "14.2px"
|
2797
|
+
}, "LIVE \uC2DC\uD5D8"), filterDurationExam && React__default.createElement(material.Typography, {
|
2798
|
+
fontWeight: 500,
|
2799
|
+
fontSize: "12px",
|
2800
|
+
lineHeight: "14.32px"
|
2801
|
+
}, (!!filterDurationExam.hours() ? filterDurationExam.hours() + " " + t("hour") : "") + " " + (!!filterDurationExam.minutes() ? filterDurationExam.minutes() + " " + t("minute") : "") + " " + (!!filterDurationExam.seconds() ? filterDurationExam.seconds() + " " + t("second") : "")))), React__default.createElement(material.Box, {
|
2802
|
+
display: "flex",
|
2803
|
+
alignItems: "center",
|
2804
|
+
gap: "6px",
|
2805
|
+
flexDirection: "column"
|
2806
|
+
}, React__default.createElement(material.Typography, {
|
2807
|
+
fontWeight: 700,
|
2808
|
+
fontSize: "12px",
|
2809
|
+
lineHeight: "14.32px",
|
2810
|
+
color: "#5458D5"
|
2811
|
+
}, questionOrder != undefined ? t("problem_number_question", {
|
2812
|
+
number: questionOrder + 1
|
2813
|
+
}) : t("class_inquiry")), React__default.createElement(material.Typography, {
|
2814
|
+
fontWeight: 500,
|
2815
|
+
fontSize: "12px",
|
2816
|
+
lineHeight: "14.32px",
|
2817
|
+
color: "#97A1AF"
|
2818
|
+
}, utcToLocalTime(createdAt, t("date_time_format"))))) : React__default.createElement(material.Grid, {
|
2819
|
+
item: true,
|
2820
|
+
xs: 12,
|
2821
|
+
borderTop: "1px solid #E4E7EC",
|
2822
|
+
borderBottom: "1px solid #E4E7EC",
|
2823
|
+
minHeight: "64px",
|
2824
|
+
padding: "16px 8px",
|
2825
|
+
display: "flex",
|
2826
|
+
alignItems: "center",
|
2827
|
+
justifyContent: "space-between"
|
2828
|
+
}, React__default.createElement(material.Box, {
|
2829
|
+
display: "flex",
|
2830
|
+
alignItems: "center",
|
2831
|
+
gap: "24px",
|
2832
|
+
color: "#5458D5"
|
2833
|
+
}, React__default.createElement(material.Box, {
|
2834
|
+
display: "flex",
|
2835
|
+
justifyContent: "space-between",
|
2836
|
+
alignItems: "center",
|
2837
|
+
gap: "8px"
|
2838
|
+
}, React__default.createElement(iconPersonNoActive, null), React__default.createElement(material.Typography, {
|
2839
|
+
fontWeight: 500,
|
2840
|
+
fontSize: "14px",
|
2841
|
+
lineHeight: "16.71px"
|
2842
|
+
}, t("student"))), React__default.createElement(material.Typography, {
|
2843
|
+
fontWeight: 700,
|
2844
|
+
fontSize: "14px",
|
2845
|
+
lineHeight: "16.71px"
|
2846
|
+
}, fullName)), React__default.createElement(material.Box, {
|
2847
|
+
display: "flex",
|
2848
|
+
alignItems: "center",
|
2849
|
+
gap: "24px",
|
2850
|
+
color: "#5458D5"
|
2851
|
+
}, examTitle && React__default.createElement(material.Typography, {
|
2852
|
+
fontWeight: 600,
|
2853
|
+
fontSize: "12px",
|
2854
|
+
lineHeight: "14.32px"
|
2855
|
+
}, examTitle), React__default.createElement(material.Typography, {
|
2856
|
+
fontWeight: 700,
|
2857
|
+
fontSize: "14px",
|
2858
|
+
lineHeight: "16.71px"
|
2859
|
+
}, questionOrder != undefined ? t("problem_number_question", {
|
2860
|
+
number: questionOrder + 1
|
2861
|
+
}) : t("class_inquiry"))), !isCompleted ? React__default.createElement("div", {
|
2862
|
+
onClick: toggleConfirmDialog
|
2863
|
+
}, React__default.createElement(material.Box, {
|
2864
|
+
padding: "8px 12px",
|
2865
|
+
display: "flex",
|
2866
|
+
alignItems: "center",
|
2867
|
+
gap: "8px",
|
2868
|
+
border: "1px solid #5458D5",
|
2869
|
+
borderRadius: "6px"
|
2870
|
+
}, React__default.createElement(iconChecked, null), React__default.createElement(material.Typography, {
|
2871
|
+
fontWeight: 700,
|
2872
|
+
fontSize: "13px",
|
2873
|
+
lineHeight: "15.51px",
|
2874
|
+
color: "#5458D5"
|
2875
|
+
}, "\uC644\uB8CC \uCC98\uB9AC"))) : React__default.createElement("div", null));
|
2103
2876
|
};
|
2104
|
-
|
2105
|
-
|
2106
|
-
|
2107
|
-
|
2108
|
-
|
2109
|
-
|
2110
|
-
|
2111
|
-
|
2112
|
-
|
2113
|
-
|
2114
|
-
|
2115
|
-
|
2116
|
-
|
2117
|
-
|
2118
|
-
|
2119
|
-
|
2120
|
-
|
2121
|
-
|
2122
|
-
|
2123
|
-
|
2124
|
-
|
2125
|
-
|
2126
|
-
|
2127
|
-
|
2128
|
-
|
2129
|
-
}, React__default.createElement("p", {
|
2130
|
-
className: "mb-0 text-primary fw-medium"
|
2131
|
-
}, name)), React__default.createElement("div", {
|
2132
|
-
className: "d-flex align-items-center"
|
2133
|
-
}, selectOptions !== undefined && React__default.createElement("div", {
|
2134
|
-
className: styles$1["header__select"] + " mx-3"
|
2135
|
-
}, React__default.createElement(CustomSelect, {
|
2136
|
-
value: selectedOption,
|
2137
|
-
options: selectOptions,
|
2138
|
-
onChange: handleChangeOption,
|
2139
|
-
isClearable: true
|
2140
|
-
})), React__default.createElement("div", {
|
2141
|
-
className: "actions d-flex align-items-center"
|
2142
|
-
})));
|
2877
|
+
return React__default.createElement(material.Grid, {
|
2878
|
+
container: true
|
2879
|
+
}, React__default.createElement(material.Grid, {
|
2880
|
+
item: true,
|
2881
|
+
xs: 12,
|
2882
|
+
paddingLeft: "32px",
|
2883
|
+
paddingTop: "20px",
|
2884
|
+
paddingBottom: "16px",
|
2885
|
+
minHeight: "60px"
|
2886
|
+
}, React__default.createElement(material.Typography, {
|
2887
|
+
fontWeight: 800,
|
2888
|
+
fontSize: "20px",
|
2889
|
+
color: "#5458D5",
|
2890
|
+
lineHeight: "23.87px"
|
2891
|
+
}, t("question_and_answer"))), renderHeader(), React__default.createElement(ConfirmDialog, {
|
2892
|
+
open: openConfirmDialog,
|
2893
|
+
toggle: toggleConfirmDialog,
|
2894
|
+
text: "정말로 이 채팅 베팅을 완료하시겠습니까?",
|
2895
|
+
onConfirm: function onConfirm() {
|
2896
|
+
return handleConfirm(conversationId || 0);
|
2897
|
+
},
|
2898
|
+
title: t("confirmation"),
|
2899
|
+
okText: t("yes"),
|
2900
|
+
cancelText: t("no")
|
2901
|
+
}));
|
2143
2902
|
};
|
2144
2903
|
|
2145
2904
|
var ChatContainer = function ChatContainer(_ref) {
|
@@ -2151,55 +2910,47 @@ var ChatContainer = function ChatContainer(_ref) {
|
|
2151
2910
|
_ref$isLoading = _ref.isLoading,
|
2152
2911
|
isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
|
2153
2912
|
isScrollToEnd = _ref.isScrollToEnd,
|
2154
|
-
onRead = _ref.onRead,
|
2155
2913
|
onReachTop = _ref.onReachTop,
|
2156
2914
|
onReachBottom = _ref.onReachBottom,
|
2157
2915
|
onEndScrollToEnd = _ref.onEndScrollToEnd;
|
2158
|
-
var onReply = chatListProps.onReply,
|
2159
|
-
onAddExamMessage = chatListProps.onAddExamMessage;
|
2160
|
-
var onChangeOption = chatHeaderProps.onChangeOption;
|
2161
2916
|
var inputRef = React.useRef(null);
|
2162
2917
|
var listRef = React.useRef(null);
|
2163
2918
|
var listItemRef = React.useRef(null);
|
2164
2919
|
var scrollRef = React.useRef();
|
2165
|
-
var focusRef = React.useRef();
|
2166
2920
|
var addEventTimeout = React.useRef();
|
2167
|
-
var handleReply = function handleReply(id, content, examId) {
|
2168
|
-
var _inputRef$current;
|
2169
|
-
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
|
2170
|
-
onReply === null || onReply === void 0 ? void 0 : onReply(id, content, examId);
|
2171
|
-
};
|
2172
|
-
var handleAddExamMessage = function handleAddExamMessage(examId, examTitle, examCode) {
|
2173
|
-
var _inputRef$current2;
|
2174
|
-
(_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus();
|
2175
|
-
onAddExamMessage(examId, examTitle, examCode);
|
2176
|
-
};
|
2177
|
-
var handleChangeExamOption = function handleChangeExamOption(val) {
|
2178
|
-
var _inputRef$current3;
|
2179
|
-
if (!!(val !== null && val !== void 0 && val.value)) (_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 ? void 0 : _inputRef$current3.focus();
|
2180
|
-
onChangeOption === null || onChangeOption === void 0 ? void 0 : onChangeOption(val);
|
2181
|
-
};
|
2182
2921
|
var handleScroll = function handleScroll() {
|
2183
|
-
|
2184
|
-
var
|
2185
|
-
|
2186
|
-
|
2187
|
-
|
2188
|
-
|
2189
|
-
|
2190
|
-
|
2191
|
-
|
2922
|
+
try {
|
2923
|
+
var _temp4 = function _temp4() {
|
2924
|
+
if (scrollRef.current) clearTimeout(scrollRef.current);
|
2925
|
+
};
|
2926
|
+
var _temp3 = function () {
|
2927
|
+
if (listRef.current) {
|
2928
|
+
var scrollTop = listRef.current.scrollTop;
|
2929
|
+
var scrollHeight = listRef.current.scrollHeight;
|
2930
|
+
var clientHeight = listRef.current.clientHeight;
|
2931
|
+
var _temp2 = function () {
|
2932
|
+
if (scrollTop + clientHeight + scrollOffset >= scrollHeight) {
|
2933
|
+
onReachBottom === null || onReachBottom === void 0 ? void 0 : onReachBottom();
|
2934
|
+
} else {
|
2935
|
+
var _temp5 = function () {
|
2936
|
+
if (scrollTop <= scrollOffset) {
|
2937
|
+
return Promise.resolve(onReachTop === null || onReachTop === void 0 ? void 0 : onReachTop()).then(function (isSuccessLoad) {
|
2938
|
+
if (isSuccessLoad) {
|
2939
|
+
listRef.current.scrollTop = listRef.current.scrollHeight - scrollHeight;
|
2940
|
+
}
|
2941
|
+
});
|
2942
|
+
}
|
2943
|
+
}();
|
2944
|
+
if (_temp5 && _temp5.then) return _temp5.then(function () {});
|
2945
|
+
}
|
2946
|
+
}();
|
2947
|
+
if (_temp2 && _temp2.then) return _temp2.then(function () {});
|
2948
|
+
}
|
2949
|
+
}();
|
2950
|
+
return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
|
2951
|
+
} catch (e) {
|
2952
|
+
return Promise.reject(e);
|
2192
2953
|
}
|
2193
|
-
if (scrollRef.current) clearTimeout(scrollRef.current);
|
2194
|
-
scrollRef.current = setTimeout(function () {
|
2195
|
-
onRead === null || onRead === void 0 ? void 0 : onRead();
|
2196
|
-
}, 800);
|
2197
|
-
};
|
2198
|
-
var handleFocus = function handleFocus() {
|
2199
|
-
if (focusRef.current) clearTimeout(focusRef.current);
|
2200
|
-
focusRef.current = setTimeout(function () {
|
2201
|
-
onRead === null || onRead === void 0 ? void 0 : onRead();
|
2202
|
-
}, 300);
|
2203
2954
|
};
|
2204
2955
|
React.useEffect(function () {
|
2205
2956
|
var _listRef$current, _chatListProps$messag, _listRef$current3;
|
@@ -2223,131 +2974,34 @@ var ChatContainer = function ChatContainer(_ref) {
|
|
2223
2974
|
scrollRef.current && clearTimeout(scrollRef.current);
|
2224
2975
|
addEventTimeout.current && clearTimeout(addEventTimeout.current);
|
2225
2976
|
};
|
2226
|
-
}, [JSON.stringify(chatListProps.messages), scrollOffset, isLoading, onEndScrollToEnd,
|
2977
|
+
}, [JSON.stringify(chatListProps.messages), scrollOffset, isLoading, onEndScrollToEnd, isScrollToEnd]);
|
2227
2978
|
React.useEffect(function () {
|
2228
|
-
|
2229
|
-
|
2230
|
-
|
2231
|
-
|
2232
|
-
|
2233
|
-
|
2234
|
-
|
2235
|
-
|
2236
|
-
|
2237
|
-
|
2238
|
-
|
2239
|
-
onChangeOption: handleChangeExamOption
|
2240
|
-
}))), React__default.createElement("div", {
|
2241
|
-
ref: listRef,
|
2242
|
-
className: "flex-grow-1 " + styles$1["body"]
|
2243
|
-
}, isLoading && React__default.createElement("div", {
|
2244
|
-
className: "d-flex justify-content-center"
|
2245
|
-
}, React__default.createElement(reactstrap.Spinner, {
|
2246
|
-
color: "secondary",
|
2247
|
-
className: "my-2"
|
2248
|
-
}, "Loading...")), React__default.createElement(ChatList, Object.assign({}, chatListProps, {
|
2249
|
-
listItemRef: listItemRef,
|
2250
|
-
onReply: handleReply,
|
2251
|
-
onAddExamMessage: handleAddExamMessage
|
2252
|
-
}))), React__default.createElement("div", null, React__default.createElement(InputChat, Object.assign({}, inputProps, {
|
2253
|
-
inputRef: inputRef
|
2254
|
-
}))));
|
2255
|
-
};
|
2256
|
-
|
2257
|
-
var CONVERSATION_URL = BASE_URL + "/api/conversation";
|
2258
|
-
var getListConversation = function getListConversation(query) {
|
2259
|
-
return api.get("" + CONVERSATION_URL, {
|
2260
|
-
params: query
|
2261
|
-
});
|
2262
|
-
};
|
2263
|
-
var createConversation = function createConversation(studentId) {
|
2264
|
-
return api.post("" + CONVERSATION_URL, {
|
2265
|
-
targetUserId: "" + studentId
|
2266
|
-
});
|
2267
|
-
};
|
2268
|
-
var apiAddMessage = function apiAddMessage(conversationId, message) {
|
2269
|
-
return api.post(CONVERSATION_URL + "/" + conversationId + "/messages", message);
|
2270
|
-
};
|
2271
|
-
var getMessagesByConversation = function getMessagesByConversation(conversationId, filter) {
|
2272
|
-
return api.get(CONVERSATION_URL + "/" + conversationId + "/messages", {
|
2273
|
-
params: filter
|
2274
|
-
});
|
2275
|
-
};
|
2276
|
-
var apiMarkReadMessage = function apiMarkReadMessage(conversationId, messageId) {
|
2277
|
-
return api.put(CONVERSATION_URL + "/" + conversationId + "/messages/" + messageId + "/mark-read");
|
2278
|
-
};
|
2279
|
-
var apiGetConversationByUserId = function apiGetConversationByUserId(userId) {
|
2280
|
-
return api.get(CONVERSATION_URL + "/users/" + userId);
|
2281
|
-
};
|
2282
|
-
|
2283
|
-
var ExamStatus;
|
2284
|
-
(function (ExamStatus) {
|
2285
|
-
ExamStatus["Default"] = "Default";
|
2286
|
-
ExamStatus["Pending"] = "Pending";
|
2287
|
-
ExamStatus["Inprogress"] = "Inprogress";
|
2288
|
-
ExamStatus["Completed"] = "Completed";
|
2289
|
-
})(ExamStatus || (ExamStatus = {}));
|
2290
|
-
var CONVERSATION_DEFAULT_FILTER = {
|
2291
|
-
currentPage: 1,
|
2292
|
-
pageSize: -1,
|
2293
|
-
textSearch: ""
|
2294
|
-
};
|
2295
|
-
var MESSAGE_DEFAULT_FILTER = {
|
2296
|
-
currentPage: 1,
|
2297
|
-
pageSize: 12,
|
2298
|
-
textSearch: "",
|
2299
|
-
sortColumnDirection: OrderBy.DESC,
|
2300
|
-
sortColumnName: MessageSortBy.CreatedAt
|
2301
|
-
};
|
2302
|
-
|
2303
|
-
var EXAM_URL = BASE_URL + "/api/exam";
|
2304
|
-
var getListExamApi = function getListExamApi(query) {
|
2305
|
-
return api.get(EXAM_URL + "/getList", {
|
2306
|
-
params: query
|
2307
|
-
});
|
2308
|
-
};
|
2309
|
-
|
2310
|
-
var useExamList = function useExamList(isStudent) {
|
2311
|
-
if (isStudent === void 0) {
|
2312
|
-
isStudent = true;
|
2313
|
-
}
|
2314
|
-
var _useState = React.useState(),
|
2315
|
-
exams = _useState[0],
|
2316
|
-
setExams = _useState[1];
|
2317
|
-
var getListExam = function getListExam(userId) {
|
2318
|
-
try {
|
2319
|
-
setExams([]);
|
2320
|
-
var _temp = _catch(function () {
|
2321
|
-
return Promise.resolve(getListExamApi({
|
2322
|
-
currentPage: 1,
|
2323
|
-
pageSize: -1,
|
2324
|
-
sortColumnDirection: "DESC",
|
2325
|
-
sortColumnName: "CreatedAt",
|
2326
|
-
statuses: [ExamStatus.Completed],
|
2327
|
-
studentId: !isStudent ? userId : undefined,
|
2328
|
-
teacherId: isStudent ? userId : undefined
|
2329
|
-
})).then(function (res) {
|
2330
|
-
var _res$data;
|
2331
|
-
var data = ((_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.items) || [];
|
2332
|
-
setExams(data);
|
2333
|
-
});
|
2334
|
-
}, function (error) {
|
2335
|
-
console.log({
|
2336
|
-
error: error
|
2337
|
-
});
|
2338
|
-
});
|
2339
|
-
return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
|
2340
|
-
} catch (e) {
|
2341
|
-
return Promise.reject(e);
|
2979
|
+
onReachBottom === null || onReachBottom === void 0 ? void 0 : onReachBottom();
|
2980
|
+
}, [JSON.stringify(chatListProps.messages)]);
|
2981
|
+
return React__default.createElement(material.Grid, {
|
2982
|
+
container: true
|
2983
|
+
}, React__default.createElement(ChatHeader, Object.assign({}, chatHeaderProps)), React__default.createElement("div", {
|
2984
|
+
ref: listRef,
|
2985
|
+
className: "flex-grow-1 " + styles["body"],
|
2986
|
+
style: {
|
2987
|
+
height: "60vh",
|
2988
|
+
overflowY: "scroll",
|
2989
|
+
background: "#F9FAFB"
|
2342
2990
|
}
|
2343
|
-
}
|
2344
|
-
|
2345
|
-
|
2346
|
-
|
2347
|
-
|
2991
|
+
}, isLoading && React__default.createElement("div", {
|
2992
|
+
style: {
|
2993
|
+
height: "100%",
|
2994
|
+
width: "100%"
|
2995
|
+
},
|
2996
|
+
className: "d-flex justify-content-center align-items-center"
|
2997
|
+
}, React__default.createElement(material.CircularProgress, null)), React__default.createElement(ChatList, Object.assign({}, chatListProps, {
|
2998
|
+
listItemRef: listItemRef
|
2999
|
+
}))), React__default.createElement(InputChat, Object.assign({}, inputProps, {
|
3000
|
+
inputRef: inputRef
|
3001
|
+
})));
|
2348
3002
|
};
|
2349
3003
|
|
2350
|
-
var useMessageList = function useMessageList(
|
3004
|
+
var useMessageList = function useMessageList() {
|
2351
3005
|
var _useState = React.useState([]),
|
2352
3006
|
messages = _useState[0],
|
2353
3007
|
setMessages = _useState[1];
|
@@ -2357,58 +3011,70 @@ var useMessageList = function useMessageList(userId, getListExamOptions) {
|
|
2357
3011
|
var _useState3 = React.useState(false),
|
2358
3012
|
isLoading = _useState3[0],
|
2359
3013
|
setLoading = _useState3[1];
|
2360
|
-
var getMessageList = function getMessageList(conversationId
|
3014
|
+
var getMessageList = function getMessageList(conversationId) {
|
2361
3015
|
try {
|
2362
|
-
var
|
3016
|
+
var _temp2 = function _temp2() {
|
2363
3017
|
setLoading(false);
|
2364
3018
|
};
|
2365
3019
|
setLoading(true);
|
2366
|
-
var
|
2367
|
-
var filter = _extends({}, messageFilter
|
2368
|
-
examId: !examId ? messageFilter.examId : examId
|
2369
|
-
});
|
3020
|
+
var _temp = _catch(function () {
|
3021
|
+
var filter = _extends({}, messageFilter);
|
2370
3022
|
return Promise.resolve(getMessagesByConversation(conversationId, filter)).then(function (res) {
|
2371
|
-
|
2372
|
-
function _temp(_getListExamOptions) {
|
2373
|
-
_getListExamOptions;
|
2374
|
-
}
|
2375
|
-
if (messageFilter.beforeDate) setMessages(function (state) {
|
3023
|
+
setMessages(function (prev) {
|
2376
3024
|
var _res$data$items;
|
2377
|
-
return [].concat((
|
2378
|
-
});
|
2379
|
-
|
2380
|
-
|
2381
|
-
|
2382
|
-
|
2383
|
-
|
3025
|
+
return [].concat((_res$data$items = res.data.items) === null || _res$data$items === void 0 ? void 0 : _res$data$items.reverse(), prev);
|
3026
|
+
});
|
3027
|
+
setMessageFilter(function (prev) {
|
3028
|
+
return _extends({}, prev, {
|
3029
|
+
totalItems: res.data.totalItems,
|
3030
|
+
totalPages: res.data.totalPages
|
3031
|
+
});
|
3032
|
+
});
|
2384
3033
|
});
|
3034
|
+
}, function () {
|
3035
|
+
reactToastify.toast.error("Fail to fetch data!");
|
2385
3036
|
});
|
2386
|
-
return Promise.resolve(
|
3037
|
+
return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
|
2387
3038
|
} catch (e) {
|
2388
3039
|
return Promise.reject(e);
|
2389
3040
|
}
|
2390
3041
|
};
|
2391
|
-
var handleLoadMore = function handleLoadMore() {
|
2392
|
-
if (isLoading) return;
|
2393
|
-
var lastItem = messages[0];
|
2394
|
-
if (!lastItem) return;
|
2395
|
-
var newFilter = _extends({}, messageFilter, {
|
2396
|
-
currentPage: 1,
|
2397
|
-
beforeDate: lastItem.createdAt
|
2398
|
-
});
|
2399
|
-
setMessageFilter(newFilter);
|
2400
|
-
return JSON.stringify(newFilter) === JSON.stringify(messageFilter);
|
2401
|
-
};
|
2402
|
-
var handleMarkReadMessage = function handleMarkReadMessage(conversationId, messageId) {
|
3042
|
+
var handleLoadMore = function handleLoadMore(conversationId) {
|
2403
3043
|
try {
|
2404
|
-
var _temp4 =
|
2405
|
-
|
2406
|
-
|
2407
|
-
|
2408
|
-
|
3044
|
+
var _temp4 = function _temp4(_result) {
|
3045
|
+
if (_exit) return _result;
|
3046
|
+
setLoading(false);
|
3047
|
+
return true;
|
3048
|
+
};
|
3049
|
+
var _exit = false;
|
3050
|
+
if (isLoading) return Promise.resolve();
|
3051
|
+
var filter = _extends({}, messageFilter, {
|
3052
|
+
currentPage: ((messageFilter === null || messageFilter === void 0 ? void 0 : messageFilter.currentPage) || 1) + 1
|
3053
|
+
});
|
3054
|
+
setMessageFilter(filter);
|
3055
|
+
setLoading(true);
|
3056
|
+
var _temp3 = _catch(function () {
|
3057
|
+
return Promise.resolve(getMessagesByConversation(conversationId, filter)).then(function (res) {
|
3058
|
+
setMessages(function (prev) {
|
3059
|
+
var _res$data$items2;
|
3060
|
+
var data = [].concat((_res$data$items2 = res.data.items) === null || _res$data$items2 === void 0 ? void 0 : _res$data$items2.reverse(), prev);
|
3061
|
+
var dataFilter = new Set(data);
|
3062
|
+
return Array.from(dataFilter);
|
3063
|
+
});
|
3064
|
+
if (res.data.items) {
|
3065
|
+
setMessageFilter(function (prev) {
|
3066
|
+
return _extends({}, prev, {
|
3067
|
+
totalItems: res.data.totalItems,
|
3068
|
+
totalPages: res.data.totalPages
|
3069
|
+
});
|
3070
|
+
});
|
3071
|
+
}
|
2409
3072
|
});
|
3073
|
+
}, function () {
|
3074
|
+
reactToastify.toast.error("Fail to fetch data!");
|
3075
|
+
_exit = true;
|
2410
3076
|
});
|
2411
|
-
return Promise.resolve(
|
3077
|
+
return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
|
2412
3078
|
} catch (e) {
|
2413
3079
|
return Promise.reject(e);
|
2414
3080
|
}
|
@@ -2417,12 +3083,6 @@ var useMessageList = function useMessageList(userId, getListExamOptions) {
|
|
2417
3083
|
setMessageFilter(MESSAGE_DEFAULT_FILTER);
|
2418
3084
|
setMessages([]);
|
2419
3085
|
};
|
2420
|
-
var handleChangeExamId = function handleChangeExamId(value) {
|
2421
|
-
setMessageFilter(_extends({}, messageFilter, {
|
2422
|
-
examId: value === null || value === void 0 ? void 0 : value.value,
|
2423
|
-
currentPage: 1
|
2424
|
-
}));
|
2425
|
-
};
|
2426
3086
|
return {
|
2427
3087
|
isLoading: isLoading,
|
2428
3088
|
messageFilter: messageFilter,
|
@@ -2430,53 +3090,45 @@ var useMessageList = function useMessageList(userId, getListExamOptions) {
|
|
2430
3090
|
getMessageList: getMessageList,
|
2431
3091
|
setMessages: setMessages,
|
2432
3092
|
resetMessages: resetMessages,
|
2433
|
-
handleChangeExamId: handleChangeExamId,
|
2434
|
-
handleMarkReadMessage: handleMarkReadMessage,
|
2435
3093
|
handleLoadMore: handleLoadMore
|
2436
3094
|
};
|
2437
3095
|
};
|
2438
3096
|
|
2439
3097
|
var useChatContainer = function useChatContainer(props) {
|
2440
|
-
var _selectedConversation
|
3098
|
+
var _selectedConversation;
|
2441
3099
|
var conversation = props.conversation,
|
2442
|
-
|
2443
|
-
examId = props.examId,
|
2444
|
-
onUpdateLastMessage = props.onUpdateLastMessage,
|
2445
|
-
onCreateConversationSuccess = props.onCreateConversationSuccess,
|
2446
|
-
onGetMessagesSuccess = props.onGetMessagesSuccess;
|
3100
|
+
student = props.student;
|
2447
3101
|
var pusher = React.useRef();
|
2448
3102
|
var channel = React.useRef();
|
2449
3103
|
var channelName = React.useRef();
|
2450
3104
|
var loadingRef = React.useRef(false);
|
2451
|
-
var
|
2452
|
-
|
3105
|
+
var infoUser = reactRedux.useSelector(function (state) {
|
3106
|
+
var _state$common;
|
3107
|
+
return (state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user) || {};
|
3108
|
+
});
|
3109
|
+
var academyDomain = infoUser === null || infoUser === void 0 ? void 0 : infoUser.academyDomain;
|
2453
3110
|
var roles = reactRedux.useSelector(function (state) {
|
2454
|
-
var _state$
|
2455
|
-
return state === null || state === void 0 ? void 0 : (_state$
|
2456
|
-
})
|
2457
|
-
var isStudent = roles.includes("Student");
|
3111
|
+
var _state$common2, _state$common2$user;
|
3112
|
+
return (state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : (_state$common2$user = _state$common2.user) === null || _state$common2$user === void 0 ? void 0 : _state$common2$user.roles) || [];
|
3113
|
+
});
|
2458
3114
|
var _useState = React.useState(),
|
2459
3115
|
selectedConversation = _useState[0],
|
2460
3116
|
setSelectedConversation = _useState[1];
|
2461
3117
|
var _useState2 = React.useState(),
|
2462
|
-
|
2463
|
-
|
2464
|
-
var _useState3 = React.useState(
|
2465
|
-
|
2466
|
-
|
3118
|
+
selectedFile = _useState2[0],
|
3119
|
+
setSelectedFile = _useState2[1];
|
3120
|
+
var _useState3 = React.useState(),
|
3121
|
+
message = _useState3[0],
|
3122
|
+
setMessage = _useState3[1];
|
2467
3123
|
var _useState4 = React.useState(true),
|
2468
3124
|
isScrollToEnd = _useState4[0],
|
2469
3125
|
setScrollToEnd = _useState4[1];
|
2470
|
-
var
|
2471
|
-
exams = _useExamList.exams,
|
2472
|
-
getListExam = _useExamList.getListExam;
|
2473
|
-
var _useMessageList = useMessageList(isStudent ? selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation = selectedConversation.teacher) === null || _selectedConversation === void 0 ? void 0 : _selectedConversation.id : selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation2 = selectedConversation.student) === null || _selectedConversation2 === void 0 ? void 0 : _selectedConversation2.id, !userId ? getListExam : undefined),
|
3126
|
+
var _useMessageList = useMessageList(),
|
2474
3127
|
isLoadingMessages = _useMessageList.isLoading,
|
2475
3128
|
messages = _useMessageList.messages,
|
2476
3129
|
messageFilter = _useMessageList.messageFilter,
|
2477
3130
|
getMessageList = _useMessageList.getMessageList,
|
2478
3131
|
resetMessages = _useMessageList.resetMessages,
|
2479
|
-
handleChangeExamId = _useMessageList.handleChangeExamId,
|
2480
3132
|
setMessages = _useMessageList.setMessages,
|
2481
3133
|
handleLoadMore = _useMessageList.handleLoadMore;
|
2482
3134
|
var handleToggleScrollToEnd = function handleToggleScrollToEnd() {
|
@@ -2486,309 +3138,150 @@ var useChatContainer = function useChatContainer(props) {
|
|
2486
3138
|
};
|
2487
3139
|
var handleAddMessage = function handleAddMessage() {
|
2488
3140
|
try {
|
2489
|
-
var
|
2490
|
-
var _temp2 = function _temp2() {
|
3141
|
+
var _temp6 = function _temp6() {
|
2491
3142
|
loadingRef.current = false;
|
2492
3143
|
};
|
2493
3144
|
if (loadingRef.current) return Promise.resolve();
|
2494
|
-
if (messages.some(function (i) {
|
2495
|
-
return i.id === 0;
|
2496
|
-
})) return Promise.resolve();
|
2497
3145
|
loadingRef.current = true;
|
2498
|
-
if (!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id)
|
3146
|
+
if (!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id)) return Promise.resolve();
|
2499
3147
|
setScrollToEnd(true);
|
2500
|
-
|
2501
|
-
|
2502
|
-
|
2503
|
-
|
2504
|
-
|
2505
|
-
|
2506
|
-
|
2507
|
-
|
2508
|
-
|
2509
|
-
|
2510
|
-
|
2511
|
-
|
2512
|
-
|
2513
|
-
|
2514
|
-
|
2515
|
-
|
2516
|
-
|
2517
|
-
|
2518
|
-
|
2519
|
-
|
2520
|
-
|
2521
|
-
return _extends({}, state, {
|
2522
|
-
content: "",
|
2523
|
-
parentId: undefined,
|
2524
|
-
parentContent: "",
|
2525
|
-
examId: messageFilter.examId,
|
2526
|
-
examTitle: messageFilter.examId ? message.examTitle : ""
|
2527
|
-
});
|
2528
|
-
});
|
2529
|
-
setMessageStatus(MessageStatus.Sending);
|
2530
|
-
var _temp = _catch(function () {
|
2531
|
-
return Promise.resolve(apiAddMessage(selectedConversation.id, _extends({}, message, {
|
2532
|
-
examId: !!userId ? examId : message.examId
|
2533
|
-
}))).then(function () {});
|
3148
|
+
var _temp5 = _catch(function () {
|
3149
|
+
function _temp4() {
|
3150
|
+
function _temp2() {
|
3151
|
+
handleChangeInput('');
|
3152
|
+
setSelectedFile(null);
|
3153
|
+
}
|
3154
|
+
var _temp = function (_message$content) {
|
3155
|
+
if (message !== null && message !== void 0 && (_message$content = message.content) !== null && _message$content !== void 0 && _message$content.trim().length) {
|
3156
|
+
return Promise.resolve(apiAddMessage(selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, _extends({}, message))).then(function () {});
|
3157
|
+
}
|
3158
|
+
}();
|
3159
|
+
return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
|
3160
|
+
}
|
3161
|
+
var _temp3 = function () {
|
3162
|
+
if (selectedFile !== null && selectedFile !== void 0 && selectedFile.content) {
|
3163
|
+
return Promise.resolve(apiAddMessage(selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, _extends({}, selectedFile, {
|
3164
|
+
contentType: 1
|
3165
|
+
}))).then(function () {});
|
3166
|
+
}
|
3167
|
+
}();
|
3168
|
+
return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
|
2534
3169
|
}, function (error) {
|
2535
3170
|
var _error$response;
|
2536
|
-
console.log({
|
2537
|
-
error: error
|
2538
|
-
});
|
2539
|
-
setMessageStatus(MessageStatus.SentError);
|
2540
3171
|
setMessages(function (state) {
|
2541
3172
|
return [].concat(state.filter(function (i) {
|
2542
|
-
return i.id !== 0;
|
3173
|
+
return (i === null || i === void 0 ? void 0 : i.id) !== 0;
|
2543
3174
|
}));
|
2544
3175
|
});
|
2545
3176
|
reactToastify.toast.error((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data);
|
2546
3177
|
});
|
2547
|
-
return Promise.resolve(
|
3178
|
+
return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
|
2548
3179
|
} catch (e) {
|
2549
3180
|
return Promise.reject(e);
|
2550
3181
|
}
|
2551
3182
|
};
|
2552
|
-
var
|
2553
|
-
|
2554
|
-
|
2555
|
-
|
2556
|
-
|
2557
|
-
|
2558
|
-
|
2559
|
-
|
2560
|
-
|
2561
|
-
|
2562
|
-
|
2563
|
-
|
2564
|
-
|
2565
|
-
|
2566
|
-
|
2567
|
-
|
2568
|
-
|
2569
|
-
|
2570
|
-
|
2571
|
-
|
2572
|
-
|
2573
|
-
|
2574
|
-
|
2575
|
-
|
2576
|
-
|
2577
|
-
|
2578
|
-
|
2579
|
-
|
2580
|
-
|
2581
|
-
parentContent: "",
|
2582
|
-
examTitle: messageFilter.examId ? message.examTitle : ""
|
2583
|
-
}));
|
3183
|
+
var handleUploadImage = function handleUploadImage(file) {
|
3184
|
+
try {
|
3185
|
+
console.log({
|
3186
|
+
file: file
|
3187
|
+
});
|
3188
|
+
if (!file) return Promise.resolve();
|
3189
|
+
return Promise.resolve(_finally(function () {
|
3190
|
+
return _catch(function () {
|
3191
|
+
var formData = new FormData();
|
3192
|
+
formData.append("upload", file);
|
3193
|
+
return Promise.resolve(apiUploadFile(formData)).then(function (res) {
|
3194
|
+
var _res$data;
|
3195
|
+
setSelectedFile({
|
3196
|
+
content: res === null || res === void 0 ? void 0 : (_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.url
|
3197
|
+
});
|
3198
|
+
});
|
3199
|
+
}, function (error) {
|
3200
|
+
var _error$response2;
|
3201
|
+
setMessages(function (state) {
|
3202
|
+
return [].concat(state.filter(function (i) {
|
3203
|
+
return (i === null || i === void 0 ? void 0 : i.id) !== 0;
|
3204
|
+
}));
|
3205
|
+
});
|
3206
|
+
reactToastify.toast.error((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data);
|
3207
|
+
});
|
3208
|
+
}, function () {}));
|
3209
|
+
} catch (e) {
|
3210
|
+
return Promise.reject(e);
|
3211
|
+
}
|
2584
3212
|
};
|
2585
3213
|
var handleChangeInput = function handleChangeInput(text) {
|
2586
|
-
setMessage(_extends({}, message, {
|
2587
|
-
content: text
|
2588
|
-
}));
|
2589
|
-
};
|
2590
|
-
var handleFilterExam = function handleFilterExam(val) {
|
2591
|
-
var _val$label, _val$label$split;
|
2592
|
-
var examTitle = val === null || val === void 0 ? void 0 : (_val$label = val.label) === null || _val$label === void 0 ? void 0 : (_val$label$split = _val$label.split(" ")) === null || _val$label$split === void 0 ? void 0 : _val$label$split.slice(0, -1).join(" ");
|
2593
3214
|
setMessage({
|
2594
|
-
|
2595
|
-
content: "",
|
2596
|
-
examTitle: examTitle,
|
2597
|
-
parentId: undefined,
|
2598
|
-
parentContent: ""
|
3215
|
+
content: text
|
2599
3216
|
});
|
2600
|
-
handleChangeExamId(val);
|
2601
3217
|
};
|
2602
|
-
var messageList = React.useMemo(function () {
|
2603
|
-
if (!selectedConversation) return [];
|
2604
|
-
var examCode = undefined;
|
2605
|
-
var results = messages.map(function (i, index) {
|
2606
|
-
var _i$exam, _i$exam4, _i$exam5, _i$exam6, _i$exam7, _i$exam8, _i$exam9, _i$exam10, _i$exam11;
|
2607
|
-
var isFirst = index === 0;
|
2608
|
-
var isLast = index === messages.length - 1;
|
2609
|
-
if (index > 0 && (messages[index - 1].isStudent !== i.isStudent && !i.isSystemLog || i.isSystemLog || messages[index - 1].examId !== i.examId)) isFirst = true;
|
2610
|
-
if (index < messages.length - 1 && (messages[index + 1].isStudent !== i.isStudent && i.examId !== messages[index + 1].examId || i.examId !== messages[index + 1].examId || messages[index + 1].isSystemLog)) isLast = true;
|
2611
|
-
var name = isStudent ? "You" : selectedConversation.student.displayName;
|
2612
|
-
var content = i === null || i === void 0 ? void 0 : i.content;
|
2613
|
-
var showExamHeader = false;
|
2614
|
-
if (examCode != ((_i$exam = i.exam) === null || _i$exam === void 0 ? void 0 : _i$exam.code) && !messageFilter.examId && !userId) {
|
2615
|
-
var _i$exam2, _i$exam3;
|
2616
|
-
if ((_i$exam2 = i.exam) !== null && _i$exam2 !== void 0 && _i$exam2.code) showExamHeader = true;
|
2617
|
-
examCode = (_i$exam3 = i.exam) === null || _i$exam3 === void 0 ? void 0 : _i$exam3.code;
|
2618
|
-
}
|
2619
|
-
switch (i.type) {
|
2620
|
-
case MessageSourceType.Exam:
|
2621
|
-
switch (i.action) {
|
2622
|
-
case MessageAction.Took:
|
2623
|
-
content = name + " took the exam " + ((_i$exam4 = i.exam) === null || _i$exam4 === void 0 ? void 0 : _i$exam4.title);
|
2624
|
-
break;
|
2625
|
-
}
|
2626
|
-
break;
|
2627
|
-
}
|
2628
|
-
return {
|
2629
|
-
id: i.id,
|
2630
|
-
isMe: isStudent === i.isStudent,
|
2631
|
-
avatar: isStudent ? selectedConversation.teacher.avatar : selectedConversation.student.avatar,
|
2632
|
-
name: selectedConversation.student.displayName,
|
2633
|
-
isRead: i.isRead,
|
2634
|
-
createdAt: i.createdAt,
|
2635
|
-
content: content,
|
2636
|
-
isFirst: isFirst,
|
2637
|
-
isLast: isLast,
|
2638
|
-
isSystemLog: i.isSystemLog,
|
2639
|
-
examCode: !messageFilter.examId && !userId ? (_i$exam5 = i.exam) === null || _i$exam5 === void 0 ? void 0 : _i$exam5.code : undefined,
|
2640
|
-
examId: (_i$exam6 = i.exam) === null || _i$exam6 === void 0 ? void 0 : _i$exam6.id,
|
2641
|
-
examTitle: (_i$exam7 = i.exam) === null || _i$exam7 === void 0 ? void 0 : _i$exam7.title,
|
2642
|
-
type: (_i$exam8 = i.exam) !== null && _i$exam8 !== void 0 && _i$exam8.code ? exports.ChatItemType.Exam : undefined,
|
2643
|
-
showExamHeader: showExamHeader,
|
2644
|
-
actionLink: ((_i$exam9 = i.exam) === null || _i$exam9 === void 0 ? void 0 : _i$exam9.code) && (isStudent ? "/student/check/live-result?examCode=" + ((_i$exam10 = i.exam) === null || _i$exam10 === void 0 ? void 0 : _i$exam10.code) : "/teacher/exam-status/main?examCode=" + ((_i$exam11 = i.exam) === null || _i$exam11 === void 0 ? void 0 : _i$exam11.code)),
|
2645
|
-
parentId: i.parentId,
|
2646
|
-
parentContent: i.parentContent,
|
2647
|
-
status: i.id ? MessageStatus.Default : messageStatus
|
2648
|
-
};
|
2649
|
-
});
|
2650
|
-
return results;
|
2651
|
-
}, [JSON.stringify(messages), JSON.stringify(message), isStudent, JSON.stringify(selectedConversation), messageFilter.examId, isStudent, userId, messageStatus]);
|
2652
3218
|
var handleNewMessageSent = function handleNewMessageSent(data) {
|
2653
|
-
if (!
|
2654
|
-
|
2655
|
-
setMessages(function (state) {
|
2656
|
-
if (state.some(function (i) {
|
2657
|
-
return i.id === 0;
|
2658
|
-
})) return [].concat(state.filter(function (i) {
|
2659
|
-
return i.id !== 0;
|
2660
|
-
}), [data]);else return [].concat(state, [data]);
|
2661
|
-
});
|
2662
|
-
}
|
2663
|
-
onUpdateLastMessage === null || onUpdateLastMessage === void 0 ? void 0 : onUpdateLastMessage(data);
|
2664
|
-
};
|
2665
|
-
var handleMessageMarkRead = function handleMessageMarkRead(data) {
|
3219
|
+
if (!data) return;
|
3220
|
+
setScrollToEnd(true);
|
2666
3221
|
setMessages(function (state) {
|
2667
|
-
return [].concat(state
|
2668
|
-
return _extends({}, i, {
|
2669
|
-
isRead: data.includes(i.id || 0) ? true : i.isRead
|
2670
|
-
});
|
2671
|
-
}));
|
3222
|
+
return [].concat(state, [data]);
|
2672
3223
|
});
|
2673
3224
|
};
|
3225
|
+
var handleCompletedConversation = function handleCompletedConversation(data) {
|
3226
|
+
if (!data) return;
|
3227
|
+
setSelectedConversation(JSON.parse(data));
|
3228
|
+
};
|
2674
3229
|
var handleLoadMoreMessages = function handleLoadMoreMessages() {
|
2675
|
-
|
2676
|
-
|
3230
|
+
try {
|
3231
|
+
if ((selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id) === undefined) return Promise.resolve();
|
3232
|
+
return Promise.resolve(handleLoadMore(selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id));
|
3233
|
+
} catch (e) {
|
3234
|
+
return Promise.reject(e);
|
2677
3235
|
}
|
2678
3236
|
};
|
3237
|
+
var handleDeleteSelectedImage = function handleDeleteSelectedImage() {
|
3238
|
+
setSelectedFile(null);
|
3239
|
+
};
|
2679
3240
|
var cleanupPusher = function cleanupPusher() {
|
2680
|
-
var _pusher$current
|
3241
|
+
var _pusher$current;
|
2681
3242
|
(_pusher$current = pusher.current) === null || _pusher$current === void 0 ? void 0 : _pusher$current.unbind("new-message-event", handleNewMessageSent);
|
2682
|
-
(_pusher$current2 = pusher.current) === null || _pusher$current2 === void 0 ? void 0 : _pusher$current2.unbind("message-read-event", handleMessageMarkRead);
|
2683
3243
|
channelName.current && pusher.current && pusher.current.unsubscribe(channelName.current);
|
2684
3244
|
};
|
2685
3245
|
React.useEffect(function () {
|
2686
|
-
if (PUSHER_CONFIG.cluster && PUSHER_CONFIG.key && !!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id)) {
|
3246
|
+
if (PUSHER_CONFIG.cluster && PUSHER_CONFIG.key && academyDomain && !!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id)) {
|
3247
|
+
var _headers;
|
2687
3248
|
var token = getAccessToken();
|
2688
3249
|
pusher.current = new Pusher(PUSHER_CONFIG.key, {
|
2689
3250
|
cluster: PUSHER_CONFIG.cluster,
|
2690
3251
|
authEndpoint: BASE_URL + "/api/auth/pusher",
|
2691
3252
|
auth: {
|
2692
3253
|
params: {},
|
2693
|
-
headers: {
|
3254
|
+
headers: (_headers = {
|
2694
3255
|
Authorization: "Bearer " + token
|
2695
|
-
}
|
3256
|
+
}, _headers[AcademyHeaders] = academyDomain, _headers)
|
2696
3257
|
}
|
2697
3258
|
});
|
2698
3259
|
channelName.current = "presence-conversation-channel-" + (selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id);
|
2699
3260
|
channel.current = pusher.current.subscribe(channelName.current);
|
2700
3261
|
pusher.current.bind("new-message-event", handleNewMessageSent);
|
2701
|
-
pusher.current.bind("
|
3262
|
+
pusher.current.bind("completed-conversation-event", handleCompletedConversation);
|
2702
3263
|
}
|
2703
3264
|
return cleanupPusher;
|
2704
|
-
}, [selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id,
|
3265
|
+
}, [selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, academyDomain]);
|
2705
3266
|
React.useEffect(function () {
|
2706
3267
|
var getConversation = function getConversation() {
|
2707
3268
|
try {
|
2708
|
-
var _temp6 = function _temp6() {
|
2709
|
-
dispatch(setLoading(false));
|
2710
|
-
};
|
2711
3269
|
resetMessages();
|
2712
3270
|
setScrollToEnd(true);
|
2713
|
-
if ((conversation
|
2714
|
-
|
2715
|
-
|
2716
|
-
}
|
2717
|
-
if (!userId) return Promise.resolve();
|
2718
|
-
dispatch(setLoading(true));
|
2719
|
-
var _temp5 = _catch(function () {
|
2720
|
-
return Promise.resolve(apiGetConversationByUserId(userId)).then(function (res) {
|
2721
|
-
function _temp4() {
|
2722
|
-
setSelectedConversation(res.data.data);
|
2723
|
-
}
|
2724
|
-
var _temp3 = function () {
|
2725
|
-
if (!res.data.data) {
|
2726
|
-
return Promise.resolve(createConversation(userId)).then(function (_createConversation) {
|
2727
|
-
res = _createConversation;
|
2728
|
-
});
|
2729
|
-
}
|
2730
|
-
}();
|
2731
|
-
return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
|
2732
|
-
});
|
2733
|
-
}, function (error) {
|
2734
|
-
console.log({
|
2735
|
-
error: error
|
2736
|
-
});
|
2737
|
-
});
|
2738
|
-
return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
|
3271
|
+
if (!(conversation !== null && conversation !== void 0 && conversation.id)) return Promise.resolve();
|
3272
|
+
setSelectedConversation(conversation);
|
3273
|
+
return Promise.resolve();
|
2739
3274
|
} catch (e) {
|
2740
3275
|
return Promise.reject(e);
|
2741
3276
|
}
|
2742
3277
|
};
|
2743
3278
|
getConversation();
|
2744
|
-
}, [conversation === null || conversation === void 0 ? void 0 : conversation.id
|
2745
|
-
var handleMarkRead = React.useCallback(function () {
|
2746
|
-
try {
|
2747
|
-
if (!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id)) return Promise.resolve();
|
2748
|
-
var _temp7 = _catch(function () {
|
2749
|
-
return Promise.resolve(apiMarkReadMessage(selectedConversation.id, -1)).then(function () {});
|
2750
|
-
}, function (error) {
|
2751
|
-
console.log({
|
2752
|
-
error: error
|
2753
|
-
});
|
2754
|
-
});
|
2755
|
-
return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(function () {}) : void 0);
|
2756
|
-
} catch (e) {
|
2757
|
-
return Promise.reject(e);
|
2758
|
-
}
|
2759
|
-
}, [selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id]);
|
3279
|
+
}, [conversation === null || conversation === void 0 ? void 0 : conversation.id]);
|
2760
3280
|
var getMessageConversation = function getMessageConversation() {
|
2761
3281
|
try {
|
2762
|
-
if (!roles.length) return Promise.resolve();
|
2763
3282
|
if ((selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id) === undefined) return Promise.resolve();
|
2764
|
-
|
2765
|
-
|
2766
|
-
if (selectedConversation.id === 0) {
|
2767
|
-
var _userId = isStudent ? selectedConversation.teacher.id : selectedConversation.student.id;
|
2768
|
-
return Promise.resolve(createConversation(_userId)).then(function (res) {
|
2769
|
-
var _res$data$data;
|
2770
|
-
return Promise.resolve(onCreateConversationSuccess === null || onCreateConversationSuccess === void 0 ? void 0 : onCreateConversationSuccess((_res$data$data = res.data.data) === null || _res$data$data === void 0 ? void 0 : _res$data$data.id)).then(function () {});
|
2771
|
-
});
|
2772
|
-
} else {
|
2773
|
-
var _temp9 = function _temp9() {
|
2774
|
-
return Promise.resolve(getMessageList(selectedConversation.id, examId)).then(function () {
|
2775
|
-
onGetMessagesSuccess === null || onGetMessagesSuccess === void 0 ? void 0 : onGetMessagesSuccess();
|
2776
|
-
});
|
2777
|
-
};
|
2778
|
-
var _temp8 = function () {
|
2779
|
-
if (firstLoadRef.current) {
|
2780
|
-
return Promise.resolve(handleMarkRead()).then(function () {
|
2781
|
-
firstLoadRef.current = false;
|
2782
|
-
});
|
2783
|
-
}
|
2784
|
-
}();
|
2785
|
-
return _temp8 && _temp8.then ? _temp8.then(_temp9) : _temp9(_temp8);
|
2786
|
-
}
|
2787
|
-
}();
|
2788
|
-
if (_temp10 && _temp10.then) return _temp10.then(function () {});
|
2789
|
-
}, function () {
|
2790
|
-
reactToastify.toast.error("Fail to fetch data!");
|
2791
|
-
}));
|
3283
|
+
getMessageList(selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id);
|
3284
|
+
return Promise.resolve();
|
2792
3285
|
} catch (e) {
|
2793
3286
|
return Promise.reject(e);
|
2794
3287
|
}
|
@@ -2797,231 +3290,55 @@ var useChatContainer = function useChatContainer(props) {
|
|
2797
3290
|
resetMessages();
|
2798
3291
|
setScrollToEnd(true);
|
2799
3292
|
};
|
3293
|
+
var messageList = React.useMemo(function () {
|
3294
|
+
var results = messages.map(function (i) {
|
3295
|
+
var _i$sender;
|
3296
|
+
return _extends({}, i, {
|
3297
|
+
isMe: (infoUser === null || infoUser === void 0 ? void 0 : infoUser.id) === ((_i$sender = i.sender) === null || _i$sender === void 0 ? void 0 : _i$sender.id)
|
3298
|
+
});
|
3299
|
+
});
|
3300
|
+
return results;
|
3301
|
+
}, [JSON.stringify(messages)]);
|
2800
3302
|
React.useEffect(function () {
|
2801
3303
|
getMessageConversation();
|
2802
|
-
}, [JSON.stringify(selectedConversation)
|
2803
|
-
var userName = (isStudent ? selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation3 = selectedConversation.teacher) === null || _selectedConversation3 === void 0 ? void 0 : _selectedConversation3.displayName : selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation4 = selectedConversation.student) === null || _selectedConversation4 === void 0 ? void 0 : _selectedConversation4.displayName) || "";
|
2804
|
-
var userAvatar = (isStudent ? selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation5 = selectedConversation.teacher) === null || _selectedConversation5 === void 0 ? void 0 : _selectedConversation5.avatar : selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation6 = selectedConversation.student) === null || _selectedConversation6 === void 0 ? void 0 : _selectedConversation6.avatar) || "";
|
3304
|
+
}, [JSON.stringify(selectedConversation)]);
|
2805
3305
|
return {
|
2806
3306
|
chatHeaderProps: {
|
2807
|
-
|
2808
|
-
|
2809
|
-
|
2810
|
-
|
2811
|
-
|
3307
|
+
fullName: student === null || student === void 0 ? void 0 : student.fullName,
|
3308
|
+
examTitle: selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.examTitle,
|
3309
|
+
questionOrder: selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation = selectedConversation.question) === null || _selectedConversation === void 0 ? void 0 : _selectedConversation.questionOrder,
|
3310
|
+
conversationId: selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id,
|
3311
|
+
isCompleted: selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.isCompleted,
|
3312
|
+
durationExam: selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.duration,
|
3313
|
+
createdAt: selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.createdAt,
|
3314
|
+
teacherName: selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.teacherName,
|
3315
|
+
roles: roles
|
2812
3316
|
},
|
2813
3317
|
chatListProps: {
|
2814
3318
|
messages: messageList,
|
2815
|
-
|
2816
|
-
|
2817
|
-
onReTrySendMessage: handleAddMessage
|
3319
|
+
onReTrySendMessage: handleAddMessage,
|
3320
|
+
roles: roles
|
2818
3321
|
},
|
2819
3322
|
inputProps: {
|
3323
|
+
selectedFile: selectedFile,
|
2820
3324
|
text: (message === null || message === void 0 ? void 0 : message.content) || "",
|
2821
|
-
parentText: message === null || message === void 0 ? void 0 : message.parentContent,
|
2822
|
-
examTitle: message === null || message === void 0 ? void 0 : message.examTitle,
|
2823
3325
|
onChangeInput: handleChangeInput,
|
2824
3326
|
onSubmit: handleAddMessage,
|
2825
|
-
|
3327
|
+
handleDeleteSelectedImage: handleDeleteSelectedImage,
|
3328
|
+
handleUploadImage: handleUploadImage,
|
3329
|
+
isCompleted: selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.isCompleted
|
2826
3330
|
},
|
2827
3331
|
isScrollToEnd: isScrollToEnd,
|
2828
3332
|
isLoadingMessages: isLoadingMessages,
|
2829
|
-
exams: exams,
|
2830
3333
|
messageList: messageList,
|
2831
3334
|
selectedConversation: selectedConversation,
|
2832
|
-
messageStatus: messageStatus,
|
2833
3335
|
messageFilter: messageFilter,
|
2834
3336
|
handleToggleScrollToEnd: handleToggleScrollToEnd,
|
2835
3337
|
handleLoadMoreMessages: handleLoadMoreMessages,
|
2836
3338
|
getMessageList: getMessageList,
|
2837
|
-
handleFilterExam: handleFilterExam,
|
2838
3339
|
setMessage: setMessage,
|
2839
3340
|
resetMessages: handleConversationChange,
|
2840
|
-
getMessageConversation: getMessageConversation
|
2841
|
-
handleMarkRead: handleMarkRead
|
2842
|
-
};
|
2843
|
-
};
|
2844
|
-
|
2845
|
-
var STUDENT_STATUS_URL = BASE_URL + "/api/user";
|
2846
|
-
var getStudentConversationListApi = function getStudentConversationListApi(query) {
|
2847
|
-
return api.get(STUDENT_STATUS_URL + "/GetStudentConversations", {
|
2848
|
-
params: query
|
2849
|
-
});
|
2850
|
-
};
|
2851
|
-
|
2852
|
-
var isFirstLoad = true;
|
2853
|
-
var useConversationList = function useConversationList() {
|
2854
|
-
var dispatch = reactRedux.useDispatch();
|
2855
|
-
var user = reactRedux.useSelector(function (state) {
|
2856
|
-
var _state$common;
|
2857
|
-
return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
|
2858
|
-
});
|
2859
|
-
var roles = (user === null || user === void 0 ? void 0 : user.roles) || [];
|
2860
|
-
var isStudent = roles.includes("Student");
|
2861
|
-
var _useState = React.useState(),
|
2862
|
-
selectedConversation = _useState[0],
|
2863
|
-
setSelectedConversation = _useState[1];
|
2864
|
-
var _useState2 = React.useState([]),
|
2865
|
-
conversations = _useState2[0],
|
2866
|
-
setConversations = _useState2[1];
|
2867
|
-
var _useState3 = React.useState(CONVERSATION_DEFAULT_FILTER),
|
2868
|
-
conversationFilter = _useState3[0],
|
2869
|
-
setConversationFilter = _useState3[1];
|
2870
|
-
var handleChangeSelectedConversation = function handleChangeSelectedConversation(val) {
|
2871
|
-
setSelectedConversation(val);
|
2872
|
-
};
|
2873
|
-
var handleNewMessageConversation = function handleNewMessageConversation(val) {
|
2874
|
-
setConversations(function (state) {
|
2875
|
-
var index = state.findIndex(function (i) {
|
2876
|
-
return i.id === val.id;
|
2877
|
-
});
|
2878
|
-
if (index > -1 && JSON.stringify(val) !== JSON.stringify(state[index])) {
|
2879
|
-
return [val].concat(state.slice(0, index), state.slice(index + 1));
|
2880
|
-
} else return [val].concat(state);
|
2881
|
-
});
|
2882
|
-
setSelectedConversation(function (state) {
|
2883
|
-
if (!state) return val;
|
2884
|
-
return state;
|
2885
|
-
});
|
2886
|
-
};
|
2887
|
-
var handleMessageReadConversation = function handleMessageReadConversation(id, totalUnread) {
|
2888
|
-
setConversations(function (state) {
|
2889
|
-
var index = state.findIndex(function (i) {
|
2890
|
-
return i.id === id;
|
2891
|
-
});
|
2892
|
-
if (index === -1 || totalUnread === state[index].totalUnReadMessage) return state;
|
2893
|
-
return [].concat(state.slice(0, index), [_extends({}, state[index], {
|
2894
|
-
totalUnReadMessage: totalUnread
|
2895
|
-
})], state.slice(index + 1));
|
2896
|
-
});
|
2897
|
-
setSelectedConversation(function (state) {
|
2898
|
-
if (!!state) return _extends({}, state, {
|
2899
|
-
totalUnReadMessage: totalUnread
|
2900
|
-
});
|
2901
|
-
return state;
|
2902
|
-
});
|
2903
|
-
};
|
2904
|
-
var handleChangeTextSearch = function handleChangeTextSearch(e) {
|
2905
|
-
setConversationFilter(function (state) {
|
2906
|
-
return _extends({}, state, {
|
2907
|
-
textSearch: e.target.value
|
2908
|
-
});
|
2909
|
-
});
|
2910
|
-
};
|
2911
|
-
var handleChangeFilter = function handleChangeFilter(filter) {
|
2912
|
-
setConversationFilter(function (state) {
|
2913
|
-
return _extends({}, state, filter);
|
2914
|
-
});
|
2915
|
-
};
|
2916
|
-
var formatConversationLastMessageContent = function formatConversationLastMessageContent(conversation) {
|
2917
|
-
var _conversation$lastMes;
|
2918
|
-
if (!(conversation !== null && conversation !== void 0 && conversation.lastMessage)) return "";
|
2919
|
-
var content = conversation.lastMessage.content;
|
2920
|
-
switch (conversation.lastMessage.type) {
|
2921
|
-
case MessageSourceType.Exam:
|
2922
|
-
switch (conversation.lastMessage.action) {
|
2923
|
-
case MessageAction.Took:
|
2924
|
-
content = (isStudent ? "You" : conversation.student.displayName) + " took the exam " + ((_conversation$lastMes = conversation.lastMessage.exam) === null || _conversation$lastMes === void 0 ? void 0 : _conversation$lastMes.title);
|
2925
|
-
break;
|
2926
|
-
}
|
2927
|
-
break;
|
2928
|
-
}
|
2929
|
-
return content;
|
2930
|
-
};
|
2931
|
-
var getConversationList = function getConversationList() {
|
2932
|
-
try {
|
2933
|
-
var _temp2 = function _temp2() {
|
2934
|
-
isFirstLoad && dispatch(setLoading(false));
|
2935
|
-
if (isFirstLoad) isFirstLoad = false;
|
2936
|
-
};
|
2937
|
-
if (!roles.length) return Promise.resolve();
|
2938
|
-
isFirstLoad && dispatch(setLoading(true));
|
2939
|
-
var _temp = _catch(function () {
|
2940
|
-
var apiGetConversations = isStudent ? getListConversation : getStudentConversationListApi;
|
2941
|
-
return Promise.resolve(apiGetConversations(conversationFilter)).then(function (res) {
|
2942
|
-
var _res$data$items;
|
2943
|
-
setConversations(res.data.items || []);
|
2944
|
-
!selectedConversation && setSelectedConversation((_res$data$items = res.data.items) === null || _res$data$items === void 0 ? void 0 : _res$data$items[0]);
|
2945
|
-
});
|
2946
|
-
}, function () {
|
2947
|
-
setSelectedConversation(undefined);
|
2948
|
-
dispatch(setAlert({
|
2949
|
-
type: "danger",
|
2950
|
-
message: "Fail to fetch data!"
|
2951
|
-
}));
|
2952
|
-
});
|
2953
|
-
return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
|
2954
|
-
} catch (e) {
|
2955
|
-
return Promise.reject(e);
|
2956
|
-
}
|
2957
|
-
};
|
2958
|
-
var handleUpdateTotalUnreadMessage = function handleUpdateTotalUnreadMessage() {
|
2959
|
-
if (!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id)) return;
|
2960
|
-
setConversations(function (state) {
|
2961
|
-
var updateIndex = state.findIndex(function (i) {
|
2962
|
-
return i.id === selectedConversation.id;
|
2963
|
-
});
|
2964
|
-
if (updateIndex < 0) return state;
|
2965
|
-
return [].concat(state.slice(0, updateIndex), [_extends({}, state[updateIndex], {
|
2966
|
-
totalUnReadMessage: 0
|
2967
|
-
})], state.slice(updateIndex + 1));
|
2968
|
-
});
|
2969
|
-
};
|
2970
|
-
var handleUpdateLastMessage = function handleUpdateLastMessage(lastMessage) {
|
2971
|
-
setConversations(function (state) {
|
2972
|
-
var updateIndex = state.findIndex(function (i) {
|
2973
|
-
return i.id === lastMessage.conversationId;
|
2974
|
-
});
|
2975
|
-
if (updateIndex < 0) return state;
|
2976
|
-
console.log({
|
2977
|
-
lastMessage: lastMessage
|
2978
|
-
});
|
2979
|
-
return [_extends({}, state[updateIndex], {
|
2980
|
-
lastMessage: lastMessage
|
2981
|
-
})].concat(state.slice(0, updateIndex), state.slice(updateIndex + 1));
|
2982
|
-
});
|
2983
|
-
};
|
2984
|
-
var handleCreateConversationSuccess = function handleCreateConversationSuccess(id) {
|
2985
|
-
try {
|
2986
|
-
if (!selectedConversation) return Promise.resolve();
|
2987
|
-
setSelectedConversation(_extends({}, selectedConversation, {
|
2988
|
-
id: id
|
2989
|
-
}));
|
2990
|
-
var index = conversations.findIndex(function (i) {
|
2991
|
-
return i.student.id === (selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.student.id) && i.teacher.id === (selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.teacher.id);
|
2992
|
-
});
|
2993
|
-
if (index > -1) {
|
2994
|
-
setConversations([].concat(conversations.slice(0, index), [_extends({}, selectedConversation, {
|
2995
|
-
id: id
|
2996
|
-
})], conversations.slice(index + 1)));
|
2997
|
-
}
|
2998
|
-
return Promise.resolve();
|
2999
|
-
} catch (e) {
|
3000
|
-
return Promise.reject(e);
|
3001
|
-
}
|
3002
|
-
};
|
3003
|
-
React.useEffect(function () {
|
3004
|
-
getConversationList();
|
3005
|
-
}, [JSON.stringify(conversationFilter), roles.length]);
|
3006
|
-
React.useEffect(function () {
|
3007
|
-
window.document.title = "Q&A";
|
3008
|
-
}, []);
|
3009
|
-
return {
|
3010
|
-
isStudent: isStudent,
|
3011
|
-
conversationFilter: conversationFilter,
|
3012
|
-
selectedConversation: selectedConversation,
|
3013
|
-
conversations: conversations,
|
3014
|
-
handleUpdateTotalUnreadMessage: handleUpdateTotalUnreadMessage,
|
3015
|
-
handleChangeFilter: handleChangeFilter,
|
3016
|
-
handleChangeSelectedConversation: handleChangeSelectedConversation,
|
3017
|
-
handleChangeTextSearch: handleChangeTextSearch,
|
3018
|
-
setSelectedConversation: setSelectedConversation,
|
3019
|
-
handleUpdateLastMessage: handleUpdateLastMessage,
|
3020
|
-
getConversationList: getConversationList,
|
3021
|
-
formatConversationLastMessageContent: formatConversationLastMessageContent,
|
3022
|
-
handleNewMessageConversation: handleNewMessageConversation,
|
3023
|
-
handleCreateConversationSuccess: handleCreateConversationSuccess,
|
3024
|
-
handleMessageReadConversation: handleMessageReadConversation
|
3341
|
+
getMessageConversation: getMessageConversation
|
3025
3342
|
};
|
3026
3343
|
};
|
3027
3344
|
|
@@ -3029,10 +3346,12 @@ var usePusherConversation = function usePusherConversation(onNewMessageConversat
|
|
3029
3346
|
var pusher = React.useRef();
|
3030
3347
|
var channel = React.useRef();
|
3031
3348
|
var channelName = React.useRef();
|
3032
|
-
var
|
3033
|
-
var _state$common
|
3034
|
-
return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 :
|
3349
|
+
var user = reactRedux.useSelector(function (state) {
|
3350
|
+
var _state$common;
|
3351
|
+
return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
|
3035
3352
|
});
|
3353
|
+
var userId = user === null || user === void 0 ? void 0 : user.id;
|
3354
|
+
var academyDomain = user === null || user === void 0 ? void 0 : user.academyDomain;
|
3036
3355
|
var handleNewMessageConversationCreated = function handleNewMessageConversationCreated(data) {
|
3037
3356
|
onNewMessageConversation === null || onNewMessageConversation === void 0 ? void 0 : onNewMessageConversation(data);
|
3038
3357
|
};
|
@@ -3045,16 +3364,17 @@ var usePusherConversation = function usePusherConversation(onNewMessageConversat
|
|
3045
3364
|
channelName.current && pusher.current && pusher.current.unsubscribe(channelName.current);
|
3046
3365
|
};
|
3047
3366
|
React.useEffect(function () {
|
3048
|
-
if (PUSHER_CONFIG.cluster && PUSHER_CONFIG.key && !!userId) {
|
3367
|
+
if (PUSHER_CONFIG.cluster && PUSHER_CONFIG.key && academyDomain && !!userId) {
|
3368
|
+
var _headers;
|
3049
3369
|
var token = getAccessToken$1();
|
3050
3370
|
pusher.current = new Pusher(PUSHER_CONFIG.key, {
|
3051
3371
|
cluster: PUSHER_CONFIG.cluster,
|
3052
3372
|
authEndpoint: BASE_URL + "/api/auth/pusher",
|
3053
3373
|
auth: {
|
3054
3374
|
params: {},
|
3055
|
-
headers: {
|
3375
|
+
headers: (_headers = {
|
3056
3376
|
Authorization: "Bearer " + token
|
3057
|
-
}
|
3377
|
+
}, _headers[AcademyHeaders] = academyDomain, _headers)
|
3058
3378
|
}
|
3059
3379
|
});
|
3060
3380
|
channelName.current = "presence-conversation-channel-userId-" + userId;
|
@@ -3063,18 +3383,18 @@ var usePusherConversation = function usePusherConversation(onNewMessageConversat
|
|
3063
3383
|
channel.current.bind("message-conversation-read-event", handleReadMessageConversation);
|
3064
3384
|
}
|
3065
3385
|
return cleanupPusher;
|
3066
|
-
}, [userId]);
|
3386
|
+
}, [userId, academyDomain]);
|
3067
3387
|
return {};
|
3068
3388
|
};
|
3069
3389
|
|
3070
|
-
var _excluded$
|
3390
|
+
var _excluded$2 = ["defaultValue", "options", "isDisabled", "scrollBottom", "value", "isMulti"];
|
3071
3391
|
var CustomCreatable = function CustomCreatable(_ref) {
|
3072
3392
|
var options = _ref.options,
|
3073
3393
|
isDisabled = _ref.isDisabled,
|
3074
3394
|
scrollBottom = _ref.scrollBottom,
|
3075
3395
|
value = _ref.value,
|
3076
3396
|
isMulti = _ref.isMulti,
|
3077
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$
|
3397
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
|
3078
3398
|
var initialValues = Array.isArray(value) ? options.filter(function (i) {
|
3079
3399
|
return value.includes(i.value);
|
3080
3400
|
}) : isMulti ? options.filter(function (i) {
|
@@ -3092,7 +3412,7 @@ var CustomCreatable = function CustomCreatable(_ref) {
|
|
3092
3412
|
}, rest));
|
3093
3413
|
};
|
3094
3414
|
|
3095
|
-
var _excluded$
|
3415
|
+
var _excluded$3 = ["isDefault", "defaultValue", "options", "isDisabled", "scrollBottom", "value", "isMulti"];
|
3096
3416
|
var CustomAsyncSelect = function CustomAsyncSelect(_ref) {
|
3097
3417
|
var isDefault = _ref.isDefault,
|
3098
3418
|
options = _ref.options,
|
@@ -3100,7 +3420,7 @@ var CustomAsyncSelect = function CustomAsyncSelect(_ref) {
|
|
3100
3420
|
scrollBottom = _ref.scrollBottom,
|
3101
3421
|
value = _ref.value,
|
3102
3422
|
isMulti = _ref.isMulti,
|
3103
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$
|
3423
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
|
3104
3424
|
var initialValues = Array.isArray(value) ? options.filter(function (i) {
|
3105
3425
|
return value.includes(i.value);
|
3106
3426
|
}) : isMulti ? options.filter(function (i) {
|
@@ -3118,7 +3438,7 @@ var CustomAsyncSelect = function CustomAsyncSelect(_ref) {
|
|
3118
3438
|
}, rest));
|
3119
3439
|
};
|
3120
3440
|
|
3121
|
-
var styles$
|
3441
|
+
var styles$1 = {"question":"_2uc_W","question-article":"_2p7kY","question-title":"_2tHmc","question--active":"_3IHYm","question-label":"_26ATj","question-input":"_3R8PR","question-btn":"_1VZac"};
|
3122
3442
|
|
3123
3443
|
var DURATION_OPTIONS = Array.from({
|
3124
3444
|
length: 120
|
@@ -3161,7 +3481,7 @@ var QuestionView = function QuestionView(_ref) {
|
|
3161
3481
|
}, React__default.createElement("div", {
|
3162
3482
|
className: "d-flex flex-grow-1"
|
3163
3483
|
}, React__default.createElement("div", {
|
3164
|
-
className: styles$
|
3484
|
+
className: styles$1["question-title"] + " me-2"
|
3165
3485
|
}, "\uBB38\uC81C ", question.questionOrder + 1, "\uBC88"), React__default.createElement("div", {
|
3166
3486
|
className: "d-flex flex-grow-1"
|
3167
3487
|
}, Array.from({
|
@@ -3170,15 +3490,16 @@ var QuestionView = function QuestionView(_ref) {
|
|
3170
3490
|
return i + 1;
|
3171
3491
|
}).map(function (i) {
|
3172
3492
|
return React__default.createElement(reactstrap.FormGroup, {
|
3173
|
-
className: "d-flex flex-column px-4"
|
3493
|
+
className: "d-flex flex-column px-4",
|
3494
|
+
key: i
|
3174
3495
|
}, React__default.createElement(reactstrap.Label, {
|
3175
3496
|
htmlFor: "answer-" + i,
|
3176
|
-
className: "" + styles$
|
3497
|
+
className: "" + styles$1["question-label"]
|
3177
3498
|
}, i, "\uBC88"), React__default.createElement(reactstrap.Input, {
|
3178
3499
|
id: "answer-" + i,
|
3179
3500
|
type: "radio",
|
3180
3501
|
checked: question.correctAnswers.includes(i),
|
3181
|
-
|
3502
|
+
onChange: function onChange() {
|
3182
3503
|
return onChangeCorrectAnswers(i, index);
|
3183
3504
|
},
|
3184
3505
|
disabled: isDisabled
|
@@ -3244,7 +3565,7 @@ var ArticleGroupView = function ArticleGroupView(_ref) {
|
|
3244
3565
|
};
|
3245
3566
|
});
|
3246
3567
|
return React__default.createElement("div", {
|
3247
|
-
className: "d-flex " + styles$
|
3568
|
+
className: "d-flex " + styles$1["question"] + " " + (isActive ? styles$1["question--active"] : "")
|
3248
3569
|
}, React__default.createElement("div", {
|
3249
3570
|
className: "py-1"
|
3250
3571
|
}, React__default.createElement(pi.PiDotsNineLight, {
|
@@ -3254,16 +3575,16 @@ var ArticleGroupView = function ArticleGroupView(_ref) {
|
|
3254
3575
|
}, React__default.createElement(reactstrap.Row, null, React__default.createElement(reactstrap.Col, {
|
3255
3576
|
xs: 12
|
3256
3577
|
}, React__default.createElement("p", {
|
3257
|
-
className: "mb-0 " + styles$
|
3578
|
+
className: "mb-0 " + styles$1["question-article"]
|
3258
3579
|
}, "\uBB38\uD56D"), React__default.createElement("p", {
|
3259
|
-
className: "text-center " + styles$
|
3580
|
+
className: "text-center " + styles$1["question-article"]
|
3260
3581
|
}, article)))), React__default.createElement("div", {
|
3261
3582
|
className: "flex-grow-1"
|
3262
3583
|
}, React__default.createElement(reactstrap.Row, null, React__default.createElement(reactstrap.Col, {
|
3263
3584
|
xs: 3
|
3264
3585
|
}, React__default.createElement(reactstrap.FormGroup, null, React__default.createElement(reactstrap.Label, {
|
3265
3586
|
htmlFor: "question_count",
|
3266
|
-
className: "" + styles$
|
3587
|
+
className: "" + styles$1["question-label"]
|
3267
3588
|
}, t("question_count")), React__default.createElement(CustomSelect, {
|
3268
3589
|
inputId: "question_count",
|
3269
3590
|
value: questionCount,
|
@@ -3274,7 +3595,7 @@ var ArticleGroupView = function ArticleGroupView(_ref) {
|
|
3274
3595
|
xs: 3
|
3275
3596
|
}, React__default.createElement(reactstrap.FormGroup, null, React__default.createElement(reactstrap.Label, {
|
3276
3597
|
htmlFor: "category",
|
3277
|
-
className: "" + styles$
|
3598
|
+
className: "" + styles$1["question-label"]
|
3278
3599
|
}, t("category")), React__default.createElement(CustomSelect, {
|
3279
3600
|
inputId: "category",
|
3280
3601
|
value: categoryId,
|
@@ -3285,7 +3606,7 @@ var ArticleGroupView = function ArticleGroupView(_ref) {
|
|
3285
3606
|
xs: 3
|
3286
3607
|
}, React__default.createElement(reactstrap.FormGroup, null, React__default.createElement(reactstrap.Label, {
|
3287
3608
|
htmlFor: "answer_count",
|
3288
|
-
className: "" + styles$
|
3609
|
+
className: "" + styles$1["question-label"]
|
3289
3610
|
}, t("answer_count")), React__default.createElement(CustomSelect, {
|
3290
3611
|
inputId: "answer_count",
|
3291
3612
|
value: answerCount,
|
@@ -3398,9 +3719,10 @@ var useExamDetailView = function useExamDetailView(props) {
|
|
3398
3719
|
} else {
|
3399
3720
|
onChangeExam(_extends({}, exam, {
|
3400
3721
|
questions: [].concat(otherQuestions, questions.map(function (q) {
|
3722
|
+
var _q$correctAnswers;
|
3401
3723
|
return _extends({}, q, {
|
3402
3724
|
numberOfAnswers: newAnswerCount,
|
3403
|
-
correctAnswers: q.correctAnswers.filter(function (i) {
|
3725
|
+
correctAnswers: (_q$correctAnswers = q.correctAnswers) === null || _q$correctAnswers === void 0 ? void 0 : _q$correctAnswers.filter(function (i) {
|
3404
3726
|
return i <= newAnswerCount;
|
3405
3727
|
})
|
3406
3728
|
});
|
@@ -3541,24 +3863,28 @@ var ExamDetailView = function ExamDetailView(_ref) {
|
|
3541
3863
|
handleChangeAnswerCount = _useExamDetailView.handleChangeAnswerCount,
|
3542
3864
|
handleChangeQuestionCount = _useExamDetailView.handleChangeQuestionCount,
|
3543
3865
|
handleChangeCategory = _useExamDetailView.handleChangeCategory;
|
3544
|
-
return React__default.createElement(
|
3545
|
-
className: "" +
|
3546
|
-
}, React__default.createElement(
|
3547
|
-
|
3548
|
-
}, React__default.createElement(
|
3549
|
-
className:
|
3866
|
+
return React__default.createElement("div", {
|
3867
|
+
className: className + " " + stylesGlobal["custom-row"]
|
3868
|
+
}, React__default.createElement("div", {
|
3869
|
+
className: stylesGlobal["custom-col-5"]
|
3870
|
+
}, React__default.createElement("div", {
|
3871
|
+
className: 'mb-3'
|
3872
|
+
}, React__default.createElement("label", {
|
3873
|
+
className: stylesGlobal["form-label"] + " " + styles$1["question-label"],
|
3550
3874
|
htmlFor: "title"
|
3551
|
-
}, t("title")), React__default.createElement(
|
3875
|
+
}, t("title")), React__default.createElement("input", {
|
3552
3876
|
disabled: isDisabled,
|
3553
|
-
className: "
|
3877
|
+
className: "" + stylesGlobal["form-control"],
|
3554
3878
|
value: exam.title,
|
3555
3879
|
id: "title",
|
3556
3880
|
placeholder: t("enter_title"),
|
3557
3881
|
onChange: handleChangeTitle
|
3558
|
-
}))), React__default.createElement(
|
3559
|
-
|
3560
|
-
}, React__default.createElement(
|
3561
|
-
className:
|
3882
|
+
}))), React__default.createElement("div", {
|
3883
|
+
className: stylesGlobal["custom-col-3"]
|
3884
|
+
}, React__default.createElement("div", {
|
3885
|
+
className: 'mb-3'
|
3886
|
+
}, React__default.createElement("label", {
|
3887
|
+
className: stylesGlobal["form-label"] + " " + styles$1["question-label"],
|
3562
3888
|
htmlFor: "duration"
|
3563
3889
|
}, t("duration")), React__default.createElement(CustomSelect, {
|
3564
3890
|
inputId: "duration",
|
@@ -3566,13 +3892,10 @@ var ExamDetailView = function ExamDetailView(_ref) {
|
|
3566
3892
|
options: durationOptions,
|
3567
3893
|
onChange: handleChangeDuration,
|
3568
3894
|
isDisabled: isDisabled
|
3569
|
-
}))),
|
3570
|
-
|
3571
|
-
}), examGroupByArticle.map(function (i, index) {
|
3572
|
-
return React__default.createElement(reactstrap.Col, {
|
3573
|
-
xs: 12,
|
3895
|
+
}))), examGroupByArticle.map(function (i, index) {
|
3896
|
+
return React__default.createElement("div", {
|
3574
3897
|
key: i.article,
|
3575
|
-
className: (index === 0 && !isUsingMui ? "mt-3" : "") + " " + (!isUsingMui ? "mb-4" : "")
|
3898
|
+
className: stylesGlobal["custom-col-12"] + " " + (index === 0 && !isUsingMui ? "mt-3" : "") + " " + (!isUsingMui ? "mb-4" : "")
|
3576
3899
|
}, React__default.createElement(ArticleGroupView, Object.assign({}, i, {
|
3577
3900
|
categoryOptions: categoryOptions,
|
3578
3901
|
isActive: index === examGroupByArticle.length - 1,
|
@@ -3583,49 +3906,106 @@ var ExamDetailView = function ExamDetailView(_ref) {
|
|
3583
3906
|
onChangeScoreAnswer: handleChangeScoreAnswer,
|
3584
3907
|
isDisabled: isDisabled
|
3585
3908
|
})));
|
3586
|
-
}), React__default.createElement(
|
3587
|
-
|
3588
|
-
}, React__default.createElement(
|
3909
|
+
}), React__default.createElement("div", {
|
3910
|
+
className: stylesGlobal["custom-col-12"]
|
3911
|
+
}, React__default.createElement("button", {
|
3589
3912
|
disabled: isDisabled,
|
3590
|
-
className: "w-100 d-flex justify-content-center align-items-center " + styles$
|
3591
|
-
color: "primary",
|
3592
|
-
outline: true,
|
3913
|
+
className: stylesGlobal["btn-outline-primary"] + " w-100 d-flex justify-content-center align-items-center " + styles$1["question-btn"] + " mt-3",
|
3593
3914
|
onClick: handleAddArticle
|
3594
3915
|
}, React__default.createElement(fa.FaPlusCircle, {
|
3595
3916
|
className: "me-2"
|
3596
3917
|
}), "\uBB38\uD56D \uCD94\uAC00\uD558\uAE30")));
|
3597
3918
|
};
|
3598
3919
|
|
3920
|
+
var useAutoAcademyDomain = function useAutoAcademyDomain(logout, history, superUrls, homeUrl, homeAcademyUrl) {
|
3921
|
+
var searchParams = new URLSearchParams(window.location.search);
|
3922
|
+
var user = reactRedux.useSelector(function (state) {
|
3923
|
+
var _state$common;
|
3924
|
+
return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
|
3925
|
+
});
|
3926
|
+
var initialAcademySearchParam = function initialAcademySearchParam() {
|
3927
|
+
var paramAcademyDomain = searchParams.get("domain");
|
3928
|
+
var domain = getAcademyDomain();
|
3929
|
+
var pathname = window.location.pathname.toLowerCase();
|
3930
|
+
if (!user) return;
|
3931
|
+
var academyDomain = user.academyDomain;
|
3932
|
+
if (!academyDomain) {
|
3933
|
+
if (!superUrls.some(function (i) {
|
3934
|
+
return pathname.startsWith(i);
|
3935
|
+
})) {
|
3936
|
+
pushTo({
|
3937
|
+
pathname: homeUrl,
|
3938
|
+
search: ""
|
3939
|
+
});
|
3940
|
+
}
|
3941
|
+
if (domain) {
|
3942
|
+
searchParams.append("domain", domain);
|
3943
|
+
pushTo({
|
3944
|
+
pathname: homeUrl,
|
3945
|
+
search: ""
|
3946
|
+
});
|
3947
|
+
}
|
3948
|
+
} else {
|
3949
|
+
if (superUrls.some(function (i) {
|
3950
|
+
return pathname.startsWith(i);
|
3951
|
+
})) {
|
3952
|
+
pushTo({
|
3953
|
+
pathname: homeAcademyUrl,
|
3954
|
+
search: ""
|
3955
|
+
});
|
3956
|
+
}
|
3957
|
+
if (paramAcademyDomain && academyDomain.trim().toLocaleLowerCase() != (paramAcademyDomain === null || paramAcademyDomain === void 0 ? void 0 : paramAcademyDomain.trim().toLocaleLowerCase())) {
|
3958
|
+
logout();
|
3959
|
+
}
|
3960
|
+
if (!paramAcademyDomain && academyDomain) {
|
3961
|
+
searchParams.append("domain", academyDomain);
|
3962
|
+
pushTo(_extends({}, window.location, {
|
3963
|
+
search: searchParams.toString()
|
3964
|
+
}));
|
3965
|
+
}
|
3966
|
+
}
|
3967
|
+
};
|
3968
|
+
var pushTo = function pushTo(data) {
|
3969
|
+
if (history.push) history.push(data);else history(data);
|
3970
|
+
};
|
3971
|
+
React.useEffect(function () {
|
3972
|
+
initialAcademySearchParam();
|
3973
|
+
}, [window.location.pathname, user === null || user === void 0 ? void 0 : user.academyDomain]);
|
3974
|
+
};
|
3975
|
+
|
3599
3976
|
var historyCore = history.createBrowserHistory();
|
3600
3977
|
|
3601
3978
|
exports.moment = moment;
|
3602
3979
|
Object.defineProperty(exports, 'I18nextProvider', {
|
3603
|
-
|
3604
|
-
|
3605
|
-
|
3606
|
-
|
3980
|
+
enumerable: true,
|
3981
|
+
get: function () {
|
3982
|
+
return reactI18next.I18nextProvider;
|
3983
|
+
}
|
3607
3984
|
});
|
3608
3985
|
Object.defineProperty(exports, 'useTranslation', {
|
3609
|
-
|
3610
|
-
|
3611
|
-
|
3612
|
-
|
3986
|
+
enumerable: true,
|
3987
|
+
get: function () {
|
3988
|
+
return reactI18next.useTranslation;
|
3989
|
+
}
|
3613
3990
|
});
|
3614
3991
|
Object.defineProperty(exports, 'ToastContainer', {
|
3615
|
-
|
3616
|
-
|
3617
|
-
|
3618
|
-
|
3992
|
+
enumerable: true,
|
3993
|
+
get: function () {
|
3994
|
+
return reactToastify.ToastContainer;
|
3995
|
+
}
|
3619
3996
|
});
|
3620
3997
|
Object.defineProperty(exports, 'toast', {
|
3621
|
-
|
3622
|
-
|
3623
|
-
|
3624
|
-
|
3998
|
+
enumerable: true,
|
3999
|
+
get: function () {
|
4000
|
+
return reactToastify.toast;
|
4001
|
+
}
|
3625
4002
|
});
|
4003
|
+
exports.ACADEMY_DOMAIN = ACADEMY_DOMAIN;
|
3626
4004
|
exports.ACCESS_TOKEN = ACCESS_TOKEN;
|
4005
|
+
exports.AcademyHeaders = AcademyHeaders;
|
3627
4006
|
exports.BASE_URL = BASE_URL;
|
3628
4007
|
exports.ChatContainer = ChatContainer;
|
4008
|
+
exports.ChatTypes = types;
|
3629
4009
|
exports.CommonAlert = CommonAlert;
|
3630
4010
|
exports.CommonDialog = CommonDialog;
|
3631
4011
|
exports.ConfirmDialog = ConfirmDialog;
|
@@ -3644,11 +4024,15 @@ exports.Loading = Loading;
|
|
3644
4024
|
exports.Login = Login;
|
3645
4025
|
exports.NotFound = NotFound;
|
3646
4026
|
exports.PUSHER_CONFIG = PUSHER_CONFIG;
|
4027
|
+
exports.SUPER_ADMIN_BASE_URL = SUPER_ADMIN_BASE_URL;
|
4028
|
+
exports.TheAcademyDropdown = TheAcademyDropdown;
|
3647
4029
|
exports.TheLanguageDropdown = TheLanguageDropdown;
|
3648
4030
|
exports.api = api;
|
4031
|
+
exports.apiUpload = apiUpload;
|
3649
4032
|
exports.canAccessRoute = canAccess;
|
3650
4033
|
exports.diffFromNow = diffFromNow;
|
3651
4034
|
exports.formatTime = formatTime;
|
4035
|
+
exports.getAcademyDomain = getAcademyDomain;
|
3652
4036
|
exports.getAccessToken = getAccessToken$1;
|
3653
4037
|
exports.historyCore = historyCore;
|
3654
4038
|
exports.i18n = i18n;
|
@@ -3656,13 +4040,16 @@ exports.minutesToTimeSpan = minutesToTimeSpan;
|
|
3656
4040
|
exports.setAlert = setAlert;
|
3657
4041
|
exports.setLanguage = setLanguage;
|
3658
4042
|
exports.setLoading = setLoading;
|
4043
|
+
exports.setReFetchUserAcademies = setReFetchUserAcademies;
|
3659
4044
|
exports.setUser = setUser;
|
3660
4045
|
exports.store = store;
|
3661
4046
|
exports.toISOString = toISOString;
|
4047
|
+
exports.useAutoAcademyDomain = useAutoAcademyDomain;
|
3662
4048
|
exports.useChatContainer = useChatContainer;
|
3663
|
-
exports.useConversationList = useConversationList;
|
3664
4049
|
exports.useGoogleSignOut = useGoogleSignOut;
|
3665
4050
|
exports.useLanguage = useLanguage;
|
4051
|
+
exports.useLogin = useLogin;
|
3666
4052
|
exports.usePusherConversation = usePusherConversation;
|
4053
|
+
exports.useSwitchAcademy = useSwitchAcademy;
|
3667
4054
|
exports.utcToLocalTime = utcToLocalTime;
|
3668
4055
|
//# sourceMappingURL=index.js.map
|