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.
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ declare const CustomSelect: ({ defaultValue, options, isDisabled, scrollBottom, value, isMulti, ...rest }: any) => React.JSX.Element;
3
+ export default CustomSelect;
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
- 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, setLanguage, i18n, TheLanguageDropdown, useTranslation, I18nextProvider, DATE_MIN_VALUE, minutesToTimeSpan, toISOString, canAccessRoute };
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 = "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 _useGoogleReCaptcha = reactGoogleRecaptchaV3.useGoogleReCaptcha(),
198
- executeRecaptcha = _useGoogleReCaptcha.executeRecaptcha;
199
- var _useGoogleSignOut = useGoogleSignOut({}),
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
- return Promise.resolve(function () {
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
- return Promise.resolve(clickHandler()).then(function (clickHandlerRes) {
233
- function _temp2() {
234
- dispatch(setLoading(false));
235
- }
236
- if (!clickHandlerRes) return;
237
- var infoLogin = {
238
- imageUrl: imageUrl,
239
- fullName: name,
240
- email: email,
241
- token: accessToken,
242
- googleId: googleId,
243
- captcha: clickHandlerRes
244
- };
245
- var role = isTeacher ? "Teacher" : "Student";
246
- dispatch(setLoading(true));
247
- var _temp = _catch(function () {
248
- return Promise.resolve(apiLoginGoogle(infoLogin, role)).then(function (res1) {
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
- var _error$response3;
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
- return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
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 (values) {
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.FormGroup, null, React__default.createElement(reactGoogleRecaptchaV3.GoogleReCaptcha, {
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
- var _useGoogleSignOut = useGoogleSignOut({}),
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["TeacherDisconnectChannel"] = "teacher-disconnect-channel";
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;