touchstudy-core 0.1.88 → 0.1.90

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.
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ declare const ReleaseAlert: () => React.JSX.Element | null;
3
+ export default ReleaseAlert;
@@ -0,0 +1,2 @@
1
+ import ReleaseAlert from "./ReleaseAlert";
2
+ export { ReleaseAlert };
@@ -9,3 +9,4 @@ export declare type Language = {
9
9
  };
10
10
  export declare const LANGUAGES: Language[];
11
11
  export declare const DEFAULT_LANGUAGE: Language;
12
+ export declare const LOGIN_URL = "/login";
@@ -9,7 +9,7 @@ interface Props {
9
9
  t: any;
10
10
  selectedStudent: StudentClassResponse | undefined;
11
11
  textSearchRef: RefObject<HTMLInputElement> | null;
12
- disabled?: boolean;
12
+ isOneRoleExists?: boolean;
13
13
  handleOpenDeleteClassDialog: (value: StudentClassResponse) => void;
14
14
  handleCloseConfirmDialog: () => void;
15
15
  handleSort: (key: UserClassSortBy) => void;
@@ -4,9 +4,14 @@ import _ from "lodash";
4
4
  import { ChangeEvent } from "react";
5
5
  import { ClassResponse, StudentClassResponse, TeacherClassResponse, ClassRequest, LessonRequest } from "../configs/types";
6
6
  import { PagingResponse } from "../../../utils/types/pagingResponse";
7
+ import { Role } from "../../..";
7
8
  import { UserSortColumn } from "../../../utils/enums";
8
9
  declare type DialogOpenType = "Student" | "Teacher" | "Lesson";
9
- declare const useClassDetail: (history: any, id?: string | undefined) => {
10
+ declare const useClassDetail: ({ history, id, role }: {
11
+ history: any;
12
+ id?: string | undefined;
13
+ role: Role;
14
+ }) => {
10
15
  id: string | undefined;
11
16
  schema: import("yup").ObjectSchema<{
12
17
  name: string;
@@ -25,6 +30,7 @@ declare const useClassDetail: (history: any, id?: string | undefined) => {
25
30
  mainTeacherId: undefined;
26
31
  courseWeeklyDays: "";
27
32
  }, "">;
33
+ isAdmin: boolean;
28
34
  paging: PagingResponse;
29
35
  filter: import("../../../utils/types/searchQuery").BaseSearchQuery<UserSortColumn>;
30
36
  listUserSelected: number[];
@@ -43,6 +49,7 @@ declare const useClassDetail: (history: any, id?: string | undefined) => {
43
49
  course: ClassResponse | undefined;
44
50
  userList: StudentClassResponse[] | TeacherClassResponse[];
45
51
  teacherOptions: import("../configs/types").TeacherSimpleResponse[];
52
+ isOneRoleExists: boolean;
46
53
  studentListProps: {
47
54
  paging: PagingResponse;
48
55
  classList: StudentClassResponse[];
package/dist/index.d.ts CHANGED
@@ -83,4 +83,5 @@ import ClassDetail from "./containers/Classes/views/ClassDetail";
83
83
  import UserList from "./containers/Users/views/UserList";
84
84
  import NotificationDetail from "./containers/Notifications/views/NotificationDetail";
85
85
  import NotificationList from "./containers/Notifications/views/NotificationList";
86
+ export * from "./components/Alerts";
86
87
  export { diffFromNow, formatTime, utcToLocalTime, setLoading, setReadyRegisterPusher, BASE_URL, SUPER_ADMIN_BASE_URL, ACCESS_TOKEN, Login, store, setAlert, setUser, Loading, NotFound, LayoutContext, api, apiUpload, ConfirmDialog, CommonDialog, LoginWithEmail, NotificationList, CustomPagination, useGoogleSignOut, RecentUserAction, PUSHER_CONFIG, ExamEvent, EXAM_CHANNEL, EXAM_STUDENT_CHANNEL, setLanguage, i18n, TheLanguageDropdown, PrintExamView2, TheAcademyDropdown, useTranslation, I18nextProvider, DATE_MIN_VALUE, DATE_TIME_MIN_VALUE, ACADEMY_DOMAIN, minutesToTimeSpan, toISOString, canAccessRoute, CustomSelect, NotificationDetail, CustomAsyncSelect, CustomSelectOption, LoginWithPassword, getRecentUserActionListApi, getAccessToken, ChatContainer, getOrdinalSuffix, IChatContainerProps, IChatItemProps, IChatHeaderProps, IInputChatProps, ChatItemType, useChatContainer, ConversationResponse, usePusherConversation, ExamResultV2, ToastContainer, toast, Role, useLanguage, useSwitchAcademy, LANGUAGES, CustomCreatable, moment, ExamDetailView, ExamDetailViewProps, Exam, Question, ArticleGroup, getAcademyDomain, useSubjectSelect, useLogin, useAutoAcademyDomain, createRecentUserActionListApi, LoginAccessTokenRequest, LoginRequest, setReFetchUserAcademies, ChatTypes, AcademyHeaders, Types, Enums, CoreHooks, Language, ArticleGroupView, AnswerCountSelector, QuestionCountSelector, ScoreSelector, ArticleCategorySelector, SubjectSelector, useCategorySelect, InputText, Textbook, TextbookDetail, TextbookList, timeUtils, Header, DEFAULT_PAGING_RESPONSE, PagingResponse, AcademyList, getErrorMessage, DefaultErrorMessage, useCountDownTimer, useLoadMore, useVirtualizeList, PassCodeCheck, PassCodeCheckProps, LoadingComponent, PrintExamResultView, checkSuperUrl, ClassList, ClassDetail, formatRole, getRole, UserList };
package/dist/index.js CHANGED
@@ -87,6 +87,7 @@ var PUSHER_CONFIG = {
87
87
  cluster: process.env.REACT_APP_PUSHER_CONFIG_CLUSTER || "",
88
88
  key: process.env.REACT_APP_PUSHER_CONFIG_KEY || ""
89
89
  };
90
+ var RELEASE_DATE = process.env.REACT_APP_RELEASE_VERSION || "";
90
91
  var ACCESS_TOKEN = "ACCESS_TOKEN";
91
92
  var ACADEMY_DOMAIN = "ACADEMY_DOMAIN";
92
93
  var REDIRECT_URL = "REDIRECT_URL";
@@ -1185,6 +1186,7 @@ var LANGUAGES = [{
1185
1186
  momentLangCode: "en-au"
1186
1187
  }];
1187
1188
  var DEFAULT_LANGUAGE = LANGUAGES[0];
1189
+ var LOGIN_URL = "/login";
1188
1190
 
1189
1191
  var getLanguage = (function () {
1190
1192
  try {
@@ -1226,7 +1228,9 @@ var useLanguage = function useLanguage(history) {
1226
1228
  moment.locale(languageItem.momentLangCode);
1227
1229
  localStorage.setItem(LANGUAGE, languageItem.code);
1228
1230
  dispatch(setLanguage(languageItem.code));
1229
- searchParams.set("lang", languageItem.code);
1231
+ if (window.location.pathname === LOGIN_URL) {
1232
+ if (RELEASE_DATE) return;else searchParams["delete"]("lang");
1233
+ } else searchParams.set("lang", languageItem.code);
1230
1234
  pushTo(history, _extends({}, window.location, {
1231
1235
  search: searchParams.toString()
1232
1236
  }), true);
@@ -2947,6 +2951,9 @@ var total_exam = "총 시험 수";
2947
2951
  var total_exam_time = "총 시험 시간";
2948
2952
  var total_question = "총 질문 수";
2949
2953
  var the_exam_code_you_are_looking_for_was_not_found = "찾고 있는 시험 코드를 찾을 수 없습니다";
2954
+ var view_user = "사용자 보기";
2955
+ var exam_code = "시험 코드";
2956
+ var version = "버전";
2950
2957
  var lang_ko = {
2951
2958
  problem_solving: problem_solving,
2952
2959
  my_story: my_story,
@@ -3746,7 +3753,10 @@ var lang_ko = {
3746
3753
  total_exam: total_exam,
3747
3754
  total_exam_time: total_exam_time,
3748
3755
  total_question: total_question,
3749
- the_exam_code_you_are_looking_for_was_not_found: the_exam_code_you_are_looking_for_was_not_found
3756
+ the_exam_code_you_are_looking_for_was_not_found: the_exam_code_you_are_looking_for_was_not_found,
3757
+ view_user: view_user,
3758
+ exam_code: exam_code,
3759
+ version: version
3750
3760
  };
3751
3761
 
3752
3762
  var problem_solving$1 = "Problem Solving";
@@ -4556,6 +4566,9 @@ var total_exam$1 = "Total Exam";
4556
4566
  var total_exam_time$1 = "Total Exam Time";
4557
4567
  var total_question$1 = "Total Question";
4558
4568
  var the_exam_code_you_are_looking_for_was_not_found$1 = "The exam code you are looking for was not found";
4569
+ var view_user$1 = "View User";
4570
+ var exam_code$1 = "exam code";
4571
+ var version$1 = "Version";
4559
4572
  var lang_en = {
4560
4573
  problem_solving: problem_solving$1,
4561
4574
  my_story: my_story$1,
@@ -5356,7 +5369,10 @@ var lang_en = {
5356
5369
  total_exam: total_exam$1,
5357
5370
  total_exam_time: total_exam_time$1,
5358
5371
  total_question: total_question$1,
5359
- the_exam_code_you_are_looking_for_was_not_found: the_exam_code_you_are_looking_for_was_not_found$1
5372
+ the_exam_code_you_are_looking_for_was_not_found: the_exam_code_you_are_looking_for_was_not_found$1,
5373
+ view_user: view_user$1,
5374
+ exam_code: exam_code$1,
5375
+ version: version$1
5360
5376
  };
5361
5377
 
5362
5378
  i18n__default.use(reactI18next.initReactI18next).init({
@@ -10694,6 +10710,7 @@ var useAutoAcademyDomain = function useAutoAcademyDomain(logout, history, superU
10694
10710
  academyDomain = _ref.academyDomain;
10695
10711
  var pathname = window.location.pathname;
10696
10712
  var changeAcademySearchParams = function changeAcademySearchParams() {
10713
+ var isLoginPage = LOGIN_URL === pathname;
10697
10714
  var search = window.location.search;
10698
10715
  var searchParams = new URLSearchParams(search);
10699
10716
  var paramAcademyDomain = searchParams.get("domain");
@@ -10702,6 +10719,9 @@ var useAutoAcademyDomain = function useAutoAcademyDomain(logout, history, superU
10702
10719
  var isSuperUrl = checkSuperUrl(superUrls, pathname);
10703
10720
  if (!academyDomain) {
10704
10721
  if (!isSuperUrl) {
10722
+ if (isLoginPage) {
10723
+ if (RELEASE_DATE) return;else searchParams["delete"]("domain");
10724
+ }
10705
10725
  !paramAcademyDomain && domain && searchParams.set("domain", domain);
10706
10726
  pushTo(history, {
10707
10727
  pathname: homeUrl,
@@ -10730,6 +10750,9 @@ var useAutoAcademyDomain = function useAutoAcademyDomain(logout, history, superU
10730
10750
  return;
10731
10751
  }
10732
10752
  if (!paramAcademyDomain) {
10753
+ if (isLoginPage) {
10754
+ if (RELEASE_DATE) return;else searchParams["delete"]("domain");
10755
+ }
10733
10756
  searchParams.set("domain", academyDomain);
10734
10757
  pushTo(history, _extends({}, window.location, {
10735
10758
  search: searchParams.toString()
@@ -18620,7 +18643,7 @@ var StudentList = function StudentList(_ref) {
18620
18643
  selectedStudent = _ref.selectedStudent,
18621
18644
  t = _ref.t,
18622
18645
  textSearchRef = _ref.textSearchRef,
18623
- disabled = _ref.disabled,
18646
+ isOneRoleExists = _ref.isOneRoleExists,
18624
18647
  handleOpenDeleteClassDialog = _ref.handleOpenDeleteClassDialog,
18625
18648
  handleCloseConfirmDialog = _ref.handleCloseConfirmDialog,
18626
18649
  handleSort = _ref.handleSort,
@@ -18680,7 +18703,7 @@ var StudentList = function StudentList(_ref) {
18680
18703
  },
18681
18704
  placeholder: t("search_for"),
18682
18705
  onChange: handleChangeSearchText
18683
- }))), React__default.createElement(material.Grid, {
18706
+ }))), isOneRoleExists && React__default.createElement(material.Grid, {
18684
18707
  item: true,
18685
18708
  xs: 6,
18686
18709
  className: "d-flex align-items-center"
@@ -18716,11 +18739,11 @@ var StudentList = function StudentList(_ref) {
18716
18739
  className: "d-flex"
18717
18740
  }, React__default.createElement(material.IconButton, {
18718
18741
  color: "default",
18719
- className: (disabled ? "bg-secondary" : "bg-danger") + " text-white",
18742
+ className: (!isOneRoleExists ? "bg-secondary" : "bg-danger") + " text-white",
18720
18743
  onClick: function onClick() {
18721
18744
  return handleOpenDeleteClassDialog(i);
18722
18745
  },
18723
- disabled: disabled
18746
+ disabled: !isOneRoleExists
18724
18747
  }, React__default.createElement(fa6.FaTrashCan, {
18725
18748
  size: 12
18726
18749
  })))));
@@ -18767,6 +18790,7 @@ var SelectDialog = function SelectDialog(_ref) {
18767
18790
  onSubmit = _ref.onSubmit;
18768
18791
  var _useTranslation = reactI18next.useTranslation(),
18769
18792
  t = _useTranslation.t;
18793
+ var theme = material.useTheme();
18770
18794
  var handleSubmit = function handleSubmit() {
18771
18795
  onSubmit(selected);
18772
18796
  handleClear();
@@ -18866,7 +18890,12 @@ var SelectDialog = function SelectDialog(_ref) {
18866
18890
  disabled: !numSelected,
18867
18891
  onClick: handleSubmit
18868
18892
  }, submitText), React__default.createElement(material.Button, {
18869
- color: "secondary",
18893
+ sx: {
18894
+ background: theme.palette.grey[600],
18895
+ "&:hover": {
18896
+ background: theme.palette.grey[800]
18897
+ }
18898
+ },
18870
18899
  variant: "contained",
18871
18900
  onClick: onClose
18872
18901
  }, t('cancel'))));
@@ -18938,7 +18967,7 @@ var TeacherList = function TeacherList(_ref) {
18938
18967
  "aria-label": "search google maps"
18939
18968
  },
18940
18969
  onChange: handleChangeSearchText
18941
- }))), React__default.createElement(material.Grid, {
18970
+ }))), !disabled && React__default.createElement(material.Grid, {
18942
18971
  item: true,
18943
18972
  xs: 6,
18944
18973
  className: "d-flex align-items-center"
@@ -18951,8 +18980,7 @@ var TeacherList = function TeacherList(_ref) {
18951
18980
  }),
18952
18981
  onClick: function onClick() {
18953
18982
  return onAdd === null || onAdd === void 0 ? void 0 : onAdd("Teacher");
18954
- },
18955
- disabled: disabled
18983
+ }
18956
18984
  }, t("add_teachers"))), React__default.createElement(material.Grid, {
18957
18985
  item: true,
18958
18986
  xs: 12
@@ -19425,11 +19453,21 @@ var _excluded$9 = ["getStudents"],
19425
19453
  _excluded2 = ["getTeachers"],
19426
19454
  _excluded3 = ["getLessons"];
19427
19455
  var PAGE_TITLE$5 = "classes";
19428
- var useClassDetail = function useClassDetail(history, id) {
19456
+ var useClassDetail = function useClassDetail(_ref) {
19457
+ var history = _ref.history,
19458
+ id = _ref.id,
19459
+ role = _ref.role;
19429
19460
  var _useTranslation = reactI18next.useTranslation(),
19430
19461
  t = _useTranslation.t;
19431
19462
  var dispatch = reactRedux.useDispatch();
19432
19463
  var schema = ClassSchema(t);
19464
+ var user = reactRedux.useSelector(function (state) {
19465
+ var _state$common;
19466
+ return state === null || state === void 0 ? void 0 : (_state$common = state.common) === null || _state$common === void 0 ? void 0 : _state$common.user;
19467
+ });
19468
+ var roles = (user === null || user === void 0 ? void 0 : user.roles) || [];
19469
+ var isOneRoleExists = roles.length === 1;
19470
+ var isAdmin = roles.includes(exports.Role.Admin) && role === exports.Role.Admin;
19433
19471
  var _useState = React.useState(),
19434
19472
  course = _useState[0],
19435
19473
  setCourse = _useState[1];
@@ -19849,6 +19887,7 @@ var useClassDetail = function useClassDetail(history, id) {
19849
19887
  return {
19850
19888
  id: id,
19851
19889
  schema: schema,
19890
+ isAdmin: isAdmin,
19852
19891
  paging: paging,
19853
19892
  filter: filter,
19854
19893
  listUserSelected: selected,
@@ -19867,6 +19906,7 @@ var useClassDetail = function useClassDetail(history, id) {
19867
19906
  course: course,
19868
19907
  userList: openSelectDialog === "Student" ? students : teachers,
19869
19908
  teacherOptions: teacherOptions,
19909
+ isOneRoleExists: isOneRoleExists,
19870
19910
  studentListProps: studentListProps,
19871
19911
  teacherListProps: teacherListProps,
19872
19912
  lessonListProps: lessonListProps,
@@ -20123,7 +20163,7 @@ var LessonList = function LessonList(_ref) {
20123
20163
  className: "d-flex mb-2"
20124
20164
  }, React__default.createElement(material.Typography, {
20125
20165
  variant: "h4"
20126
- }, t("lessons"))), React__default.createElement(material.Grid, {
20166
+ }, t("lessons"))), !disabled && React__default.createElement(material.Grid, {
20127
20167
  item: true,
20128
20168
  xs: 6,
20129
20169
  className: "d-flex align-items-center"
@@ -20224,10 +20264,14 @@ var ClassDetail = function ClassDetail(_ref) {
20224
20264
  history = _ref.history,
20225
20265
  classListUrl = _ref.classListUrl,
20226
20266
  role = _ref.role;
20227
- var isAdmin = role === exports.Role.Admin;
20228
- var _useClassDetail = useClassDetail(history, id),
20267
+ var _useClassDetail = useClassDetail({
20268
+ history: history,
20269
+ id: id,
20270
+ role: role
20271
+ }),
20229
20272
  schema = _useClassDetail.schema,
20230
20273
  paging = _useClassDetail.paging,
20274
+ isAdmin = _useClassDetail.isAdmin,
20231
20275
  filter = _useClassDetail.filter,
20232
20276
  listUserSelected = _useClassDetail.listUserSelected,
20233
20277
  userList = _useClassDetail.userList,
@@ -20244,6 +20288,7 @@ var ClassDetail = function ClassDetail(_ref) {
20244
20288
  course = _useClassDetail.course,
20245
20289
  classRequest = _useClassDetail.classRequest,
20246
20290
  teacherOptions = _useClassDetail.teacherOptions,
20291
+ isOneRoleExists = _useClassDetail.isOneRoleExists,
20247
20292
  studentListProps = _useClassDetail.studentListProps,
20248
20293
  teacherListProps = _useClassDetail.teacherListProps,
20249
20294
  lessonListProps = _useClassDetail.lessonListProps,
@@ -20331,7 +20376,7 @@ var ClassDetail = function ClassDetail(_ref) {
20331
20376
  value: selected,
20332
20377
  index: TabList$2[1].value
20333
20378
  }, !!id && !Number.isNaN(+id) && selected === TabList$2[1].value && React__default.createElement(StudentList, Object.assign({
20334
- disabled: !isAdmin,
20379
+ isOneRoleExists: isOneRoleExists,
20335
20380
  onAdd: handleOpenSelectDialog
20336
20381
  }, studentListProps))), React__default.createElement(CustomTabPanel, {
20337
20382
  value: selected,
@@ -20586,7 +20631,7 @@ var UserDialog = function UserDialog(_ref) {
20586
20631
  open: open,
20587
20632
  onClose: onClose,
20588
20633
  size: "md",
20589
- title: t(data !== null && data !== void 0 && data.id ? "update_user" : "create_new_user")
20634
+ title: !disabled ? t(data !== null && data !== void 0 && data.id ? "update_user" : "create_new_user") : t('view_user')
20590
20635
  }, React__default.createElement("form", {
20591
20636
  onSubmit: handleSubmit(onSubmit),
20592
20637
  style: {
@@ -20767,11 +20812,10 @@ var UserDialog = function UserDialog(_ref) {
20767
20812
  color: "secondary",
20768
20813
  className: "bg-secondary",
20769
20814
  onClick: onClose
20770
- }, t("cancel")), React__default.createElement(material.Button, {
20815
+ }, t("cancel")), !disabled && React__default.createElement(material.Button, {
20771
20816
  variant: "contained",
20772
20817
  color: "primary",
20773
- type: "submit",
20774
- disabled: disabled
20818
+ type: "submit"
20775
20819
  }, data !== null && data !== void 0 && data.id ? t("update") : t("create")))));
20776
20820
  };
20777
20821
 
@@ -21548,7 +21592,7 @@ var UserList = function UserList(_ref) {
21548
21592
  key: i.id
21549
21593
  }, 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, i.schoolName), React__default.createElement(TableCell, null, i.major), React__default.createElement(TableCell, null, i.grade), 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.roles && formatRole(i.roles, t)), React__default.createElement(TableCell, null, React__default.createElement("div", {
21550
21594
  className: "d-flex"
21551
- }, React__default.createElement(material.IconButton, {
21595
+ }, isAdmin ? React__default.createElement(material.IconButton, {
21552
21596
  color: "default",
21553
21597
  className: styles$6["action-btn"] + " bg-warning text-white me-2",
21554
21598
  onClick: function onClick() {
@@ -21557,6 +21601,14 @@ var UserList = function UserList(_ref) {
21557
21601
  }, React__default.createElement(hi.HiOutlinePencilAlt, {
21558
21602
  className: styles$6["action-btn--pencil"],
21559
21603
  size: 16
21604
+ })) : React__default.createElement(material.IconButton, {
21605
+ color: "default",
21606
+ className: "bg-primary text-white me-1",
21607
+ onClick: function onClick() {
21608
+ return handleOpenUserDialog(i);
21609
+ }
21610
+ }, React__default.createElement(fa.FaEye, {
21611
+ size: 12
21560
21612
  })), isAdmin && React__default.createElement(material.IconButton, {
21561
21613
  onClick: function onClick() {
21562
21614
  return openDeleteDialog(i);
@@ -22553,6 +22605,34 @@ var NotificationList = function NotificationList(_ref) {
22553
22605
  })));
22554
22606
  };
22555
22607
 
22608
+ var ReleaseAlert = function ReleaseAlert() {
22609
+ var _useTranslation = reactI18next.useTranslation(),
22610
+ t = _useTranslation.t;
22611
+ var releaseDate = RELEASE_DATE;
22612
+ var isInValidDate = !releaseDate || releaseDate === DATE_MIN_VALUE || releaseDate === DATE_TIME_MIN_VALUE;
22613
+ var isLoginPage = window.location.pathname === LOGIN_URL;
22614
+ if (isInValidDate || !moment.utc(releaseDate).isValid()) return null;else {
22615
+ var version = moment(releaseDate).format("HH.mm.YYYY.MM.DD");
22616
+ return React__default.createElement(material.Box, {
22617
+ sx: {
22618
+ position: "fixed",
22619
+ right: 10,
22620
+ bottom: isLoginPage ? undefined : 5,
22621
+ top: isLoginPage ? 10 : undefined,
22622
+ userSelect: "none",
22623
+ zIndex: 1
22624
+ }
22625
+ }, React__default.createElement(material.Typography, {
22626
+ color: "success",
22627
+ sx: {
22628
+ fontSize: 10,
22629
+ color: "#3DC674",
22630
+ opacity: 0.8
22631
+ }
22632
+ }, t("version"), ": ", React__default.createElement("span", null, version)));
22633
+ }
22634
+ };
22635
+
22556
22636
  exports.moment = moment;
22557
22637
  Object.defineProperty(exports, 'I18nextProvider', {
22558
22638
  enumerable: true,
@@ -22625,6 +22705,7 @@ exports.PrintExamResultView = PrintExamResultView;
22625
22705
  exports.PrintExamView2 = PrintExamView2;
22626
22706
  exports.QuestionCountSelector = QuestionCountSelector;
22627
22707
  exports.RecentUserAction = RecentUserAction;
22708
+ exports.ReleaseAlert = ReleaseAlert;
22628
22709
  exports.SUPER_ADMIN_BASE_URL = SUPER_ADMIN_BASE_URL;
22629
22710
  exports.ScoreSelector = ScoreSelector;
22630
22711
  exports.SubjectSelector = SubjectSelector;