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.
@@ -27,6 +27,7 @@ import Select, { components } from 'react-select';
27
27
  import CreatableSelect from 'react-select/creatable';
28
28
  import { Formik, Form, Field, FieldArray } from 'formik';
29
29
  import { CKEditor } from 'ckeditor4-react';
30
+ import { AutoSizer } from 'react-virtualized';
30
31
  import Grid$1 from '@mui/material/Grid';
31
32
  import Typography$1 from '@mui/material/Typography';
32
33
  import Card from '@mui/material/Card';
@@ -1189,6 +1190,7 @@ var notify_share_exam = {
1189
1190
  update_fail: "업데이트 실패!"
1190
1191
  };
1191
1192
  var academy_admin_teacher = "아카데미 관리자/선생님";
1193
+ var academyadmin_teacher = "아카데미 관리자/선생님";
1192
1194
  var total_student = "총 학생 수";
1193
1195
  var total_teacher = "총 교사 수";
1194
1196
  var total_exam = "총 시험 수";
@@ -1352,6 +1354,7 @@ var delete_textbook_successfully = "교과서 삭제 성공";
1352
1354
  var information = "정보";
1353
1355
  var running_time = "진행 시간";
1354
1356
  var hours_mins_seconds = "{{hours}}시간 {{mins}}분 {{seconds}}초";
1357
+ var create_schedule_successfully = "일정을 성공적으로 생성했습니다";
1355
1358
  var prepared_textbook = "준비된 교과서";
1356
1359
  var enable_phone_pass_code = "전화 비밀번호 활성화";
1357
1360
  var custom = "관습";
@@ -1360,6 +1363,14 @@ var pass_code_is_invalid = "비밀번호가 유효하지 않습니다";
1360
1363
  var pass_code_length_must_be_n = "비밀번호 길이는 {{n}}이어야 합니다";
1361
1364
  var parent_phone_number_is_invalid = "부모 전화번호가 잘못되었습니다";
1362
1365
  var parent_phone_number_is_required = "부모 전화번호가 필요합니다";
1366
+ var update_schedule_successfully = "일정을 성공적으로 업데이트했습니다";
1367
+ var delete_schedule_successfully = "일정을 성공적으로 삭제했습니다";
1368
+ var group = "그룹";
1369
+ var update_schedule = "업데이트 일정";
1370
+ var back_month = "이전 달";
1371
+ var today_schedule = "오늘 스케줄";
1372
+ var schedule_achieved = "달성한 스케줄";
1373
+ var i_dont_have_my_phone_number_yet = "휴대폰 번호가 없어요";
1363
1374
  var lang_ko = {
1364
1375
  problem_solving: problem_solving,
1365
1376
  my_story: my_story,
@@ -2191,6 +2202,7 @@ var lang_ko = {
2191
2202
  notify_share_textbook: notify_share_textbook,
2192
2203
  notify_share_exam: notify_share_exam,
2193
2204
  academy_admin_teacher: academy_admin_teacher,
2205
+ academyadmin_teacher: academyadmin_teacher,
2194
2206
  total_student: total_student,
2195
2207
  total_teacher: total_teacher,
2196
2208
  total_exam: total_exam,
@@ -2356,6 +2368,7 @@ var lang_ko = {
2356
2368
  information: information,
2357
2369
  running_time: running_time,
2358
2370
  hours_mins_seconds: hours_mins_seconds,
2371
+ create_schedule_successfully: create_schedule_successfully,
2359
2372
  prepared_textbook: prepared_textbook,
2360
2373
  enable_phone_pass_code: enable_phone_pass_code,
2361
2374
  custom: custom,
@@ -2363,7 +2376,15 @@ var lang_ko = {
2363
2376
  pass_code_is_invalid: pass_code_is_invalid,
2364
2377
  pass_code_length_must_be_n: pass_code_length_must_be_n,
2365
2378
  parent_phone_number_is_invalid: parent_phone_number_is_invalid,
2366
- parent_phone_number_is_required: parent_phone_number_is_required
2379
+ parent_phone_number_is_required: parent_phone_number_is_required,
2380
+ update_schedule_successfully: update_schedule_successfully,
2381
+ delete_schedule_successfully: delete_schedule_successfully,
2382
+ group: group,
2383
+ update_schedule: update_schedule,
2384
+ back_month: back_month,
2385
+ today_schedule: today_schedule,
2386
+ schedule_achieved: schedule_achieved,
2387
+ i_dont_have_my_phone_number_yet: i_dont_have_my_phone_number_yet
2367
2388
  };
2368
2389
 
2369
2390
  var problem_solving$1 = "Problem Solving";
@@ -2503,7 +2524,7 @@ var create_exam$1 = "Create exam";
2503
2524
  var back$1 = "Back";
2504
2525
  var date_format_exam$1 = "MMMM YYYY";
2505
2526
  var date_format$1 = "MMM. D. YYYY";
2506
- var day_month_format$1 = "DDDo MMM";
2527
+ var day_month_format$1 = "Do MMM";
2507
2528
  var date_time_format$1 = "HH:mm MMM. D YYYY ";
2508
2529
  var date_time_format_12h$1 = "MM-DD-YYYY HH:mm A";
2509
2530
  var full_date_time_format$1 = "MMM Do YYYY HH:mm:ss";
@@ -3277,14 +3298,15 @@ var chapter$1 = "Chapter";
3277
3298
  var chapter_number$1 = "Chapter {{number}}";
3278
3299
  var category_required$1 = "Category is required";
3279
3300
  var subject_required$1 = "Subject is required";
3280
- var academy_admin_teacher$1 = "Academy Admin Teacher";
3301
+ var academy_admin_teacher$1 = "Academy Admin/Teacher";
3302
+ var academyadmin_teacher$1 = "Academy Admin/Teacher";
3281
3303
  var date_required$1 = "Date is required";
3282
3304
  var start_time_required$1 = "Start time is required";
3283
3305
  var end_time_required$1 = "End time is required";
3284
3306
  var title_required$1 = "Title is required";
3285
3307
  var delete_schedule$1 = "Delete Schedule";
3286
3308
  var edit_schedule$1 = "Edit Schedule";
3287
- var are_you_sure_you_want_to_delete_the_schedule$1 = "are_you_sure_you_want_to_delete_the_schedule: {{name}}";
3309
+ var are_you_sure_you_want_to_delete_the_schedule$1 = "Are you sure you want to delete the schedule: {{name}}";
3288
3310
  var correct_answer_rate$1 = "Correct answer rate";
3289
3311
  var progress$1 = "Progress";
3290
3312
  var grammar$1 = "Grammar";
@@ -3377,6 +3399,7 @@ var delete_textbook_successfully$1 = "Delete the textbook successfully";
3377
3399
  var information$1 = "Information";
3378
3400
  var running_time$1 = "Running time";
3379
3401
  var hours_mins_seconds$1 = "{{hours}}h {{mins}}m {{seconds}}s";
3402
+ var create_schedule_successfully$1 = "Create schedule successfully";
3380
3403
  var prepared_textbook$1 = "Prepared Textbook";
3381
3404
  var enable_phone_pass_code$1 = "Enable phone pass code";
3382
3405
  var custom$1 = "Custom";
@@ -3386,6 +3409,14 @@ var pass_code_length_must_be_n$1 = "Pass code length must be {{n}}";
3386
3409
  var email_is_invalid = "Email is invalid";
3387
3410
  var parent_phone_number_is_invalid$1 = "Parent phone number is invalid";
3388
3411
  var parent_phone_number_is_required$1 = "Parent phone number is required";
3412
+ var update_schedule_successfully$1 = "Update schedule successfully";
3413
+ var delete_schedule_successfully$1 = "Delete schedule successfully";
3414
+ var group$1 = "Group";
3415
+ var update_schedule$1 = "Update Schedule";
3416
+ var back_month$1 = "Back Month";
3417
+ var today_schedule$1 = "Today's schedule";
3418
+ var schedule_achieved$1 = "Schedule achieved";
3419
+ var i_dont_have_my_phone_number_yet$1 = "I don't have my phone number yet";
3389
3420
  var lang_en = {
3390
3421
  problem_solving: problem_solving$1,
3391
3422
  my_story: my_story$1,
@@ -4282,6 +4313,7 @@ var lang_en = {
4282
4313
  category_required: category_required$1,
4283
4314
  subject_required: subject_required$1,
4284
4315
  academy_admin_teacher: academy_admin_teacher$1,
4316
+ academyadmin_teacher: academyadmin_teacher$1,
4285
4317
  date_required: date_required$1,
4286
4318
  start_time_required: start_time_required$1,
4287
4319
  end_time_required: end_time_required$1,
@@ -4383,6 +4415,7 @@ var lang_en = {
4383
4415
  information: information$1,
4384
4416
  running_time: running_time$1,
4385
4417
  hours_mins_seconds: hours_mins_seconds$1,
4418
+ create_schedule_successfully: create_schedule_successfully$1,
4386
4419
  prepared_textbook: prepared_textbook$1,
4387
4420
  enable_phone_pass_code: enable_phone_pass_code$1,
4388
4421
  custom: custom$1,
@@ -4391,7 +4424,15 @@ var lang_en = {
4391
4424
  pass_code_length_must_be_n: pass_code_length_must_be_n$1,
4392
4425
  email_is_invalid: email_is_invalid,
4393
4426
  parent_phone_number_is_invalid: parent_phone_number_is_invalid$1,
4394
- parent_phone_number_is_required: parent_phone_number_is_required$1
4427
+ parent_phone_number_is_required: parent_phone_number_is_required$1,
4428
+ update_schedule_successfully: update_schedule_successfully$1,
4429
+ delete_schedule_successfully: delete_schedule_successfully$1,
4430
+ group: group$1,
4431
+ update_schedule: update_schedule$1,
4432
+ back_month: back_month$1,
4433
+ today_schedule: today_schedule$1,
4434
+ schedule_achieved: schedule_achieved$1,
4435
+ i_dont_have_my_phone_number_yet: i_dont_have_my_phone_number_yet$1
4395
4436
  };
4396
4437
 
4397
4438
  i18n.use(initReactI18next).init({
@@ -9215,20 +9256,31 @@ var VirtualListView = function VirtualListView(props) {
9215
9256
  renderItem = props.renderItem,
9216
9257
  emptyElement = props.emptyElement,
9217
9258
  loading = props.loading,
9218
- loadingElement = props.loadingElement;
9219
- return React__default.createElement(Box, Object.assign({}, containerProps), loading && React__default.createElement(Fragment$1, null, loadingElement != null ? loadingElement : React__default.createElement(Box, {
9220
- p: 1,
9221
- className: "d-flex justify-content-center align-items-center w-100"
9222
- }, React__default.createElement(CircularProgress, {
9223
- size: 24,
9224
- sx: {
9225
- color: "#5d5d5b"
9226
- }
9227
- }))), !loading && !data.length && React__default.createElement(VirtualTableEmpty, {
9228
- emptyElement: emptyElement
9229
- }), !loading && !!data.length && React__default.createElement(ListView, {
9230
- data: data,
9231
- render: renderItem
9259
+ loadingElement = props.loadingElement,
9260
+ listHeight = props.listHeight;
9261
+ return React__default.createElement(Box, Object.assign({}, containerProps), React__default.createElement(AutoSizer, {
9262
+ disableHeight: !!listHeight
9263
+ }, function (_ref) {
9264
+ var width = _ref.width,
9265
+ height = _ref.height;
9266
+ return React__default.createElement(Box, {
9267
+ width: width,
9268
+ height: height,
9269
+ overflow: "auto"
9270
+ }, loading && React__default.createElement(Fragment$1, null, loadingElement != null ? loadingElement : React__default.createElement(Box, {
9271
+ p: 1,
9272
+ className: "d-flex justify-content-center align-items-center w-100"
9273
+ }, React__default.createElement(CircularProgress, {
9274
+ size: 24,
9275
+ sx: {
9276
+ color: "#5d5d5b"
9277
+ }
9278
+ }))), !loading && !data.length && React__default.createElement(VirtualTableEmpty, {
9279
+ emptyElement: emptyElement
9280
+ }), !loading && !!data.length && React__default.createElement(ListView, {
9281
+ data: data,
9282
+ render: renderItem
9283
+ }));
9232
9284
  }));
9233
9285
  };
9234
9286
 
@@ -9900,7 +9952,9 @@ var useLoginPhoneNumber = function useLoginPhoneNumber(props) {
9900
9952
  var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain) || !!(user !== null && user !== void 0 && user.isLearningSpace);
9901
9953
  var needToRegister = isFirstLogin && isAcademy;
9902
9954
  var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
9903
- redirectLoginUser(user, token, redirectUrl);
9955
+ redirectLoginUser(_extends({}, user, {
9956
+ isNotEnoughStatements: isFirstLogin
9957
+ }), token, redirectUrl);
9904
9958
  setPhoneNumber("");
9905
9959
  });
9906
9960
  }, function (error) {
@@ -10243,10 +10297,12 @@ var signInApi = function signInApi(_ref) {
10243
10297
  var signInWithEmailApi = function signInWithEmailApi(_ref2) {
10244
10298
  var isAcademy = _ref2.isAcademy,
10245
10299
  email = _ref2.email,
10246
- reCaptcha = _ref2.reCaptcha;
10300
+ reCaptcha = _ref2.reCaptcha,
10301
+ role = _ref2.role;
10247
10302
  return api.post((isAcademy ? SIGN_IN_URL : SIGN_IN_SUPER_ADMIN_URL) + "/email", {
10248
10303
  email: email,
10249
- reCaptcha: reCaptcha
10304
+ reCaptcha: reCaptcha,
10305
+ role: role
10250
10306
  }, {
10251
10307
  headers: {
10252
10308
  Domain: window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '')
@@ -10382,8 +10438,17 @@ var useLogin$1 = function useLogin(_ref) {
10382
10438
  var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain) || !!(user !== null && user !== void 0 && user.isLearningSpace);
10383
10439
  var needToRegister = isFirstLogin && isAcademy;
10384
10440
  var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
10441
+ console.log({
10442
+ isFirstLogin: isFirstLogin,
10443
+ isAcademy: isAcademy,
10444
+ token: token,
10445
+ user: user,
10446
+ redirectUrl: redirectUrl
10447
+ });
10385
10448
  handleSwitchOTP(false);
10386
- redirectLoginUser(user, token, redirectUrl);
10449
+ redirectLoginUser(_extends({}, user, {
10450
+ isNotEnoughStatements: isFirstLogin
10451
+ }), token, redirectUrl);
10387
10452
  });
10388
10453
  }
10389
10454
  }();
@@ -10394,7 +10459,8 @@ var useLogin$1 = function useLogin(_ref) {
10394
10459
  return Promise.resolve(signInWithEmailApi({
10395
10460
  isAcademy: isAcademyReq,
10396
10461
  email: email,
10397
- reCaptcha: tokenReCaptcha
10462
+ reCaptcha: tokenReCaptcha,
10463
+ role: role
10398
10464
  })).then(function () {
10399
10465
  toast.success(t("please_check_your_mailbox"));
10400
10466
  handleSwitchOTP(true);
@@ -10499,6 +10565,7 @@ var useLogiQRCode = function useLogiQRCode(props) {
10499
10565
  var _useState8 = useState(false),
10500
10566
  error = _useState8[0],
10501
10567
  setError = _useState8[1];
10568
+ var firstLoadRef = useRef(true);
10502
10569
  var onVerify = useCallback(function (token) {
10503
10570
  setTokenReCaptcha(token);
10504
10571
  }, []);
@@ -10508,9 +10575,11 @@ var useLogiQRCode = function useLogiQRCode(props) {
10508
10575
  setRefreshReCaptcha(function (b) {
10509
10576
  return !b;
10510
10577
  });
10578
+ firstLoadRef.current = false;
10511
10579
  setLoadingQR(false);
10512
10580
  };
10513
- if (!tokenReCaptcha || !!(qrCodeData !== null && qrCodeData !== void 0 && qrCodeData.key) || error) return Promise.resolve();
10581
+ if (!tokenReCaptcha) return Promise.resolve();
10582
+ resetData();
10514
10583
  setLoadingQR(true);
10515
10584
  if (!academyDomain) localStorage.setItem(LEARNING_SPACE, "true");
10516
10585
  var _temp = _catch(function () {
@@ -10545,8 +10614,8 @@ var useLogiQRCode = function useLogiQRCode(props) {
10545
10614
  }
10546
10615
  };
10547
10616
  useEffect(function () {
10548
- getQRCodeDataLogin();
10549
- }, [academyDomain, tokenReCaptcha, qrCodeData === null || qrCodeData === void 0 ? void 0 : qrCodeData.key]);
10617
+ if (firstLoadRef.current) getQRCodeDataLogin();
10618
+ }, [academyDomain, tokenReCaptcha]);
10550
10619
  useEffect(function () {
10551
10620
  if (qrCodeData !== null && qrCodeData !== void 0 && qrCodeData.key) {
10552
10621
  if (pusher.current) pusher.current.disconnect();
@@ -10582,11 +10651,12 @@ var useLogiQRCode = function useLogiQRCode(props) {
10582
10651
  var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain) || !!(user !== null && user !== void 0 && user.isLearningSpace);
10583
10652
  var needToRegister = isFirstLogin && isAcademy;
10584
10653
  var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
10585
- redirectLoginUser(user, token, redirectUrl);
10654
+ redirectLoginUser(_extends({}, user, {
10655
+ isNotEnoughStatements: isFirstLogin
10656
+ }), token, redirectUrl);
10586
10657
  });
10587
- }, function (error) {
10658
+ }, function () {
10588
10659
  setInvalid(true);
10589
- toast.error(getErrorMessage(t, error));
10590
10660
  });
10591
10661
  return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
10592
10662
  } catch (e) {
@@ -10615,7 +10685,7 @@ var useLogiQRCode = function useLogiQRCode(props) {
10615
10685
  setError(false);
10616
10686
  };
10617
10687
  var handleGenerateNewAQRCode = function handleGenerateNewAQRCode() {
10618
- resetData();
10688
+ getQRCodeDataLogin();
10619
10689
  };
10620
10690
  return {
10621
10691
  t: t,
@@ -10833,7 +10903,9 @@ var useLoginWithEmail = function useLoginWithEmail(_ref) {
10833
10903
  var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain) || !!(user !== null && user !== void 0 && user.isLearningSpace);
10834
10904
  var needToRegister = isFirstLogin && isAcademy;
10835
10905
  var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
10836
- redirectLoginUser(user, token, redirectUrl);
10906
+ redirectLoginUser(_extends({}, user, {
10907
+ isNotEnoughStatements: isFirstLogin
10908
+ }), token, redirectUrl);
10837
10909
  });
10838
10910
  }, function (error) {
10839
10911
  console.log(error);
@@ -10893,7 +10965,7 @@ var useLogin$2 = function useLogin(_ref) {
10893
10965
  passwordError = _useState2[0],
10894
10966
  setPasswordError = _useState2[1];
10895
10967
  var searchParams = new URLSearchParams(window.location.search);
10896
- var paramDomain = searchParams.get('domain');
10968
+ var paramDomain = searchParams.get("domain");
10897
10969
  var academyDomain = paramDomain || getAcademyDomain();
10898
10970
  var isStudent = role === Role.Student;
10899
10971
  var isAcademyReq = isStudent || !!academyDomain;
@@ -10951,11 +11023,13 @@ var useLogin$2 = function useLogin(_ref) {
10951
11023
  var isAcademy = !!(user !== null && user !== void 0 && user.academyDomain) || !!(user !== null && user !== void 0 && user.isLearningSpace);
10952
11024
  var needToRegister = isFirstLogin && isAcademy;
10953
11025
  var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
10954
- redirectLoginUser(user, token, redirectUrl);
11026
+ redirectLoginUser(_extends({}, user, {
11027
+ isNotEnoughStatements: isFirstLogin
11028
+ }), token, redirectUrl);
10955
11029
  });
10956
11030
  }, function (error) {
10957
11031
  console.log(error);
10958
- toast.error(getErrorMessage(t, error, t('request_login_fail')));
11032
+ toast.error(getErrorMessage(t, error, t("request_login_fail")));
10959
11033
  }));
10960
11034
  } catch (e) {
10961
11035
  return Promise.reject(e);
@@ -11712,7 +11786,7 @@ var ErrorHandler = function ErrorHandler(_ref) {
11712
11786
  var ClassForm = function ClassForm(_ref) {
11713
11787
  var history = _ref.history,
11714
11788
  formikProp = _ref.formikProp,
11715
- id = _ref.id,
11789
+ classId = _ref.classId,
11716
11790
  data = _ref.data,
11717
11791
  teachers = _ref.teachers,
11718
11792
  disabled = _ref.disabled,
@@ -12077,7 +12151,7 @@ var ClassForm = function ClassForm(_ref) {
12077
12151
  formikProp.handleSubmit();
12078
12152
  },
12079
12153
  disabled: disabled
12080
- }, !id ? t("create_and_continue") : t("save_and_exit")), React__default.createElement(Button, {
12154
+ }, !classId ? t("create_and_continue") : t("save_and_exit")), React__default.createElement(Button, {
12081
12155
  color: "secondary",
12082
12156
  className: "bg-secondary",
12083
12157
  variant: "contained",
@@ -12981,8 +13055,9 @@ var _excluded$8 = ["getStudents"],
12981
13055
  var PAGE_TITLE$4 = "classes";
12982
13056
  var useClassDetail = function useClassDetail(_ref) {
12983
13057
  var history = _ref.history,
12984
- id = _ref.id,
12985
- role = _ref.role;
13058
+ classId = _ref.classId,
13059
+ role = _ref.role,
13060
+ classListUrl = _ref.classListUrl;
12986
13061
  var _useTranslation = useTranslation(),
12987
13062
  t = _useTranslation.t;
12988
13063
  var dispatch = useDispatch();
@@ -12993,8 +13068,11 @@ var useClassDetail = function useClassDetail(_ref) {
12993
13068
  });
12994
13069
  var roles = (user === null || user === void 0 ? void 0 : user.roles) || [];
12995
13070
  var isOneRoleExists = roles.length === 1;
12996
- var isAdmin = roles.includes(Role.Admin) && role === Role.Admin;
12997
- var isTeacher = roles.includes(Role.Teacher) && !roles.includes(Role.Admin) && role === Role.Teacher;
13071
+ var isAdmin = roles.includes(Role.Admin);
13072
+ var isTeacher = roles.includes(Role.Teacher) && !isAdmin;
13073
+ var isSuperAdmin = user === null || user === void 0 ? void 0 : user.isSuperAdmin;
13074
+ var isteacherSite = role === Role.Teacher;
13075
+ var isDisabled = isAdmin && !isSuperAdmin && isteacherSite || isTeacher;
12998
13076
  var _useState = useState(),
12999
13077
  course = _useState[0],
13000
13078
  setCourse = _useState[1];
@@ -13020,13 +13098,13 @@ var useClassDetail = function useClassDetail(_ref) {
13020
13098
  var isSelected = function isSelected(id) {
13021
13099
  return selected.indexOf(id) !== -1;
13022
13100
  };
13023
- var _useStudentClassList = useStudentClassList(id ? +id : 0),
13101
+ var _useStudentClassList = useStudentClassList(classId),
13024
13102
  getStudents = _useStudentClassList.getStudents,
13025
13103
  studentListProps = _objectWithoutPropertiesLoose(_useStudentClassList, _excluded$8);
13026
- var _useTeacherClassList = useTeacherClassList(id ? +id : 0),
13104
+ var _useTeacherClassList = useTeacherClassList(classId),
13027
13105
  getTeachers = _useTeacherClassList.getTeachers,
13028
13106
  teacherListProps = _objectWithoutPropertiesLoose(_useTeacherClassList, _excluded2);
13029
- var _useLessonClassList = useLessonClassList(id ? +id : 0),
13107
+ var _useLessonClassList = useLessonClassList(classId),
13030
13108
  getLessons = _useLessonClassList.getLessons,
13031
13109
  lessonListProps = _objectWithoutPropertiesLoose(_useLessonClassList, _excluded3);
13032
13110
  var selectedLesson = lessonListProps.selectedLesson,
@@ -13050,12 +13128,10 @@ var useClassDetail = function useClassDetail(_ref) {
13050
13128
  isLoading && dispatch(setLoading(false));
13051
13129
  };
13052
13130
  var _exit = false;
13053
- if (!id) return Promise.resolve();
13054
- var idNumber = +id;
13055
- if (isNaN(idNumber)) return Promise.resolve();
13131
+ if (!classId) return Promise.resolve();
13056
13132
  isLoading && dispatch(setLoading(true));
13057
13133
  var _temp = _catch(function () {
13058
- return Promise.resolve(getClassByIdApi(idNumber)).then(function (res) {
13134
+ return Promise.resolve(getClassByIdApi(classId)).then(function (res) {
13059
13135
  var classData = res.data;
13060
13136
  if (!classData) {
13061
13137
  toast.error(t("get_class_detail_error"));
@@ -13172,22 +13248,22 @@ var useClassDetail = function useClassDetail(_ref) {
13172
13248
  var _temp12 = function _temp12() {
13173
13249
  dispatch(setLoading(false));
13174
13250
  };
13175
- if (!id || !openSelectDialog) return Promise.resolve();
13251
+ if (!classId || !openSelectDialog) return Promise.resolve();
13176
13252
  dispatch(setLoading(true));
13177
13253
  var _temp11 = _catch(function () {
13178
13254
  function _temp10() {
13179
13255
  return Promise.resolve(handleGetDetailData(false)).then(function () {
13180
- toast.success(t(id ? "update_class_successfully" : "create_class_successfully"));
13256
+ toast.success(t(classId ? "update_class_successfully" : "create_class_successfully"));
13181
13257
  handleCloseSelectDialog();
13182
13258
  });
13183
13259
  }
13184
13260
  var _temp9 = function () {
13185
13261
  if (openSelectDialog === "Student") {
13186
- return Promise.resolve(addStudentToClass(+id, userIds)).then(function () {
13262
+ return Promise.resolve(addStudentToClass(classId, userIds)).then(function () {
13187
13263
  return Promise.resolve(getStudents()).then(function () {});
13188
13264
  });
13189
13265
  } else {
13190
- return Promise.resolve(addTeacherToClass(+id, userIds)).then(function () {
13266
+ return Promise.resolve(addTeacherToClass(classId, userIds)).then(function () {
13191
13267
  return Promise.resolve(getTeachers()).then(function () {});
13192
13268
  });
13193
13269
  }
@@ -13222,16 +13298,16 @@ var useClassDetail = function useClassDetail(_ref) {
13222
13298
  dispatch(setLoading(true));
13223
13299
  var _temp15 = _catch(function () {
13224
13300
  function _temp14() {
13225
- toast.success(t(id ? "update_class_successfully" : "create_class_successfully"));
13301
+ toast.success(t(classId ? "update_class_successfully" : "create_class_successfully"));
13226
13302
  }
13227
13303
  var _temp13 = function () {
13228
- if (!id) {
13304
+ if (!classId) {
13229
13305
  return Promise.resolve(createClassApi(body)).then(function (res) {
13230
- pushTo(history, "/classes/" + res.data.id);
13306
+ pushTo(history, classListUrl + "/" + res.data.id);
13231
13307
  });
13232
13308
  } else {
13233
- return Promise.resolve(updateClassApi(+id, body)).then(function () {
13234
- pushTo(history, "/classes");
13309
+ return Promise.resolve(updateClassApi(classId, body)).then(function () {
13310
+ pushTo(history, classListUrl);
13235
13311
  });
13236
13312
  }
13237
13313
  }();
@@ -13246,10 +13322,10 @@ var useClassDetail = function useClassDetail(_ref) {
13246
13322
  };
13247
13323
  var getStudentNotInClassList = function getStudentNotInClassList() {
13248
13324
  try {
13249
- if (!id) return Promise.resolve();
13325
+ if (!classId) return Promise.resolve();
13250
13326
  var _temp17 = _catch(function () {
13251
13327
  var _textSearchRef$curren;
13252
- return Promise.resolve(getStudentClassApi(+id, _extends({}, filter, {
13328
+ return Promise.resolve(getStudentClassApi(classId, _extends({}, filter, {
13253
13329
  textSearch: (_textSearchRef$curren = textSearchRef.current) === null || _textSearchRef$curren === void 0 ? void 0 : _textSearchRef$curren.value,
13254
13330
  isInCourse: false
13255
13331
  }))).then(function (res) {
@@ -13285,10 +13361,10 @@ var useClassDetail = function useClassDetail(_ref) {
13285
13361
  };
13286
13362
  var getTeacherNotInClassList = function getTeacherNotInClassList() {
13287
13363
  try {
13288
- if (!id) return Promise.resolve();
13364
+ if (!classId) return Promise.resolve();
13289
13365
  var _temp18 = _catch(function () {
13290
13366
  var _textSearchRef$curren2;
13291
- return Promise.resolve(getTeacherClassApi(+id, _extends({}, filter, {
13367
+ return Promise.resolve(getTeacherClassApi(classId, _extends({}, filter, {
13292
13368
  textSearch: (_textSearchRef$curren2 = textSearchRef.current) === null || _textSearchRef$curren2 === void 0 ? void 0 : _textSearchRef$curren2.value,
13293
13369
  isInCourse: false
13294
13370
  }))).then(function (res) {
@@ -13404,7 +13480,7 @@ var useClassDetail = function useClassDetail(_ref) {
13404
13480
  };
13405
13481
  useEffect(function () {
13406
13482
  handleGetDetailData();
13407
- }, [id]);
13483
+ }, [classId]);
13408
13484
  useEffect(function () {
13409
13485
  handleFetchUsers();
13410
13486
  }, [JSON.stringify(filter)]);
@@ -13412,9 +13488,9 @@ var useClassDetail = function useClassDetail(_ref) {
13412
13488
  document.title = t("study_peak") + " | " + t(PAGE_TITLE$4);
13413
13489
  }, [t]);
13414
13490
  return {
13415
- id: id,
13491
+ classId: classId,
13416
13492
  schema: schema,
13417
- isAdmin: isAdmin,
13493
+ isDisabled: isDisabled,
13418
13494
  paging: paging,
13419
13495
  filter: filter,
13420
13496
  isTeacher: isTeacher,
@@ -13806,15 +13882,17 @@ var ClassDetail = function ClassDetail(_ref) {
13806
13882
  history = _ref.history,
13807
13883
  classListUrl = _ref.classListUrl,
13808
13884
  role = _ref.role;
13885
+ var classId = !id || Number.isNaN(+id) ? 0 : +id;
13809
13886
  var _useClassDetail = useClassDetail({
13810
13887
  history: history,
13811
- id: id,
13812
- role: role
13888
+ classId: classId,
13889
+ role: role,
13890
+ classListUrl: classListUrl
13813
13891
  }),
13814
13892
  schema = _useClassDetail.schema,
13815
13893
  paging = _useClassDetail.paging,
13816
- isAdmin = _useClassDetail.isAdmin,
13817
13894
  isTeacher = _useClassDetail.isTeacher,
13895
+ isDisabled = _useClassDetail.isDisabled,
13818
13896
  filter = _useClassDetail.filter,
13819
13897
  listUserSelected = _useClassDetail.listUserSelected,
13820
13898
  userList = _useClassDetail.userList,
@@ -13864,7 +13942,7 @@ var ClassDetail = function ClassDetail(_ref) {
13864
13942
  if (selected === TabList$1[1].value) studentListProps.resetData();
13865
13943
  if (selected === TabList$1[2].value) studentListProps.resetData();
13866
13944
  }, [selected]);
13867
- return React__default.createElement(Box, null, !!id && React__default.createElement(Box, null, React__default.createElement(Stack, {
13945
+ return React__default.createElement(Box, null, !!classId && React__default.createElement(Box, null, React__default.createElement(Stack, {
13868
13946
  display: "flex",
13869
13947
  flexDirection: "row",
13870
13948
  gap: "8px"
@@ -13894,12 +13972,12 @@ var ClassDetail = function ClassDetail(_ref) {
13894
13972
  direction: "row",
13895
13973
  alignItems: "center",
13896
13974
  justifyContent: "space-between",
13897
- mt: !!id ? 2 : 0,
13975
+ mt: classId ? 2 : 0,
13898
13976
  mb: 2,
13899
- pt: !!id ? "12px" : "0px"
13977
+ pt: classId ? "12px" : "0px"
13900
13978
  }, React__default.createElement(Typography, {
13901
13979
  variant: "h4"
13902
- }, t(!id ? "create_class" : isAdmin ? "update_class" : "view_class"))), React__default.createElement(Formik, {
13980
+ }, t(!classId ? "create_class" : !isDisabled ? "update_class" : "view_class"))), React__default.createElement(Formik, {
13903
13981
  initialValues: DEFAULT_CLASS_REQUEST,
13904
13982
  validationSchema: schema,
13905
13983
  onSubmit: handleSubmit
@@ -13907,30 +13985,30 @@ var ClassDetail = function ClassDetail(_ref) {
13907
13985
  return React__default.createElement(ClassForm, {
13908
13986
  classListUrl: classListUrl,
13909
13987
  history: history,
13910
- id: id,
13988
+ classId: classId,
13911
13989
  formikProp: props,
13912
13990
  data: classRequest,
13913
13991
  teachers: teacherOptions,
13914
- disabled: !isAdmin,
13992
+ disabled: isDisabled,
13915
13993
  onSearchTeachers: handleChangeTextSearchTeachers
13916
13994
  });
13917
13995
  })), React__default.createElement(CustomTabPanel, {
13918
13996
  value: selected,
13919
13997
  index: TabList$1[1].value
13920
- }, !!id && !Number.isNaN(+id) && selected === TabList$1[1].value && React__default.createElement(StudentList, Object.assign({
13921
- disabled: !isTeacher && !isAdmin,
13998
+ }, !!classId && selected === TabList$1[1].value && React__default.createElement(StudentList, Object.assign({
13999
+ disabled: isDisabled && !isTeacher,
13922
14000
  onAdd: handleOpenSelectDialog
13923
14001
  }, studentListProps))), React__default.createElement(CustomTabPanel, {
13924
14002
  value: selected,
13925
14003
  index: TabList$1[2].value
13926
- }, !!id && !Number.isNaN(+id) && selected === TabList$1[2].value && React__default.createElement(TeacherList, Object.assign({
13927
- disabled: !isAdmin,
14004
+ }, !!classId && selected === TabList$1[2].value && React__default.createElement(TeacherList, Object.assign({
14005
+ disabled: isDisabled,
13928
14006
  onAdd: handleOpenSelectDialog
13929
14007
  }, teacherListProps))), React__default.createElement(CustomTabPanel, {
13930
14008
  value: selected,
13931
14009
  index: TabList$1[3].value
13932
- }, !!id && !Number.isNaN(+id) && selected === TabList$1[3].value && React__default.createElement(LessonList, Object.assign({
13933
- disabled: !isAdmin,
14010
+ }, !!classId && selected === TabList$1[3].value && React__default.createElement(LessonList, Object.assign({
14011
+ disabled: isDisabled,
13934
14012
  startDate: course === null || course === void 0 ? void 0 : course.startDate,
13935
14013
  endDate: course === null || course === void 0 ? void 0 : course.endDate
13936
14014
  }, lessonListProps, {
@@ -13938,7 +14016,7 @@ var ClassDetail = function ClassDetail(_ref) {
13938
14016
  handleDeleteLessonClass: handleDeleteLessonClass,
13939
14017
  teachers: teacherOptions,
13940
14018
  onSearchTeachers: handleChangeTextSearchTeachers
13941
- }))), (isAdmin || openSelectDialog === "Student") && React__default.createElement(SelectDialog, {
14019
+ }))), (!isDisabled && !isTeacher || openSelectDialog === "Student") && React__default.createElement(SelectDialog, {
13942
14020
  open: !!openSelectDialog,
13943
14021
  isStudent: openSelectDialog === "Student",
13944
14022
  onClose: handleCloseSelectDialog,
@@ -14104,6 +14182,10 @@ var ClassList = function ClassList(_ref) {
14104
14182
  role = _ref.role,
14105
14183
  classCreateUrl = _ref.classCreateUrl,
14106
14184
  classUpdateUrl = _ref.classUpdateUrl;
14185
+ var isSuperAdmin = useSelector(function (state) {
14186
+ var _state$common, _state$common$user;
14187
+ 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;
14188
+ });
14107
14189
  var isAdmin = role === Role.Admin;
14108
14190
  var _useClassList = useClassList(history, classCreateUrl, classUpdateUrl),
14109
14191
  t = _useClassList.t,
@@ -14127,7 +14209,7 @@ var ClassList = function ClassList(_ref) {
14127
14209
  mb: 2
14128
14210
  }, React__default.createElement(Typography, {
14129
14211
  variant: "h4"
14130
- }, t("classes")), isAdmin && React__default.createElement(MButton, {
14212
+ }, t("classes")), (isAdmin || isSuperAdmin) && React__default.createElement(MButton, {
14131
14213
  variant: "contained",
14132
14214
  color: "inherit",
14133
14215
  startIcon: React__default.createElement(FaPlus, {
@@ -14167,7 +14249,7 @@ var ClassList = function ClassList(_ref) {
14167
14249
  key: i.id
14168
14250
  }, React__default.createElement(TableCell$1, null, (paging.page - 1) * paging.limit + index + 1), React__default.createElement(TableCell$1, {
14169
14251
  className: "text-nowrap"
14170
- }, i.name), React__default.createElement(TableCell$1, null, toLocalTime(i.startDate, t("date_format"))), React__default.createElement(TableCell$1, null, toLocalTime(i.endDate, t("date_format"))), React__default.createElement(TableCell$1, null, i.totalStudents), React__default.createElement(TableCell$1, null, i.totalTeachers), React__default.createElement(TableCell$1, null, i.totalLessons), React__default.createElement(TableCell$1, null, isAdmin && React__default.createElement("div", {
14252
+ }, i.name), React__default.createElement(TableCell$1, null, toLocalTime(i.startDate, t("date_format"))), React__default.createElement(TableCell$1, null, toLocalTime(i.endDate, t("date_format"))), React__default.createElement(TableCell$1, null, i.totalStudents), React__default.createElement(TableCell$1, null, i.totalTeachers), React__default.createElement(TableCell$1, null, i.totalLessons), React__default.createElement(TableCell$1, null, (isAdmin || isSuperAdmin) && React__default.createElement("div", {
14171
14253
  className: "d-flex"
14172
14254
  }, React__default.createElement(IconButton, {
14173
14255
  color: "default",
@@ -14185,7 +14267,7 @@ var ClassList = function ClassList(_ref) {
14185
14267
  }
14186
14268
  }, React__default.createElement(FaTrashCan, {
14187
14269
  size: 12
14188
- }))), !isAdmin && React__default.createElement(IconButton, {
14270
+ }))), !(isAdmin || isSuperAdmin) && React__default.createElement(IconButton, {
14189
14271
  color: "default",
14190
14272
  className: "bg-primary text-white me-1",
14191
14273
  onClick: function onClick() {
@@ -19146,6 +19228,7 @@ var NoteItem = function NoteItem(_ref) {
19146
19228
  }),
19147
19229
  placement: placement
19148
19230
  }, React__default.createElement(IconButton, {
19231
+ disabled: !actions.length,
19149
19232
  onClick: handleMoreClick
19150
19233
  }, React__default.createElement(MdMoreHoriz, {
19151
19234
  color: "#5d5d5b"
@@ -19453,11 +19536,10 @@ var useExamResultData = function useExamResultData(props) {
19453
19536
  var getData = function getData() {
19454
19537
  resetData();
19455
19538
  if (!(user !== null && user !== void 0 && user.email)) return;
19456
- isStudent && chapterId ? getDataTextbookResult() : getStudentData(examCode);
19457
- !isStudent && getStudentDataByTeacher(examSessionId, studentId);
19539
+ if (chapterId) getDataTextbookResult();else isStudent ? getStudentData(examCode) : getStudentDataByTeacher(examSessionId, studentId);
19458
19540
  };
19459
19541
  examCode === "example-code" ? setExampleData() : getData();
19460
- }, [examCode, isStudent, code, examSessionId, studentId, user === null || user === void 0 ? void 0 : user.email]);
19542
+ }, [examCode, isStudent, code, examSessionId, studentId, chapterId, user === null || user === void 0 ? void 0 : user.email]);
19461
19543
  var handlePrevChart = function handlePrevChart() {
19462
19544
  if (dataChartIndex > 0) {
19463
19545
  setDataChartIndex(dataChartIndex - 1);
@@ -20913,6 +20995,9 @@ var UserSchema = object().shape({
20913
20995
  },
20914
20996
  then: function then(schema) {
20915
20997
  return schema.trim().required("school_name_is_required");
20998
+ },
20999
+ otherwise: function otherwise(schema) {
21000
+ return schema.notRequired();
20916
21001
  }
20917
21002
  }),
20918
21003
  grade: number().transform(function (value) {
@@ -20923,6 +21008,9 @@ var UserSchema = object().shape({
20923
21008
  },
20924
21009
  then: function then(schema) {
20925
21010
  return schema.required("student_grade_is_required").typeError("student_grade_is_required").min(1, "student_grade_is_invalid").max(12, "student_grade_is_invalid");
21011
+ },
21012
+ otherwise: function otherwise(schema) {
21013
+ return schema.notRequired();
20926
21014
  }
20927
21015
  }),
20928
21016
  major: string().when("role", {
@@ -20931,6 +21019,9 @@ var UserSchema = object().shape({
20931
21019
  },
20932
21020
  then: function then(schema) {
20933
21021
  return schema.trim().required("major_is_required");
21022
+ },
21023
+ otherwise: function otherwise(schema) {
21024
+ return schema.notRequired();
20934
21025
  }
20935
21026
  }),
20936
21027
  parentPhoneNumber: string().when("role", {
@@ -20941,6 +21032,9 @@ var UserSchema = object().shape({
20941
21032
  return schema.trim().matches(phoneRegExp, {
20942
21033
  message: "parent_phone_number_is_invalid"
20943
21034
  }).min(10, "parent_phone_number_is_invalid").required("parent_phone_number_is_required");
21035
+ },
21036
+ otherwise: function otherwise(schema) {
21037
+ return schema.notRequired();
20944
21038
  }
20945
21039
  }),
20946
21040
  parentName: string().when("role", {
@@ -20949,6 +21043,9 @@ var UserSchema = object().shape({
20949
21043
  },
20950
21044
  then: function then(schema) {
20951
21045
  return schema.trim().required("parent_name_is_required");
21046
+ },
21047
+ otherwise: function otherwise(schema) {
21048
+ return schema.notRequired();
20952
21049
  }
20953
21050
  }),
20954
21051
  subjectId: number().when("role", {
@@ -21488,7 +21585,8 @@ var UserDialog = function UserDialog(_ref) {
21488
21585
  size: "1rem"
21489
21586
  }) : React__default.createElement(IconButton, {
21490
21587
  className: "bg-success",
21491
- onClick: getDefaultPassCode
21588
+ onClick: getDefaultPassCode,
21589
+ disabled: disabled
21492
21590
  }, React__default.createElement(FaRotateRight, {
21493
21591
  color: "#FFF",
21494
21592
  size: 10
@@ -21515,7 +21613,8 @@ var UserDialog = function UserDialog(_ref) {
21515
21613
  disabled: disabled
21516
21614
  }), React__default.createElement(Box, null, React__default.createElement(IconButton, {
21517
21615
  className: "bg-success",
21518
- onClick: getRandomPassCode
21616
+ onClick: getRandomPassCode,
21617
+ disabled: disabled
21519
21618
  }, React__default.createElement(FaRotateRight, {
21520
21619
  color: "#FFF",
21521
21620
  size: 10
@@ -22176,6 +22275,10 @@ var RecentUserActionDialog = function RecentUserActionDialog(_ref) {
22176
22275
 
22177
22276
  var UserList = function UserList(_ref) {
22178
22277
  var role = _ref.role;
22278
+ var isSuperAdmin = useSelector(function (state) {
22279
+ var _state$common, _state$common$user;
22280
+ 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;
22281
+ });
22179
22282
  var isAdmin = role === Role.Admin;
22180
22283
  var _useUserList = useUserList(role),
22181
22284
  userHeaders = _useUserList.userHeaders,
@@ -22229,7 +22332,7 @@ var UserList = function UserList(_ref) {
22229
22332
  mb: 2
22230
22333
  }, React__default.createElement(Typography, {
22231
22334
  variant: "h4"
22232
- }, t("users")), isAdmin && React__default.createElement("div", {
22335
+ }, t("users")), (isAdmin || isSuperAdmin) && React__default.createElement("div", {
22233
22336
  className: "d-flex"
22234
22337
  }, React__default.createElement("input", {
22235
22338
  type: "file",
@@ -22337,7 +22440,7 @@ var UserList = function UserList(_ref) {
22337
22440
  key: i.id
22338
22441
  }, React__default.createElement(TableCell$1, null, (paging.page - 1) * paging.limit + index + 1), React__default.createElement(TableCell$1, null, i.email), React__default.createElement(TableCell$1, null, i.fullName), React__default.createElement(TableCell$1, null, i.phoneNumber), React__default.createElement(TableCell$1, null, utcToLocalTime(i.createdAt, t("date_time_format"))), React__default.createElement(TableCell$1, null, (_i$classes = i.classes) === null || _i$classes === void 0 ? void 0 : _i$classes.join(", ")), React__default.createElement(TableCell$1, null, (_i$subject = i.subject) === null || _i$subject === void 0 ? void 0 : _i$subject.name), React__default.createElement(TableCell$1, null, !!i.roles && formatRole(i.roles, t)), React__default.createElement(TableCell$1, null, React__default.createElement("div", {
22339
22442
  className: "d-flex"
22340
- }, isAdmin ? React__default.createElement(IconButton, {
22443
+ }, isAdmin || isSuperAdmin ? React__default.createElement(IconButton, {
22341
22444
  color: "default",
22342
22445
  className: styles$5["action-btn"] + " bg-warning text-white me-2",
22343
22446
  onClick: function onClick() {
@@ -22354,7 +22457,7 @@ var UserList = function UserList(_ref) {
22354
22457
  }
22355
22458
  }, React__default.createElement(FaEye$1, {
22356
22459
  size: 12
22357
- })), isAdmin && React__default.createElement(IconButton, {
22460
+ })), (isAdmin || isSuperAdmin) && React__default.createElement(IconButton, {
22358
22461
  onClick: function onClick() {
22359
22462
  return openDeleteDialog(i);
22360
22463
  },
@@ -22384,14 +22487,14 @@ var UserList = function UserList(_ref) {
22384
22487
  }), React__default.createElement(UserDialog, {
22385
22488
  open: openUserDialog,
22386
22489
  data: userDetail,
22387
- disabled: !isAdmin,
22490
+ disabled: !(isAdmin || isSuperAdmin),
22388
22491
  onClose: handleCloseUserDialog,
22389
22492
  onSubmitForm: handleCreateOrUpdateUser
22390
22493
  }), React__default.createElement(RecentUserActionDialog, {
22391
22494
  open: isOpenRecentUserActionDialog,
22392
22495
  onClose: handleCloseRecentUserActionDialog,
22393
22496
  recentUserActions: recentUserActions
22394
- }), isAdmin && React__default.createElement(DeleteUserCsvDialog, {
22497
+ }), (isAdmin || isSuperAdmin) && React__default.createElement(DeleteUserCsvDialog, {
22395
22498
  open: isOpenDeleteUserCsv,
22396
22499
  file: deleteFile,
22397
22500
  onChangeFile: handleChangeDeleteFile,
@@ -23703,9 +23806,6 @@ var TextbookDefaultQuery = {
23703
23806
  sortColumnDirection: OrderType.ASC,
23704
23807
  sortColumnName: TextbookSortBy.Title
23705
23808
  };
23706
- var TEXTBOOK_URL$1 = "/teacher/teacher-admin/textbooks";
23707
- var ADMIN_TEXTBOOK_URL = "/textbooks";
23708
- var SUPER_ADMIN_TEXTBOOK_URL = "/personal/textbooks";
23709
23809
  var DEFAULT_TEXTBOOK = {
23710
23810
  name: "",
23711
23811
  chapters: []
@@ -23873,7 +23973,9 @@ var useTextbookDetail = function useTextbookDetail(props) {
23873
23973
  isReadonlyParam = props.isReadonlyParam,
23874
23974
  navigate = props.navigate,
23875
23975
  id = props.id,
23876
- isSuperAdmin = props.isSuperAdmin;
23976
+ isSuperAdmin = props.isSuperAdmin,
23977
+ onNavigateDetail = props.onNavigateDetail,
23978
+ onNavigateList = props.onNavigateList;
23877
23979
  var _useTranslation = useTranslation(),
23878
23980
  t = _useTranslation.t;
23879
23981
  var dispatch = useDispatch();
@@ -23906,7 +24008,6 @@ var useTextbookDetail = function useTextbookDetail(props) {
23906
24008
  var _useState9 = useState([]),
23907
24009
  categoryList = _useState9[0],
23908
24010
  setCategoryList = _useState9[1];
23909
- var textbookUrl = isSuperAdmin ? SUPER_ADMIN_TEXTBOOK_URL : role === Role.Teacher ? TEXTBOOK_URL$1 : ADMIN_TEXTBOOK_URL;
23910
24011
  var isAdminSite = role === Role.Admin;
23911
24012
  var user = useSelector(function (state) {
23912
24013
  var _state$common;
@@ -24466,10 +24567,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
24466
24567
  subjectId: textbook.subject.id
24467
24568
  };
24468
24569
  return Promise.resolve(createTextbookApi(_body)).then(function (res) {
24469
- var textbookId = res.data.id;
24470
- navigate(textbookUrl + "/" + textbookId, {
24471
- replace: true
24472
- });
24570
+ onNavigateDetail === null || onNavigateDetail === void 0 ? void 0 : onNavigateDetail(res.data, false, true);
24473
24571
  });
24474
24572
  }
24475
24573
  }();
@@ -24512,9 +24610,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
24512
24610
  }
24513
24611
  };
24514
24612
  var handleGoToTextbookList = function handleGoToTextbookList() {
24515
- navigate(textbookUrl, {
24516
- replace: true
24517
- });
24613
+ onNavigateList(true);
24518
24614
  };
24519
24615
  var textbookSubject = useMemo(function () {
24520
24616
  return textbook !== null && textbook !== void 0 && textbook.subject ? {
@@ -24910,7 +25006,8 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
24910
25006
  var _textbook$chapters;
24911
25007
  var navigate = props.navigate,
24912
25008
  as = props.as,
24913
- className = props.className;
25009
+ className = props.className,
25010
+ onNavigateDetail = props.onNavigateDetail;
24914
25011
  var _useTextbookDetail = useTextbookDetail(props),
24915
25012
  id = _useTextbookDetail.id,
24916
25013
  t = _useTextbookDetail.t,
@@ -24959,7 +25056,7 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
24959
25056
  }),
24960
25057
  categoryOptions = _useCategorySelect.categoryOptions;
24961
25058
  var Wrapper = as || Container;
24962
- if (isNotFound) return React__default.createElement(NotFound, {
25059
+ if (isNotFound || id && textbook.isPrepared) return React__default.createElement(NotFound, {
24963
25060
  history: navigate
24964
25061
  });
24965
25062
  return React__default.createElement(Wrapper, {
@@ -25039,7 +25136,7 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
25039
25136
  textbook: textbook,
25040
25137
  onBack: handleGoToTextbookList,
25041
25138
  onSave: handleCreateOrUpdateTextbook,
25042
- hideSave: !!id && isReadonly
25139
+ hideSave: !!id && isReadonly || !onNavigateDetail
25043
25140
  }))), React__default.createElement(Grid, {
25044
25141
  item: true,
25045
25142
  xs: 12,
@@ -25117,8 +25214,8 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
25117
25214
 
25118
25215
  var PAGE_TITLE$7 = "textbooks";
25119
25216
  var useTextbookList = function useTextbookList(props) {
25120
- var role = props.role,
25121
- navigate = props.navigate,
25217
+ var onNavigateCreate = props.onNavigateCreate,
25218
+ onNavigateDetail = props.onNavigateDetail,
25122
25219
  isSuperAdmin = props.isSuperAdmin;
25123
25220
  var _useList = useList(function (search) {
25124
25221
  return getTextbookListApi(search, isSuperAdmin);
@@ -25136,21 +25233,15 @@ var useTextbookList = function useTextbookList(props) {
25136
25233
  getData = _useList.getData;
25137
25234
  var _useTranslation = useTranslation(),
25138
25235
  t = _useTranslation.t;
25139
- var textbookUrl = isSuperAdmin ? SUPER_ADMIN_TEXTBOOK_URL : role === Role.Teacher ? TEXTBOOK_URL$1 : ADMIN_TEXTBOOK_URL;
25140
25236
  var dispatch = useDispatch();
25141
- var handleViewTextbook = function handleViewTextbook(id) {
25142
- console.log(textbookUrl + "/" + id);
25143
- navigate(textbookUrl + "/" + id + "?readonly=true", {
25144
- replace: true
25145
- });
25237
+ var handleViewTextbook = function handleViewTextbook(data) {
25238
+ onNavigateDetail(data, true, true);
25146
25239
  };
25147
- var handleUpdateTextbook = function handleUpdateTextbook(id) {
25148
- navigate(textbookUrl + "/" + id, {
25149
- replace: true
25150
- });
25240
+ var handleUpdateTextbook = function handleUpdateTextbook(data) {
25241
+ onNavigateDetail(data, false, true);
25151
25242
  };
25152
25243
  var handleCreateTextbook = function handleCreateTextbook() {
25153
- pushTo(navigate, textbookUrl + "/create");
25244
+ onNavigateCreate === null || onNavigateCreate === void 0 ? void 0 : onNavigateCreate();
25154
25245
  };
25155
25246
  var toggleConfirmDialog = function toggleConfirmDialog() {
25156
25247
  handleChangeSelectedItem(undefined);
@@ -25379,7 +25470,7 @@ var useTextbookShare = function useTextbookShare(props) {
25379
25470
  var getData = props.getData,
25380
25471
  role = props.role,
25381
25472
  isSuperAdmin = props.isSuperAdmin;
25382
- var _useList = useList(role === Role.Teacher ? function (search) {
25473
+ var _useList = useList(!isSuperAdmin ? function (search) {
25383
25474
  return getTeacherListApi$1(search);
25384
25475
  } : null, DefaultTeacherQuery),
25385
25476
  filterShare = _useList.filter,
@@ -25419,8 +25510,10 @@ var useTextbookShare = function useTextbookShare(props) {
25419
25510
  var _state$common;
25420
25511
  return (state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user) || {};
25421
25512
  });
25422
- var isAdmin = infoUser === null || infoUser === void 0 ? void 0 : (_infoUser$roles = infoUser.roles) === null || _infoUser$roles === void 0 ? void 0 : _infoUser$roles.includes(Role.Admin);
25513
+ var isAdmin = infoUser && (infoUser === null || infoUser === void 0 ? void 0 : (_infoUser$roles = infoUser.roles) === null || _infoUser$roles === void 0 ? void 0 : _infoUser$roles.includes(Role.Admin));
25423
25514
  var isAdminSite = role === Role.Admin;
25515
+ var onAcademy = !!infoUser.academyDomain;
25516
+ var isSuperAdminUser = infoUser && infoUser.isSuperAdmin;
25424
25517
  useEffect(function () {
25425
25518
  if (!isUpdate) {
25426
25519
  filterTeacherNotShared(currentModel);
@@ -25429,6 +25522,8 @@ var useTextbookShare = function useTextbookShare(props) {
25429
25522
  }
25430
25523
  }, [teachers, isUpdate]);
25431
25524
  var handleOpenShareDialog = function handleOpenShareDialog(textbook) {
25525
+ if (textSearchShareRef.current) textSearchShareRef.current.value = "";
25526
+ getData();
25432
25527
  setIsUpdate(false);
25433
25528
  setOpenShareDialog(true);
25434
25529
  setCurrentModel(textbook);
@@ -25453,6 +25548,8 @@ var useTextbookShare = function useTextbookShare(props) {
25453
25548
  setSelectedShare([]);
25454
25549
  };
25455
25550
  var handleOpenUpdateShareDialog = function handleOpenUpdateShareDialog(textbook) {
25551
+ if (textSearchShareRef.current) textSearchShareRef.current.value = "";
25552
+ getData();
25456
25553
  setIsUpdate(true);
25457
25554
  setOpenShareDialog(true);
25458
25555
  setCurrentModel(textbook);
@@ -25507,8 +25604,11 @@ var useTextbookShare = function useTextbookShare(props) {
25507
25604
  });
25508
25605
  setShared(existsTeachers);
25509
25606
  };
25510
- var handleDisable = function handleDisable(textbook) {
25511
- return isAdmin && !isAdminSite || !isAdmin && (!textbook.isShared || textbook.createdBy.id != infoUser.id) || isSuperAdmin;
25607
+ var enabledSave = function enabledSave(textbook) {
25608
+ return isAdminSite || isSuperAdmin || isSuperAdminUser || !isAdmin && textbook.isShared && textbook.createdBy.id === infoUser.id;
25609
+ };
25610
+ var enabledShare = function enabledShare(textbook) {
25611
+ return textbook.isShared && onAcademy && (isAdminSite || isSuperAdminUser || !isAdmin && textbook.createdBy.id === infoUser.id);
25512
25612
  };
25513
25613
  var handleShareTextbook = function handleShareTextbook(teacherIds, textbookId) {
25514
25614
  try {
@@ -25586,13 +25686,16 @@ var useTextbookShare = function useTextbookShare(props) {
25586
25686
  isUpdate: isUpdate,
25587
25687
  handleUpdateSharedTextbook: handleUpdateSharedTextbook,
25588
25688
  currentModel: currentModel,
25589
- handleDisable: handleDisable,
25689
+ enabledSave: enabledSave,
25690
+ enabledShare: enabledShare,
25590
25691
  isAdmin: isAdmin,
25591
25692
  isAdminSite: isAdminSite
25592
25693
  };
25593
25694
  };
25594
25695
 
25595
25696
  var TextbookList = function TextbookList(props) {
25697
+ var _props$createable = props.createable,
25698
+ createable = _props$createable === void 0 ? true : _props$createable;
25596
25699
  var _useTranslation = useTranslation(),
25597
25700
  t = _useTranslation.t;
25598
25701
  var _useTextbookList = useTextbookList(props),
@@ -25638,9 +25741,8 @@ var TextbookList = function TextbookList(props) {
25638
25741
  isUpdate = _useTextbookShare.isUpdate,
25639
25742
  handleUpdateSharedTextbook = _useTextbookShare.handleUpdateSharedTextbook,
25640
25743
  currentModel = _useTextbookShare.currentModel,
25641
- handleDisable = _useTextbookShare.handleDisable,
25642
- isAdmin = _useTextbookShare.isAdmin,
25643
- isAdminSite = _useTextbookShare.isAdminSite;
25744
+ enabledSave = _useTextbookShare.enabledSave,
25745
+ enabledShare = _useTextbookShare.enabledShare;
25644
25746
  return React__default.createElement(LayoutList, {
25645
25747
  title: t(TEXTBOOK_PAGE_TITLE)
25646
25748
  }, React__default.createElement(Grid, {
@@ -25662,14 +25764,14 @@ var TextbookList = function TextbookList(props) {
25662
25764
  justifyContent: "flex-end"
25663
25765
  },
25664
25766
  spacing: 2
25665
- }, (!isAdmin || isAdminSite) && React__default.createElement(Button, {
25767
+ }, createable && React__default.createElement(Button, {
25666
25768
  startIcon: React__default.createElement(FaPlus, {
25667
25769
  size: 12
25668
25770
  }),
25669
25771
  variant: "contained",
25670
25772
  color: "primary",
25671
25773
  onClick: handleCreateTextbook,
25672
- className: (isAdmin && !isAdminSite ? "bg-secondary" : "bg-success") + " text-white"
25774
+ className: "bg-success text-white"
25673
25775
  }, t("create_textbook")))), React__default.createElement(Grid, {
25674
25776
  item: true,
25675
25777
  xs: 12,
@@ -25691,32 +25793,32 @@ var TextbookList = function TextbookList(props) {
25691
25793
  alignItems: "center"
25692
25794
  }, React__default.createElement(IconButton, {
25693
25795
  color: "default",
25694
- className: (handleDisable(i) ? "bg-secondary" : "bg-warning") + " text-white",
25796
+ className: (!enabledSave(i) ? "bg-secondary" : "bg-warning") + " text-white",
25695
25797
  onClick: function onClick() {
25696
- return handleUpdateTextbook(i.id);
25798
+ return handleUpdateTextbook(i);
25697
25799
  },
25698
- disabled: handleDisable(i)
25800
+ disabled: !enabledSave(i)
25699
25801
  }, React__default.createElement(FaPencil, {
25700
25802
  size: 12
25701
25803
  })), React__default.createElement(IconButton, {
25702
25804
  color: "default",
25703
25805
  className: "bg-primary text-white",
25704
25806
  onClick: function onClick() {
25705
- return handleViewTextbook(i.id);
25807
+ return handleViewTextbook(i);
25706
25808
  }
25707
25809
  }, React__default.createElement(FaEye$1, {
25708
25810
  size: 12
25709
25811
  })), React__default.createElement(IconButton, {
25710
- disabled: handleDisable(i) || isAdmin,
25711
- className: (handleDisable(i) || isAdmin ? "bg-secondary" : "bg-info") + " text-white me-1",
25812
+ disabled: !enabledShare(i),
25813
+ className: (!enabledShare(i) ? "bg-secondary" : "bg-info") + " text-white me-1",
25712
25814
  onClick: function onClick() {
25713
25815
  return handleOpenShareDialog(i);
25714
25816
  }
25715
25817
  }, React__default.createElement(FaShare, {
25716
25818
  size: 12
25717
25819
  })), React__default.createElement(IconButton, {
25718
- disabled: handleDisable(i) || isAdmin,
25719
- className: (handleDisable(i) || isAdmin ? "bg-secondary" : "bg-success") + " text-white me-1",
25820
+ disabled: !enabledShare(i),
25821
+ className: (!enabledShare(i) ? "bg-secondary" : "bg-success") + " text-white me-1",
25720
25822
  onClick: function onClick() {
25721
25823
  return handleOpenUpdateShareDialog(i);
25722
25824
  }
@@ -25724,11 +25826,11 @@ var TextbookList = function TextbookList(props) {
25724
25826
  size: 12
25725
25827
  })), React__default.createElement(IconButton, {
25726
25828
  color: "default",
25727
- className: (handleDisable(i) ? "bg-secondary" : "bg-danger") + " text-white mr-1",
25829
+ className: (!enabledSave(i) ? "bg-secondary" : "bg-danger") + " text-white mr-1",
25728
25830
  onClick: function onClick() {
25729
25831
  return handleSelectDeleteTextbook(i);
25730
25832
  },
25731
- disabled: handleDisable(i)
25833
+ disabled: !enabledSave(i)
25732
25834
  }, React__default.createElement(FaTrash, {
25733
25835
  size: 12
25734
25836
  })))));
@@ -27493,8 +27595,8 @@ var CourseSelector = function CourseSelector(_ref) {
27493
27595
  }));
27494
27596
  };
27495
27597
 
27496
- var TEXTBOOK_URL$2 = BASE_URL + "/api/textbooks";
27497
- var SUPER_ADMIN_TEXTBOOK_URL$1 = SUPER_ADMIN_BASE_URL + "/api/textbook";
27598
+ var TEXTBOOK_URL$1 = BASE_URL + "/api/textbooks";
27599
+ var SUPER_ADMIN_TEXTBOOK_URL = SUPER_ADMIN_BASE_URL + "/api/textbook";
27498
27600
  var PREPARED_TEXTBOOK_URL = BASE_URL + "/api/textbooks/prepared-textbooks";
27499
27601
  var SUPER_ADMIN_PREPARED_TEXTBOOK_URL = SUPER_ADMIN_BASE_URL + "/api/textbook/prepared-textbooks";
27500
27602
  var FILE_URL = BASE_URL + "/api/file/images";
@@ -27503,7 +27605,7 @@ var uploadImageFileApi = function uploadImageFileApi(formData, isAdmin) {
27503
27605
  return apiUpload.post("" + (isAdmin ? SUPER_FILE_URL : FILE_URL), formData);
27504
27606
  };
27505
27607
  var getTextbookDetailApi = function getTextbookDetailApi(id, isAdmin) {
27506
- return api.get((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : TEXTBOOK_URL$2) + "/" + id);
27608
+ return api.get((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : TEXTBOOK_URL$1) + "/" + id);
27507
27609
  };
27508
27610
  var getTextbookListApi$1 = function getTextbookListApi(query, isAdmin) {
27509
27611
  return api.get("" + (isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : PREPARED_TEXTBOOK_URL), {
@@ -27517,14 +27619,14 @@ var updateTextbookApi$1 = function updateTextbookApi(values, id, isAdmin) {
27517
27619
  return api.put((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : PREPARED_TEXTBOOK_URL) + "/" + id, values);
27518
27620
  };
27519
27621
  var getAcademyByTeacher = function getAcademyByTeacher(email, isAdmin) {
27520
- return api.get((isAdmin ? SUPER_ADMIN_TEXTBOOK_URL$1 : TEXTBOOK_URL$2) + "/academy-teacher-owner", {
27622
+ return api.get((isAdmin ? SUPER_ADMIN_TEXTBOOK_URL : TEXTBOOK_URL$1) + "/academy-teacher-owner", {
27521
27623
  params: {
27522
27624
  email: email
27523
27625
  }
27524
27626
  });
27525
27627
  };
27526
27628
  var deleteTextbookApi$1 = function deleteTextbookApi(textbookId, isAdmin) {
27527
- return api["delete"]((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : TEXTBOOK_URL$2) + "/" + textbookId);
27629
+ return api["delete"]((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : TEXTBOOK_URL$1) + "/" + textbookId);
27528
27630
  };
27529
27631
 
27530
27632
  var useSelect = function useSelect(_ref) {
@@ -27773,8 +27875,8 @@ var TextbookOwners = function TextbookOwners(_ref) {
27773
27875
  };
27774
27876
 
27775
27877
  var useTextbookManagement = function useTextbookManagement(_ref) {
27776
- var navigate = _ref.navigate,
27777
- textbookId = _ref.textbookId;
27878
+ var textbookId = _ref.textbookId,
27879
+ onNavigateList = _ref.onNavigateList;
27778
27880
  var _useTranslation = useTranslation(),
27779
27881
  t = _useTranslation.t;
27780
27882
  var theme = useTheme();
@@ -27793,7 +27895,6 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
27793
27895
  return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
27794
27896
  });
27795
27897
  var isSuperAdmin = !!user && !user.academyDomain;
27796
- var isTeacher = ((user === null || user === void 0 ? void 0 : user.roles) || []).includes(Role.Teacher);
27797
27898
  var handleOpenDialog = function handleOpenDialog(item) {
27798
27899
  if (item) {
27799
27900
  setSelectedTextbook(item);
@@ -27856,7 +27957,7 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
27856
27957
  }), isSuperAdmin)).then(function (res) {
27857
27958
  if (res !== null && res !== void 0 && res.data) {
27858
27959
  toast.success(t(!(selectedTextbook !== null && selectedTextbook !== void 0 && selectedTextbook.id) ? "create_the_textbook_successfully" : "update_the_textbook_successfully"));
27859
- pushTo(navigate, !isTeacher ? isSuperAdmin ? "/super-textbook-management" : "/textbook-management" : "/teacher/prepared-exam");
27960
+ onNavigateList();
27860
27961
  }
27861
27962
  });
27862
27963
  }, function (error) {
@@ -27959,7 +28060,8 @@ var schema$4 = function schema(t) {
27959
28060
  };
27960
28061
  var PreparedTextbook = function PreparedTextbook(_ref) {
27961
28062
  var _selectedTextbook$sub, _selectedTextbook$cha;
27962
- var navigate = _ref.navigate,
28063
+ var onNavigateList = _ref.onNavigateList,
28064
+ navigate = _ref.navigate,
27963
28065
  textbookId = _ref.textbookId;
27964
28066
  var _useTextbookState = useTextbookState(),
27965
28067
  isAdmin = _useTextbookState.isAdmin,
@@ -27969,7 +28071,7 @@ var PreparedTextbook = function PreparedTextbook(_ref) {
27969
28071
  handleSetChapterSection = _useTextbookState.handleSetChapterSection,
27970
28072
  handleSetSubChapterSection = _useTextbookState.handleSetSubChapterSection;
27971
28073
  var _useTextbookManagemen = useTextbookManagement({
27972
- navigate: navigate,
28074
+ onNavigateList: onNavigateList,
27973
28075
  textbookId: textbookId
27974
28076
  }),
27975
28077
  t = _useTextbookManagemen.t,
@@ -27978,6 +28080,9 @@ var PreparedTextbook = function PreparedTextbook(_ref) {
27978
28080
  selectedTextbook = _useTextbookManagemen.selectedTextbook,
27979
28081
  handleSubmit = _useTextbookManagemen.handleSubmit,
27980
28082
  handleUploadImage = _useTextbookManagemen.handleUploadImage;
28083
+ if (textbookId && selectedTextbook && !selectedTextbook.isPrepared) return React__default.createElement(NotFound, {
28084
+ history: navigate
28085
+ });
27981
28086
  return React__default.createElement(Formik, {
27982
28087
  initialValues: {
27983
28088
  name: (selectedTextbook === null || selectedTextbook === void 0 ? void 0 : selectedTextbook.name) || "",
@@ -28645,15 +28750,14 @@ var DeleteTextbookDialog = function DeleteTextbookDialog(_ref) {
28645
28750
  };
28646
28751
 
28647
28752
  var PreparedTextbookList = function PreparedTextbookList(_ref) {
28648
- var navigate = _ref.navigate;
28753
+ var onNavigateDetail = _ref.onNavigateDetail,
28754
+ onNavigteCreate = _ref.onNavigteCreate;
28649
28755
  var _useTextbookList = useTextbookList$1(),
28650
28756
  t = _useTextbookList.t,
28651
28757
  theme = _useTextbookList.theme,
28652
28758
  filter = _useTextbookList.filter,
28653
28759
  paging = _useTextbookList.paging,
28654
- isTeacher = _useTextbookList.isTeacher,
28655
28760
  textbooks = _useTextbookList.textbooks,
28656
- isSuperAdmin = _useTextbookList.isSuperAdmin,
28657
28761
  handleChangePage = _useTextbookList.handleChangePage,
28658
28762
  handleSort = _useTextbookList.handleSort,
28659
28763
  openConfirmDialog = _useTextbookList.openConfirmDialog,
@@ -28674,9 +28778,7 @@ var PreparedTextbookList = function PreparedTextbookList(_ref) {
28674
28778
  sx: {
28675
28779
  width: "fit-content"
28676
28780
  },
28677
- onClick: function onClick() {
28678
- return pushTo(navigate, !isTeacher ? isSuperAdmin ? "/super-textbook-management/create" : "/textbook-management/create" : "/teacher/textbook-management/create");
28679
- }
28781
+ onClick: onNavigteCreate
28680
28782
  }, t("create"))), React__default.createElement(Stack, null, React__default.createElement(Grid, {
28681
28783
  item: true,
28682
28784
  xs: 12
@@ -28723,7 +28825,7 @@ var PreparedTextbookList = function PreparedTextbookList(_ref) {
28723
28825
  color: "default",
28724
28826
  className: styles$9["action-btn"] + " bg-warning text-white me-2",
28725
28827
  onClick: function onClick() {
28726
- return pushTo(navigate, !isTeacher ? isSuperAdmin ? "/super-textbook-management/" + i.id + "/detail" : "/textbook-management/" + i.id + "/detail" : "/teacher/textbook-management/" + i.id + "/detail");
28828
+ return onNavigateDetail(i);
28727
28829
  }
28728
28830
  }, React__default.createElement(HiOutlinePencilAlt, {
28729
28831
  className: styles$9["action-btn--pencil"],
@@ -28887,7 +28989,7 @@ var DefaultFilter = {
28887
28989
  };
28888
28990
 
28889
28991
  var PREPARED_TEXTBOOK_URL$1 = BASE_URL + "/api/textbooks/prepared-textbooks";
28890
- var TEXTBOOK_URL$3 = BASE_URL + "/api/textbooks";
28992
+ var TEXTBOOK_URL$2 = BASE_URL + "/api/textbooks";
28891
28993
  var TEXTBOOK_SESSION_URL$1 = BASE_URL + "/api/textbooksession";
28892
28994
  var getTextbookListApi$2 = function getTextbookListApi(query) {
28893
28995
  return api.get("" + PREPARED_TEXTBOOK_URL$1, {
@@ -28901,7 +29003,7 @@ var startPageApi = function startPageApi(value) {
28901
29003
  return api.post(TEXTBOOK_SESSION_URL$1 + "/study-textbook", _extends({}, value));
28902
29004
  };
28903
29005
  var deleteTextbookApi$2 = function deleteTextbookApi(textbookId) {
28904
- return api["delete"](TEXTBOOK_URL$3 + "/" + textbookId);
29006
+ return api["delete"](TEXTBOOK_URL$2 + "/" + textbookId);
28905
29007
  };
28906
29008
 
28907
29009
  var ADMIN_SUBJECT_URL$2 = SUPER_ADMIN_BASE_URL + "/api/subject";
@@ -28971,17 +29073,29 @@ var usePreparedExam = function usePreparedExam(_ref) {
28971
29073
  var _state$common3, _state$common3$user;
28972
29074
  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;
28973
29075
  });
28974
- var isTeacher = useSelector(function (state) {
29076
+ var isStudent = useSelector(function (state) {
28975
29077
  var _state$common4, _state$common4$user;
28976
29078
  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) || [];
29079
+ }).includes(Role.Student);
29080
+ var isTeacher = useSelector(function (state) {
29081
+ var _state$common5, _state$common5$user;
29082
+ 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) || [];
28977
29083
  }).includes(Role.Teacher);
28978
29084
  var _useState5 = useState(false),
28979
29085
  openConfirmDialog = _useState5[0],
28980
29086
  setOpenConfirmDialog = _useState5[1];
28981
- var isSuperAdmin = useSelector(function (state) {
28982
- var _state$common5, _state$common5$user;
28983
- 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) || [];
29087
+ var isSuperAdminDomain = useSelector(function (state) {
29088
+ var _state$common6, _state$common6$user;
29089
+ 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) || [];
28984
29090
  }).includes(Role.Admin) && !isDomain;
29091
+ var isAdmin = useSelector(function (state) {
29092
+ var _state$common7, _state$common7$user;
29093
+ 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) || [];
29094
+ }).includes(Role.Admin);
29095
+ var isSuperAdmin = useSelector(function (state) {
29096
+ var _state$common8, _state$common8$user;
29097
+ 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;
29098
+ });
28985
29099
  var handleCloseConfirmDialog = function handleCloseConfirmDialog() {
28986
29100
  setOpenConfirmDialog(false);
28987
29101
  };
@@ -28995,7 +29109,7 @@ var usePreparedExam = function usePreparedExam(_ref) {
28995
29109
  };
28996
29110
  setLoading(true);
28997
29111
  var _temp = _catch(function () {
28998
- return Promise.resolve(isSuperAdmin ? getSubjectListAdminApi$2("") : getSubjectListApi$2("")).then(function (res) {
29112
+ return Promise.resolve(isSuperAdminDomain ? getSubjectListAdminApi$2("") : getSubjectListApi$2("")).then(function (res) {
28999
29113
  var _res$data$items = res.data.items,
29000
29114
  items = _res$data$items === void 0 ? [] : _res$data$items;
29001
29115
  setSubjects(items);
@@ -29007,7 +29121,7 @@ var usePreparedExam = function usePreparedExam(_ref) {
29007
29121
  } catch (e) {
29008
29122
  return Promise.reject(e);
29009
29123
  }
29010
- }, [isSuperAdmin]);
29124
+ }, [isSuperAdminDomain]);
29011
29125
  var subjectOptions = subjects.map(function (subject) {
29012
29126
  return {
29013
29127
  label: "" + subject.name,
@@ -29148,7 +29262,10 @@ var usePreparedExam = function usePreparedExam(_ref) {
29148
29262
  isKor: isKor,
29149
29263
  paging: paging,
29150
29264
  user: user,
29265
+ isAdmin: isAdmin,
29151
29266
  isTeacher: isTeacher,
29267
+ isStudent: isStudent,
29268
+ isSuperAdmin: isSuperAdmin,
29152
29269
  monthOptions: monthOptions,
29153
29270
  openConfirmDialog: openConfirmDialog,
29154
29271
  handleOpenConfirmDialog: handleOpenConfirmDialog,
@@ -29324,7 +29441,7 @@ var useTextbookDrawer = function useTextbookDrawer(_ref) {
29324
29441
  };
29325
29442
  var handleRedirectEdit = function handleRedirectEdit() {
29326
29443
  if (!textbookId) return;
29327
- pushTo(navigate, "/teacher/textbook-management/" + textbookId + "/detail");
29444
+ pushTo(navigate, "/teacher/prepared-exam/" + textbookId + "/detail");
29328
29445
  };
29329
29446
  var handleStartFromPage = function handleStartFromPage(values) {
29330
29447
  try {
@@ -29874,7 +29991,7 @@ var Statistic = function Statistic(_ref) {
29874
29991
  fontSize: "12px",
29875
29992
  fontWeight: 500,
29876
29993
  color: styles.darker
29877
- }, (chapter.completedChapterQuestions || 0) / (chapter.totalChapterQuestions || 0) * 100 + "%")), React__default.createElement(Stack, {
29994
+ }, ((chapter.completedChapterQuestions || 0) / (chapter.totalChapterQuestions || 0) * 100).toFixed(2) + "%")), React__default.createElement(Stack, {
29878
29995
  sx: {
29879
29996
  width: "1px",
29880
29997
  position: "absolute",
@@ -30077,7 +30194,7 @@ var TextbookDrawer = function TextbookDrawer(_ref) {
30077
30194
  fontSize: "12px",
30078
30195
  fontWeight: 500,
30079
30196
  color: (textbook === null || textbook === void 0 ? void 0 : textbook.progress) === 0 ? theme.palette.common.black : theme.palette.common.white
30080
- }, ((textbook === null || textbook === void 0 ? void 0 : textbook.progress) || 0) + "%")))), !!(textbook !== null && textbook !== void 0 && textbook.chapters.length) && React__default.createElement(Stack, null, React__default.createElement(Box, {
30197
+ }, ((textbook === null || textbook === void 0 ? void 0 : textbook.progress) || 0).toFixed(2) + "%")))), !!(textbook !== null && textbook !== void 0 && textbook.chapters.length) && React__default.createElement(Stack, null, React__default.createElement(Box, {
30081
30198
  mt: "24px",
30082
30199
  mx: "24px",
30083
30200
  bgcolor: theme.palette.common.white,
@@ -30386,8 +30503,10 @@ var TextbookDetail = function TextbookDetail(_ref) {
30386
30503
  };
30387
30504
 
30388
30505
  var TextbookInfoDrawer = function TextbookInfoDrawer(_ref) {
30389
- var _TeacherTabList$find;
30390
- var isOpen = _ref.isOpen,
30506
+ var _textbook$createdBy, _TeacherTabList$find;
30507
+ var user = _ref.user,
30508
+ isSuperAdmin = _ref.isSuperAdmin,
30509
+ isOpen = _ref.isOpen,
30391
30510
  onClose = _ref.onClose,
30392
30511
  textbookId = _ref.textbookId,
30393
30512
  navigate = _ref.navigate,
@@ -30428,7 +30547,9 @@ var TextbookInfoDrawer = function TextbookInfoDrawer(_ref) {
30428
30547
  }, React__default.createElement(IoClose, {
30429
30548
  color: styles.gray_700,
30430
30549
  size: 32
30431
- })), React__default.createElement(Stack, {
30550
+ })), (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) {
30551
+ return i.id === (user === null || user === void 0 ? void 0 : user.id);
30552
+ }))) && React__default.createElement(Stack, {
30432
30553
  flexDirection: "row",
30433
30554
  gap: "16px",
30434
30555
  alignItems: "center"
@@ -30497,10 +30618,13 @@ var TextbookInfoDrawer = function TextbookInfoDrawer(_ref) {
30497
30618
  };
30498
30619
 
30499
30620
  var Textbook = function Textbook(_ref) {
30621
+ var _textbook$createdBy, _textbook$createdBy2;
30500
30622
  var t = _ref.t,
30623
+ user = _ref.user,
30501
30624
  theme = _ref.theme,
30502
30625
  textbook = _ref.textbook,
30503
- isTeacher = _ref.isTeacher,
30626
+ isStudent = _ref.isStudent,
30627
+ isSuperAdmin = _ref.isSuperAdmin,
30504
30628
  navigate = _ref.navigate,
30505
30629
  preparedType = _ref.preparedType,
30506
30630
  preparedFilterType = _ref.preparedFilterType,
@@ -30579,7 +30703,7 @@ var Textbook = function Textbook(_ref) {
30579
30703
  }, React__default.createElement(Stack, {
30580
30704
  flexDirection: "row",
30581
30705
  gap: "10px"
30582
- }, !isTeacher && React__default.createElement(Button, {
30706
+ }, isStudent && React__default.createElement(Button, {
30583
30707
  variant: "contained",
30584
30708
  sx: {
30585
30709
  width: "fit-content",
@@ -30592,7 +30716,9 @@ var Textbook = function Textbook(_ref) {
30592
30716
  onClick: handleOpenDialog
30593
30717
  }, React__default.createElement(FaBookOpen, {
30594
30718
  size: "20px"
30595
- }), t("test_start")), isTeacher && React__default.createElement(Button, {
30719
+ }), 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) {
30720
+ return i.id === (user === null || user === void 0 ? void 0 : user.id);
30721
+ }))) && React__default.createElement(Button, {
30596
30722
  variant: "outlined",
30597
30723
  sx: {
30598
30724
  width: "fit-content",
@@ -30603,11 +30729,11 @@ var Textbook = function Textbook(_ref) {
30603
30729
  maxHeight: "41px"
30604
30730
  },
30605
30731
  onClick: function onClick() {
30606
- return pushTo(navigate, "/teacher/textbook-management/" + (textbook === null || textbook === void 0 ? void 0 : textbook.id) + "/detail");
30732
+ return pushTo(navigate, "/teacher/prepared-exam/" + (textbook === null || textbook === void 0 ? void 0 : textbook.id) + "/detail");
30607
30733
  }
30608
30734
  }, React__default.createElement(FaBookOpen, {
30609
30735
  size: "20px"
30610
- }), t("test_editing")), isTeacher && React__default.createElement(Button, {
30736
+ }), t("test_editing")), !isStudent && React__default.createElement(Button, {
30611
30737
  variant: "contained",
30612
30738
  sx: {
30613
30739
  width: "fit-content",
@@ -30622,7 +30748,9 @@ var Textbook = function Textbook(_ref) {
30622
30748
  }
30623
30749
  }, React__default.createElement(IoInformationCircle, {
30624
30750
  size: "20px"
30625
- }), t("exam_information"))), isTeacher && React__default.createElement(Button, {
30751
+ }), 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) {
30752
+ return i.id === (user === null || user === void 0 ? void 0 : user.id);
30753
+ }))) && React__default.createElement(Button, {
30626
30754
  variant: "contained",
30627
30755
  sx: {
30628
30756
  width: "fit-content",
@@ -30644,6 +30772,8 @@ var Textbook = function Textbook(_ref) {
30644
30772
  textbookId: textbook.id,
30645
30773
  navigate: navigate
30646
30774
  }), openDetailDialog && React__default.createElement(TextbookInfoDrawer, {
30775
+ user: user,
30776
+ isSuperAdmin: isSuperAdmin,
30647
30777
  isOpen: openDetailDialog,
30648
30778
  onClose: handleCloseDetailDialog,
30649
30779
  textbookId: textbook.id,
@@ -30674,9 +30804,12 @@ var PreparedItem = function PreparedItem(_ref) {
30674
30804
  history: history
30675
30805
  }),
30676
30806
  t = _usePreparedExam.t,
30807
+ user = _usePreparedExam.user,
30677
30808
  theme = _usePreparedExam.theme,
30678
30809
  paging = _usePreparedExam.paging,
30679
- isTeacher = _usePreparedExam.isTeacher,
30810
+ isAdmin = _usePreparedExam.isAdmin,
30811
+ isStudent = _usePreparedExam.isStudent,
30812
+ isSuperAdmin = _usePreparedExam.isSuperAdmin,
30680
30813
  handleChangePage = _usePreparedExam.handleChangePage,
30681
30814
  textbookList = _usePreparedExam.textbookList,
30682
30815
  getTextbookList = _usePreparedExam.getTextbookList,
@@ -30833,7 +30966,7 @@ var PreparedItem = function PreparedItem(_ref) {
30833
30966
  },
30834
30967
  onClick: handleToggleExpand,
30835
30968
  startIcon: React__default.createElement(IoIosArrowDown, null)
30836
- }, t("fold"))), isTeacher && React__default.createElement(Stack, null, React__default.createElement(Button, {
30969
+ }, t("fold"))), !isStudent && !isAdmin && React__default.createElement(Stack, null, React__default.createElement(Button, {
30837
30970
  variant: "contained",
30838
30971
  sx: {
30839
30972
  width: "fit-content",
@@ -30844,7 +30977,7 @@ var PreparedItem = function PreparedItem(_ref) {
30844
30977
  marginRight: "27px"
30845
30978
  },
30846
30979
  onClick: function onClick() {
30847
- return pushTo(navigate, "/teacher/textbook-management/create");
30980
+ return pushTo(navigate, "/teacher/prepared-exam/create");
30848
30981
  }
30849
30982
  }, React__default.createElement(IoAddCircle, null), t("create_a_new_workbook"))))), React__default.createElement(AccordionDetails, {
30850
30983
  sx: {
@@ -31187,9 +31320,11 @@ var PreparedItem = function PreparedItem(_ref) {
31187
31320
  }, textbookList === null || textbookList === void 0 ? void 0 : textbookList.map(function (textbook) {
31188
31321
  return React__default.createElement(Textbook, {
31189
31322
  t: t,
31323
+ user: user,
31190
31324
  theme: theme,
31191
31325
  textbook: textbook,
31192
- isTeacher: isTeacher,
31326
+ isSuperAdmin: isSuperAdmin,
31327
+ isStudent: isStudent,
31193
31328
  navigate: navigate,
31194
31329
  getTextbookList: getTextbookList,
31195
31330
  preparedType: preparedType,
@@ -31238,6 +31373,7 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
31238
31373
  var isAdmin = role === Role.Admin;
31239
31374
  var isSuperAdmin = user && (!user.academyDomain && !user.isLearningSpace && ((_user$roles = user.roles) === null || _user$roles === void 0 ? void 0 : _user$roles.includes(Role.Admin)) || user.isSuperAdmin);
31240
31375
  var isStudentSite = role === Role.Student;
31376
+ var isTeacherSite = role === Role.Teacher;
31241
31377
  var isLearningSpace = user === null || user === void 0 ? void 0 : user.isLearningSpace;
31242
31378
  var _useTranslation = useTranslation(),
31243
31379
  t = _useTranslation.t;
@@ -31331,7 +31467,7 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
31331
31467
  }, React__default.createElement(GoArrowSwitch, {
31332
31468
  size: 14,
31333
31469
  color: styles.gray_900
31334
- })))))), (isSuperAdmin || !isAdmin) && React__default.createElement(Popover, {
31470
+ })))))), (isSuperAdmin || !isAdmin || isTeacherSite) && React__default.createElement(Popover, {
31335
31471
  open: !!open,
31336
31472
  anchorEl: open,
31337
31473
  onClose: handleClose,