touchstudy-core 0.1.113 → 0.1.115

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
@@ -1189,6 +1189,7 @@ var notify_share_exam = {
1189
1189
  update_fail: "업데이트 실패!"
1190
1190
  };
1191
1191
  var academy_admin_teacher = "아카데미 관리자/선생님";
1192
+ var academyadmin_teacher = "아카데미 관리자/선생님";
1192
1193
  var total_student = "총 학생 수";
1193
1194
  var total_teacher = "총 교사 수";
1194
1195
  var total_exam = "총 시험 수";
@@ -1352,6 +1353,7 @@ var delete_textbook_successfully = "교과서 삭제 성공";
1352
1353
  var information = "정보";
1353
1354
  var running_time = "진행 시간";
1354
1355
  var hours_mins_seconds = "{{hours}}시간 {{mins}}분 {{seconds}}초";
1356
+ var create_schedule_successfully = "일정을 성공적으로 생성했습니다";
1355
1357
  var prepared_textbook = "준비된 교과서";
1356
1358
  var enable_phone_pass_code = "전화 비밀번호 활성화";
1357
1359
  var custom = "관습";
@@ -1360,6 +1362,13 @@ var pass_code_is_invalid = "비밀번호가 유효하지 않습니다";
1360
1362
  var pass_code_length_must_be_n = "비밀번호 길이는 {{n}}이어야 합니다";
1361
1363
  var parent_phone_number_is_invalid = "부모 전화번호가 잘못되었습니다";
1362
1364
  var parent_phone_number_is_required = "부모 전화번호가 필요합니다";
1365
+ var update_schedule_successfully = "일정을 성공적으로 업데이트했습니다";
1366
+ var delete_schedule_successfully = "일정을 성공적으로 삭제했습니다";
1367
+ var group = "그룹";
1368
+ var update_schedule = "업데이트 일정";
1369
+ var back_month = "이전 달";
1370
+ var today_schedule = "오늘 스케줄";
1371
+ var schedule_achieved = "달성한 스케줄";
1363
1372
  var lang_ko = {
1364
1373
  problem_solving: problem_solving,
1365
1374
  my_story: my_story,
@@ -2191,6 +2200,7 @@ var lang_ko = {
2191
2200
  notify_share_textbook: notify_share_textbook,
2192
2201
  notify_share_exam: notify_share_exam,
2193
2202
  academy_admin_teacher: academy_admin_teacher,
2203
+ academyadmin_teacher: academyadmin_teacher,
2194
2204
  total_student: total_student,
2195
2205
  total_teacher: total_teacher,
2196
2206
  total_exam: total_exam,
@@ -2356,6 +2366,7 @@ var lang_ko = {
2356
2366
  information: information,
2357
2367
  running_time: running_time,
2358
2368
  hours_mins_seconds: hours_mins_seconds,
2369
+ create_schedule_successfully: create_schedule_successfully,
2359
2370
  prepared_textbook: prepared_textbook,
2360
2371
  enable_phone_pass_code: enable_phone_pass_code,
2361
2372
  custom: custom,
@@ -2363,7 +2374,14 @@ var lang_ko = {
2363
2374
  pass_code_is_invalid: pass_code_is_invalid,
2364
2375
  pass_code_length_must_be_n: pass_code_length_must_be_n,
2365
2376
  parent_phone_number_is_invalid: parent_phone_number_is_invalid,
2366
- parent_phone_number_is_required: parent_phone_number_is_required
2377
+ parent_phone_number_is_required: parent_phone_number_is_required,
2378
+ update_schedule_successfully: update_schedule_successfully,
2379
+ delete_schedule_successfully: delete_schedule_successfully,
2380
+ group: group,
2381
+ update_schedule: update_schedule,
2382
+ back_month: back_month,
2383
+ today_schedule: today_schedule,
2384
+ schedule_achieved: schedule_achieved
2367
2385
  };
2368
2386
 
2369
2387
  var problem_solving$1 = "Problem Solving";
@@ -2503,7 +2521,7 @@ var create_exam$1 = "Create exam";
2503
2521
  var back$1 = "Back";
2504
2522
  var date_format_exam$1 = "MMMM YYYY";
2505
2523
  var date_format$1 = "MMM. D. YYYY";
2506
- var day_month_format$1 = "DDDo MMM";
2524
+ var day_month_format$1 = "Do MMM";
2507
2525
  var date_time_format$1 = "HH:mm MMM. D YYYY ";
2508
2526
  var date_time_format_12h$1 = "MM-DD-YYYY HH:mm A";
2509
2527
  var full_date_time_format$1 = "MMM Do YYYY HH:mm:ss";
@@ -3277,14 +3295,15 @@ var chapter$1 = "Chapter";
3277
3295
  var chapter_number$1 = "Chapter {{number}}";
3278
3296
  var category_required$1 = "Category is required";
3279
3297
  var subject_required$1 = "Subject is required";
3280
- var academy_admin_teacher$1 = "Academy Admin Teacher";
3298
+ var academy_admin_teacher$1 = "Academy Admin/Teacher";
3299
+ var academyadmin_teacher$1 = "Academy Admin/Teacher";
3281
3300
  var date_required$1 = "Date is required";
3282
3301
  var start_time_required$1 = "Start time is required";
3283
3302
  var end_time_required$1 = "End time is required";
3284
3303
  var title_required$1 = "Title is required";
3285
3304
  var delete_schedule$1 = "Delete Schedule";
3286
3305
  var edit_schedule$1 = "Edit Schedule";
3287
- var are_you_sure_you_want_to_delete_the_schedule$1 = "are_you_sure_you_want_to_delete_the_schedule: {{name}}";
3306
+ var are_you_sure_you_want_to_delete_the_schedule$1 = "Are you sure you want to delete the schedule: {{name}}";
3288
3307
  var correct_answer_rate$1 = "Correct answer rate";
3289
3308
  var progress$1 = "Progress";
3290
3309
  var grammar$1 = "Grammar";
@@ -3377,6 +3396,7 @@ var delete_textbook_successfully$1 = "Delete the textbook successfully";
3377
3396
  var information$1 = "Information";
3378
3397
  var running_time$1 = "Running time";
3379
3398
  var hours_mins_seconds$1 = "{{hours}}h {{mins}}m {{seconds}}s";
3399
+ var create_schedule_successfully$1 = "Create schedule successfully";
3380
3400
  var prepared_textbook$1 = "Prepared Textbook";
3381
3401
  var enable_phone_pass_code$1 = "Enable phone pass code";
3382
3402
  var custom$1 = "Custom";
@@ -3386,6 +3406,13 @@ var pass_code_length_must_be_n$1 = "Pass code length must be {{n}}";
3386
3406
  var email_is_invalid = "Email is invalid";
3387
3407
  var parent_phone_number_is_invalid$1 = "Parent phone number is invalid";
3388
3408
  var parent_phone_number_is_required$1 = "Parent phone number is required";
3409
+ var update_schedule_successfully$1 = "Update schedule successfully";
3410
+ var delete_schedule_successfully$1 = "Delete schedule successfully";
3411
+ var group$1 = "Group";
3412
+ var update_schedule$1 = "Update Schedule";
3413
+ var back_month$1 = "Back Month";
3414
+ var today_schedule$1 = "Today's schedule";
3415
+ var schedule_achieved$1 = "Schedule achieved";
3389
3416
  var lang_en = {
3390
3417
  problem_solving: problem_solving$1,
3391
3418
  my_story: my_story$1,
@@ -4282,6 +4309,7 @@ var lang_en = {
4282
4309
  category_required: category_required$1,
4283
4310
  subject_required: subject_required$1,
4284
4311
  academy_admin_teacher: academy_admin_teacher$1,
4312
+ academyadmin_teacher: academyadmin_teacher$1,
4285
4313
  date_required: date_required$1,
4286
4314
  start_time_required: start_time_required$1,
4287
4315
  end_time_required: end_time_required$1,
@@ -4383,6 +4411,7 @@ var lang_en = {
4383
4411
  information: information$1,
4384
4412
  running_time: running_time$1,
4385
4413
  hours_mins_seconds: hours_mins_seconds$1,
4414
+ create_schedule_successfully: create_schedule_successfully$1,
4386
4415
  prepared_textbook: prepared_textbook$1,
4387
4416
  enable_phone_pass_code: enable_phone_pass_code$1,
4388
4417
  custom: custom$1,
@@ -4391,7 +4420,14 @@ var lang_en = {
4391
4420
  pass_code_length_must_be_n: pass_code_length_must_be_n$1,
4392
4421
  email_is_invalid: email_is_invalid,
4393
4422
  parent_phone_number_is_invalid: parent_phone_number_is_invalid$1,
4394
- parent_phone_number_is_required: parent_phone_number_is_required$1
4423
+ parent_phone_number_is_required: parent_phone_number_is_required$1,
4424
+ update_schedule_successfully: update_schedule_successfully$1,
4425
+ delete_schedule_successfully: delete_schedule_successfully$1,
4426
+ group: group$1,
4427
+ update_schedule: update_schedule$1,
4428
+ back_month: back_month$1,
4429
+ today_schedule: today_schedule$1,
4430
+ schedule_achieved: schedule_achieved$1
4395
4431
  };
4396
4432
 
4397
4433
  i18n__default.use(reactI18next.initReactI18next).init({
@@ -9189,74 +9225,7 @@ var ListView = function ListView(_ref) {
9189
9225
  }));
9190
9226
  };
9191
9227
 
9192
- var useVirtualListView = function useVirtualListView(props) {
9193
- var data = props.data,
9194
- loading = props.loading,
9195
- onLoadMore = props.onLoadMore;
9196
- var handleLoadMore = function handleLoadMore() {
9197
- if (loading) return;
9198
- onLoadMore === null || onLoadMore === void 0 ? void 0 : onLoadMore();
9199
- };
9200
- var onScroll = function onScroll(_ref) {
9201
- var scrollTop = _ref.scrollTop,
9202
- clientHeight = _ref.clientHeight,
9203
- scrollHeight = _ref.scrollHeight;
9204
- if (scrollTop + clientHeight >= scrollHeight - 100) {
9205
- handleLoadMore();
9206
- }
9207
- };
9208
- var rowCount = data.length + (loading ? 1 : 0);
9209
- return {
9210
- rowCount: rowCount,
9211
- onScroll: onScroll
9212
- };
9213
- };
9214
-
9215
- var cellMeasurerCache = new reactVirtualized.CellMeasurerCache({
9216
- fixedWidth: true,
9217
- defaultHeight: 50
9218
- });
9219
-
9220
- var VirtualListItem = function VirtualListItem(_ref) {
9221
- var isLoading = _ref.isLoading,
9222
- rowData = _ref.rowData,
9223
- style = _ref.style,
9224
- parent = _ref.parent,
9225
- index = _ref.index,
9226
- renderItem = _ref.renderItem,
9227
- loadingElement = _ref.loadingElement;
9228
- return React__default.createElement(reactVirtualized.CellMeasurer, {
9229
- cache: cellMeasurerCache,
9230
- columnIndex: 0,
9231
- rowIndex: index,
9232
- key: rowData === null || rowData === void 0 ? void 0 : rowData.id,
9233
- parent: parent
9234
- }, function (_ref2) {
9235
- var measure = _ref2.measure;
9236
- if (isLoading) {
9237
- if (loadingElement) return loadingElement;
9238
- return React__default.createElement("div", {
9239
- key: rowData === null || rowData === void 0 ? void 0 : rowData.id,
9240
- style: style
9241
- }, React__default.createElement(material.Box, {
9242
- p: 1,
9243
- className: "d-flex justify-content-center align-items-center w-100"
9244
- }, React__default.createElement(material.CircularProgress, {
9245
- size: 24,
9246
- sx: {
9247
- color: "#5d5d5b"
9248
- }
9249
- })));
9250
- }
9251
- return React__default.createElement("div", {
9252
- key: rowData === null || rowData === void 0 ? void 0 : rowData.id,
9253
- style: style,
9254
- ref: measure
9255
- }, renderItem(rowData, index));
9256
- });
9257
- };
9258
-
9259
- var VirtualEmptyItem = function VirtualEmptyItem(_ref) {
9228
+ var VirtualTableEmpty = function VirtualTableEmpty(_ref) {
9260
9229
  var emptyElement = _ref.emptyElement;
9261
9230
  var _useTranslation = reactI18next.useTranslation(),
9262
9231
  t = _useTranslation.t;
@@ -9269,186 +9238,70 @@ var VirtualEmptyItem = function VirtualEmptyItem(_ref) {
9269
9238
  var VirtualListView = function VirtualListView(props) {
9270
9239
  var data = props.data,
9271
9240
  containerProps = props.containerProps,
9272
- listHeight = props.listHeight,
9273
- _props$overscanRowCou = props.overscanRowCount,
9274
- overscanRowCount = _props$overscanRowCou === void 0 ? 5 : _props$overscanRowCou,
9275
9241
  renderItem = props.renderItem,
9276
9242
  emptyElement = props.emptyElement,
9277
- loadingElement = props.loadingElement;
9278
- var _useVirtualListView = useVirtualListView(props),
9279
- rowCount = _useVirtualListView.rowCount,
9280
- onScroll = _useVirtualListView.onScroll;
9281
- var rowRenderer = React.useCallback(function (props) {
9282
- var index = props.index;
9283
- var isLoading = index === data.length;
9284
- var rowData = isLoading ? undefined : data[index];
9285
- return React__default.createElement(VirtualListItem, Object.assign({}, props, {
9286
- rowData: rowData,
9287
- isLoading: isLoading,
9288
- renderItem: renderItem,
9289
- loadingElement: loadingElement
9290
- }));
9291
- }, [JSON.stringify(data)]);
9292
- var noRowsRenderer = React.useCallback(function () {
9293
- return React__default.createElement(VirtualEmptyItem, {
9294
- emptyElement: emptyElement
9295
- });
9296
- }, []);
9243
+ loading = props.loading,
9244
+ loadingElement = props.loadingElement,
9245
+ listHeight = props.listHeight;
9297
9246
  return React__default.createElement(material.Box, Object.assign({}, containerProps), React__default.createElement(reactVirtualized.AutoSizer, {
9298
9247
  disableHeight: !!listHeight
9299
9248
  }, function (_ref) {
9300
9249
  var width = _ref.width,
9301
9250
  height = _ref.height;
9302
- return React__default.createElement(reactVirtualized.List, {
9251
+ return React__default.createElement(material.Box, {
9303
9252
  width: width,
9304
- height: listHeight || height,
9305
- rowCount: rowCount,
9306
- rowHeight: cellMeasurerCache.rowHeight,
9307
- rowRenderer: rowRenderer,
9308
- deferredMeasurementCache: cellMeasurerCache,
9309
- overscanRowCount: overscanRowCount,
9310
- noRowsRenderer: noRowsRenderer,
9311
- onScroll: onScroll
9312
- });
9253
+ height: height,
9254
+ overflow: "auto"
9255
+ }, loading && React__default.createElement(React.Fragment, null, loadingElement != null ? loadingElement : React__default.createElement(material.Box, {
9256
+ p: 1,
9257
+ className: "d-flex justify-content-center align-items-center w-100"
9258
+ }, React__default.createElement(material.CircularProgress, {
9259
+ size: 24,
9260
+ sx: {
9261
+ color: "#5d5d5b"
9262
+ }
9263
+ }))), !loading && !data.length && React__default.createElement(VirtualTableEmpty, {
9264
+ emptyElement: emptyElement
9265
+ }), !loading && !!data.length && React__default.createElement(ListView, {
9266
+ data: data,
9267
+ render: renderItem
9268
+ }));
9313
9269
  }));
9314
9270
  };
9315
9271
 
9316
- var cellMeasurerCache$1 = new reactVirtualized.CellMeasurerCache({
9317
- defaultWidth: 100,
9318
- defaultHeight: 50
9319
- });
9320
-
9321
- var VirtualTableRowItem = function VirtualTableRowItem(_ref) {
9322
- var isLoading = _ref.isLoading,
9323
- style = _ref.style,
9324
- parent = _ref.parent,
9325
- rowIndex = _ref.rowIndex,
9326
- columnIndex = _ref.columnIndex,
9327
- renderItem = _ref.renderItem,
9328
- loadingElement = _ref.loadingElement;
9329
- return React__default.createElement(reactVirtualized.CellMeasurer, {
9330
- cache: cellMeasurerCache$1,
9331
- columnIndex: columnIndex,
9332
- rowIndex: rowIndex,
9333
- key: rowIndex + "-" + columnIndex,
9334
- parent: parent
9335
- }, function (_ref2) {
9336
- var measure = _ref2.measure;
9337
- if (isLoading) {
9338
- if (loadingElement) return loadingElement;
9339
- return React__default.createElement("div", {
9340
- style: style
9341
- }, React__default.createElement(material.Box, {
9342
- p: 1,
9343
- className: "d-flex justify-content-center align-items-center w-100"
9344
- }, React__default.createElement(material.CircularProgress, {
9345
- size: 24,
9346
- sx: {
9347
- color: "#5d5d5b"
9348
- }
9349
- })));
9350
- }
9351
- return React__default.createElement("div", {
9352
- style: style,
9353
- ref: measure
9354
- }, renderItem(rowIndex, columnIndex));
9355
- });
9356
- };
9357
-
9358
- var VirtualTableEmpty = function VirtualTableEmpty(_ref) {
9359
- var emptyElement = _ref.emptyElement;
9360
- var _useTranslation = reactI18next.useTranslation(),
9361
- t = _useTranslation.t;
9362
- if (emptyElement) return emptyElement;
9363
- return React__default.createElement(material.Box, null, React__default.createElement(material.Typography, {
9364
- className: "text-center text-muted"
9365
- }, t("no_data")));
9366
- };
9367
-
9368
- var _excluded$6 = ["data", "containerProps", "listHeight", "overscanRowCount", "renderItem", "emptyElement", "loadingElement", "fixedColumnCount", "fixedRowCount", "listWidth"];
9369
9272
  var VirtualTableView = function VirtualTableView(props) {
9370
9273
  var data = props.data,
9371
9274
  containerProps = props.containerProps,
9372
- listHeight = props.listHeight,
9373
- _props$overscanRowCou = props.overscanRowCount,
9374
- overscanRowCount = _props$overscanRowCou === void 0 ? 5 : _props$overscanRowCou,
9375
9275
  renderItem = props.renderItem,
9376
9276
  emptyElement = props.emptyElement,
9377
- loadingElement = props.loadingElement,
9378
- fixedColumnCount = props.fixedColumnCount,
9379
- fixedRowCount = props.fixedRowCount,
9380
- listWidth = props.listWidth,
9381
- rest = _objectWithoutPropertiesLoose(props, _excluded$6);
9382
- var columnCount = props.columnCount;
9383
- var _useVirtualListView = useVirtualListView(props),
9384
- rowCount = _useVirtualListView.rowCount,
9385
- onScroll = _useVirtualListView.onScroll;
9386
- var _useState = React.useState(false),
9387
- renderedColumnWidth = _useState[0],
9388
- setRenderedColumnWidth = _useState[1];
9277
+ columnCount = props.columnCount,
9278
+ loading = props.loading,
9279
+ loadingElement = props.loadingElement;
9389
9280
  var containerRef = React.useRef(null);
9390
- var listRef = React.useRef(null);
9391
- var cellRenderer = React.useCallback(function (props) {
9392
- var rowIndex = props.rowIndex;
9393
- var isLoading = rowIndex === data.length;
9394
- return React__default.createElement(VirtualTableRowItem, Object.assign({}, props, {
9395
- isLoading: isLoading,
9396
- renderItem: renderItem,
9397
- loadingElement: loadingElement
9281
+ var renderTableRow = function renderTableRow(_, index) {
9282
+ return React__default.createElement(material.Stack, {
9283
+ direction: "row"
9284
+ }, Array.from({
9285
+ length: columnCount
9286
+ }, function (_, colIndex) {
9287
+ return renderItem(index, colIndex);
9398
9288
  }));
9399
- }, [JSON.stringify(data)]);
9400
- var noRowsRenderer = React.useCallback(function () {
9401
- return React__default.createElement(VirtualTableEmpty, {
9402
- emptyElement: emptyElement
9403
- });
9404
- }, []);
9405
- var onSectionRendered = function onSectionRendered(_) {
9406
- setRenderedColumnWidth(true);
9407
- };
9408
- var columnWidth = React.useCallback(function (params) {
9409
- var _containerRef$current, _containerRef$current2;
9410
- var index = params.index;
9411
- var cWidth = cellMeasurerCache$1.columnWidth(params);
9412
- if (listWidth) return cWidth;
9413
- var totalWidths = columnCount * cWidth;
9414
- var w = cWidth;
9415
- if ((_containerRef$current = containerRef.current) !== null && _containerRef$current !== void 0 && _containerRef$current.offsetWidth && totalWidths < ((_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 ? void 0 : _containerRef$current2.offsetWidth) && index === columnCount - 1) {
9416
- var _containerRef$current3;
9417
- w = Math.max(cWidth, ((_containerRef$current3 = containerRef.current) === null || _containerRef$current3 === void 0 ? void 0 : _containerRef$current3.offsetWidth) - (columnCount - 1) * cWidth);
9418
- }
9419
- return w;
9420
- }, [columnCount]);
9421
- React.useEffect(function () {
9422
- if (renderedColumnWidth && listRef.current) {
9423
- listRef.current.forceUpdateGrids();
9424
- }
9425
- }, [renderedColumnWidth]);
9289
+ };
9426
9290
  return React__default.createElement(material.Box, Object.assign({
9427
9291
  ref: containerRef
9428
- }, containerProps), React__default.createElement(reactVirtualized.AutoSizer, {
9429
- disableWidth: !!listWidth,
9430
- disableHeight: !!listHeight
9431
- }, function (_ref) {
9432
- var width = _ref.width,
9433
- height = _ref.height;
9434
- return React__default.createElement(reactVirtualized.MultiGrid, Object.assign({
9435
- ref: listRef,
9436
- fixedRowCount: fixedRowCount,
9437
- fixedColumnCount: fixedColumnCount,
9438
- cellRenderer: cellRenderer,
9439
- enableFixedColumnScroll: !!fixedColumnCount && fixedColumnCount > 0,
9440
- enableFixedRowScroll: !!fixedRowCount && fixedRowCount > 0,
9441
- columnWidth: columnWidth,
9442
- height: listHeight || height,
9443
- rowHeight: cellMeasurerCache$1.rowHeight,
9444
- deferredMeasurementCache: cellMeasurerCache$1,
9445
- rowCount: rowCount,
9446
- width: listWidth || width,
9447
- overscanRowCount: overscanRowCount,
9448
- noRowsRenderer: noRowsRenderer,
9449
- onScroll: onScroll,
9450
- onSectionRendered: onSectionRendered
9451
- }, rest));
9292
+ }, containerProps), loading && React__default.createElement(React.Fragment, null, loadingElement != null ? loadingElement : React__default.createElement(material.Box, {
9293
+ p: 1,
9294
+ className: "d-flex justify-content-center align-items-center w-100"
9295
+ }, React__default.createElement(material.CircularProgress, {
9296
+ size: 24,
9297
+ sx: {
9298
+ color: "#5d5d5b"
9299
+ }
9300
+ }))), !loading && !data.length && React__default.createElement(VirtualTableEmpty, {
9301
+ emptyElement: emptyElement
9302
+ }), !loading && !!data.length && React__default.createElement(ListView, {
9303
+ data: data,
9304
+ render: renderTableRow
9452
9305
  }));
9453
9306
  };
9454
9307
 
@@ -10683,6 +10536,7 @@ var useLogiQRCode = function useLogiQRCode(props) {
10683
10536
  var _useState8 = React.useState(false),
10684
10537
  error = _useState8[0],
10685
10538
  setError = _useState8[1];
10539
+ var firstLoadRef = React.useRef(true);
10686
10540
  var onVerify = React.useCallback(function (token) {
10687
10541
  setTokenReCaptcha(token);
10688
10542
  }, []);
@@ -10692,9 +10546,11 @@ var useLogiQRCode = function useLogiQRCode(props) {
10692
10546
  setRefreshReCaptcha(function (b) {
10693
10547
  return !b;
10694
10548
  });
10549
+ firstLoadRef.current = false;
10695
10550
  setLoadingQR(false);
10696
10551
  };
10697
- if (!tokenReCaptcha || !!(qrCodeData !== null && qrCodeData !== void 0 && qrCodeData.key) || error) return Promise.resolve();
10552
+ if (!tokenReCaptcha) return Promise.resolve();
10553
+ resetData();
10698
10554
  setLoadingQR(true);
10699
10555
  if (!academyDomain) localStorage.setItem(LEARNING_SPACE, "true");
10700
10556
  var _temp = _catch(function () {
@@ -10729,8 +10585,8 @@ var useLogiQRCode = function useLogiQRCode(props) {
10729
10585
  }
10730
10586
  };
10731
10587
  React.useEffect(function () {
10732
- getQRCodeDataLogin();
10733
- }, [academyDomain, tokenReCaptcha, qrCodeData === null || qrCodeData === void 0 ? void 0 : qrCodeData.key]);
10588
+ if (firstLoadRef.current) getQRCodeDataLogin();
10589
+ }, [academyDomain, tokenReCaptcha]);
10734
10590
  React.useEffect(function () {
10735
10591
  if (qrCodeData !== null && qrCodeData !== void 0 && qrCodeData.key) {
10736
10592
  if (pusher.current) pusher.current.disconnect();
@@ -10768,9 +10624,8 @@ var useLogiQRCode = function useLogiQRCode(props) {
10768
10624
  var redirectUrl = needToRegister ? registerUrl : isAcademy ? homeAcademyUrl : homeUrl;
10769
10625
  redirectLoginUser(user, token, redirectUrl);
10770
10626
  });
10771
- }, function (error) {
10627
+ }, function () {
10772
10628
  setInvalid(true);
10773
- reactToastify.toast.error(getErrorMessage(t, error));
10774
10629
  });
10775
10630
  return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
10776
10631
  } catch (e) {
@@ -10799,7 +10654,7 @@ var useLogiQRCode = function useLogiQRCode(props) {
10799
10654
  setError(false);
10800
10655
  };
10801
10656
  var handleGenerateNewAQRCode = function handleGenerateNewAQRCode() {
10802
- resetData();
10657
+ getQRCodeDataLogin();
10803
10658
  };
10804
10659
  return {
10805
10660
  t: t,
@@ -10911,10 +10766,10 @@ var LoginQRCode = function LoginQRCode(props) {
10911
10766
  }));
10912
10767
  };
10913
10768
 
10914
- var _excluded$7 = ["history"];
10769
+ var _excluded$6 = ["history"];
10915
10770
  var Login = function Login(_ref) {
10916
10771
  var history = _ref.history,
10917
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
10772
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
10918
10773
  var _useLogin = useLogin$1({
10919
10774
  homeAcademyUrl: rest.homeAcademyUrl,
10920
10775
  homeUrl: rest.homeUrl,
@@ -11864,11 +11719,11 @@ var DEFAULT_USER_FILTERS = {
11864
11719
 
11865
11720
  var styles$2 = {"avatar":"_2rJkZ","date-picker":"_1iqE2","time-picker":"_20xtc","teacher-selector-wrapper":"_3L1Oj"};
11866
11721
 
11867
- var _excluded$8 = ["teachers", "value"];
11722
+ var _excluded$7 = ["teachers", "value"];
11868
11723
  var TeacherSelector = function TeacherSelector(_ref) {
11869
11724
  var teachers = _ref.teachers,
11870
11725
  value = _ref.value,
11871
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
11726
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
11872
11727
  var teacherOptions = teachers.map(function (i) {
11873
11728
  return {
11874
11729
  label: i.teacherName + "/" + i.teacherEmail,
@@ -11896,7 +11751,7 @@ var ErrorHandler = function ErrorHandler(_ref) {
11896
11751
  var ClassForm = function ClassForm(_ref) {
11897
11752
  var history = _ref.history,
11898
11753
  formikProp = _ref.formikProp,
11899
- id = _ref.id,
11754
+ classId = _ref.classId,
11900
11755
  data = _ref.data,
11901
11756
  teachers = _ref.teachers,
11902
11757
  disabled = _ref.disabled,
@@ -12261,7 +12116,7 @@ var ClassForm = function ClassForm(_ref) {
12261
12116
  formikProp.handleSubmit();
12262
12117
  },
12263
12118
  disabled: disabled
12264
- }, !id ? t("create_and_continue") : t("save_and_exit")), React__default.createElement(material.Button, {
12119
+ }, !classId ? t("create_and_continue") : t("save_and_exit")), React__default.createElement(material.Button, {
12265
12120
  color: "secondary",
12266
12121
  className: "bg-secondary",
12267
12122
  variant: "contained",
@@ -13159,14 +13014,15 @@ var useTeacherList = function useTeacherList() {
13159
13014
  };
13160
13015
  };
13161
13016
 
13162
- var _excluded$9 = ["getStudents"],
13017
+ var _excluded$8 = ["getStudents"],
13163
13018
  _excluded2 = ["getTeachers"],
13164
13019
  _excluded3 = ["getLessons"];
13165
13020
  var PAGE_TITLE$4 = "classes";
13166
13021
  var useClassDetail = function useClassDetail(_ref) {
13167
13022
  var history = _ref.history,
13168
- id = _ref.id,
13169
- role = _ref.role;
13023
+ classId = _ref.classId,
13024
+ role = _ref.role,
13025
+ classListUrl = _ref.classListUrl;
13170
13026
  var _useTranslation = reactI18next.useTranslation(),
13171
13027
  t = _useTranslation.t;
13172
13028
  var dispatch = reactRedux.useDispatch();
@@ -13177,8 +13033,11 @@ var useClassDetail = function useClassDetail(_ref) {
13177
13033
  });
13178
13034
  var roles = (user === null || user === void 0 ? void 0 : user.roles) || [];
13179
13035
  var isOneRoleExists = roles.length === 1;
13180
- var isAdmin = roles.includes(exports.Role.Admin) && role === exports.Role.Admin;
13181
- var isTeacher = roles.includes(exports.Role.Teacher) && !roles.includes(exports.Role.Admin) && role === exports.Role.Teacher;
13036
+ var isAdmin = roles.includes(exports.Role.Admin);
13037
+ var isTeacher = roles.includes(exports.Role.Teacher) && !isAdmin;
13038
+ var isSuperAdmin = user === null || user === void 0 ? void 0 : user.isSuperAdmin;
13039
+ var isteacherSite = role === exports.Role.Teacher;
13040
+ var isDisabled = isAdmin && !isSuperAdmin && isteacherSite || isTeacher;
13182
13041
  var _useState = React.useState(),
13183
13042
  course = _useState[0],
13184
13043
  setCourse = _useState[1];
@@ -13204,13 +13063,13 @@ var useClassDetail = function useClassDetail(_ref) {
13204
13063
  var isSelected = function isSelected(id) {
13205
13064
  return selected.indexOf(id) !== -1;
13206
13065
  };
13207
- var _useStudentClassList = useStudentClassList(id ? +id : 0),
13066
+ var _useStudentClassList = useStudentClassList(classId),
13208
13067
  getStudents = _useStudentClassList.getStudents,
13209
- studentListProps = _objectWithoutPropertiesLoose(_useStudentClassList, _excluded$9);
13210
- var _useTeacherClassList = useTeacherClassList(id ? +id : 0),
13068
+ studentListProps = _objectWithoutPropertiesLoose(_useStudentClassList, _excluded$8);
13069
+ var _useTeacherClassList = useTeacherClassList(classId),
13211
13070
  getTeachers = _useTeacherClassList.getTeachers,
13212
13071
  teacherListProps = _objectWithoutPropertiesLoose(_useTeacherClassList, _excluded2);
13213
- var _useLessonClassList = useLessonClassList(id ? +id : 0),
13072
+ var _useLessonClassList = useLessonClassList(classId),
13214
13073
  getLessons = _useLessonClassList.getLessons,
13215
13074
  lessonListProps = _objectWithoutPropertiesLoose(_useLessonClassList, _excluded3);
13216
13075
  var selectedLesson = lessonListProps.selectedLesson,
@@ -13234,12 +13093,10 @@ var useClassDetail = function useClassDetail(_ref) {
13234
13093
  isLoading && dispatch(setLoading(false));
13235
13094
  };
13236
13095
  var _exit = false;
13237
- if (!id) return Promise.resolve();
13238
- var idNumber = +id;
13239
- if (isNaN(idNumber)) return Promise.resolve();
13096
+ if (!classId) return Promise.resolve();
13240
13097
  isLoading && dispatch(setLoading(true));
13241
13098
  var _temp = _catch(function () {
13242
- return Promise.resolve(getClassByIdApi(idNumber)).then(function (res) {
13099
+ return Promise.resolve(getClassByIdApi(classId)).then(function (res) {
13243
13100
  var classData = res.data;
13244
13101
  if (!classData) {
13245
13102
  reactToastify.toast.error(t("get_class_detail_error"));
@@ -13356,22 +13213,22 @@ var useClassDetail = function useClassDetail(_ref) {
13356
13213
  var _temp12 = function _temp12() {
13357
13214
  dispatch(setLoading(false));
13358
13215
  };
13359
- if (!id || !openSelectDialog) return Promise.resolve();
13216
+ if (!classId || !openSelectDialog) return Promise.resolve();
13360
13217
  dispatch(setLoading(true));
13361
13218
  var _temp11 = _catch(function () {
13362
13219
  function _temp10() {
13363
13220
  return Promise.resolve(handleGetDetailData(false)).then(function () {
13364
- reactToastify.toast.success(t(id ? "update_class_successfully" : "create_class_successfully"));
13221
+ reactToastify.toast.success(t(classId ? "update_class_successfully" : "create_class_successfully"));
13365
13222
  handleCloseSelectDialog();
13366
13223
  });
13367
13224
  }
13368
13225
  var _temp9 = function () {
13369
13226
  if (openSelectDialog === "Student") {
13370
- return Promise.resolve(addStudentToClass(+id, userIds)).then(function () {
13227
+ return Promise.resolve(addStudentToClass(classId, userIds)).then(function () {
13371
13228
  return Promise.resolve(getStudents()).then(function () {});
13372
13229
  });
13373
13230
  } else {
13374
- return Promise.resolve(addTeacherToClass(+id, userIds)).then(function () {
13231
+ return Promise.resolve(addTeacherToClass(classId, userIds)).then(function () {
13375
13232
  return Promise.resolve(getTeachers()).then(function () {});
13376
13233
  });
13377
13234
  }
@@ -13406,16 +13263,16 @@ var useClassDetail = function useClassDetail(_ref) {
13406
13263
  dispatch(setLoading(true));
13407
13264
  var _temp15 = _catch(function () {
13408
13265
  function _temp14() {
13409
- reactToastify.toast.success(t(id ? "update_class_successfully" : "create_class_successfully"));
13266
+ reactToastify.toast.success(t(classId ? "update_class_successfully" : "create_class_successfully"));
13410
13267
  }
13411
13268
  var _temp13 = function () {
13412
- if (!id) {
13269
+ if (!classId) {
13413
13270
  return Promise.resolve(createClassApi(body)).then(function (res) {
13414
- pushTo(history, "/classes/" + res.data.id);
13271
+ pushTo(history, classListUrl + "/" + res.data.id);
13415
13272
  });
13416
13273
  } else {
13417
- return Promise.resolve(updateClassApi(+id, body)).then(function () {
13418
- pushTo(history, "/classes");
13274
+ return Promise.resolve(updateClassApi(classId, body)).then(function () {
13275
+ pushTo(history, classListUrl);
13419
13276
  });
13420
13277
  }
13421
13278
  }();
@@ -13430,10 +13287,10 @@ var useClassDetail = function useClassDetail(_ref) {
13430
13287
  };
13431
13288
  var getStudentNotInClassList = function getStudentNotInClassList() {
13432
13289
  try {
13433
- if (!id) return Promise.resolve();
13290
+ if (!classId) return Promise.resolve();
13434
13291
  var _temp17 = _catch(function () {
13435
13292
  var _textSearchRef$curren;
13436
- return Promise.resolve(getStudentClassApi(+id, _extends({}, filter, {
13293
+ return Promise.resolve(getStudentClassApi(classId, _extends({}, filter, {
13437
13294
  textSearch: (_textSearchRef$curren = textSearchRef.current) === null || _textSearchRef$curren === void 0 ? void 0 : _textSearchRef$curren.value,
13438
13295
  isInCourse: false
13439
13296
  }))).then(function (res) {
@@ -13469,10 +13326,10 @@ var useClassDetail = function useClassDetail(_ref) {
13469
13326
  };
13470
13327
  var getTeacherNotInClassList = function getTeacherNotInClassList() {
13471
13328
  try {
13472
- if (!id) return Promise.resolve();
13329
+ if (!classId) return Promise.resolve();
13473
13330
  var _temp18 = _catch(function () {
13474
13331
  var _textSearchRef$curren2;
13475
- return Promise.resolve(getTeacherClassApi(+id, _extends({}, filter, {
13332
+ return Promise.resolve(getTeacherClassApi(classId, _extends({}, filter, {
13476
13333
  textSearch: (_textSearchRef$curren2 = textSearchRef.current) === null || _textSearchRef$curren2 === void 0 ? void 0 : _textSearchRef$curren2.value,
13477
13334
  isInCourse: false
13478
13335
  }))).then(function (res) {
@@ -13588,7 +13445,7 @@ var useClassDetail = function useClassDetail(_ref) {
13588
13445
  };
13589
13446
  React.useEffect(function () {
13590
13447
  handleGetDetailData();
13591
- }, [id]);
13448
+ }, [classId]);
13592
13449
  React.useEffect(function () {
13593
13450
  handleFetchUsers();
13594
13451
  }, [JSON.stringify(filter)]);
@@ -13596,9 +13453,9 @@ var useClassDetail = function useClassDetail(_ref) {
13596
13453
  document.title = t("study_peak") + " | " + t(PAGE_TITLE$4);
13597
13454
  }, [t]);
13598
13455
  return {
13599
- id: id,
13456
+ classId: classId,
13600
13457
  schema: schema,
13601
- isAdmin: isAdmin,
13458
+ isDisabled: isDisabled,
13602
13459
  paging: paging,
13603
13460
  filter: filter,
13604
13461
  isTeacher: isTeacher,
@@ -13958,12 +13815,12 @@ var LessonList = function LessonList(_ref) {
13958
13815
  }));
13959
13816
  };
13960
13817
 
13961
- var _excluded$a = ["children", "value", "index"];
13818
+ var _excluded$9 = ["children", "value", "index"];
13962
13819
  var CustomTabPanel = function CustomTabPanel(props) {
13963
13820
  var children = props.children,
13964
13821
  value = props.value,
13965
13822
  index = props.index,
13966
- other = _objectWithoutPropertiesLoose(props, _excluded$a);
13823
+ other = _objectWithoutPropertiesLoose(props, _excluded$9);
13967
13824
  return React__default.createElement("div", Object.assign({
13968
13825
  role: "tabpanel",
13969
13826
  hidden: value !== index,
@@ -13990,15 +13847,17 @@ var ClassDetail = function ClassDetail(_ref) {
13990
13847
  history = _ref.history,
13991
13848
  classListUrl = _ref.classListUrl,
13992
13849
  role = _ref.role;
13850
+ var classId = !id || Number.isNaN(+id) ? 0 : +id;
13993
13851
  var _useClassDetail = useClassDetail({
13994
13852
  history: history,
13995
- id: id,
13996
- role: role
13853
+ classId: classId,
13854
+ role: role,
13855
+ classListUrl: classListUrl
13997
13856
  }),
13998
13857
  schema = _useClassDetail.schema,
13999
13858
  paging = _useClassDetail.paging,
14000
- isAdmin = _useClassDetail.isAdmin,
14001
13859
  isTeacher = _useClassDetail.isTeacher,
13860
+ isDisabled = _useClassDetail.isDisabled,
14002
13861
  filter = _useClassDetail.filter,
14003
13862
  listUserSelected = _useClassDetail.listUserSelected,
14004
13863
  userList = _useClassDetail.userList,
@@ -14048,7 +13907,7 @@ var ClassDetail = function ClassDetail(_ref) {
14048
13907
  if (selected === TabList$1[1].value) studentListProps.resetData();
14049
13908
  if (selected === TabList$1[2].value) studentListProps.resetData();
14050
13909
  }, [selected]);
14051
- return React__default.createElement(material.Box, null, !!id && React__default.createElement(material.Box, null, React__default.createElement(material.Stack, {
13910
+ return React__default.createElement(material.Box, null, !!classId && React__default.createElement(material.Box, null, React__default.createElement(material.Stack, {
14052
13911
  display: "flex",
14053
13912
  flexDirection: "row",
14054
13913
  gap: "8px"
@@ -14078,12 +13937,12 @@ var ClassDetail = function ClassDetail(_ref) {
14078
13937
  direction: "row",
14079
13938
  alignItems: "center",
14080
13939
  justifyContent: "space-between",
14081
- mt: !!id ? 2 : 0,
13940
+ mt: classId ? 2 : 0,
14082
13941
  mb: 2,
14083
- pt: !!id ? "12px" : "0px"
13942
+ pt: classId ? "12px" : "0px"
14084
13943
  }, React__default.createElement(material.Typography, {
14085
13944
  variant: "h4"
14086
- }, t(!id ? "create_class" : isAdmin ? "update_class" : "view_class"))), React__default.createElement(formik.Formik, {
13945
+ }, t(!classId ? "create_class" : !isDisabled ? "update_class" : "view_class"))), React__default.createElement(formik.Formik, {
14087
13946
  initialValues: DEFAULT_CLASS_REQUEST,
14088
13947
  validationSchema: schema,
14089
13948
  onSubmit: handleSubmit
@@ -14091,30 +13950,30 @@ var ClassDetail = function ClassDetail(_ref) {
14091
13950
  return React__default.createElement(ClassForm, {
14092
13951
  classListUrl: classListUrl,
14093
13952
  history: history,
14094
- id: id,
13953
+ classId: classId,
14095
13954
  formikProp: props,
14096
13955
  data: classRequest,
14097
13956
  teachers: teacherOptions,
14098
- disabled: !isAdmin,
13957
+ disabled: isDisabled,
14099
13958
  onSearchTeachers: handleChangeTextSearchTeachers
14100
13959
  });
14101
13960
  })), React__default.createElement(CustomTabPanel, {
14102
13961
  value: selected,
14103
13962
  index: TabList$1[1].value
14104
- }, !!id && !Number.isNaN(+id) && selected === TabList$1[1].value && React__default.createElement(StudentList, Object.assign({
14105
- disabled: !isTeacher && !isAdmin,
13963
+ }, !!classId && selected === TabList$1[1].value && React__default.createElement(StudentList, Object.assign({
13964
+ disabled: isDisabled && !isTeacher,
14106
13965
  onAdd: handleOpenSelectDialog
14107
13966
  }, studentListProps))), React__default.createElement(CustomTabPanel, {
14108
13967
  value: selected,
14109
13968
  index: TabList$1[2].value
14110
- }, !!id && !Number.isNaN(+id) && selected === TabList$1[2].value && React__default.createElement(TeacherList, Object.assign({
14111
- disabled: !isAdmin,
13969
+ }, !!classId && selected === TabList$1[2].value && React__default.createElement(TeacherList, Object.assign({
13970
+ disabled: isDisabled,
14112
13971
  onAdd: handleOpenSelectDialog
14113
13972
  }, teacherListProps))), React__default.createElement(CustomTabPanel, {
14114
13973
  value: selected,
14115
13974
  index: TabList$1[3].value
14116
- }, !!id && !Number.isNaN(+id) && selected === TabList$1[3].value && React__default.createElement(LessonList, Object.assign({
14117
- disabled: !isAdmin,
13975
+ }, !!classId && selected === TabList$1[3].value && React__default.createElement(LessonList, Object.assign({
13976
+ disabled: isDisabled,
14118
13977
  startDate: course === null || course === void 0 ? void 0 : course.startDate,
14119
13978
  endDate: course === null || course === void 0 ? void 0 : course.endDate
14120
13979
  }, lessonListProps, {
@@ -14122,7 +13981,7 @@ var ClassDetail = function ClassDetail(_ref) {
14122
13981
  handleDeleteLessonClass: handleDeleteLessonClass,
14123
13982
  teachers: teacherOptions,
14124
13983
  onSearchTeachers: handleChangeTextSearchTeachers
14125
- }))), (isAdmin || openSelectDialog === "Student") && React__default.createElement(SelectDialog, {
13984
+ }))), (!isDisabled && !isTeacher || openSelectDialog === "Student") && React__default.createElement(SelectDialog, {
14126
13985
  open: !!openSelectDialog,
14127
13986
  isStudent: openSelectDialog === "Student",
14128
13987
  onClose: handleCloseSelectDialog,
@@ -14288,6 +14147,10 @@ var ClassList = function ClassList(_ref) {
14288
14147
  role = _ref.role,
14289
14148
  classCreateUrl = _ref.classCreateUrl,
14290
14149
  classUpdateUrl = _ref.classUpdateUrl;
14150
+ var isSuperAdmin = reactRedux.useSelector(function (state) {
14151
+ var _state$common, _state$common$user;
14152
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : (_state$common$user = _state$common.user) === null || _state$common$user === void 0 ? void 0 : _state$common$user.isSuperAdmin;
14153
+ });
14291
14154
  var isAdmin = role === exports.Role.Admin;
14292
14155
  var _useClassList = useClassList(history, classCreateUrl, classUpdateUrl),
14293
14156
  t = _useClassList.t,
@@ -14311,7 +14174,7 @@ var ClassList = function ClassList(_ref) {
14311
14174
  mb: 2
14312
14175
  }, React__default.createElement(material.Typography, {
14313
14176
  variant: "h4"
14314
- }, t("classes")), isAdmin && React__default.createElement(MButton, {
14177
+ }, t("classes")), (isAdmin || isSuperAdmin) && React__default.createElement(MButton, {
14315
14178
  variant: "contained",
14316
14179
  color: "inherit",
14317
14180
  startIcon: React__default.createElement(fa.FaPlus, {
@@ -14351,7 +14214,7 @@ var ClassList = function ClassList(_ref) {
14351
14214
  key: i.id
14352
14215
  }, React__default.createElement(TableCell, null, (paging.page - 1) * paging.limit + index + 1), React__default.createElement(TableCell, {
14353
14216
  className: "text-nowrap"
14354
- }, i.name), React__default.createElement(TableCell, null, toLocalTime(i.startDate, t("date_format"))), React__default.createElement(TableCell, null, toLocalTime(i.endDate, t("date_format"))), React__default.createElement(TableCell, null, i.totalStudents), React__default.createElement(TableCell, null, i.totalTeachers), React__default.createElement(TableCell, null, i.totalLessons), React__default.createElement(TableCell, null, isAdmin && React__default.createElement("div", {
14217
+ }, i.name), React__default.createElement(TableCell, null, toLocalTime(i.startDate, t("date_format"))), React__default.createElement(TableCell, null, toLocalTime(i.endDate, t("date_format"))), React__default.createElement(TableCell, null, i.totalStudents), React__default.createElement(TableCell, null, i.totalTeachers), React__default.createElement(TableCell, null, i.totalLessons), React__default.createElement(TableCell, null, (isAdmin || isSuperAdmin) && React__default.createElement("div", {
14355
14218
  className: "d-flex"
14356
14219
  }, React__default.createElement(material.IconButton, {
14357
14220
  color: "default",
@@ -14369,7 +14232,7 @@ var ClassList = function ClassList(_ref) {
14369
14232
  }
14370
14233
  }, React__default.createElement(fa6.FaTrashCan, {
14371
14234
  size: 12
14372
- }))), !isAdmin && React__default.createElement(material.IconButton, {
14235
+ }))), !(isAdmin || isSuperAdmin) && React__default.createElement(material.IconButton, {
14373
14236
  color: "default",
14374
14237
  className: "bg-primary text-white me-1",
14375
14238
  onClick: function onClick() {
@@ -19226,7 +19089,9 @@ var useNotes = function useNotes(setFilter, filter) {
19226
19089
  }
19227
19090
  setLoadingNotes(true);
19228
19091
  var _temp = _catch(function () {
19229
- return Promise.resolve(getNotesApi(_extends({}, filter))).then(function (res) {
19092
+ return Promise.resolve(getNotesApi(_extends({}, filter, {
19093
+ currentPage: -1
19094
+ }))).then(function (res) {
19230
19095
  var data = res.data;
19231
19096
  setTotalPages((data === null || data === void 0 ? void 0 : data.totalPages) || 0);
19232
19097
  var items = (data === null || data === void 0 ? void 0 : data.items) || [];
@@ -19328,6 +19193,7 @@ var NoteItem = function NoteItem(_ref) {
19328
19193
  }),
19329
19194
  placement: placement
19330
19195
  }, React__default.createElement(material.IconButton, {
19196
+ disabled: !actions.length,
19331
19197
  onClick: handleMoreClick
19332
19198
  }, React__default.createElement(md.MdMoreHoriz, {
19333
19199
  color: "#5d5d5b"
@@ -19635,11 +19501,10 @@ var useExamResultData = function useExamResultData(props) {
19635
19501
  var getData = function getData() {
19636
19502
  resetData();
19637
19503
  if (!(user !== null && user !== void 0 && user.email)) return;
19638
- isStudent && chapterId ? getDataTextbookResult() : getStudentData(examCode);
19639
- !isStudent && getStudentDataByTeacher(examSessionId, studentId);
19504
+ if (chapterId) getDataTextbookResult();else isStudent ? getStudentData(examCode) : getStudentDataByTeacher(examSessionId, studentId);
19640
19505
  };
19641
19506
  examCode === "example-code" ? setExampleData() : getData();
19642
- }, [examCode, isStudent, code, examSessionId, studentId, user === null || user === void 0 ? void 0 : user.email]);
19507
+ }, [examCode, isStudent, code, examSessionId, studentId, chapterId, user === null || user === void 0 ? void 0 : user.email]);
19643
19508
  var handlePrevChart = function handlePrevChart() {
19644
19509
  if (dataChartIndex > 0) {
19645
19510
  setDataChartIndex(dataChartIndex - 1);
@@ -21095,6 +20960,9 @@ var UserSchema = yup.object().shape({
21095
20960
  },
21096
20961
  then: function then(schema) {
21097
20962
  return schema.trim().required("school_name_is_required");
20963
+ },
20964
+ otherwise: function otherwise(schema) {
20965
+ return schema.notRequired();
21098
20966
  }
21099
20967
  }),
21100
20968
  grade: yup.number().transform(function (value) {
@@ -21105,6 +20973,9 @@ var UserSchema = yup.object().shape({
21105
20973
  },
21106
20974
  then: function then(schema) {
21107
20975
  return schema.required("student_grade_is_required").typeError("student_grade_is_required").min(1, "student_grade_is_invalid").max(12, "student_grade_is_invalid");
20976
+ },
20977
+ otherwise: function otherwise(schema) {
20978
+ return schema.notRequired();
21108
20979
  }
21109
20980
  }),
21110
20981
  major: yup.string().when("role", {
@@ -21113,6 +20984,9 @@ var UserSchema = yup.object().shape({
21113
20984
  },
21114
20985
  then: function then(schema) {
21115
20986
  return schema.trim().required("major_is_required");
20987
+ },
20988
+ otherwise: function otherwise(schema) {
20989
+ return schema.notRequired();
21116
20990
  }
21117
20991
  }),
21118
20992
  parentPhoneNumber: yup.string().when("role", {
@@ -21123,6 +20997,9 @@ var UserSchema = yup.object().shape({
21123
20997
  return schema.trim().matches(phoneRegExp, {
21124
20998
  message: "parent_phone_number_is_invalid"
21125
20999
  }).min(10, "parent_phone_number_is_invalid").required("parent_phone_number_is_required");
21000
+ },
21001
+ otherwise: function otherwise(schema) {
21002
+ return schema.notRequired();
21126
21003
  }
21127
21004
  }),
21128
21005
  parentName: yup.string().when("role", {
@@ -21131,6 +21008,9 @@ var UserSchema = yup.object().shape({
21131
21008
  },
21132
21009
  then: function then(schema) {
21133
21010
  return schema.trim().required("parent_name_is_required");
21011
+ },
21012
+ otherwise: function otherwise(schema) {
21013
+ return schema.notRequired();
21134
21014
  }
21135
21015
  }),
21136
21016
  subjectId: yup.number().when("role", {
@@ -21170,14 +21050,14 @@ var CSV_PREFIX = "data:text/csv;charset=utf-8,";
21170
21050
 
21171
21051
  var styles$5 = {"action-btn":"_1jXbz","action-btn--pencil":"_at4xP","icon-rotate-180":"_12gv9","drop-area":"_R4bn5"};
21172
21052
 
21173
- var _excluded$b = ["text", "isRequired", "className"];
21053
+ var _excluded$a = ["text", "isRequired", "className"];
21174
21054
  var LabelRequired = function LabelRequired(_ref) {
21175
21055
  var text = _ref.text,
21176
21056
  _ref$isRequired = _ref.isRequired,
21177
21057
  isRequired = _ref$isRequired === void 0 ? true : _ref$isRequired,
21178
21058
  _ref$className = _ref.className,
21179
21059
  className = _ref$className === void 0 ? "" : _ref$className,
21180
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$b);
21060
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
21181
21061
  return React__default.createElement(material.FormLabel, Object.assign({
21182
21062
  className: "fw-medium mb-1 " + className
21183
21063
  }, rest), text, isRequired && React__default.createElement("span", {
@@ -21231,7 +21111,7 @@ var deleteUserApi = function deleteUserApi(id) {
21231
21111
  return api["delete"](USER_URL + "/delete/" + id);
21232
21112
  };
21233
21113
 
21234
- var _excluded$c = ["ref"],
21114
+ var _excluded$b = ["ref"],
21235
21115
  _excluded2$1 = ["ref"],
21236
21116
  _excluded3$1 = ["ref"],
21237
21117
  _excluded4 = ["ref"],
@@ -21261,7 +21141,7 @@ var UserDialog = function UserDialog(_ref) {
21261
21141
  t = _useTranslation.t;
21262
21142
  var _register = register("fullName"),
21263
21143
  fullNameRef = _register.ref,
21264
- fullNameBio = _objectWithoutPropertiesLoose(_register, _excluded$c);
21144
+ fullNameBio = _objectWithoutPropertiesLoose(_register, _excluded$b);
21265
21145
  var _register2 = register("email"),
21266
21146
  emailRef = _register2.ref,
21267
21147
  emailBio = _objectWithoutPropertiesLoose(_register2, _excluded2$1);
@@ -21670,7 +21550,8 @@ var UserDialog = function UserDialog(_ref) {
21670
21550
  size: "1rem"
21671
21551
  }) : React__default.createElement(material.IconButton, {
21672
21552
  className: "bg-success",
21673
- onClick: getDefaultPassCode
21553
+ onClick: getDefaultPassCode,
21554
+ disabled: disabled
21674
21555
  }, React__default.createElement(fa6.FaRotateRight, {
21675
21556
  color: "#FFF",
21676
21557
  size: 10
@@ -21697,7 +21578,8 @@ var UserDialog = function UserDialog(_ref) {
21697
21578
  disabled: disabled
21698
21579
  }), React__default.createElement(material.Box, null, React__default.createElement(material.IconButton, {
21699
21580
  className: "bg-success",
21700
- onClick: getRandomPassCode
21581
+ onClick: getRandomPassCode,
21582
+ disabled: disabled
21701
21583
  }, React__default.createElement(fa6.FaRotateRight, {
21702
21584
  color: "#FFF",
21703
21585
  size: 10
@@ -22358,6 +22240,10 @@ var RecentUserActionDialog = function RecentUserActionDialog(_ref) {
22358
22240
 
22359
22241
  var UserList = function UserList(_ref) {
22360
22242
  var role = _ref.role;
22243
+ var isSuperAdmin = reactRedux.useSelector(function (state) {
22244
+ var _state$common, _state$common$user;
22245
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : (_state$common$user = _state$common.user) === null || _state$common$user === void 0 ? void 0 : _state$common$user.isSuperAdmin;
22246
+ });
22361
22247
  var isAdmin = role === exports.Role.Admin;
22362
22248
  var _useUserList = useUserList(role),
22363
22249
  userHeaders = _useUserList.userHeaders,
@@ -22411,7 +22297,7 @@ var UserList = function UserList(_ref) {
22411
22297
  mb: 2
22412
22298
  }, React__default.createElement(material.Typography, {
22413
22299
  variant: "h4"
22414
- }, t("users")), isAdmin && React__default.createElement("div", {
22300
+ }, t("users")), (isAdmin || isSuperAdmin) && React__default.createElement("div", {
22415
22301
  className: "d-flex"
22416
22302
  }, React__default.createElement("input", {
22417
22303
  type: "file",
@@ -22519,7 +22405,7 @@ var UserList = function UserList(_ref) {
22519
22405
  key: i.id
22520
22406
  }, React__default.createElement(TableCell, null, (paging.page - 1) * paging.limit + index + 1), React__default.createElement(TableCell, null, i.email), React__default.createElement(TableCell, null, i.fullName), React__default.createElement(TableCell, null, i.phoneNumber), React__default.createElement(TableCell, null, utcToLocalTime(i.createdAt, t("date_time_format"))), React__default.createElement(TableCell, null, (_i$classes = i.classes) === null || _i$classes === void 0 ? void 0 : _i$classes.join(", ")), React__default.createElement(TableCell, null, (_i$subject = i.subject) === null || _i$subject === void 0 ? void 0 : _i$subject.name), React__default.createElement(TableCell, null, !!i.roles && formatRole(i.roles, t)), React__default.createElement(TableCell, null, React__default.createElement("div", {
22521
22407
  className: "d-flex"
22522
- }, isAdmin ? React__default.createElement(material.IconButton, {
22408
+ }, isAdmin || isSuperAdmin ? React__default.createElement(material.IconButton, {
22523
22409
  color: "default",
22524
22410
  className: styles$5["action-btn"] + " bg-warning text-white me-2",
22525
22411
  onClick: function onClick() {
@@ -22536,7 +22422,7 @@ var UserList = function UserList(_ref) {
22536
22422
  }
22537
22423
  }, React__default.createElement(fa.FaEye, {
22538
22424
  size: 12
22539
- })), isAdmin && React__default.createElement(material.IconButton, {
22425
+ })), (isAdmin || isSuperAdmin) && React__default.createElement(material.IconButton, {
22540
22426
  onClick: function onClick() {
22541
22427
  return openDeleteDialog(i);
22542
22428
  },
@@ -22566,14 +22452,14 @@ var UserList = function UserList(_ref) {
22566
22452
  }), React__default.createElement(UserDialog, {
22567
22453
  open: openUserDialog,
22568
22454
  data: userDetail,
22569
- disabled: !isAdmin,
22455
+ disabled: !(isAdmin || isSuperAdmin),
22570
22456
  onClose: handleCloseUserDialog,
22571
22457
  onSubmitForm: handleCreateOrUpdateUser
22572
22458
  }), React__default.createElement(RecentUserActionDialog, {
22573
22459
  open: isOpenRecentUserActionDialog,
22574
22460
  onClose: handleCloseRecentUserActionDialog,
22575
22461
  recentUserActions: recentUserActions
22576
- }), isAdmin && React__default.createElement(DeleteUserCsvDialog, {
22462
+ }), (isAdmin || isSuperAdmin) && React__default.createElement(DeleteUserCsvDialog, {
22577
22463
  open: isOpenDeleteUserCsv,
22578
22464
  file: deleteFile,
22579
22465
  onChangeFile: handleChangeDeleteFile,
@@ -23885,9 +23771,6 @@ var TextbookDefaultQuery = {
23885
23771
  sortColumnDirection: exports.OrderType.ASC,
23886
23772
  sortColumnName: TextbookSortBy.Title
23887
23773
  };
23888
- var TEXTBOOK_URL$1 = "/teacher/teacher-admin/textbooks";
23889
- var ADMIN_TEXTBOOK_URL = "/textbooks";
23890
- var SUPER_ADMIN_TEXTBOOK_URL = "/personal/textbooks";
23891
23774
  var DEFAULT_TEXTBOOK = {
23892
23775
  name: "",
23893
23776
  chapters: []
@@ -24055,7 +23938,9 @@ var useTextbookDetail = function useTextbookDetail(props) {
24055
23938
  isReadonlyParam = props.isReadonlyParam,
24056
23939
  navigate = props.navigate,
24057
23940
  id = props.id,
24058
- isSuperAdmin = props.isSuperAdmin;
23941
+ isSuperAdmin = props.isSuperAdmin,
23942
+ onNavigateDetail = props.onNavigateDetail,
23943
+ onNavigateList = props.onNavigateList;
24059
23944
  var _useTranslation = reactI18next.useTranslation(),
24060
23945
  t = _useTranslation.t;
24061
23946
  var dispatch = reactRedux.useDispatch();
@@ -24088,7 +23973,6 @@ var useTextbookDetail = function useTextbookDetail(props) {
24088
23973
  var _useState9 = React.useState([]),
24089
23974
  categoryList = _useState9[0],
24090
23975
  setCategoryList = _useState9[1];
24091
- var textbookUrl = isSuperAdmin ? SUPER_ADMIN_TEXTBOOK_URL : role === exports.Role.Teacher ? TEXTBOOK_URL$1 : ADMIN_TEXTBOOK_URL;
24092
23976
  var isAdminSite = role === exports.Role.Admin;
24093
23977
  var user = reactRedux.useSelector(function (state) {
24094
23978
  var _state$common;
@@ -24648,10 +24532,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
24648
24532
  subjectId: textbook.subject.id
24649
24533
  };
24650
24534
  return Promise.resolve(createTextbookApi(_body)).then(function (res) {
24651
- var textbookId = res.data.id;
24652
- navigate(textbookUrl + "/" + textbookId, {
24653
- replace: true
24654
- });
24535
+ onNavigateDetail === null || onNavigateDetail === void 0 ? void 0 : onNavigateDetail(res.data, false, true);
24655
24536
  });
24656
24537
  }
24657
24538
  }();
@@ -24694,9 +24575,7 @@ var useTextbookDetail = function useTextbookDetail(props) {
24694
24575
  }
24695
24576
  };
24696
24577
  var handleGoToTextbookList = function handleGoToTextbookList() {
24697
- navigate(textbookUrl, {
24698
- replace: true
24699
- });
24578
+ onNavigateList(true);
24700
24579
  };
24701
24580
  var textbookSubject = React.useMemo(function () {
24702
24581
  return textbook !== null && textbook !== void 0 && textbook.subject ? {
@@ -25044,12 +24923,12 @@ var ArticleDialog = function ArticleDialog(_ref) {
25044
24923
 
25045
24924
  var styles$7 = {"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"};
25046
24925
 
25047
- var _excluded$d = ["isOpen", "onClose", "handleSaveExam"];
24926
+ var _excluded$c = ["isOpen", "onClose", "handleSaveExam"];
25048
24927
  var CreateExamDrawer = function CreateExamDrawer(props) {
25049
24928
  var isOpen = props.isOpen,
25050
24929
  onClose = props.onClose,
25051
24930
  handleSaveExam = props.handleSaveExam,
25052
- examDetailViewProps = _objectWithoutPropertiesLoose(props, _excluded$d);
24931
+ examDetailViewProps = _objectWithoutPropertiesLoose(props, _excluded$c);
25053
24932
  var _useTranslation = reactI18next.useTranslation(),
25054
24933
  t = _useTranslation.t;
25055
24934
  var theme = material.useTheme();
@@ -25092,7 +24971,8 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
25092
24971
  var _textbook$chapters;
25093
24972
  var navigate = props.navigate,
25094
24973
  as = props.as,
25095
- className = props.className;
24974
+ className = props.className,
24975
+ onNavigateDetail = props.onNavigateDetail;
25096
24976
  var _useTextbookDetail = useTextbookDetail(props),
25097
24977
  id = _useTextbookDetail.id,
25098
24978
  t = _useTextbookDetail.t,
@@ -25141,7 +25021,7 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
25141
25021
  }),
25142
25022
  categoryOptions = _useCategorySelect.categoryOptions;
25143
25023
  var Wrapper = as || material.Container;
25144
- if (isNotFound) return React__default.createElement(NotFound, {
25024
+ if (isNotFound || id && textbook.isPrepared) return React__default.createElement(NotFound, {
25145
25025
  history: navigate
25146
25026
  });
25147
25027
  return React__default.createElement(Wrapper, {
@@ -25221,7 +25101,7 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
25221
25101
  textbook: textbook,
25222
25102
  onBack: handleGoToTextbookList,
25223
25103
  onSave: handleCreateOrUpdateTextbook,
25224
- hideSave: !!id && isReadonly
25104
+ hideSave: !!id && isReadonly || !onNavigateDetail
25225
25105
  }))), React__default.createElement(material.Grid, {
25226
25106
  item: true,
25227
25107
  xs: 12,
@@ -25299,8 +25179,8 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
25299
25179
 
25300
25180
  var PAGE_TITLE$7 = "textbooks";
25301
25181
  var useTextbookList = function useTextbookList(props) {
25302
- var role = props.role,
25303
- navigate = props.navigate,
25182
+ var onNavigateCreate = props.onNavigateCreate,
25183
+ onNavigateDetail = props.onNavigateDetail,
25304
25184
  isSuperAdmin = props.isSuperAdmin;
25305
25185
  var _useList = useList(function (search) {
25306
25186
  return getTextbookListApi(search, isSuperAdmin);
@@ -25318,21 +25198,15 @@ var useTextbookList = function useTextbookList(props) {
25318
25198
  getData = _useList.getData;
25319
25199
  var _useTranslation = reactI18next.useTranslation(),
25320
25200
  t = _useTranslation.t;
25321
- var textbookUrl = isSuperAdmin ? SUPER_ADMIN_TEXTBOOK_URL : role === exports.Role.Teacher ? TEXTBOOK_URL$1 : ADMIN_TEXTBOOK_URL;
25322
25201
  var dispatch = reactRedux.useDispatch();
25323
- var handleViewTextbook = function handleViewTextbook(id) {
25324
- console.log(textbookUrl + "/" + id);
25325
- navigate(textbookUrl + "/" + id + "?readonly=true", {
25326
- replace: true
25327
- });
25202
+ var handleViewTextbook = function handleViewTextbook(data) {
25203
+ onNavigateDetail(data, true, true);
25328
25204
  };
25329
- var handleUpdateTextbook = function handleUpdateTextbook(id) {
25330
- navigate(textbookUrl + "/" + id, {
25331
- replace: true
25332
- });
25205
+ var handleUpdateTextbook = function handleUpdateTextbook(data) {
25206
+ onNavigateDetail(data, false, true);
25333
25207
  };
25334
25208
  var handleCreateTextbook = function handleCreateTextbook() {
25335
- pushTo(navigate, textbookUrl + "/create");
25209
+ onNavigateCreate === null || onNavigateCreate === void 0 ? void 0 : onNavigateCreate();
25336
25210
  };
25337
25211
  var toggleConfirmDialog = function toggleConfirmDialog() {
25338
25212
  handleChangeSelectedItem(undefined);
@@ -25561,7 +25435,7 @@ var useTextbookShare = function useTextbookShare(props) {
25561
25435
  var getData = props.getData,
25562
25436
  role = props.role,
25563
25437
  isSuperAdmin = props.isSuperAdmin;
25564
- var _useList = useList(role === exports.Role.Teacher ? function (search) {
25438
+ var _useList = useList(!isSuperAdmin ? function (search) {
25565
25439
  return getTeacherListApi$1(search);
25566
25440
  } : null, DefaultTeacherQuery),
25567
25441
  filterShare = _useList.filter,
@@ -25601,8 +25475,10 @@ var useTextbookShare = function useTextbookShare(props) {
25601
25475
  var _state$common;
25602
25476
  return (state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user) || {};
25603
25477
  });
25604
- var isAdmin = infoUser === null || infoUser === void 0 ? void 0 : (_infoUser$roles = infoUser.roles) === null || _infoUser$roles === void 0 ? void 0 : _infoUser$roles.includes(exports.Role.Admin);
25478
+ var isAdmin = infoUser && (infoUser === null || infoUser === void 0 ? void 0 : (_infoUser$roles = infoUser.roles) === null || _infoUser$roles === void 0 ? void 0 : _infoUser$roles.includes(exports.Role.Admin));
25605
25479
  var isAdminSite = role === exports.Role.Admin;
25480
+ var onAcademy = !!infoUser.academyDomain;
25481
+ var isSuperAdminUser = infoUser && infoUser.isSuperAdmin;
25606
25482
  React.useEffect(function () {
25607
25483
  if (!isUpdate) {
25608
25484
  filterTeacherNotShared(currentModel);
@@ -25611,6 +25487,8 @@ var useTextbookShare = function useTextbookShare(props) {
25611
25487
  }
25612
25488
  }, [teachers, isUpdate]);
25613
25489
  var handleOpenShareDialog = function handleOpenShareDialog(textbook) {
25490
+ if (textSearchShareRef.current) textSearchShareRef.current.value = "";
25491
+ getData();
25614
25492
  setIsUpdate(false);
25615
25493
  setOpenShareDialog(true);
25616
25494
  setCurrentModel(textbook);
@@ -25635,6 +25513,8 @@ var useTextbookShare = function useTextbookShare(props) {
25635
25513
  setSelectedShare([]);
25636
25514
  };
25637
25515
  var handleOpenUpdateShareDialog = function handleOpenUpdateShareDialog(textbook) {
25516
+ if (textSearchShareRef.current) textSearchShareRef.current.value = "";
25517
+ getData();
25638
25518
  setIsUpdate(true);
25639
25519
  setOpenShareDialog(true);
25640
25520
  setCurrentModel(textbook);
@@ -25689,8 +25569,11 @@ var useTextbookShare = function useTextbookShare(props) {
25689
25569
  });
25690
25570
  setShared(existsTeachers);
25691
25571
  };
25692
- var handleDisable = function handleDisable(textbook) {
25693
- return isAdmin && !isAdminSite || !isAdmin && (!textbook.isShared || textbook.createdBy.id != infoUser.id) || isSuperAdmin;
25572
+ var enabledSave = function enabledSave(textbook) {
25573
+ return isAdminSite || isSuperAdmin || isSuperAdminUser || !isAdmin && textbook.isShared && textbook.createdBy.id === infoUser.id;
25574
+ };
25575
+ var enabledShare = function enabledShare(textbook) {
25576
+ return textbook.isShared && onAcademy && (isAdminSite || isSuperAdminUser || !isAdmin && textbook.createdBy.id === infoUser.id);
25694
25577
  };
25695
25578
  var handleShareTextbook = function handleShareTextbook(teacherIds, textbookId) {
25696
25579
  try {
@@ -25768,13 +25651,16 @@ var useTextbookShare = function useTextbookShare(props) {
25768
25651
  isUpdate: isUpdate,
25769
25652
  handleUpdateSharedTextbook: handleUpdateSharedTextbook,
25770
25653
  currentModel: currentModel,
25771
- handleDisable: handleDisable,
25654
+ enabledSave: enabledSave,
25655
+ enabledShare: enabledShare,
25772
25656
  isAdmin: isAdmin,
25773
25657
  isAdminSite: isAdminSite
25774
25658
  };
25775
25659
  };
25776
25660
 
25777
25661
  var TextbookList = function TextbookList(props) {
25662
+ var _props$createable = props.createable,
25663
+ createable = _props$createable === void 0 ? true : _props$createable;
25778
25664
  var _useTranslation = reactI18next.useTranslation(),
25779
25665
  t = _useTranslation.t;
25780
25666
  var _useTextbookList = useTextbookList(props),
@@ -25820,9 +25706,8 @@ var TextbookList = function TextbookList(props) {
25820
25706
  isUpdate = _useTextbookShare.isUpdate,
25821
25707
  handleUpdateSharedTextbook = _useTextbookShare.handleUpdateSharedTextbook,
25822
25708
  currentModel = _useTextbookShare.currentModel,
25823
- handleDisable = _useTextbookShare.handleDisable,
25824
- isAdmin = _useTextbookShare.isAdmin,
25825
- isAdminSite = _useTextbookShare.isAdminSite;
25709
+ enabledSave = _useTextbookShare.enabledSave,
25710
+ enabledShare = _useTextbookShare.enabledShare;
25826
25711
  return React__default.createElement(LayoutList, {
25827
25712
  title: t(TEXTBOOK_PAGE_TITLE)
25828
25713
  }, React__default.createElement(material.Grid, {
@@ -25844,14 +25729,14 @@ var TextbookList = function TextbookList(props) {
25844
25729
  justifyContent: "flex-end"
25845
25730
  },
25846
25731
  spacing: 2
25847
- }, (!isAdmin || isAdminSite) && React__default.createElement(material.Button, {
25732
+ }, createable && React__default.createElement(material.Button, {
25848
25733
  startIcon: React__default.createElement(fa.FaPlus, {
25849
25734
  size: 12
25850
25735
  }),
25851
25736
  variant: "contained",
25852
25737
  color: "primary",
25853
25738
  onClick: handleCreateTextbook,
25854
- className: (isAdmin && !isAdminSite ? "bg-secondary" : "bg-success") + " text-white"
25739
+ className: "bg-success text-white"
25855
25740
  }, t("create_textbook")))), React__default.createElement(material.Grid, {
25856
25741
  item: true,
25857
25742
  xs: 12,
@@ -25873,32 +25758,32 @@ var TextbookList = function TextbookList(props) {
25873
25758
  alignItems: "center"
25874
25759
  }, React__default.createElement(material.IconButton, {
25875
25760
  color: "default",
25876
- className: (handleDisable(i) ? "bg-secondary" : "bg-warning") + " text-white",
25761
+ className: (!enabledSave(i) ? "bg-secondary" : "bg-warning") + " text-white",
25877
25762
  onClick: function onClick() {
25878
- return handleUpdateTextbook(i.id);
25763
+ return handleUpdateTextbook(i);
25879
25764
  },
25880
- disabled: handleDisable(i)
25765
+ disabled: !enabledSave(i)
25881
25766
  }, React__default.createElement(fa6.FaPencil, {
25882
25767
  size: 12
25883
25768
  })), React__default.createElement(material.IconButton, {
25884
25769
  color: "default",
25885
25770
  className: "bg-primary text-white",
25886
25771
  onClick: function onClick() {
25887
- return handleViewTextbook(i.id);
25772
+ return handleViewTextbook(i);
25888
25773
  }
25889
25774
  }, React__default.createElement(fa.FaEye, {
25890
25775
  size: 12
25891
25776
  })), React__default.createElement(material.IconButton, {
25892
- disabled: handleDisable(i) || isAdmin,
25893
- className: (handleDisable(i) || isAdmin ? "bg-secondary" : "bg-info") + " text-white me-1",
25777
+ disabled: !enabledShare(i),
25778
+ className: (!enabledShare(i) ? "bg-secondary" : "bg-info") + " text-white me-1",
25894
25779
  onClick: function onClick() {
25895
25780
  return handleOpenShareDialog(i);
25896
25781
  }
25897
25782
  }, React__default.createElement(fa.FaShare, {
25898
25783
  size: 12
25899
25784
  })), React__default.createElement(material.IconButton, {
25900
- disabled: handleDisable(i) || isAdmin,
25901
- className: (handleDisable(i) || isAdmin ? "bg-secondary" : "bg-success") + " text-white me-1",
25785
+ disabled: !enabledShare(i),
25786
+ className: (!enabledShare(i) ? "bg-secondary" : "bg-success") + " text-white me-1",
25902
25787
  onClick: function onClick() {
25903
25788
  return handleOpenUpdateShareDialog(i);
25904
25789
  }
@@ -25906,11 +25791,11 @@ var TextbookList = function TextbookList(props) {
25906
25791
  size: 12
25907
25792
  })), React__default.createElement(material.IconButton, {
25908
25793
  color: "default",
25909
- className: (handleDisable(i) ? "bg-secondary" : "bg-danger") + " text-white mr-1",
25794
+ className: (!enabledSave(i) ? "bg-secondary" : "bg-danger") + " text-white mr-1",
25910
25795
  onClick: function onClick() {
25911
25796
  return handleSelectDeleteTextbook(i);
25912
25797
  },
25913
- disabled: handleDisable(i)
25798
+ disabled: !enabledSave(i)
25914
25799
  }, React__default.createElement(fa.FaTrash, {
25915
25800
  size: 12
25916
25801
  })))));
@@ -26111,12 +25996,12 @@ var useNotificationDetail = function useNotificationDetail(_ref) {
26111
25996
 
26112
25997
  var styles$8 = {"avatar":"_8niRT"};
26113
25998
 
26114
- var _excluded$e = ["value", "disabled", "optionTypeNotification"];
25999
+ var _excluded$d = ["value", "disabled", "optionTypeNotification"];
26115
26000
  var TypeSelector = function TypeSelector(_ref) {
26116
26001
  var value = _ref.value,
26117
26002
  disabled = _ref.disabled,
26118
26003
  optionTypeNotification = _ref.optionTypeNotification,
26119
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$e);
26004
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$d);
26120
26005
  return React__default.createElement(CustomAsyncSelect, Object.assign({
26121
26006
  options: optionTypeNotification,
26122
26007
  value: value
@@ -26508,11 +26393,11 @@ var useNotificationList = function useNotificationList(_ref) {
26508
26393
  };
26509
26394
  };
26510
26395
 
26511
- var _excluded$f = ["value", "optionTypeNotification"];
26396
+ var _excluded$e = ["value", "optionTypeNotification"];
26512
26397
  var SelectFilterType = function SelectFilterType(_ref) {
26513
26398
  var value = _ref.value,
26514
26399
  optionTypeNotification = _ref.optionTypeNotification,
26515
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$f);
26400
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$e);
26516
26401
  return React__default.createElement(CustomAsyncSelect, Object.assign({
26517
26402
  options: optionTypeNotification,
26518
26403
  value: value
@@ -27675,8 +27560,8 @@ var CourseSelector = function CourseSelector(_ref) {
27675
27560
  }));
27676
27561
  };
27677
27562
 
27678
- var TEXTBOOK_URL$2 = BASE_URL + "/api/textbooks";
27679
- var SUPER_ADMIN_TEXTBOOK_URL$1 = SUPER_ADMIN_BASE_URL + "/api/textbook";
27563
+ var TEXTBOOK_URL$1 = BASE_URL + "/api/textbooks";
27564
+ var SUPER_ADMIN_TEXTBOOK_URL = SUPER_ADMIN_BASE_URL + "/api/textbook";
27680
27565
  var PREPARED_TEXTBOOK_URL = BASE_URL + "/api/textbooks/prepared-textbooks";
27681
27566
  var SUPER_ADMIN_PREPARED_TEXTBOOK_URL = SUPER_ADMIN_BASE_URL + "/api/textbook/prepared-textbooks";
27682
27567
  var FILE_URL = BASE_URL + "/api/file/images";
@@ -27685,7 +27570,7 @@ var uploadImageFileApi = function uploadImageFileApi(formData, isAdmin) {
27685
27570
  return apiUpload.post("" + (isAdmin ? SUPER_FILE_URL : FILE_URL), formData);
27686
27571
  };
27687
27572
  var getTextbookDetailApi = function getTextbookDetailApi(id, isAdmin) {
27688
- return api.get((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : TEXTBOOK_URL$2) + "/" + id);
27573
+ return api.get((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : TEXTBOOK_URL$1) + "/" + id);
27689
27574
  };
27690
27575
  var getTextbookListApi$1 = function getTextbookListApi(query, isAdmin) {
27691
27576
  return api.get("" + (isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : PREPARED_TEXTBOOK_URL), {
@@ -27699,14 +27584,14 @@ var updateTextbookApi$1 = function updateTextbookApi(values, id, isAdmin) {
27699
27584
  return api.put((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : PREPARED_TEXTBOOK_URL) + "/" + id, values);
27700
27585
  };
27701
27586
  var getAcademyByTeacher = function getAcademyByTeacher(email, isAdmin) {
27702
- return api.get((isAdmin ? SUPER_ADMIN_TEXTBOOK_URL$1 : TEXTBOOK_URL$2) + "/academy-teacher-owner", {
27587
+ return api.get((isAdmin ? SUPER_ADMIN_TEXTBOOK_URL : TEXTBOOK_URL$1) + "/academy-teacher-owner", {
27703
27588
  params: {
27704
27589
  email: email
27705
27590
  }
27706
27591
  });
27707
27592
  };
27708
27593
  var deleteTextbookApi$1 = function deleteTextbookApi(textbookId, isAdmin) {
27709
- return api["delete"]((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : TEXTBOOK_URL$2) + "/" + textbookId);
27594
+ return api["delete"]((isAdmin ? SUPER_ADMIN_PREPARED_TEXTBOOK_URL : TEXTBOOK_URL$1) + "/" + textbookId);
27710
27595
  };
27711
27596
 
27712
27597
  var useSelect = function useSelect(_ref) {
@@ -27955,8 +27840,8 @@ var TextbookOwners = function TextbookOwners(_ref) {
27955
27840
  };
27956
27841
 
27957
27842
  var useTextbookManagement = function useTextbookManagement(_ref) {
27958
- var navigate = _ref.navigate,
27959
- textbookId = _ref.textbookId;
27843
+ var textbookId = _ref.textbookId,
27844
+ onNavigateList = _ref.onNavigateList;
27960
27845
  var _useTranslation = reactI18next.useTranslation(),
27961
27846
  t = _useTranslation.t;
27962
27847
  var theme = material.useTheme();
@@ -27975,7 +27860,6 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
27975
27860
  return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
27976
27861
  });
27977
27862
  var isSuperAdmin = !!user && !user.academyDomain;
27978
- var isTeacher = ((user === null || user === void 0 ? void 0 : user.roles) || []).includes(exports.Role.Teacher);
27979
27863
  var handleOpenDialog = function handleOpenDialog(item) {
27980
27864
  if (item) {
27981
27865
  setSelectedTextbook(item);
@@ -28038,7 +27922,7 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
28038
27922
  }), isSuperAdmin)).then(function (res) {
28039
27923
  if (res !== null && res !== void 0 && res.data) {
28040
27924
  reactToastify.toast.success(t(!(selectedTextbook !== null && selectedTextbook !== void 0 && selectedTextbook.id) ? "create_the_textbook_successfully" : "update_the_textbook_successfully"));
28041
- pushTo(navigate, !isTeacher ? isSuperAdmin ? "/super-textbook-management" : "/textbook-management" : "/teacher/prepared-exam");
27925
+ onNavigateList();
28042
27926
  }
28043
27927
  });
28044
27928
  }, function (error) {
@@ -28088,7 +27972,7 @@ var useTextbookManagement = function useTextbookManagement(_ref) {
28088
27972
  };
28089
27973
  };
28090
27974
 
28091
- var _excluded$g = ["value"],
27975
+ var _excluded$f = ["value"],
28092
27976
  _excluded2$2 = ["onChange"],
28093
27977
  _excluded3$2 = ["onChange"];
28094
27978
  var VisuallyHiddenInput = material.styled("input")({
@@ -28141,7 +28025,8 @@ var schema$4 = function schema(t) {
28141
28025
  };
28142
28026
  var PreparedTextbook = function PreparedTextbook(_ref) {
28143
28027
  var _selectedTextbook$sub, _selectedTextbook$cha;
28144
- var navigate = _ref.navigate,
28028
+ var onNavigateList = _ref.onNavigateList,
28029
+ navigate = _ref.navigate,
28145
28030
  textbookId = _ref.textbookId;
28146
28031
  var _useTextbookState = useTextbookState(),
28147
28032
  isAdmin = _useTextbookState.isAdmin,
@@ -28151,7 +28036,7 @@ var PreparedTextbook = function PreparedTextbook(_ref) {
28151
28036
  handleSetChapterSection = _useTextbookState.handleSetChapterSection,
28152
28037
  handleSetSubChapterSection = _useTextbookState.handleSetSubChapterSection;
28153
28038
  var _useTextbookManagemen = useTextbookManagement({
28154
- navigate: navigate,
28039
+ onNavigateList: onNavigateList,
28155
28040
  textbookId: textbookId
28156
28041
  }),
28157
28042
  t = _useTextbookManagemen.t,
@@ -28160,6 +28045,9 @@ var PreparedTextbook = function PreparedTextbook(_ref) {
28160
28045
  selectedTextbook = _useTextbookManagemen.selectedTextbook,
28161
28046
  handleSubmit = _useTextbookManagemen.handleSubmit,
28162
28047
  handleUploadImage = _useTextbookManagemen.handleUploadImage;
28048
+ if (textbookId && selectedTextbook && !selectedTextbook.isPrepared) return React__default.createElement(NotFound, {
28049
+ history: navigate
28050
+ });
28163
28051
  return React__default.createElement(formik.Formik, {
28164
28052
  initialValues: {
28165
28053
  name: (selectedTextbook === null || selectedTextbook === void 0 ? void 0 : selectedTextbook.name) || "",
@@ -28349,7 +28237,7 @@ var PreparedTextbook = function PreparedTextbook(_ref) {
28349
28237
  render: function render(_ref4) {
28350
28238
  var _ref4$field = _ref4.field,
28351
28239
  value = _ref4$field.value,
28352
- action = _objectWithoutPropertiesLoose(_ref4$field, _excluded$g);
28240
+ action = _objectWithoutPropertiesLoose(_ref4$field, _excluded$f);
28353
28241
  return React__default.createElement(xDatePickers.LocalizationProvider, {
28354
28242
  dateAdapter: AdapterMoment.AdapterMoment
28355
28243
  }, React__default.createElement(xDatePickers.DatePicker, Object.assign({}, action, {
@@ -28827,15 +28715,14 @@ var DeleteTextbookDialog = function DeleteTextbookDialog(_ref) {
28827
28715
  };
28828
28716
 
28829
28717
  var PreparedTextbookList = function PreparedTextbookList(_ref) {
28830
- var navigate = _ref.navigate;
28718
+ var onNavigateDetail = _ref.onNavigateDetail,
28719
+ onNavigteCreate = _ref.onNavigteCreate;
28831
28720
  var _useTextbookList = useTextbookList$1(),
28832
28721
  t = _useTextbookList.t,
28833
28722
  theme = _useTextbookList.theme,
28834
28723
  filter = _useTextbookList.filter,
28835
28724
  paging = _useTextbookList.paging,
28836
- isTeacher = _useTextbookList.isTeacher,
28837
28725
  textbooks = _useTextbookList.textbooks,
28838
- isSuperAdmin = _useTextbookList.isSuperAdmin,
28839
28726
  handleChangePage = _useTextbookList.handleChangePage,
28840
28727
  handleSort = _useTextbookList.handleSort,
28841
28728
  openConfirmDialog = _useTextbookList.openConfirmDialog,
@@ -28856,9 +28743,7 @@ var PreparedTextbookList = function PreparedTextbookList(_ref) {
28856
28743
  sx: {
28857
28744
  width: "fit-content"
28858
28745
  },
28859
- onClick: function onClick() {
28860
- return pushTo(navigate, !isTeacher ? isSuperAdmin ? "/super-textbook-management/create" : "/textbook-management/create" : "/teacher/textbook-management/create");
28861
- }
28746
+ onClick: onNavigteCreate
28862
28747
  }, t("create"))), React__default.createElement(material.Stack, null, React__default.createElement(material.Grid, {
28863
28748
  item: true,
28864
28749
  xs: 12
@@ -28905,7 +28790,7 @@ var PreparedTextbookList = function PreparedTextbookList(_ref) {
28905
28790
  color: "default",
28906
28791
  className: styles$9["action-btn"] + " bg-warning text-white me-2",
28907
28792
  onClick: function onClick() {
28908
- return pushTo(navigate, !isTeacher ? isSuperAdmin ? "/super-textbook-management/" + i.id + "/detail" : "/textbook-management/" + i.id + "/detail" : "/teacher/textbook-management/" + i.id + "/detail");
28793
+ return onNavigateDetail(i);
28909
28794
  }
28910
28795
  }, React__default.createElement(hi.HiOutlinePencilAlt, {
28911
28796
  className: styles$9["action-btn--pencil"],
@@ -29069,7 +28954,7 @@ var DefaultFilter = {
29069
28954
  };
29070
28955
 
29071
28956
  var PREPARED_TEXTBOOK_URL$1 = BASE_URL + "/api/textbooks/prepared-textbooks";
29072
- var TEXTBOOK_URL$3 = BASE_URL + "/api/textbooks";
28957
+ var TEXTBOOK_URL$2 = BASE_URL + "/api/textbooks";
29073
28958
  var TEXTBOOK_SESSION_URL$1 = BASE_URL + "/api/textbooksession";
29074
28959
  var getTextbookListApi$2 = function getTextbookListApi(query) {
29075
28960
  return api.get("" + PREPARED_TEXTBOOK_URL$1, {
@@ -29083,7 +28968,7 @@ var startPageApi = function startPageApi(value) {
29083
28968
  return api.post(TEXTBOOK_SESSION_URL$1 + "/study-textbook", _extends({}, value));
29084
28969
  };
29085
28970
  var deleteTextbookApi$2 = function deleteTextbookApi(textbookId) {
29086
- return api["delete"](TEXTBOOK_URL$3 + "/" + textbookId);
28971
+ return api["delete"](TEXTBOOK_URL$2 + "/" + textbookId);
29087
28972
  };
29088
28973
 
29089
28974
  var ADMIN_SUBJECT_URL$2 = SUPER_ADMIN_BASE_URL + "/api/subject";
@@ -29153,17 +29038,29 @@ var usePreparedExam = function usePreparedExam(_ref) {
29153
29038
  var _state$common3, _state$common3$user;
29154
29039
  return state === null || state === void 0 ? void 0 : (_state$common3 = state.common) === null || _state$common3 === void 0 ? void 0 : (_state$common3$user = _state$common3.user) === null || _state$common3$user === void 0 ? void 0 : _state$common3$user.academyDomain;
29155
29040
  });
29156
- var isTeacher = reactRedux.useSelector(function (state) {
29041
+ var isStudent = reactRedux.useSelector(function (state) {
29157
29042
  var _state$common4, _state$common4$user;
29158
29043
  return (state === null || state === void 0 ? void 0 : (_state$common4 = state.common) === null || _state$common4 === void 0 ? void 0 : (_state$common4$user = _state$common4.user) === null || _state$common4$user === void 0 ? void 0 : _state$common4$user.roles) || [];
29044
+ }).includes(exports.Role.Student);
29045
+ var isTeacher = reactRedux.useSelector(function (state) {
29046
+ var _state$common5, _state$common5$user;
29047
+ return (state === null || state === void 0 ? void 0 : (_state$common5 = state.common) === null || _state$common5 === void 0 ? void 0 : (_state$common5$user = _state$common5.user) === null || _state$common5$user === void 0 ? void 0 : _state$common5$user.roles) || [];
29159
29048
  }).includes(exports.Role.Teacher);
29160
29049
  var _useState5 = React.useState(false),
29161
29050
  openConfirmDialog = _useState5[0],
29162
29051
  setOpenConfirmDialog = _useState5[1];
29163
- var isSuperAdmin = reactRedux.useSelector(function (state) {
29164
- var _state$common5, _state$common5$user;
29165
- return (state === null || state === void 0 ? void 0 : (_state$common5 = state.common) === null || _state$common5 === void 0 ? void 0 : (_state$common5$user = _state$common5.user) === null || _state$common5$user === void 0 ? void 0 : _state$common5$user.roles) || [];
29052
+ var isSuperAdminDomain = reactRedux.useSelector(function (state) {
29053
+ var _state$common6, _state$common6$user;
29054
+ return (state === null || state === void 0 ? void 0 : (_state$common6 = state.common) === null || _state$common6 === void 0 ? void 0 : (_state$common6$user = _state$common6.user) === null || _state$common6$user === void 0 ? void 0 : _state$common6$user.roles) || [];
29166
29055
  }).includes(exports.Role.Admin) && !isDomain;
29056
+ var isAdmin = reactRedux.useSelector(function (state) {
29057
+ var _state$common7, _state$common7$user;
29058
+ return (state === null || state === void 0 ? void 0 : (_state$common7 = state.common) === null || _state$common7 === void 0 ? void 0 : (_state$common7$user = _state$common7.user) === null || _state$common7$user === void 0 ? void 0 : _state$common7$user.roles) || [];
29059
+ }).includes(exports.Role.Admin);
29060
+ var isSuperAdmin = reactRedux.useSelector(function (state) {
29061
+ var _state$common8, _state$common8$user;
29062
+ return state === null || state === void 0 ? void 0 : (_state$common8 = state.common) === null || _state$common8 === void 0 ? void 0 : (_state$common8$user = _state$common8.user) === null || _state$common8$user === void 0 ? void 0 : _state$common8$user.isSuperAdmin;
29063
+ });
29167
29064
  var handleCloseConfirmDialog = function handleCloseConfirmDialog() {
29168
29065
  setOpenConfirmDialog(false);
29169
29066
  };
@@ -29177,7 +29074,7 @@ var usePreparedExam = function usePreparedExam(_ref) {
29177
29074
  };
29178
29075
  setLoading(true);
29179
29076
  var _temp = _catch(function () {
29180
- return Promise.resolve(isSuperAdmin ? getSubjectListAdminApi$2("") : getSubjectListApi$2("")).then(function (res) {
29077
+ return Promise.resolve(isSuperAdminDomain ? getSubjectListAdminApi$2("") : getSubjectListApi$2("")).then(function (res) {
29181
29078
  var _res$data$items = res.data.items,
29182
29079
  items = _res$data$items === void 0 ? [] : _res$data$items;
29183
29080
  setSubjects(items);
@@ -29189,7 +29086,7 @@ var usePreparedExam = function usePreparedExam(_ref) {
29189
29086
  } catch (e) {
29190
29087
  return Promise.reject(e);
29191
29088
  }
29192
- }, [isSuperAdmin]);
29089
+ }, [isSuperAdminDomain]);
29193
29090
  var subjectOptions = subjects.map(function (subject) {
29194
29091
  return {
29195
29092
  label: "" + subject.name,
@@ -29330,7 +29227,10 @@ var usePreparedExam = function usePreparedExam(_ref) {
29330
29227
  isKor: isKor,
29331
29228
  paging: paging,
29332
29229
  user: user,
29230
+ isAdmin: isAdmin,
29333
29231
  isTeacher: isTeacher,
29232
+ isStudent: isStudent,
29233
+ isSuperAdmin: isSuperAdmin,
29334
29234
  monthOptions: monthOptions,
29335
29235
  openConfirmDialog: openConfirmDialog,
29336
29236
  handleOpenConfirmDialog: handleOpenConfirmDialog,
@@ -29506,7 +29406,7 @@ var useTextbookDrawer = function useTextbookDrawer(_ref) {
29506
29406
  };
29507
29407
  var handleRedirectEdit = function handleRedirectEdit() {
29508
29408
  if (!textbookId) return;
29509
- pushTo(navigate, "/teacher/textbook-management/" + textbookId + "/detail");
29409
+ pushTo(navigate, "/teacher/prepared-exam/" + textbookId + "/detail");
29510
29410
  };
29511
29411
  var handleStartFromPage = function handleStartFromPage(values) {
29512
29412
  try {
@@ -29822,7 +29722,7 @@ var ChapterProblemSolvingResultsDialog = function ChapterProblemSolvingResultsDi
29822
29722
  }, t("cancel"))))));
29823
29723
  };
29824
29724
 
29825
- var _excluded$h = ["onChange"];
29725
+ var _excluded$g = ["onChange"];
29826
29726
  var StartPageDialog = function StartPageDialog(_ref) {
29827
29727
  var t = _ref.t,
29828
29728
  onClose = _ref.onClose,
@@ -29883,7 +29783,7 @@ var StartPageDialog = function StartPageDialog(_ref) {
29883
29783
  }, t("page_to_start_with")), React__default.createElement(formik.Field, {
29884
29784
  name: "startPage",
29885
29785
  render: function render(_ref3) {
29886
- var field = _objectWithoutPropertiesLoose(_ref3, _excluded$h);
29786
+ var field = _objectWithoutPropertiesLoose(_ref3, _excluded$g);
29887
29787
  return React__default.createElement(CustomSelectOption, Object.assign({
29888
29788
  menuPosition: "fixed",
29889
29789
  onChange: function onChange(option) {
@@ -30056,7 +29956,7 @@ var Statistic = function Statistic(_ref) {
30056
29956
  fontSize: "12px",
30057
29957
  fontWeight: 500,
30058
29958
  color: styles.darker
30059
- }, (chapter.completedChapterQuestions || 0) / (chapter.totalChapterQuestions || 0) * 100 + "%")), React__default.createElement(material.Stack, {
29959
+ }, ((chapter.completedChapterQuestions || 0) / (chapter.totalChapterQuestions || 0) * 100).toFixed(2) + "%")), React__default.createElement(material.Stack, {
30060
29960
  sx: {
30061
29961
  width: "1px",
30062
29962
  position: "absolute",
@@ -30259,7 +30159,7 @@ var TextbookDrawer = function TextbookDrawer(_ref) {
30259
30159
  fontSize: "12px",
30260
30160
  fontWeight: 500,
30261
30161
  color: (textbook === null || textbook === void 0 ? void 0 : textbook.progress) === 0 ? theme.palette.common.black : theme.palette.common.white
30262
- }, ((textbook === null || textbook === void 0 ? void 0 : textbook.progress) || 0) + "%")))), !!(textbook !== null && textbook !== void 0 && textbook.chapters.length) && React__default.createElement(material.Stack, null, React__default.createElement(material.Box, {
30162
+ }, ((textbook === null || textbook === void 0 ? void 0 : textbook.progress) || 0).toFixed(2) + "%")))), !!(textbook !== null && textbook !== void 0 && textbook.chapters.length) && React__default.createElement(material.Stack, null, React__default.createElement(material.Box, {
30263
30163
  mt: "24px",
30264
30164
  mx: "24px",
30265
30165
  bgcolor: theme.palette.common.white,
@@ -30568,8 +30468,10 @@ var TextbookDetail = function TextbookDetail(_ref) {
30568
30468
  };
30569
30469
 
30570
30470
  var TextbookInfoDrawer = function TextbookInfoDrawer(_ref) {
30571
- var _TeacherTabList$find;
30572
- var isOpen = _ref.isOpen,
30471
+ var _textbook$createdBy, _TeacherTabList$find;
30472
+ var user = _ref.user,
30473
+ isSuperAdmin = _ref.isSuperAdmin,
30474
+ isOpen = _ref.isOpen,
30573
30475
  onClose = _ref.onClose,
30574
30476
  textbookId = _ref.textbookId,
30575
30477
  navigate = _ref.navigate,
@@ -30610,7 +30512,9 @@ var TextbookInfoDrawer = function TextbookInfoDrawer(_ref) {
30610
30512
  }, React__default.createElement(io5.IoClose, {
30611
30513
  color: styles.gray_700,
30612
30514
  size: 32
30613
- })), React__default.createElement(material.Stack, {
30515
+ })), (isSuperAdmin || (textbook === null || textbook === void 0 ? void 0 : textbook.isShared) && ((textbook === null || textbook === void 0 ? void 0 : (_textbook$createdBy = textbook.createdBy) === null || _textbook$createdBy === void 0 ? void 0 : _textbook$createdBy.id) === (user === null || user === void 0 ? void 0 : user.id) || textbook.textbookOwners.some(function (i) {
30516
+ return i.id === (user === null || user === void 0 ? void 0 : user.id);
30517
+ }))) && React__default.createElement(material.Stack, {
30614
30518
  flexDirection: "row",
30615
30519
  gap: "16px",
30616
30520
  alignItems: "center"
@@ -30679,10 +30583,13 @@ var TextbookInfoDrawer = function TextbookInfoDrawer(_ref) {
30679
30583
  };
30680
30584
 
30681
30585
  var Textbook = function Textbook(_ref) {
30586
+ var _textbook$createdBy, _textbook$createdBy2;
30682
30587
  var t = _ref.t,
30588
+ user = _ref.user,
30683
30589
  theme = _ref.theme,
30684
30590
  textbook = _ref.textbook,
30685
- isTeacher = _ref.isTeacher,
30591
+ isStudent = _ref.isStudent,
30592
+ isSuperAdmin = _ref.isSuperAdmin,
30686
30593
  navigate = _ref.navigate,
30687
30594
  preparedType = _ref.preparedType,
30688
30595
  preparedFilterType = _ref.preparedFilterType,
@@ -30761,7 +30668,7 @@ var Textbook = function Textbook(_ref) {
30761
30668
  }, React__default.createElement(material.Stack, {
30762
30669
  flexDirection: "row",
30763
30670
  gap: "10px"
30764
- }, !isTeacher && React__default.createElement(material.Button, {
30671
+ }, isStudent && React__default.createElement(material.Button, {
30765
30672
  variant: "contained",
30766
30673
  sx: {
30767
30674
  width: "fit-content",
@@ -30774,7 +30681,9 @@ var Textbook = function Textbook(_ref) {
30774
30681
  onClick: handleOpenDialog
30775
30682
  }, React__default.createElement(fa.FaBookOpen, {
30776
30683
  size: "20px"
30777
- }), t("test_start")), isTeacher && React__default.createElement(material.Button, {
30684
+ }), t("test_start")), (isSuperAdmin || textbook.isShared && ((textbook === null || textbook === void 0 ? void 0 : (_textbook$createdBy = textbook.createdBy) === null || _textbook$createdBy === void 0 ? void 0 : _textbook$createdBy.id) === (user === null || user === void 0 ? void 0 : user.id) || textbook.textbookOwners.some(function (i) {
30685
+ return i.id === (user === null || user === void 0 ? void 0 : user.id);
30686
+ }))) && React__default.createElement(material.Button, {
30778
30687
  variant: "outlined",
30779
30688
  sx: {
30780
30689
  width: "fit-content",
@@ -30785,11 +30694,11 @@ var Textbook = function Textbook(_ref) {
30785
30694
  maxHeight: "41px"
30786
30695
  },
30787
30696
  onClick: function onClick() {
30788
- return pushTo(navigate, "/teacher/textbook-management/" + (textbook === null || textbook === void 0 ? void 0 : textbook.id) + "/detail");
30697
+ return pushTo(navigate, "/teacher/prepared-exam/" + (textbook === null || textbook === void 0 ? void 0 : textbook.id) + "/detail");
30789
30698
  }
30790
30699
  }, React__default.createElement(fa.FaBookOpen, {
30791
30700
  size: "20px"
30792
- }), t("test_editing")), isTeacher && React__default.createElement(material.Button, {
30701
+ }), t("test_editing")), !isStudent && React__default.createElement(material.Button, {
30793
30702
  variant: "contained",
30794
30703
  sx: {
30795
30704
  width: "fit-content",
@@ -30804,7 +30713,9 @@ var Textbook = function Textbook(_ref) {
30804
30713
  }
30805
30714
  }, React__default.createElement(io5.IoInformationCircle, {
30806
30715
  size: "20px"
30807
- }), t("exam_information"))), isTeacher && React__default.createElement(material.Button, {
30716
+ }), t("exam_information"))), (isSuperAdmin || (textbook === null || textbook === void 0 ? void 0 : textbook.isShared) && ((textbook === null || textbook === void 0 ? void 0 : (_textbook$createdBy2 = textbook.createdBy) === null || _textbook$createdBy2 === void 0 ? void 0 : _textbook$createdBy2.id) === (user === null || user === void 0 ? void 0 : user.id) || textbook.textbookOwners.some(function (i) {
30717
+ return i.id === (user === null || user === void 0 ? void 0 : user.id);
30718
+ }))) && React__default.createElement(material.Button, {
30808
30719
  variant: "contained",
30809
30720
  sx: {
30810
30721
  width: "fit-content",
@@ -30826,6 +30737,8 @@ var Textbook = function Textbook(_ref) {
30826
30737
  textbookId: textbook.id,
30827
30738
  navigate: navigate
30828
30739
  }), openDetailDialog && React__default.createElement(TextbookInfoDrawer, {
30740
+ user: user,
30741
+ isSuperAdmin: isSuperAdmin,
30829
30742
  isOpen: openDetailDialog,
30830
30743
  onClose: handleCloseDetailDialog,
30831
30744
  textbookId: textbook.id,
@@ -30856,9 +30769,12 @@ var PreparedItem = function PreparedItem(_ref) {
30856
30769
  history: history
30857
30770
  }),
30858
30771
  t = _usePreparedExam.t,
30772
+ user = _usePreparedExam.user,
30859
30773
  theme = _usePreparedExam.theme,
30860
30774
  paging = _usePreparedExam.paging,
30861
- isTeacher = _usePreparedExam.isTeacher,
30775
+ isAdmin = _usePreparedExam.isAdmin,
30776
+ isStudent = _usePreparedExam.isStudent,
30777
+ isSuperAdmin = _usePreparedExam.isSuperAdmin,
30862
30778
  handleChangePage = _usePreparedExam.handleChangePage,
30863
30779
  textbookList = _usePreparedExam.textbookList,
30864
30780
  getTextbookList = _usePreparedExam.getTextbookList,
@@ -31015,7 +30931,7 @@ var PreparedItem = function PreparedItem(_ref) {
31015
30931
  },
31016
30932
  onClick: handleToggleExpand,
31017
30933
  startIcon: React__default.createElement(io.IoIosArrowDown, null)
31018
- }, t("fold"))), isTeacher && React__default.createElement(material.Stack, null, React__default.createElement(material.Button, {
30934
+ }, t("fold"))), !isStudent && !isAdmin && React__default.createElement(material.Stack, null, React__default.createElement(material.Button, {
31019
30935
  variant: "contained",
31020
30936
  sx: {
31021
30937
  width: "fit-content",
@@ -31026,7 +30942,7 @@ var PreparedItem = function PreparedItem(_ref) {
31026
30942
  marginRight: "27px"
31027
30943
  },
31028
30944
  onClick: function onClick() {
31029
- return pushTo(navigate, "/teacher/textbook-management/create");
30945
+ return pushTo(navigate, "/teacher/prepared-exam/create");
31030
30946
  }
31031
30947
  }, React__default.createElement(io5.IoAddCircle, null), t("create_a_new_workbook"))))), React__default.createElement(material.AccordionDetails, {
31032
30948
  sx: {
@@ -31369,9 +31285,11 @@ var PreparedItem = function PreparedItem(_ref) {
31369
31285
  }, textbookList === null || textbookList === void 0 ? void 0 : textbookList.map(function (textbook) {
31370
31286
  return React__default.createElement(Textbook, {
31371
31287
  t: t,
31288
+ user: user,
31372
31289
  theme: theme,
31373
31290
  textbook: textbook,
31374
- isTeacher: isTeacher,
31291
+ isSuperAdmin: isSuperAdmin,
31292
+ isStudent: isStudent,
31375
31293
  navigate: navigate,
31376
31294
  getTextbookList: getTextbookList,
31377
31295
  preparedType: preparedType,
@@ -31420,6 +31338,7 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
31420
31338
  var isAdmin = role === exports.Role.Admin;
31421
31339
  var isSuperAdmin = user && (!user.academyDomain && !user.isLearningSpace && ((_user$roles = user.roles) === null || _user$roles === void 0 ? void 0 : _user$roles.includes(exports.Role.Admin)) || user.isSuperAdmin);
31422
31340
  var isStudentSite = role === exports.Role.Student;
31341
+ var isTeacherSite = role === exports.Role.Teacher;
31423
31342
  var isLearningSpace = user === null || user === void 0 ? void 0 : user.isLearningSpace;
31424
31343
  var _useTranslation = reactI18next.useTranslation(),
31425
31344
  t = _useTranslation.t;
@@ -31513,7 +31432,7 @@ var TheAcademyDropdown = function TheAcademyDropdown(_ref) {
31513
31432
  }, React__default.createElement(go.GoArrowSwitch, {
31514
31433
  size: 14,
31515
31434
  color: styles.gray_900
31516
- })))))), (isSuperAdmin || !isAdmin) && React__default.createElement(Popover, {
31435
+ })))))), (isSuperAdmin || !isAdmin || isTeacherSite) && React__default.createElement(Popover, {
31517
31436
  open: !!open,
31518
31437
  anchorEl: open,
31519
31438
  onClose: handleClose,