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