touchstudy-core 0.1.114 → 0.1.116

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/index.js CHANGED
@@ -27,6 +27,7 @@ var Select__default = _interopDefault(Select);
27
27
  var CreatableSelect = _interopDefault(require('react-select/creatable'));
28
28
  var formik = require('formik');
29
29
  var ckeditor4React = require('ckeditor4-react');
30
+ var reactVirtualized = require('react-virtualized');
30
31
  var Grid = _interopDefault(require('@mui/material/Grid'));
31
32
  var Typography = _interopDefault(require('@mui/material/Typography'));
32
33
  var Card = _interopDefault(require('@mui/material/Card'));
@@ -1188,6 +1189,7 @@ var notify_share_exam = {
1188
1189
  update_fail: "업데이트 실패!"
1189
1190
  };
1190
1191
  var academy_admin_teacher = "아카데미 관리자/선생님";
1192
+ var academyadmin_teacher = "아카데미 관리자/선생님";
1191
1193
  var total_student = "총 학생 수";
1192
1194
  var total_teacher = "총 교사 수";
1193
1195
  var total_exam = "총 시험 수";
@@ -1351,6 +1353,7 @@ var delete_textbook_successfully = "교과서 삭제 성공";
1351
1353
  var information = "정보";
1352
1354
  var running_time = "진행 시간";
1353
1355
  var hours_mins_seconds = "{{hours}}시간 {{mins}}분 {{seconds}}초";
1356
+ var create_schedule_successfully = "일정을 성공적으로 생성했습니다";
1354
1357
  var prepared_textbook = "준비된 교과서";
1355
1358
  var enable_phone_pass_code = "전화 비밀번호 활성화";
1356
1359
  var custom = "관습";
@@ -1359,6 +1362,14 @@ var pass_code_is_invalid = "비밀번호가 유효하지 않습니다";
1359
1362
  var pass_code_length_must_be_n = "비밀번호 길이는 {{n}}이어야 합니다";
1360
1363
  var parent_phone_number_is_invalid = "부모 전화번호가 잘못되었습니다";
1361
1364
  var parent_phone_number_is_required = "부모 전화번호가 필요합니다";
1365
+ var update_schedule_successfully = "일정을 성공적으로 업데이트했습니다";
1366
+ var delete_schedule_successfully = "일정을 성공적으로 삭제했습니다";
1367
+ var group = "그룹";
1368
+ var update_schedule = "업데이트 일정";
1369
+ var back_month = "이전 달";
1370
+ var today_schedule = "오늘 스케줄";
1371
+ var schedule_achieved = "달성한 스케줄";
1372
+ var i_dont_have_my_phone_number_yet = "휴대폰 번호가 없어요";
1362
1373
  var lang_ko = {
1363
1374
  problem_solving: problem_solving,
1364
1375
  my_story: my_story,
@@ -2190,6 +2201,7 @@ var lang_ko = {
2190
2201
  notify_share_textbook: notify_share_textbook,
2191
2202
  notify_share_exam: notify_share_exam,
2192
2203
  academy_admin_teacher: academy_admin_teacher,
2204
+ academyadmin_teacher: academyadmin_teacher,
2193
2205
  total_student: total_student,
2194
2206
  total_teacher: total_teacher,
2195
2207
  total_exam: total_exam,
@@ -2355,6 +2367,7 @@ var lang_ko = {
2355
2367
  information: information,
2356
2368
  running_time: running_time,
2357
2369
  hours_mins_seconds: hours_mins_seconds,
2370
+ create_schedule_successfully: create_schedule_successfully,
2358
2371
  prepared_textbook: prepared_textbook,
2359
2372
  enable_phone_pass_code: enable_phone_pass_code,
2360
2373
  custom: custom,
@@ -2362,7 +2375,15 @@ var lang_ko = {
2362
2375
  pass_code_is_invalid: pass_code_is_invalid,
2363
2376
  pass_code_length_must_be_n: pass_code_length_must_be_n,
2364
2377
  parent_phone_number_is_invalid: parent_phone_number_is_invalid,
2365
- parent_phone_number_is_required: parent_phone_number_is_required
2378
+ parent_phone_number_is_required: parent_phone_number_is_required,
2379
+ update_schedule_successfully: update_schedule_successfully,
2380
+ delete_schedule_successfully: delete_schedule_successfully,
2381
+ group: group,
2382
+ update_schedule: update_schedule,
2383
+ back_month: back_month,
2384
+ today_schedule: today_schedule,
2385
+ schedule_achieved: schedule_achieved,
2386
+ i_dont_have_my_phone_number_yet: i_dont_have_my_phone_number_yet
2366
2387
  };
2367
2388
 
2368
2389
  var problem_solving$1 = "Problem Solving";
@@ -2502,7 +2523,7 @@ var create_exam$1 = "Create exam";
2502
2523
  var back$1 = "Back";
2503
2524
  var date_format_exam$1 = "MMMM YYYY";
2504
2525
  var date_format$1 = "MMM. D. YYYY";
2505
- var day_month_format$1 = "DDDo MMM";
2526
+ var day_month_format$1 = "Do MMM";
2506
2527
  var date_time_format$1 = "HH:mm MMM. D YYYY ";
2507
2528
  var date_time_format_12h$1 = "MM-DD-YYYY HH:mm A";
2508
2529
  var full_date_time_format$1 = "MMM Do YYYY HH:mm:ss";
@@ -3276,14 +3297,15 @@ var chapter$1 = "Chapter";
3276
3297
  var chapter_number$1 = "Chapter {{number}}";
3277
3298
  var category_required$1 = "Category is required";
3278
3299
  var subject_required$1 = "Subject is required";
3279
- var academy_admin_teacher$1 = "Academy Admin Teacher";
3300
+ var academy_admin_teacher$1 = "Academy Admin/Teacher";
3301
+ var academyadmin_teacher$1 = "Academy Admin/Teacher";
3280
3302
  var date_required$1 = "Date is required";
3281
3303
  var start_time_required$1 = "Start time is required";
3282
3304
  var end_time_required$1 = "End time is required";
3283
3305
  var title_required$1 = "Title is required";
3284
3306
  var delete_schedule$1 = "Delete Schedule";
3285
3307
  var edit_schedule$1 = "Edit Schedule";
3286
- var are_you_sure_you_want_to_delete_the_schedule$1 = "are_you_sure_you_want_to_delete_the_schedule: {{name}}";
3308
+ var are_you_sure_you_want_to_delete_the_schedule$1 = "Are you sure you want to delete the schedule: {{name}}";
3287
3309
  var correct_answer_rate$1 = "Correct answer rate";
3288
3310
  var progress$1 = "Progress";
3289
3311
  var grammar$1 = "Grammar";
@@ -3376,6 +3398,7 @@ var delete_textbook_successfully$1 = "Delete the textbook successfully";
3376
3398
  var information$1 = "Information";
3377
3399
  var running_time$1 = "Running time";
3378
3400
  var hours_mins_seconds$1 = "{{hours}}h {{mins}}m {{seconds}}s";
3401
+ var create_schedule_successfully$1 = "Create schedule successfully";
3379
3402
  var prepared_textbook$1 = "Prepared Textbook";
3380
3403
  var enable_phone_pass_code$1 = "Enable phone pass code";
3381
3404
  var custom$1 = "Custom";
@@ -3385,6 +3408,14 @@ var pass_code_length_must_be_n$1 = "Pass code length must be {{n}}";
3385
3408
  var email_is_invalid = "Email is invalid";
3386
3409
  var parent_phone_number_is_invalid$1 = "Parent phone number is invalid";
3387
3410
  var parent_phone_number_is_required$1 = "Parent phone number is required";
3411
+ var update_schedule_successfully$1 = "Update schedule successfully";
3412
+ var delete_schedule_successfully$1 = "Delete schedule successfully";
3413
+ var group$1 = "Group";
3414
+ var update_schedule$1 = "Update Schedule";
3415
+ var back_month$1 = "Back Month";
3416
+ var today_schedule$1 = "Today's schedule";
3417
+ var schedule_achieved$1 = "Schedule achieved";
3418
+ var i_dont_have_my_phone_number_yet$1 = "I don't have my phone number yet";
3388
3419
  var lang_en = {
3389
3420
  problem_solving: problem_solving$1,
3390
3421
  my_story: my_story$1,
@@ -4281,6 +4312,7 @@ var lang_en = {
4281
4312
  category_required: category_required$1,
4282
4313
  subject_required: subject_required$1,
4283
4314
  academy_admin_teacher: academy_admin_teacher$1,
4315
+ academyadmin_teacher: academyadmin_teacher$1,
4284
4316
  date_required: date_required$1,
4285
4317
  start_time_required: start_time_required$1,
4286
4318
  end_time_required: end_time_required$1,
@@ -4382,6 +4414,7 @@ var lang_en = {
4382
4414
  information: information$1,
4383
4415
  running_time: running_time$1,
4384
4416
  hours_mins_seconds: hours_mins_seconds$1,
4417
+ create_schedule_successfully: create_schedule_successfully$1,
4385
4418
  prepared_textbook: prepared_textbook$1,
4386
4419
  enable_phone_pass_code: enable_phone_pass_code$1,
4387
4420
  custom: custom$1,
@@ -4390,7 +4423,15 @@ var lang_en = {
4390
4423
  pass_code_length_must_be_n: pass_code_length_must_be_n$1,
4391
4424
  email_is_invalid: email_is_invalid,
4392
4425
  parent_phone_number_is_invalid: parent_phone_number_is_invalid$1,
4393
- parent_phone_number_is_required: parent_phone_number_is_required$1
4426
+ parent_phone_number_is_required: parent_phone_number_is_required$1,
4427
+ update_schedule_successfully: update_schedule_successfully$1,
4428
+ delete_schedule_successfully: delete_schedule_successfully$1,
4429
+ group: group$1,
4430
+ update_schedule: update_schedule$1,
4431
+ back_month: back_month$1,
4432
+ today_schedule: today_schedule$1,
4433
+ schedule_achieved: schedule_achieved$1,
4434
+ i_dont_have_my_phone_number_yet: i_dont_have_my_phone_number_yet$1
4394
4435
  };
4395
4436
 
4396
4437
  i18n__default.use(reactI18next.initReactI18next).init({
@@ -9204,20 +9245,31 @@ var VirtualListView = function VirtualListView(props) {
9204
9245
  renderItem = props.renderItem,
9205
9246
  emptyElement = props.emptyElement,
9206
9247
  loading = props.loading,
9207
- loadingElement = props.loadingElement;
9208
- return React__default.createElement(material.Box, Object.assign({}, containerProps), loading && React__default.createElement(React.Fragment, null, loadingElement != null ? loadingElement : React__default.createElement(material.Box, {
9209
- p: 1,
9210
- className: "d-flex justify-content-center align-items-center w-100"
9211
- }, React__default.createElement(material.CircularProgress, {
9212
- size: 24,
9213
- sx: {
9214
- color: "#5d5d5b"
9215
- }
9216
- }))), !loading && !data.length && React__default.createElement(VirtualTableEmpty, {
9217
- emptyElement: emptyElement
9218
- }), !loading && !!data.length && React__default.createElement(ListView, {
9219
- data: data,
9220
- render: renderItem
9248
+ loadingElement = props.loadingElement,
9249
+ listHeight = props.listHeight;
9250
+ return React__default.createElement(material.Box, Object.assign({}, containerProps), React__default.createElement(reactVirtualized.AutoSizer, {
9251
+ disableHeight: !!listHeight
9252
+ }, function (_ref) {
9253
+ var width = _ref.width,
9254
+ height = _ref.height;
9255
+ return React__default.createElement(material.Box, {
9256
+ width: width,
9257
+ height: height,
9258
+ overflow: "auto"
9259
+ }, loading && React__default.createElement(React.Fragment, null, loadingElement != null ? loadingElement : React__default.createElement(material.Box, {
9260
+ p: 1,
9261
+ className: "d-flex justify-content-center align-items-center w-100"
9262
+ }, React__default.createElement(material.CircularProgress, {
9263
+ size: 24,
9264
+ sx: {
9265
+ color: "#5d5d5b"
9266
+ }
9267
+ }))), !loading && !data.length && React__default.createElement(VirtualTableEmpty, {
9268
+ emptyElement: emptyElement
9269
+ }), !loading && !!data.length && React__default.createElement(ListView, {
9270
+ data: data,
9271
+ render: renderItem
9272
+ }));
9221
9273
  }));
9222
9274
  };
9223
9275
 
@@ -9889,7 +9941,9 @@ var useLoginPhoneNumber = function useLoginPhoneNumber(props) {
9889
9941
  var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain) || !!(user !== null && user !== void 0 && user.isLearningSpace);
9890
9942
  var needToRegister = isFirstLogin && isAcademy;
9891
9943
  var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
9892
- redirectLoginUser(user, token, redirectUrl);
9944
+ redirectLoginUser(_extends({}, user, {
9945
+ isNotEnoughStatements: isFirstLogin
9946
+ }), token, redirectUrl);
9893
9947
  setPhoneNumber("");
9894
9948
  });
9895
9949
  }, function (error) {
@@ -10232,10 +10286,12 @@ var signInApi = function signInApi(_ref) {
10232
10286
  var signInWithEmailApi = function signInWithEmailApi(_ref2) {
10233
10287
  var isAcademy = _ref2.isAcademy,
10234
10288
  email = _ref2.email,
10235
- reCaptcha = _ref2.reCaptcha;
10289
+ reCaptcha = _ref2.reCaptcha,
10290
+ role = _ref2.role;
10236
10291
  return api.post((isAcademy ? SIGN_IN_URL : SIGN_IN_SUPER_ADMIN_URL) + "/email", {
10237
10292
  email: email,
10238
- reCaptcha: reCaptcha
10293
+ reCaptcha: reCaptcha,
10294
+ role: role
10239
10295
  }, {
10240
10296
  headers: {
10241
10297
  Domain: window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '')
@@ -10371,8 +10427,17 @@ var useLogin$1 = function useLogin(_ref) {
10371
10427
  var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain) || !!(user !== null && user !== void 0 && user.isLearningSpace);
10372
10428
  var needToRegister = isFirstLogin && isAcademy;
10373
10429
  var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
10430
+ console.log({
10431
+ isFirstLogin: isFirstLogin,
10432
+ isAcademy: isAcademy,
10433
+ token: token,
10434
+ user: user,
10435
+ redirectUrl: redirectUrl
10436
+ });
10374
10437
  handleSwitchOTP(false);
10375
- redirectLoginUser(user, token, redirectUrl);
10438
+ redirectLoginUser(_extends({}, user, {
10439
+ isNotEnoughStatements: isFirstLogin
10440
+ }), token, redirectUrl);
10376
10441
  });
10377
10442
  }
10378
10443
  }();
@@ -10383,7 +10448,8 @@ var useLogin$1 = function useLogin(_ref) {
10383
10448
  return Promise.resolve(signInWithEmailApi({
10384
10449
  isAcademy: isAcademyReq,
10385
10450
  email: email,
10386
- reCaptcha: tokenReCaptcha
10451
+ reCaptcha: tokenReCaptcha,
10452
+ role: role
10387
10453
  })).then(function () {
10388
10454
  reactToastify.toast.success(t("please_check_your_mailbox"));
10389
10455
  handleSwitchOTP(true);
@@ -10488,6 +10554,7 @@ var useLogiQRCode = function useLogiQRCode(props) {
10488
10554
  var _useState8 = React.useState(false),
10489
10555
  error = _useState8[0],
10490
10556
  setError = _useState8[1];
10557
+ var firstLoadRef = React.useRef(true);
10491
10558
  var onVerify = React.useCallback(function (token) {
10492
10559
  setTokenReCaptcha(token);
10493
10560
  }, []);
@@ -10497,9 +10564,11 @@ var useLogiQRCode = function useLogiQRCode(props) {
10497
10564
  setRefreshReCaptcha(function (b) {
10498
10565
  return !b;
10499
10566
  });
10567
+ firstLoadRef.current = false;
10500
10568
  setLoadingQR(false);
10501
10569
  };
10502
- if (!tokenReCaptcha || !!(qrCodeData !== null && qrCodeData !== void 0 && qrCodeData.key) || error) return Promise.resolve();
10570
+ if (!tokenReCaptcha) return Promise.resolve();
10571
+ resetData();
10503
10572
  setLoadingQR(true);
10504
10573
  if (!academyDomain) localStorage.setItem(LEARNING_SPACE, "true");
10505
10574
  var _temp = _catch(function () {
@@ -10534,8 +10603,8 @@ var useLogiQRCode = function useLogiQRCode(props) {
10534
10603
  }
10535
10604
  };
10536
10605
  React.useEffect(function () {
10537
- getQRCodeDataLogin();
10538
- }, [academyDomain, tokenReCaptcha, qrCodeData === null || qrCodeData === void 0 ? void 0 : qrCodeData.key]);
10606
+ if (firstLoadRef.current) getQRCodeDataLogin();
10607
+ }, [academyDomain, tokenReCaptcha]);
10539
10608
  React.useEffect(function () {
10540
10609
  if (qrCodeData !== null && qrCodeData !== void 0 && qrCodeData.key) {
10541
10610
  if (pusher.current) pusher.current.disconnect();
@@ -10571,11 +10640,12 @@ var useLogiQRCode = function useLogiQRCode(props) {
10571
10640
  var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain) || !!(user !== null && user !== void 0 && user.isLearningSpace);
10572
10641
  var needToRegister = isFirstLogin && isAcademy;
10573
10642
  var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
10574
- redirectLoginUser(user, token, redirectUrl);
10643
+ redirectLoginUser(_extends({}, user, {
10644
+ isNotEnoughStatements: isFirstLogin
10645
+ }), token, redirectUrl);
10575
10646
  });
10576
- }, function (error) {
10647
+ }, function () {
10577
10648
  setInvalid(true);
10578
- reactToastify.toast.error(getErrorMessage(t, error));
10579
10649
  });
10580
10650
  return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
10581
10651
  } catch (e) {
@@ -10604,7 +10674,7 @@ var useLogiQRCode = function useLogiQRCode(props) {
10604
10674
  setError(false);
10605
10675
  };
10606
10676
  var handleGenerateNewAQRCode = function handleGenerateNewAQRCode() {
10607
- resetData();
10677
+ getQRCodeDataLogin();
10608
10678
  };
10609
10679
  return {
10610
10680
  t: t,
@@ -10822,7 +10892,9 @@ var useLoginWithEmail = function useLoginWithEmail(_ref) {
10822
10892
  var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain) || !!(user !== null && user !== void 0 && user.isLearningSpace);
10823
10893
  var needToRegister = isFirstLogin && isAcademy;
10824
10894
  var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
10825
- redirectLoginUser(user, token, redirectUrl);
10895
+ redirectLoginUser(_extends({}, user, {
10896
+ isNotEnoughStatements: isFirstLogin
10897
+ }), token, redirectUrl);
10826
10898
  });
10827
10899
  }, function (error) {
10828
10900
  console.log(error);
@@ -10882,7 +10954,7 @@ var useLogin$2 = function useLogin(_ref) {
10882
10954
  passwordError = _useState2[0],
10883
10955
  setPasswordError = _useState2[1];
10884
10956
  var searchParams = new URLSearchParams(window.location.search);
10885
- var paramDomain = searchParams.get('domain');
10957
+ var paramDomain = searchParams.get("domain");
10886
10958
  var academyDomain = paramDomain || getAcademyDomain();
10887
10959
  var isStudent = role === exports.Role.Student;
10888
10960
  var isAcademyReq = isStudent || !!academyDomain;
@@ -10940,11 +11012,13 @@ var useLogin$2 = function useLogin(_ref) {
10940
11012
  var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain) || !!(user !== null && user !== void 0 && user.isLearningSpace);
10941
11013
  var needToRegister = isFirstLogin && isAcademy;
10942
11014
  var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
10943
- redirectLoginUser(user, token, redirectUrl);
11015
+ redirectLoginUser(_extends({}, user, {
11016
+ isNotEnoughStatements: isFirstLogin
11017
+ }), token, redirectUrl);
10944
11018
  });
10945
11019
  }, function (error) {
10946
11020
  console.log(error);
10947
- reactToastify.toast.error(getErrorMessage(t, error, t('request_login_fail')));
11021
+ reactToastify.toast.error(getErrorMessage(t, error, t("request_login_fail")));
10948
11022
  }));
10949
11023
  } catch (e) {
10950
11024
  return Promise.reject(e);
@@ -11701,7 +11775,7 @@ var ErrorHandler = function ErrorHandler(_ref) {
11701
11775
  var ClassForm = function ClassForm(_ref) {
11702
11776
  var history = _ref.history,
11703
11777
  formikProp = _ref.formikProp,
11704
- id = _ref.id,
11778
+ classId = _ref.classId,
11705
11779
  data = _ref.data,
11706
11780
  teachers = _ref.teachers,
11707
11781
  disabled = _ref.disabled,
@@ -12066,7 +12140,7 @@ var ClassForm = function ClassForm(_ref) {
12066
12140
  formikProp.handleSubmit();
12067
12141
  },
12068
12142
  disabled: disabled
12069
- }, !id ? t("create_and_continue") : t("save_and_exit")), React__default.createElement(material.Button, {
12143
+ }, !classId ? t("create_and_continue") : t("save_and_exit")), React__default.createElement(material.Button, {
12070
12144
  color: "secondary",
12071
12145
  className: "bg-secondary",
12072
12146
  variant: "contained",
@@ -12970,8 +13044,9 @@ var _excluded$8 = ["getStudents"],
12970
13044
  var PAGE_TITLE$4 = "classes";
12971
13045
  var useClassDetail = function useClassDetail(_ref) {
12972
13046
  var history = _ref.history,
12973
- id = _ref.id,
12974
- role = _ref.role;
13047
+ classId = _ref.classId,
13048
+ role = _ref.role,
13049
+ classListUrl = _ref.classListUrl;
12975
13050
  var _useTranslation = reactI18next.useTranslation(),
12976
13051
  t = _useTranslation.t;
12977
13052
  var dispatch = reactRedux.useDispatch();
@@ -12982,8 +13057,11 @@ var useClassDetail = function useClassDetail(_ref) {
12982
13057
  });
12983
13058
  var roles = (user === null || user === void 0 ? void 0 : user.roles) || [];
12984
13059
  var isOneRoleExists = roles.length === 1;
12985
- var isAdmin = roles.includes(exports.Role.Admin) && role === exports.Role.Admin;
12986
- var isTeacher = roles.includes(exports.Role.Teacher) && !roles.includes(exports.Role.Admin) && role === exports.Role.Teacher;
13060
+ var isAdmin = roles.includes(exports.Role.Admin);
13061
+ var isTeacher = roles.includes(exports.Role.Teacher) && !isAdmin;
13062
+ var isSuperAdmin = user === null || user === void 0 ? void 0 : user.isSuperAdmin;
13063
+ var isteacherSite = role === exports.Role.Teacher;
13064
+ var isDisabled = isAdmin && !isSuperAdmin && isteacherSite || isTeacher;
12987
13065
  var _useState = React.useState(),
12988
13066
  course = _useState[0],
12989
13067
  setCourse = _useState[1];
@@ -13009,13 +13087,13 @@ var useClassDetail = function useClassDetail(_ref) {
13009
13087
  var isSelected = function isSelected(id) {
13010
13088
  return selected.indexOf(id) !== -1;
13011
13089
  };
13012
- var _useStudentClassList = useStudentClassList(id ? +id : 0),
13090
+ var _useStudentClassList = useStudentClassList(classId),
13013
13091
  getStudents = _useStudentClassList.getStudents,
13014
13092
  studentListProps = _objectWithoutPropertiesLoose(_useStudentClassList, _excluded$8);
13015
- var _useTeacherClassList = useTeacherClassList(id ? +id : 0),
13093
+ var _useTeacherClassList = useTeacherClassList(classId),
13016
13094
  getTeachers = _useTeacherClassList.getTeachers,
13017
13095
  teacherListProps = _objectWithoutPropertiesLoose(_useTeacherClassList, _excluded2);
13018
- var _useLessonClassList = useLessonClassList(id ? +id : 0),
13096
+ var _useLessonClassList = useLessonClassList(classId),
13019
13097
  getLessons = _useLessonClassList.getLessons,
13020
13098
  lessonListProps = _objectWithoutPropertiesLoose(_useLessonClassList, _excluded3);
13021
13099
  var selectedLesson = lessonListProps.selectedLesson,
@@ -13039,12 +13117,10 @@ var useClassDetail = function useClassDetail(_ref) {
13039
13117
  isLoading && dispatch(setLoading(false));
13040
13118
  };
13041
13119
  var _exit = false;
13042
- if (!id) return Promise.resolve();
13043
- var idNumber = +id;
13044
- if (isNaN(idNumber)) return Promise.resolve();
13120
+ if (!classId) return Promise.resolve();
13045
13121
  isLoading && dispatch(setLoading(true));
13046
13122
  var _temp = _catch(function () {
13047
- return Promise.resolve(getClassByIdApi(idNumber)).then(function (res) {
13123
+ return Promise.resolve(getClassByIdApi(classId)).then(function (res) {
13048
13124
  var classData = res.data;
13049
13125
  if (!classData) {
13050
13126
  reactToastify.toast.error(t("get_class_detail_error"));
@@ -13161,22 +13237,22 @@ var useClassDetail = function useClassDetail(_ref) {
13161
13237
  var _temp12 = function _temp12() {
13162
13238
  dispatch(setLoading(false));
13163
13239
  };
13164
- if (!id || !openSelectDialog) return Promise.resolve();
13240
+ if (!classId || !openSelectDialog) return Promise.resolve();
13165
13241
  dispatch(setLoading(true));
13166
13242
  var _temp11 = _catch(function () {
13167
13243
  function _temp10() {
13168
13244
  return Promise.resolve(handleGetDetailData(false)).then(function () {
13169
- reactToastify.toast.success(t(id ? "update_class_successfully" : "create_class_successfully"));
13245
+ reactToastify.toast.success(t(classId ? "update_class_successfully" : "create_class_successfully"));
13170
13246
  handleCloseSelectDialog();
13171
13247
  });
13172
13248
  }
13173
13249
  var _temp9 = function () {
13174
13250
  if (openSelectDialog === "Student") {
13175
- return Promise.resolve(addStudentToClass(+id, userIds)).then(function () {
13251
+ return Promise.resolve(addStudentToClass(classId, userIds)).then(function () {
13176
13252
  return Promise.resolve(getStudents()).then(function () {});
13177
13253
  });
13178
13254
  } else {
13179
- return Promise.resolve(addTeacherToClass(+id, userIds)).then(function () {
13255
+ return Promise.resolve(addTeacherToClass(classId, userIds)).then(function () {
13180
13256
  return Promise.resolve(getTeachers()).then(function () {});
13181
13257
  });
13182
13258
  }
@@ -13211,16 +13287,16 @@ var useClassDetail = function useClassDetail(_ref) {
13211
13287
  dispatch(setLoading(true));
13212
13288
  var _temp15 = _catch(function () {
13213
13289
  function _temp14() {
13214
- reactToastify.toast.success(t(id ? "update_class_successfully" : "create_class_successfully"));
13290
+ reactToastify.toast.success(t(classId ? "update_class_successfully" : "create_class_successfully"));
13215
13291
  }
13216
13292
  var _temp13 = function () {
13217
- if (!id) {
13293
+ if (!classId) {
13218
13294
  return Promise.resolve(createClassApi(body)).then(function (res) {
13219
- pushTo(history, "/classes/" + res.data.id);
13295
+ pushTo(history, classListUrl + "/" + res.data.id);
13220
13296
  });
13221
13297
  } else {
13222
- return Promise.resolve(updateClassApi(+id, body)).then(function () {
13223
- pushTo(history, "/classes");
13298
+ return Promise.resolve(updateClassApi(classId, body)).then(function () {
13299
+ pushTo(history, classListUrl);
13224
13300
  });
13225
13301
  }
13226
13302
  }();
@@ -13235,10 +13311,10 @@ var useClassDetail = function useClassDetail(_ref) {
13235
13311
  };
13236
13312
  var getStudentNotInClassList = function getStudentNotInClassList() {
13237
13313
  try {
13238
- if (!id) return Promise.resolve();
13314
+ if (!classId) return Promise.resolve();
13239
13315
  var _temp17 = _catch(function () {
13240
13316
  var _textSearchRef$curren;
13241
- return Promise.resolve(getStudentClassApi(+id, _extends({}, filter, {
13317
+ return Promise.resolve(getStudentClassApi(classId, _extends({}, filter, {
13242
13318
  textSearch: (_textSearchRef$curren = textSearchRef.current) === null || _textSearchRef$curren === void 0 ? void 0 : _textSearchRef$curren.value,
13243
13319
  isInCourse: false
13244
13320
  }))).then(function (res) {
@@ -13274,10 +13350,10 @@ var useClassDetail = function useClassDetail(_ref) {
13274
13350
  };
13275
13351
  var getTeacherNotInClassList = function getTeacherNotInClassList() {
13276
13352
  try {
13277
- if (!id) return Promise.resolve();
13353
+ if (!classId) return Promise.resolve();
13278
13354
  var _temp18 = _catch(function () {
13279
13355
  var _textSearchRef$curren2;
13280
- return Promise.resolve(getTeacherClassApi(+id, _extends({}, filter, {
13356
+ return Promise.resolve(getTeacherClassApi(classId, _extends({}, filter, {
13281
13357
  textSearch: (_textSearchRef$curren2 = textSearchRef.current) === null || _textSearchRef$curren2 === void 0 ? void 0 : _textSearchRef$curren2.value,
13282
13358
  isInCourse: false
13283
13359
  }))).then(function (res) {
@@ -13393,7 +13469,7 @@ var useClassDetail = function useClassDetail(_ref) {
13393
13469
  };
13394
13470
  React.useEffect(function () {
13395
13471
  handleGetDetailData();
13396
- }, [id]);
13472
+ }, [classId]);
13397
13473
  React.useEffect(function () {
13398
13474
  handleFetchUsers();
13399
13475
  }, [JSON.stringify(filter)]);
@@ -13401,9 +13477,9 @@ var useClassDetail = function useClassDetail(_ref) {
13401
13477
  document.title = t("study_peak") + " | " + t(PAGE_TITLE$4);
13402
13478
  }, [t]);
13403
13479
  return {
13404
- id: id,
13480
+ classId: classId,
13405
13481
  schema: schema,
13406
- isAdmin: isAdmin,
13482
+ isDisabled: isDisabled,
13407
13483
  paging: paging,
13408
13484
  filter: filter,
13409
13485
  isTeacher: isTeacher,
@@ -13795,15 +13871,17 @@ var ClassDetail = function ClassDetail(_ref) {
13795
13871
  history = _ref.history,
13796
13872
  classListUrl = _ref.classListUrl,
13797
13873
  role = _ref.role;
13874
+ var classId = !id || Number.isNaN(+id) ? 0 : +id;
13798
13875
  var _useClassDetail = useClassDetail({
13799
13876
  history: history,
13800
- id: id,
13801
- role: role
13877
+ classId: classId,
13878
+ role: role,
13879
+ classListUrl: classListUrl
13802
13880
  }),
13803
13881
  schema = _useClassDetail.schema,
13804
13882
  paging = _useClassDetail.paging,
13805
- isAdmin = _useClassDetail.isAdmin,
13806
13883
  isTeacher = _useClassDetail.isTeacher,
13884
+ isDisabled = _useClassDetail.isDisabled,
13807
13885
  filter = _useClassDetail.filter,
13808
13886
  listUserSelected = _useClassDetail.listUserSelected,
13809
13887
  userList = _useClassDetail.userList,
@@ -13853,7 +13931,7 @@ var ClassDetail = function ClassDetail(_ref) {
13853
13931
  if (selected === TabList$1[1].value) studentListProps.resetData();
13854
13932
  if (selected === TabList$1[2].value) studentListProps.resetData();
13855
13933
  }, [selected]);
13856
- return React__default.createElement(material.Box, null, !!id && React__default.createElement(material.Box, null, React__default.createElement(material.Stack, {
13934
+ return React__default.createElement(material.Box, null, !!classId && React__default.createElement(material.Box, null, React__default.createElement(material.Stack, {
13857
13935
  display: "flex",
13858
13936
  flexDirection: "row",
13859
13937
  gap: "8px"
@@ -13883,12 +13961,12 @@ var ClassDetail = function ClassDetail(_ref) {
13883
13961
  direction: "row",
13884
13962
  alignItems: "center",
13885
13963
  justifyContent: "space-between",
13886
- mt: !!id ? 2 : 0,
13964
+ mt: classId ? 2 : 0,
13887
13965
  mb: 2,
13888
- pt: !!id ? "12px" : "0px"
13966
+ pt: classId ? "12px" : "0px"
13889
13967
  }, React__default.createElement(material.Typography, {
13890
13968
  variant: "h4"
13891
- }, t(!id ? "create_class" : isAdmin ? "update_class" : "view_class"))), React__default.createElement(formik.Formik, {
13969
+ }, t(!classId ? "create_class" : !isDisabled ? "update_class" : "view_class"))), React__default.createElement(formik.Formik, {
13892
13970
  initialValues: DEFAULT_CLASS_REQUEST,
13893
13971
  validationSchema: schema,
13894
13972
  onSubmit: handleSubmit
@@ -13896,30 +13974,30 @@ var ClassDetail = function ClassDetail(_ref) {
13896
13974
  return React__default.createElement(ClassForm, {
13897
13975
  classListUrl: classListUrl,
13898
13976
  history: history,
13899
- id: id,
13977
+ classId: classId,
13900
13978
  formikProp: props,
13901
13979
  data: classRequest,
13902
13980
  teachers: teacherOptions,
13903
- disabled: !isAdmin,
13981
+ disabled: isDisabled,
13904
13982
  onSearchTeachers: handleChangeTextSearchTeachers
13905
13983
  });
13906
13984
  })), React__default.createElement(CustomTabPanel, {
13907
13985
  value: selected,
13908
13986
  index: TabList$1[1].value
13909
- }, !!id && !Number.isNaN(+id) && selected === TabList$1[1].value && React__default.createElement(StudentList, Object.assign({
13910
- disabled: !isTeacher && !isAdmin,
13987
+ }, !!classId && selected === TabList$1[1].value && React__default.createElement(StudentList, Object.assign({
13988
+ disabled: isDisabled && !isTeacher,
13911
13989
  onAdd: handleOpenSelectDialog
13912
13990
  }, studentListProps))), React__default.createElement(CustomTabPanel, {
13913
13991
  value: selected,
13914
13992
  index: TabList$1[2].value
13915
- }, !!id && !Number.isNaN(+id) && selected === TabList$1[2].value && React__default.createElement(TeacherList, Object.assign({
13916
- disabled: !isAdmin,
13993
+ }, !!classId && selected === TabList$1[2].value && React__default.createElement(TeacherList, Object.assign({
13994
+ disabled: isDisabled,
13917
13995
  onAdd: handleOpenSelectDialog
13918
13996
  }, teacherListProps))), React__default.createElement(CustomTabPanel, {
13919
13997
  value: selected,
13920
13998
  index: TabList$1[3].value
13921
- }, !!id && !Number.isNaN(+id) && selected === TabList$1[3].value && React__default.createElement(LessonList, Object.assign({
13922
- disabled: !isAdmin,
13999
+ }, !!classId && selected === TabList$1[3].value && React__default.createElement(LessonList, Object.assign({
14000
+ disabled: isDisabled,
13923
14001
  startDate: course === null || course === void 0 ? void 0 : course.startDate,
13924
14002
  endDate: course === null || course === void 0 ? void 0 : course.endDate
13925
14003
  }, lessonListProps, {
@@ -13927,7 +14005,7 @@ var ClassDetail = function ClassDetail(_ref) {
13927
14005
  handleDeleteLessonClass: handleDeleteLessonClass,
13928
14006
  teachers: teacherOptions,
13929
14007
  onSearchTeachers: handleChangeTextSearchTeachers
13930
- }))), (isAdmin || openSelectDialog === "Student") && React__default.createElement(SelectDialog, {
14008
+ }))), (!isDisabled && !isTeacher || openSelectDialog === "Student") && React__default.createElement(SelectDialog, {
13931
14009
  open: !!openSelectDialog,
13932
14010
  isStudent: openSelectDialog === "Student",
13933
14011
  onClose: handleCloseSelectDialog,
@@ -14093,6 +14171,10 @@ var ClassList = function ClassList(_ref) {
14093
14171
  role = _ref.role,
14094
14172
  classCreateUrl = _ref.classCreateUrl,
14095
14173
  classUpdateUrl = _ref.classUpdateUrl;
14174
+ var isSuperAdmin = reactRedux.useSelector(function (state) {
14175
+ var _state$common, _state$common$user;
14176
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : (_state$common$user = _state$common.user) === null || _state$common$user === void 0 ? void 0 : _state$common$user.isSuperAdmin;
14177
+ });
14096
14178
  var isAdmin = role === exports.Role.Admin;
14097
14179
  var _useClassList = useClassList(history, classCreateUrl, classUpdateUrl),
14098
14180
  t = _useClassList.t,
@@ -14116,7 +14198,7 @@ var ClassList = function ClassList(_ref) {
14116
14198
  mb: 2
14117
14199
  }, React__default.createElement(material.Typography, {
14118
14200
  variant: "h4"
14119
- }, t("classes")), isAdmin && React__default.createElement(MButton, {
14201
+ }, t("classes")), (isAdmin || isSuperAdmin) && React__default.createElement(MButton, {
14120
14202
  variant: "contained",
14121
14203
  color: "inherit",
14122
14204
  startIcon: React__default.createElement(fa.FaPlus, {
@@ -14156,7 +14238,7 @@ var ClassList = function ClassList(_ref) {
14156
14238
  key: i.id
14157
14239
  }, React__default.createElement(TableCell, null, (paging.page - 1) * paging.limit + index + 1), React__default.createElement(TableCell, {
14158
14240
  className: "text-nowrap"
14159
- }, i.name), React__default.createElement(TableCell, null, toLocalTime(i.startDate, t("date_format"))), React__default.createElement(TableCell, null, toLocalTime(i.endDate, t("date_format"))), React__default.createElement(TableCell, null, i.totalStudents), React__default.createElement(TableCell, null, i.totalTeachers), React__default.createElement(TableCell, null, i.totalLessons), React__default.createElement(TableCell, null, isAdmin && React__default.createElement("div", {
14241
+ }, i.name), React__default.createElement(TableCell, null, toLocalTime(i.startDate, t("date_format"))), React__default.createElement(TableCell, null, toLocalTime(i.endDate, t("date_format"))), React__default.createElement(TableCell, null, i.totalStudents), React__default.createElement(TableCell, null, i.totalTeachers), React__default.createElement(TableCell, null, i.totalLessons), React__default.createElement(TableCell, null, (isAdmin || isSuperAdmin) && React__default.createElement("div", {
14160
14242
  className: "d-flex"
14161
14243
  }, React__default.createElement(material.IconButton, {
14162
14244
  color: "default",
@@ -14174,7 +14256,7 @@ var ClassList = function ClassList(_ref) {
14174
14256
  }
14175
14257
  }, React__default.createElement(fa6.FaTrashCan, {
14176
14258
  size: 12
14177
- }))), !isAdmin && React__default.createElement(material.IconButton, {
14259
+ }))), !(isAdmin || isSuperAdmin) && React__default.createElement(material.IconButton, {
14178
14260
  color: "default",
14179
14261
  className: "bg-primary text-white me-1",
14180
14262
  onClick: function onClick() {
@@ -19135,6 +19217,7 @@ var NoteItem = function NoteItem(_ref) {
19135
19217
  }),
19136
19218
  placement: placement
19137
19219
  }, React__default.createElement(material.IconButton, {
19220
+ disabled: !actions.length,
19138
19221
  onClick: handleMoreClick
19139
19222
  }, React__default.createElement(md.MdMoreHoriz, {
19140
19223
  color: "#5d5d5b"
@@ -19442,11 +19525,10 @@ var useExamResultData = function useExamResultData(props) {
19442
19525
  var getData = function getData() {
19443
19526
  resetData();
19444
19527
  if (!(user !== null && user !== void 0 && user.email)) return;
19445
- isStudent && chapterId ? getDataTextbookResult() : getStudentData(examCode);
19446
- !isStudent && getStudentDataByTeacher(examSessionId, studentId);
19528
+ if (chapterId) getDataTextbookResult();else isStudent ? getStudentData(examCode) : getStudentDataByTeacher(examSessionId, studentId);
19447
19529
  };
19448
19530
  examCode === "example-code" ? setExampleData() : getData();
19449
- }, [examCode, isStudent, code, examSessionId, studentId, user === null || user === void 0 ? void 0 : user.email]);
19531
+ }, [examCode, isStudent, code, examSessionId, studentId, chapterId, user === null || user === void 0 ? void 0 : user.email]);
19450
19532
  var handlePrevChart = function handlePrevChart() {
19451
19533
  if (dataChartIndex > 0) {
19452
19534
  setDataChartIndex(dataChartIndex - 1);
@@ -20902,6 +20984,9 @@ var UserSchema = yup.object().shape({
20902
20984
  },
20903
20985
  then: function then(schema) {
20904
20986
  return schema.trim().required("school_name_is_required");
20987
+ },
20988
+ otherwise: function otherwise(schema) {
20989
+ return schema.notRequired();
20905
20990
  }
20906
20991
  }),
20907
20992
  grade: yup.number().transform(function (value) {
@@ -20912,6 +20997,9 @@ var UserSchema = yup.object().shape({
20912
20997
  },
20913
20998
  then: function then(schema) {
20914
20999
  return schema.required("student_grade_is_required").typeError("student_grade_is_required").min(1, "student_grade_is_invalid").max(12, "student_grade_is_invalid");
21000
+ },
21001
+ otherwise: function otherwise(schema) {
21002
+ return schema.notRequired();
20915
21003
  }
20916
21004
  }),
20917
21005
  major: yup.string().when("role", {
@@ -20920,6 +21008,9 @@ var UserSchema = yup.object().shape({
20920
21008
  },
20921
21009
  then: function then(schema) {
20922
21010
  return schema.trim().required("major_is_required");
21011
+ },
21012
+ otherwise: function otherwise(schema) {
21013
+ return schema.notRequired();
20923
21014
  }
20924
21015
  }),
20925
21016
  parentPhoneNumber: yup.string().when("role", {
@@ -20930,6 +21021,9 @@ var UserSchema = yup.object().shape({
20930
21021
  return schema.trim().matches(phoneRegExp, {
20931
21022
  message: "parent_phone_number_is_invalid"
20932
21023
  }).min(10, "parent_phone_number_is_invalid").required("parent_phone_number_is_required");
21024
+ },
21025
+ otherwise: function otherwise(schema) {
21026
+ return schema.notRequired();
20933
21027
  }
20934
21028
  }),
20935
21029
  parentName: yup.string().when("role", {
@@ -20938,6 +21032,9 @@ var UserSchema = yup.object().shape({
20938
21032
  },
20939
21033
  then: function then(schema) {
20940
21034
  return schema.trim().required("parent_name_is_required");
21035
+ },
21036
+ otherwise: function otherwise(schema) {
21037
+ return schema.notRequired();
20941
21038
  }
20942
21039
  }),
20943
21040
  subjectId: yup.number().when("role", {
@@ -21477,7 +21574,8 @@ var UserDialog = function UserDialog(_ref) {
21477
21574
  size: "1rem"
21478
21575
  }) : React__default.createElement(material.IconButton, {
21479
21576
  className: "bg-success",
21480
- onClick: getDefaultPassCode
21577
+ onClick: getDefaultPassCode,
21578
+ disabled: disabled
21481
21579
  }, React__default.createElement(fa6.FaRotateRight, {
21482
21580
  color: "#FFF",
21483
21581
  size: 10
@@ -21504,7 +21602,8 @@ var UserDialog = function UserDialog(_ref) {
21504
21602
  disabled: disabled
21505
21603
  }), React__default.createElement(material.Box, null, React__default.createElement(material.IconButton, {
21506
21604
  className: "bg-success",
21507
- onClick: getRandomPassCode
21605
+ onClick: getRandomPassCode,
21606
+ disabled: disabled
21508
21607
  }, React__default.createElement(fa6.FaRotateRight, {
21509
21608
  color: "#FFF",
21510
21609
  size: 10
@@ -22165,6 +22264,10 @@ var RecentUserActionDialog = function RecentUserActionDialog(_ref) {
22165
22264
 
22166
22265
  var UserList = function UserList(_ref) {
22167
22266
  var role = _ref.role;
22267
+ var isSuperAdmin = reactRedux.useSelector(function (state) {
22268
+ var _state$common, _state$common$user;
22269
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : (_state$common$user = _state$common.user) === null || _state$common$user === void 0 ? void 0 : _state$common$user.isSuperAdmin;
22270
+ });
22168
22271
  var isAdmin = role === exports.Role.Admin;
22169
22272
  var _useUserList = useUserList(role),
22170
22273
  userHeaders = _useUserList.userHeaders,
@@ -22218,7 +22321,7 @@ var UserList = function UserList(_ref) {
22218
22321
  mb: 2
22219
22322
  }, React__default.createElement(material.Typography, {
22220
22323
  variant: "h4"
22221
- }, t("users")), isAdmin && React__default.createElement("div", {
22324
+ }, t("users")), (isAdmin || isSuperAdmin) && React__default.createElement("div", {
22222
22325
  className: "d-flex"
22223
22326
  }, React__default.createElement("input", {
22224
22327
  type: "file",
@@ -22326,7 +22429,7 @@ var UserList = function UserList(_ref) {
22326
22429
  key: i.id
22327
22430
  }, React__default.createElement(TableCell, null, (paging.page - 1) * paging.limit + index + 1), React__default.createElement(TableCell, null, i.email), React__default.createElement(TableCell, null, i.fullName), React__default.createElement(TableCell, null, i.phoneNumber), React__default.createElement(TableCell, null, utcToLocalTime(i.createdAt, t("date_time_format"))), React__default.createElement(TableCell, null, (_i$classes = i.classes) === null || _i$classes === void 0 ? void 0 : _i$classes.join(", ")), React__default.createElement(TableCell, null, (_i$subject = i.subject) === null || _i$subject === void 0 ? void 0 : _i$subject.name), React__default.createElement(TableCell, null, !!i.roles && formatRole(i.roles, t)), React__default.createElement(TableCell, null, React__default.createElement("div", {
22328
22431
  className: "d-flex"
22329
- }, isAdmin ? React__default.createElement(material.IconButton, {
22432
+ }, isAdmin || isSuperAdmin ? React__default.createElement(material.IconButton, {
22330
22433
  color: "default",
22331
22434
  className: styles$5["action-btn"] + " bg-warning text-white me-2",
22332
22435
  onClick: function onClick() {
@@ -22343,7 +22446,7 @@ var UserList = function UserList(_ref) {
22343
22446
  }
22344
22447
  }, React__default.createElement(fa.FaEye, {
22345
22448
  size: 12
22346
- })), isAdmin && React__default.createElement(material.IconButton, {
22449
+ })), (isAdmin || isSuperAdmin) && React__default.createElement(material.IconButton, {
22347
22450
  onClick: function onClick() {
22348
22451
  return openDeleteDialog(i);
22349
22452
  },
@@ -22373,14 +22476,14 @@ var UserList = function UserList(_ref) {
22373
22476
  }), React__default.createElement(UserDialog, {
22374
22477
  open: openUserDialog,
22375
22478
  data: userDetail,
22376
- disabled: !isAdmin,
22479
+ disabled: !(isAdmin || isSuperAdmin),
22377
22480
  onClose: handleCloseUserDialog,
22378
22481
  onSubmitForm: handleCreateOrUpdateUser
22379
22482
  }), React__default.createElement(RecentUserActionDialog, {
22380
22483
  open: isOpenRecentUserActionDialog,
22381
22484
  onClose: handleCloseRecentUserActionDialog,
22382
22485
  recentUserActions: recentUserActions
22383
- }), isAdmin && React__default.createElement(DeleteUserCsvDialog, {
22486
+ }), (isAdmin || isSuperAdmin) && React__default.createElement(DeleteUserCsvDialog, {
22384
22487
  open: isOpenDeleteUserCsv,
22385
22488
  file: deleteFile,
22386
22489
  onChangeFile: handleChangeDeleteFile,
@@ -23692,9 +23795,6 @@ var TextbookDefaultQuery = {
23692
23795
  sortColumnDirection: exports.OrderType.ASC,
23693
23796
  sortColumnName: TextbookSortBy.Title
23694
23797
  };
23695
- var TEXTBOOK_URL$1 = "/teacher/teacher-admin/textbooks";
23696
- var ADMIN_TEXTBOOK_URL = "/textbooks";
23697
- var SUPER_ADMIN_TEXTBOOK_URL = "/personal/textbooks";
23698
23798
  var DEFAULT_TEXTBOOK = {
23699
23799
  name: "",
23700
23800
  chapters: []
@@ -23862,7 +23962,9 @@ var useTextbookDetail = function useTextbookDetail(props) {
23862
23962
  isReadonlyParam = props.isReadonlyParam,
23863
23963
  navigate = props.navigate,
23864
23964
  id = props.id,
23865
- isSuperAdmin = props.isSuperAdmin;
23965
+ isSuperAdmin = props.isSuperAdmin,
23966
+ onNavigateDetail = props.onNavigateDetail,
23967
+ onNavigateList = props.onNavigateList;
23866
23968
  var _useTranslation = reactI18next.useTranslation(),
23867
23969
  t = _useTranslation.t;
23868
23970
  var dispatch = reactRedux.useDispatch();
@@ -23895,7 +23997,6 @@ var useTextbookDetail = function useTextbookDetail(props) {
23895
23997
  var _useState9 = React.useState([]),
23896
23998
  categoryList = _useState9[0],
23897
23999
  setCategoryList = _useState9[1];
23898
- var textbookUrl = isSuperAdmin ? SUPER_ADMIN_TEXTBOOK_URL : role === exports.Role.Teacher ? TEXTBOOK_URL$1 : ADMIN_TEXTBOOK_URL;
23899
24000
  var isAdminSite = role === exports.Role.Admin;
23900
24001
  var user = reactRedux.useSelector(function (state) {
23901
24002
  var _state$common;
@@ -24455,10 +24556,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
24455
24556
  subjectId: textbook.subject.id
24456
24557
  };
24457
24558
  return Promise.resolve(createTextbookApi(_body)).then(function (res) {
24458
- var textbookId = res.data.id;
24459
- navigate(textbookUrl + "/" + textbookId, {
24460
- replace: true
24461
- });
24559
+ onNavigateDetail === null || onNavigateDetail === void 0 ? void 0 : onNavigateDetail(res.data, false, true);
24462
24560
  });
24463
24561
  }
24464
24562
  }();
@@ -24501,9 +24599,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
24501
24599
  }
24502
24600
  };
24503
24601
  var handleGoToTextbookList = function handleGoToTextbookList() {
24504
- navigate(textbookUrl, {
24505
- replace: true
24506
- });
24602
+ onNavigateList(true);
24507
24603
  };
24508
24604
  var textbookSubject = React.useMemo(function () {
24509
24605
  return textbook !== null && textbook !== void 0 && textbook.subject ? {
@@ -24899,7 +24995,8 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
24899
24995
  var _textbook$chapters;
24900
24996
  var navigate = props.navigate,
24901
24997
  as = props.as,
24902
- className = props.className;
24998
+ className = props.className,
24999
+ onNavigateDetail = props.onNavigateDetail;
24903
25000
  var _useTextbookDetail = useTextbookDetail(props),
24904
25001
  id = _useTextbookDetail.id,
24905
25002
  t = _useTextbookDetail.t,
@@ -24948,7 +25045,7 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
24948
25045
  }),
24949
25046
  categoryOptions = _useCategorySelect.categoryOptions;
24950
25047
  var Wrapper = as || material.Container;
24951
- if (isNotFound) return React__default.createElement(NotFound, {
25048
+ if (isNotFound || id && textbook.isPrepared) return React__default.createElement(NotFound, {
24952
25049
  history: navigate
24953
25050
  });
24954
25051
  return React__default.createElement(Wrapper, {
@@ -25028,7 +25125,7 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
25028
25125
  textbook: textbook,
25029
25126
  onBack: handleGoToTextbookList,
25030
25127
  onSave: handleCreateOrUpdateTextbook,
25031
- hideSave: !!id && isReadonly
25128
+ hideSave: !!id && isReadonly || !onNavigateDetail
25032
25129
  }))), React__default.createElement(material.Grid, {
25033
25130
  item: true,
25034
25131
  xs: 12,
@@ -25106,8 +25203,8 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
25106
25203
 
25107
25204
  var PAGE_TITLE$7 = "textbooks";
25108
25205
  var useTextbookList = function useTextbookList(props) {
25109
- var role = props.role,
25110
- navigate = props.navigate,
25206
+ var onNavigateCreate = props.onNavigateCreate,
25207
+ onNavigateDetail = props.onNavigateDetail,
25111
25208
  isSuperAdmin = props.isSuperAdmin;
25112
25209
  var _useList = useList(function (search) {
25113
25210
  return getTextbookListApi(search, isSuperAdmin);
@@ -25125,21 +25222,15 @@ var useTextbookList = function useTextbookList(props) {
25125
25222
  getData = _useList.getData;
25126
25223
  var _useTranslation = reactI18next.useTranslation(),
25127
25224
  t = _useTranslation.t;
25128
- var textbookUrl = isSuperAdmin ? SUPER_ADMIN_TEXTBOOK_URL : role === exports.Role.Teacher ? TEXTBOOK_URL$1 : ADMIN_TEXTBOOK_URL;
25129
25225
  var dispatch = reactRedux.useDispatch();
25130
- var handleViewTextbook = function handleViewTextbook(id) {
25131
- console.log(textbookUrl + "/" + id);
25132
- navigate(textbookUrl + "/" + id + "?readonly=true", {
25133
- replace: true
25134
- });
25226
+ var handleViewTextbook = function handleViewTextbook(data) {
25227
+ onNavigateDetail(data, true, true);
25135
25228
  };
25136
- var handleUpdateTextbook = function handleUpdateTextbook(id) {
25137
- navigate(textbookUrl + "/" + id, {
25138
- replace: true
25139
- });
25229
+ var handleUpdateTextbook = function handleUpdateTextbook(data) {
25230
+ onNavigateDetail(data, false, true);
25140
25231
  };
25141
25232
  var handleCreateTextbook = function handleCreateTextbook() {
25142
- pushTo(navigate, textbookUrl + "/create");
25233
+ onNavigateCreate === null || onNavigateCreate === void 0 ? void 0 : onNavigateCreate();
25143
25234
  };
25144
25235
  var toggleConfirmDialog = function toggleConfirmDialog() {
25145
25236
  handleChangeSelectedItem(undefined);
@@ -25368,7 +25459,7 @@ var useTextbookShare = function useTextbookShare(props) {
25368
25459
  var getData = props.getData,
25369
25460
  role = props.role,
25370
25461
  isSuperAdmin = props.isSuperAdmin;
25371
- var _useList = useList(role === exports.Role.Teacher ? function (search) {
25462
+ var _useList = useList(!isSuperAdmin ? function (search) {
25372
25463
  return getTeacherListApi$1(search);
25373
25464
  } : null, DefaultTeacherQuery),
25374
25465
  filterShare = _useList.filter,
@@ -25408,8 +25499,10 @@ var useTextbookShare = function useTextbookShare(props) {
25408
25499
  var _state$common;
25409
25500
  return (state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user) || {};
25410
25501
  });
25411
- var isAdmin = infoUser === null || infoUser === void 0 ? void 0 : (_infoUser$roles = infoUser.roles) === null || _infoUser$roles === void 0 ? void 0 : _infoUser$roles.includes(exports.Role.Admin);
25502
+ var isAdmin = infoUser && (infoUser === null || infoUser === void 0 ? void 0 : (_infoUser$roles = infoUser.roles) === null || _infoUser$roles === void 0 ? void 0 : _infoUser$roles.includes(exports.Role.Admin));
25412
25503
  var isAdminSite = role === exports.Role.Admin;
25504
+ var onAcademy = !!infoUser.academyDomain;
25505
+ var isSuperAdminUser = infoUser && infoUser.isSuperAdmin;
25413
25506
  React.useEffect(function () {
25414
25507
  if (!isUpdate) {
25415
25508
  filterTeacherNotShared(currentModel);
@@ -25418,6 +25511,8 @@ var useTextbookShare = function useTextbookShare(props) {
25418
25511
  }
25419
25512
  }, [teachers, isUpdate]);
25420
25513
  var handleOpenShareDialog = function handleOpenShareDialog(textbook) {
25514
+ if (textSearchShareRef.current) textSearchShareRef.current.value = "";
25515
+ getData();
25421
25516
  setIsUpdate(false);
25422
25517
  setOpenShareDialog(true);
25423
25518
  setCurrentModel(textbook);
@@ -25442,6 +25537,8 @@ var useTextbookShare = function useTextbookShare(props) {
25442
25537
  setSelectedShare([]);
25443
25538
  };
25444
25539
  var handleOpenUpdateShareDialog = function handleOpenUpdateShareDialog(textbook) {
25540
+ if (textSearchShareRef.current) textSearchShareRef.current.value = "";
25541
+ getData();
25445
25542
  setIsUpdate(true);
25446
25543
  setOpenShareDialog(true);
25447
25544
  setCurrentModel(textbook);
@@ -25496,8 +25593,11 @@ var useTextbookShare = function useTextbookShare(props) {
25496
25593
  });
25497
25594
  setShared(existsTeachers);
25498
25595
  };
25499
- var handleDisable = function handleDisable(textbook) {
25500
- return isAdmin && !isAdminSite || !isAdmin && (!textbook.isShared || textbook.createdBy.id != infoUser.id) || isSuperAdmin;
25596
+ var enabledSave = function enabledSave(textbook) {
25597
+ return isAdminSite || isSuperAdmin || isSuperAdminUser || !isAdmin && textbook.isShared && textbook.createdBy.id === infoUser.id;
25598
+ };
25599
+ var enabledShare = function enabledShare(textbook) {
25600
+ return textbook.isShared && onAcademy && (isAdminSite || isSuperAdminUser || !isAdmin && textbook.createdBy.id === infoUser.id);
25501
25601
  };
25502
25602
  var handleShareTextbook = function handleShareTextbook(teacherIds, textbookId) {
25503
25603
  try {
@@ -25575,13 +25675,16 @@ var useTextbookShare = function useTextbookShare(props) {
25575
25675
  isUpdate: isUpdate,
25576
25676
  handleUpdateSharedTextbook: handleUpdateSharedTextbook,
25577
25677
  currentModel: currentModel,
25578
- handleDisable: handleDisable,
25678
+ enabledSave: enabledSave,
25679
+ enabledShare: enabledShare,
25579
25680
  isAdmin: isAdmin,
25580
25681
  isAdminSite: isAdminSite
25581
25682
  };
25582
25683
  };
25583
25684
 
25584
25685
  var TextbookList = function TextbookList(props) {
25686
+ var _props$createable = props.createable,
25687
+ createable = _props$createable === void 0 ? true : _props$createable;
25585
25688
  var _useTranslation = reactI18next.useTranslation(),
25586
25689
  t = _useTranslation.t;
25587
25690
  var _useTextbookList = useTextbookList(props),
@@ -25627,9 +25730,8 @@ var TextbookList = function TextbookList(props) {
25627
25730
  isUpdate = _useTextbookShare.isUpdate,
25628
25731
  handleUpdateSharedTextbook = _useTextbookShare.handleUpdateSharedTextbook,
25629
25732
  currentModel = _useTextbookShare.currentModel,
25630
- handleDisable = _useTextbookShare.handleDisable,
25631
- isAdmin = _useTextbookShare.isAdmin,
25632
- isAdminSite = _useTextbookShare.isAdminSite;
25733
+ enabledSave = _useTextbookShare.enabledSave,
25734
+ enabledShare = _useTextbookShare.enabledShare;
25633
25735
  return React__default.createElement(LayoutList, {
25634
25736
  title: t(TEXTBOOK_PAGE_TITLE)
25635
25737
  }, React__default.createElement(material.Grid, {
@@ -25651,14 +25753,14 @@ var TextbookList = function TextbookList(props) {
25651
25753
  justifyContent: "flex-end"
25652
25754
  },
25653
25755
  spacing: 2
25654
- }, (!isAdmin || isAdminSite) && React__default.createElement(material.Button, {
25756
+ }, createable && React__default.createElement(material.Button, {
25655
25757
  startIcon: React__default.createElement(fa.FaPlus, {
25656
25758
  size: 12
25657
25759
  }),
25658
25760
  variant: "contained",
25659
25761
  color: "primary",
25660
25762
  onClick: handleCreateTextbook,
25661
- className: (isAdmin && !isAdminSite ? "bg-secondary" : "bg-success") + " text-white"
25763
+ className: "bg-success text-white"
25662
25764
  }, t("create_textbook")))), React__default.createElement(material.Grid, {
25663
25765
  item: true,
25664
25766
  xs: 12,
@@ -25680,32 +25782,32 @@ var TextbookList = function TextbookList(props) {
25680
25782
  alignItems: "center"
25681
25783
  }, React__default.createElement(material.IconButton, {
25682
25784
  color: "default",
25683
- className: (handleDisable(i) ? "bg-secondary" : "bg-warning") + " text-white",
25785
+ className: (!enabledSave(i) ? "bg-secondary" : "bg-warning") + " text-white",
25684
25786
  onClick: function onClick() {
25685
- return handleUpdateTextbook(i.id);
25787
+ return handleUpdateTextbook(i);
25686
25788
  },
25687
- disabled: handleDisable(i)
25789
+ disabled: !enabledSave(i)
25688
25790
  }, React__default.createElement(fa6.FaPencil, {
25689
25791
  size: 12
25690
25792
  })), React__default.createElement(material.IconButton, {
25691
25793
  color: "default",
25692
25794
  className: "bg-primary text-white",
25693
25795
  onClick: function onClick() {
25694
- return handleViewTextbook(i.id);
25796
+ return handleViewTextbook(i);
25695
25797
  }
25696
25798
  }, React__default.createElement(fa.FaEye, {
25697
25799
  size: 12
25698
25800
  })), React__default.createElement(material.IconButton, {
25699
- disabled: handleDisable(i) || isAdmin,
25700
- className: (handleDisable(i) || isAdmin ? "bg-secondary" : "bg-info") + " text-white me-1",
25801
+ disabled: !enabledShare(i),
25802
+ className: (!enabledShare(i) ? "bg-secondary" : "bg-info") + " text-white me-1",
25701
25803
  onClick: function onClick() {
25702
25804
  return handleOpenShareDialog(i);
25703
25805
  }
25704
25806
  }, React__default.createElement(fa.FaShare, {
25705
25807
  size: 12
25706
25808
  })), React__default.createElement(material.IconButton, {
25707
- disabled: handleDisable(i) || isAdmin,
25708
- className: (handleDisable(i) || isAdmin ? "bg-secondary" : "bg-success") + " text-white me-1",
25809
+ disabled: !enabledShare(i),
25810
+ className: (!enabledShare(i) ? "bg-secondary" : "bg-success") + " text-white me-1",
25709
25811
  onClick: function onClick() {
25710
25812
  return handleOpenUpdateShareDialog(i);
25711
25813
  }
@@ -25713,11 +25815,11 @@ var TextbookList = function TextbookList(props) {
25713
25815
  size: 12
25714
25816
  })), React__default.createElement(material.IconButton, {
25715
25817
  color: "default",
25716
- className: (handleDisable(i) ? "bg-secondary" : "bg-danger") + " text-white mr-1",
25818
+ className: (!enabledSave(i) ? "bg-secondary" : "bg-danger") + " text-white mr-1",
25717
25819
  onClick: function onClick() {
25718
25820
  return handleSelectDeleteTextbook(i);
25719
25821
  },
25720
- disabled: handleDisable(i)
25822
+ disabled: !enabledSave(i)
25721
25823
  }, React__default.createElement(fa.FaTrash, {
25722
25824
  size: 12
25723
25825
  })))));
@@ -27482,8 +27584,8 @@ var CourseSelector = function CourseSelector(_ref) {
27482
27584
  }));
27483
27585
  };
27484
27586
 
27485
- var TEXTBOOK_URL$2 = BASE_URL + "/api/textbooks";
27486
- var SUPER_ADMIN_TEXTBOOK_URL$1 = SUPER_ADMIN_BASE_URL + "/api/textbook";
27587
+ var TEXTBOOK_URL$1 = BASE_URL + "/api/textbooks";
27588
+ var SUPER_ADMIN_TEXTBOOK_URL = SUPER_ADMIN_BASE_URL + "/api/textbook";
27487
27589
  var PREPARED_TEXTBOOK_URL = BASE_URL + "/api/textbooks/prepared-textbooks";
27488
27590
  var SUPER_ADMIN_PREPARED_TEXTBOOK_URL = SUPER_ADMIN_BASE_URL + "/api/textbook/prepared-textbooks";
27489
27591
  var FILE_URL = BASE_URL + "/api/file/images";
@@ -27492,7 +27594,7 @@ var uploadImageFileApi = function uploadImageFileApi(formData, isAdmin) {
27492
27594
  return apiUpload.post("" + (isAdmin ? SUPER_FILE_URL : FILE_URL), formData);
27493
27595
  };
27494
27596
  var getTextbookDetailApi = function getTextbookDetailApi(id, isAdmin) {
27495
- return api.get((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : TEXTBOOK_URL$2) + "/" + id);
27597
+ return api.get((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : TEXTBOOK_URL$1) + "/" + id);
27496
27598
  };
27497
27599
  var getTextbookListApi$1 = function getTextbookListApi(query, isAdmin) {
27498
27600
  return api.get("" + (isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : PREPARED_TEXTBOOK_URL), {
@@ -27506,14 +27608,14 @@ var updateTextbookApi$1 = function updateTextbookApi(values, id, isAdmin) {
27506
27608
  return api.put((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : PREPARED_TEXTBOOK_URL) + "/" + id, values);
27507
27609
  };
27508
27610
  var getAcademyByTeacher = function getAcademyByTeacher(email, isAdmin) {
27509
- return api.get((isAdmin ? SUPER_ADMIN_TEXTBOOK_URL$1 : TEXTBOOK_URL$2) + "/academy-teacher-owner", {
27611
+ return api.get((isAdmin ? SUPER_ADMIN_TEXTBOOK_URL : TEXTBOOK_URL$1) + "/academy-teacher-owner", {
27510
27612
  params: {
27511
27613
  email: email
27512
27614
  }
27513
27615
  });
27514
27616
  };
27515
27617
  var deleteTextbookApi$1 = function deleteTextbookApi(textbookId, isAdmin) {
27516
- return api["delete"]((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : TEXTBOOK_URL$2) + "/" + textbookId);
27618
+ return api["delete"]((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : TEXTBOOK_URL$1) + "/" + textbookId);
27517
27619
  };
27518
27620
 
27519
27621
  var useSelect = function useSelect(_ref) {
@@ -27762,8 +27864,8 @@ var TextbookOwners = function TextbookOwners(_ref) {
27762
27864
  };
27763
27865
 
27764
27866
  var useTextbookManagement = function useTextbookManagement(_ref) {
27765
- var navigate = _ref.navigate,
27766
- textbookId = _ref.textbookId;
27867
+ var textbookId = _ref.textbookId,
27868
+ onNavigateList = _ref.onNavigateList;
27767
27869
  var _useTranslation = reactI18next.useTranslation(),
27768
27870
  t = _useTranslation.t;
27769
27871
  var theme = material.useTheme();
@@ -27782,7 +27884,6 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
27782
27884
  return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
27783
27885
  });
27784
27886
  var isSuperAdmin = !!user && !user.academyDomain;
27785
- var isTeacher = ((user === null || user === void 0 ? void 0 : user.roles) || []).includes(exports.Role.Teacher);
27786
27887
  var handleOpenDialog = function handleOpenDialog(item) {
27787
27888
  if (item) {
27788
27889
  setSelectedTextbook(item);
@@ -27845,7 +27946,7 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
27845
27946
  }), isSuperAdmin)).then(function (res) {
27846
27947
  if (res !== null && res !== void 0 && res.data) {
27847
27948
  reactToastify.toast.success(t(!(selectedTextbook !== null && selectedTextbook !== void 0 && selectedTextbook.id) ? "create_the_textbook_successfully" : "update_the_textbook_successfully"));
27848
- pushTo(navigate, !isTeacher ? isSuperAdmin ? "/super-textbook-management" : "/textbook-management" : "/teacher/prepared-exam");
27949
+ onNavigateList();
27849
27950
  }
27850
27951
  });
27851
27952
  }, function (error) {
@@ -27948,7 +28049,8 @@ var schema$4 = function schema(t) {
27948
28049
  };
27949
28050
  var PreparedTextbook = function PreparedTextbook(_ref) {
27950
28051
  var _selectedTextbook$sub, _selectedTextbook$cha;
27951
- var navigate = _ref.navigate,
28052
+ var onNavigateList = _ref.onNavigateList,
28053
+ navigate = _ref.navigate,
27952
28054
  textbookId = _ref.textbookId;
27953
28055
  var _useTextbookState = useTextbookState(),
27954
28056
  isAdmin = _useTextbookState.isAdmin,
@@ -27958,7 +28060,7 @@ var PreparedTextbook = function PreparedTextbook(_ref) {
27958
28060
  handleSetChapterSection = _useTextbookState.handleSetChapterSection,
27959
28061
  handleSetSubChapterSection = _useTextbookState.handleSetSubChapterSection;
27960
28062
  var _useTextbookManagemen = useTextbookManagement({
27961
- navigate: navigate,
28063
+ onNavigateList: onNavigateList,
27962
28064
  textbookId: textbookId
27963
28065
  }),
27964
28066
  t = _useTextbookManagemen.t,
@@ -27967,6 +28069,9 @@ var PreparedTextbook = function PreparedTextbook(_ref) {
27967
28069
  selectedTextbook = _useTextbookManagemen.selectedTextbook,
27968
28070
  handleSubmit = _useTextbookManagemen.handleSubmit,
27969
28071
  handleUploadImage = _useTextbookManagemen.handleUploadImage;
28072
+ if (textbookId && selectedTextbook && !selectedTextbook.isPrepared) return React__default.createElement(NotFound, {
28073
+ history: navigate
28074
+ });
27970
28075
  return React__default.createElement(formik.Formik, {
27971
28076
  initialValues: {
27972
28077
  name: (selectedTextbook === null || selectedTextbook === void 0 ? void 0 : selectedTextbook.name) || "",
@@ -28634,15 +28739,14 @@ var DeleteTextbookDialog = function DeleteTextbookDialog(_ref) {
28634
28739
  };
28635
28740
 
28636
28741
  var PreparedTextbookList = function PreparedTextbookList(_ref) {
28637
- var navigate = _ref.navigate;
28742
+ var onNavigateDetail = _ref.onNavigateDetail,
28743
+ onNavigteCreate = _ref.onNavigteCreate;
28638
28744
  var _useTextbookList = useTextbookList$1(),
28639
28745
  t = _useTextbookList.t,
28640
28746
  theme = _useTextbookList.theme,
28641
28747
  filter = _useTextbookList.filter,
28642
28748
  paging = _useTextbookList.paging,
28643
- isTeacher = _useTextbookList.isTeacher,
28644
28749
  textbooks = _useTextbookList.textbooks,
28645
- isSuperAdmin = _useTextbookList.isSuperAdmin,
28646
28750
  handleChangePage = _useTextbookList.handleChangePage,
28647
28751
  handleSort = _useTextbookList.handleSort,
28648
28752
  openConfirmDialog = _useTextbookList.openConfirmDialog,
@@ -28663,9 +28767,7 @@ var PreparedTextbookList = function PreparedTextbookList(_ref) {
28663
28767
  sx: {
28664
28768
  width: "fit-content"
28665
28769
  },
28666
- onClick: function onClick() {
28667
- return pushTo(navigate, !isTeacher ? isSuperAdmin ? "/super-textbook-management/create" : "/textbook-management/create" : "/teacher/textbook-management/create");
28668
- }
28770
+ onClick: onNavigteCreate
28669
28771
  }, t("create"))), React__default.createElement(material.Stack, null, React__default.createElement(material.Grid, {
28670
28772
  item: true,
28671
28773
  xs: 12
@@ -28712,7 +28814,7 @@ var PreparedTextbookList = function PreparedTextbookList(_ref) {
28712
28814
  color: "default",
28713
28815
  className: styles$9["action-btn"] + " bg-warning text-white me-2",
28714
28816
  onClick: function onClick() {
28715
- return pushTo(navigate, !isTeacher ? isSuperAdmin ? "/super-textbook-management/" + i.id + "/detail" : "/textbook-management/" + i.id + "/detail" : "/teacher/textbook-management/" + i.id + "/detail");
28817
+ return onNavigateDetail(i);
28716
28818
  }
28717
28819
  }, React__default.createElement(hi.HiOutlinePencilAlt, {
28718
28820
  className: styles$9["action-btn--pencil"],
@@ -28876,7 +28978,7 @@ var DefaultFilter = {
28876
28978
  };
28877
28979
 
28878
28980
  var PREPARED_TEXTBOOK_URL$1 = BASE_URL + "/api/textbooks/prepared-textbooks";
28879
- var TEXTBOOK_URL$3 = BASE_URL + "/api/textbooks";
28981
+ var TEXTBOOK_URL$2 = BASE_URL + "/api/textbooks";
28880
28982
  var TEXTBOOK_SESSION_URL$1 = BASE_URL + "/api/textbooksession";
28881
28983
  var getTextbookListApi$2 = function getTextbookListApi(query) {
28882
28984
  return api.get("" + PREPARED_TEXTBOOK_URL$1, {
@@ -28890,7 +28992,7 @@ var startPageApi = function startPageApi(value) {
28890
28992
  return api.post(TEXTBOOK_SESSION_URL$1 + "/study-textbook", _extends({}, value));
28891
28993
  };
28892
28994
  var deleteTextbookApi$2 = function deleteTextbookApi(textbookId) {
28893
- return api["delete"](TEXTBOOK_URL$3 + "/" + textbookId);
28995
+ return api["delete"](TEXTBOOK_URL$2 + "/" + textbookId);
28894
28996
  };
28895
28997
 
28896
28998
  var ADMIN_SUBJECT_URL$2 = SUPER_ADMIN_BASE_URL + "/api/subject";
@@ -28960,17 +29062,29 @@ var usePreparedExam = function usePreparedExam(_ref) {
28960
29062
  var _state$common3, _state$common3$user;
28961
29063
  return state === null || state === void 0 ? void 0 : (_state$common3 = state.common) === null || _state$common3 === void 0 ? void 0 : (_state$common3$user = _state$common3.user) === null || _state$common3$user === void 0 ? void 0 : _state$common3$user.academyDomain;
28962
29064
  });
28963
- var isTeacher = reactRedux.useSelector(function (state) {
29065
+ var isStudent = reactRedux.useSelector(function (state) {
28964
29066
  var _state$common4, _state$common4$user;
28965
29067
  return (state === null || state === void 0 ? void 0 : (_state$common4 = state.common) === null || _state$common4 === void 0 ? void 0 : (_state$common4$user = _state$common4.user) === null || _state$common4$user === void 0 ? void 0 : _state$common4$user.roles) || [];
29068
+ }).includes(exports.Role.Student);
29069
+ var isTeacher = reactRedux.useSelector(function (state) {
29070
+ var _state$common5, _state$common5$user;
29071
+ return (state === null || state === void 0 ? void 0 : (_state$common5 = state.common) === null || _state$common5 === void 0 ? void 0 : (_state$common5$user = _state$common5.user) === null || _state$common5$user === void 0 ? void 0 : _state$common5$user.roles) || [];
28966
29072
  }).includes(exports.Role.Teacher);
28967
29073
  var _useState5 = React.useState(false),
28968
29074
  openConfirmDialog = _useState5[0],
28969
29075
  setOpenConfirmDialog = _useState5[1];
28970
- var isSuperAdmin = reactRedux.useSelector(function (state) {
28971
- var _state$common5, _state$common5$user;
28972
- return (state === null || state === void 0 ? void 0 : (_state$common5 = state.common) === null || _state$common5 === void 0 ? void 0 : (_state$common5$user = _state$common5.user) === null || _state$common5$user === void 0 ? void 0 : _state$common5$user.roles) || [];
29076
+ var isSuperAdminDomain = reactRedux.useSelector(function (state) {
29077
+ var _state$common6, _state$common6$user;
29078
+ return (state === null || state === void 0 ? void 0 : (_state$common6 = state.common) === null || _state$common6 === void 0 ? void 0 : (_state$common6$user = _state$common6.user) === null || _state$common6$user === void 0 ? void 0 : _state$common6$user.roles) || [];
28973
29079
  }).includes(exports.Role.Admin) && !isDomain;
29080
+ var isAdmin = reactRedux.useSelector(function (state) {
29081
+ var _state$common7, _state$common7$user;
29082
+ return (state === null || state === void 0 ? void 0 : (_state$common7 = state.common) === null || _state$common7 === void 0 ? void 0 : (_state$common7$user = _state$common7.user) === null || _state$common7$user === void 0 ? void 0 : _state$common7$user.roles) || [];
29083
+ }).includes(exports.Role.Admin);
29084
+ var isSuperAdmin = reactRedux.useSelector(function (state) {
29085
+ var _state$common8, _state$common8$user;
29086
+ return state === null || state === void 0 ? void 0 : (_state$common8 = state.common) === null || _state$common8 === void 0 ? void 0 : (_state$common8$user = _state$common8.user) === null || _state$common8$user === void 0 ? void 0 : _state$common8$user.isSuperAdmin;
29087
+ });
28974
29088
  var handleCloseConfirmDialog = function handleCloseConfirmDialog() {
28975
29089
  setOpenConfirmDialog(false);
28976
29090
  };
@@ -28984,7 +29098,7 @@ var usePreparedExam = function usePreparedExam(_ref) {
28984
29098
  };
28985
29099
  setLoading(true);
28986
29100
  var _temp = _catch(function () {
28987
- return Promise.resolve(isSuperAdmin ? getSubjectListAdminApi$2("") : getSubjectListApi$2("")).then(function (res) {
29101
+ return Promise.resolve(isSuperAdminDomain ? getSubjectListAdminApi$2("") : getSubjectListApi$2("")).then(function (res) {
28988
29102
  var _res$data$items = res.data.items,
28989
29103
  items = _res$data$items === void 0 ? [] : _res$data$items;
28990
29104
  setSubjects(items);
@@ -28996,7 +29110,7 @@ var usePreparedExam = function usePreparedExam(_ref) {
28996
29110
  } catch (e) {
28997
29111
  return Promise.reject(e);
28998
29112
  }
28999
- }, [isSuperAdmin]);
29113
+ }, [isSuperAdminDomain]);
29000
29114
  var subjectOptions = subjects.map(function (subject) {
29001
29115
  return {
29002
29116
  label: "" + subject.name,
@@ -29137,7 +29251,10 @@ var usePreparedExam = function usePreparedExam(_ref) {
29137
29251
  isKor: isKor,
29138
29252
  paging: paging,
29139
29253
  user: user,
29254
+ isAdmin: isAdmin,
29140
29255
  isTeacher: isTeacher,
29256
+ isStudent: isStudent,
29257
+ isSuperAdmin: isSuperAdmin,
29141
29258
  monthOptions: monthOptions,
29142
29259
  openConfirmDialog: openConfirmDialog,
29143
29260
  handleOpenConfirmDialog: handleOpenConfirmDialog,
@@ -29313,7 +29430,7 @@ var useTextbookDrawer = function useTextbookDrawer(_ref) {
29313
29430
  };
29314
29431
  var handleRedirectEdit = function handleRedirectEdit() {
29315
29432
  if (!textbookId) return;
29316
- pushTo(navigate, "/teacher/textbook-management/" + textbookId + "/detail");
29433
+ pushTo(navigate, "/teacher/prepared-exam/" + textbookId + "/detail");
29317
29434
  };
29318
29435
  var handleStartFromPage = function handleStartFromPage(values) {
29319
29436
  try {
@@ -29863,7 +29980,7 @@ var Statistic = function Statistic(_ref) {
29863
29980
  fontSize: "12px",
29864
29981
  fontWeight: 500,
29865
29982
  color: styles.darker
29866
- }, (chapter.completedChapterQuestions || 0) / (chapter.totalChapterQuestions || 0) * 100 + "%")), React__default.createElement(material.Stack, {
29983
+ }, ((chapter.completedChapterQuestions || 0) / (chapter.totalChapterQuestions || 0) * 100).toFixed(2) + "%")), React__default.createElement(material.Stack, {
29867
29984
  sx: {
29868
29985
  width: "1px",
29869
29986
  position: "absolute",
@@ -30066,7 +30183,7 @@ var TextbookDrawer = function TextbookDrawer(_ref) {
30066
30183
  fontSize: "12px",
30067
30184
  fontWeight: 500,
30068
30185
  color: (textbook === null || textbook === void 0 ? void 0 : textbook.progress) === 0 ? theme.palette.common.black : theme.palette.common.white
30069
- }, ((textbook === null || textbook === void 0 ? void 0 : textbook.progress) || 0) + "%")))), !!(textbook !== null && textbook !== void 0 && textbook.chapters.length) && React__default.createElement(material.Stack, null, React__default.createElement(material.Box, {
30186
+ }, ((textbook === null || textbook === void 0 ? void 0 : textbook.progress) || 0).toFixed(2) + "%")))), !!(textbook !== null && textbook !== void 0 && textbook.chapters.length) && React__default.createElement(material.Stack, null, React__default.createElement(material.Box, {
30070
30187
  mt: "24px",
30071
30188
  mx: "24px",
30072
30189
  bgcolor: theme.palette.common.white,
@@ -30375,8 +30492,10 @@ var TextbookDetail = function TextbookDetail(_ref) {
30375
30492
  };
30376
30493
 
30377
30494
  var TextbookInfoDrawer = function TextbookInfoDrawer(_ref) {
30378
- var _TeacherTabList$find;
30379
- var isOpen = _ref.isOpen,
30495
+ var _textbook$createdBy, _TeacherTabList$find;
30496
+ var user = _ref.user,
30497
+ isSuperAdmin = _ref.isSuperAdmin,
30498
+ isOpen = _ref.isOpen,
30380
30499
  onClose = _ref.onClose,
30381
30500
  textbookId = _ref.textbookId,
30382
30501
  navigate = _ref.navigate,
@@ -30417,7 +30536,9 @@ var TextbookInfoDrawer = function TextbookInfoDrawer(_ref) {
30417
30536
  }, React__default.createElement(io5.IoClose, {
30418
30537
  color: styles.gray_700,
30419
30538
  size: 32
30420
- })), React__default.createElement(material.Stack, {
30539
+ })), (isSuperAdmin || (textbook === null || textbook === void 0 ? void 0 : textbook.isShared) && ((textbook === null || textbook === void 0 ? void 0 : (_textbook$createdBy = textbook.createdBy) === null || _textbook$createdBy === void 0 ? void 0 : _textbook$createdBy.id) === (user === null || user === void 0 ? void 0 : user.id) || textbook.textbookOwners.some(function (i) {
30540
+ return i.id === (user === null || user === void 0 ? void 0 : user.id);
30541
+ }))) && React__default.createElement(material.Stack, {
30421
30542
  flexDirection: "row",
30422
30543
  gap: "16px",
30423
30544
  alignItems: "center"
@@ -30486,10 +30607,13 @@ var TextbookInfoDrawer = function TextbookInfoDrawer(_ref) {
30486
30607
  };
30487
30608
 
30488
30609
  var Textbook = function Textbook(_ref) {
30610
+ var _textbook$createdBy, _textbook$createdBy2;
30489
30611
  var t = _ref.t,
30612
+ user = _ref.user,
30490
30613
  theme = _ref.theme,
30491
30614
  textbook = _ref.textbook,
30492
- isTeacher = _ref.isTeacher,
30615
+ isStudent = _ref.isStudent,
30616
+ isSuperAdmin = _ref.isSuperAdmin,
30493
30617
  navigate = _ref.navigate,
30494
30618
  preparedType = _ref.preparedType,
30495
30619
  preparedFilterType = _ref.preparedFilterType,
@@ -30568,7 +30692,7 @@ var Textbook = function Textbook(_ref) {
30568
30692
  }, React__default.createElement(material.Stack, {
30569
30693
  flexDirection: "row",
30570
30694
  gap: "10px"
30571
- }, !isTeacher && React__default.createElement(material.Button, {
30695
+ }, isStudent && React__default.createElement(material.Button, {
30572
30696
  variant: "contained",
30573
30697
  sx: {
30574
30698
  width: "fit-content",
@@ -30581,7 +30705,9 @@ var Textbook = function Textbook(_ref) {
30581
30705
  onClick: handleOpenDialog
30582
30706
  }, React__default.createElement(fa.FaBookOpen, {
30583
30707
  size: "20px"
30584
- }), t("test_start")), isTeacher && React__default.createElement(material.Button, {
30708
+ }), t("test_start")), (isSuperAdmin || textbook.isShared && ((textbook === null || textbook === void 0 ? void 0 : (_textbook$createdBy = textbook.createdBy) === null || _textbook$createdBy === void 0 ? void 0 : _textbook$createdBy.id) === (user === null || user === void 0 ? void 0 : user.id) || textbook.textbookOwners.some(function (i) {
30709
+ return i.id === (user === null || user === void 0 ? void 0 : user.id);
30710
+ }))) && React__default.createElement(material.Button, {
30585
30711
  variant: "outlined",
30586
30712
  sx: {
30587
30713
  width: "fit-content",
@@ -30592,11 +30718,11 @@ var Textbook = function Textbook(_ref) {
30592
30718
  maxHeight: "41px"
30593
30719
  },
30594
30720
  onClick: function onClick() {
30595
- return pushTo(navigate, "/teacher/textbook-management/" + (textbook === null || textbook === void 0 ? void 0 : textbook.id) + "/detail");
30721
+ return pushTo(navigate, "/teacher/prepared-exam/" + (textbook === null || textbook === void 0 ? void 0 : textbook.id) + "/detail");
30596
30722
  }
30597
30723
  }, React__default.createElement(fa.FaBookOpen, {
30598
30724
  size: "20px"
30599
- }), t("test_editing")), isTeacher && React__default.createElement(material.Button, {
30725
+ }), t("test_editing")), !isStudent && React__default.createElement(material.Button, {
30600
30726
  variant: "contained",
30601
30727
  sx: {
30602
30728
  width: "fit-content",
@@ -30611,7 +30737,9 @@ var Textbook = function Textbook(_ref) {
30611
30737
  }
30612
30738
  }, React__default.createElement(io5.IoInformationCircle, {
30613
30739
  size: "20px"
30614
- }), t("exam_information"))), isTeacher && React__default.createElement(material.Button, {
30740
+ }), t("exam_information"))), (isSuperAdmin || (textbook === null || textbook === void 0 ? void 0 : textbook.isShared) && ((textbook === null || textbook === void 0 ? void 0 : (_textbook$createdBy2 = textbook.createdBy) === null || _textbook$createdBy2 === void 0 ? void 0 : _textbook$createdBy2.id) === (user === null || user === void 0 ? void 0 : user.id) || textbook.textbookOwners.some(function (i) {
30741
+ return i.id === (user === null || user === void 0 ? void 0 : user.id);
30742
+ }))) && React__default.createElement(material.Button, {
30615
30743
  variant: "contained",
30616
30744
  sx: {
30617
30745
  width: "fit-content",
@@ -30633,6 +30761,8 @@ var Textbook = function Textbook(_ref) {
30633
30761
  textbookId: textbook.id,
30634
30762
  navigate: navigate
30635
30763
  }), openDetailDialog && React__default.createElement(TextbookInfoDrawer, {
30764
+ user: user,
30765
+ isSuperAdmin: isSuperAdmin,
30636
30766
  isOpen: openDetailDialog,
30637
30767
  onClose: handleCloseDetailDialog,
30638
30768
  textbookId: textbook.id,
@@ -30663,9 +30793,12 @@ var PreparedItem = function PreparedItem(_ref) {
30663
30793
  history: history
30664
30794
  }),
30665
30795
  t = _usePreparedExam.t,
30796
+ user = _usePreparedExam.user,
30666
30797
  theme = _usePreparedExam.theme,
30667
30798
  paging = _usePreparedExam.paging,
30668
- isTeacher = _usePreparedExam.isTeacher,
30799
+ isAdmin = _usePreparedExam.isAdmin,
30800
+ isStudent = _usePreparedExam.isStudent,
30801
+ isSuperAdmin = _usePreparedExam.isSuperAdmin,
30669
30802
  handleChangePage = _usePreparedExam.handleChangePage,
30670
30803
  textbookList = _usePreparedExam.textbookList,
30671
30804
  getTextbookList = _usePreparedExam.getTextbookList,
@@ -30822,7 +30955,7 @@ var PreparedItem = function PreparedItem(_ref) {
30822
30955
  },
30823
30956
  onClick: handleToggleExpand,
30824
30957
  startIcon: React__default.createElement(io.IoIosArrowDown, null)
30825
- }, t("fold"))), isTeacher && React__default.createElement(material.Stack, null, React__default.createElement(material.Button, {
30958
+ }, t("fold"))), !isStudent && !isAdmin && React__default.createElement(material.Stack, null, React__default.createElement(material.Button, {
30826
30959
  variant: "contained",
30827
30960
  sx: {
30828
30961
  width: "fit-content",
@@ -30833,7 +30966,7 @@ var PreparedItem = function PreparedItem(_ref) {
30833
30966
  marginRight: "27px"
30834
30967
  },
30835
30968
  onClick: function onClick() {
30836
- return pushTo(navigate, "/teacher/textbook-management/create");
30969
+ return pushTo(navigate, "/teacher/prepared-exam/create");
30837
30970
  }
30838
30971
  }, React__default.createElement(io5.IoAddCircle, null), t("create_a_new_workbook"))))), React__default.createElement(material.AccordionDetails, {
30839
30972
  sx: {
@@ -31176,9 +31309,11 @@ var PreparedItem = function PreparedItem(_ref) {
31176
31309
  }, textbookList === null || textbookList === void 0 ? void 0 : textbookList.map(function (textbook) {
31177
31310
  return React__default.createElement(Textbook, {
31178
31311
  t: t,
31312
+ user: user,
31179
31313
  theme: theme,
31180
31314
  textbook: textbook,
31181
- isTeacher: isTeacher,
31315
+ isSuperAdmin: isSuperAdmin,
31316
+ isStudent: isStudent,
31182
31317
  navigate: navigate,
31183
31318
  getTextbookList: getTextbookList,
31184
31319
  preparedType: preparedType,
@@ -31227,6 +31362,7 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
31227
31362
  var isAdmin = role === exports.Role.Admin;
31228
31363
  var isSuperAdmin = user && (!user.academyDomain && !user.isLearningSpace && ((_user$roles = user.roles) === null || _user$roles === void 0 ? void 0 : _user$roles.includes(exports.Role.Admin)) || user.isSuperAdmin);
31229
31364
  var isStudentSite = role === exports.Role.Student;
31365
+ var isTeacherSite = role === exports.Role.Teacher;
31230
31366
  var isLearningSpace = user === null || user === void 0 ? void 0 : user.isLearningSpace;
31231
31367
  var _useTranslation = reactI18next.useTranslation(),
31232
31368
  t = _useTranslation.t;
@@ -31320,7 +31456,7 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
31320
31456
  }, React__default.createElement(go.GoArrowSwitch, {
31321
31457
  size: 14,
31322
31458
  color: styles.gray_900
31323
- })))))), (isSuperAdmin || !isAdmin) && React__default.createElement(Popover, {
31459
+ })))))), (isSuperAdmin || !isAdmin || isTeacherSite) && React__default.createElement(Popover, {
31324
31460
  open: !!open,
31325
31461
  anchorEl: open,
31326
31462
  onClose: handleClose,