touchstudy-core 0.1.33 → 0.1.35

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
@@ -39,6 +39,7 @@ var DialogTitle = _interopDefault(require('@mui/material/DialogTitle'));
39
39
  var DialogContent = _interopDefault(require('@mui/material/DialogContent'));
40
40
  var DialogActions = _interopDefault(require('@mui/material/DialogActions'));
41
41
  var Typography = _interopDefault(require('@mui/material/Typography'));
42
+ var reactRouterDom = require('react-router-dom');
42
43
 
43
44
  var setLoading = toolkit.createAction("common/setLoading");
44
45
  var setAlert = toolkit.createAction("common/setAlert");
@@ -138,7 +139,7 @@ function _objectWithoutPropertiesLoose(source, excluded) {
138
139
  return target;
139
140
  }
140
141
 
141
- var styleGlobal = {"btn-login-google":"_2HqmH","block-login":"_wWIyO","box-login":"_38Lo1","dropdown-menu":"_1krbH","header-avatar":"_RQaHE","dropdown-menu-flag":"_XK8oS","dropdown-content":"_3ys4W","dropdown-change":"_ToOW_","item-address":"_3sQlR","item-logout":"_3bqSM","title-address":"_1jgSI","img-avatar":"_35Ttz","item-contact":"_1wc7o","content-text":"_3S4f2","dropdown-content-language":"_3ajui","dropdown-item-language":"_3Y_y4","dropdown-item-language-active":"_CzNMi","dropdown-academy":"_3CMVp","image-academy":"_2ibYC","academy-btn":"_1JMRU","switch-icon":"_N4FNf","dropdown-content-academy":"_31Dr0","dropdown-academy-item":"_3bjcz","noGutters":"_31ZQk","custom-col-2":"_3yXyK","custom-col-3":"_1RsJQ","custom-col-5":"_L42CP","custom-col-10":"_2u6eL","custom-row":"_8x7OP","custom-col":"_1JmTh","custom-col-4":"_3HO1e","custom-col-8":"_Oy31M","custom-col-12":"_3aUKo","custom-container":"_39LRs","form-label":"__Ut-u","form-control":"_2k4dX","btn-outline-primary":"_2PWdX","sort-icons":"_mQvLF","active":"_3oAH-","form-select":"_3W3aw","truncate":"_3NJzN"};
142
+ var styles = {"btn-login-google":"_2HqmH","block-login":"_wWIyO","box-login":"_38Lo1","btn-primary":"_rd4Uy","dropdown-menu":"_1krbH","header-avatar":"_RQaHE","dropdown-menu-flag":"_XK8oS","dropdown-content":"_3ys4W","dropdown-change":"_ToOW_","item-address":"_3sQlR","item-logout":"_3bqSM","title-address":"_1jgSI","img-avatar":"_35Ttz","item-contact":"_1wc7o","content-text":"_3S4f2","dropdown-content-language":"_3ajui","dropdown-item-language":"_3Y_y4","dropdown-item-language-active":"_CzNMi","dropdown-academy":"_3CMVp","image-academy":"_2ibYC","image-academy--item":"_3RDWF","academy-btn":"_1JMRU","switch-icon":"_N4FNf","dropdown-content-academy":"_31Dr0","dropdown-academy-item":"_3bjcz","noGutters":"_31ZQk","custom-col-2":"_3yXyK","custom-col-3":"_1RsJQ","custom-col-5":"_L42CP","custom-col-10":"_2u6eL","custom-row":"_8x7OP","custom-col":"_1JmTh","custom-col-4":"_3HO1e","custom-col-8":"_Oy31M","custom-col-12":"_3aUKo","custom-container":"_39LRs","form-label":"__Ut-u","form-control":"_2k4dX","btn-outline-primary":"_2PWdX","sort-icons":"_mQvLF","active":"_3oAH-","form-select":"_3W3aw","truncate":"_3NJzN","headers":"_3xnI5","logo-container":"_3YG70","tabBox":"_1CQPn","routerBox":"_3hx2T","tabText":"_3UyhW","router-link-active":"_1TGKA","router-link":"_1AqMh","userImg":"_2RI6G","disabled-link":"_3aVHg"};
142
143
 
143
144
  var AuthenticationMessage;
144
145
  (function (AuthenticationMessage) {
@@ -464,18 +465,18 @@ var BlockLogin = function BlockLogin(_ref) {
464
465
  var handleSubmit = formikProps.handleSubmit;
465
466
  return React__default.createElement(material.Grid, {
466
467
  container: true,
467
- className: "" + styleGlobal["box-login"]
468
+ className: "" + styles["box-login"]
468
469
  }, React__default.createElement(material.Grid, {
469
470
  item: true,
470
471
  className: "p-0 d-flex justify-content-center"
471
472
  }, React__default.createElement("form", {
472
- className: "" + styleGlobal["block-login"],
473
+ className: "" + styles["block-login"],
473
474
  onSubmit: handleSubmit
474
475
  }, React__default.createElement("div", {
475
- className: "" + styleGlobal["block-form"]
476
+ className: "" + styles["block-form"]
476
477
  }, React__default.createElement("img", {
477
478
  src: "/images/logo.jpeg",
478
- className: "" + styleGlobal["img-login-rectangle"]
479
+ className: "" + styles["img-login-rectangle"]
479
480
  }), React__default.createElement("div", {
480
481
  className: "p-0 mt-1 mb-4"
481
482
  }, React__default.createElement(GoogleLogin__default, {
@@ -484,7 +485,7 @@ var BlockLogin = function BlockLogin(_ref) {
484
485
  onSuccess: onSuccessGoogle,
485
486
  onFailure: onFailureGoogle,
486
487
  cookiePolicy: "single_host_origin",
487
- className: "" + styleGlobal["btn-login-google"],
488
+ className: "" + styles["btn-login-google"],
488
489
  isSignedIn: true
489
490
  }))))));
490
491
  });
@@ -548,7 +549,7 @@ var Login = function Login(_ref) {
548
549
  var _useLogin = useLogin$1(onNavigate),
549
550
  defaultInfo = _useLogin.defaultInfo;
550
551
  return React__default.createElement("div", {
551
- className: styleGlobal["login"] + " container-fluid font-family-lato"
552
+ className: styles["login"] + " container-fluid font-family-lato"
552
553
  }, React__default.createElement(material.Grid, {
553
554
  container: true,
554
555
  spacing: 3,
@@ -880,6 +881,7 @@ var switchAcademy = function switchAcademy(academyId) {
880
881
  };
881
882
 
882
883
  var LayoutContext = function LayoutContext(_ref) {
884
+ var _currentPusher$connec, _currentPusher$connec3;
883
885
  var children = _ref.children,
884
886
  role = _ref.role,
885
887
  _ref$pusherRegisterUr = _ref.pusherRegisterUrls,
@@ -904,6 +906,7 @@ var LayoutContext = function LayoutContext(_ref) {
904
906
  var _state$common3;
905
907
  return state === null || state === void 0 ? void 0 : (_state$common3 = state.common) === null || _state$common3 === void 0 ? void 0 : _state$common3.concurrentConnectionPusher;
906
908
  });
909
+ var currentPusher = concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.pusher;
907
910
  var roles = (user === null || user === void 0 ? void 0 : user.roles) || [];
908
911
  var academyDomain = user === null || user === void 0 ? void 0 : user.academyDomain;
909
912
  var pathname = window.location.pathname;
@@ -970,31 +973,41 @@ var LayoutContext = function LayoutContext(_ref) {
970
973
  return Promise.reject(e);
971
974
  }
972
975
  };
976
+ console.log({
977
+ connection: currentPusher === null || currentPusher === void 0 ? void 0 : (_currentPusher$connec = currentPusher.connection) === null || _currentPusher$connec === void 0 ? void 0 : _currentPusher$connec.state,
978
+ pusherRegisterUrls: pusherRegisterUrls,
979
+ pathname: pathname
980
+ });
973
981
  var registerPusher = React.useCallback(function () {
974
- if (pusherRegisterUrls.includes(pathname.toLocaleLowerCase()) && academyDomain && academyDomain !== (concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.academyDomain) && isReadyRegisterPusher) {
975
- var _headers;
976
- if (concurrentConnectionPusher.pusher) {
977
- concurrentConnectionPusher.pusher.disconnect();
978
- }
979
- var token = getAccessToken();
980
- var pusher = new Pusher(PUSHER_CONFIG.key, {
981
- cluster: PUSHER_CONFIG.cluster,
982
- authEndpoint: BASE_URL + "/api/auth/pusher",
983
- auth: {
984
- params: {},
985
- headers: (_headers = {
986
- Authorization: "Bearer " + token
987
- }, _headers[AcademyHeaders] = academyDomain, _headers)
982
+ if (pusherRegisterUrls.includes(pathname.toLocaleLowerCase())) {
983
+ var _currentPusher$connec2;
984
+ if (academyDomain && academyDomain !== (concurrentConnectionPusher === null || concurrentConnectionPusher === void 0 ? void 0 : concurrentConnectionPusher.academyDomain) && isReadyRegisterPusher) {
985
+ var _headers;
986
+ if (currentPusher) {
987
+ currentPusher.disconnect();
988
988
  }
989
- });
990
- dispatch(setConcurrentConnectionPusher({
991
- pusher: pusher,
992
- academyDomain: academyDomain
993
- }));
989
+ var token = getAccessToken();
990
+ var pusher = new Pusher(PUSHER_CONFIG.key, {
991
+ cluster: PUSHER_CONFIG.cluster,
992
+ authEndpoint: BASE_URL + "/api/auth/pusher",
993
+ auth: {
994
+ params: {},
995
+ headers: (_headers = {
996
+ Authorization: "Bearer " + token
997
+ }, _headers[AcademyHeaders] = academyDomain, _headers)
998
+ }
999
+ });
1000
+ dispatch(setConcurrentConnectionPusher({
1001
+ pusher: pusher,
1002
+ academyDomain: academyDomain
1003
+ }));
1004
+ } else if ((currentPusher === null || currentPusher === void 0 ? void 0 : (_currentPusher$connec2 = currentPusher.connection) === null || _currentPusher$connec2 === void 0 ? void 0 : _currentPusher$connec2.state) === "disconnected") {
1005
+ currentPusher.connect();
1006
+ }
994
1007
  }
995
- if ((!pusherRegisterUrls.includes(pathname.toLocaleLowerCase()) || !isReadyRegisterPusher) && !!(concurrentConnectionPusher !== null && concurrentConnectionPusher !== void 0 && concurrentConnectionPusher.pusher)) {
996
- if (concurrentConnectionPusher.pusher) {
997
- concurrentConnectionPusher.pusher.disconnect();
1008
+ if (!pusherRegisterUrls.includes(pathname.toLocaleLowerCase()) && !!currentPusher) {
1009
+ if (currentPusher) {
1010
+ currentPusher.disconnect();
998
1011
  }
999
1012
  dispatch(setConcurrentConnectionPusher({
1000
1013
  pusher: null,
@@ -1004,7 +1017,7 @@ var LayoutContext = function LayoutContext(_ref) {
1004
1017
  if (!pusherRegisterUrls.includes(pathname.toLocaleLowerCase()) && isReadyRegisterPusher) {
1005
1018
  dispatch(setReadyRegisterPusher(false));
1006
1019
  }
1007
- }, [pusherRegisterUrls.join(","), academyDomain, pathname, isReadyRegisterPusher]);
1020
+ }, [pusherRegisterUrls.join(","), academyDomain, pathname, isReadyRegisterPusher, currentPusher === null || currentPusher === void 0 ? void 0 : (_currentPusher$connec3 = currentPusher.connection) === null || _currentPusher$connec3 === void 0 ? void 0 : _currentPusher$connec3.state]);
1008
1021
  React.useEffect(function () {
1009
1022
  !user && loadInfo();
1010
1023
  !!user && checkRoleUser();
@@ -1015,8 +1028,8 @@ var LayoutContext = function LayoutContext(_ref) {
1015
1028
  React.useEffect(function () {
1016
1029
  registerPusher();
1017
1030
  return function () {
1018
- if (concurrentConnectionPusher.pusher) {
1019
- concurrentConnectionPusher.pusher.disconnect();
1031
+ if (currentPusher) {
1032
+ currentPusher.disconnect();
1020
1033
  }
1021
1034
  };
1022
1035
  }, [registerPusher]);
@@ -1304,6 +1317,7 @@ var recent_exam_results = "최근 시험 결과";
1304
1317
  var instructor_name = "강사이름";
1305
1318
  var academy_name = "학원 이름";
1306
1319
  var total_students = "총 학생수";
1320
+ var total_class = "반 수";
1307
1321
  var total_number_students = "총 학생수";
1308
1322
  var student = "학생";
1309
1323
  var students = "재학생";
@@ -1320,8 +1334,9 @@ var mins_mins_seconds_seconds = "{{mins}}분 {{seconds}}초";
1320
1334
  var mins_mins = "{{mins}}분";
1321
1335
  var class_name = "반 이름";
1322
1336
  var create_new_exam = "새 시험 생성";
1337
+ var live_exam = "시험 생성";
1323
1338
  var there_are_no_recent_exams = "최근 시험이 없습니다";
1324
- var you_have_created_a_exam_with_code_code_do_you_want_to_continue = "코드가 {{code}} 시험을 생성했습니다. 계속하시겠습니까?";
1339
+ var you_have_started_an_exam_with_code_code_do_you_want_to_continue = "{{code}} 코드로 시험을 시작했습니다. 계속하시겠습니까?";
1325
1340
  var here = "여기";
1326
1341
  var do_you_want_to_complete_the_exam = "시험을 완료처리 하시겠습니까?";
1327
1342
  var are_you_sure_you_want_to_delete_the_exam = "시험을 삭제하시겠습니까?";
@@ -1560,6 +1575,7 @@ var course = "진로";
1560
1575
  var etc = "그 외";
1561
1576
  var consultation_category = "상담 카테고리";
1562
1577
  var points = "{{number}} 점";
1578
+ var noun_number_of_people = "인원 수";
1563
1579
  var number_of_people = "{{ number }} 명";
1564
1580
  var total_classes = "반수";
1565
1581
  var number_of_classes = "{{ number }} 개";
@@ -1578,6 +1594,30 @@ var comparison_of_top_rankings_and_problem_solving_order = "상위권과 문제
1578
1594
  var my_answers = "내 해답";
1579
1595
  var request_for_consultation = "상담요청";
1580
1596
  var ask_a_question_with_a_problem = "문제로 질문하기";
1597
+ var live = "살다";
1598
+ var user_email = "사용자 이메일";
1599
+ var user_academy = {
1600
+ add: "사용자 추가",
1601
+ update_user_roles: "사용자 역할 업데이트",
1602
+ add_failed: "아카데미에 사용자 추가 실패",
1603
+ add_successfully: "사용자를 아카데미에 추가했습니다",
1604
+ remove_failed: "아카데미에서 사용자를 제거하지 못했습니다",
1605
+ remove_successfully: "아카데미에서 사용자를 성공적으로 제거했습니다",
1606
+ update_user_roles_failed: "아카데미 사용자 역할 업데이트에 실패했습니다",
1607
+ update_user_roles__successfully: "아카데미 사용자 역할을 성공적으로 제거했습니다",
1608
+ get_failed: "아카데미 사용자 가져오기 실패"
1609
+ };
1610
+ var get_users_failed = "사용자 가져오기 실패";
1611
+ var status_of_each_class = "각 반별 현황";
1612
+ var attendance_rate = "출석률";
1613
+ var select_article_create_exam = "시험을 만들 기사를 선택하세요.";
1614
+ var comprehensive_analysis = "내 해답";
1615
+ var solution_order = "풀이 순서";
1616
+ var compare_solution = "풀이 비교";
1617
+ var problem_analysis = "문제 분석";
1618
+ var class_information = "수업정보";
1619
+ var teachers = "교사";
1620
+ var lessons = "수업";
1581
1621
  var lang_ko = {
1582
1622
  problem_solving: problem_solving,
1583
1623
  my_story: my_story,
@@ -1595,6 +1635,7 @@ var lang_ko = {
1595
1635
  instructor_name: instructor_name,
1596
1636
  academy_name: academy_name,
1597
1637
  total_students: total_students,
1638
+ total_class: total_class,
1598
1639
  total_number_students: total_number_students,
1599
1640
  student: student,
1600
1641
  students: students,
@@ -1613,8 +1654,9 @@ var lang_ko = {
1613
1654
  mins_mins: mins_mins,
1614
1655
  class_name: class_name,
1615
1656
  create_new_exam: create_new_exam,
1657
+ live_exam: live_exam,
1616
1658
  there_are_no_recent_exams: there_are_no_recent_exams,
1617
- you_have_created_a_exam_with_code_code_do_you_want_to_continue: you_have_created_a_exam_with_code_code_do_you_want_to_continue,
1659
+ you_have_started_an_exam_with_code_code_do_you_want_to_continue: you_have_started_an_exam_with_code_code_do_you_want_to_continue,
1618
1660
  here: here,
1619
1661
  do_you_want_to_complete_the_exam: do_you_want_to_complete_the_exam,
1620
1662
  are_you_sure_you_want_to_delete_the_exam: are_you_sure_you_want_to_delete_the_exam,
@@ -1850,6 +1892,7 @@ var lang_ko = {
1850
1892
  etc: etc,
1851
1893
  consultation_category: consultation_category,
1852
1894
  points: points,
1895
+ noun_number_of_people: noun_number_of_people,
1853
1896
  number_of_people: number_of_people,
1854
1897
  total_classes: total_classes,
1855
1898
  number_of_classes: number_of_classes,
@@ -1867,7 +1910,21 @@ var lang_ko = {
1867
1910
  comparison_of_top_rankings_and_problem_solving_order: comparison_of_top_rankings_and_problem_solving_order,
1868
1911
  my_answers: my_answers,
1869
1912
  request_for_consultation: request_for_consultation,
1870
- ask_a_question_with_a_problem: ask_a_question_with_a_problem
1913
+ ask_a_question_with_a_problem: ask_a_question_with_a_problem,
1914
+ live: live,
1915
+ user_email: user_email,
1916
+ user_academy: user_academy,
1917
+ get_users_failed: get_users_failed,
1918
+ status_of_each_class: status_of_each_class,
1919
+ attendance_rate: attendance_rate,
1920
+ select_article_create_exam: select_article_create_exam,
1921
+ comprehensive_analysis: comprehensive_analysis,
1922
+ solution_order: solution_order,
1923
+ compare_solution: compare_solution,
1924
+ problem_analysis: problem_analysis,
1925
+ class_information: class_information,
1926
+ teachers: teachers,
1927
+ lessons: lessons
1871
1928
  };
1872
1929
 
1873
1930
  var problem_solving$1 = "Problem Solving";
@@ -1886,6 +1943,7 @@ var recent_exam_results$1 = "Recent exam";
1886
1943
  var instructor_name$1 = "Instructor name";
1887
1944
  var academy_name$1 = "Academy name";
1888
1945
  var total_students$1 = "Total students";
1946
+ var total_class$1 = "Total Class";
1889
1947
  var total_number_students$1 = "Total number of students";
1890
1948
  var students$1 = "Students";
1891
1949
  var student$1 = "Student";
@@ -1902,8 +1960,9 @@ var mins_mins_seconds_seconds$1 = "{{mins}}m {{seconds}}s";
1902
1960
  var mins_mins$1 = "{{mins}}m";
1903
1961
  var class_name$1 = "Class name";
1904
1962
  var create_new_exam$1 = "Create exam";
1963
+ var live_exam$1 = "Live exam";
1905
1964
  var there_are_no_recent_exams$1 = "There are no recent exams";
1906
- var you_have_created_a_exam_with_code_code_do_you_want_to_continue$1 = "You have created a exam with code {{code}}, do you want to continue?";
1965
+ var you_have_started_an_exam_with_code_code_do_you_want_to_continue$1 = "You have started an exam with code {{code}}, do you want to continue?";
1907
1966
  var here$1 = "here";
1908
1967
  var do_you_want_to_complete_the_exam$1 = "Do you want to complete the exam?";
1909
1968
  var are_you_sure_you_want_to_delete_the_exam$1 = "Are you sure you want to delete the exam?";
@@ -2177,6 +2236,7 @@ var course$1 = "Course";
2177
2236
  var etc$1 = "Etc";
2178
2237
  var consultation_category$1 = "Consultation Category";
2179
2238
  var points$1 = "{{number}} points";
2239
+ var noun_number_of_people$1 = "Number of people";
2180
2240
  var number_of_people$1 = "{{ number }} students";
2181
2241
  var total_classes$1 = "Total classes";
2182
2242
  var number_of_classes$1 = "{{ number }} classes";
@@ -2195,6 +2255,30 @@ var comparison_of_top_rankings_and_problem_solving_order$1 = "Comparison of top
2195
2255
  var my_answers$1 = "My answers";
2196
2256
  var request_for_consultation$1 = "Request for consultation";
2197
2257
  var ask_a_question_with_a_problem$1 = "Ask a question with a problem";
2258
+ var live$1 = "live";
2259
+ var user_email$1 = "User email";
2260
+ var user_academy$1 = {
2261
+ add: "Add user",
2262
+ update_user_roles: "Update user roles",
2263
+ add_failed: "Add user to academy failed",
2264
+ add_successfully: "Add user to academy successfully",
2265
+ remove_failed: "Remove user from academy failed",
2266
+ remove_successfully: "Remove user from academy successfully",
2267
+ update_user_roles_failed: "Update academy user roles failed",
2268
+ update_user_roles_successfully: "Update academy user roles successfully",
2269
+ get_failed: "Get academy users failed"
2270
+ };
2271
+ var get_users_failed$1 = "Get users failed";
2272
+ var status_of_each_class$1 = "Status of each class";
2273
+ var attendance_rate$1 = "Attendance Rate";
2274
+ var select_article_create_exam$1 = "Select article to create exam";
2275
+ var comprehensive_analysis$1 = "Comprehensive analysis";
2276
+ var solution_order$1 = "Solution order";
2277
+ var compare_solution$1 = "Compare solution";
2278
+ var problem_analysis$1 = "Problem analysis";
2279
+ var class_information$1 = "Class Information";
2280
+ var teachers$1 = "Teachers";
2281
+ var lessons$1 = "Lessons";
2198
2282
  var lang_en = {
2199
2283
  problem_solving: problem_solving$1,
2200
2284
  my_story: my_story$1,
@@ -2212,6 +2296,7 @@ var lang_en = {
2212
2296
  instructor_name: instructor_name$1,
2213
2297
  academy_name: academy_name$1,
2214
2298
  total_students: total_students$1,
2299
+ total_class: total_class$1,
2215
2300
  total_number_students: total_number_students$1,
2216
2301
  students: students$1,
2217
2302
  student: student$1,
@@ -2230,8 +2315,9 @@ var lang_en = {
2230
2315
  mins_mins: mins_mins$1,
2231
2316
  class_name: class_name$1,
2232
2317
  create_new_exam: create_new_exam$1,
2318
+ live_exam: live_exam$1,
2233
2319
  there_are_no_recent_exams: there_are_no_recent_exams$1,
2234
- you_have_created_a_exam_with_code_code_do_you_want_to_continue: you_have_created_a_exam_with_code_code_do_you_want_to_continue$1,
2320
+ you_have_started_an_exam_with_code_code_do_you_want_to_continue: you_have_started_an_exam_with_code_code_do_you_want_to_continue$1,
2235
2321
  here: here$1,
2236
2322
  do_you_want_to_complete_the_exam: do_you_want_to_complete_the_exam$1,
2237
2323
  are_you_sure_you_want_to_delete_the_exam: are_you_sure_you_want_to_delete_the_exam$1,
@@ -2502,6 +2588,7 @@ var lang_en = {
2502
2588
  etc: etc$1,
2503
2589
  consultation_category: consultation_category$1,
2504
2590
  points: points$1,
2591
+ noun_number_of_people: noun_number_of_people$1,
2505
2592
  number_of_people: number_of_people$1,
2506
2593
  total_classes: total_classes$1,
2507
2594
  number_of_classes: number_of_classes$1,
@@ -2519,7 +2606,21 @@ var lang_en = {
2519
2606
  comparison_of_top_rankings_and_problem_solving_order: comparison_of_top_rankings_and_problem_solving_order$1,
2520
2607
  my_answers: my_answers$1,
2521
2608
  request_for_consultation: request_for_consultation$1,
2522
- ask_a_question_with_a_problem: ask_a_question_with_a_problem$1
2609
+ ask_a_question_with_a_problem: ask_a_question_with_a_problem$1,
2610
+ live: live$1,
2611
+ user_email: user_email$1,
2612
+ user_academy: user_academy$1,
2613
+ get_users_failed: get_users_failed$1,
2614
+ status_of_each_class: status_of_each_class$1,
2615
+ attendance_rate: attendance_rate$1,
2616
+ select_article_create_exam: select_article_create_exam$1,
2617
+ comprehensive_analysis: comprehensive_analysis$1,
2618
+ solution_order: solution_order$1,
2619
+ compare_solution: compare_solution$1,
2620
+ problem_analysis: problem_analysis$1,
2621
+ class_information: class_information$1,
2622
+ teachers: teachers$1,
2623
+ lessons: lessons$1
2523
2624
  };
2524
2625
 
2525
2626
  i18n.use(reactI18next.initReactI18next).init({
@@ -2800,7 +2901,8 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
2800
2901
  var role = _ref.role,
2801
2902
  navigate = _ref.navigate,
2802
2903
  homeAcademyUrl = _ref.homeAcademyUrl,
2803
- homeUrl = _ref.homeUrl;
2904
+ homeUrl = _ref.homeUrl,
2905
+ hideAcademyName = _ref.hideAcademyName;
2804
2906
  var _useSwitchAcademy = useSwitchAcademy(role, navigate, homeAcademyUrl, homeUrl),
2805
2907
  academyList = _useSwitchAcademy.academyList,
2806
2908
  handleSwitchAcademy = _useSwitchAcademy.handleSwitchAcademy,
@@ -2834,15 +2936,15 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
2834
2936
  };
2835
2937
  return React__default.createElement(React.Fragment, null, React__default.createElement(material.Button, {
2836
2938
  onClick: handleOpen,
2837
- className: "" + styleGlobal["academy-btn"],
2939
+ className: "" + styles["academy-btn"],
2838
2940
  sx: _extends({}, popoverStyle)
2839
2941
  }, React__default.createElement("div", {
2840
- className: "" + styleGlobal["image-academy"]
2942
+ className: styles["image-academy"] + " me-0 me-lg-2"
2841
2943
  }, selectedAcademy !== null && selectedAcademy !== void 0 && selectedAcademy.image ? React__default.createElement("img", {
2842
2944
  src: selectedAcademy === null || selectedAcademy === void 0 ? void 0 : selectedAcademy.image,
2843
2945
  alt: selectedAcademy === null || selectedAcademy === void 0 ? void 0 : selectedAcademy.name
2844
- }) : React__default.createElement("span", null, firstLetter)), React__default.createElement(material.Typography, {
2845
- className: "text-start",
2946
+ }) : React__default.createElement("span", null, firstLetter)), !hideAcademyName && React__default.createElement(material.Typography, {
2947
+ className: "text-start d-none d-lg-block",
2846
2948
  sx: {
2847
2949
  fontSize: 14,
2848
2950
  fontWeight: 600,
@@ -2850,7 +2952,7 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
2850
2952
  minWidth: 150
2851
2953
  }
2852
2954
  }, (selectedAcademy === null || selectedAcademy === void 0 ? void 0 : selectedAcademy.name) || t(role === exports.Role.Admin ? "switch_academy_admin" : "switch_academy")), React__default.createElement("div", {
2853
- className: "" + styleGlobal["switch-icon"]
2955
+ className: styles["switch-icon"] + " d-none d-lg-flex"
2854
2956
  }, React__default.createElement(go.GoArrowSwitch, {
2855
2957
  size: 14
2856
2958
  }))), (isSuperAdmin || !isAdmin) && React__default.createElement(Popover, {
@@ -2871,7 +2973,10 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
2871
2973
  p: 0.5,
2872
2974
  mt: 1,
2873
2975
  ml: 0.75,
2874
- width: 300,
2976
+ width: {
2977
+ xs: 200,
2978
+ lg: 300
2979
+ },
2875
2980
  minWidth: "unset!important"
2876
2981
  }
2877
2982
  }
@@ -2892,7 +2997,7 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
2892
2997
  fontWeight: 600
2893
2998
  }
2894
2999
  }, React__default.createElement("div", {
2895
- className: "" + styleGlobal["image-academy"]
3000
+ className: styles["image-academy"] + " " + styles["image-academy--item"]
2896
3001
  }, option.image ? React__default.createElement(Box, {
2897
3002
  component: "img",
2898
3003
  alt: option.name,
@@ -3002,7 +3107,7 @@ var CustomSelect = function CustomSelect(_ref) {
3002
3107
  }, rest));
3003
3108
  };
3004
3109
 
3005
- var styles = {"header__avatar":"_2oGcJ","header__select":"_2y2XV","body":"_ntGyI","list":"_m7Fwt","list__item__header":"_3BM8N","list__item__avatar":"_1ReOK","list__item__avatar-container":"_2qbld","list__item__message":"_3s01i","list__item__message--reply-from":"_2Qxi3","list__item__message--reply-from-right":"_34Vx4","list__item__message--reply":"_3uheq","list__item__message--reply-right":"_2iBr7","reply-text":"_3ZPjO","container-custom":"_38A9k","student-row-col-1":"_Jt5t0","student-row-col-1-active":"_14DKj","row-col-2":"_qHGiR","inputBox":"_2iY67","inputBoxTable":"_3pCw0","background-chat":"_zILbw","wrap-content":"_38gsM","name-sender":"_Lfzyw","content-chat-sender":"_1X73E","content-chat-receiver":"_32V7T","custom-scroll":"_2Uul2","btn-send":"_395lb","btn-chat":"_gDYwm","input-chat":"_22TX5","btn-cancel":"_1u-eg","btn-register":"_22r6_","form-label-dialog":"_jADIA","form-select-width":"_WncPd","padding-content":"_3hz3H","form-label":"_MMQxP","form-control":"_1mJfc"};
3110
+ var styles$1 = {"header__avatar":"_2oGcJ","header__select":"_2y2XV","body":"_ntGyI","list":"_m7Fwt","list__item__header":"_3BM8N","list__item__avatar":"_1ReOK","list__item__avatar-container":"_2qbld","list__item__message":"_3s01i","list__item__message--reply-from":"_2Qxi3","list__item__message--reply-from-right":"_34Vx4","list__item__message--reply":"_3uheq","list__item__message--reply-right":"_2iBr7","reply-text":"_3ZPjO","container-custom":"_38A9k","student-row-col-1":"_Jt5t0","student-row-col-1-active":"_14DKj","row-col-2":"_qHGiR","inputBox":"_2iY67","inputBoxTable":"_3pCw0","background-chat":"_zILbw","wrap-content":"_38gsM","name-sender":"_Lfzyw","content-chat-sender":"_1X73E","content-chat-receiver":"_32V7T","custom-scroll":"_2Uul2","btn-send":"_395lb","btn-chat":"_gDYwm","input-chat":"_22TX5","btn-cancel":"_1u-eg","btn-register":"_22r6_","form-label-dialog":"_jADIA","form-select-width":"_WncPd","padding-content":"_3hz3H","form-label":"_MMQxP","form-control":"_1mJfc"};
3006
3111
 
3007
3112
  var iconPersonNoActive = function iconPersonNoActive(_ref) {
3008
3113
  var _ref$width = _ref.width,
@@ -3148,7 +3253,7 @@ var ChatRightItem = function ChatRightItem(_ref) {
3148
3253
  padding: "4px 0"
3149
3254
  }, React__default.createElement(material.Box, null, showName && isStudent && React__default.createElement(material.Box, {
3150
3255
  gap: "8px",
3151
- className: " " + styles["name-sender"],
3256
+ className: " " + styles$1["name-sender"],
3152
3257
  display: "flex",
3153
3258
  alignItems: "center",
3154
3259
  flexDirection: "row"
@@ -3203,7 +3308,7 @@ var ChatRightItem = function ChatRightItem(_ref) {
3203
3308
  objectFit: "contain"
3204
3309
  }
3205
3310
  })) : React__default.createElement("div", {
3206
- className: styles["wrap-content"] + " " + styles["content-chat-receiver"],
3311
+ className: styles$1["wrap-content"] + " " + styles$1["content-chat-receiver"],
3207
3312
  style: {
3208
3313
  "float": "inline-end"
3209
3314
  }
@@ -3241,7 +3346,7 @@ var ChatLeftItem = function ChatLeftItem(_ref) {
3241
3346
  display: "flex",
3242
3347
  padding: "4px",
3243
3348
  flexDirection: "row",
3244
- className: "" + styles["name-sender"]
3349
+ className: "" + styles$1["name-sender"]
3245
3350
  }, isStudent ? React__default.createElement(React.Fragment, null, React__default.createElement(material.Typography, {
3246
3351
  fontWeight: 500,
3247
3352
  fontSize: 14,
@@ -3281,7 +3386,7 @@ var ChatLeftItem = function ChatLeftItem(_ref) {
3281
3386
  objectFit: "contain"
3282
3387
  }
3283
3388
  })) : React__default.createElement("div", {
3284
- className: styles["wrap-content"] + " " + styles["content-chat-sender"]
3389
+ className: styles$1["wrap-content"] + " " + styles$1["content-chat-sender"]
3285
3390
  }, React__default.createElement(material.Typography, {
3286
3391
  fontWeight: 500,
3287
3392
  fontSize: "14px",
@@ -3494,7 +3599,7 @@ var UpdateMessageDialog = function UpdateMessageDialog(_ref) {
3494
3599
  _objectDestructuringEmpty(_ref2);
3495
3600
  return React__default.createElement(formik.Form, null, React__default.createElement("label", {
3496
3601
  htmlFor: "content",
3497
- className: styles['form-label'] + " " + styles['form-label-dialog']
3602
+ className: styles$1['form-label'] + " " + styles$1['form-label-dialog']
3498
3603
  }, "\uC9C8\uBB38\uD560 \uBB38\uC81C"), React__default.createElement(formik.Field, {
3499
3604
  id: "content",
3500
3605
  style: {
@@ -3503,7 +3608,7 @@ var UpdateMessageDialog = function UpdateMessageDialog(_ref) {
3503
3608
  name: "content",
3504
3609
  validate: validate,
3505
3610
  placeholder: "\uBB38\uC81C\uAC00 \uC5B4\uB824\uC6CC\uC694",
3506
- className: styles['form-control']
3611
+ className: styles$1['form-control']
3507
3612
  }), React__default.createElement(material.DialogActions, {
3508
3613
  sx: {
3509
3614
  display: 'flex',
@@ -3512,14 +3617,14 @@ var UpdateMessageDialog = function UpdateMessageDialog(_ref) {
3512
3617
  padding: '12px'
3513
3618
  }
3514
3619
  }, React__default.createElement(material.Button, {
3515
- className: styles['btn-cancel'],
3620
+ className: styles$1['btn-cancel'],
3516
3621
  onClick: onClose
3517
3622
  }, React__default.createElement(material.Typography, {
3518
3623
  fontWeight: 700,
3519
3624
  fontSize: '14px',
3520
3625
  lineHeight: '16.71px'
3521
3626
  }, "\uCDE8\uC18C")), React__default.createElement(material.Button, {
3522
- className: styles['btn-register'],
3627
+ className: styles$1['btn-register'],
3523
3628
  type: "submit"
3524
3629
  }, React__default.createElement(material.Typography, {
3525
3630
  fontWeight: 700,
@@ -3568,14 +3673,14 @@ var UpdateMessageDialog = function UpdateMessageDialog(_ref) {
3568
3673
  padding: '12px'
3569
3674
  }
3570
3675
  }, React__default.createElement(material.Button, {
3571
- className: styles['btn-cancel'],
3676
+ className: styles$1['btn-cancel'],
3572
3677
  onClick: onClose
3573
3678
  }, React__default.createElement(material.Typography, {
3574
3679
  fontWeight: 700,
3575
3680
  fontSize: '14px',
3576
3681
  lineHeight: '16.71px'
3577
3682
  }, "\uCDE8\uC18C")), React__default.createElement(material.Button, {
3578
- className: styles['btn-register'],
3683
+ className: styles$1['btn-register'],
3579
3684
  sx: {
3580
3685
  bgcolor: !(selectedFile !== null && selectedFile !== void 0 && selectedFile.content) ? "#EBEBFF !important" : "#5458D5 !important"
3581
3686
  },
@@ -3748,7 +3853,7 @@ var ChatList = function ChatList(_ref) {
3748
3853
  var isStudent = roles === null || roles === void 0 ? void 0 : roles.includes(Roles$1.Student);
3749
3854
  return React__default.createElement("ul", {
3750
3855
  ref: listItemRef,
3751
- className: styles["list"] + " " + styles["padding-content"] + " d-flex h-100 flex-column mb-0 " + (!(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) ? 'justify-content-center' : '')
3856
+ className: styles$1["list"] + " " + styles$1["padding-content"] + " d-flex h-100 flex-column mb-0 " + (!(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) ? 'justify-content-center' : '')
3752
3857
  }, !(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) && React__default.createElement("li", {
3753
3858
  className: "text-muted text-center fst-italic fs-6"
3754
3859
  }, "No message"), !!(filterMessage !== null && filterMessage !== void 0 && filterMessage.length) && filterMessage.map(function (message) {
@@ -3855,7 +3960,7 @@ var InputChat = function InputChat(_ref) {
3855
3960
  color: "#fff",
3856
3961
  size: 30
3857
3962
  }))), React__default.createElement("input", {
3858
- className: styles["input-chat"],
3963
+ className: styles$1["input-chat"],
3859
3964
  style: {
3860
3965
  border: "none"
3861
3966
  },
@@ -3882,7 +3987,7 @@ var InputChat = function InputChat(_ref) {
3882
3987
  sx: {
3883
3988
  bgcolor: isCompleted ? "#EBEBFF !important" : "#5458D5 !important"
3884
3989
  },
3885
- className: styles["btn-send"],
3990
+ className: styles$1["btn-send"],
3886
3991
  disabled: isCompleted,
3887
3992
  onClick: handleSubmit
3888
3993
  }, React__default.createElement(iconSendMessage, null), React__default.createElement(material.Typography, {
@@ -3937,7 +4042,8 @@ var iconChecked = function iconChecked(_ref) {
3937
4042
  };
3938
4043
 
3939
4044
  var ellipsisText = function ellipsisText(text, maxLength) {
3940
- return text.length > maxLength ? text.slice(0, maxLength) + " ..." : text;
4045
+ if (!text) return text;
4046
+ return (text === null || text === void 0 ? void 0 : text.length) > maxLength ? text.slice(0, maxLength) + " ..." : text;
3941
4047
  };
3942
4048
  var formatDataMyAnswer = function formatDataMyAnswer(inputData, categories) {
3943
4049
  var uniqueCategories = new Set();
@@ -3986,7 +4092,8 @@ var ChatHeader = function ChatHeader(_ref) {
3986
4092
  handleConfirm = _useDialog.handleConfirm;
3987
4093
  var _useTranslation = reactI18next.useTranslation(),
3988
4094
  t = _useTranslation.t;
3989
- var isTabletUp = material.useMediaQuery('(min-width:900px)');
4095
+ var theme = material.useTheme();
4096
+ var isTabletUp = material.useMediaQuery(theme.breakpoints.up('lg'));
3990
4097
  var isStudent = roles === null || roles === void 0 ? void 0 : roles.includes(Roles$1.Student);
3991
4098
  var filterDurationExam = React.useMemo(function () {
3992
4099
  if (!durationExam) return;
@@ -4035,7 +4142,7 @@ var ChatHeader = function ChatHeader(_ref) {
4035
4142
  fontWeight: 600,
4036
4143
  fontSize: "12px",
4037
4144
  lineHeight: "14.32px"
4038
- }, ellipsisText(examTitle, 15)), React__default.createElement(material.Box, {
4145
+ }, ellipsisText(examTitle || "", 15)), React__default.createElement(material.Box, {
4039
4146
  display: "flex",
4040
4147
  flexDirection: "row",
4041
4148
  gap: "4px"
@@ -4115,7 +4222,7 @@ var ChatHeader = function ChatHeader(_ref) {
4115
4222
  alignItems: "center",
4116
4223
  gap: "24px",
4117
4224
  color: "#5458D5"
4118
- }, React__default.createElement(material.Box, {
4225
+ }, isTabletUp && React__default.createElement(material.Box, {
4119
4226
  display: "flex",
4120
4227
  justifyContent: "space-between",
4121
4228
  alignItems: "center",
@@ -4128,7 +4235,7 @@ var ChatHeader = function ChatHeader(_ref) {
4128
4235
  fontWeight: 700,
4129
4236
  fontSize: "14px",
4130
4237
  lineHeight: "16.71px"
4131
- }, fullName)), React__default.createElement(material.Box, {
4238
+ }, ellipsisText(fullName || "", 10))), React__default.createElement(material.Box, {
4132
4239
  display: "flex",
4133
4240
  alignItems: "center",
4134
4241
  gap: "24px",
@@ -4137,7 +4244,7 @@ var ChatHeader = function ChatHeader(_ref) {
4137
4244
  fontWeight: 600,
4138
4245
  fontSize: "12px",
4139
4246
  lineHeight: "14.32px"
4140
- }, examTitle) : React__default.createElement(material.Box, {
4247
+ }, ellipsisText(examTitle || "", 10)) : React__default.createElement(material.Box, {
4141
4248
  display: "flex",
4142
4249
  alignItems: "end",
4143
4250
  gap: "16px",
@@ -4282,7 +4389,7 @@ var ChatContainer = function ChatContainer(_ref) {
4282
4389
  container: true
4283
4390
  }, React__default.createElement(ChatHeader, Object.assign({}, chatHeaderProps)), React__default.createElement("div", {
4284
4391
  ref: listRef,
4285
- className: "flex-grow-1 " + styles["body"],
4392
+ className: "flex-grow-1 " + styles$1["body"],
4286
4393
  style: {
4287
4394
  height: "60vh",
4288
4395
  overflowY: "scroll",
@@ -4787,7 +4894,7 @@ var InputText = function InputText(props) {
4787
4894
  }, props));
4788
4895
  };
4789
4896
 
4790
- var styles$1 = {"question":"_2uc_W","question-article":"_2p7kY","question-title":"_2tHmc","question--active":"_3IHYm","question-label":"_26ATj","question-input":"_3R8PR","question-btn":"_1VZac"};
4897
+ var styles$2 = {"question":"_2uc_W","question-article":"_2p7kY","question-title":"_2tHmc","question--active":"_3IHYm","question-label":"_26ATj","question-input":"_3R8PR","question-btn":"_1VZac"};
4791
4898
 
4792
4899
  var SCORE_OPTIONS = Array.from({
4793
4900
  length: 10
@@ -4844,12 +4951,15 @@ var QuestionView = function QuestionView(_ref) {
4844
4951
  var handleChangeCorrectAnswer = function handleChangeCorrectAnswer(e) {
4845
4952
  return onChangeCorrectAnswers(e.target.value, index);
4846
4953
  };
4847
- return React__default.createElement("div", {
4848
- className: "d-flex justify-content-between"
4849
- }, React__default.createElement("div", {
4850
- className: "d-flex flex-grow-1"
4954
+ return React__default.createElement(material.Grid, {
4955
+ container: true,
4956
+ spacing: "16px"
4957
+ }, React__default.createElement(material.Grid, {
4958
+ item: true,
4959
+ xs: 12,
4960
+ lg: 9
4851
4961
  }, React__default.createElement("div", {
4852
- className: styles$1["question-title"] + " me-2 text-nowrap"
4962
+ className: styles$2["question-title"] + " me-2 text-nowrap"
4853
4963
  }, t("problem_number_question", {
4854
4964
  number: question.questionOrder + 1
4855
4965
  })), React__default.createElement(material.FormControl, {
@@ -4865,7 +4975,7 @@ var QuestionView = function QuestionView(_ref) {
4865
4975
  }).map(function (i) {
4866
4976
  return React__default.createElement(material.FormControlLabel, {
4867
4977
  key: i,
4868
- className: styles$1["question-label"] + " w-fit",
4978
+ className: styles$2["question-label"] + " w-fit",
4869
4979
  labelPlacement: "top",
4870
4980
  value: i,
4871
4981
  onChange: handleChangeCorrectAnswer,
@@ -4877,10 +4987,12 @@ var QuestionView = function QuestionView(_ref) {
4877
4987
  number: i
4878
4988
  })
4879
4989
  });
4880
- })))), React__default.createElement("div", {
4881
- className: "d-flex align-items-center"
4990
+ })))), React__default.createElement(material.Grid, {
4991
+ item: true,
4992
+ xs: 12,
4993
+ lg: 3,
4994
+ mb: "16px"
4882
4995
  }, React__default.createElement(material.FormControl, {
4883
- className: "mx-3",
4884
4996
  style: {
4885
4997
  width: "140px"
4886
4998
  }
@@ -5084,6 +5196,8 @@ var ArticleGroupView = function ArticleGroupView(_ref) {
5084
5196
  subjectId: defaultCategoryOptions === undefined ? selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.id : undefined
5085
5197
  }),
5086
5198
  categoryOptions = _useCategorySelect.categoryOptions;
5199
+ var theme = material.useTheme();
5200
+ var isTabletUp = material.useMediaQuery(theme.breakpoints.up('lg'));
5087
5201
  var handleChangeQuestionCount = function handleChangeQuestionCount(value) {
5088
5202
  onChangeQuestionCount(article, value === null || value === void 0 ? void 0 : value.value, answerCount);
5089
5203
  };
@@ -5103,7 +5217,7 @@ var ArticleGroupView = function ArticleGroupView(_ref) {
5103
5217
  onDelete === null || onDelete === void 0 ? void 0 : onDelete(article);
5104
5218
  };
5105
5219
  return React__default.createElement("div", {
5106
- className: "d-flex " + styles$1["question"] + " " + (isActive ? styles$1["question--active"] : "")
5220
+ className: "d-flex " + styles$2["question"] + " " + (isActive ? styles$2["question--active"] : "")
5107
5221
  }, React__default.createElement("div", {
5108
5222
  className: "py-1"
5109
5223
  }, React__default.createElement(pi.PiDotsNineLight, {
@@ -5111,20 +5225,30 @@ var ArticleGroupView = function ArticleGroupView(_ref) {
5111
5225
  })), React__default.createElement("div", {
5112
5226
  className: "px-4"
5113
5227
  }, React__default.createElement("p", {
5114
- className: "mb-0 " + styles$1["question-article"]
5228
+ className: "mb-0 " + styles$2["question-article"]
5115
5229
  }, t("article_number")), React__default.createElement("p", {
5116
- className: "text-center " + styles$1["question-article"]
5230
+ className: "text-center " + styles$2["question-article"]
5117
5231
  }, article)), React__default.createElement("div", {
5118
5232
  className: "flex-grow-1"
5119
5233
  }, React__default.createElement(material.Grid, {
5120
5234
  container: true,
5121
5235
  spacing: 3
5122
- }, React__default.createElement(material.Grid, {
5236
+ }, !isTabletUp && React__default.createElement(material.Grid, {
5237
+ item: true,
5238
+ xs: 12,
5239
+ className: "d-flex justify-content-end"
5240
+ }, isDeletable && !isDisabled && React__default.createElement("div", null, React__default.createElement(material.IconButton, {
5241
+ onClick: handleDelete
5242
+ }, React__default.createElement(fa.FaTrash, {
5243
+ size: 16,
5244
+ className: "text-danger"
5245
+ })))), React__default.createElement(material.Grid, {
5123
5246
  item: true,
5124
- xs: 3
5247
+ xs: 12,
5248
+ lg: 3
5125
5249
  }, React__default.createElement(material.FormGroup, null, React__default.createElement(material.FormLabel, {
5126
5250
  htmlFor: "question_count",
5127
- className: styles$1["question-label"] + " form-label"
5251
+ className: styles$2["question-label"] + " form-label"
5128
5252
  }, t("question_count")), React__default.createElement(QuestionCountSelector, {
5129
5253
  id: "question_count",
5130
5254
  value: questionCount,
@@ -5132,10 +5256,11 @@ var ArticleGroupView = function ArticleGroupView(_ref) {
5132
5256
  isDisabled: isDisabled
5133
5257
  }))), React__default.createElement(material.Grid, {
5134
5258
  item: true,
5135
- xs: 3
5259
+ xs: 12,
5260
+ lg: 3
5136
5261
  }, React__default.createElement(material.FormGroup, null, React__default.createElement(material.FormLabel, {
5137
5262
  htmlFor: "category",
5138
- className: styles$1["question-label"] + " form-label"
5263
+ className: styles$2["question-label"] + " form-label"
5139
5264
  }, t("category")), React__default.createElement(ArticleCategorySelector, {
5140
5265
  id: "category",
5141
5266
  value: categoryId,
@@ -5145,16 +5270,17 @@ var ArticleGroupView = function ArticleGroupView(_ref) {
5145
5270
  placeholder: t("select_category")
5146
5271
  }))), React__default.createElement(material.Grid, {
5147
5272
  item: true,
5148
- xs: 3
5273
+ xs: 12,
5274
+ lg: 3
5149
5275
  }, React__default.createElement(material.FormGroup, null, React__default.createElement(material.FormLabel, {
5150
5276
  htmlFor: "answer_count",
5151
- className: styles$1["question-label"] + " form-label"
5277
+ className: styles$2["question-label"] + " form-label"
5152
5278
  }, t("answer_count")), React__default.createElement(AnswerCountSelector, {
5153
5279
  id: "answer_count",
5154
5280
  value: answerCount,
5155
5281
  onChange: handleChangeAnswerCount,
5156
5282
  isDisabled: isDisabled
5157
- }))), React__default.createElement(material.Grid, {
5283
+ }))), isTabletUp && React__default.createElement(material.Grid, {
5158
5284
  item: true,
5159
5285
  xs: 3,
5160
5286
  className: "d-flex justify-content-end"
@@ -5191,6 +5317,7 @@ var ChapterBox = function ChapterBox(_ref) {
5191
5317
  onChangePageTo = _ref.onChangePageTo,
5192
5318
  onAddArticle = _ref.onAddArticle,
5193
5319
  onRemoveArticle = _ref.onRemoveArticle,
5320
+ handleCheckArticle = _ref.handleCheckArticle,
5194
5321
  onUpdateArticleQuestionCount = _ref.onUpdateArticleQuestionCount,
5195
5322
  onUpdateArticleCategory = _ref.onUpdateArticleCategory,
5196
5323
  onUpdateArticleQuestionAnswerCount = _ref.onUpdateArticleQuestionAnswerCount,
@@ -5246,6 +5373,8 @@ var ChapterBox = function ChapterBox(_ref) {
5246
5373
  var handleUpdateArticleQuestionScore = function handleUpdateArticleQuestionScore(article, index, score) {
5247
5374
  onUpdateArticleQuestion === null || onUpdateArticleQuestion === void 0 ? void 0 : onUpdateArticleQuestion(article, index, score, "score", data.articles, data.id, parentChapterId);
5248
5375
  };
5376
+ var theme = material.useTheme();
5377
+ var isTabletUp = material.useMediaQuery(theme.breakpoints.up('lg'));
5249
5378
  var handleChangeName = function handleChangeName(e) {
5250
5379
  var text = e.target.value;
5251
5380
  onChangeName === null || onChangeName === void 0 ? void 0 : onChangeName(text, data.id, parentChapterId);
@@ -5293,17 +5422,52 @@ var ChapterBox = function ChapterBox(_ref) {
5293
5422
  className: "text-danger"
5294
5423
  }))), React__default.createElement("div", {
5295
5424
  className: "p-3 d-flex justify-content-between"
5425
+ }, React__default.createElement(material.Grid, {
5426
+ container: true
5427
+ }, React__default.createElement(material.Grid, {
5428
+ item: true,
5429
+ xs: 12
5430
+ }, React__default.createElement(material.Grid, {
5431
+ container: true,
5432
+ spacing: 2
5433
+ }, !isTabletUp && React__default.createElement(material.Grid, {
5434
+ item: true,
5435
+ xs: 12
5296
5436
  }, React__default.createElement(material.Stack, {
5297
- spacing: 2,
5298
- direction: "row"
5299
- }, React__default.createElement(material.Box, {
5437
+ direction: "row",
5438
+ justifyContent: "end",
5439
+ spacing: 2
5440
+ }, !parentChapterId && !data.articles.length && React__default.createElement(material.Button, {
5441
+ className: "mx-1",
5442
+ variant: "contained",
5443
+ color: "primary",
5444
+ disabled: isReadonly,
5445
+ startIcon: React__default.createElement(fa.FaPlus, {
5446
+ size: 12
5447
+ }),
5448
+ onClick: handleClickAddSubchapter
5449
+ }, t("add_subchapter")), data.subChapters.length === 0 && React__default.createElement(material.Button, {
5450
+ className: "mx-1",
5451
+ variant: "contained",
5452
+ color: "success",
5453
+ disabled: isReadonly,
5454
+ startIcon: React__default.createElement(fa.FaPlus, {
5455
+ size: 12
5456
+ }),
5457
+ onClick: handleAddArticle
5458
+ }, t("add_article")))), React__default.createElement(material.Grid, {
5459
+ item: true,
5460
+ xs: 12,
5461
+ lg: 4,
5300
5462
  sx: {
5301
5463
  display: "flex",
5302
5464
  alignItems: "center",
5303
- marginRight: "16px",
5304
5465
  width: "50%"
5305
5466
  }
5306
5467
  }, React__default.createElement("label", {
5468
+ style: {
5469
+ minWidth: "90px"
5470
+ },
5307
5471
  className: "fw-bold text-nowrap me-2"
5308
5472
  }, t("page.from"), ":"), React__default.createElement(InputText, {
5309
5473
  type: "number",
@@ -5313,13 +5477,19 @@ var ChapterBox = function ChapterBox(_ref) {
5313
5477
  onChange: handleChangePageFrom,
5314
5478
  placeholder: t("page.from_placeholder"),
5315
5479
  error: data.pageFrom > data.pageTo || data.pageFrom < 0
5316
- })), React__default.createElement(material.Box, {
5480
+ })), React__default.createElement(material.Grid, {
5481
+ item: true,
5482
+ xs: 12,
5483
+ lg: 4,
5317
5484
  sx: {
5318
5485
  display: "flex",
5319
5486
  alignItems: "center",
5320
5487
  width: "50%"
5321
5488
  }
5322
5489
  }, React__default.createElement("label", {
5490
+ style: {
5491
+ minWidth: "90px"
5492
+ },
5323
5493
  className: "fw-bold text-nowrap me-2"
5324
5494
  }, t("page.to"), ":"), React__default.createElement(InputText, {
5325
5495
  type: "number",
@@ -5329,7 +5499,10 @@ var ChapterBox = function ChapterBox(_ref) {
5329
5499
  onChange: handleChangePageTo,
5330
5500
  placeholder: t("page.to_placeholder"),
5331
5501
  error: data.pageTo < data.pageFrom
5332
- }))), React__default.createElement(material.Stack, {
5502
+ })), isTabletUp && React__default.createElement(material.Grid, {
5503
+ item: true,
5504
+ lg: 4
5505
+ }, React__default.createElement(material.Stack, {
5333
5506
  direction: "row",
5334
5507
  justifyContent: "end",
5335
5508
  spacing: 2
@@ -5351,7 +5524,7 @@ var ChapterBox = function ChapterBox(_ref) {
5351
5524
  size: 12
5352
5525
  }),
5353
5526
  onClick: handleAddArticle
5354
- }, t("add_article")))), React__default.createElement("div", {
5527
+ }, t("add_article")))))))), React__default.createElement("div", {
5355
5528
  className: "p-3"
5356
5529
  }, React__default.createElement(material.Stack, {
5357
5530
  spacing: 2
@@ -5366,6 +5539,7 @@ var ChapterBox = function ChapterBox(_ref) {
5366
5539
  onChangeName: onChangeName,
5367
5540
  onChangePageFrom: onChangePageFrom,
5368
5541
  onChangePageTo: onChangePageTo,
5542
+ handleCheckArticle: handleCheckArticle,
5369
5543
  onAddArticle: onAddArticle,
5370
5544
  onRemoveArticle: onRemoveArticle,
5371
5545
  onUpdateArticleQuestionCount: onUpdateArticleQuestionCount,
@@ -5376,7 +5550,24 @@ var ChapterBox = function ChapterBox(_ref) {
5376
5550
  });
5377
5551
  }), data.subChapters.length === 0 && data.articles.map(function (article) {
5378
5552
  var _article$category;
5379
- return React__default.createElement(ArticleGroupView, {
5553
+ return React__default.createElement(material.Stack, null, React__default.createElement(material.Stack, {
5554
+ display: "flex",
5555
+ flexDirection: "row",
5556
+ gap: "8px",
5557
+ alignItems: "center"
5558
+ }, React__default.createElement(material.Checkbox, {
5559
+ id: "textbook",
5560
+ sx: {
5561
+ display: "flex",
5562
+ justifyContent: "start",
5563
+ width: "fit-content"
5564
+ },
5565
+ onChange: function onChange(e) {
5566
+ return handleCheckArticle(e, article);
5567
+ }
5568
+ }), React__default.createElement("label", {
5569
+ htmlFor: "textbook"
5570
+ }, t("select_article_create_exam"))), React__default.createElement(ArticleGroupView, {
5380
5571
  key: article.id,
5381
5572
  categoryOptions: categoryOptions,
5382
5573
  article: article.articleNumber,
@@ -5393,7 +5584,7 @@ var ChapterBox = function ChapterBox(_ref) {
5393
5584
  onChangeScoreAnswer: handleUpdateArticleQuestionScore,
5394
5585
  onDelete: handleRemoveArticle,
5395
5586
  isDeletable: true
5396
- });
5587
+ }));
5397
5588
  }))));
5398
5589
  };
5399
5590
 
@@ -5453,6 +5644,25 @@ var TextbookSortBy;
5453
5644
  TextbookSortBy["Title"] = "Name";
5454
5645
  TextbookSortBy["SubjectName"] = "Subject.Name";
5455
5646
  })(TextbookSortBy || (TextbookSortBy = {}));
5647
+ var ExamType;
5648
+ (function (ExamType) {
5649
+ ExamType["Normal"] = "Normal";
5650
+ ExamType["Standard"] = "Standard";
5651
+ })(ExamType || (ExamType = {}));
5652
+ var ExamStatus$1;
5653
+ (function (ExamStatus) {
5654
+ ExamStatus["Default"] = "Default";
5655
+ ExamStatus["Pending"] = "Pending";
5656
+ ExamStatus["InProgress"] = "InProgress";
5657
+ ExamStatus["Completed"] = "Completed";
5658
+ })(ExamStatus$1 || (ExamStatus$1 = {}));
5659
+ var ExamStatusNumber;
5660
+ (function (ExamStatusNumber) {
5661
+ ExamStatusNumber[ExamStatusNumber["Default"] = 0] = "Default";
5662
+ ExamStatusNumber[ExamStatusNumber["Pending"] = 1] = "Pending";
5663
+ ExamStatusNumber[ExamStatusNumber["InProgress"] = 2] = "InProgress";
5664
+ ExamStatusNumber[ExamStatusNumber["Completed"] = 3] = "Completed";
5665
+ })(ExamStatusNumber || (ExamStatusNumber = {}));
5456
5666
 
5457
5667
  var TEXTBOOK_HEADERS = [{
5458
5668
  title: "#"
@@ -5470,6 +5680,19 @@ var TEXTBOOK_HEADERS = [{
5470
5680
  }, {
5471
5681
  title: "actions"
5472
5682
  }];
5683
+ var DEFAULT_ANSWER_COUNT = 5;
5684
+ var DEFAULT_EXAM_REQUEST = {
5685
+ questions: [{
5686
+ article: 1,
5687
+ correctAnswers: [1],
5688
+ numberOfAnswers: DEFAULT_ANSWER_COUNT,
5689
+ score: 2,
5690
+ questionOrder: 0
5691
+ }],
5692
+ title: "",
5693
+ duration: 10,
5694
+ subjectId: 0
5695
+ };
5473
5696
  var TEXTBOOK_PAGE_TITLE = "textbooks";
5474
5697
  var TEXT_BOOK_SEARCH_PLACEHOLDER = "enter_student_name_to_search";
5475
5698
  var TextbookDefaultQuery = {
@@ -5536,6 +5759,133 @@ var deleteArticleApi = function deleteArticleApi(articleId, role) {
5536
5759
  });
5537
5760
  };
5538
5761
 
5762
+ var EXAM_URL = BASE_URL + "/api/exam";
5763
+ var createExam = function createExam(data) {
5764
+ return api.post("" + EXAM_URL, data, {
5765
+ params: {
5766
+ roles: [exports.Role.Teacher]
5767
+ }
5768
+ });
5769
+ };
5770
+ var apiCreateExamSession = function apiCreateExamSession(examId) {
5771
+ return api.post(EXAM_URL + "/" + examId);
5772
+ };
5773
+
5774
+ var useExam = function useExam(props) {
5775
+ var callback = props.callback,
5776
+ navigate = props.navigate;
5777
+ var dispatch = reactRedux.useDispatch();
5778
+ var _useState = React.useState(false),
5779
+ isOpenDialog = _useState[0],
5780
+ setOpenDialog = _useState[1];
5781
+ var _useState2 = React.useState(DEFAULT_EXAM_REQUEST),
5782
+ examRequest = _useState2[0],
5783
+ setExamRequest = _useState2[1];
5784
+ var isTeacher = reactRedux.useSelector(function (state) {
5785
+ var _state$common, _state$common$user;
5786
+ 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.roles.includes(Roles.Teacher);
5787
+ });
5788
+ var _useTranslation = reactI18next.useTranslation(),
5789
+ t = _useTranslation.t;
5790
+ var handleChangeExamRequest = function handleChangeExamRequest(value) {
5791
+ setExamRequest(value);
5792
+ };
5793
+ var handleOpenCreateExamDialog = function handleOpenCreateExamDialog() {
5794
+ setOpenDialog(true);
5795
+ };
5796
+ var handleCloseDialog = function handleCloseDialog() {
5797
+ setExamRequest(DEFAULT_EXAM_REQUEST);
5798
+ setOpenDialog(false);
5799
+ callback === null || callback === void 0 ? void 0 : callback();
5800
+ };
5801
+ var validateExam = function validateExam(exam) {
5802
+ if (!exam.subjectId) return t("Please select an exam subject");
5803
+ if (!exam.title.trim().length) return t("Please enter exam title");
5804
+ if (!exam.questions.length) return t("Exam required at least one question");
5805
+ for (var i = 0; i < exam.questions.length; i++) {
5806
+ var question = exam.questions[i];
5807
+ if (!question.categoryId) return t("Please select category for article " + question.article);
5808
+ }
5809
+ return false;
5810
+ };
5811
+ var handleCreateExam = function handleCreateExam() {
5812
+ try {
5813
+ var _temp3 = function _temp3() {
5814
+ dispatch(setLoading(false));
5815
+ };
5816
+ if (!examRequest) return Promise.resolve();
5817
+ var errorMessage = validateExam(examRequest);
5818
+ if (errorMessage) {
5819
+ reactToastify.toast.error(errorMessage);
5820
+ return Promise.resolve();
5821
+ }
5822
+ dispatch(setLoading(true));
5823
+ var _temp2 = _catch(function () {
5824
+ return Promise.resolve(createExam(_extends({}, examRequest, {
5825
+ duration: minutesToTimeSpan(examRequest.duration || 0)
5826
+ }))).then(function (res) {
5827
+ var _temp = function (_res$data, _res$data$data) {
5828
+ if (!((_res$data = res.data) !== null && _res$data !== void 0 && (_res$data$data = _res$data.data) !== null && _res$data$data !== void 0 && _res$data$data.id)) {
5829
+ reactToastify.toast.error("Create exam failed");
5830
+ } else {
5831
+ var _res$data2, _res$data2$data;
5832
+ return Promise.resolve(apiCreateExamSession((_res$data2 = res.data) === null || _res$data2 === void 0 ? void 0 : (_res$data2$data = _res$data2.data) === null || _res$data2$data === void 0 ? void 0 : _res$data2$data.id)).then(function () {
5833
+ setExamRequest(DEFAULT_EXAM_REQUEST);
5834
+ reactToastify.toast.success("Create exam successfully");
5835
+ });
5836
+ }
5837
+ }();
5838
+ if (_temp && _temp.then) return _temp.then(function () {});
5839
+ });
5840
+ }, function (error) {
5841
+ var _error$response;
5842
+ reactToastify.toast.error((error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) || "Create exam failed");
5843
+ });
5844
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2));
5845
+ } catch (e) {
5846
+ return Promise.reject(e);
5847
+ }
5848
+ };
5849
+ var handleSaveExam = function handleSaveExam() {
5850
+ try {
5851
+ var _temp5 = function _temp5() {
5852
+ dispatch(setLoading(false));
5853
+ };
5854
+ if (!examRequest) return Promise.resolve();
5855
+ var errorMessage = validateExam(examRequest);
5856
+ if (errorMessage) {
5857
+ reactToastify.toast.error(errorMessage);
5858
+ return Promise.resolve();
5859
+ }
5860
+ dispatch(setLoading(true));
5861
+ var _temp4 = _catch(function () {
5862
+ return Promise.resolve(createExam(_extends({}, examRequest, {
5863
+ duration: minutesToTimeSpan(examRequest.duration || 0)
5864
+ }))).then(function () {
5865
+ handleCloseDialog();
5866
+ reactToastify.toast.success("Save exam successfully");
5867
+ isTeacher ? navigate('/teacher/exam-list') : navigate('/exams');
5868
+ });
5869
+ }, function (error) {
5870
+ var _error$response2;
5871
+ reactToastify.toast.error((error === null || error === void 0 ? void 0 : (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data) || "Save exam failed");
5872
+ });
5873
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4));
5874
+ } catch (e) {
5875
+ return Promise.reject(e);
5876
+ }
5877
+ };
5878
+ return {
5879
+ isOpenDialog: isOpenDialog,
5880
+ examRequest: examRequest,
5881
+ handleChangeExamRequest: handleChangeExamRequest,
5882
+ handleOpenCreateExamDialog: handleOpenCreateExamDialog,
5883
+ handleSaveExam: handleSaveExam,
5884
+ handleCloseDialog: handleCloseDialog,
5885
+ handleCreateExam: handleCreateExam
5886
+ };
5887
+ };
5888
+
5539
5889
  var useTextbookDetail = function useTextbookDetail(props) {
5540
5890
  var role = props.role,
5541
5891
  isReadonlyParam = props.isReadonlyParam,
@@ -5559,18 +5909,31 @@ var useTextbookDetail = function useTextbookDetail(props) {
5559
5909
  var _useState5 = React.useState(),
5560
5910
  parentChapter = _useState5[0],
5561
5911
  setParentChapter = _useState5[1];
5562
- var _useState6 = React.useState(),
5563
- selectedChapter = _useState6[0],
5564
- setSelectedChapter = _useState6[1];
5912
+ var _useState6 = React.useState([]),
5913
+ articlesSelected = _useState6[0],
5914
+ setArticlesSelected = _useState6[1];
5565
5915
  var _useState7 = React.useState(),
5566
- selectedDeleteItem = _useState7[0],
5567
- setSelectedDeleteItem = _useState7[1];
5916
+ selectedChapter = _useState7[0],
5917
+ setSelectedChapter = _useState7[1];
5918
+ var _useState8 = React.useState(),
5919
+ selectedDeleteItem = _useState8[0],
5920
+ setSelectedDeleteItem = _useState8[1];
5568
5921
  var updateChapterRef = React.useRef();
5569
5922
  var updateArticleRef = React.useRef();
5570
- var _useState8 = React.useState(false),
5571
- isEditedTitle = _useState8[0],
5572
- setEditedTitle = _useState8[1];
5923
+ var _useState9 = React.useState(false),
5924
+ isEditedTitle = _useState9[0],
5925
+ setEditedTitle = _useState9[1];
5573
5926
  var textbookUrl = role === exports.Role.Teacher ? TEXTBOOK_URL$1 : ADMIN_TEXTBOOK_URL;
5927
+ var _useExam = useExam({
5928
+ navigate: navigate
5929
+ }),
5930
+ isOpenDialog = _useExam.isOpenDialog,
5931
+ examRequest = _useExam.examRequest,
5932
+ handleChangeExamRequest = _useExam.handleChangeExamRequest,
5933
+ handleOpenCreateExamDialog = _useExam.handleOpenCreateExamDialog,
5934
+ handleSaveExam = _useExam.handleSaveExam,
5935
+ handleCloseDialog = _useExam.handleCloseDialog,
5936
+ handleCreateExam = _useExam.handleCreateExam;
5574
5937
  var handleOpenAddArticleDialog = function handleOpenAddArticleDialog(chapter) {
5575
5938
  setSelectedChapter(chapter);
5576
5939
  };
@@ -5821,7 +6184,6 @@ var useTextbookDetail = function useTextbookDetail(props) {
5821
6184
  }
5822
6185
  };
5823
6186
  return Promise.resolve(handleCreateArticle(newArticle, function (article) {
5824
- console.log("created article: ", article);
5825
6187
  handleUpdateChapterValue([].concat(articles, [article]), "articles", selectedChapter.id, selectedChapter.parentChapterId);
5826
6188
  setSelectedChapter(undefined);
5827
6189
  })).then(function () {});
@@ -5911,12 +6273,14 @@ var useTextbookDetail = function useTextbookDetail(props) {
5911
6273
  };
5912
6274
  });
5913
6275
  newArticle = _extends({}, thisArticles, {
6276
+ chapterId: chapterId,
5914
6277
  questions: [].concat(thisQuestions, additionalQuestionArticles)
5915
6278
  });
5916
6279
  newArticles = [].concat(articles.slice(0, articleNumber - 1), [newArticle], articles.slice(articleNumber));
5917
6280
  }
5918
6281
  if (questionCount < thisQuestions.length) {
5919
6282
  newArticle = _extends({}, thisArticles, {
6283
+ chapterId: chapterId,
5920
6284
  questions: [].concat(thisQuestions.slice(0, questionCount))
5921
6285
  });
5922
6286
  newArticles = [].concat(articles.slice(0, articleNumber - 1), [newArticle], articles.slice(articleNumber));
@@ -5928,6 +6292,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
5928
6292
  };
5929
6293
  var handleUpdateArticleCategory = function handleUpdateArticleCategory(articleNumber, categoryId, articles, chapterId, parentChapterId) {
5930
6294
  var newArticle = _extends({}, articles[articleNumber - 1], {
6295
+ chapterId: chapterId,
5931
6296
  category: {
5932
6297
  id: categoryId
5933
6298
  }
@@ -5944,6 +6309,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
5944
6309
  if (newAnswerCount > answerCount) {
5945
6310
  newArticle = _extends({}, articles[articleNumber - 1], {
5946
6311
  answerCount: newAnswerCount,
6312
+ chapterId: chapterId,
5947
6313
  questions: articles[articleNumber - 1].questions.map(function (i) {
5948
6314
  return _extends({}, i, {
5949
6315
  numberOfAnswers: newAnswerCount
@@ -5953,6 +6319,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
5953
6319
  } else if (newAnswerCount < answerCount) {
5954
6320
  newArticle = _extends({}, articles[articleNumber - 1], {
5955
6321
  answerCount: newAnswerCount,
6322
+ chapterId: chapterId,
5956
6323
  questions: articles[articleNumber - 1].questions.map(function (i) {
5957
6324
  return _extends({}, i, {
5958
6325
  numberOfAnswers: newAnswerCount,
@@ -5972,6 +6339,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
5972
6339
  var _extends4;
5973
6340
  var thisQuestions = articles[articleNumber - 1].questions;
5974
6341
  var newArticle = _extends({}, articles[articleNumber - 1], {
6342
+ chapterId: chapterId,
5975
6343
  questions: [].concat(thisQuestions.slice(0, index), [_extends({}, thisQuestions[index], (_extends4 = {}, _extends4[key] = value, _extends4))], thisQuestions.slice(index + 1))
5976
6344
  });
5977
6345
  var newArticles = [].concat(articles.slice(0, articleNumber - 1), [newArticle], articles.slice(articleNumber));
@@ -6132,6 +6500,19 @@ var useTextbookDetail = function useTextbookDetail(props) {
6132
6500
  replace: true
6133
6501
  });
6134
6502
  };
6503
+ var handleCheckArticle = function handleCheckArticle(e, article) {
6504
+ var checked = e.target.checked;
6505
+ if (!(article !== null && article !== void 0 && article.id)) return;
6506
+ if (!checked) {
6507
+ var _newArticles = articlesSelected.filter(function (item) {
6508
+ return item !== article.id;
6509
+ });
6510
+ setArticlesSelected(_newArticles);
6511
+ return;
6512
+ }
6513
+ var newArticles = [].concat(articlesSelected, [article.id]);
6514
+ setArticlesSelected(newArticles);
6515
+ };
6135
6516
  React.useEffect(function () {
6136
6517
  var getTextbookDetail = function getTextbookDetail() {
6137
6518
  try {
@@ -6156,6 +6537,53 @@ var useTextbookDetail = function useTextbookDetail(props) {
6156
6537
  };
6157
6538
  if (id) getTextbookDetail();
6158
6539
  }, [dispatch, id]);
6540
+ var handleChangeExamRequestBeforeOpenDialog = function handleChangeExamRequestBeforeOpenDialog() {
6541
+ var _textbookSubject$valu;
6542
+ handleOpenCreateExamDialog();
6543
+ var articles = textbook.chapters.map(function (chapter) {
6544
+ var isSubChapters = !!chapter.subChapters.length;
6545
+ if (isSubChapters) {
6546
+ var _articles = chapter.subChapters.map(function (chapter) {
6547
+ return chapter.articles;
6548
+ });
6549
+ return _articles.filter(Boolean).flat();
6550
+ }
6551
+ return chapter.articles;
6552
+ });
6553
+ var articlesAfterFlat = articles.flat();
6554
+ var questionCount = 0;
6555
+ var articleCount = 1;
6556
+ var questions = articlesAfterFlat.map(function (article) {
6557
+ if (articlesSelected.findIndex(function (item) {
6558
+ return item === article.id;
6559
+ }) !== -1) {
6560
+ var _questions = article.questions.map(function (question) {
6561
+ var _article$category3;
6562
+ var newQuestion = {
6563
+ article: articleCount,
6564
+ id: question === null || question === void 0 ? void 0 : question.id,
6565
+ correctAnswers: question.correctAnswers,
6566
+ numberOfAnswers: question.numberOfAnswers,
6567
+ score: question.score,
6568
+ questionOrder: questionCount,
6569
+ categoryId: (_article$category3 = article.category) === null || _article$category3 === void 0 ? void 0 : _article$category3.id
6570
+ };
6571
+ questionCount++;
6572
+ return newQuestion;
6573
+ });
6574
+ articleCount++;
6575
+ return _questions;
6576
+ }
6577
+ return [];
6578
+ });
6579
+ var exam = {
6580
+ title: "",
6581
+ duration: 10,
6582
+ subjectId: (_textbookSubject$valu = textbookSubject === null || textbookSubject === void 0 ? void 0 : textbookSubject.value) != null ? _textbookSubject$valu : 0,
6583
+ questions: questions.flat().filter(Boolean)
6584
+ };
6585
+ handleChangeExamRequest(exam);
6586
+ };
6159
6587
  React.useEffect(function () {
6160
6588
  document.title = t("textbooks") + " | " + t(id ? "textbook_detail" : "create_textbook");
6161
6589
  }, [id, t]);
@@ -6175,6 +6603,15 @@ var useTextbookDetail = function useTextbookDetail(props) {
6175
6603
  selectedDeleteItem: selectedDeleteItem,
6176
6604
  isEditedTitle: isEditedTitle,
6177
6605
  isReadonlyParam: isReadonlyParam,
6606
+ articlesSelected: articlesSelected,
6607
+ isOpenDialog: isOpenDialog,
6608
+ examRequest: examRequest,
6609
+ handleChangeExamRequest: handleChangeExamRequest,
6610
+ handleCheckArticle: handleCheckArticle,
6611
+ handleOpenCreateExamDialog: handleChangeExamRequestBeforeOpenDialog,
6612
+ handleSaveExam: handleSaveExam,
6613
+ handleCloseDialog: handleCloseDialog,
6614
+ handleCreateExam: handleCreateExam,
6178
6615
  handleChangeTextbookTitle: handleChangeTextbookTitle,
6179
6616
  handleCreateOrUpdateTextbook: handleCreateOrUpdateTextbook,
6180
6617
  handleChangeTextbookSubject: handleChangeTextbookSubject,
@@ -6614,9 +7051,9 @@ var SubjectSelector = function SubjectSelector(_ref) {
6614
7051
  !minimumTextSearchLength && defaultValueAtFirst && options.length && onChange(options[0], subjects[0]);
6615
7052
  }, [JSON.stringify(options), JSON.stringify(subjects), defaultValueAtFirst, minimumTextSearchLength]);
6616
7053
  return React__default.createElement(material.FormGroup, {
6617
- className: "" + styleGlobal["filter-item"]
7054
+ className: "" + styles["filter-item"]
6618
7055
  }, !!title && React__default.createElement("label", {
6619
- className: "" + styleGlobal["title-form"]
7056
+ className: "" + styles["title-form"]
6620
7057
  }, title), React__default.createElement(CustomSelectOption, {
6621
7058
  options: options,
6622
7059
  inputValue: searchString,
@@ -6632,1036 +7069,1115 @@ var SubjectSelector = function SubjectSelector(_ref) {
6632
7069
  }));
6633
7070
  };
6634
7071
 
6635
- var TextbookViewDetail = function TextbookViewDetail(props) {
6636
- var _textbook$chapters;
6637
- var _useTextbookDetail = useTextbookDetail(props),
6638
- id = _useTextbookDetail.id,
6639
- t = _useTextbookDetail.t,
6640
- textbook = _useTextbookDetail.textbook,
6641
- textbookSubject = _useTextbookDetail.textbookSubject,
6642
- isReadonly = _useTextbookDetail.isReadonly,
6643
- isNotFound = _useTextbookDetail.isNotFound,
6644
- parentChapter = _useTextbookDetail.parentChapter,
6645
- textbookId = _useTextbookDetail.textbookId,
6646
- selectedChapter = _useTextbookDetail.selectedChapter,
6647
- selectedDeleteItem = _useTextbookDetail.selectedDeleteItem,
6648
- isEditedTitle = _useTextbookDetail.isEditedTitle,
6649
- handleChangeTextbookTitle = _useTextbookDetail.handleChangeTextbookTitle,
6650
- handleChangeTextbookSubject = _useTextbookDetail.handleChangeTextbookSubject,
6651
- handleGoToTextbookList = _useTextbookDetail.handleGoToTextbookList,
6652
- handleCreateOrUpdateTextbook = _useTextbookDetail.handleCreateOrUpdateTextbook,
6653
- handleCloseChapterNameDialog = _useTextbookDetail.handleCloseChapterNameDialog,
6654
- handleCreateChapter = _useTextbookDetail.handleCreateChapter,
6655
- handleAddChapterToTextbook = _useTextbookDetail.handleAddChapterToTextbook,
6656
- handleAddChapterToParentSubchapter = _useTextbookDetail.handleAddChapterToParentSubchapter,
6657
- handleChangeChapterName = _useTextbookDetail.handleChangeChapterName,
6658
- handleChangeChapterPageFrom = _useTextbookDetail.handleChangeChapterPageFrom,
6659
- handleChangeChapterPageTo = _useTextbookDetail.handleChangeChapterPageTo,
6660
- handleAddArticleToChapter = _useTextbookDetail.handleAddArticleToChapter,
6661
- handleUpdateArticleQuestionCountFromChapter = _useTextbookDetail.handleUpdateArticleQuestionCountFromChapter,
6662
- handleUpdateArticleCategory = _useTextbookDetail.handleUpdateArticleCategory,
6663
- handleUpdateArticleAnswerCount = _useTextbookDetail.handleUpdateArticleAnswerCount,
6664
- handleUpdateArticleQuestion = _useTextbookDetail.handleUpdateArticleQuestion,
6665
- handleCloseArticleDialog = _useTextbookDetail.handleCloseArticleDialog,
6666
- handleOpenAddArticleDialog = _useTextbookDetail.handleOpenAddArticleDialog,
6667
- handleOpenRemoveArticleConfirmDialog = _useTextbookDetail.handleOpenRemoveArticleConfirmDialog,
6668
- handleCloseConfirmDeleteDialog = _useTextbookDetail.handleCloseConfirmDeleteDialog,
6669
- handleRemoveSelectedItem = _useTextbookDetail.handleRemoveSelectedItem,
6670
- handleOpenRemoveChapterConfirmDialog = _useTextbookDetail.handleOpenRemoveChapterConfirmDialog;
6671
- var _useCategorySelect = useCategorySelect({
6672
- subjectId: id ? textbookSubject === null || textbookSubject === void 0 ? void 0 : textbookSubject.value : undefined
6673
- }),
6674
- categoryOptions = _useCategorySelect.categoryOptions;
6675
- if (isNotFound) return React__default.createElement(NotFound, null);
6676
- return React__default.createElement(material.Container, {
6677
- maxWidth: "xl",
6678
- className: "bg-white py-5 p-4 rounded-4 h-100 d-flex flex-column"
6679
- }, React__default.createElement(material.Stack, {
6680
- direction: "row",
6681
- alignItems: "center",
6682
- justifyContent: "space-between",
6683
- mb: 2
6684
- }, React__default.createElement(material.Typography, {
6685
- variant: "h3"
6686
- }, t(id ? isReadonly ? "view_textbook" : "update_textbook" : "create_textbook"))), React__default.createElement(material.Grid, {
6687
- container: true,
6688
- spacing: 3
6689
- }, React__default.createElement(material.Grid, {
6690
- item: true,
6691
- xs: 4,
6692
- className: "d-flex align-items-center"
6693
- }, React__default.createElement(material.Table, null, React__default.createElement(material.TableBody, null, React__default.createElement(material.TableRow, {
6694
- sx: {
6695
- "& td": {
6696
- border: 0
6697
- }
6698
- }
6699
- }, React__default.createElement(material.TableCell, {
6700
- className: "p-2 pe-0",
6701
- sx: {
6702
- width: "15%"
6703
- }
6704
- }, React__default.createElement(material.InputLabel, null, React__default.createElement("span", {
6705
- className: "fw-bold"
6706
- }, t("name")), React__default.createElement("span", {
6707
- className: "text-danger"
6708
- }, "*"))), React__default.createElement(material.TableCell, {
6709
- sx: {
6710
- width: 0,
6711
- px: 1
6712
- }
6713
- }, ":"), React__default.createElement(material.TableCell, {
6714
- className: "p-2"
6715
- }, React__default.createElement(InputText, {
6716
- className: "w-100",
6717
- value: textbook === null || textbook === void 0 ? void 0 : textbook.name,
6718
- placeholder: t("enter_textbook_title"),
6719
- onChange: handleChangeTextbookTitle,
6720
- disabled: isReadonly
6721
- }))), React__default.createElement(material.TableRow, {
6722
- sx: {
6723
- "& td": {
6724
- border: 0
6725
- }
6726
- }
6727
- }, React__default.createElement(material.TableCell, {
6728
- className: "p-2 pe-0"
6729
- }, React__default.createElement(material.InputLabel, null, React__default.createElement("span", {
6730
- className: "fw-bold"
6731
- }, t("subject")), React__default.createElement("span", {
6732
- className: "text-danger"
6733
- }, "*"))), React__default.createElement(material.TableCell, {
6734
- sx: {
6735
- width: 0,
6736
- px: 1
6737
- }
6738
- }, ":"), React__default.createElement(material.TableCell, {
6739
- className: "p-2"
6740
- }, React__default.createElement(SubjectSelector, {
6741
- value: textbookSubject,
6742
- onChange: handleChangeTextbookSubject,
6743
- isDisabled: isReadonly || !!id
6744
- })))))), React__default.createElement(material.Grid, {
6745
- item: true,
6746
- xs: 8,
6747
- className: "d-flex justify-content-end"
6748
- }, React__default.createElement("div", null, React__default.createElement(TextbookActionButtons, {
6749
- isReadonly: isReadonly,
6750
- textbook: textbook,
6751
- onBack: handleGoToTextbookList,
6752
- onSave: handleCreateOrUpdateTextbook,
6753
- hideSave: !isEditedTitle && !!id && !isReadonly || textbook.isCreatedByAdmin
6754
- }))), React__default.createElement(material.Grid, {
6755
- item: true,
6756
- xs: 12,
6757
- className: "d-flex justify-content-end"
6758
- }, !!id && React__default.createElement(material.Button, {
6759
- className: "mx-1",
6760
- variant: "contained",
6761
- color: "primary",
6762
- startIcon: React__default.createElement(fa.FaPlus, {
6763
- size: 12
6764
- }),
6765
- onClick: handleAddChapterToTextbook,
6766
- disabled: isReadonly
6767
- }, t("add_chapter"))), React__default.createElement(material.Grid, {
6768
- item: true,
6769
- xs: 12
6770
- }, React__default.createElement(material.Stack, {
6771
- spacing: 3
6772
- }, !!(textbook !== null && textbook !== void 0 && textbook.subject) && (textbook === null || textbook === void 0 ? void 0 : (_textbook$chapters = textbook.chapters) === null || _textbook$chapters === void 0 ? void 0 : _textbook$chapters.map(function (chapter) {
6773
- return React__default.createElement(ChapterBox, {
6774
- key: chapter.id,
6775
- subject: textbook.subject,
6776
- data: chapter,
6777
- categoryOptions: categoryOptions || [],
6778
- onClickAddSubchapter: handleAddChapterToParentSubchapter,
6779
- onChangeName: handleChangeChapterName,
6780
- onChangePageFrom: handleChangeChapterPageFrom,
6781
- onChangePageTo: handleChangeChapterPageTo,
6782
- onAddArticle: handleOpenAddArticleDialog,
6783
- onRemoveArticle: handleOpenRemoveArticleConfirmDialog,
6784
- onUpdateArticleQuestionCount: handleUpdateArticleQuestionCountFromChapter,
6785
- onUpdateArticleCategory: handleUpdateArticleCategory,
6786
- onUpdateArticleQuestionAnswerCount: handleUpdateArticleAnswerCount,
6787
- onUpdateArticleQuestion: handleUpdateArticleQuestion,
6788
- onRemoveChapter: handleOpenRemoveChapterConfirmDialog,
6789
- isReadonly: isReadonly
6790
- });
6791
- }))))), React__default.createElement(ChapterNameDialog, {
6792
- open: !!(parentChapter !== null && parentChapter !== void 0 && parentChapter.id) || !!textbookId,
6793
- chapter: parentChapter,
6794
- onClose: handleCloseChapterNameDialog,
6795
- onSubmitForm: handleCreateChapter
6796
- }), React__default.createElement(ArticleDialog, {
6797
- open: !!selectedChapter,
6798
- chapter: selectedChapter,
6799
- categoryOptions: categoryOptions || [],
6800
- onClose: handleCloseArticleDialog,
6801
- onSubmitForm: handleAddArticleToChapter
6802
- }), selectedDeleteItem && React__default.createElement(ConfirmDialog, {
6803
- open: true,
6804
- toggle: handleCloseConfirmDeleteDialog,
6805
- text: selectedDeleteItem.confirmText,
6806
- confirmText: selectedDeleteItem.name,
6807
- onConfirm: handleRemoveSelectedItem,
6808
- isDelete: true
6809
- }));
6810
- };
7072
+ var styles$3 = {"drawer":"_11aYm","open":"_3Ydwm","drawer-overlay":"_3SQDf","drawer-header":"_2BwOx","drawer-form":"_2Zo7R","dropdown-content-academy":"_1lzjD","dropdown-change":"_1y7K9","dropdown-academy-item":"_1Y-55","dropdown-content-language":"_1fBXY","dropdown-item-language":"_3Szun","dropdown-item-language-active":"_2HhLb","item-address":"_3WYHC","item-logout":"_2-9ix","title-address":"_1r4pn","image-academy":"_2ZozT"};
6811
7073
 
6812
- var useAutoAcademyDomain = function useAutoAcademyDomain(logout, history, superUrls, homeUrl, homeAcademyUrl) {
6813
- var searchParams = new URLSearchParams(window.location.search);
6814
- var user = reactRedux.useSelector(function (state) {
6815
- var _state$common;
6816
- return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
6817
- });
6818
- var initialAcademySearchParam = function initialAcademySearchParam() {
6819
- var paramAcademyDomain = searchParams.get("domain");
6820
- var domain = getAcademyDomain();
6821
- var pathname = window.location.pathname.toLowerCase();
6822
- if (!user) return;
6823
- var academyDomain = user.academyDomain;
6824
- if (!academyDomain) {
6825
- if (!superUrls.some(function (i) {
6826
- return pathname.startsWith(i);
6827
- })) {
6828
- pushTo({
6829
- pathname: homeUrl,
6830
- search: ""
6831
- });
6832
- }
6833
- if (domain) {
6834
- searchParams.append("domain", domain);
6835
- pushTo({
6836
- pathname: homeUrl,
6837
- search: ""
7074
+ var DURATION_OPTIONS = Array.from({
7075
+ length: 120
7076
+ }, function (_, i) {
7077
+ return i + 1;
7078
+ });
7079
+ var DEFAULT_ANSWER_COUNT$1 = 5;
7080
+
7081
+ var useExamDetailView = function useExamDetailView(props) {
7082
+ var exam = props.exam,
7083
+ selectedSubject = props.selectedSubject,
7084
+ onChangeExam = props.onChangeExam;
7085
+ var _useTranslation = reactI18next.useTranslation(),
7086
+ t = _useTranslation.t;
7087
+ var handleChangeQuestionCount = function handleChangeQuestionCount(article, questionCount, answerCount) {
7088
+ if (!exam) return;
7089
+ var examQuestions = exam.questions;
7090
+ var questions = examQuestions.filter(function (i) {
7091
+ return i.article === +article;
7092
+ });
7093
+ var prevQuestions = examQuestions.filter(function (i) {
7094
+ return i.article < +article;
7095
+ });
7096
+ var nextQuestions = examQuestions.filter(function (i) {
7097
+ return i.article > +article;
7098
+ });
7099
+ var lastOrder = questions[questions.length - 1].questionOrder;
7100
+ if (questions.length === questionCount) return;
7101
+ if (questions.length < questionCount) {
7102
+ var additionalQuestions = Array.from({
7103
+ length: questionCount - questions.length
7104
+ }).map(function (_, index) {
7105
+ var _questions$;
7106
+ return {
7107
+ article: +article,
7108
+ correctAnswers: [1],
7109
+ numberOfAnswers: answerCount,
7110
+ categoryId: (_questions$ = questions[0]) === null || _questions$ === void 0 ? void 0 : _questions$.categoryId,
7111
+ score: DEFAULT_SCORE,
7112
+ questionOrder: lastOrder + index + 1
7113
+ };
7114
+ });
7115
+ var newQuestions = [].concat(prevQuestions, questions, additionalQuestions, nextQuestions.map(function (i) {
7116
+ return _extends({}, i, {
7117
+ questionOrder: i.questionOrder + questionCount - questions.length
6838
7118
  });
6839
- }
7119
+ }));
7120
+ onChangeExam(_extends({}, exam, {
7121
+ questions: [].concat(newQuestions)
7122
+ }));
6840
7123
  } else {
6841
- if (superUrls.some(function (i) {
6842
- return pathname.startsWith(i);
6843
- })) {
6844
- pushTo({
6845
- pathname: homeAcademyUrl,
6846
- search: ""
7124
+ var remainQuestions = questions.slice(0, questionCount);
7125
+ var _newQuestions = [].concat(prevQuestions, remainQuestions, nextQuestions.map(function (i) {
7126
+ return _extends({}, i, {
7127
+ questionOrder: i.questionOrder - questions.length + questionCount
6847
7128
  });
6848
- }
6849
- if (paramAcademyDomain && academyDomain.trim().toLocaleLowerCase() != (paramAcademyDomain === null || paramAcademyDomain === void 0 ? void 0 : paramAcademyDomain.trim().toLocaleLowerCase())) {
6850
- logout();
6851
- }
6852
- if (!paramAcademyDomain && academyDomain) {
6853
- searchParams.append("domain", academyDomain);
6854
- pushTo(_extends({}, window.location, {
6855
- search: searchParams.toString()
6856
- }));
6857
- }
7129
+ }));
7130
+ onChangeExam(_extends({}, exam, {
7131
+ questions: [].concat(_newQuestions)
7132
+ }));
6858
7133
  }
6859
7134
  };
6860
- var pushTo = function pushTo(data) {
6861
- if (history.push) history.push(data);else history(data);
6862
- };
6863
- React.useEffect(function () {
6864
- initialAcademySearchParam();
6865
- }, [window.location.pathname, user === null || user === void 0 ? void 0 : user.academyDomain]);
6866
- };
6867
-
6868
- var useList = function useList(fetchData, defaultQuery) {
6869
- var dispatch = reactRedux.useDispatch();
6870
- var _useState = React.useState(defaultQuery),
6871
- filter = _useState[0],
6872
- setFilter = _useState[1];
6873
- var _useState2 = React.useState(0),
6874
- totalPages = _useState2[0],
6875
- setTotalPages = _useState2[1];
6876
- var _useState3 = React.useState([]),
6877
- data = _useState3[0],
6878
- setData = _useState3[1];
6879
- var _useState4 = React.useState(),
6880
- selectedItem = _useState4[0],
6881
- setSelectedItem = _useState4[1];
6882
- var textSearchRef = React.useRef(null);
6883
- var isFirstLoadRef = React.useRef(true);
6884
- var handleChangeSelectedItem = function handleChangeSelectedItem(item) {
6885
- setSelectedItem(item);
7135
+ var handleChangeCategory = function handleChangeCategory(article, categoryId) {
7136
+ if (!exam) return;
7137
+ var examQuestions = exam.questions;
7138
+ var questions = examQuestions.filter(function (i) {
7139
+ return i.article === +article;
7140
+ });
7141
+ var otherQuestions = examQuestions.filter(function (i) {
7142
+ return i.article !== +article;
7143
+ });
7144
+ onChangeExam(_extends({}, exam, {
7145
+ questions: [].concat(otherQuestions, questions.map(function (q) {
7146
+ return _extends({}, q, {
7147
+ categoryId: categoryId
7148
+ });
7149
+ }))
7150
+ }));
6886
7151
  };
6887
- var getData = function getData(isLoading) {
6888
- if (isLoading === void 0) {
6889
- isLoading = false;
6890
- }
6891
- try {
6892
- var _temp2 = function _temp2() {
6893
- isLoading && dispatch(setLoading(false));
6894
- };
6895
- if (isFirstLoadRef.current) isFirstLoadRef.current = false;
6896
- isLoading && dispatch(setLoading(true));
6897
- var _temp = _catch(function () {
6898
- return Promise.resolve(fetchData(filter)).then(function (res) {
6899
- var _res$data = res.data,
6900
- _res$data$items = _res$data.items,
6901
- items = _res$data$items === void 0 ? [] : _res$data$items,
6902
- _res$data$totalPages = _res$data.totalPages,
6903
- totalPages = _res$data$totalPages === void 0 ? 0 : _res$data$totalPages;
6904
- setTotalPages(totalPages);
6905
- setData(items);
6906
- });
6907
- }, function (error) {
6908
- var _error$response, _error$response$data;
6909
- setTotalPages(0);
6910
- setData([]);
6911
- reactToastify.toast.error((error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.title) || "Get data failed");
7152
+ var handleDeleteArticle = function handleDeleteArticle(article) {
7153
+ if (!exam) return;
7154
+ var removedQuestions = exam.questions.filter(function (i) {
7155
+ return i.article === +article;
7156
+ }).map(function (i) {
7157
+ return i.questionOrder;
7158
+ });
7159
+ var max = Math.max.apply(Math, removedQuestions);
7160
+ var examQuestions = exam.questions.filter(function (i) {
7161
+ return i.article !== +article;
7162
+ }).map(function (i) {
7163
+ return _extends({}, i, {
7164
+ article: i.article > article ? i.article - 1 : i.article,
7165
+ questionOrder: i.questionOrder > max ? i.questionOrder - removedQuestions.length : i.questionOrder
6912
7166
  });
6913
- return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
6914
- } catch (e) {
6915
- return Promise.reject(e);
7167
+ });
7168
+ onChangeExam(_extends({}, exam, {
7169
+ questions: [].concat(examQuestions)
7170
+ }));
7171
+ };
7172
+ var handleChangeAnswerCount = function handleChangeAnswerCount(article, newAnswerCount, answerCount) {
7173
+ if (!exam) return;
7174
+ if (newAnswerCount === answerCount) return;
7175
+ var examQuestions = exam.questions;
7176
+ var questions = examQuestions.filter(function (i) {
7177
+ return i.article === +article;
7178
+ });
7179
+ var otherQuestions = examQuestions.filter(function (i) {
7180
+ return i.article !== +article;
7181
+ });
7182
+ if (answerCount < newAnswerCount) {
7183
+ onChangeExam(_extends({}, exam, {
7184
+ questions: [].concat(otherQuestions, questions.map(function (q) {
7185
+ return _extends({}, q, {
7186
+ numberOfAnswers: newAnswerCount
7187
+ });
7188
+ }))
7189
+ }));
7190
+ } else {
7191
+ onChangeExam(_extends({}, exam, {
7192
+ questions: [].concat(otherQuestions, questions.map(function (q) {
7193
+ var _q$correctAnswers;
7194
+ return _extends({}, q, {
7195
+ numberOfAnswers: newAnswerCount,
7196
+ correctAnswers: (_q$correctAnswers = q.correctAnswers) === null || _q$correctAnswers === void 0 ? void 0 : _q$correctAnswers.filter(function (i) {
7197
+ return i <= newAnswerCount;
7198
+ })
7199
+ });
7200
+ }))
7201
+ }));
6916
7202
  }
6917
7203
  };
6918
- var handleSort = function handleSort(sortColumnName) {
6919
- var sortColumnDirection = OrderType.ASC;
6920
- console.log({
6921
- sortColumnName: typeof sortColumnName,
6922
- filter: typeof filter.sortColumnName
7204
+ var handleChangeCorrectAnswers = function handleChangeCorrectAnswers(article, index, answer) {
7205
+ if (!exam) return;
7206
+ var examQuestions = exam.questions;
7207
+ var questions = examQuestions.filter(function (i) {
7208
+ return i.article === +article;
6923
7209
  });
6924
- if (filter.sortColumnName == sortColumnName && filter.sortColumnDirection === OrderType.ASC) sortColumnDirection = OrderType.DESC;
6925
- setFilter(_extends({}, filter, {
6926
- sortColumnName: sortColumnName,
6927
- sortColumnDirection: sortColumnDirection,
6928
- currentPage: 1
7210
+ var otherQuestions = examQuestions.filter(function (i) {
7211
+ return i.article !== +article;
7212
+ });
7213
+ var selectedQuestion = questions[index];
7214
+ onChangeExam(_extends({}, exam, {
7215
+ questions: [].concat(otherQuestions, questions.slice(0, index), [_extends({}, selectedQuestion, {
7216
+ correctAnswers: [answer]
7217
+ })], questions.slice(index + 1))
6929
7218
  }));
6930
7219
  };
6931
- var handleChangeSearchText = function handleChangeSearchText(e) {
6932
- if (!textSearchRef.current) return;
6933
- textSearchRef.current.value = e.target.value.trim();
6934
- debounceSearch();
7220
+ var handleChangeScoreAnswer = function handleChangeScoreAnswer(article, index, score) {
7221
+ if (!exam) return;
7222
+ var examQuestions = exam.questions;
7223
+ var questions = examQuestions.filter(function (i) {
7224
+ return i.article === +article;
7225
+ });
7226
+ var otherQuestions = examQuestions.filter(function (i) {
7227
+ return i.article !== +article;
7228
+ });
7229
+ var selectedQuestion = questions[index];
7230
+ if (score === selectedQuestion.score) return;
7231
+ onChangeExam(_extends({}, exam, {
7232
+ questions: [].concat(otherQuestions, questions.slice(0, index), [_extends({}, selectedQuestion, {
7233
+ score: score
7234
+ })], questions.slice(index + 1))
7235
+ }));
6935
7236
  };
6936
- var handleChangePage = function handleChangePage(_, page) {
6937
- setFilter(_extends({}, filter, {
6938
- currentPage: page
7237
+ var handleChangeDuration = function handleChangeDuration(value) {
7238
+ if (!exam) return;
7239
+ onChangeExam(_extends({}, exam, {
7240
+ duration: value === null || value === void 0 ? void 0 : value.value
6939
7241
  }));
6940
7242
  };
6941
- var calcOrderNumber = function calcOrderNumber(index) {
6942
- var _filter$currentPage, _filter$pageSize;
6943
- return (((_filter$currentPage = filter.currentPage) != null ? _filter$currentPage : 0) - 1) * ((_filter$pageSize = filter.pageSize) != null ? _filter$pageSize : 0) + index + 1;
7243
+ var handleChangeTitle = function handleChangeTitle(e) {
7244
+ if (!exam) return;
7245
+ onChangeExam(_extends({}, exam, {
7246
+ title: e.target.value
7247
+ }));
6944
7248
  };
6945
- var debounceSearch = _.debounce(function () {
6946
- var _textSearchRef$curren;
6947
- setFilter(_extends({}, filter, {
6948
- currentPage: 1,
6949
- textSearch: (_textSearchRef$curren = textSearchRef.current) === null || _textSearchRef$curren === void 0 ? void 0 : _textSearchRef$curren.value
7249
+ var handleAddArticle = function handleAddArticle() {
7250
+ var _$maxBy, _$maxBy2;
7251
+ if (!exam) return;
7252
+ var maxArticle = ((_$maxBy = _.maxBy(exam.questions, "article")) === null || _$maxBy === void 0 ? void 0 : _$maxBy.article) || 0;
7253
+ var maxOrder = ((_$maxBy2 = _.maxBy(exam.questions, "questionOrder")) === null || _$maxBy2 === void 0 ? void 0 : _$maxBy2.questionOrder) || 0;
7254
+ onChangeExam(_extends({}, exam, {
7255
+ questions: [].concat(exam.questions, [{
7256
+ article: maxArticle + 1,
7257
+ correctAnswers: [1],
7258
+ numberOfAnswers: DEFAULT_ANSWER_COUNT$1,
7259
+ score: DEFAULT_SCORE,
7260
+ questionOrder: maxOrder + 1
7261
+ }])
6950
7262
  }));
6951
- }, 500);
7263
+ };
7264
+ var examGroupByArticle = React.useMemo(function () {
7265
+ if (!exam) return [];
7266
+ var articles = [];
7267
+ var groupedArticle = _.groupBy(exam.questions, "article");
7268
+ for (var key in groupedArticle) {
7269
+ if (Object.prototype.hasOwnProperty.call(groupedArticle, key)) {
7270
+ var _questions$find, _$maxBy3;
7271
+ var questions = groupedArticle[key];
7272
+ articles.push({
7273
+ article: +key,
7274
+ categoryId: (_questions$find = questions.find(function (i) {
7275
+ return !!i.categoryId;
7276
+ })) === null || _questions$find === void 0 ? void 0 : _questions$find.categoryId,
7277
+ answerCount: ((_$maxBy3 = _.maxBy(questions, "numberOfAnswers")) === null || _$maxBy3 === void 0 ? void 0 : _$maxBy3.numberOfAnswers) || DEFAULT_ANSWER_COUNT$1,
7278
+ questionCount: questions.length,
7279
+ questions: questions
7280
+ });
7281
+ }
7282
+ }
7283
+ return _.sortBy(articles, "article");
7284
+ }, [JSON.stringify(exam)]);
7285
+ var durationOptions = React.useMemo(function () {
7286
+ var options = DURATION_OPTIONS.map(function (i) {
7287
+ return {
7288
+ label: i + "\uBD84",
7289
+ value: i
7290
+ };
7291
+ });
7292
+ if (!!exam.duration && exam.duration > DURATION_OPTIONS[DURATION_OPTIONS.length - 1]) return [].concat(options, [{
7293
+ label: exam.duration + "\uBD84",
7294
+ value: exam.duration
7295
+ }]);
7296
+ return options;
7297
+ }, [exam.duration]);
6952
7298
  React.useEffect(function () {
6953
- getData(isFirstLoadRef.current);
6954
- }, [JSON.stringify(filter)]);
7299
+ if ((selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.id) !== exam.subjectId) onChangeExam(_extends({}, exam, {
7300
+ subjectId: (selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.id) || 0
7301
+ }));
7302
+ }, [selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.id, exam.subjectId]);
6955
7303
  return {
6956
- filter: filter,
6957
- textSearchRef: textSearchRef,
6958
- totalPages: totalPages,
6959
- data: data,
6960
- selectedItem: selectedItem,
6961
- handleSort: handleSort,
6962
- handleChangeSearchText: handleChangeSearchText,
6963
- handleChangePage: handleChangePage,
6964
- calcOrderNumber: calcOrderNumber,
6965
- handleChangeSelectedItem: handleChangeSelectedItem,
6966
- getData: getData
7304
+ t: t,
7305
+ durationOptions: durationOptions,
7306
+ examGroupByArticle: examGroupByArticle,
7307
+ handleAddArticle: handleAddArticle,
7308
+ handleChangeScoreAnswer: handleChangeScoreAnswer,
7309
+ handleChangeTitle: handleChangeTitle,
7310
+ handleChangeDuration: handleChangeDuration,
7311
+ handleChangeCorrectAnswers: handleChangeCorrectAnswers,
7312
+ handleChangeAnswerCount: handleChangeAnswerCount,
7313
+ handleChangeQuestionCount: handleChangeQuestionCount,
7314
+ handleChangeCategory: handleChangeCategory,
7315
+ handleDeleteArticle: handleDeleteArticle
6967
7316
  };
6968
7317
  };
6969
7318
 
6970
-
6971
-
6972
- var index$1 = {
6973
- __proto__: null,
6974
- useLogin: useLogin,
6975
- useAutoAcademyDomain: useAutoAcademyDomain,
6976
- useList: useList
6977
- };
6978
-
6979
- var useTextbookList = function useTextbookList(props) {
6980
- var role = props.role,
6981
- navigate = props.navigate;
6982
- var _useList = useList(function (search) {
6983
- return getTextbookListApi(search, role);
6984
- }, TextbookDefaultQuery),
6985
- filter = _useList.filter,
6986
- textSearchRef = _useList.textSearchRef,
6987
- totalPages = _useList.totalPages,
6988
- textbooks = _useList.data,
6989
- selectedTextbook = _useList.selectedItem,
6990
- handleSort = _useList.handleSort,
6991
- handleChangeSearchText = _useList.handleChangeSearchText,
6992
- handleChangePage = _useList.handleChangePage,
6993
- calcOrderNumber = _useList.calcOrderNumber,
6994
- handleChangeSelectedItem = _useList.handleChangeSelectedItem,
6995
- getData = _useList.getData;
6996
- var textbookUrl = role === exports.Role.Teacher ? TEXTBOOK_URL$1 : ADMIN_TEXTBOOK_URL;
6997
- var dispatch = reactRedux.useDispatch();
6998
- var handleViewTextbook = function handleViewTextbook(id) {
6999
- navigate(textbookUrl + "/" + id + "?readonly=true", {
7000
- replace: true
7001
- });
7002
- };
7003
- var handleUpdateTextbook = function handleUpdateTextbook(id) {
7004
- navigate(textbookUrl + "/" + id, {
7005
- replace: true
7006
- });
7007
- };
7008
- var handleCreateTextbook = function handleCreateTextbook() {
7009
- navigate(textbookUrl + "/create", {
7010
- replace: true
7011
- });
7012
- };
7013
- var toggleConfirmDialog = function toggleConfirmDialog() {
7014
- handleChangeSelectedItem(undefined);
7015
- };
7016
- var handleSelectDeleteTextbook = function handleSelectDeleteTextbook(textbook) {
7017
- return [handleChangeSelectedItem(textbook)];
7018
- };
7019
- var handleDeleteTextbook = function handleDeleteTextbook() {
7020
- try {
7021
- var _temp2 = function _temp2() {
7022
- dispatch(setLoading(false));
7023
- };
7024
- if (!(selectedTextbook !== null && selectedTextbook !== void 0 && selectedTextbook.id)) return Promise.resolve();
7025
- dispatch(setLoading(true));
7026
- var _temp = _catch(function () {
7027
- return Promise.resolve(deleteTextbookApi(selectedTextbook.id, role)).then(function () {
7028
- return Promise.resolve(getData(false)).then(function () {
7029
- toggleConfirmDialog();
7030
- });
7031
- });
7032
- }, function (error) {
7033
- var _error$response, _error$response$data;
7034
- reactToastify.toast.error((error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.title) || "Textbook deleted failed");
7035
- });
7036
- return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
7037
- } catch (e) {
7038
- return Promise.reject(e);
7039
- }
7040
- };
7041
- return {
7042
- filter: filter,
7043
- textSearchRef: textSearchRef,
7044
- totalPages: totalPages,
7045
- textbooks: textbooks,
7046
- selectedTextbook: selectedTextbook,
7047
- handleSort: handleSort,
7048
- handleChangeSearchText: handleChangeSearchText,
7049
- handleChangePage: handleChangePage,
7050
- calcOrderNumber: calcOrderNumber,
7051
- handleViewTextbook: handleViewTextbook,
7052
- handleUpdateTextbook: handleUpdateTextbook,
7053
- handleCreateTextbook: handleCreateTextbook,
7054
- toggleConfirmDialog: toggleConfirmDialog,
7055
- handleDeleteTextbook: handleDeleteTextbook,
7056
- handleSelectDeleteTextbook: handleSelectDeleteTextbook
7057
- };
7319
+ var ExamDetailView = function ExamDetailView(_ref) {
7320
+ var _ref$className = _ref.className,
7321
+ className = _ref$className === void 0 ? "" : _ref$className,
7322
+ exam = _ref.exam,
7323
+ isDisabled = _ref.isDisabled,
7324
+ isEdit = _ref.isEdit,
7325
+ onChangeExam = _ref.onChangeExam;
7326
+ var _useSubjectSelect = useSubjectSelect(),
7327
+ subjectOptions = _useSubjectSelect.subjectOptions,
7328
+ selectedSubject = _useSubjectSelect.selectedSubject,
7329
+ handleChangeSubject = _useSubjectSelect.handleChangeSubject;
7330
+ var _useExamDetailView = useExamDetailView({
7331
+ exam: exam,
7332
+ onChangeExam: onChangeExam,
7333
+ selectedSubject: selectedSubject
7334
+ }),
7335
+ t = _useExamDetailView.t,
7336
+ durationOptions = _useExamDetailView.durationOptions,
7337
+ examGroupByArticle = _useExamDetailView.examGroupByArticle,
7338
+ handleAddArticle = _useExamDetailView.handleAddArticle,
7339
+ handleChangeScoreAnswer = _useExamDetailView.handleChangeScoreAnswer,
7340
+ handleChangeTitle = _useExamDetailView.handleChangeTitle,
7341
+ handleChangeDuration = _useExamDetailView.handleChangeDuration,
7342
+ handleChangeCorrectAnswers = _useExamDetailView.handleChangeCorrectAnswers,
7343
+ handleChangeAnswerCount = _useExamDetailView.handleChangeAnswerCount,
7344
+ handleChangeQuestionCount = _useExamDetailView.handleChangeQuestionCount,
7345
+ handleChangeCategory = _useExamDetailView.handleChangeCategory,
7346
+ handleDeleteArticle = _useExamDetailView.handleDeleteArticle;
7347
+ return React__default.createElement(material.Grid, {
7348
+ container: true,
7349
+ spacing: 3,
7350
+ className: className + " " + styles["custom-row"]
7351
+ }, React__default.createElement(material.Grid, {
7352
+ item: true,
7353
+ xs: 5,
7354
+ className: 'mb-2'
7355
+ }, React__default.createElement("label", {
7356
+ className: styles["form-label"] + " " + styles$2["question-label"],
7357
+ htmlFor: "title"
7358
+ }, t("title")), React__default.createElement("input", {
7359
+ disabled: isDisabled,
7360
+ className: "" + styles["form-control"],
7361
+ value: exam.title,
7362
+ id: "title",
7363
+ placeholder: t("enter_title"),
7364
+ onChange: handleChangeTitle
7365
+ })), React__default.createElement(material.Grid, {
7366
+ item: true,
7367
+ xs: 3,
7368
+ className: 'mb-2'
7369
+ }, React__default.createElement("label", {
7370
+ className: styles["form-label"] + " " + styles$2["question-label"],
7371
+ htmlFor: "duration"
7372
+ }, t("duration")), React__default.createElement(CustomSelect, {
7373
+ inputId: "duration",
7374
+ value: exam.duration,
7375
+ options: durationOptions,
7376
+ onChange: handleChangeDuration,
7377
+ isDisabled: isDisabled
7378
+ })), React__default.createElement(material.Grid, {
7379
+ item: true,
7380
+ xs: 3,
7381
+ className: 'mb-2'
7382
+ }, React__default.createElement("label", {
7383
+ className: styles["form-label"] + " " + styles$2["question-label"],
7384
+ htmlFor: "duration"
7385
+ }, t("subject"), " ", selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.name), React__default.createElement(CustomSelect, {
7386
+ inputId: "subject",
7387
+ value: selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.id,
7388
+ options: subjectOptions,
7389
+ onChange: handleChangeSubject,
7390
+ isDisabled: isDisabled || isEdit
7391
+ })), examGroupByArticle.map(function (i, index) {
7392
+ return React__default.createElement(material.Grid, {
7393
+ item: true,
7394
+ key: i.article,
7395
+ xs: 12,
7396
+ className: index === examGroupByArticle.length - 1 ? "mb-2" : ''
7397
+ }, React__default.createElement(ArticleGroupView, Object.assign({}, i, {
7398
+ isActive: index === examGroupByArticle.length - 1,
7399
+ onChangeQuestionCount: handleChangeQuestionCount,
7400
+ onChangeCategory: handleChangeCategory,
7401
+ onChangeAnswerCount: handleChangeAnswerCount,
7402
+ onChangeCorrectAnswers: handleChangeCorrectAnswers,
7403
+ onChangeScoreAnswer: handleChangeScoreAnswer,
7404
+ onDelete: handleDeleteArticle,
7405
+ isDisabled: isDisabled,
7406
+ selectedSubject: selectedSubject,
7407
+ isDeletable: examGroupByArticle.length > 1
7408
+ })));
7409
+ }), React__default.createElement(material.Grid, {
7410
+ item: true,
7411
+ xs: 12
7412
+ }, React__default.createElement("button", {
7413
+ disabled: isDisabled,
7414
+ className: styles["btn-outline-primary"] + " w-100 d-flex justify-content-center align-items-center " + styles$2["question-btn"] + " mt-3",
7415
+ onClick: handleAddArticle
7416
+ }, React__default.createElement(fa.FaPlusCircle, {
7417
+ className: "me-2"
7418
+ }), "\uBB38\uD56D \uCD94\uAC00\uD558\uAE30")));
7058
7419
  };
7059
7420
 
7060
- var EmptyRow = function EmptyRow() {
7421
+ var _excluded$4 = ["isOpen", "onClose", "handleSaveExam"];
7422
+ var CreateExamDrawer = function CreateExamDrawer(props) {
7423
+ var isOpen = props.isOpen,
7424
+ onClose = props.onClose,
7425
+ handleSaveExam = props.handleSaveExam,
7426
+ examDetailViewProps = _objectWithoutPropertiesLoose(props, _excluded$4);
7061
7427
  var _useTranslation = reactI18next.useTranslation(),
7062
7428
  t = _useTranslation.t;
7063
- return React__default.createElement(material.TableRow, null, React__default.createElement(material.TableCell, {
7064
- colSpan: 12,
7065
- className: "text-center text-muted"
7066
- }, t("no_data")));
7429
+ var theme = material.useTheme();
7430
+ var isTabletUp = material.useMediaQuery(theme.breakpoints.up('lg'));
7431
+ return React__default.createElement("div", null, React__default.createElement("div", {
7432
+ className: styles$3["drawer-overlay"] + " " + (isOpen && styles$3["open"]),
7433
+ onClick: function onClick() {
7434
+ return onClose();
7435
+ }
7436
+ }), React__default.createElement("div", {
7437
+ className: styles$3["drawer"] + " bg-white " + (isOpen && styles$3["open"]),
7438
+ style: {
7439
+ width: "" + (isTabletUp ? "70vw" : "100vw")
7440
+ }
7441
+ }, React__default.createElement("div", {
7442
+ className: styles$3["drawer-header"] + " d-flex justify-content-between align-items-center"
7443
+ }, React__default.createElement("div", {
7444
+ style: {
7445
+ color: "#5458D5",
7446
+ cursor: "pointer",
7447
+ padding: "0.5rem 1rem",
7448
+ border: "1px solid #5458D5",
7449
+ backgroundColor: "white",
7450
+ justifyContent: "center",
7451
+ alignItems: "center",
7452
+ borderRadius: "6px"
7453
+ },
7454
+ onClick: handleSaveExam
7455
+ }, t("live_exam")), React__default.createElement("span", {
7456
+ className: "p-1 pointer",
7457
+ onClick: function onClick() {
7458
+ return onClose();
7459
+ }
7460
+ }, React__default.createElement(fa.FaTimes, {
7461
+ size: 18
7462
+ }))), React__default.createElement("div", {
7463
+ className: "" + styles$3["drawer-form"]
7464
+ }, React__default.createElement(ExamDetailView, Object.assign({}, examDetailViewProps)))));
7067
7465
  };
7068
7466
 
7069
- var LayoutList = function LayoutList(_ref) {
7070
- var children = _ref.children,
7071
- title = _ref.title;
7072
- return React__default.createElement(material.Box, {
7073
- className: 'bg-white p-5'
7467
+ var TextbookViewDetail = function TextbookViewDetail(props) {
7468
+ var _textbook$chapters;
7469
+ var _useTextbookDetail = useTextbookDetail(props),
7470
+ id = _useTextbookDetail.id,
7471
+ t = _useTextbookDetail.t,
7472
+ textbook = _useTextbookDetail.textbook,
7473
+ textbookSubject = _useTextbookDetail.textbookSubject,
7474
+ isReadonly = _useTextbookDetail.isReadonly,
7475
+ isNotFound = _useTextbookDetail.isNotFound,
7476
+ parentChapter = _useTextbookDetail.parentChapter,
7477
+ textbookId = _useTextbookDetail.textbookId,
7478
+ selectedChapter = _useTextbookDetail.selectedChapter,
7479
+ articlesSelected = _useTextbookDetail.articlesSelected,
7480
+ selectedDeleteItem = _useTextbookDetail.selectedDeleteItem,
7481
+ isEditedTitle = _useTextbookDetail.isEditedTitle,
7482
+ isOpenDialog = _useTextbookDetail.isOpenDialog,
7483
+ examRequest = _useTextbookDetail.examRequest,
7484
+ handleChangeExamRequest = _useTextbookDetail.handleChangeExamRequest,
7485
+ handleSaveExam = _useTextbookDetail.handleSaveExam,
7486
+ handleCloseDialog = _useTextbookDetail.handleCloseDialog,
7487
+ handleCreateExam = _useTextbookDetail.handleCreateExam,
7488
+ handleCheckArticle = _useTextbookDetail.handleCheckArticle,
7489
+ handleChangeTextbookTitle = _useTextbookDetail.handleChangeTextbookTitle,
7490
+ handleOpenCreateExamDialog = _useTextbookDetail.handleOpenCreateExamDialog,
7491
+ handleChangeTextbookSubject = _useTextbookDetail.handleChangeTextbookSubject,
7492
+ handleGoToTextbookList = _useTextbookDetail.handleGoToTextbookList,
7493
+ handleCreateOrUpdateTextbook = _useTextbookDetail.handleCreateOrUpdateTextbook,
7494
+ handleCloseChapterNameDialog = _useTextbookDetail.handleCloseChapterNameDialog,
7495
+ handleCreateChapter = _useTextbookDetail.handleCreateChapter,
7496
+ handleAddChapterToTextbook = _useTextbookDetail.handleAddChapterToTextbook,
7497
+ handleAddChapterToParentSubchapter = _useTextbookDetail.handleAddChapterToParentSubchapter,
7498
+ handleChangeChapterName = _useTextbookDetail.handleChangeChapterName,
7499
+ handleChangeChapterPageFrom = _useTextbookDetail.handleChangeChapterPageFrom,
7500
+ handleChangeChapterPageTo = _useTextbookDetail.handleChangeChapterPageTo,
7501
+ handleAddArticleToChapter = _useTextbookDetail.handleAddArticleToChapter,
7502
+ handleUpdateArticleQuestionCountFromChapter = _useTextbookDetail.handleUpdateArticleQuestionCountFromChapter,
7503
+ handleUpdateArticleCategory = _useTextbookDetail.handleUpdateArticleCategory,
7504
+ handleUpdateArticleAnswerCount = _useTextbookDetail.handleUpdateArticleAnswerCount,
7505
+ handleUpdateArticleQuestion = _useTextbookDetail.handleUpdateArticleQuestion,
7506
+ handleCloseArticleDialog = _useTextbookDetail.handleCloseArticleDialog,
7507
+ handleOpenAddArticleDialog = _useTextbookDetail.handleOpenAddArticleDialog,
7508
+ handleOpenRemoveArticleConfirmDialog = _useTextbookDetail.handleOpenRemoveArticleConfirmDialog,
7509
+ handleCloseConfirmDeleteDialog = _useTextbookDetail.handleCloseConfirmDeleteDialog,
7510
+ handleRemoveSelectedItem = _useTextbookDetail.handleRemoveSelectedItem,
7511
+ handleOpenRemoveChapterConfirmDialog = _useTextbookDetail.handleOpenRemoveChapterConfirmDialog;
7512
+ var _useCategorySelect = useCategorySelect({
7513
+ subjectId: id ? textbookSubject === null || textbookSubject === void 0 ? void 0 : textbookSubject.value : undefined
7514
+ }),
7515
+ categoryOptions = _useCategorySelect.categoryOptions;
7516
+ if (isNotFound) return React__default.createElement(NotFound, null);
7517
+ return React__default.createElement(material.Container, {
7518
+ maxWidth: "xl",
7519
+ className: "bg-white py-5 p-4 rounded-4 h-100 d-flex flex-column"
7074
7520
  }, React__default.createElement(material.Stack, {
7075
7521
  direction: "row",
7076
7522
  alignItems: "center",
7077
7523
  justifyContent: "space-between",
7078
7524
  mb: 2
7079
7525
  }, React__default.createElement(material.Typography, {
7080
- variant: 'h4'
7081
- }, title)), React__default.createElement(material.Box, null, children));
7082
- };
7083
-
7084
- var SortIcon = function SortIcon(_ref) {
7085
- var isAscending = _ref.isAscending,
7086
- onClick = _ref.onClick;
7087
- return React__default.createElement("div", {
7088
- className: "d-flex flex-column " + styleGlobal["sort-icons"],
7089
- onClick: onClick
7090
- }, React__default.createElement(fa.FaSortUp, {
7091
- className: isAscending === true ? styleGlobal["active"] : ""
7092
- }), React__default.createElement(fa.FaSortDown, {
7093
- className: isAscending === false ? styleGlobal["active"] : ""
7094
- }));
7095
- };
7096
-
7097
- var TableHeader = function TableHeader(_ref) {
7098
- var headerTemplates = _ref.headerTemplates,
7099
- filter = _ref.filter,
7100
- onSort = _ref.onSort;
7101
- var _useTranslation = reactI18next.useTranslation(),
7102
- t = _useTranslation.t;
7103
- return React__default.createElement(material.TableHead, null, React__default.createElement(material.TableRow, null, headerTemplates.map(function (i, index$1) {
7104
- return React__default.createElement(material.TableCell, {
7105
- key: index$1,
7106
- className: "" + (!!i.sortKey && "pointer"),
7107
- onClick: !!i.sortKey ? function () {
7108
- return onSort === null || onSort === void 0 ? void 0 : onSort(i.sortKey);
7109
- } : undefined
7110
- }, React__default.createElement("div", {
7111
- className: "d-flex justify-content-between align-items-center text-nowrap"
7112
- }, t(i.title), !!i.sortKey && React__default.createElement(SortIcon, {
7113
- isAscending: filter.sortColumnName !== i.sortKey ? undefined : filter.sortColumnDirection === OrderType.ASC
7114
- })));
7115
- })));
7116
- };
7117
-
7118
- var SearchInput = function SearchInput(_ref) {
7119
- var textSearchRef = _ref.textSearchRef,
7120
- _ref$placeholder = _ref.placeholder,
7121
- placeholder = _ref$placeholder === void 0 ? "Search for..." : _ref$placeholder,
7122
- onChange = _ref.onChange,
7123
- _ref$fit = _ref.fit,
7124
- fit = _ref$fit === void 0 ? true : _ref$fit;
7125
- return React__default.createElement(material.Paper, {
7126
- component: "div",
7127
- className: "bg-light w-100 " + (fit && "h-100"),
7526
+ variant: "h3"
7527
+ }, t(id ? isReadonly ? "view_textbook" : "update_textbook" : "create_textbook"))), React__default.createElement(material.Grid, {
7528
+ container: true,
7529
+ spacing: 3
7530
+ }, React__default.createElement(material.Grid, {
7531
+ item: true,
7532
+ xs: 4,
7533
+ className: "d-flex align-items-center"
7534
+ }, React__default.createElement(material.Table, null, React__default.createElement(material.TableBody, null, React__default.createElement(material.TableRow, {
7128
7535
  sx: {
7129
- p: "2px 4px",
7130
- display: "flex",
7131
- alignItems: "center",
7132
- width: 400,
7133
- transition: "border 0.2s ease",
7134
- outline: "1px solid transparent",
7135
- ":focus-within": {
7136
- outlineColor: function outlineColor(theme) {
7137
- return theme.palette.primary.main;
7138
- }
7536
+ "& td": {
7537
+ border: 0
7139
7538
  }
7140
7539
  }
7141
- }, React__default.createElement(material.Box, {
7540
+ }, React__default.createElement(material.TableCell, {
7541
+ className: "p-2 pe-0",
7142
7542
  sx: {
7143
- p: "10px"
7144
- },
7145
- "aria-label": "search"
7146
- }, React__default.createElement(io5.IoSearch, {
7147
- size: 24,
7148
- className: "pb-1"
7149
- })), React__default.createElement(material.InputBase, {
7150
- id: "searchText",
7151
- className: "" + (fit && "h-100"),
7543
+ width: "15%"
7544
+ }
7545
+ }, React__default.createElement(material.InputLabel, null, React__default.createElement("span", {
7546
+ className: "fw-bold"
7547
+ }, t("name")), React__default.createElement("span", {
7548
+ className: "text-danger"
7549
+ }, "*"))), React__default.createElement(material.TableCell, {
7152
7550
  sx: {
7153
- ml: 1,
7154
- flex: 1,
7155
- lineHeight: 1
7156
- },
7157
- placeholder: placeholder,
7158
- ref: textSearchRef,
7159
- onChange: onChange
7160
- }));
7161
- };
7162
-
7163
- var TextbookList = function TextbookList(props) {
7164
- var _useTranslation = reactI18next.useTranslation(),
7165
- t = _useTranslation.t;
7166
- var _useTextbookList = useTextbookList(props),
7167
- filter = _useTextbookList.filter,
7168
- textbooks = _useTextbookList.textbooks,
7169
- totalPages = _useTextbookList.totalPages,
7170
- textSearchRef = _useTextbookList.textSearchRef,
7171
- selectedTextbook = _useTextbookList.selectedTextbook,
7172
- handleChangeSearchText = _useTextbookList.handleChangeSearchText,
7173
- handleSort = _useTextbookList.handleSort,
7174
- handleChangePage = _useTextbookList.handleChangePage,
7175
- calcOrderNumber = _useTextbookList.calcOrderNumber,
7176
- handleViewTextbook = _useTextbookList.handleViewTextbook,
7177
- handleUpdateTextbook = _useTextbookList.handleUpdateTextbook,
7178
- handleCreateTextbook = _useTextbookList.handleCreateTextbook,
7179
- toggleConfirmDialog = _useTextbookList.toggleConfirmDialog,
7180
- handleDeleteTextbook = _useTextbookList.handleDeleteTextbook,
7181
- handleSelectDeleteTextbook = _useTextbookList.handleSelectDeleteTextbook;
7182
- return React__default.createElement(LayoutList, {
7183
- title: t(TEXTBOOK_PAGE_TITLE)
7184
- }, React__default.createElement(material.Grid, {
7185
- container: true
7186
- }, React__default.createElement(material.Grid, {
7551
+ width: 0,
7552
+ px: 1
7553
+ }
7554
+ }, ":"), React__default.createElement(material.TableCell, {
7555
+ className: "p-2"
7556
+ }, React__default.createElement(InputText, {
7557
+ className: "w-100",
7558
+ value: textbook === null || textbook === void 0 ? void 0 : textbook.name,
7559
+ placeholder: t("enter_textbook_title"),
7560
+ onChange: handleChangeTextbookTitle,
7561
+ disabled: isReadonly
7562
+ }))), React__default.createElement(material.TableRow, {
7563
+ sx: {
7564
+ "& td": {
7565
+ border: 0
7566
+ }
7567
+ }
7568
+ }, React__default.createElement(material.TableCell, {
7569
+ className: "p-2 pe-0"
7570
+ }, React__default.createElement(material.InputLabel, null, React__default.createElement("span", {
7571
+ className: "fw-bold"
7572
+ }, t("subject")), React__default.createElement("span", {
7573
+ className: "text-danger"
7574
+ }, "*"))), React__default.createElement(material.TableCell, {
7575
+ sx: {
7576
+ width: 0,
7577
+ px: 1
7578
+ }
7579
+ }, ":"), React__default.createElement(material.TableCell, {
7580
+ className: "p-2"
7581
+ }, React__default.createElement(SubjectSelector, {
7582
+ value: textbookSubject,
7583
+ onChange: handleChangeTextbookSubject,
7584
+ isDisabled: isReadonly || !!id
7585
+ })))))), React__default.createElement(material.Grid, {
7187
7586
  item: true,
7188
- xs: 6
7189
- }, React__default.createElement(SearchInput, {
7190
- textSearchRef: textSearchRef,
7191
- onChange: handleChangeSearchText,
7192
- placeholder: t(TEXT_BOOK_SEARCH_PLACEHOLDER)
7193
- })), React__default.createElement(material.Grid, {
7587
+ xs: 8,
7588
+ className: "d-flex justify-content-end"
7589
+ }, React__default.createElement("div", null, React__default.createElement(TextbookActionButtons, {
7590
+ isReadonly: isReadonly,
7591
+ textbook: textbook,
7592
+ onBack: handleGoToTextbookList,
7593
+ onSave: handleCreateOrUpdateTextbook,
7594
+ hideSave: !isEditedTitle && !!id && !isReadonly || textbook.isCreatedByAdmin
7595
+ }))), React__default.createElement(material.Grid, {
7194
7596
  item: true,
7195
- xs: 6
7196
- }, React__default.createElement(material.Stack, {
7197
- alignItems: "end"
7597
+ xs: 12,
7598
+ gap: "8px",
7599
+ className: "d-flex justify-content-end"
7198
7600
  }, React__default.createElement(material.Button, {
7601
+ variant: "outlined",
7602
+ sx: {
7603
+ borderColor: "#5458D5",
7604
+ color: "#5458D5"
7605
+ },
7606
+ onClick: function onClick() {
7607
+ return handleOpenCreateExamDialog();
7608
+ },
7609
+ disabled: isReadonly || !articlesSelected.length,
7199
7610
  startIcon: React__default.createElement(fa.FaPlus, {
7200
7611
  size: 12
7201
- }),
7612
+ })
7613
+ }, React__default.createElement(material.Typography, null, t("create_new_exam"))), !!id && React__default.createElement(material.Button, {
7614
+ className: "mx-1",
7202
7615
  variant: "contained",
7203
7616
  color: "primary",
7204
- onClick: handleCreateTextbook
7205
- }, t("create_textbook")))), React__default.createElement(material.Grid, {
7206
- item: true,
7207
- xs: 12,
7208
- className: "mt-3"
7209
- }, React__default.createElement(material.Table, null, React__default.createElement(TableHeader, {
7210
- headerTemplates: TEXTBOOK_HEADERS,
7211
- filter: filter,
7212
- onSort: handleSort
7213
- }), React__default.createElement(material.TableBody, null, textbooks.map(function (i, index) {
7214
- return React__default.createElement(material.TableRow, {
7215
- key: i.id
7216
- }, React__default.createElement(material.TableCell, null, calcOrderNumber(index)), React__default.createElement(material.TableCell, null, i.name), React__default.createElement(material.TableCell, null, i.subject.name), React__default.createElement(material.TableCell, null, utcToLocalTime(i.createdAt, t("date_format"))), React__default.createElement(material.TableCell, null, i.totalChapters), React__default.createElement(material.TableCell, null, React__default.createElement(material.Stack, {
7217
- direction: "row",
7218
- spacing: 1,
7219
- alignItems: "center"
7220
- }, !i.isCreatedByAdmin && React__default.createElement(material.IconButton, {
7221
- color: "default",
7222
- className: "bg-warning text-white",
7223
- onClick: function onClick() {
7224
- return handleUpdateTextbook(i.id);
7225
- }
7226
- }, React__default.createElement(fa6.FaPencil, {
7227
- size: 12
7228
- })), React__default.createElement(material.IconButton, {
7229
- color: "default",
7230
- className: "bg-primary text-white",
7231
- onClick: function onClick() {
7232
- return handleViewTextbook(i.id);
7233
- }
7234
- }, React__default.createElement(fa.FaEye, {
7235
- size: 12
7236
- })), !i.isCreatedByAdmin && React__default.createElement(material.IconButton, {
7237
- color: "default",
7238
- className: "bg-danger text-white",
7239
- onClick: function onClick() {
7240
- return handleSelectDeleteTextbook(i);
7241
- }
7242
- }, React__default.createElement(fa.FaTrash, {
7617
+ startIcon: React__default.createElement(fa.FaPlus, {
7243
7618
  size: 12
7244
- })))));
7245
- }), !textbooks.length && React__default.createElement(EmptyRow, null))), React__default.createElement("div", {
7246
- className: "d-flex justify-content-end mt-3"
7247
- }, !!totalPages && React__default.createElement(material.Pagination, {
7248
- count: totalPages,
7249
- page: filter.currentPage,
7250
- onChange: handleChangePage
7251
- })))), React__default.createElement(ConfirmDialog, {
7252
- open: !!(selectedTextbook !== null && selectedTextbook !== void 0 && selectedTextbook.id),
7253
- toggle: toggleConfirmDialog,
7254
- text: "" + t("are_you_sure_you_want_to_delete_the_textbook"),
7255
- onConfirm: handleDeleteTextbook,
7256
- confirmText: selectedTextbook === null || selectedTextbook === void 0 ? void 0 : selectedTextbook.name,
7619
+ }),
7620
+ onClick: handleAddChapterToTextbook,
7621
+ disabled: isReadonly
7622
+ }, t("add_chapter"))), React__default.createElement(material.Grid, {
7623
+ item: true,
7624
+ xs: 12
7625
+ }, React__default.createElement(material.Stack, {
7626
+ spacing: 3
7627
+ }, !!(textbook !== null && textbook !== void 0 && textbook.subject) && (textbook === null || textbook === void 0 ? void 0 : (_textbook$chapters = textbook.chapters) === null || _textbook$chapters === void 0 ? void 0 : _textbook$chapters.map(function (chapter) {
7628
+ return React__default.createElement(ChapterBox, {
7629
+ key: chapter.id,
7630
+ subject: textbook.subject,
7631
+ data: chapter,
7632
+ categoryOptions: categoryOptions || [],
7633
+ onClickAddSubchapter: handleAddChapterToParentSubchapter,
7634
+ onChangeName: handleChangeChapterName,
7635
+ onChangePageFrom: handleChangeChapterPageFrom,
7636
+ onChangePageTo: handleChangeChapterPageTo,
7637
+ handleCheckArticle: handleCheckArticle,
7638
+ onAddArticle: handleOpenAddArticleDialog,
7639
+ onRemoveArticle: handleOpenRemoveArticleConfirmDialog,
7640
+ onUpdateArticleQuestionCount: handleUpdateArticleQuestionCountFromChapter,
7641
+ onUpdateArticleCategory: handleUpdateArticleCategory,
7642
+ onUpdateArticleQuestionAnswerCount: handleUpdateArticleAnswerCount,
7643
+ onUpdateArticleQuestion: handleUpdateArticleQuestion,
7644
+ onRemoveChapter: handleOpenRemoveChapterConfirmDialog,
7645
+ isReadonly: isReadonly
7646
+ });
7647
+ }))))), React__default.createElement(ChapterNameDialog, {
7648
+ open: !!(parentChapter !== null && parentChapter !== void 0 && parentChapter.id) || !!textbookId,
7649
+ chapter: parentChapter,
7650
+ onClose: handleCloseChapterNameDialog,
7651
+ onSubmitForm: handleCreateChapter
7652
+ }), React__default.createElement(CreateExamDrawer, {
7653
+ isOpen: isOpenDialog,
7654
+ onClose: handleCloseDialog,
7655
+ onSubmit: handleCreateExam,
7656
+ handleSaveExam: handleSaveExam,
7657
+ exam: examRequest,
7658
+ onChangeExam: handleChangeExamRequest
7659
+ }), React__default.createElement(ArticleDialog, {
7660
+ open: !!selectedChapter,
7661
+ chapter: selectedChapter,
7662
+ categoryOptions: categoryOptions || [],
7663
+ onClose: handleCloseArticleDialog,
7664
+ onSubmitForm: handleAddArticleToChapter
7665
+ }), selectedDeleteItem && React__default.createElement(ConfirmDialog, {
7666
+ open: true,
7667
+ toggle: handleCloseConfirmDeleteDialog,
7668
+ text: selectedDeleteItem.confirmText,
7669
+ confirmText: selectedDeleteItem.name,
7670
+ onConfirm: handleRemoveSelectedItem,
7257
7671
  isDelete: true
7258
7672
  }));
7259
7673
  };
7260
7674
 
7261
-
7262
-
7263
- var index$2 = {
7264
- __proto__: null,
7265
- TextbookList: TextbookList,
7266
- TextbookDetail: TextbookViewDetail
7267
- };
7268
-
7269
- var _excluded$4 = ["defaultValue", "options", "isDisabled", "scrollBottom", "value", "isMulti"];
7270
- var CustomCreatable = function CustomCreatable(_ref) {
7271
- var options = _ref.options,
7272
- isDisabled = _ref.isDisabled,
7273
- scrollBottom = _ref.scrollBottom,
7274
- value = _ref.value,
7275
- isMulti = _ref.isMulti,
7276
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
7277
- var initialValues = Array.isArray(value) ? options.filter(function (i) {
7278
- return value.includes(i.value);
7279
- }) : isMulti ? options.filter(function (i) {
7280
- return i.value == value;
7281
- }) : options.find(function (i) {
7282
- return i.value == value;
7675
+ var useAutoAcademyDomain = function useAutoAcademyDomain(logout, history, superUrls, homeUrl, homeAcademyUrl) {
7676
+ var searchParams = new URLSearchParams(window.location.search);
7677
+ var user = reactRedux.useSelector(function (state) {
7678
+ var _state$common;
7679
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
7283
7680
  });
7284
- return React__default.createElement(CreatableSelect, Object.assign({
7285
- isClearable: true,
7286
- isDisabled: isDisabled,
7287
- options: options,
7288
- value: initialValues,
7289
- menuPlacement: scrollBottom ? "top" : "auto",
7290
- isMulti: isMulti
7291
- }, rest));
7292
- };
7293
-
7294
- var _excluded$5 = ["isDefault", "defaultValue", "options", "isDisabled", "scrollBottom", "value", "isMulti"];
7295
- var CustomAsyncSelect = function CustomAsyncSelect(_ref) {
7296
- var isDefault = _ref.isDefault,
7297
- options = _ref.options,
7298
- isDisabled = _ref.isDisabled,
7299
- scrollBottom = _ref.scrollBottom,
7300
- value = _ref.value,
7301
- isMulti = _ref.isMulti,
7302
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
7303
- var initialValues = Array.isArray(value) ? options.filter(function (i) {
7304
- return value.includes(i.value);
7305
- }) : isMulti ? options.filter(function (i) {
7306
- return i.value == value;
7307
- }) : options.find(function (i) {
7308
- return i.value == value;
7309
- });
7310
- return React__default.createElement(Select__default, Object.assign({
7311
- isDisabled: isDisabled,
7312
- options: options,
7313
- value: !isDefault ? initialValues : undefined,
7314
- defaultValue: isDefault ? initialValues : undefined,
7315
- menuPlacement: scrollBottom ? "top" : "auto",
7316
- isMulti: isMulti
7317
- }, rest));
7318
- };
7319
-
7320
- var DURATION_OPTIONS = Array.from({
7321
- length: 120
7322
- }, function (_, i) {
7323
- return i + 1;
7324
- });
7325
- var DEFAULT_ANSWER_COUNT = 5;
7326
-
7327
- var useExamDetailView = function useExamDetailView(props) {
7328
- var exam = props.exam,
7329
- selectedSubject = props.selectedSubject,
7330
- onChangeExam = props.onChangeExam;
7331
- var _useTranslation = reactI18next.useTranslation(),
7332
- t = _useTranslation.t;
7333
- var handleChangeQuestionCount = function handleChangeQuestionCount(article, questionCount, answerCount) {
7334
- if (!exam) return;
7335
- var examQuestions = exam.questions;
7336
- var questions = examQuestions.filter(function (i) {
7337
- return i.article === +article;
7338
- });
7339
- var prevQuestions = examQuestions.filter(function (i) {
7340
- return i.article < +article;
7341
- });
7342
- var nextQuestions = examQuestions.filter(function (i) {
7343
- return i.article > +article;
7344
- });
7345
- var lastOrder = questions[questions.length - 1].questionOrder;
7346
- if (questions.length === questionCount) return;
7347
- if (questions.length < questionCount) {
7348
- var additionalQuestions = Array.from({
7349
- length: questionCount - questions.length
7350
- }).map(function (_, index) {
7351
- var _questions$;
7352
- return {
7353
- article: +article,
7354
- correctAnswers: [1],
7355
- numberOfAnswers: answerCount,
7356
- categoryId: (_questions$ = questions[0]) === null || _questions$ === void 0 ? void 0 : _questions$.categoryId,
7357
- score: DEFAULT_SCORE,
7358
- questionOrder: lastOrder + index + 1
7359
- };
7360
- });
7361
- var newQuestions = [].concat(prevQuestions, questions, additionalQuestions, nextQuestions.map(function (i) {
7362
- return _extends({}, i, {
7363
- questionOrder: i.questionOrder + questionCount - questions.length
7681
+ var initialAcademySearchParam = function initialAcademySearchParam() {
7682
+ var paramAcademyDomain = searchParams.get("domain");
7683
+ var domain = getAcademyDomain();
7684
+ var pathname = window.location.pathname.toLowerCase();
7685
+ if (!user) return;
7686
+ var academyDomain = user.academyDomain;
7687
+ if (!academyDomain) {
7688
+ if (!superUrls.some(function (i) {
7689
+ return pathname.startsWith(i);
7690
+ })) {
7691
+ pushTo({
7692
+ pathname: homeUrl,
7693
+ search: ""
7364
7694
  });
7365
- }));
7366
- onChangeExam(_extends({}, exam, {
7367
- questions: [].concat(newQuestions)
7368
- }));
7695
+ }
7696
+ if (domain) {
7697
+ searchParams.append("domain", domain);
7698
+ pushTo({
7699
+ pathname: homeUrl,
7700
+ search: ""
7701
+ });
7702
+ }
7369
7703
  } else {
7370
- var remainQuestions = questions.slice(0, questionCount);
7371
- var _newQuestions = [].concat(prevQuestions, remainQuestions, nextQuestions.map(function (i) {
7372
- return _extends({}, i, {
7373
- questionOrder: i.questionOrder - questions.length + questionCount
7704
+ if (superUrls.some(function (i) {
7705
+ return pathname.startsWith(i);
7706
+ })) {
7707
+ pushTo({
7708
+ pathname: homeAcademyUrl,
7709
+ search: ""
7374
7710
  });
7375
- }));
7376
- onChangeExam(_extends({}, exam, {
7377
- questions: [].concat(_newQuestions)
7378
- }));
7711
+ }
7712
+ if (paramAcademyDomain && academyDomain.trim().toLocaleLowerCase() != (paramAcademyDomain === null || paramAcademyDomain === void 0 ? void 0 : paramAcademyDomain.trim().toLocaleLowerCase())) {
7713
+ logout();
7714
+ }
7715
+ if (!paramAcademyDomain && academyDomain) {
7716
+ searchParams.append("domain", academyDomain);
7717
+ pushTo(_extends({}, window.location, {
7718
+ search: searchParams.toString()
7719
+ }));
7720
+ }
7379
7721
  }
7380
7722
  };
7381
- var handleChangeCategory = function handleChangeCategory(article, categoryId) {
7382
- if (!exam) return;
7383
- var examQuestions = exam.questions;
7384
- var questions = examQuestions.filter(function (i) {
7385
- return i.article === +article;
7386
- });
7387
- var otherQuestions = examQuestions.filter(function (i) {
7388
- return i.article !== +article;
7389
- });
7390
- onChangeExam(_extends({}, exam, {
7391
- questions: [].concat(otherQuestions, questions.map(function (q) {
7392
- return _extends({}, q, {
7393
- categoryId: categoryId
7394
- });
7395
- }))
7396
- }));
7723
+ var pushTo = function pushTo(data) {
7724
+ if (history.push) history.push(data);else history(data);
7397
7725
  };
7398
- var handleDeleteArticle = function handleDeleteArticle(article) {
7399
- if (!exam) return;
7400
- var removedQuestions = exam.questions.filter(function (i) {
7401
- return i.article === +article;
7402
- }).map(function (i) {
7403
- return i.questionOrder;
7404
- });
7405
- var max = Math.max.apply(Math, removedQuestions);
7406
- var examQuestions = exam.questions.filter(function (i) {
7407
- return i.article !== +article;
7408
- }).map(function (i) {
7409
- return _extends({}, i, {
7410
- article: i.article > article ? i.article - 1 : i.article,
7411
- questionOrder: i.questionOrder > max ? i.questionOrder - removedQuestions.length : i.questionOrder
7726
+ React.useEffect(function () {
7727
+ initialAcademySearchParam();
7728
+ }, [window.location.pathname, user === null || user === void 0 ? void 0 : user.academyDomain]);
7729
+ };
7730
+
7731
+ var useList = function useList(fetchData, defaultQuery) {
7732
+ var dispatch = reactRedux.useDispatch();
7733
+ var _useState = React.useState(defaultQuery),
7734
+ filter = _useState[0],
7735
+ setFilter = _useState[1];
7736
+ var _useState2 = React.useState(0),
7737
+ totalPages = _useState2[0],
7738
+ setTotalPages = _useState2[1];
7739
+ var _useState3 = React.useState([]),
7740
+ data = _useState3[0],
7741
+ setData = _useState3[1];
7742
+ var _useState4 = React.useState(),
7743
+ selectedItem = _useState4[0],
7744
+ setSelectedItem = _useState4[1];
7745
+ var textSearchRef = React.useRef(null);
7746
+ var isFirstLoadRef = React.useRef(true);
7747
+ var handleChangeSelectedItem = function handleChangeSelectedItem(item) {
7748
+ setSelectedItem(item);
7749
+ };
7750
+ var getData = function getData(isLoading) {
7751
+ if (isLoading === void 0) {
7752
+ isLoading = false;
7753
+ }
7754
+ try {
7755
+ var _temp2 = function _temp2() {
7756
+ isLoading && dispatch(setLoading(false));
7757
+ };
7758
+ if (isFirstLoadRef.current) isFirstLoadRef.current = false;
7759
+ isLoading && dispatch(setLoading(true));
7760
+ var _temp = _catch(function () {
7761
+ return Promise.resolve(fetchData(filter)).then(function (res) {
7762
+ var _res$data = res.data,
7763
+ _res$data$items = _res$data.items,
7764
+ items = _res$data$items === void 0 ? [] : _res$data$items,
7765
+ _res$data$totalPages = _res$data.totalPages,
7766
+ totalPages = _res$data$totalPages === void 0 ? 0 : _res$data$totalPages;
7767
+ setTotalPages(totalPages);
7768
+ setData(items);
7769
+ });
7770
+ }, function (error) {
7771
+ var _error$response, _error$response$data;
7772
+ setTotalPages(0);
7773
+ setData([]);
7774
+ reactToastify.toast.error((error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.title) || "Get data failed");
7412
7775
  });
7776
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
7777
+ } catch (e) {
7778
+ return Promise.reject(e);
7779
+ }
7780
+ };
7781
+ var handleSort = function handleSort(sortColumnName) {
7782
+ var sortColumnDirection = OrderType.ASC;
7783
+ console.log({
7784
+ sortColumnName: typeof sortColumnName,
7785
+ filter: typeof filter.sortColumnName
7413
7786
  });
7414
- onChangeExam(_extends({}, exam, {
7415
- questions: [].concat(examQuestions)
7787
+ if (filter.sortColumnName == sortColumnName && filter.sortColumnDirection === OrderType.ASC) sortColumnDirection = OrderType.DESC;
7788
+ setFilter(_extends({}, filter, {
7789
+ sortColumnName: sortColumnName,
7790
+ sortColumnDirection: sortColumnDirection,
7791
+ currentPage: 1
7416
7792
  }));
7417
7793
  };
7418
- var handleChangeAnswerCount = function handleChangeAnswerCount(article, newAnswerCount, answerCount) {
7419
- if (!exam) return;
7420
- if (newAnswerCount === answerCount) return;
7421
- var examQuestions = exam.questions;
7422
- var questions = examQuestions.filter(function (i) {
7423
- return i.article === +article;
7424
- });
7425
- var otherQuestions = examQuestions.filter(function (i) {
7426
- return i.article !== +article;
7427
- });
7428
- if (answerCount < newAnswerCount) {
7429
- onChangeExam(_extends({}, exam, {
7430
- questions: [].concat(otherQuestions, questions.map(function (q) {
7431
- return _extends({}, q, {
7432
- numberOfAnswers: newAnswerCount
7433
- });
7434
- }))
7435
- }));
7436
- } else {
7437
- onChangeExam(_extends({}, exam, {
7438
- questions: [].concat(otherQuestions, questions.map(function (q) {
7439
- var _q$correctAnswers;
7440
- return _extends({}, q, {
7441
- numberOfAnswers: newAnswerCount,
7442
- correctAnswers: (_q$correctAnswers = q.correctAnswers) === null || _q$correctAnswers === void 0 ? void 0 : _q$correctAnswers.filter(function (i) {
7443
- return i <= newAnswerCount;
7444
- })
7445
- });
7446
- }))
7447
- }));
7448
- }
7794
+ var handleChangeSearchText = function handleChangeSearchText(e) {
7795
+ if (!textSearchRef.current) return;
7796
+ textSearchRef.current.value = e.target.value.trim();
7797
+ debounceSearch();
7449
7798
  };
7450
- var handleChangeCorrectAnswers = function handleChangeCorrectAnswers(article, index, answer) {
7451
- if (!exam) return;
7452
- var examQuestions = exam.questions;
7453
- var questions = examQuestions.filter(function (i) {
7454
- return i.article === +article;
7455
- });
7456
- var otherQuestions = examQuestions.filter(function (i) {
7457
- return i.article !== +article;
7458
- });
7459
- var selectedQuestion = questions[index];
7460
- onChangeExam(_extends({}, exam, {
7461
- questions: [].concat(otherQuestions, questions.slice(0, index), [_extends({}, selectedQuestion, {
7462
- correctAnswers: [answer]
7463
- })], questions.slice(index + 1))
7799
+ var handleChangePage = function handleChangePage(_, page) {
7800
+ setFilter(_extends({}, filter, {
7801
+ currentPage: page
7464
7802
  }));
7465
7803
  };
7466
- var handleChangeScoreAnswer = function handleChangeScoreAnswer(article, index, score) {
7467
- if (!exam) return;
7468
- var examQuestions = exam.questions;
7469
- var questions = examQuestions.filter(function (i) {
7470
- return i.article === +article;
7804
+ var calcOrderNumber = function calcOrderNumber(index) {
7805
+ var _filter$currentPage, _filter$pageSize;
7806
+ return (((_filter$currentPage = filter.currentPage) != null ? _filter$currentPage : 0) - 1) * ((_filter$pageSize = filter.pageSize) != null ? _filter$pageSize : 0) + index + 1;
7807
+ };
7808
+ var debounceSearch = _.debounce(function () {
7809
+ var _textSearchRef$curren;
7810
+ setFilter(_extends({}, filter, {
7811
+ currentPage: 1,
7812
+ textSearch: (_textSearchRef$curren = textSearchRef.current) === null || _textSearchRef$curren === void 0 ? void 0 : _textSearchRef$curren.value
7813
+ }));
7814
+ }, 500);
7815
+ React.useEffect(function () {
7816
+ getData(isFirstLoadRef.current);
7817
+ }, [JSON.stringify(filter)]);
7818
+ return {
7819
+ filter: filter,
7820
+ textSearchRef: textSearchRef,
7821
+ totalPages: totalPages,
7822
+ data: data,
7823
+ selectedItem: selectedItem,
7824
+ handleSort: handleSort,
7825
+ handleChangeSearchText: handleChangeSearchText,
7826
+ handleChangePage: handleChangePage,
7827
+ calcOrderNumber: calcOrderNumber,
7828
+ handleChangeSelectedItem: handleChangeSelectedItem,
7829
+ getData: getData
7830
+ };
7831
+ };
7832
+
7833
+
7834
+
7835
+ var index$1 = {
7836
+ __proto__: null,
7837
+ useLogin: useLogin,
7838
+ useAutoAcademyDomain: useAutoAcademyDomain,
7839
+ useList: useList
7840
+ };
7841
+
7842
+ var useTextbookList = function useTextbookList(props) {
7843
+ var role = props.role,
7844
+ navigate = props.navigate;
7845
+ var _useList = useList(function (search) {
7846
+ return getTextbookListApi(search, role);
7847
+ }, TextbookDefaultQuery),
7848
+ filter = _useList.filter,
7849
+ textSearchRef = _useList.textSearchRef,
7850
+ totalPages = _useList.totalPages,
7851
+ textbooks = _useList.data,
7852
+ selectedTextbook = _useList.selectedItem,
7853
+ handleSort = _useList.handleSort,
7854
+ handleChangeSearchText = _useList.handleChangeSearchText,
7855
+ handleChangePage = _useList.handleChangePage,
7856
+ calcOrderNumber = _useList.calcOrderNumber,
7857
+ handleChangeSelectedItem = _useList.handleChangeSelectedItem,
7858
+ getData = _useList.getData;
7859
+ var textbookUrl = role === exports.Role.Teacher ? TEXTBOOK_URL$1 : ADMIN_TEXTBOOK_URL;
7860
+ var dispatch = reactRedux.useDispatch();
7861
+ var handleViewTextbook = function handleViewTextbook(id) {
7862
+ navigate(textbookUrl + "/" + id + "?readonly=true", {
7863
+ replace: true
7471
7864
  });
7472
- var otherQuestions = examQuestions.filter(function (i) {
7473
- return i.article !== +article;
7865
+ };
7866
+ var handleUpdateTextbook = function handleUpdateTextbook(id) {
7867
+ navigate(textbookUrl + "/" + id, {
7868
+ replace: true
7474
7869
  });
7475
- var selectedQuestion = questions[index];
7476
- if (score === selectedQuestion.score) return;
7477
- onChangeExam(_extends({}, exam, {
7478
- questions: [].concat(otherQuestions, questions.slice(0, index), [_extends({}, selectedQuestion, {
7479
- score: score
7480
- })], questions.slice(index + 1))
7481
- }));
7482
7870
  };
7483
- var handleChangeDuration = function handleChangeDuration(value) {
7484
- if (!exam) return;
7485
- onChangeExam(_extends({}, exam, {
7486
- duration: value === null || value === void 0 ? void 0 : value.value
7487
- }));
7871
+ var handleCreateTextbook = function handleCreateTextbook() {
7872
+ navigate(textbookUrl + "/create", {
7873
+ replace: true
7874
+ });
7488
7875
  };
7489
- var handleChangeTitle = function handleChangeTitle(e) {
7490
- if (!exam) return;
7491
- onChangeExam(_extends({}, exam, {
7492
- title: e.target.value
7493
- }));
7876
+ var toggleConfirmDialog = function toggleConfirmDialog() {
7877
+ handleChangeSelectedItem(undefined);
7494
7878
  };
7495
- var handleAddArticle = function handleAddArticle() {
7496
- var _$maxBy, _$maxBy2;
7497
- if (!exam) return;
7498
- var maxArticle = ((_$maxBy = _.maxBy(exam.questions, "article")) === null || _$maxBy === void 0 ? void 0 : _$maxBy.article) || 0;
7499
- var maxOrder = ((_$maxBy2 = _.maxBy(exam.questions, "questionOrder")) === null || _$maxBy2 === void 0 ? void 0 : _$maxBy2.questionOrder) || 0;
7500
- onChangeExam(_extends({}, exam, {
7501
- questions: [].concat(exam.questions, [{
7502
- article: maxArticle + 1,
7503
- correctAnswers: [1],
7504
- numberOfAnswers: DEFAULT_ANSWER_COUNT,
7505
- score: DEFAULT_SCORE,
7506
- questionOrder: maxOrder + 1
7507
- }])
7508
- }));
7879
+ var handleSelectDeleteTextbook = function handleSelectDeleteTextbook(textbook) {
7880
+ return [handleChangeSelectedItem(textbook)];
7509
7881
  };
7510
- var examGroupByArticle = React.useMemo(function () {
7511
- if (!exam) return [];
7512
- var articles = [];
7513
- var groupedArticle = _.groupBy(exam.questions, "article");
7514
- for (var key in groupedArticle) {
7515
- if (Object.prototype.hasOwnProperty.call(groupedArticle, key)) {
7516
- var _questions$find, _$maxBy3;
7517
- var questions = groupedArticle[key];
7518
- articles.push({
7519
- article: +key,
7520
- categoryId: (_questions$find = questions.find(function (i) {
7521
- return !!i.categoryId;
7522
- })) === null || _questions$find === void 0 ? void 0 : _questions$find.categoryId,
7523
- answerCount: ((_$maxBy3 = _.maxBy(questions, "numberOfAnswers")) === null || _$maxBy3 === void 0 ? void 0 : _$maxBy3.numberOfAnswers) || DEFAULT_ANSWER_COUNT,
7524
- questionCount: questions.length,
7525
- questions: questions
7882
+ var handleDeleteTextbook = function handleDeleteTextbook() {
7883
+ try {
7884
+ var _temp2 = function _temp2() {
7885
+ dispatch(setLoading(false));
7886
+ };
7887
+ if (!(selectedTextbook !== null && selectedTextbook !== void 0 && selectedTextbook.id)) return Promise.resolve();
7888
+ dispatch(setLoading(true));
7889
+ var _temp = _catch(function () {
7890
+ return Promise.resolve(deleteTextbookApi(selectedTextbook.id, role)).then(function () {
7891
+ return Promise.resolve(getData(false)).then(function () {
7892
+ toggleConfirmDialog();
7893
+ });
7526
7894
  });
7527
- }
7895
+ }, function (error) {
7896
+ var _error$response, _error$response$data;
7897
+ reactToastify.toast.error((error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.title) || "Textbook deleted failed");
7898
+ });
7899
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
7900
+ } catch (e) {
7901
+ return Promise.reject(e);
7528
7902
  }
7529
- return _.sortBy(articles, "article");
7530
- }, [JSON.stringify(exam)]);
7531
- var durationOptions = React.useMemo(function () {
7532
- var options = DURATION_OPTIONS.map(function (i) {
7533
- return {
7534
- label: i + "\uBD84",
7535
- value: i
7536
- };
7537
- });
7538
- if (!!exam.duration && exam.duration > DURATION_OPTIONS[DURATION_OPTIONS.length - 1]) return [].concat(options, [{
7539
- label: exam.duration + "\uBD84",
7540
- value: exam.duration
7541
- }]);
7542
- return options;
7543
- }, [exam.duration]);
7544
- React.useEffect(function () {
7545
- if ((selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.id) !== exam.subjectId) onChangeExam(_extends({}, exam, {
7546
- subjectId: (selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.id) || 0
7547
- }));
7548
- }, [selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.id, exam.subjectId]);
7903
+ };
7549
7904
  return {
7550
- t: t,
7551
- durationOptions: durationOptions,
7552
- examGroupByArticle: examGroupByArticle,
7553
- handleAddArticle: handleAddArticle,
7554
- handleChangeScoreAnswer: handleChangeScoreAnswer,
7555
- handleChangeTitle: handleChangeTitle,
7556
- handleChangeDuration: handleChangeDuration,
7557
- handleChangeCorrectAnswers: handleChangeCorrectAnswers,
7558
- handleChangeAnswerCount: handleChangeAnswerCount,
7559
- handleChangeQuestionCount: handleChangeQuestionCount,
7560
- handleChangeCategory: handleChangeCategory,
7561
- handleDeleteArticle: handleDeleteArticle
7905
+ filter: filter,
7906
+ textSearchRef: textSearchRef,
7907
+ totalPages: totalPages,
7908
+ textbooks: textbooks,
7909
+ selectedTextbook: selectedTextbook,
7910
+ handleSort: handleSort,
7911
+ handleChangeSearchText: handleChangeSearchText,
7912
+ handleChangePage: handleChangePage,
7913
+ calcOrderNumber: calcOrderNumber,
7914
+ handleViewTextbook: handleViewTextbook,
7915
+ handleUpdateTextbook: handleUpdateTextbook,
7916
+ handleCreateTextbook: handleCreateTextbook,
7917
+ toggleConfirmDialog: toggleConfirmDialog,
7918
+ handleDeleteTextbook: handleDeleteTextbook,
7919
+ handleSelectDeleteTextbook: handleSelectDeleteTextbook
7562
7920
  };
7563
7921
  };
7564
7922
 
7565
- var ExamDetailView = function ExamDetailView(_ref) {
7566
- var _ref$className = _ref.className,
7567
- className = _ref$className === void 0 ? "" : _ref$className,
7568
- exam = _ref.exam,
7923
+ var EmptyRow = function EmptyRow() {
7924
+ var _useTranslation = reactI18next.useTranslation(),
7925
+ t = _useTranslation.t;
7926
+ return React__default.createElement(material.TableRow, null, React__default.createElement(material.TableCell, {
7927
+ colSpan: 12,
7928
+ className: "text-center text-muted"
7929
+ }, t("no_data")));
7930
+ };
7931
+
7932
+ var LayoutList = function LayoutList(_ref) {
7933
+ var children = _ref.children,
7934
+ title = _ref.title;
7935
+ return React__default.createElement(material.Box, {
7936
+ className: 'bg-white p-3'
7937
+ }, React__default.createElement(material.Stack, {
7938
+ direction: "row",
7939
+ alignItems: "center",
7940
+ justifyContent: "space-between",
7941
+ mb: 2
7942
+ }, React__default.createElement(material.Typography, {
7943
+ variant: 'h4'
7944
+ }, title)), React__default.createElement(material.Box, null, children));
7945
+ };
7946
+
7947
+ var SortIcon = function SortIcon(_ref) {
7948
+ var isAscending = _ref.isAscending,
7949
+ onClick = _ref.onClick;
7950
+ return React__default.createElement("div", {
7951
+ className: "d-flex flex-column " + styles["sort-icons"],
7952
+ onClick: onClick
7953
+ }, React__default.createElement(fa.FaSortUp, {
7954
+ className: isAscending === true ? styles["active"] : ""
7955
+ }), React__default.createElement(fa.FaSortDown, {
7956
+ className: isAscending === false ? styles["active"] : ""
7957
+ }));
7958
+ };
7959
+
7960
+ var TableHeader = function TableHeader(_ref) {
7961
+ var headerTemplates = _ref.headerTemplates,
7962
+ filter = _ref.filter,
7963
+ onSort = _ref.onSort;
7964
+ var _useTranslation = reactI18next.useTranslation(),
7965
+ t = _useTranslation.t;
7966
+ return React__default.createElement(material.TableHead, null, React__default.createElement(material.TableRow, null, headerTemplates.map(function (i, index$1) {
7967
+ return React__default.createElement(material.TableCell, {
7968
+ key: index$1,
7969
+ className: "" + (!!i.sortKey && "pointer"),
7970
+ onClick: !!i.sortKey ? function () {
7971
+ return onSort === null || onSort === void 0 ? void 0 : onSort(i.sortKey);
7972
+ } : undefined
7973
+ }, React__default.createElement("div", {
7974
+ className: "d-flex justify-content-between align-items-center text-nowrap"
7975
+ }, t(i.title), !!i.sortKey && React__default.createElement(SortIcon, {
7976
+ isAscending: filter.sortColumnName !== i.sortKey ? undefined : filter.sortColumnDirection === OrderType.ASC
7977
+ })));
7978
+ })));
7979
+ };
7980
+
7981
+ var SearchInput = function SearchInput(_ref) {
7982
+ var textSearchRef = _ref.textSearchRef,
7983
+ _ref$placeholder = _ref.placeholder,
7984
+ placeholder = _ref$placeholder === void 0 ? "Search for..." : _ref$placeholder,
7985
+ onChange = _ref.onChange,
7986
+ _ref$fit = _ref.fit,
7987
+ fit = _ref$fit === void 0 ? true : _ref$fit;
7988
+ return React__default.createElement(material.Paper, {
7989
+ component: "div",
7990
+ className: "bg-light w-100 " + (fit && "h-100"),
7991
+ sx: {
7992
+ p: "2px 4px",
7993
+ display: "flex",
7994
+ alignItems: "center",
7995
+ width: 400,
7996
+ transition: "border 0.2s ease",
7997
+ outline: "1px solid transparent",
7998
+ ":focus-within": {
7999
+ outlineColor: function outlineColor(theme) {
8000
+ return theme.palette.primary.main;
8001
+ }
8002
+ }
8003
+ }
8004
+ }, React__default.createElement(material.Box, {
8005
+ sx: {
8006
+ p: "10px"
8007
+ },
8008
+ "aria-label": "search"
8009
+ }, React__default.createElement(io5.IoSearch, {
8010
+ size: 24,
8011
+ className: "pb-1"
8012
+ })), React__default.createElement(material.InputBase, {
8013
+ id: "searchText",
8014
+ className: "" + (fit && "h-100"),
8015
+ sx: {
8016
+ ml: 1,
8017
+ flex: 1,
8018
+ lineHeight: 1
8019
+ },
8020
+ placeholder: placeholder,
8021
+ ref: textSearchRef,
8022
+ onChange: onChange
8023
+ }));
8024
+ };
8025
+
8026
+ var TextbookList = function TextbookList(props) {
8027
+ var _useTranslation = reactI18next.useTranslation(),
8028
+ t = _useTranslation.t;
8029
+ var _useTextbookList = useTextbookList(props),
8030
+ filter = _useTextbookList.filter,
8031
+ textbooks = _useTextbookList.textbooks,
8032
+ totalPages = _useTextbookList.totalPages,
8033
+ textSearchRef = _useTextbookList.textSearchRef,
8034
+ selectedTextbook = _useTextbookList.selectedTextbook,
8035
+ handleChangeSearchText = _useTextbookList.handleChangeSearchText,
8036
+ handleSort = _useTextbookList.handleSort,
8037
+ handleChangePage = _useTextbookList.handleChangePage,
8038
+ calcOrderNumber = _useTextbookList.calcOrderNumber,
8039
+ handleViewTextbook = _useTextbookList.handleViewTextbook,
8040
+ handleUpdateTextbook = _useTextbookList.handleUpdateTextbook,
8041
+ handleCreateTextbook = _useTextbookList.handleCreateTextbook,
8042
+ toggleConfirmDialog = _useTextbookList.toggleConfirmDialog,
8043
+ handleDeleteTextbook = _useTextbookList.handleDeleteTextbook,
8044
+ handleSelectDeleteTextbook = _useTextbookList.handleSelectDeleteTextbook;
8045
+ return React__default.createElement(LayoutList, {
8046
+ title: t(TEXTBOOK_PAGE_TITLE)
8047
+ }, React__default.createElement(material.Grid, {
8048
+ container: true
8049
+ }, React__default.createElement(material.Grid, {
8050
+ item: true,
8051
+ xs: 6
8052
+ }, React__default.createElement(SearchInput, {
8053
+ textSearchRef: textSearchRef,
8054
+ onChange: handleChangeSearchText,
8055
+ placeholder: t(TEXT_BOOK_SEARCH_PLACEHOLDER)
8056
+ })), React__default.createElement(material.Grid, {
8057
+ item: true,
8058
+ xs: 6
8059
+ }, React__default.createElement(material.Stack, {
8060
+ alignItems: "end"
8061
+ }, React__default.createElement(material.Button, {
8062
+ startIcon: React__default.createElement(fa.FaPlus, {
8063
+ size: 12
8064
+ }),
8065
+ variant: "contained",
8066
+ color: "primary",
8067
+ onClick: handleCreateTextbook
8068
+ }, t("create_textbook")))), React__default.createElement(material.Grid, {
8069
+ item: true,
8070
+ xs: 12,
8071
+ className: "mt-3"
8072
+ }, React__default.createElement(material.Table, null, React__default.createElement(TableHeader, {
8073
+ headerTemplates: TEXTBOOK_HEADERS,
8074
+ filter: filter,
8075
+ onSort: handleSort
8076
+ }), React__default.createElement(material.TableBody, null, textbooks.map(function (i, index) {
8077
+ return React__default.createElement(material.TableRow, {
8078
+ key: i.id
8079
+ }, React__default.createElement(material.TableCell, null, calcOrderNumber(index)), React__default.createElement(material.TableCell, null, i.name), React__default.createElement(material.TableCell, null, i.subject.name), React__default.createElement(material.TableCell, null, utcToLocalTime(i.createdAt, t("date_format"))), React__default.createElement(material.TableCell, null, i.totalChapters), React__default.createElement(material.TableCell, null, React__default.createElement(material.Stack, {
8080
+ direction: "row",
8081
+ spacing: 1,
8082
+ alignItems: "center"
8083
+ }, !i.isCreatedByAdmin && React__default.createElement(material.IconButton, {
8084
+ color: "default",
8085
+ className: "bg-warning text-white",
8086
+ onClick: function onClick() {
8087
+ return handleUpdateTextbook(i.id);
8088
+ }
8089
+ }, React__default.createElement(fa6.FaPencil, {
8090
+ size: 12
8091
+ })), React__default.createElement(material.IconButton, {
8092
+ color: "default",
8093
+ className: "bg-primary text-white",
8094
+ onClick: function onClick() {
8095
+ return handleViewTextbook(i.id);
8096
+ }
8097
+ }, React__default.createElement(fa.FaEye, {
8098
+ size: 12
8099
+ })), !i.isCreatedByAdmin && React__default.createElement(material.IconButton, {
8100
+ color: "default",
8101
+ className: "bg-danger text-white",
8102
+ onClick: function onClick() {
8103
+ return handleSelectDeleteTextbook(i);
8104
+ }
8105
+ }, React__default.createElement(fa.FaTrash, {
8106
+ size: 12
8107
+ })))));
8108
+ }), !textbooks.length && React__default.createElement(EmptyRow, null))), React__default.createElement("div", {
8109
+ className: "d-flex justify-content-end mt-3"
8110
+ }, !!totalPages && React__default.createElement(material.Pagination, {
8111
+ count: totalPages,
8112
+ page: filter.currentPage,
8113
+ onChange: handleChangePage
8114
+ })))), React__default.createElement(ConfirmDialog, {
8115
+ open: !!(selectedTextbook !== null && selectedTextbook !== void 0 && selectedTextbook.id),
8116
+ toggle: toggleConfirmDialog,
8117
+ text: "" + t("are_you_sure_you_want_to_delete_the_textbook"),
8118
+ onConfirm: handleDeleteTextbook,
8119
+ confirmText: selectedTextbook === null || selectedTextbook === void 0 ? void 0 : selectedTextbook.name,
8120
+ isDelete: true
8121
+ }));
8122
+ };
8123
+
8124
+
8125
+
8126
+ var index$2 = {
8127
+ __proto__: null,
8128
+ TextbookList: TextbookList,
8129
+ TextbookDetail: TextbookViewDetail
8130
+ };
8131
+
8132
+ var _excluded$5 = ["defaultValue", "options", "isDisabled", "scrollBottom", "value", "isMulti"];
8133
+ var CustomCreatable = function CustomCreatable(_ref) {
8134
+ var options = _ref.options,
7569
8135
  isDisabled = _ref.isDisabled,
7570
- isEdit = _ref.isEdit,
7571
- onChangeExam = _ref.onChangeExam;
7572
- var _useSubjectSelect = useSubjectSelect(),
7573
- subjectOptions = _useSubjectSelect.subjectOptions,
7574
- selectedSubject = _useSubjectSelect.selectedSubject,
7575
- handleChangeSubject = _useSubjectSelect.handleChangeSubject;
7576
- var _useExamDetailView = useExamDetailView({
7577
- exam: exam,
7578
- onChangeExam: onChangeExam,
7579
- selectedSubject: selectedSubject
7580
- }),
7581
- t = _useExamDetailView.t,
7582
- durationOptions = _useExamDetailView.durationOptions,
7583
- examGroupByArticle = _useExamDetailView.examGroupByArticle,
7584
- handleAddArticle = _useExamDetailView.handleAddArticle,
7585
- handleChangeScoreAnswer = _useExamDetailView.handleChangeScoreAnswer,
7586
- handleChangeTitle = _useExamDetailView.handleChangeTitle,
7587
- handleChangeDuration = _useExamDetailView.handleChangeDuration,
7588
- handleChangeCorrectAnswers = _useExamDetailView.handleChangeCorrectAnswers,
7589
- handleChangeAnswerCount = _useExamDetailView.handleChangeAnswerCount,
7590
- handleChangeQuestionCount = _useExamDetailView.handleChangeQuestionCount,
7591
- handleChangeCategory = _useExamDetailView.handleChangeCategory,
7592
- handleDeleteArticle = _useExamDetailView.handleDeleteArticle;
7593
- return React__default.createElement(material.Grid, {
7594
- container: true,
7595
- spacing: 3,
7596
- className: className + " " + styleGlobal["custom-row"]
7597
- }, React__default.createElement(material.Grid, {
7598
- item: true,
7599
- xs: 5,
7600
- className: 'mb-2'
7601
- }, React__default.createElement("label", {
7602
- className: styleGlobal["form-label"] + " " + styles$1["question-label"],
7603
- htmlFor: "title"
7604
- }, t("title")), React__default.createElement("input", {
7605
- disabled: isDisabled,
7606
- className: "" + styleGlobal["form-control"],
7607
- value: exam.title,
7608
- id: "title",
7609
- placeholder: t("enter_title"),
7610
- onChange: handleChangeTitle
7611
- })), React__default.createElement(material.Grid, {
7612
- item: true,
7613
- xs: 3,
7614
- className: 'mb-2'
7615
- }, React__default.createElement("label", {
7616
- className: styleGlobal["form-label"] + " " + styles$1["question-label"],
7617
- htmlFor: "duration"
7618
- }, t("duration")), React__default.createElement(CustomSelect, {
7619
- inputId: "duration",
7620
- value: exam.duration,
7621
- options: durationOptions,
7622
- onChange: handleChangeDuration,
7623
- isDisabled: isDisabled
7624
- })), React__default.createElement(material.Grid, {
7625
- item: true,
7626
- xs: 3,
7627
- className: 'mb-2'
7628
- }, React__default.createElement("label", {
7629
- className: styleGlobal["form-label"] + " " + styles$1["question-label"],
7630
- htmlFor: "duration"
7631
- }, t("subject"), " ", selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.name), React__default.createElement(CustomSelect, {
7632
- inputId: "subject",
7633
- value: selectedSubject === null || selectedSubject === void 0 ? void 0 : selectedSubject.id,
7634
- options: subjectOptions,
7635
- onChange: handleChangeSubject,
7636
- isDisabled: isDisabled || isEdit
7637
- })), examGroupByArticle.map(function (i, index) {
7638
- return React__default.createElement(material.Grid, {
7639
- item: true,
7640
- key: i.article,
7641
- xs: 12,
7642
- className: index === examGroupByArticle.length - 1 ? "mb-2" : ''
7643
- }, React__default.createElement(ArticleGroupView, Object.assign({}, i, {
7644
- isActive: index === examGroupByArticle.length - 1,
7645
- onChangeQuestionCount: handleChangeQuestionCount,
7646
- onChangeCategory: handleChangeCategory,
7647
- onChangeAnswerCount: handleChangeAnswerCount,
7648
- onChangeCorrectAnswers: handleChangeCorrectAnswers,
7649
- onChangeScoreAnswer: handleChangeScoreAnswer,
7650
- onDelete: handleDeleteArticle,
7651
- isDisabled: isDisabled,
7652
- selectedSubject: selectedSubject,
7653
- isDeletable: examGroupByArticle.length > 1
7654
- })));
7655
- }), React__default.createElement(material.Grid, {
7656
- item: true,
7657
- xs: 12
7658
- }, React__default.createElement("button", {
7659
- disabled: isDisabled,
7660
- className: styleGlobal["btn-outline-primary"] + " w-100 d-flex justify-content-center align-items-center " + styles$1["question-btn"] + " mt-3",
7661
- onClick: handleAddArticle
7662
- }, React__default.createElement(fa.FaPlusCircle, {
7663
- className: "me-2"
7664
- }), "\uBB38\uD56D \uCD94\uAC00\uD558\uAE30")));
8136
+ scrollBottom = _ref.scrollBottom,
8137
+ value = _ref.value,
8138
+ isMulti = _ref.isMulti,
8139
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
8140
+ var initialValues = Array.isArray(value) ? options.filter(function (i) {
8141
+ return value.includes(i.value);
8142
+ }) : isMulti ? options.filter(function (i) {
8143
+ return i.value == value;
8144
+ }) : options.find(function (i) {
8145
+ return i.value == value;
8146
+ });
8147
+ return React__default.createElement(CreatableSelect, Object.assign({
8148
+ isClearable: true,
8149
+ isDisabled: isDisabled,
8150
+ options: options,
8151
+ value: initialValues,
8152
+ menuPlacement: scrollBottom ? "top" : "auto",
8153
+ isMulti: isMulti
8154
+ }, rest));
8155
+ };
8156
+
8157
+ var _excluded$6 = ["isDefault", "defaultValue", "options", "isDisabled", "scrollBottom", "value", "isMulti"];
8158
+ var CustomAsyncSelect = function CustomAsyncSelect(_ref) {
8159
+ var isDefault = _ref.isDefault,
8160
+ options = _ref.options,
8161
+ isDisabled = _ref.isDisabled,
8162
+ scrollBottom = _ref.scrollBottom,
8163
+ value = _ref.value,
8164
+ isMulti = _ref.isMulti,
8165
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
8166
+ var initialValues = Array.isArray(value) ? options.filter(function (i) {
8167
+ return value.includes(i.value);
8168
+ }) : isMulti ? options.filter(function (i) {
8169
+ return i.value == value;
8170
+ }) : options.find(function (i) {
8171
+ return i.value == value;
8172
+ });
8173
+ return React__default.createElement(Select__default, Object.assign({
8174
+ isDisabled: isDisabled,
8175
+ options: options,
8176
+ value: !isDefault ? initialValues : undefined,
8177
+ defaultValue: isDefault ? initialValues : undefined,
8178
+ menuPlacement: scrollBottom ? "top" : "auto",
8179
+ isMulti: isMulti
8180
+ }, rest));
7665
8181
  };
7666
8182
 
7667
8183
  var EXAM_SESSION_URL = BASE_URL + "/api/examSession";
@@ -7719,16 +8235,16 @@ var ORDER_NUMBERS = {
7719
8235
  10: "the_tenth"
7720
8236
  };
7721
8237
  var TabList = [{
7722
- label: "종합 분석",
8238
+ label: "comprehensive_analysis",
7723
8239
  value: 0
7724
8240
  }, {
7725
- label: "풀이 순서",
8241
+ label: "solution_order",
7726
8242
  value: 1
7727
8243
  }, {
7728
- label: "풀이 비교",
8244
+ label: "compare_solution",
7729
8245
  value: 2
7730
8246
  }, {
7731
- label: "문제 분석",
8247
+ label: "problem_analysis",
7732
8248
  value: 3
7733
8249
  }];
7734
8250
  var Roles$2;
@@ -8590,7 +9106,7 @@ var useExamResult = function useExamResult(searchParam, navigate, examSessionId,
8590
9106
  var questions = ((_timelyOrderQuestion$ = timelyOrderQuestion[dataChartIndex]) === null || _timelyOrderQuestion$ === void 0 ? void 0 : _timelyOrderQuestion$.questions) || null;
8591
9107
  var questionLength = (_questions$length = questions === null || questions === void 0 ? void 0 : questions.length) != null ? _questions$length : 0;
8592
9108
  return val != null ? t("problem_number_question", {
8593
- number: questions !== null ? ((_questions = questions[questionLength - val]) === null || _questions === void 0 ? void 0 : _questions.questionOrder) + 1 : val
9109
+ number: questions !== null ? (((_questions = questions[questionLength - val]) === null || _questions === void 0 ? void 0 : _questions.questionOrder) || 0) + 1 : val
8594
9110
  }) : t("no_data");
8595
9111
  }
8596
9112
  return null;
@@ -8657,7 +9173,7 @@ var useExamResult = function useExamResult(searchParam, navigate, examSessionId,
8657
9173
  var questions = ((_timelyOrderQuestion$2 = timelyOrderQuestion[dataChartIndex]) === null || _timelyOrderQuestion$2 === void 0 ? void 0 : _timelyOrderQuestion$2.questions) || null;
8658
9174
  var questionLength = (_questions$length2 = questions === null || questions === void 0 ? void 0 : questions.length) != null ? _questions$length2 : 0;
8659
9175
  return val != null ? t("problem_number_question", {
8660
- number: questions !== null ? ((_questions2 = questions[questionLength - val]) === null || _questions2 === void 0 ? void 0 : _questions2.questionOrder) + 1 : val
9176
+ number: questions !== null ? (((_questions2 = questions[questionLength - val]) === null || _questions2 === void 0 ? void 0 : _questions2.questionOrder) || 0) + 1 : val
8661
9177
  }) : t("no_data");
8662
9178
  },
8663
9179
  style: {
@@ -8685,15 +9201,23 @@ var useExamResult = function useExamResult(searchParam, navigate, examSessionId,
8685
9201
  topAnswerOrder: i.topAnswerOrder == null ? 0 : i.topAnswerOrder
8686
9202
  });
8687
9203
  });
8688
- var mySeriesData = [null].concat(questionsData.sort(function (a, b) {
8689
- return b.answerOrder === 0 ? -1 : a.answerOrder > b.answerOrder ? 1 : b.answerOrder > a.answerOrder ? -1 : 0;
8690
- }).map(function (item) {
8691
- return item.answerOrder === 0 ? null : data.questions.length - item.questionOrder;
9204
+ var mySeriesData = [null].concat(_.sortBy(questionsData.filter(function (i) {
9205
+ return i.answerOrder !== 0;
9206
+ }), ["answerOrder", "questionOrder"]).map(function (item) {
9207
+ return data.questions.length - item.questionOrder;
9208
+ }), questionsData.filter(function (i) {
9209
+ return i.answerOrder === 0;
9210
+ }).map(function () {
9211
+ return null;
8692
9212
  }), [null]);
8693
- var topSeriesData = [null].concat(questionsData.sort(function (a, b) {
8694
- return b.topAnswerOrder === 0 ? -1 : a.topAnswerOrder > b.topAnswerOrder ? 1 : b.topAnswerOrder > a.topAnswerOrder ? -1 : 0;
8695
- }).map(function (item) {
8696
- return item.topAnswerOrder === 0 ? null : data.questions.length - item.questionOrder;
9213
+ var topSeriesData = [null].concat(_.sortBy(questionsData.filter(function (i) {
9214
+ return i.topAnswerOrder !== 0;
9215
+ }), ["topAnswerOrder", "questionOrder"]).map(function (item) {
9216
+ return data.questions.length - item.questionOrder;
9217
+ }), questionsData.filter(function (i) {
9218
+ return i.topAnswerOrder === 0;
9219
+ }).map(function () {
9220
+ return null;
8697
9221
  }), [null]);
8698
9222
  return [{
8699
9223
  name: t("my_problem_solving_order"),
@@ -9859,7 +10383,7 @@ Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==t
9859
10383
 
9860
10384
  var ReactApexChart = unwrapExports(reactApexcharts_min);
9861
10385
 
9862
- var styles$2 = {"titleBox":"_1dveO","title":"_mxRxf","point":"_2fD-F","buttonGroup":"_2DGl3","btnFeedback":"_xGW1x","btnTerminate":"_3mLu2","myanswer":"_eDBpS","titleMyAnswer1":"_2fMq3","titleMyAnswer2":"_3gEYh","contentMyAnswer":"_2K_sx","myAnswerItem":"_2qiLh","time":"_6TCOK","timeCol":"_hmseC","answer-response":"_3GfJt","answer-response-0":"_3ut64","answer-response-1":"_2VtpD","answer-response-2":"_58lQU","answer-response-3":"_1ucMY","answer-response-4":"_1qkxy","answerCorrect":"_2jIeT","answerIncorrect":"_to2v0","answerNograss":"_1JSte","answerEasy":"_2_uTU","answerDiscrimination":"_1DBoA","answerTrap":"_1q3tD","answerNoTime":"_3iItu","questionOrder":"_1fNkS","myTimeLabel":"_1Z_F3","myPoolTime":"_4KwG0","topTimeLabel":"_245H-","topTime":"_3tZqw","meanTimeLabel":"_PlPLY","meanTime":"_12a7R","compareChart":"_3MW16","prevChart":"_1fNkb","chart":"_3K4oY","nextChart":"_3YKBp","titleChart":"_13BVP","compareGrass":"_1_fJu","titleCompareGrass":"_o1txm","tableCompareGrass":"_bT5nf","thcolumn1":"_3Umg0","tdcolumn1":"_3dRMF","tdcolumn3":"_2tcBP","classification":"_1AFeb","wrapperProblem":"_oTqG7","titleProblem":"_35eIx","titleProblemClose":"_3t4HO","titleTrickyProblem":"_1-oxK","wrongQuestions":"_2dpMR","question":"_1lSOX","assignedQuestions":"_1ONUt","wrapperContent":"_nPoR0","content":"_2zmZn","contentColumn1":"_334SY","span1":"_3Lf-U","span2":"_ZpMot","contentColumn2":"_16P3l","duration":"_1kT28","topDuration":"_1fVRi","overallCorrectRate":"_3jLGe","answer":"_VsZ0K","contentVulnerable":"_QxKMy","wrappContentProblem":"_nnqpW","contentProblem":"_3Z1nV","labelProblem":"_36Xpx","name":"_3ZJQW","percent":"_2J3MK","slider":"_1MPdO","track":"_3CV_y","noData":"__g-ff","loading":"_3j485","table-responsive":"_2O6RX","form-label":"_1RYOQ","form-control":"_3VRVT","form-label-dialog":"_3oCSh","btn-cancel":"_3USKq","btn-register":"_3y_iD","pdfBtnBox":"_3xZHo","pdfBtn":"_1DtWq","form-select":"_1a_vw"};
10386
+ var styles$4 = {"titleBox":"_1dveO","title":"_mxRxf","point":"_2fD-F","buttonGroup":"_2DGl3","btnFeedback":"_xGW1x","btnTerminate":"_3mLu2","myanswer":"_eDBpS","titleMyAnswer1":"_2fMq3","titleMyAnswer2":"_3gEYh","contentMyAnswer":"_2K_sx","myAnswerItem":"_2qiLh","time":"_6TCOK","timeCol":"_hmseC","answer-response":"_3GfJt","answer-response-0":"_3ut64","answer-response-1":"_2VtpD","answer-response-2":"_58lQU","answer-response-3":"_1ucMY","answer-response-4":"_1qkxy","answerCorrect":"_2jIeT","answerIncorrect":"_to2v0","answerNograss":"_1JSte","answerEasy":"_2_uTU","answerDiscrimination":"_1DBoA","answerTrap":"_1q3tD","answerNoTime":"_3iItu","questionOrder":"_1fNkS","myTimeLabel":"_1Z_F3","myPoolTime":"_4KwG0","topTimeLabel":"_245H-","topTime":"_3tZqw","meanTimeLabel":"_PlPLY","meanTime":"_12a7R","compareChart":"_3MW16","prevChart":"_1fNkb","chart":"_3K4oY","nextChart":"_3YKBp","titleChart":"_13BVP","compareGrass":"_1_fJu","titleCompareGrass":"_o1txm","tableCompareGrass":"_bT5nf","thcolumn1":"_3Umg0","tdcolumn1":"_3dRMF","tdcolumn3":"_2tcBP","classification":"_1AFeb","wrapperProblem":"_oTqG7","titleProblem":"_35eIx","titleProblemClose":"_3t4HO","titleTrickyProblem":"_1-oxK","wrongQuestions":"_2dpMR","question":"_1lSOX","assignedQuestions":"_1ONUt","wrapperContent":"_nPoR0","content":"_2zmZn","contentColumn1":"_334SY","span1":"_3Lf-U","span2":"_ZpMot","contentColumn2":"_16P3l","duration":"_1kT28","topDuration":"_1fVRi","overallCorrectRate":"_3jLGe","answer":"_VsZ0K","contentVulnerable":"_QxKMy","wrappContentProblem":"_nnqpW","contentProblem":"_3Z1nV","labelProblem":"_36Xpx","name":"_3ZJQW","percent":"_2J3MK","slider":"_1MPdO","track":"_3CV_y","noData":"__g-ff","loading":"_3j485","table-responsive":"_2O6RX","form-label":"_1RYOQ","form-control":"_3VRVT","form-label-dialog":"_3oCSh","btn-cancel":"_3USKq","btn-register":"_3y_iD","pdfBtnBox":"_3xZHo","pdfBtn":"_1DtWq","form-select":"_1a_vw"};
9863
10387
 
9864
10388
  var iconStarQuestion = function iconStarQuestion(_ref) {
9865
10389
  var _ref$width = _ref.width,
@@ -10150,7 +10674,7 @@ function CreateNewQuestionDialog(_ref) {
10150
10674
  padding: "24px 24px 40px 24px"
10151
10675
  }, React__default.createElement(material.Stack, null, React__default.createElement("label", {
10152
10676
  htmlFor: "questions",
10153
- className: styleGlobal['form-label'] + " " + styles$2['form-label-dialog']
10677
+ className: styles['form-label'] + " " + styles$4['form-label-dialog']
10154
10678
  }, "\uC9C8\uBB38\uD560 \uBB38\uC81C"), React__default.createElement(formik.Field, {
10155
10679
  as: "select",
10156
10680
  id: "questions",
@@ -10158,7 +10682,7 @@ function CreateNewQuestionDialog(_ref) {
10158
10682
  style: {
10159
10683
  width: "100%"
10160
10684
  },
10161
- className: "" + styleGlobal['form-select']
10685
+ className: "" + styles['form-select']
10162
10686
  }, questions === null || questions === void 0 ? void 0 : questions.map(function (question) {
10163
10687
  return React__default.createElement("option", {
10164
10688
  value: question === null || question === void 0 ? void 0 : question.id
@@ -10167,7 +10691,7 @@ function CreateNewQuestionDialog(_ref) {
10167
10691
  }));
10168
10692
  }))), React__default.createElement(material.Stack, null, React__default.createElement("label", {
10169
10693
  htmlFor: "content-question",
10170
- className: styleGlobal['form-label'] + " " + styles$2['form-label-dialog']
10694
+ className: styles['form-label'] + " " + styles$4['form-label-dialog']
10171
10695
  }, "\uC9C8\uBB38 \uB0B4\uC6A9"), React__default.createElement(material.Box, {
10172
10696
  position: 'relative',
10173
10697
  display: 'flex',
@@ -10180,7 +10704,7 @@ function CreateNewQuestionDialog(_ref) {
10180
10704
  },
10181
10705
  name: "content",
10182
10706
  placeholder: "\uBB38\uC81C\uAC00 \uC5B4\uB824\uC6CC\uC694",
10183
- className: styleGlobal['form-control']
10707
+ className: styles['form-control']
10184
10708
  }), (errors === null || errors === void 0 ? void 0 : errors.content) && React__default.createElement(material.Box, {
10185
10709
  position: 'absolute',
10186
10710
  right: 0,
@@ -10203,14 +10727,14 @@ function CreateNewQuestionDialog(_ref) {
10203
10727
  borderTop: "1px solid #CED2DA"
10204
10728
  }
10205
10729
  }, React__default.createElement(Button, {
10206
- className: styles$2['btn-cancel'],
10730
+ className: styles$4['btn-cancel'],
10207
10731
  onClick: toggleCreateQuestion
10208
10732
  }, React__default.createElement(Typography, {
10209
10733
  fontWeight: 700,
10210
10734
  fontSize: '14px',
10211
10735
  lineHeight: '16.71px'
10212
10736
  }, "\uCDE8\uC18C")), React__default.createElement(Button, {
10213
- className: styles$2['btn-register'],
10737
+ className: styles$4['btn-register'],
10214
10738
  type: "submit"
10215
10739
  }, React__default.createElement(Typography, {
10216
10740
  fontWeight: 700,
@@ -10242,7 +10766,7 @@ function MyAnswer(_ref) {
10242
10766
  toggleCreateQuestion();
10243
10767
  };
10244
10768
  return React__default.createElement("div", {
10245
- className: styles$2["myanswer"]
10769
+ className: styles$4["myanswer"]
10246
10770
  }, formattedData && formattedData.length > 0 && formattedData.map(function (item) {
10247
10771
  return React__default.createElement("div", {
10248
10772
  key: item.category.id
@@ -10250,9 +10774,9 @@ function MyAnswer(_ref) {
10250
10774
  bgcolor: "#F9FAFB",
10251
10775
  flexDirection: "row",
10252
10776
  padding: "12px",
10253
- className: styles$2["myAnswerItem"] + " " + styleGlobal["noGutters"]
10777
+ className: styles$4["myAnswerItem"] + " " + styles["noGutters"]
10254
10778
  }, React__default.createElement("div", {
10255
- className: styleGlobal["custom-col-2"],
10779
+ className: styles["custom-col-2"],
10256
10780
  style: {
10257
10781
  display: "flex",
10258
10782
  gap: "4px"
@@ -10264,7 +10788,7 @@ function MyAnswer(_ref) {
10264
10788
  color: "#97A1AF"
10265
10789
  }
10266
10790
  }, "\uBB38\uC81C \uBC88\uD638")), React__default.createElement("div", {
10267
- className: styleGlobal["custom-col-2"],
10791
+ className: styles["custom-col-2"],
10268
10792
  style: {
10269
10793
  display: "flex",
10270
10794
  gap: "4px"
@@ -10276,7 +10800,7 @@ function MyAnswer(_ref) {
10276
10800
  color: "#97A1AF"
10277
10801
  }
10278
10802
  }, "\uC815\uB2F5")), React__default.createElement("div", {
10279
- className: styleGlobal["custom-col-2"],
10803
+ className: styles["custom-col-2"],
10280
10804
  style: {
10281
10805
  display: "flex",
10282
10806
  gap: "4px"
@@ -10288,7 +10812,7 @@ function MyAnswer(_ref) {
10288
10812
  color: "#97A1AF"
10289
10813
  }
10290
10814
  }, "\uD480\uC774 \uC2DC\uAC04")), React__default.createElement("div", {
10291
- className: styleGlobal["custom-col-2"],
10815
+ className: styles["custom-col-2"],
10292
10816
  style: {
10293
10817
  display: "flex",
10294
10818
  alignItems: "center",
@@ -10301,7 +10825,7 @@ function MyAnswer(_ref) {
10301
10825
  color: "#97A1AF"
10302
10826
  }
10303
10827
  }, "\uC0C1\uC704\uAD8C \uBE44\uAD50")), React__default.createElement("div", {
10304
- className: styleGlobal["custom-col-2"],
10828
+ className: styles["custom-col-2"],
10305
10829
  style: {
10306
10830
  display: "flex",
10307
10831
  alignItems: "center",
@@ -10314,7 +10838,7 @@ function MyAnswer(_ref) {
10314
10838
  color: "#97A1AF"
10315
10839
  }
10316
10840
  }, "\uC804\uCCB4 \uC815\uB2F5\uB960"))), React__default.createElement("div", {
10317
- className: styles$2["titleMyAnswer2"]
10841
+ className: styles$4["titleMyAnswer2"]
10318
10842
  }, React__default.createElement(material.Typography, {
10319
10843
  sx: {
10320
10844
  color: "#97A1AF",
@@ -10327,7 +10851,7 @@ function MyAnswer(_ref) {
10327
10851
  fontWeight: 700
10328
10852
  }
10329
10853
  }, item.category.name)), React__default.createElement("div", {
10330
- className: styles$2["contentMyAnswer"]
10854
+ className: styles$4["contentMyAnswer"]
10331
10855
  }, item.questions.map(function (question, index) {
10332
10856
  return React__default.createElement("div", {
10333
10857
  style: isOpenTime[question.id] ? {
@@ -10336,9 +10860,9 @@ function MyAnswer(_ref) {
10336
10860
  } : {},
10337
10861
  key: question.id
10338
10862
  }, React__default.createElement("div", {
10339
- className: styles$2["myAnswerItem"] + " " + styleGlobal["noGutters"]
10863
+ className: styles$4["myAnswerItem"] + " " + styles["noGutters"]
10340
10864
  }, React__default.createElement("div", {
10341
- className: styleGlobal["custom-col-2"],
10865
+ className: styles["custom-col-2"],
10342
10866
  style: {
10343
10867
  display: "flex",
10344
10868
  alignItems: "center",
@@ -10346,22 +10870,22 @@ function MyAnswer(_ref) {
10346
10870
  padding: "4px 8px"
10347
10871
  }
10348
10872
  }, question.isStar ? React__default.createElement(iconStarQuestion, null) : React__default.createElement(iconNoStarQuestion, null), React__default.createElement("span", {
10349
- className: styles$2["questionOrder"]
10873
+ className: styles$4["questionOrder"]
10350
10874
  }, question.questionOrder + 1, "\uBC88")), React__default.createElement("div", {
10351
- className: styleGlobal["custom-col-2"],
10875
+ className: styles["custom-col-2"],
10352
10876
  style: {
10353
10877
  display: "flex",
10354
10878
  alignItems: "center",
10355
10879
  gap: "4px"
10356
10880
  }
10357
10881
  }, question.isCorrect && question.selectedAnswers !== "" && React__default.createElement(React.Fragment, null, React__default.createElement(iconCorrectAnswer, null), React__default.createElement("span", {
10358
- className: styles$2["answerCorrect"]
10882
+ className: styles$4["answerCorrect"]
10359
10883
  }, "\uC815\uB2F5")), !question.isCorrect && question.selectedAnswers !== "" && React__default.createElement(React.Fragment, null, React__default.createElement(iconCorrectAnswer$1, null), React__default.createElement("span", {
10360
- className: styles$2["answerIncorrect"]
10884
+ className: styles$4["answerIncorrect"]
10361
10885
  }, "\uC624\uB2F5")), question.selectedAnswers === "" && React__default.createElement(React.Fragment, null, React__default.createElement(iconNoGrass, null), React__default.createElement("span", {
10362
- className: styles$2["answerNograss"]
10886
+ className: styles$4["answerNograss"]
10363
10887
  }, "\uD480\uC774 \uC5C6\uC74C"))), React__default.createElement("div", {
10364
- className: styleGlobal["custom-col-2"],
10888
+ className: styles["custom-col-2"],
10365
10889
  style: {
10366
10890
  display: "flex",
10367
10891
  alignItems: "center"
@@ -10370,14 +10894,14 @@ function MyAnswer(_ref) {
10370
10894
  style: {
10371
10895
  margin: 0
10372
10896
  },
10373
- className: styles$2["answer-response"] + " " + styles$2["answer-response-" + question.answerResponseSignal]
10897
+ className: styles$4["answer-response"] + " " + styles$4["answer-response-" + question.answerResponseSignal]
10374
10898
  }, formatTimeSecond(Math.round(question.duration), t)) : React__default.createElement("p", {
10375
10899
  style: {
10376
10900
  margin: 0
10377
10901
  },
10378
- className: styles$2["answerNoTime"]
10902
+ className: styles$4["answerNoTime"]
10379
10903
  }, "\uC2DC\uAC04 \uC5C6\uC74C")), React__default.createElement("div", {
10380
- className: styleGlobal["custom-col-2"],
10904
+ className: styles["custom-col-2"],
10381
10905
  style: {
10382
10906
  display: "flex",
10383
10907
  alignItems: "center"
@@ -10386,15 +10910,15 @@ function MyAnswer(_ref) {
10386
10910
  style: {
10387
10911
  margin: 0
10388
10912
  },
10389
- className: styles$2["answer-response"] + " " + styles$2["answer-response-" + question.answerResponseSignal]
10913
+ className: styles$4["answer-response"] + " " + styles$4["answer-response-" + question.answerResponseSignal]
10390
10914
  }, formatTimeSecond(Math.round(question.topDuration - question.duration), t)) : React__default.createElement("p", {
10391
10915
  style: {
10392
10916
  margin: 0,
10393
10917
  textAlign: "center"
10394
10918
  },
10395
- className: styles$2["answerNoTime"]
10919
+ className: styles$4["answerNoTime"]
10396
10920
  }, "-")), React__default.createElement("div", {
10397
- className: styleGlobal["custom-col-2"],
10921
+ className: styles["custom-col-2"],
10398
10922
  style: {
10399
10923
  display: "flex",
10400
10924
  alignItems: "center"
@@ -10403,14 +10927,14 @@ function MyAnswer(_ref) {
10403
10927
  style: {
10404
10928
  margin: 0
10405
10929
  },
10406
- className: styles$2["answer-response"] + " " + styles$2["answer-response-" + question.answerResponseSignal]
10407
- }, question.overallCorrectRate + "%") : React__default.createElement("p", {
10930
+ className: styles$4["answer-response"] + " " + styles$4["answer-response-" + question.answerResponseSignal]
10931
+ }, question.overallCorrectRate.toFixed(2) + "%") : React__default.createElement("p", {
10408
10932
  style: {
10409
10933
  margin: 0
10410
10934
  },
10411
- className: styles$2["answerNoTime"]
10935
+ className: styles$4["answerNoTime"]
10412
10936
  }, "\uC2DC\uAC04 \uC5C6\uC74C")), isStudent && React__default.createElement("div", {
10413
- className: styleGlobal["custom-col-2"],
10937
+ className: styles["custom-col-2"],
10414
10938
  style: {
10415
10939
  display: "flex",
10416
10940
  alignItems: "center",
@@ -10479,11 +11003,11 @@ var iconBtnNextChart = function iconBtnNextChart(_ref) {
10479
11003
  function CompareGrass(_ref) {
10480
11004
  var effectSize = _ref.effectSize;
10481
11005
  return React__default.createElement("div", {
10482
- className: styles$2["compareGrass"]
11006
+ className: styles$4["compareGrass"]
10483
11007
  }, React__default.createElement("div", {
10484
- className: styles$2["tableCompareGrass"]
11008
+ className: styles$4["tableCompareGrass"]
10485
11009
  }, React__default.createElement("div", {
10486
- className: styles$2["table-responsive"]
11010
+ className: styles$4["table-responsive"]
10487
11011
  }, React__default.createElement(material.Table, {
10488
11012
  style: {
10489
11013
  width: "100%"
@@ -10493,7 +11017,7 @@ function CompareGrass(_ref) {
10493
11017
  borderBottom: "1px solid #E4E7EC"
10494
11018
  }
10495
11019
  }, React__default.createElement("tr", null, React__default.createElement("th", {
10496
- className: styles$2["thcolumn1"]
11020
+ className: styles$4["thcolumn1"]
10497
11021
  }, "\uBB38\uC81C \uBC88\uD638"), React__default.createElement("th", {
10498
11022
  style: {
10499
11023
  textAlign: "center"
@@ -10517,14 +11041,14 @@ function CompareGrass(_ref) {
10517
11041
  borderBottom: "1px solid #e4e7ec"
10518
11042
  } : {}
10519
11043
  }, React__default.createElement("td", {
10520
- className: styles$2["tdcolumn1"]
11044
+ className: styles$4["tdcolumn1"]
10521
11045
  }, "\uBB38\uC81C ", item.questionOrder + 1), React__default.createElement("td", {
10522
11046
  style: {
10523
11047
  textAlign: "center",
10524
11048
  color: "#202B37"
10525
11049
  }
10526
11050
  }, item.correctAnswers, "\uBC88"), React__default.createElement("td", {
10527
- className: styles$2["tdcolumn3"],
11051
+ className: styles$4["tdcolumn3"],
10528
11052
  style: {
10529
11053
  color: item.isCorrect ? "#1EE288" : "#F34B4B"
10530
11054
  }
@@ -10534,7 +11058,7 @@ function CompareGrass(_ref) {
10534
11058
  color: "#414E62"
10535
11059
  }
10536
11060
  }, item.mostSelectedAnswers ? item.mostSelectedAnswers + "\uBC88" : ""), React__default.createElement("td", null, React__default.createElement("div", {
10537
- className: styles$2["classification"]
11061
+ className: styles$4["classification"]
10538
11062
  }, item.problemCategories.map(function (problem, index) {
10539
11063
  return React__default.createElement("div", {
10540
11064
  key: index
@@ -10661,9 +11185,9 @@ function TrickyProblem(_ref) {
10661
11185
  return i.isStar && i.isCorrect;
10662
11186
  });
10663
11187
  return React__default.createElement("div", {
10664
- className: styles$2["wrapperProblem"]
11188
+ className: styles$4["wrapperProblem"]
10665
11189
  }, React__default.createElement("div", {
10666
- className: !openProblem.problem1 ? styles$2["titleProblemClose"] : styles$2["titleProblem"],
11190
+ className: !openProblem.problem1 ? styles$4["titleProblemClose"] : styles$4["titleProblem"],
10667
11191
  onClick: function onClick() {
10668
11192
  return changeOpen(_extends({}, openProblem, {
10669
11193
  problem1: !openProblem.problem1
@@ -10676,27 +11200,27 @@ function TrickyProblem(_ref) {
10676
11200
  fontWeight: 700
10677
11201
  }
10678
11202
  }, "\uAE4C\uB2E4\uB85C\uC6E0\uB358 \uBB38\uC81C"), openProblem.problem1 ? React__default.createElement(iconUpArrow, null) : React__default.createElement(iconDownArrow, null)), openProblem.problem1 && React__default.createElement(React.Fragment, null, React__default.createElement("div", {
10679
- className: styles$2["titleTrickyProblem"]
11203
+ className: styles$4["titleTrickyProblem"]
10680
11204
  }, React__default.createElement(iconX, null), React__default.createElement("span", null, "\uBCC4\uD45C \uCE5C \uBB38\uC81C \uC911 \uD2C0\uB9B0 \uBB38\uC81C")), React__default.createElement("div", {
10681
- className: styles$2["wrongQuestions"]
11205
+ className: styles$4["wrongQuestions"]
10682
11206
  }, !!inCorrectQuestions.length && inCorrectQuestions.map(function (question) {
10683
11207
  return React__default.createElement("span", {
10684
11208
  key: question.id,
10685
- className: styles$2["question"]
11209
+ className: styles$4["question"]
10686
11210
  }, question.questionOrder + 1, "\uBC88");
10687
11211
  }), !data.questions.length && React__default.createElement("div", {
10688
- className: styles$2["noData"]
11212
+ className: styles$4["noData"]
10689
11213
  }, "\uB370\uC774\uD130 \uC5C6\uC74C")), React__default.createElement("div", {
10690
- className: styles$2["titleTrickyProblem"]
11214
+ className: styles$4["titleTrickyProblem"]
10691
11215
  }, React__default.createElement(iconAssignedQuestions, null), React__default.createElement("span", null, "\uBCC4\uD45C \uCE5C \uBB38\uC81C \uC911 \uB9DE\uCD98 \uBB38\uC81C")), React__default.createElement("div", {
10692
- className: styles$2["assignedQuestions"]
11216
+ className: styles$4["assignedQuestions"]
10693
11217
  }, !!correctQuestions.length && correctQuestions.map(function (question) {
10694
11218
  return React__default.createElement("div", {
10695
11219
  key: question.id,
10696
- className: styles$2["question"]
11220
+ className: styles$4["question"]
10697
11221
  }, question.questionOrder + 1, "\uBC88");
10698
11222
  }), !data.questions.length && React__default.createElement("div", {
10699
- className: styles$2["noData"]
11223
+ className: styles$4["noData"]
10700
11224
  }, "\uB370\uC774\uD130 \uC5C6\uC74C"))));
10701
11225
  }
10702
11226
 
@@ -10707,9 +11231,9 @@ function ProtractedProblem(_ref) {
10707
11231
  var _useTranslation = reactI18next.useTranslation(),
10708
11232
  t = _useTranslation.t;
10709
11233
  return React__default.createElement("div", {
10710
- className: styles$2["wrapperProblem"]
11234
+ className: styles$4["wrapperProblem"]
10711
11235
  }, React__default.createElement("div", {
10712
- className: !openProblem.problem2 ? styles$2["titleProblemClose"] : styles$2["titleProblem"],
11236
+ className: !openProblem.problem2 ? styles$4["titleProblemClose"] : styles$4["titleProblem"],
10713
11237
  onClick: function onClick() {
10714
11238
  return changeOpen(_extends({}, openProblem, {
10715
11239
  problem2: !openProblem.problem2
@@ -10722,30 +11246,30 @@ function ProtractedProblem(_ref) {
10722
11246
  fontWeight: 700
10723
11247
  }
10724
11248
  }, "\uC2DC\uAC04\uC774 \uC624\uB798 \uAC78\uB9B0 \uBB38\uC81C"), openProblem.problem2 ? React__default.createElement(iconUpArrow, null) : React__default.createElement(iconDownArrow, null)), openProblem.problem2 && React__default.createElement(React.Fragment, null, React__default.createElement("div", {
10725
- className: styles$2["wrapperContent"]
11249
+ className: styles$4["wrapperContent"]
10726
11250
  }, data.length ? data.map(function (item) {
10727
11251
  return React__default.createElement("div", {
10728
- className: styles$2["content"],
11252
+ className: styles$4["content"],
10729
11253
  key: item.id
10730
11254
  }, React__default.createElement("div", {
10731
- className: styles$2["contentColumn1"]
11255
+ className: styles$4["contentColumn1"]
10732
11256
  }, React__default.createElement("div", null, React__default.createElement("span", {
10733
- className: styles$2["span1"]
11257
+ className: styles$4["span1"]
10734
11258
  }, "\uBB38\uC81C"), React__default.createElement("span", {
10735
- className: styles$2["span2"]
11259
+ className: styles$4["span2"]
10736
11260
  }, item.questionOrder + 1, "\uBC88"))), React__default.createElement("div", {
10737
- className: styles$2["contentColumn2"]
11261
+ className: styles$4["contentColumn2"]
10738
11262
  }, React__default.createElement("div", null, React__default.createElement("span", {
10739
- className: styles$2["span1"]
11263
+ className: styles$4["span1"]
10740
11264
  }, "\uB098\uC758 \uC2DC\uAC04"), React__default.createElement("span", {
10741
- className: styles$2["span2"]
11265
+ className: styles$4["span2"]
10742
11266
  }, "\uC0C1\uC704\uAD8C \uC2DC\uAC04")), React__default.createElement("div", null, React__default.createElement("span", {
10743
- className: styles$2["duration"]
11267
+ className: styles$4["duration"]
10744
11268
  }, formatTimeSecond(item.duration, t)), React__default.createElement("span", {
10745
- className: styles$2["topDuration"]
11269
+ className: styles$4["topDuration"]
10746
11270
  }, formatTimeSecond(item.topDuration, t)))));
10747
11271
  }) : React__default.createElement("div", {
10748
- className: styles$2["noData"]
11272
+ className: styles$4["noData"]
10749
11273
  }, "\uB370\uC774\uD130 \uC5C6\uC74C"))));
10750
11274
  }
10751
11275
 
@@ -10759,9 +11283,9 @@ function Vulnerable(_ref) {
10759
11283
  return q2.overallCorrectRate === q1.overallCorrectRate ? q1.questionOrder - q2.questionOrder : q2.overallCorrectRate - q1.overallCorrectRate;
10760
11284
  });
10761
11285
  return React__default.createElement("div", {
10762
- className: styles$2["wrapperProblem"]
11286
+ className: styles$4["wrapperProblem"]
10763
11287
  }, React__default.createElement("div", {
10764
- className: !openProblem.problem3 ? styles$2["titleProblemClose"] : styles$2["titleProblem"],
11288
+ className: !openProblem.problem3 ? styles$4["titleProblemClose"] : styles$4["titleProblem"],
10765
11289
  onClick: function onClick() {
10766
11290
  return changeOpen(_extends({}, openProblem, {
10767
11291
  problem3: !openProblem.problem3
@@ -10774,30 +11298,30 @@ function Vulnerable(_ref) {
10774
11298
  fontWeight: 700
10775
11299
  }
10776
11300
  }, "\uB0B4\uAC00 \uCDE8\uC57D\uD55C \uBB38\uC81C"), openProblem.problem3 ? React__default.createElement(iconUpArrow, null) : React__default.createElement(iconDownArrow, null)), openProblem.problem3 && React__default.createElement(React.Fragment, null, React__default.createElement("div", {
10777
- className: styles$2["wrapperContent"]
11301
+ className: styles$4["wrapperContent"]
10778
11302
  }, incorrectQuestions.length ? React__default.createElement(React.Fragment, null, incorrectQuestions.map(function (question) {
10779
11303
  return React__default.createElement("div", {
10780
- className: styles$2["content"],
11304
+ className: styles$4["content"],
10781
11305
  key: question.id
10782
11306
  }, React__default.createElement("div", {
10783
- className: styles$2["contentColumn1"]
11307
+ className: styles$4["contentColumn1"]
10784
11308
  }, React__default.createElement("div", null, React__default.createElement("span", {
10785
- className: styles$2["span1"]
11309
+ className: styles$4["span1"]
10786
11310
  }, "\uBB38\uC81C"), React__default.createElement("span", {
10787
- className: styles$2["span2"]
11311
+ className: styles$4["span2"]
10788
11312
  }, question.questionOrder + 1, "\uBC88"))), React__default.createElement("div", {
10789
- className: styles$2["contentColumn2"]
11313
+ className: styles$4["contentColumn2"]
10790
11314
  }, React__default.createElement("div", null, React__default.createElement("span", {
10791
- className: styles$2["span1"]
11315
+ className: styles$4["span1"]
10792
11316
  }, "\uC804\uCCB4 \uC815\uB2F5\uB960"), React__default.createElement("span", {
10793
- className: styles$2["span2"]
11317
+ className: styles$4["span2"]
10794
11318
  }, "\uB098\uC758 \uC624\uB2F5")), React__default.createElement("div", null, React__default.createElement("span", {
10795
- className: styles$2["overallCorrectRate"]
11319
+ className: styles$4["overallCorrectRate"]
10796
11320
  }, question.overallCorrectRate.toFixed(2), "%"), React__default.createElement("span", {
10797
- className: styles$2["answer"]
11321
+ className: styles$4["answer"]
10798
11322
  }, question.selectedAnswers, "\uBC88 (\uC815\uB2F5", " ", question.correctAnswers, "\uBC88)"))));
10799
11323
  })) : React__default.createElement("div", {
10800
- className: styles$2["noData"]
11324
+ className: styles$4["noData"]
10801
11325
  }, "\uB370\uC774\uD130 \uC5C6\uC74C"))));
10802
11326
  }
10803
11327
 
@@ -10806,9 +11330,9 @@ function GradesByTerritory(_ref) {
10806
11330
  openProblem = _ref.openProblem,
10807
11331
  changeOpen = _ref.changeOpen;
10808
11332
  return React__default.createElement("div", {
10809
- className: styles$2["wrapperProblem"]
11333
+ className: styles$4["wrapperProblem"]
10810
11334
  }, React__default.createElement("div", {
10811
- className: !openProblem.problem4 ? styles$2["titleProblemClose"] : styles$2["titleProblem"],
11335
+ className: !openProblem.problem4 ? styles$4["titleProblemClose"] : styles$4["titleProblem"],
10812
11336
  onClick: function onClick() {
10813
11337
  return changeOpen(_extends({}, openProblem, {
10814
11338
  problem4: !openProblem.problem4
@@ -10821,27 +11345,27 @@ function GradesByTerritory(_ref) {
10821
11345
  fontWeight: 700
10822
11346
  }
10823
11347
  }, "\uC601\uC5ED\uBCC4 \uC131\uC801"), openProblem.problem4 ? React__default.createElement(iconUpArrow, null) : React__default.createElement(iconDownArrow, null)), openProblem.problem4 && React__default.createElement("div", {
10824
- className: styles$2["wrappContentProblem"]
11348
+ className: styles$4["wrappContentProblem"]
10825
11349
  }, data.length && data.map(function (item) {
10826
11350
  return React__default.createElement("div", {
10827
- className: styles$2["contentProblem"],
11351
+ className: styles$4["contentProblem"],
10828
11352
  key: item.id
10829
11353
  }, React__default.createElement("div", {
10830
- className: styles$2["labelProblem"]
11354
+ className: styles$4["labelProblem"]
10831
11355
  }, React__default.createElement("span", {
10832
- className: styles$2["name"]
11356
+ className: styles$4["name"]
10833
11357
  }, item.name), React__default.createElement("div", {
10834
- className: styles$2["percent"]
11358
+ className: styles$4["percent"]
10835
11359
  }, React__default.createElement("span", null, item.percentageAmongStudents.toFixed(2), "%"), React__default.createElement("span", null, item.totalCorrectQuestions, "/", item.totalQuestions, "\uBB38\uC81C"))), React__default.createElement("div", {
10836
- className: styles$2["slider"]
11360
+ className: styles$4["slider"]
10837
11361
  }, React__default.createElement("span", {
10838
- className: styles$2["track"],
11362
+ className: styles$4["track"],
10839
11363
  style: {
10840
11364
  left: item.percentageAmongStudents + "%"
10841
11365
  }
10842
11366
  })));
10843
11367
  }), openProblem.problem4 && !data.length && React__default.createElement("div", {
10844
- className: styles$2["noData"]
11368
+ className: styles$4["noData"]
10845
11369
  }, "\uB370\uC774\uD130 \uC5C6\uC74C")));
10846
11370
  }
10847
11371
 
@@ -10934,7 +11458,7 @@ function CreateNewQuestionDialog$1(_ref) {
10934
11458
  var errors = _ref2.errors;
10935
11459
  return React__default.createElement(formik.Form, null, React__default.createElement("label", {
10936
11460
  htmlFor: "content-question",
10937
- className: styleGlobal['form-label'] + " " + styles$2['form-label-dialog']
11461
+ className: styles['form-label'] + " " + styles$4['form-label-dialog']
10938
11462
  }, "\uC9C8\uBB38 \uB0B4\uC6A9"), React__default.createElement(material.Box, {
10939
11463
  position: 'relative',
10940
11464
  display: 'flex',
@@ -10947,7 +11471,7 @@ function CreateNewQuestionDialog$1(_ref) {
10947
11471
  },
10948
11472
  name: "content",
10949
11473
  placeholder: "\uBB38\uC81C\uAC00 \uC5B4\uB824\uC6CC\uC694",
10950
- className: styleGlobal['form-control']
11474
+ className: styles['form-control']
10951
11475
  }), (errors === null || errors === void 0 ? void 0 : errors.content) && React__default.createElement(material.Box, {
10952
11476
  position: 'absolute',
10953
11477
  right: 0,
@@ -10969,14 +11493,14 @@ function CreateNewQuestionDialog$1(_ref) {
10969
11493
  padding: '12px'
10970
11494
  }
10971
11495
  }, React__default.createElement(Button, {
10972
- className: styles$2['btn-cancel'],
11496
+ className: styles$4['btn-cancel'],
10973
11497
  onClick: toggleCreateQuestion
10974
11498
  }, React__default.createElement(Typography, {
10975
11499
  fontWeight: 700,
10976
11500
  fontSize: '14px',
10977
11501
  lineHeight: '16.71px'
10978
11502
  }, "\uCDE8\uC18C")), React__default.createElement(Button, {
10979
- className: styles$2['btn-register'],
11503
+ className: styles$4['btn-register'],
10980
11504
  type: "submit"
10981
11505
  }, React__default.createElement(Typography, {
10982
11506
  fontWeight: 700,
@@ -10987,12 +11511,12 @@ function CreateNewQuestionDialog$1(_ref) {
10987
11511
  })));
10988
11512
  }
10989
11513
 
10990
- var _excluded$6 = ["children", "value", "index"];
11514
+ var _excluded$7 = ["children", "value", "index"];
10991
11515
  var CustomTabPanel = function CustomTabPanel(props) {
10992
11516
  var children = props.children,
10993
11517
  value = props.value,
10994
11518
  index = props.index,
10995
- other = _objectWithoutPropertiesLoose(props, _excluded$6);
11519
+ other = _objectWithoutPropertiesLoose(props, _excluded$7);
10996
11520
  return React__default.createElement("div", Object.assign({
10997
11521
  role: "tabpanel",
10998
11522
  hidden: value !== index,
@@ -11065,6 +11589,7 @@ var ExamResultV2 = function ExamResultV2(_ref) {
11065
11589
  var _useTab = useTab(),
11066
11590
  selected = _useTab.selected,
11067
11591
  handleChangeTab = _useTab.handleChangeTab;
11592
+ var isTabletUp = material.useMediaQuery('(min-width:900px)');
11068
11593
  return React__default.createElement(React.Fragment, null, timelyOrderQuestion[dataChartIndex] && longTimeSpend && resultDatas && effectSize ? React__default.createElement("div", {
11069
11594
  style: {
11070
11595
  width: "100%"
@@ -11162,7 +11687,28 @@ var ExamResultV2 = function ExamResultV2(_ref) {
11162
11687
  container: true,
11163
11688
  padding: "24px",
11164
11689
  className: "position-relative overflow-hidden"
11165
- }, React__default.createElement(material.Grid, {
11690
+ }, !isTabletUp && React__default.createElement(material.Grid, {
11691
+ item: true,
11692
+ xs: 12
11693
+ }, React__default.createElement(material.Box, {
11694
+ padding: "16px 24px",
11695
+ flexDirection: "row",
11696
+ justifyContent: "end",
11697
+ alignItems: "center",
11698
+ display: "flex",
11699
+ bgcolor: "#F9FAFB",
11700
+ borderTop: "1px solid #E4E7EC",
11701
+ borderBottom: "1px solid #E4E7EC"
11702
+ }, React__default.createElement(material.Stack, {
11703
+ padding: '12px 24px',
11704
+ alignItems: "end",
11705
+ bgcolor: "#F9FAFB"
11706
+ }, React__default.createElement("div", {
11707
+ className: styles$4["pdfBtnBox"]
11708
+ }, React__default.createElement("button", {
11709
+ className: styles$4["pdfBtn"] + " " + styles["truncate"],
11710
+ onClick: handleExportPdf
11711
+ }, React__default.createElement(iconPrintFill, null), React__default.createElement("p", null, t("print"))))))), React__default.createElement(material.Grid, {
11166
11712
  item: true,
11167
11713
  xs: 12
11168
11714
  }, React__default.createElement(material.Box, {
@@ -11182,7 +11728,7 @@ var ExamResultV2 = function ExamResultV2(_ref) {
11182
11728
  var label = _ref2.label,
11183
11729
  value = _ref2.value;
11184
11730
  return React__default.createElement(material.Button, {
11185
- className: styleGlobal["truncate"],
11731
+ className: styles["truncate"],
11186
11732
  disableTouchRipple: true,
11187
11733
  sx: {
11188
11734
  fontSize: "14px",
@@ -11195,14 +11741,14 @@ var ExamResultV2 = function ExamResultV2(_ref) {
11195
11741
  return handleChangeTab(value);
11196
11742
  }
11197
11743
  }, label);
11198
- })), React__default.createElement(material.Stack, {
11744
+ })), isTabletUp && React__default.createElement(material.Stack, {
11199
11745
  padding: '12px 24px',
11200
11746
  alignItems: "end",
11201
11747
  bgcolor: "#F9FAFB"
11202
11748
  }, React__default.createElement("div", {
11203
- className: styles$2["pdfBtnBox"]
11749
+ className: styles$4["pdfBtnBox"]
11204
11750
  }, React__default.createElement("button", {
11205
- className: styles$2["pdfBtn"] + " " + styleGlobal["truncate"],
11751
+ className: styles$4["pdfBtn"] + " " + styles["truncate"],
11206
11752
  onClick: handleExportPdf
11207
11753
  }, React__default.createElement(iconPrintFill, null), React__default.createElement("p", null, t("print"))))))), React__default.createElement(material.Grid, {
11208
11754
  item: true,
@@ -11218,18 +11764,18 @@ var ExamResultV2 = function ExamResultV2(_ref) {
11218
11764
  value: selected,
11219
11765
  index: 1
11220
11766
  }, React__default.createElement("div", {
11221
- className: styles$2["compareChart"]
11767
+ className: styles$4["compareChart"]
11222
11768
  }, React__default.createElement("div", {
11223
- className: styles$2["prevChart"] + " " + (dataChartIndex > 0 && "pointer"),
11769
+ className: styles$4["prevChart"] + " " + (dataChartIndex > 0 && "pointer"),
11224
11770
  onClick: handlePrevChart
11225
11771
  }, React__default.createElement(iconBtnPrevChart, null)), React__default.createElement("div", {
11226
- className: styles$2["chart"] + " sr-line-chart"
11772
+ className: styles$4["chart"] + " sr-line-chart"
11227
11773
  }, React__default.createElement("div", null, React__default.createElement(ReactApexChart, {
11228
11774
  height: 389,
11229
11775
  options: chartOptions,
11230
11776
  series: series
11231
11777
  }))), React__default.createElement("div", {
11232
- className: styles$2["nextChart"] + " " + (dataChartIndex < timelyOrderQuestion.length - 1 && "pointer"),
11778
+ className: styles$4["nextChart"] + " " + (dataChartIndex < timelyOrderQuestion.length - 1 && "pointer"),
11233
11779
  onClick: handleNextChart
11234
11780
  }, React__default.createElement(iconBtnNextChart, null)))), React__default.createElement(CustomTabPanel, {
11235
11781
  value: selected,
@@ -11264,39 +11810,70 @@ var ExamResultV2 = function ExamResultV2(_ref) {
11264
11810
  width: "100%"
11265
11811
  },
11266
11812
  id: "canvas"
11267
- }, React__default.createElement(CustomTabPanel, {
11268
- value: selected,
11269
- index: 0
11270
- }, React__default.createElement(MyAnswer, {
11813
+ }, React__default.createElement(material.Stack, {
11814
+ display: "flex",
11815
+ flexDirection: "column",
11816
+ gap: "12px"
11817
+ }, React__default.createElement(material.Typography, {
11818
+ sx: {
11819
+ fontSize: "16px",
11820
+ fontWeight: 700,
11821
+ color: "#414E62"
11822
+ }
11823
+ }, t(TabList[0].label)), React__default.createElement(MyAnswer, {
11271
11824
  data: resultDatas,
11272
11825
  categories: categoryResponses,
11273
11826
  isStudent: isStudent
11274
- })), React__default.createElement(CustomTabPanel, {
11275
- value: selected,
11276
- index: 1
11277
- }, React__default.createElement("div", {
11278
- className: styles$2["compareChart"]
11827
+ })), React__default.createElement(material.Stack, {
11828
+ display: "flex",
11829
+ flexDirection: "column",
11830
+ gap: "12px",
11831
+ marginTop: "24px"
11832
+ }, React__default.createElement(material.Typography, {
11833
+ sx: {
11834
+ fontSize: "16px",
11835
+ fontWeight: 700,
11836
+ color: "#414E62"
11837
+ }
11838
+ }, t(TabList[1].label)), React__default.createElement("div", {
11839
+ className: styles$4["compareChart"]
11279
11840
  }, React__default.createElement("div", {
11280
- className: styles$2["prevChart"] + " " + (dataChartIndex > 0 && "pointer"),
11841
+ className: styles$4["prevChart"] + " " + (dataChartIndex > 0 && "pointer"),
11281
11842
  onClick: handlePrevChart
11282
11843
  }, React__default.createElement(iconBtnPrevChart, null)), React__default.createElement("div", {
11283
- className: styles$2["chart"] + " sr-line-chart"
11844
+ className: styles$4["chart"] + " sr-line-chart"
11284
11845
  }, React__default.createElement("div", null, React__default.createElement(ReactApexChart, {
11285
11846
  height: 389,
11286
11847
  options: chartOptions,
11287
11848
  series: series
11288
11849
  }))), React__default.createElement("div", {
11289
- className: styles$2["nextChart"] + " " + (dataChartIndex < timelyOrderQuestion.length - 1 && "pointer"),
11850
+ className: styles$4["nextChart"] + " " + (dataChartIndex < timelyOrderQuestion.length - 1 && "pointer"),
11290
11851
  onClick: handleNextChart
11291
- }, React__default.createElement(iconBtnNextChart, null)))), React__default.createElement(CustomTabPanel, {
11292
- value: selected,
11293
- index: 2
11294
- }, React__default.createElement(CompareGrass, {
11852
+ }, React__default.createElement(iconBtnNextChart, null)))), React__default.createElement(material.Stack, {
11853
+ display: "flex",
11854
+ flexDirection: "column",
11855
+ gap: "12px",
11856
+ marginTop: "24px"
11857
+ }, React__default.createElement(material.Typography, {
11858
+ sx: {
11859
+ fontSize: "16px",
11860
+ fontWeight: 700,
11861
+ color: "#414E62"
11862
+ }
11863
+ }, t(TabList[2].label)), React__default.createElement(CompareGrass, {
11295
11864
  effectSize: effectSize
11296
- })), React__default.createElement(CustomTabPanel, {
11297
- value: selected,
11298
- index: 3
11299
- }, React__default.createElement(TrickyProblem, {
11865
+ })), React__default.createElement(material.Stack, {
11866
+ display: "flex",
11867
+ flexDirection: "column",
11868
+ gap: "12px",
11869
+ marginTop: "24px"
11870
+ }, React__default.createElement(material.Typography, {
11871
+ sx: {
11872
+ fontSize: "16px",
11873
+ fontWeight: 700,
11874
+ color: "#414E62"
11875
+ }
11876
+ }, t(TabList[3].label)), React__default.createElement(TrickyProblem, {
11300
11877
  data: resultDatas,
11301
11878
  openProblem: _extends({}, openProblem, {
11302
11879
  problem1: true
@@ -11362,6 +11939,101 @@ var times = {
11362
11939
  timeSpanToLocalMoment: timeSpanToLocalMoment
11363
11940
  };
11364
11941
 
11942
+ var Header = function Header(_ref) {
11943
+ var academyListRoute = _ref.academyListRoute,
11944
+ homeRoute = _ref.homeRoute,
11945
+ headerTabs = _ref.headerTabs,
11946
+ role = _ref.role,
11947
+ navigate = _ref.navigate,
11948
+ onSignOut = _ref.onSignOut;
11949
+ var _useTranslation = reactI18next.useTranslation(),
11950
+ t = _useTranslation.t;
11951
+ var location = reactRouterDom.useLocation();
11952
+ var theme = material.useTheme();
11953
+ var user = reactRedux.useSelector(function (state) {
11954
+ var _state$common;
11955
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
11956
+ });
11957
+ var isLargerThanXL = material.useMediaQuery(theme.breakpoints.up("xl"));
11958
+ var academyDomain = reactRedux.useSelector(function (state) {
11959
+ var _state$common2, _state$common2$user;
11960
+ return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : (_state$common2$user = _state$common2.user) === null || _state$common2$user === void 0 ? void 0 : _state$common2$user.academyDomain;
11961
+ });
11962
+ var pathname = location.pathname.toLowerCase();
11963
+ return React__default.createElement("div", {
11964
+ className: "col-sm-12 col-xl-12 " + styles["tabBox"] + " " + styles["headers"]
11965
+ }, React__default.createElement(reactRouterDom.Link, {
11966
+ "aria-current": "page",
11967
+ to: homeRoute.path,
11968
+ className: "border-none " + styles["logo-container"]
11969
+ }, React__default.createElement("img", {
11970
+ className: styles["logo"] + " d-none d-lg-block",
11971
+ src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKoAAABNCAYAAAA2N/+4AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAfmSURBVHgB7ZzLktvGFYbPaZBKNOWKmSpnG3GfVHm09UbUE5hDJ4usTD2BrU22op5gRvtUifI20Qz0BKKfINQThHbWqWA2li0SfXwamJFBEAABojkX6/+qKIq4dJPA36fPpTFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAatHrjXsEgAeY9kSnM54QyRNmWojwnJlD/fxmuZzOCYCG7EWolyIt2R1ptzMV8Ez//y2EC+rgXahbRFqEE65aXApF6M1qNZ0RADm8CnUHkZaQWNy5CvfVRx/RPIqmEYEPGm9C9SfSdZhlvFx+84LAB02HPBAE46mK9EvyjkwgUuBobVGdSNXq7UWkq9U3TwkAJaAW1BHpwcEn9Oc//Y0+/t0f6eDuH6jbPaDV6geydllxFkQK1tnZotYV6Wef/V0F+snGvqWK9Tz6byLa8/Pvk9fbt/+j6Pz7aRy/eEQAZNhJqG1FWoWQGZyd8bfkib8O3x0K8UaF7F9hd0Z7YKj9GTKH2W2WlrMwvLugHRkOpWcoHma36Y2LXoadkPZAk/6+OLKvhWSQ3VZ2D0fD1Ti/7TTsTKkGjYOpfYrUN3rB+zHbf2/sEJrqv7OK83oByxk1wBKf6M15ZSj4XO/qJLsvkO5Y3xajYXysFbrDJu2+PDMP9a2n6Y/n2e2i7elbpVCb9ici89MweFzV33C4GhriTzPb+/l2WOxY+x5cfrZknoUhR/k2L5hSDRoJ9TaJ1BEYOdZc7Bruggu92+b/9vJWYhtG7HTbMU40TdttQ9P+hGTrMSpSNxDH2bM2O87u13M4EWOrXHhtoWqe9HhbCuomidRNM2ohhvntum3SZhoG14Ope6CWNh+vVvx7PWWgQ2aim2Zqrd6PkpskUjd1E5uN4oOzpmHYQV72FtLQR51GqxU5J9m9kumz2x0fWsv3VKThTRCpwxj7taqyn9+uAUFvdGT/k9kwPz01RwVNRHr+hBoQk31Du5D6ywvaAyL2hStH1z6+xvewJK+McHKcMA94I5DiOYus+c5W6Jxa0roydbH6aX5w9x/lBzGHOuWeq1D2UBhYxwVQJLaglOsuru4j+SUDoGJ2wUFYGD3Ld9SIeCcfTNhMfWY5srhIvY7fmfk2W3/zxbVKrtdoFPfzzRuR6csweEae8VJC3Ya6CH0RtVwsn+oIbBT1NqUogHJY+ekh82+e5y2ABhzHKu5ZEpX+Qq8kQi3vVyP7vwyXfVsQBV8bbL6iBsEUC82Gw7cLTU0NamUuhQf5YCqmeC+DrraP2gYnTp2On4jwUWrZ9kNZAKVTTxJAicRPN7+bE5b1spjGsnmdj3hvG4buPKkzSJOZK5mh8ucHX2lq6rl7kUeuRKgJQmMV69gKu7zgfpbtlQZQQSLQUJP8UuCzafrka5eoJ1Cb1OoW4AbqxcvnNb2Sqf89Qk8M2ciKPDLMjRLq21B/aaI+Rn+jS01HrX/mR5oLdkWAtWoVc0fTb/SQyomoYoBZDiLWUOMWsCjbwWQiquvTGn6w7dCAggf65uUJjqsVqoPpWIOd+1aCieFmkXUZZQGU+qrzfDpKfVFXITrJV4+c76qB1Zdl6StXtTkLO1VCptFRTDcdLW+Oq4K32lN2gX+62Ze/eOTqpv5spxy8Jnr3Qn/JCXnA+b9F27UCVZR6Skp6VGAd1cqfJDnYHXE1buJ6JcGbSkDxM/0dw6pjyvzTDdiJ2Q9Xb1FTesx3Xlsx98MzfkwtGA6XA7HJRZtltztftKwC5SJ8dRWe6nmfb+51vlew03TlLFVS497bs73755/hnbkKMeKK31CUFVCXaqYulbOg2YHedwM/l1HZiesSahptpws/HlILwnQV1IwacnoaOGteaNFTi1FNanl/7AXU1Xq6uzl8z5JtlZpxbXbJpbhM37XnFnxcLBLZG5qO6neoo31yn4k/dr9FPe3q6l2Bf2pIQm2DNtN/5PzUV9SSaxOqI/UL4+Owxc24FAx547eFo98t8PhiZM/U7z1MiwZWX3fW7lcgPG6SXk8Qe6LVst5lm/HmWnbPQpVJ2p8bXOmAvAwBL777Qv9TLdSS/KmRQI0PDbLbWaz7fLuF6nCpIZ0uv1PLsZO/2qHVoVU3gnwhdqIWrehG9YpytG1Ri3NYO9L20V/L1VvpbGP7uc1RqC6D5rEPN1yChssay7iWYGoDzQQ4X5PAjacwfyppbtpSMMvv8lWJ9CZUtTazba+q8w2bM+cv0e1k4VJhceP1AdvarL5mnnEuj077W/p0/mkOFWNyjkv90WY2pTcayT1qibepn7ev0nF+0aBqv8sE6NRy30eU6BEnQk3mJ4taFpwkzE1kmRbu72qdnvKaONWNeVCjzbR4IDzPthnT8o0x3f/n2/RApj/r/jKN9mkW+htcdD+3ls6z17wymNxS31dffpZ3kdgmVrjV8kovQk2ehfGQvE8zAeQec6gdPa+oM+fqAdAIvQVOJJGWY/u7CMb5t5zLQmiwkiwBjNO1DrTDQIySHG32e8py69K5ffSnab9x3g/VYPh9Oi+2/FjFuhZv2PSaUr7NJnjJ+KVrPGskgGvg++E+8OugtY+aPlnoR6QAlNFaqMxm74uhAWglVOd0X+VTleDDpZVQyxaDAOCbVlG/iJkS+V0t5P6YLwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/Yn4G8GJySAUVr9kAAAAASUVORK5CYII=",
11972
+ alt: ""
11973
+ }), React__default.createElement("img", {
11974
+ className: styles["logo"] + " d-block d-lg-none",
11975
+ src: "/images/logo-sm.png",
11976
+ alt: ""
11977
+ })), React__default.createElement("div", {
11978
+ className: styles["routerBox"] + " d-flex flex-grow-1 flex-nowrap px-3"
11979
+ }, headerTabs.map(function (_ref2) {
11980
+ var path = _ref2.path,
11981
+ icon = _ref2.icon,
11982
+ label = _ref2.label,
11983
+ isMain = _ref2.isMain,
11984
+ activePaths = _ref2.activePaths;
11985
+ return React__default.createElement(reactRouterDom.Link, {
11986
+ key: path,
11987
+ "aria-current": "page",
11988
+ to: !academyDomain && !isMain ? "#" : path,
11989
+ className: "text-decoration-none " + ((activePaths !== null && activePaths !== void 0 && activePaths.length ? activePaths.some(function (a) {
11990
+ return pathname.startsWith(a);
11991
+ }) : pathname.startsWith(path)) ? styles["router-link-active"] + " " + styles["router-link-exact-active"] : "") + " " + styles["tabText"] + " " + (!academyDomain && !isMain ? styles["disabled-link"] : "")
11992
+ }, React__default.createElement(material.Stack, {
11993
+ sx: {
11994
+ justifyContent: "center",
11995
+ flexDirection: "row",
11996
+ alignItems: "center",
11997
+ textOverflow: "ellipsis",
11998
+ overflow: "hidden",
11999
+ display: "flex",
12000
+ flexWrap: "nowrap"
12001
+ }
12002
+ }, icon, React__default.createElement("span", {
12003
+ className: "text-nowrap"
12004
+ }, isLargerThanXL || headerTabs.length < 4 ? t(label) : ellipsisText(t(label), 4))));
12005
+ })), React__default.createElement(material.Stack, {
12006
+ direction: "row",
12007
+ alignItems: "center"
12008
+ }, React__default.createElement(material.Typography, {
12009
+ className: "fw-bold text-primary me-2 text-nowrap",
12010
+ sx: {
12011
+ maxWidth: "120px",
12012
+ overflow: "hidden",
12013
+ textOverflow: "ellipsis"
12014
+ }
12015
+ }, user === null || user === void 0 ? void 0 : user.fullName), React__default.createElement("div", null, React__default.createElement(TheAcademyDropdown, {
12016
+ homeAcademyUrl: academyListRoute.path,
12017
+ homeUrl: homeRoute.path,
12018
+ role: role,
12019
+ navigate: navigate,
12020
+ hideAcademyName: !isLargerThanXL && headerTabs.length > 6
12021
+ })), React__default.createElement("div", {
12022
+ className: "me-2"
12023
+ }, React__default.createElement(TheLanguageDropdown, null)), React__default.createElement("div", {
12024
+ className: styles["userImg"] + " d-none d-md-none d-lg-block",
12025
+ onClick: onSignOut
12026
+ }, React__default.createElement("p", {
12027
+ className: "text-nowrap mb-0"
12028
+ }, t("logout"))), React__default.createElement("div", {
12029
+ className: styles["userImg"] + " d-block d-md-block d-lg-none",
12030
+ onClick: onSignOut
12031
+ }, React__default.createElement(io.IoIosLogOut, {
12032
+ size: 24,
12033
+ color: "#959595"
12034
+ }))));
12035
+ };
12036
+
11365
12037
  exports.moment = moment;
11366
12038
  Object.defineProperty(exports, 'I18nextProvider', {
11367
12039
  enumerable: true,
@@ -11411,6 +12083,7 @@ exports.EXAM_STUDENT_CHANNEL = EXAM_STUDENT_CHANNEL;
11411
12083
  exports.Enums = index;
11412
12084
  exports.ExamDetailView = ExamDetailView;
11413
12085
  exports.ExamResultV2 = ExamResultV2;
12086
+ exports.Header = Header;
11414
12087
  exports.InputText = InputText;
11415
12088
  exports.LANGUAGES = LANGUAGES;
11416
12089
  exports.LayoutContext = LayoutContext;