touchstudy-core 0.1.2 → 0.1.4

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.
@@ -19,12 +19,13 @@ var setLoading = createAction("common/setLoading");
19
19
  var setAlert = createAction("common/setAlert");
20
20
  var setUser = createAction("common/setUser");
21
21
  var setLanguage = createAction("common/setLanguage");
22
+ var reset = createAction("common/reset");
22
23
 
23
24
  var GOOGLE_CLIENT_ID = "64118819726-0qlur4qjrs9jbuu6rnoa0u91g680lmpg.apps.googleusercontent.com";
24
25
  var GOOGLE_RECAPTCHA_ID = "6LfNtLUaAAAAAL24lbBV11jS-gBtt1mhtxb4NXs0";
25
26
  var ACCESS_TOKEN = "ACCESS_TOKEN";
26
27
  var DATE_MIN_VALUE = "0001-01-01T00:00:00+00:00";
27
- var BASE_URL = "https://localhost:7045";
28
+ var BASE_URL = "http://api.touchstudy.kr";
28
29
  var PUSHER_CONFIG = {
29
30
  cluster: "ap1",
30
31
  key: "9018c77328885a14150b"
@@ -140,17 +141,37 @@ var AuthenticationMessage;
140
141
  })(AuthenticationMessage || (AuthenticationMessage = {}));
141
142
 
142
143
  var useGoogleSignOut = function useGoogleSignOut(props) {
144
+ var dispatch = useDispatch();
143
145
  var onLogoutSuccess = props.onLogoutSuccess,
144
146
  onFailure = props.onFailure;
147
+ var handleLogoutSuccess = function handleLogoutSuccess() {
148
+ onLogoutSuccess === null || onLogoutSuccess === void 0 ? void 0 : onLogoutSuccess();
149
+ };
150
+ var handleLogoutFailure = function handleLogoutFailure() {
151
+ onFailure === null || onFailure === void 0 ? void 0 : onFailure();
152
+ };
145
153
  var _useGoogleLogout = useGoogleLogout({
146
154
  clientId: GOOGLE_CLIENT_ID,
147
- onLogoutSuccess: onLogoutSuccess,
148
- onFailure: onFailure
155
+ onLogoutSuccess: handleLogoutSuccess,
156
+ onFailure: handleLogoutFailure
149
157
  }),
150
158
  signOut = _useGoogleLogout.signOut,
151
159
  loaded = _useGoogleLogout.loaded;
160
+ var handleSignOut = function handleSignOut() {
161
+ localStorage.removeItem("USER_INFORMATION");
162
+ localStorage.removeItem(ACCESS_TOKEN);
163
+ try {
164
+ signOut();
165
+ } catch (error) {
166
+ console.log({
167
+ error: error
168
+ });
169
+ }
170
+ dispatch(reset());
171
+ window.location.href = "/login";
172
+ };
152
173
  return {
153
- signOut: signOut,
174
+ handleSignOut: handleSignOut,
154
175
  loaded: loaded
155
176
  };
156
177
  };
@@ -169,14 +190,23 @@ var BlockLogin = function BlockLogin(_ref) {
169
190
  var _useGoogleReCaptcha = useGoogleReCaptcha(),
170
191
  executeRecaptcha = _useGoogleReCaptcha.executeRecaptcha;
171
192
  var _useGoogleSignOut = useGoogleSignOut({}),
172
- signOut = _useGoogleSignOut.signOut;
193
+ handleSignOut = _useGoogleSignOut.handleSignOut;
173
194
  var clickHandler = useCallback(function () {
174
195
  try {
196
+ var _exit = false;
175
197
  if (!executeRecaptcha) {
176
- console.log("execute recaptcha undefined");
177
198
  return Promise.resolve();
178
199
  }
179
- return Promise.resolve(executeRecaptcha("login"));
200
+ return Promise.resolve(_catch(function () {
201
+ return Promise.resolve(executeRecaptcha("login")).then(function (result) {
202
+ _exit = true;
203
+ return result;
204
+ });
205
+ }, function (error) {
206
+ console.log({
207
+ error: error
208
+ });
209
+ }));
180
210
  } catch (e) {
181
211
  return Promise.reject(e);
182
212
  }
@@ -184,65 +214,59 @@ var BlockLogin = function BlockLogin(_ref) {
184
214
  var handleVerify = useCallback(function () {}, []);
185
215
  var onSuccessGoogle = function onSuccessGoogle(res) {
186
216
  try {
187
- var _exit = false;
188
217
  return Promise.resolve(function () {
189
218
  if (!!(res !== null && res !== void 0 && res.accessToken)) {
190
- var _temp2 = function _temp2(_result) {
191
- if (_exit) return _result;
192
- dispatch(setLoading(false));
193
- };
194
219
  var _res$profileObj = res.profileObj,
195
220
  email = _res$profileObj.email,
196
221
  imageUrl = _res$profileObj.imageUrl,
197
222
  name = _res$profileObj.name;
198
223
  var accessToken = res.tokenObj.id_token;
199
224
  var googleId = res.googleId;
200
- var infoLogin = {
201
- imageUrl: imageUrl,
202
- fullName: name,
203
- email: email,
204
- token: accessToken,
205
- googleId: googleId
206
- };
207
- var role = isTeacher ? "Teacher" : "Student";
208
- dispatch(setLoading(true));
209
- var _temp = _catch(function () {
210
- return Promise.resolve(apiLoginGoogle(infoLogin, role)).then(function (res1) {
211
- var isFirstLogin = res1.data.isFirstLogin;
212
- var tokenJWT = res1.data.token;
213
- localStorage.setItem("USER_INFORMATION", JSON.stringify(infoLogin));
214
- localStorage.setItem(ACCESS_TOKEN, tokenJWT);
215
- if (isTeacher) {
216
- onNavigate("/teacher/overall-status/main");
217
- _exit = true;
218
- return;
219
- }
220
- if (isFirstLogin) {
221
- onNavigate("/register/info");
225
+ return Promise.resolve(clickHandler()).then(function (clickHandlerRes) {
226
+ function _temp2() {
227
+ dispatch(setLoading(false));
228
+ }
229
+ if (!clickHandlerRes) return;
230
+ var infoLogin = {
231
+ imageUrl: imageUrl,
232
+ fullName: name,
233
+ email: email,
234
+ token: accessToken,
235
+ googleId: googleId,
236
+ captcha: clickHandlerRes
237
+ };
238
+ var role = isTeacher ? "Teacher" : "Student";
239
+ dispatch(setLoading(true));
240
+ var _temp = _catch(function () {
241
+ return Promise.resolve(apiLoginGoogle(infoLogin, role)).then(function (res1) {
242
+ var isFirstLogin = res1.data.isFirstLogin;
243
+ var tokenJWT = res1.data.token;
244
+ localStorage.setItem("USER_INFORMATION", JSON.stringify(infoLogin));
245
+ localStorage.setItem(ACCESS_TOKEN, tokenJWT);
246
+ if (!isTeacher && isFirstLogin) {
247
+ onNavigate("/register/info");
248
+ } else {
249
+ onNavigate("/");
250
+ }
251
+ });
252
+ }, function (error) {
253
+ var _error$response, _error$response$data;
254
+ var message = undefined;
255
+ var type = error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.type;
256
+ if (type === AuthenticationMessage.NotAllowedToRegister) {
257
+ alert("가입 권한이 없는 계정입니다. 관리자에게 문의하세요.");
258
+ } else if (type) {
259
+ var _error$response2, _error$response2$data;
260
+ message = (error === null || error === void 0 ? void 0 : (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : (_error$response2$data = _error$response2.data) === null || _error$response2$data === void 0 ? void 0 : _error$response2$data.message) || ERROR_MESSAGE;
222
261
  } else {
223
- onNavigate("/student/check/main");
262
+ var _error$response3;
263
+ message = (error === null || error === void 0 ? void 0 : (_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data) || ERROR_MESSAGE;
224
264
  }
265
+ message && alert(message);
266
+ handleSignOut();
225
267
  });
226
- }, function (error) {
227
- var _error$response, _error$response$data;
228
- var message = undefined;
229
- 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;
230
- if (type === AuthenticationMessage.NotAllowedToRegister) {
231
- alert("가입 권한이 없는 계정입니다. 관리자에게 문의하세요.");
232
- } else if (type) {
233
- var _error$response2, _error$response2$data;
234
- 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;
235
- } else {
236
- var _error$response3;
237
- message = (error === null || error === void 0 ? void 0 : (_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data) || ERROR_MESSAGE;
238
- }
239
- signOut();
240
- !!message && dispatch(setAlert({
241
- type: "danger",
242
- message: message
243
- }));
268
+ return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
244
269
  });
245
- return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
246
270
  }
247
271
  }());
248
272
  } catch (e) {
@@ -258,14 +282,10 @@ var BlockLogin = function BlockLogin(_ref) {
258
282
  validationSchema: schema,
259
283
  onSubmit: function (values) {
260
284
  try {
261
- return Promise.resolve(_catch(function () {
262
- return Promise.resolve(clickHandler()).then(function (clickHandlerRes) {
263
- if (!clickHandlerRes) return;
264
- values.captcha = clickHandlerRes;
265
- });
266
- }, function (err) {
267
- console.error(err);
268
- }));
285
+ return Promise.resolve(clickHandler()).then(function (clickHandlerRes) {
286
+ if (!clickHandlerRes) return;
287
+ values.captcha = clickHandlerRes;
288
+ });
269
289
  } catch (e) {
270
290
  return Promise.reject(e);
271
291
  }
@@ -301,13 +321,21 @@ var BlockLogin = function BlockLogin(_ref) {
301
321
  });
302
322
  };
303
323
 
324
+ var getAccessToken$1 = (function () {
325
+ try {
326
+ return localStorage.getItem(ACCESS_TOKEN);
327
+ } catch (err) {
328
+ return null;
329
+ }
330
+ });
331
+
304
332
  var defaultInfo = {
305
333
  email: "",
306
334
  password: "",
307
335
  captcha: "",
308
336
  rememberMe: false
309
337
  };
310
- var useLogin = function useLogin() {
338
+ var useLogin = function useLogin(onNavigate) {
311
339
  var _useState = useState(false),
312
340
  openLogin = _useState[0],
313
341
  setOpenLogin = _useState[1];
@@ -327,7 +355,11 @@ var useLogin = function useLogin() {
327
355
  scope: 'email'
328
356
  });
329
357
  };
330
- gapi.load('client:auth2', start);
358
+ !!gapi && gapi.load('client:auth2', start);
359
+ }, [gapi]);
360
+ useEffect(function () {
361
+ var token = getAccessToken$1();
362
+ if (!!token) onNavigate("/");
331
363
  }, []);
332
364
  return {
333
365
  defaultInfo: defaultInfo,
@@ -343,7 +375,7 @@ var useLogin = function useLogin() {
343
375
  var Login = function Login(_ref) {
344
376
  var onNavigate = _ref.onNavigate,
345
377
  isTeacher = _ref.isTeacher;
346
- var _useLogin = useLogin(),
378
+ var _useLogin = useLogin(onNavigate),
347
379
  defaultInfo = _useLogin.defaultInfo;
348
380
  return React.createElement("div", {
349
381
  className: styles["login"] + " container-fluid font-family-lato"
@@ -582,6 +614,8 @@ var commonReducer = createReducer(initialState, function (builder) {
582
614
  state.user = action.payload;
583
615
  }).addCase(setLanguage, function (state, action) {
584
616
  state.language = action.payload;
617
+ }).addCase(reset, function (_state, _action) {
618
+ return initialState;
585
619
  });
586
620
  });
587
621
 
@@ -658,14 +692,6 @@ var encodeParams$1 = (function (params) {
658
692
  }).join('&');
659
693
  });
660
694
 
661
- var getAccessToken$1 = (function () {
662
- try {
663
- return localStorage.getItem(ACCESS_TOKEN);
664
- } catch (err) {
665
- return null;
666
- }
667
- });
668
-
669
695
  var api$1 = axios.create({
670
696
  baseURL: BASE_URL,
671
697
  timeout: 0,
@@ -717,15 +743,28 @@ var getInfo = function getInfo() {
717
743
 
718
744
  var LayoutContext = function LayoutContext(_ref) {
719
745
  var children = _ref.children,
720
- onNavigate = _ref.onNavigate;
746
+ role = _ref.role;
721
747
  var _useGoogleSignOut = useGoogleSignOut({}),
722
- signOut = _useGoogleSignOut.signOut;
748
+ handleSignOut = _useGoogleSignOut.handleSignOut;
723
749
  var dispatch = useDispatch();
750
+ var user = useSelector(function (state) {
751
+ var _state$common;
752
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
753
+ });
724
754
  var resetAuth = function resetAuth() {
725
- localStorage.removeItem(ACCESS_TOKEN);
726
- signOut();
727
- onNavigate("/login");
755
+ handleSignOut();
728
756
  };
757
+ var checkRoleUser = useCallback(function () {
758
+ var _user$roles, _user$roles2;
759
+ if (!user) return;
760
+ var isAdmin = (_user$roles = user.roles) === null || _user$roles === void 0 ? void 0 : _user$roles.includes("Admin");
761
+ if (isAdmin && role !== "Teacher") alert(user.email + " not allow to register " + role);
762
+ if (isAdmin) return;
763
+ if (!((_user$roles2 = user.roles) !== null && _user$roles2 !== void 0 && _user$roles2.includes(role))) {
764
+ alert(user.email + " not allow to register " + role);
765
+ resetAuth();
766
+ }
767
+ }, [role, JSON.stringify(user)]);
729
768
  var loadInfo = function loadInfo() {
730
769
  try {
731
770
  var _temp2 = function _temp2() {
@@ -744,7 +783,11 @@ var LayoutContext = function LayoutContext(_ref) {
744
783
  }
745
784
  dispatch(setUser(info.data));
746
785
  });
747
- }, function () {
786
+ }, function (err) {
787
+ console.log({
788
+ err: err
789
+ });
790
+ role === "Student" ? alert("학생, 다시 로그인해주세요.") : alert("선생님, 다시 로그인해주세요.");
748
791
  resetAuth();
749
792
  });
750
793
  return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
@@ -753,8 +796,9 @@ var LayoutContext = function LayoutContext(_ref) {
753
796
  }
754
797
  };
755
798
  useEffect(function () {
756
- loadInfo();
757
- }, []);
799
+ !user && loadInfo();
800
+ !!user && checkRoleUser();
801
+ }, [JSON.stringify(user)]);
758
802
  return React.createElement(Fragment, null, children);
759
803
  };
760
804
 
@@ -971,6 +1015,7 @@ var description_success = "스터디 터치는 엄태욱 선생님의 수업에
971
1015
  var logout = "로그 아웃";
972
1016
  var overall_status = "전체 현황";
973
1017
  var exam_status = "시험별 현";
1018
+ var student_status = "학생 신분";
974
1019
  var user_manager = "사용자 목록";
975
1020
  var recent_exam_results = "최근 시험 결과";
976
1021
  var instructor_name = "강사이름";
@@ -1015,6 +1060,7 @@ var no_data = "데이터 없음";
1015
1060
  var internet_connection_was_lost = "인터넷 연결이 끊어졌습니다";
1016
1061
  var problem = "문제";
1017
1062
  var problem_solving_time = "문제풀이 시간";
1063
+ var minutes = "분";
1018
1064
  var lang_ko = {
1019
1065
  problem_solving: problem_solving,
1020
1066
  my_story: my_story,
@@ -1026,6 +1072,7 @@ var lang_ko = {
1026
1072
  logout: logout,
1027
1073
  overall_status: overall_status,
1028
1074
  exam_status: exam_status,
1075
+ student_status: student_status,
1029
1076
  user_manager: user_manager,
1030
1077
  recent_exam_results: recent_exam_results,
1031
1078
  instructor_name: instructor_name,
@@ -1069,7 +1116,8 @@ var lang_ko = {
1069
1116
  no_data: no_data,
1070
1117
  internet_connection_was_lost: internet_connection_was_lost,
1071
1118
  problem: problem,
1072
- problem_solving_time: problem_solving_time
1119
+ problem_solving_time: problem_solving_time,
1120
+ minutes: minutes
1073
1121
  };
1074
1122
 
1075
1123
  var problem_solving$1 = "Problem Solving";
@@ -1082,6 +1130,7 @@ var description_success$1 = "Study Touch is a learning tool used in teacher Taew
1082
1130
  var logout$1 = "Logout";
1083
1131
  var overall_status$1 = "Overall Status";
1084
1132
  var exam_status$1 = "Exam Status";
1133
+ var student_status$1 = "Student Status";
1085
1134
  var user_manager$1 = "User Manager";
1086
1135
  var recent_exam_results$1 = "Recent exam";
1087
1136
  var instructor_name$1 = "Instructor name";
@@ -1126,6 +1175,7 @@ var no_data$1 = "No data";
1126
1175
  var internet_connection_was_lost$1 = "Internet connection was lost";
1127
1176
  var problem$1 = "Problem ";
1128
1177
  var problem_solving_time$1 = "Problem solving time";
1178
+ var minutes$1 = "m";
1129
1179
  var lang_en = {
1130
1180
  problem_solving: problem_solving$1,
1131
1181
  my_story: my_story$1,
@@ -1137,6 +1187,7 @@ var lang_en = {
1137
1187
  logout: logout$1,
1138
1188
  overall_status: overall_status$1,
1139
1189
  exam_status: exam_status$1,
1190
+ student_status: student_status$1,
1140
1191
  user_manager: user_manager$1,
1141
1192
  recent_exam_results: recent_exam_results$1,
1142
1193
  instructor_name: instructor_name$1,
@@ -1180,7 +1231,8 @@ var lang_en = {
1180
1231
  no_data: no_data$1,
1181
1232
  internet_connection_was_lost: internet_connection_was_lost$1,
1182
1233
  problem: problem$1,
1183
- problem_solving_time: problem_solving_time$1
1234
+ problem_solving_time: problem_solving_time$1,
1235
+ minutes: minutes$1
1184
1236
  };
1185
1237
 
1186
1238
  i18n.use(initReactI18next).init({
@@ -1312,7 +1364,20 @@ var toISOString = (function (time) {
1312
1364
  }
1313
1365
  });
1314
1366
 
1367
+ var canAccess = function canAccess(userRoles, componentRoles) {
1368
+ if (!Array.isArray(userRoles)) {
1369
+ return false;
1370
+ }
1371
+ if (Array.isArray(componentRoles)) {
1372
+ var intersects = userRoles.filter(function (i) {
1373
+ return componentRoles.includes(i);
1374
+ });
1375
+ return intersects.length > 0;
1376
+ }
1377
+ return true;
1378
+ };
1379
+
1315
1380
  var historyCore = createBrowserHistory();
1316
1381
 
1317
- export { ACCESS_TOKEN, BASE_URL, CommonAlert, CommonDialog, ConfirmDialog, CustomPagination, DATE_MIN_VALUE, EXAM_CHANNEL, ExamEvent, LayoutContext, Loading, Login, NotFound, PUSHER_CONFIG, TheLanguageDropdown, api$1 as api, diffFromNow, formatTime, historyCore, i18n, minutesToTimeSpan, setAlert, setLanguage, setLoading, setUser, store, toISOString, useGoogleSignOut, utcToLocalTime };
1382
+ export { ACCESS_TOKEN, BASE_URL, CommonAlert, CommonDialog, ConfirmDialog, CustomPagination, DATE_MIN_VALUE, EXAM_CHANNEL, ExamEvent, LayoutContext, Loading, Login, NotFound, PUSHER_CONFIG, TheLanguageDropdown, api$1 as api, canAccess as canAccessRoute, diffFromNow, formatTime, historyCore, i18n, minutesToTimeSpan, setAlert, setLanguage, setLoading, setUser, store, toISOString, useGoogleSignOut, utcToLocalTime };
1318
1383
  //# sourceMappingURL=index.modern.js.map