touchstudy-core 0.1.96 → 0.1.98

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.
@@ -11,6 +11,7 @@ export interface ActionButtonsProps {
11
11
  onBack: () => void;
12
12
  onSave: () => void;
13
13
  onAltSave?: () => void;
14
+ isReadonly: boolean;
14
15
  }
15
16
  declare const ActionButtons: FC<ActionButtonsProps>;
16
17
  export default ActionButtons;
@@ -9,7 +9,7 @@ interface Props {
9
9
  t: any;
10
10
  selectedStudent: StudentClassResponse | undefined;
11
11
  textSearchRef: RefObject<HTMLInputElement> | null;
12
- isOneRoleExists?: boolean;
12
+ disabled?: boolean;
13
13
  handleOpenDeleteClassDialog: (value: StudentClassResponse) => void;
14
14
  handleCloseConfirmDialog: () => void;
15
15
  handleSort: (key: UserClassSortBy) => void;
@@ -33,6 +33,7 @@ declare const useClassDetail: ({ history, id, role }: {
33
33
  isAdmin: boolean;
34
34
  paging: PagingResponse;
35
35
  filter: import("../../../utils/types/searchQuery").BaseSearchQuery<UserSortColumn>;
36
+ isTeacher: boolean;
36
37
  listUserSelected: number[];
37
38
  isSelected: (id: number) => boolean;
38
39
  textSearchRef: import("react").RefObject<HTMLInputElement>;
@@ -0,0 +1,26 @@
1
+ import React, { FC } from "react";
2
+ import { TeacherSimpleResponse } from "../configs/types";
3
+ import { SearchQuery } from "../../../utils/types/searchQuery";
4
+ import { PagingResponse } from "../../../utils/types/pagingResponse";
5
+ interface Props {
6
+ open: boolean;
7
+ selectedShare: number[];
8
+ textSearchShareRef: React.RefObject<HTMLInputElement>;
9
+ handleChangeSearchTextShare: (e: React.ChangeEvent<HTMLInputElement>) => void;
10
+ numSelectedShare: number;
11
+ isCheckAllShare: (teachers: TeacherSimpleResponse[], userLength: number) => boolean;
12
+ handleSelectAllClickShare: (event: React.ChangeEvent<HTMLInputElement>) => void;
13
+ teachers: TeacherSimpleResponse[];
14
+ handleSortShare: (sortColumnName: string) => void;
15
+ filterShare: SearchQuery;
16
+ pagingShare: PagingResponse;
17
+ handleChangePageShare: (_: any, page: number) => void;
18
+ handleShareTextbook: (teacherIds: number[], textbookId: number) => Promise<void>;
19
+ isSelectedShare: (id: number) => boolean;
20
+ handleCloseShareDialog: () => void;
21
+ handleClickCheckboxShare: (id: number) => void;
22
+ selectedTeacher: TeacherSimpleResponse | undefined;
23
+ currentTextbookId: number;
24
+ }
25
+ export declare const ShareTextbookDialog: FC<Props>;
26
+ export {};
@@ -16,6 +16,7 @@ export declare type TextbookHeaderTable = TableHeaderType;
16
16
  export declare type TextbookSearchQuery = SearchQuery & {};
17
17
  export declare type CreatedBy = {
18
18
  email: string;
19
+ id: number;
19
20
  };
20
21
  export declare type TextbookResponse = {
21
22
  id: number;
@@ -1,7 +1,9 @@
1
1
  /// <reference types="react" />
2
2
  import { TeacherSimpleResponse, TextbookResponse } from "../configs/types";
3
+ import { Role } from "../../../utils/constants";
3
4
  export interface TextbookShareProps {
4
5
  getData: (isLoading?: boolean) => Promise<void>;
6
+ role: Role;
5
7
  }
6
8
  declare const useTextbookShare: (props: TextbookShareProps) => {
7
9
  filterShare: import("../../../utils/types").SearchQuery;
@@ -26,7 +28,9 @@ declare const useTextbookShare: (props: TextbookShareProps) => {
26
28
  handleOpenUpdateShareDialog: (textbook: TextbookResponse) => void;
27
29
  isUpdate: boolean;
28
30
  handleUpdateSharedTextbook: (teacherIds: number[], textbookId: number) => Promise<void>;
29
- handleDisableShare: (textbook: TextbookResponse) => boolean;
30
31
  currentModel: TextbookResponse | undefined;
32
+ handleDisable: (textbook: TextbookResponse) => boolean;
33
+ isAdmin: any;
34
+ isAdminSite: boolean;
31
35
  };
32
36
  export default useTextbookShare;
package/dist/index.js CHANGED
@@ -7439,8 +7439,10 @@ var useMessageList = function useMessageList(_ref) {
7439
7439
  var _state$common, _state$common$user;
7440
7440
  return (state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : (_state$common$user = _state$common.user) === null || _state$common$user === void 0 ? void 0 : _state$common$user.roles) || [];
7441
7441
  });
7442
- var isTeacher = roles === null || roles === void 0 ? void 0 : roles.includes(exports.Role.Teacher);
7443
- var isFirst = true;
7442
+ var isAdmin = roles === null || roles === void 0 ? void 0 : roles.includes(exports.Role.Admin);
7443
+ var isTeacher = (roles === null || roles === void 0 ? void 0 : roles.includes(exports.Role.Teacher)) && !isAdmin;
7444
+ var isStudent = !isTeacher && !isAdmin;
7445
+ var firstRef = React.useRef(true);
7444
7446
  var getMessageList = function getMessageList(conversationId) {
7445
7447
  try {
7446
7448
  var _temp3 = function _temp3() {
@@ -7460,14 +7462,14 @@ var useMessageList = function useMessageList(_ref) {
7460
7462
  });
7461
7463
  });
7462
7464
  var _temp = function () {
7463
- if (isFirst && isTeacher) {
7465
+ if (firstRef.current && !isStudent) {
7464
7466
  return Promise.resolve(createRecentUserActionListApi({
7465
7467
  userId: (student === null || student === void 0 ? void 0 : student.id) || 0,
7466
7468
  action: RecentUserAction$1.ViewedQNA,
7467
7469
  data: "" + conversationId,
7468
- isAdmin: !isTeacher
7470
+ isAdmin: false
7469
7471
  })).then(function () {
7470
- isFirst = false;
7472
+ firstRef.current = false;
7471
7473
  });
7472
7474
  }
7473
7475
  }();
@@ -9742,7 +9744,8 @@ var ActionButtons = function ActionButtons(_ref) {
9742
9744
  hideSave = _ref$hideSave === void 0 ? false : _ref$hideSave,
9743
9745
  onBack = _ref.onBack,
9744
9746
  onSave = _ref.onSave,
9745
- onAltSave = _ref.onAltSave;
9747
+ onAltSave = _ref.onAltSave,
9748
+ isReadonly = _ref.isReadonly;
9746
9749
  return React__default.createElement(material.Stack, {
9747
9750
  direction: "row",
9748
9751
  spacing: 1,
@@ -9761,7 +9764,7 @@ var ActionButtons = function ActionButtons(_ref) {
9761
9764
  size: 16
9762
9765
  }),
9763
9766
  onClick: onSave,
9764
- disabled: saveDisabled
9767
+ disabled: saveDisabled || isReadonly
9765
9768
  }, saveText), !!altSaveText && onAltSave && React__default.createElement(material.Button, {
9766
9769
  variant: "contained",
9767
9770
  color: "primary",
@@ -9789,6 +9792,7 @@ var TextbookActionButtons = function TextbookActionButtons(_ref) {
9789
9792
  size: 14
9790
9793
  }) : undefined,
9791
9794
  saveText: t(!(textbook !== null && textbook !== void 0 && textbook.id) ? "create_and_continue" : isReadonly ? "update" : "update_textbook_title"),
9795
+ isReadonly: isReadonly,
9792
9796
  hideSave: hideSave,
9793
9797
  onSave: onSave
9794
9798
  });
@@ -10704,7 +10708,7 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
10704
10708
  textbook: textbook,
10705
10709
  onBack: handleGoToTextbookList,
10706
10710
  onSave: handleCreateOrUpdateTextbook,
10707
- hideSave: !isEditedTitle && !!id && !isReadonly || textbook.isCreatedByAdmin
10711
+ hideSave: !isEditedTitle && !!id && !isReadonly || textbook.isCreatedByAdmin || !!id && isReadonly
10708
10712
  }))), React__default.createElement(material.Grid, {
10709
10713
  item: true,
10710
10714
  xs: 12,
@@ -10715,7 +10719,7 @@ var TextbookViewDetail = function TextbookViewDetail(props) {
10715
10719
  onClick: function onClick() {
10716
10720
  return handleOpenCreateExamDialog();
10717
10721
  },
10718
- disabled: isReadonly || !articlesSelected.length,
10722
+ disabled: !articlesSelected.length,
10719
10723
  startIcon: React__default.createElement(fa.FaPlus, {
10720
10724
  size: 12
10721
10725
  })
@@ -11296,7 +11300,9 @@ var getTeacherListApi = function getTeacherListApi(query) {
11296
11300
  };
11297
11301
 
11298
11302
  var useTextbookShare = function useTextbookShare(props) {
11299
- var getData = props.getData;
11303
+ var _infoUser$roles;
11304
+ var getData = props.getData,
11305
+ role = props.role;
11300
11306
  var _useList = useList(function (search) {
11301
11307
  return getTeacherListApi(search);
11302
11308
  }, DefaultTeacherQuery),
@@ -11336,6 +11342,8 @@ var useTextbookShare = function useTextbookShare(props) {
11336
11342
  var _state$common;
11337
11343
  return (state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user) || {};
11338
11344
  });
11345
+ 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);
11346
+ var isAdminSite = role === exports.Role.Admin;
11339
11347
  React.useEffect(function () {
11340
11348
  if (!isUpdate) {
11341
11349
  filterTeacherNotShared(currentModel);
@@ -11422,12 +11430,8 @@ var useTextbookShare = function useTextbookShare(props) {
11422
11430
  });
11423
11431
  setShared(existsTeachers);
11424
11432
  };
11425
- var handleDisableShare = function handleDisableShare(textbook) {
11426
- return !textbook.isShared || textbook.sharedUsers.map(function (item) {
11427
- return item.trim();
11428
- }).filter(function (item) {
11429
- return item !== "";
11430
- }).includes(infoUser.email || "");
11433
+ var handleDisable = function handleDisable(textbook) {
11434
+ return isAdmin && !isAdminSite || !isAdmin && (!textbook.isShared || textbook.createdBy.id != infoUser.id);
11431
11435
  };
11432
11436
  var handleShareTextbook = function handleShareTextbook(teacherIds, textbookId) {
11433
11437
  try {
@@ -11504,18 +11508,16 @@ var useTextbookShare = function useTextbookShare(props) {
11504
11508
  handleOpenUpdateShareDialog: handleOpenUpdateShareDialog,
11505
11509
  isUpdate: isUpdate,
11506
11510
  handleUpdateSharedTextbook: handleUpdateSharedTextbook,
11507
- handleDisableShare: handleDisableShare,
11508
- currentModel: currentModel
11511
+ currentModel: currentModel,
11512
+ handleDisable: handleDisable,
11513
+ isAdmin: isAdmin,
11514
+ isAdminSite: isAdminSite
11509
11515
  };
11510
11516
  };
11511
11517
 
11512
11518
  var TextbookList = function TextbookList(props) {
11513
11519
  var _useTranslation = reactI18next.useTranslation(),
11514
11520
  t = _useTranslation.t;
11515
- var isAdmin = reactRedux.useSelector(function (state) {
11516
- var _state$common, _state$common$user, _state$common$user$ro;
11517
- 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$ro = _state$common$user.roles) === null || _state$common$user$ro === void 0 ? void 0 : _state$common$user$ro.includes(exports.Role.Admin);
11518
- });
11519
11521
  var _useTextbookList = useTextbookList(props),
11520
11522
  filter = _useTextbookList.filter,
11521
11523
  textbooks = _useTextbookList.textbooks,
@@ -11558,8 +11560,10 @@ var TextbookList = function TextbookList(props) {
11558
11560
  handleOpenUpdateShareDialog = _useTextbookShare.handleOpenUpdateShareDialog,
11559
11561
  isUpdate = _useTextbookShare.isUpdate,
11560
11562
  handleUpdateSharedTextbook = _useTextbookShare.handleUpdateSharedTextbook,
11561
- handleDisableShare = _useTextbookShare.handleDisableShare,
11562
- currentModel = _useTextbookShare.currentModel;
11563
+ currentModel = _useTextbookShare.currentModel,
11564
+ handleDisable = _useTextbookShare.handleDisable,
11565
+ isAdmin = _useTextbookShare.isAdmin,
11566
+ isAdminSite = _useTextbookShare.isAdminSite;
11563
11567
  return React__default.createElement(LayoutList, {
11564
11568
  title: t(TEXTBOOK_PAGE_TITLE)
11565
11569
  }, React__default.createElement(material.Grid, {
@@ -11581,15 +11585,14 @@ var TextbookList = function TextbookList(props) {
11581
11585
  justifyContent: "flex-end"
11582
11586
  },
11583
11587
  spacing: 2
11584
- }, React__default.createElement(material.Button, {
11588
+ }, (!isAdmin || isAdminSite) && React__default.createElement(material.Button, {
11585
11589
  startIcon: React__default.createElement(fa.FaPlus, {
11586
11590
  size: 12
11587
11591
  }),
11588
11592
  variant: "contained",
11589
11593
  color: "primary",
11590
11594
  onClick: handleCreateTextbook,
11591
- disabled: isAdmin,
11592
- className: (!isAdmin ? "bg-success" : "bg-secondary") + " text-white"
11595
+ className: (isAdmin && !isAdminSite ? "bg-secondary" : "bg-success") + " text-white"
11593
11596
  }, t("create_textbook")))), React__default.createElement(material.Grid, {
11594
11597
  item: true,
11595
11598
  xs: 12,
@@ -11611,11 +11614,11 @@ var TextbookList = function TextbookList(props) {
11611
11614
  alignItems: "center"
11612
11615
  }, React__default.createElement(material.IconButton, {
11613
11616
  color: "default",
11614
- className: (i.isCreatedByAdmin ? "bg-secondary" : "bg-warning") + " text-white",
11617
+ className: (handleDisable(i) ? "bg-secondary" : "bg-warning") + " text-white",
11615
11618
  onClick: function onClick() {
11616
11619
  return handleUpdateTextbook(i.id);
11617
11620
  },
11618
- disabled: !!i.isCreatedByAdmin
11621
+ disabled: handleDisable(i)
11619
11622
  }, React__default.createElement(fa6.FaPencil, {
11620
11623
  size: 12
11621
11624
  })), React__default.createElement(material.IconButton, {
@@ -11627,16 +11630,16 @@ var TextbookList = function TextbookList(props) {
11627
11630
  }, React__default.createElement(fa.FaEye, {
11628
11631
  size: 12
11629
11632
  })), React__default.createElement(material.IconButton, {
11630
- disabled: handleDisableShare(i) || isAdmin,
11631
- className: (handleDisableShare(i) || isAdmin ? "bg-secondary" : "bg-info") + " text-white me-1",
11633
+ disabled: handleDisable(i) || isAdmin,
11634
+ className: (handleDisable(i) || isAdmin ? "bg-secondary" : "bg-info") + " text-white me-1",
11632
11635
  onClick: function onClick() {
11633
11636
  return handleOpenShareDialog(i);
11634
11637
  }
11635
11638
  }, React__default.createElement(fa.FaShare, {
11636
11639
  size: 12
11637
11640
  })), React__default.createElement(material.IconButton, {
11638
- disabled: handleDisableShare(i) || isAdmin,
11639
- className: (handleDisableShare(i) || isAdmin ? "bg-secondary" : "bg-success") + " text-white me-1",
11641
+ disabled: handleDisable(i) || isAdmin,
11642
+ className: (handleDisable(i) || isAdmin ? "bg-secondary" : "bg-success") + " text-white me-1",
11640
11643
  onClick: function onClick() {
11641
11644
  return handleOpenUpdateShareDialog(i);
11642
11645
  }
@@ -11644,11 +11647,11 @@ var TextbookList = function TextbookList(props) {
11644
11647
  size: 12
11645
11648
  })), React__default.createElement(material.IconButton, {
11646
11649
  color: "default",
11647
- className: (i.isCreatedByAdmin ? "bg-secondary" : "bg-danger") + " text-white mr-1",
11650
+ className: (handleDisable(i) ? "bg-secondary" : "bg-danger") + " text-white mr-1",
11648
11651
  onClick: function onClick() {
11649
11652
  return handleSelectDeleteTextbook(i);
11650
11653
  },
11651
- disabled: !!i.isCreatedByAdmin
11654
+ disabled: handleDisable(i)
11652
11655
  }, React__default.createElement(fa.FaTrash, {
11653
11656
  size: 12
11654
11657
  })))));
@@ -16946,7 +16949,6 @@ var singleLogo = function singleLogo(_ref) {
16946
16949
  };
16947
16950
 
16948
16951
  var Header = function Header(_ref) {
16949
- var _user$roles;
16950
16952
  var academyListRoute = _ref.academyListRoute,
16951
16953
  homeRoute = _ref.homeRoute,
16952
16954
  registerRoute = _ref.registerRoute,
@@ -16958,27 +16960,24 @@ var Header = function Header(_ref) {
16958
16960
  t = _useTranslation.t;
16959
16961
  var location = reactRouterDom.useLocation();
16960
16962
  var theme = material.useTheme();
16961
- var user = reactRedux.useSelector(function (state) {
16962
- var _state$common;
16963
- return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
16964
- });
16963
+ var param = window.location.pathname;
16965
16964
  var language = reactRedux.useSelector(function (state) {
16966
- var _state$common2;
16967
- return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : _state$common2.language;
16965
+ var _state$common;
16966
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.language;
16968
16967
  });
16969
- var isTeacher = user === null || user === void 0 ? void 0 : (_user$roles = user.roles) === null || _user$roles === void 0 ? void 0 : _user$roles.includes(exports.Role.Teacher);
16968
+ var isTeacherSide = param.includes('teacher');
16970
16969
  var isLargerThanXL = material.useMediaQuery(theme.breakpoints.up("xl"));
16971
16970
  var academyDomain = reactRedux.useSelector(function (state) {
16972
- var _state$common3, _state$common3$user;
16973
- 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;
16971
+ var _state$common2, _state$common2$user;
16972
+ return state === null || state === void 0 ? void 0 : (_state$common2 = state.common) === null || _state$common2 === void 0 ? void 0 : (_state$common2$user = _state$common2.user) === null || _state$common2$user === void 0 ? void 0 : _state$common2$user.academyDomain;
16974
16973
  });
16975
16974
  var logo = React.useMemo(function () {
16976
- if (isTeacher) {
16975
+ if (isTeacherSide) {
16977
16976
  return language === exports.Language.en ? React__default.createElement(teacherFullLogoEn, null) : React__default.createElement(teacherFullLogoKo, null);
16978
16977
  } else {
16979
16978
  return language === exports.Language.en ? React__default.createElement(studentFullLogoEn, null) : React__default.createElement(studentFullLogoKo, null);
16980
16979
  }
16981
- }, [isTeacher, language]);
16980
+ }, [isTeacherSide, language]);
16982
16981
  var pathname = location.pathname.toLowerCase();
16983
16982
  return React__default.createElement(material.Stack, {
16984
16983
  width: "100%",
@@ -19163,7 +19162,7 @@ var StudentList = function StudentList(_ref) {
19163
19162
  selectedStudent = _ref.selectedStudent,
19164
19163
  t = _ref.t,
19165
19164
  textSearchRef = _ref.textSearchRef,
19166
- isOneRoleExists = _ref.isOneRoleExists,
19165
+ disabled = _ref.disabled,
19167
19166
  handleOpenDeleteClassDialog = _ref.handleOpenDeleteClassDialog,
19168
19167
  handleCloseConfirmDialog = _ref.handleCloseConfirmDialog,
19169
19168
  handleSort = _ref.handleSort,
@@ -19223,7 +19222,7 @@ var StudentList = function StudentList(_ref) {
19223
19222
  },
19224
19223
  placeholder: t("search_for"),
19225
19224
  onChange: handleChangeSearchText
19226
- }))), isOneRoleExists && React__default.createElement(material.Grid, {
19225
+ }))), !disabled && React__default.createElement(material.Grid, {
19227
19226
  item: true,
19228
19227
  xs: 6,
19229
19228
  className: "d-flex align-items-center"
@@ -19259,11 +19258,11 @@ var StudentList = function StudentList(_ref) {
19259
19258
  className: "d-flex"
19260
19259
  }, React__default.createElement(material.IconButton, {
19261
19260
  color: "default",
19262
- className: (!isOneRoleExists ? "bg-secondary" : "bg-danger") + " text-white",
19261
+ className: (disabled ? "bg-secondary" : "bg-danger") + " text-white",
19263
19262
  onClick: function onClick() {
19264
19263
  return handleOpenDeleteClassDialog(i);
19265
19264
  },
19266
- disabled: !isOneRoleExists
19265
+ disabled: disabled
19267
19266
  }, React__default.createElement(fa6.FaTrashCan, {
19268
19267
  size: 12
19269
19268
  })))));
@@ -19988,6 +19987,7 @@ var useClassDetail = function useClassDetail(_ref) {
19988
19987
  var roles = (user === null || user === void 0 ? void 0 : user.roles) || [];
19989
19988
  var isOneRoleExists = roles.length === 1;
19990
19989
  var isAdmin = roles.includes(exports.Role.Admin) && role === exports.Role.Admin;
19990
+ var isTeacher = roles.includes(exports.Role.Teacher) && !roles.includes(exports.Role.Admin) && role === exports.Role.Teacher;
19991
19991
  var _useState = React.useState(),
19992
19992
  course = _useState[0],
19993
19993
  setCourse = _useState[1];
@@ -20410,6 +20410,7 @@ var useClassDetail = function useClassDetail(_ref) {
20410
20410
  isAdmin: isAdmin,
20411
20411
  paging: paging,
20412
20412
  filter: filter,
20413
+ isTeacher: isTeacher,
20413
20414
  listUserSelected: selected,
20414
20415
  isSelected: isSelected,
20415
20416
  textSearchRef: textSearchRef,
@@ -20792,6 +20793,7 @@ var ClassDetail = function ClassDetail(_ref) {
20792
20793
  schema = _useClassDetail.schema,
20793
20794
  paging = _useClassDetail.paging,
20794
20795
  isAdmin = _useClassDetail.isAdmin,
20796
+ isTeacher = _useClassDetail.isTeacher,
20795
20797
  filter = _useClassDetail.filter,
20796
20798
  listUserSelected = _useClassDetail.listUserSelected,
20797
20799
  userList = _useClassDetail.userList,
@@ -20808,7 +20810,6 @@ var ClassDetail = function ClassDetail(_ref) {
20808
20810
  course = _useClassDetail.course,
20809
20811
  classRequest = _useClassDetail.classRequest,
20810
20812
  teacherOptions = _useClassDetail.teacherOptions,
20811
- isOneRoleExists = _useClassDetail.isOneRoleExists,
20812
20813
  studentListProps = _useClassDetail.studentListProps,
20813
20814
  teacherListProps = _useClassDetail.teacherListProps,
20814
20815
  lessonListProps = _useClassDetail.lessonListProps,
@@ -20896,7 +20897,7 @@ var ClassDetail = function ClassDetail(_ref) {
20896
20897
  value: selected,
20897
20898
  index: TabList$2[1].value
20898
20899
  }, !!id && !Number.isNaN(+id) && selected === TabList$2[1].value && React__default.createElement(StudentList, Object.assign({
20899
- isOneRoleExists: isOneRoleExists,
20900
+ disabled: !isTeacher && !isAdmin,
20900
20901
  onAdd: handleOpenSelectDialog
20901
20902
  }, studentListProps))), React__default.createElement(CustomTabPanel, {
20902
20903
  value: selected,