touchstudy-core 0.1.5 → 0.1.7
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/components/Selects/CustomSelect.d.ts +3 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +102 -101
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +102 -104
- package/dist/index.modern.js.map +1 -1
- package/dist/utils/constants.d.ts +2 -1
- package/dist/utils/types.d.ts +1 -3
- package/dist/utils/useGoogleSignOut.d.ts +1 -0
- package/package.json +2 -1
package/dist/index.d.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
declare const historyCore: import("history").History<unknown>;
|
2
2
|
import { setLoading, setAlert, setUser, setLanguage } from "./redux/commons/action";
|
3
|
-
import { BASE_URL, ACCESS_TOKEN, PUSHER_CONFIG, EXAM_CHANNEL, DATE_MIN_VALUE } from "./utils/constants";
|
3
|
+
import { BASE_URL, ACCESS_TOKEN, PUSHER_CONFIG, EXAM_CHANNEL, EXAM_STUDENT_CHANNEL, DATE_MIN_VALUE } from "./utils/constants";
|
4
4
|
import utcToLocalTime from "./utils/utcToLocalTime";
|
5
5
|
import Login from "./containers/Login/views/Login";
|
6
6
|
import store from "./store";
|
@@ -22,4 +22,6 @@ import { useTranslation, I18nextProvider } from "react-i18next";
|
|
22
22
|
import minutesToTimeSpan from "./utils/minutesToTimeSpan";
|
23
23
|
import toISOString from "./utils/toISOString";
|
24
24
|
import canAccessRoute from "./utils/canAccessRoute";
|
25
|
-
|
25
|
+
import CustomSelect from "./components/Selects/CustomSelect";
|
26
|
+
import getAccessToken from "./utils/getAccessToken";
|
27
|
+
export { diffFromNow, formatTime, utcToLocalTime, setLoading, BASE_URL, ACCESS_TOKEN, Login, store, historyCore, setAlert, setUser, Loading, NotFound, LayoutContext, api, ConfirmDialog, CommonDialog, CommonAlert, CustomPagination, useGoogleSignOut, PUSHER_CONFIG, ExamEvent, EXAM_CHANNEL, EXAM_STUDENT_CHANNEL, setLanguage, i18n, TheLanguageDropdown, useTranslation, I18nextProvider, DATE_MIN_VALUE, minutesToTimeSpan, toISOString, canAccessRoute, CustomSelect, getAccessToken };
|
package/dist/index.js
CHANGED
@@ -5,7 +5,6 @@ var toolkit = require('@reduxjs/toolkit');
|
|
5
5
|
var moment = _interopDefault(require('moment'));
|
6
6
|
var React = require('react');
|
7
7
|
var React__default = _interopDefault(React);
|
8
|
-
var reactGoogleRecaptchaV3 = require('react-google-recaptcha-v3');
|
9
8
|
var reactstrap = require('reactstrap');
|
10
9
|
var formik = require('formik');
|
11
10
|
var yup = require('yup');
|
@@ -17,6 +16,7 @@ var gapiScript = require('gapi-script');
|
|
17
16
|
var i18n = _interopDefault(require('i18next'));
|
18
17
|
var reactI18next = require('react-i18next');
|
19
18
|
var io5 = require('react-icons/io5');
|
19
|
+
var Select = _interopDefault(require('react-select'));
|
20
20
|
|
21
21
|
var setLoading = toolkit.createAction("common/setLoading");
|
22
22
|
var setAlert = toolkit.createAction("common/setAlert");
|
@@ -27,17 +27,17 @@ var reset = toolkit.createAction("common/reset");
|
|
27
27
|
var isLocalHost = Boolean(window.location.hostname === "localhost" || window.location.hostname === "[::1]" || window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));
|
28
28
|
|
29
29
|
var GOOGLE_CLIENT_ID = "64118819726-0qlur4qjrs9jbuu6rnoa0u91g680lmpg.apps.googleusercontent.com";
|
30
|
-
var GOOGLE_RECAPTCHA_ID = "6LfNtLUaAAAAAL24lbBV11jS-gBtt1mhtxb4NXs0";
|
31
30
|
var ACCESS_TOKEN = "ACCESS_TOKEN";
|
32
31
|
var DATE_MIN_VALUE = "0001-01-01T00:00:00+00:00";
|
33
32
|
var BASE_URL = function () {
|
34
|
-
return isLocalHost ? "https://localhost:7045" : "api.studypeak.io";
|
33
|
+
return isLocalHost ? "https://localhost:7045" : "https://api.studypeak.io";
|
35
34
|
}();
|
36
35
|
var PUSHER_CONFIG = {
|
37
36
|
cluster: "ap1",
|
38
37
|
key: "9018c77328885a14150b"
|
39
38
|
};
|
40
|
-
var EXAM_CHANNEL = "
|
39
|
+
var EXAM_CHANNEL = "presence-exam-channel";
|
40
|
+
var EXAM_STUDENT_CHANNEL = "EXAM-CHANNEL-{examCode}-STUDENT-{studentId}";
|
41
41
|
var getAccessToken = function getAccessToken() {
|
42
42
|
try {
|
43
43
|
return localStorage.getItem(ACCESS_TOKEN);
|
@@ -194,88 +194,64 @@ var BlockLogin = function BlockLogin(_ref) {
|
|
194
194
|
onNavigate = _ref.onNavigate,
|
195
195
|
isTeacher = _ref.isTeacher;
|
196
196
|
var dispatch = reactRedux.useDispatch();
|
197
|
-
var
|
198
|
-
|
199
|
-
|
197
|
+
var _useGoogleSignOut = useGoogleSignOut({
|
198
|
+
onNavigate: onNavigate
|
199
|
+
}),
|
200
200
|
handleSignOut = _useGoogleSignOut.handleSignOut;
|
201
|
-
var clickHandler = React.useCallback(function () {
|
202
|
-
try {
|
203
|
-
var _exit = false;
|
204
|
-
if (!executeRecaptcha) {
|
205
|
-
return Promise.resolve();
|
206
|
-
}
|
207
|
-
return Promise.resolve(_catch(function () {
|
208
|
-
return Promise.resolve(executeRecaptcha("login")).then(function (result) {
|
209
|
-
_exit = true;
|
210
|
-
return result;
|
211
|
-
});
|
212
|
-
}, function (error) {
|
213
|
-
console.log({
|
214
|
-
error: error
|
215
|
-
});
|
216
|
-
}));
|
217
|
-
} catch (e) {
|
218
|
-
return Promise.reject(e);
|
219
|
-
}
|
220
|
-
}, [executeRecaptcha]);
|
221
|
-
var handleVerify = React.useCallback(function () {}, []);
|
222
201
|
var onSuccessGoogle = function onSuccessGoogle(res) {
|
223
202
|
try {
|
224
|
-
|
203
|
+
var _temp3 = function () {
|
225
204
|
if (!!(res !== null && res !== void 0 && res.accessToken)) {
|
205
|
+
var _temp2 = function _temp2() {
|
206
|
+
dispatch(setLoading(false));
|
207
|
+
};
|
226
208
|
var _res$profileObj = res.profileObj,
|
227
209
|
email = _res$profileObj.email,
|
228
210
|
imageUrl = _res$profileObj.imageUrl,
|
229
211
|
name = _res$profileObj.name;
|
230
212
|
var accessToken = res.tokenObj.id_token;
|
231
213
|
var googleId = res.googleId;
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
var isFirstLogin = res1.data.isFirstLogin;
|
250
|
-
var tokenJWT = res1.data.token;
|
251
|
-
localStorage.setItem("USER_INFORMATION", JSON.stringify(infoLogin));
|
252
|
-
localStorage.setItem(ACCESS_TOKEN, tokenJWT);
|
253
|
-
if (!isTeacher && isFirstLogin) {
|
254
|
-
onNavigate("/register/info");
|
255
|
-
} else {
|
256
|
-
onNavigate("/");
|
257
|
-
}
|
258
|
-
});
|
259
|
-
}, function (error) {
|
260
|
-
var _error$response, _error$response$data;
|
261
|
-
var message = undefined;
|
262
|
-
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;
|
263
|
-
if (type === AuthenticationMessage.NotAllowedToRegister) {
|
264
|
-
alert("가입 권한이 없는 계정입니다. 관리자에게 문의하세요.");
|
265
|
-
} else if (type) {
|
266
|
-
var _error$response2, _error$response2$data;
|
267
|
-
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;
|
214
|
+
var infoLogin = {
|
215
|
+
imageUrl: imageUrl,
|
216
|
+
fullName: name,
|
217
|
+
email: email,
|
218
|
+
token: accessToken,
|
219
|
+
googleId: googleId
|
220
|
+
};
|
221
|
+
var role = isTeacher ? "Teacher" : "Student";
|
222
|
+
dispatch(setLoading(true));
|
223
|
+
var _temp = _catch(function () {
|
224
|
+
return Promise.resolve(apiLoginGoogle(infoLogin, role)).then(function (res1) {
|
225
|
+
var isFirstLogin = res1.data.isFirstLogin;
|
226
|
+
var tokenJWT = res1.data.token;
|
227
|
+
localStorage.setItem("USER_INFORMATION", JSON.stringify(infoLogin));
|
228
|
+
localStorage.setItem(ACCESS_TOKEN, tokenJWT);
|
229
|
+
if (!isTeacher && isFirstLogin) {
|
230
|
+
onNavigate("/register/info");
|
268
231
|
} else {
|
269
|
-
|
270
|
-
message = (error === null || error === void 0 ? void 0 : (_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data) || ERROR_MESSAGE;
|
232
|
+
onNavigate("/");
|
271
233
|
}
|
272
|
-
message && alert(message);
|
273
|
-
handleSignOut();
|
274
234
|
});
|
275
|
-
|
235
|
+
}, function (error) {
|
236
|
+
var _error$response, _error$response$data;
|
237
|
+
var message = undefined;
|
238
|
+
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;
|
239
|
+
if (type === AuthenticationMessage.NotAllowedToRegister) {
|
240
|
+
alert("가입 권한이 없는 계정입니다. 관리자에게 문의하세요.");
|
241
|
+
} else if (type) {
|
242
|
+
var _error$response2, _error$response2$data;
|
243
|
+
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;
|
244
|
+
} else {
|
245
|
+
var _error$response3;
|
246
|
+
message = (error === null || error === void 0 ? void 0 : (_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data) || ERROR_MESSAGE;
|
247
|
+
}
|
248
|
+
message && alert(message);
|
249
|
+
handleSignOut();
|
276
250
|
});
|
251
|
+
return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
|
277
252
|
}
|
278
|
-
}()
|
253
|
+
}();
|
254
|
+
return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(function () {}) : void 0);
|
279
255
|
} catch (e) {
|
280
256
|
return Promise.reject(e);
|
281
257
|
}
|
@@ -287,16 +263,7 @@ var BlockLogin = function BlockLogin(_ref) {
|
|
287
263
|
return React__default.createElement(formik.Formik, {
|
288
264
|
initialValues: defaultInfo,
|
289
265
|
validationSchema: schema,
|
290
|
-
onSubmit: function (
|
291
|
-
try {
|
292
|
-
return Promise.resolve(clickHandler()).then(function (clickHandlerRes) {
|
293
|
-
if (!clickHandlerRes) return;
|
294
|
-
values.captcha = clickHandlerRes;
|
295
|
-
});
|
296
|
-
} catch (e) {
|
297
|
-
return Promise.reject(e);
|
298
|
-
}
|
299
|
-
}
|
266
|
+
onSubmit: function onSubmit() {}
|
300
267
|
}, function (formikProps) {
|
301
268
|
var handleSubmit = formikProps.handleSubmit;
|
302
269
|
return React__default.createElement(reactstrap.Row, {
|
@@ -311,10 +278,7 @@ var BlockLogin = function BlockLogin(_ref) {
|
|
311
278
|
}, React__default.createElement("img", {
|
312
279
|
src: "/images/logo.jpeg",
|
313
280
|
className: "" + styles["img-login-rectangle"]
|
314
|
-
}), React__default.createElement(reactstrap.
|
315
|
-
action: "login",
|
316
|
-
onVerify: handleVerify
|
317
|
-
})), React__default.createElement(reactstrap.Col, {
|
281
|
+
}), React__default.createElement(reactstrap.Col, {
|
318
282
|
className: "p-0 mt-1 mb-4"
|
319
283
|
}, React__default.createElement(GoogleLogin__default, {
|
320
284
|
clientId: GOOGLE_CLIENT_ID,
|
@@ -393,19 +357,11 @@ var Login = function Login(_ref) {
|
|
393
357
|
md: 12,
|
394
358
|
xs: 12,
|
395
359
|
className: "d-flex justify-content-center h-100 align-items-center"
|
396
|
-
}, React__default.createElement(reactGoogleRecaptchaV3.GoogleReCaptchaProvider, {
|
397
|
-
useRecaptchaNet: true,
|
398
|
-
reCaptchaKey: GOOGLE_RECAPTCHA_ID,
|
399
|
-
scriptProps: {
|
400
|
-
async: true,
|
401
|
-
defer: true,
|
402
|
-
appendTo: "body"
|
403
|
-
}
|
404
360
|
}, React__default.createElement(BlockLogin, {
|
405
361
|
defaultInfo: defaultInfo,
|
406
362
|
onNavigate: onNavigate,
|
407
363
|
isTeacher: isTeacher
|
408
|
-
}))))
|
364
|
+
}))));
|
409
365
|
};
|
410
366
|
|
411
367
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
@@ -749,8 +705,11 @@ var getInfo = function getInfo() {
|
|
749
705
|
|
750
706
|
var LayoutContext = function LayoutContext(_ref) {
|
751
707
|
var children = _ref.children,
|
752
|
-
role = _ref.role
|
753
|
-
|
708
|
+
role = _ref.role,
|
709
|
+
onNavigate = _ref.onNavigate;
|
710
|
+
var _useGoogleSignOut = useGoogleSignOut({
|
711
|
+
onNavigate: onNavigate
|
712
|
+
}),
|
754
713
|
handleSignOut = _useGoogleSignOut.handleSignOut;
|
755
714
|
var dispatch = reactRedux.useDispatch();
|
756
715
|
var user = reactRedux.useSelector(function (state) {
|
@@ -1004,10 +963,8 @@ var CustomPagination = function CustomPagination(_ref) {
|
|
1004
963
|
(function (ExamEvent) {
|
1005
964
|
ExamEvent["StartExam"] = "start-exam";
|
1006
965
|
ExamEvent["TerminateExam"] = "terminate-exam";
|
1007
|
-
ExamEvent["JoinExam"] = "join-exam";
|
1008
966
|
ExamEvent["AddExtraDuration"] = "add-extra-duration-exam";
|
1009
|
-
ExamEvent["
|
1010
|
-
ExamEvent["StudentDisconnectChannel"] = "student-disconnect-channel";
|
967
|
+
ExamEvent["TeacherKickOutStudent"] = "teacher-kick-out-student";
|
1011
968
|
})(exports.ExamEvent || (exports.ExamEvent = {}));
|
1012
969
|
|
1013
970
|
var problem_solving = "문제풀기";
|
@@ -1066,6 +1023,7 @@ var internet_connection_was_lost = "인터넷 연결이 끊어졌습니다";
|
|
1066
1023
|
var problem = "문제";
|
1067
1024
|
var problem_solving_time = "문제풀이 시간";
|
1068
1025
|
var minutes = "분";
|
1026
|
+
var correct_rate = "정확한 비율";
|
1069
1027
|
var lang_ko = {
|
1070
1028
|
problem_solving: problem_solving,
|
1071
1029
|
my_story: my_story,
|
@@ -1122,7 +1080,8 @@ var lang_ko = {
|
|
1122
1080
|
internet_connection_was_lost: internet_connection_was_lost,
|
1123
1081
|
problem: problem,
|
1124
1082
|
problem_solving_time: problem_solving_time,
|
1125
|
-
minutes: minutes
|
1083
|
+
minutes: minutes,
|
1084
|
+
correct_rate: correct_rate
|
1126
1085
|
};
|
1127
1086
|
|
1128
1087
|
var problem_solving$1 = "Problem Solving";
|
@@ -1181,6 +1140,7 @@ var internet_connection_was_lost$1 = "Internet connection was lost";
|
|
1181
1140
|
var problem$1 = "Problem ";
|
1182
1141
|
var problem_solving_time$1 = "Problem solving time";
|
1183
1142
|
var minutes$1 = "m";
|
1143
|
+
var correct_rate$1 = "Correct rate";
|
1184
1144
|
var lang_en = {
|
1185
1145
|
problem_solving: problem_solving$1,
|
1186
1146
|
my_story: my_story$1,
|
@@ -1237,7 +1197,8 @@ var lang_en = {
|
|
1237
1197
|
internet_connection_was_lost: internet_connection_was_lost$1,
|
1238
1198
|
problem: problem$1,
|
1239
1199
|
problem_solving_time: problem_solving_time$1,
|
1240
|
-
minutes: minutes$1
|
1200
|
+
minutes: minutes$1,
|
1201
|
+
correct_rate: correct_rate$1
|
1241
1202
|
};
|
1242
1203
|
|
1243
1204
|
i18n.use(reactI18next.initReactI18next).init({
|
@@ -1382,6 +1343,43 @@ var canAccess = function canAccess(userRoles, componentRoles) {
|
|
1382
1343
|
return true;
|
1383
1344
|
};
|
1384
1345
|
|
1346
|
+
function _objectWithoutPropertiesLoose(source, excluded) {
|
1347
|
+
if (source == null) return {};
|
1348
|
+
var target = {};
|
1349
|
+
var sourceKeys = Object.keys(source);
|
1350
|
+
var key, i;
|
1351
|
+
for (i = 0; i < sourceKeys.length; i++) {
|
1352
|
+
key = sourceKeys[i];
|
1353
|
+
if (excluded.indexOf(key) >= 0) continue;
|
1354
|
+
target[key] = source[key];
|
1355
|
+
}
|
1356
|
+
return target;
|
1357
|
+
}
|
1358
|
+
|
1359
|
+
var _excluded = ["defaultValue", "options", "isDisabled", "scrollBottom", "value", "isMulti"];
|
1360
|
+
var CustomSelect = function CustomSelect(_ref) {
|
1361
|
+
var options = _ref.options,
|
1362
|
+
isDisabled = _ref.isDisabled,
|
1363
|
+
scrollBottom = _ref.scrollBottom,
|
1364
|
+
value = _ref.value,
|
1365
|
+
isMulti = _ref.isMulti,
|
1366
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
|
1367
|
+
var initialValues = Array.isArray(value) ? options.filter(function (i) {
|
1368
|
+
return value.includes(i.value);
|
1369
|
+
}) : isMulti ? options.filter(function (i) {
|
1370
|
+
return i.value == value;
|
1371
|
+
}) : options.find(function (i) {
|
1372
|
+
return i.value == value;
|
1373
|
+
});
|
1374
|
+
return React__default.createElement(Select, Object.assign({
|
1375
|
+
isDisabled: isDisabled,
|
1376
|
+
options: options,
|
1377
|
+
value: initialValues,
|
1378
|
+
menuPlacement: scrollBottom ? "top" : "auto",
|
1379
|
+
isMulti: isMulti
|
1380
|
+
}, rest));
|
1381
|
+
};
|
1382
|
+
|
1385
1383
|
var historyCore = history.createBrowserHistory();
|
1386
1384
|
|
1387
1385
|
Object.defineProperty(exports, 'I18nextProvider', {
|
@@ -1402,8 +1400,10 @@ exports.CommonAlert = CommonAlert;
|
|
1402
1400
|
exports.CommonDialog = CommonDialog;
|
1403
1401
|
exports.ConfirmDialog = ConfirmDialog;
|
1404
1402
|
exports.CustomPagination = CustomPagination;
|
1403
|
+
exports.CustomSelect = CustomSelect;
|
1405
1404
|
exports.DATE_MIN_VALUE = DATE_MIN_VALUE;
|
1406
1405
|
exports.EXAM_CHANNEL = EXAM_CHANNEL;
|
1406
|
+
exports.EXAM_STUDENT_CHANNEL = EXAM_STUDENT_CHANNEL;
|
1407
1407
|
exports.LayoutContext = LayoutContext;
|
1408
1408
|
exports.Loading = Loading;
|
1409
1409
|
exports.Login = Login;
|
@@ -1414,6 +1414,7 @@ exports.api = api$1;
|
|
1414
1414
|
exports.canAccessRoute = canAccess;
|
1415
1415
|
exports.diffFromNow = diffFromNow;
|
1416
1416
|
exports.formatTime = formatTime;
|
1417
|
+
exports.getAccessToken = getAccessToken$1;
|
1417
1418
|
exports.historyCore = historyCore;
|
1418
1419
|
exports.i18n = i18n;
|
1419
1420
|
exports.minutesToTimeSpan = minutesToTimeSpan;
|