mario-core 2.9.157-survey → 2.9.159-survey

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,8 @@
1
+ import React, { FC } from "react";
2
+ interface Props {
3
+ onClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
4
+ className?: string;
5
+ text: string;
6
+ }
7
+ declare const SyncButtonIcon: FC<Props>;
8
+ export default SyncButtonIcon;
@@ -0,0 +1,13 @@
1
+ export declare type RosterStudent = {
2
+ sourcedId: string;
3
+ givenName: string;
4
+ middleName: string;
5
+ familyName: string;
6
+ email: string;
7
+ grades: string;
8
+ role: string;
9
+ };
10
+ export declare type Option = {
11
+ label: string;
12
+ value: string;
13
+ };
@@ -0,0 +1,8 @@
1
+ import { Option } from "../constants/types";
2
+ declare const useStudentSelector: (value?: string | undefined) => {
3
+ students: Option[];
4
+ isLoading: boolean;
5
+ student: Option | undefined;
6
+ handleInputChange: (value: string) => void;
7
+ };
8
+ export default useStudentSelector;
@@ -8,6 +8,7 @@ declare type UserDetail = {
8
8
  roles: string[];
9
9
  isActive: boolean;
10
10
  profileImageFileName: string;
11
+ sourcedId?: string;
11
12
  };
12
13
  declare const useUserDetail: (id?: string | undefined) => {
13
14
  userDetail: UserDetail;
@@ -8,5 +8,7 @@ declare const useUserList: () => {
8
8
  changeFilters: (updatedFilters: any) => void;
9
9
  reDirectDetailPage: (id?: number | undefined) => void;
10
10
  swicthUser: (id: string) => Promise<void>;
11
+ handleSyncRosterStudents: () => Promise<void>;
12
+ rosterUserInfo: (record: any) => string;
11
13
  };
12
14
  export default useUserList;
@@ -0,0 +1,7 @@
1
+ import { FC } from "react";
2
+ interface Props {
3
+ onChange: (e: any) => void;
4
+ value?: string;
5
+ }
6
+ declare const RosterStudentSelector: FC<Props>;
7
+ export default RosterStudentSelector;
package/dist/index.js CHANGED
@@ -716,6 +716,7 @@ var number_of_responses = "Number of Responses";
716
716
  var number_of_not_responses = "Number of Not Responses";
717
717
  var question_rating = "Question Rating";
718
718
  var no_response_yet = "No response yet";
719
+ var external_survey_is_highlight_in_the_table = "External Survey is highlighted in the table";
719
720
  var lang_us = {
720
721
  dashboard: dashboard,
721
722
  user: user,
@@ -1410,7 +1411,8 @@ var lang_us = {
1410
1411
  number_of_responses: number_of_responses,
1411
1412
  number_of_not_responses: number_of_not_responses,
1412
1413
  question_rating: question_rating,
1413
- no_response_yet: no_response_yet
1414
+ no_response_yet: no_response_yet,
1415
+ external_survey_is_highlight_in_the_table: external_survey_is_highlight_in_the_table
1414
1416
  };
1415
1417
 
1416
1418
  var dashboard$1 = "Dashboard";
@@ -2095,6 +2097,7 @@ var number_of_responses$1 = "Number of Responses";
2095
2097
  var number_of_not_responses$1 = "Number of Not Responses";
2096
2098
  var question_rating$1 = "Question Rating";
2097
2099
  var no_response_yet$1 = "No response yet";
2100
+ var external_survey_is_highlight_in_the_table$1 = "External Survey is highlighted in the table";
2098
2101
  var lang_uk = {
2099
2102
  dashboard: dashboard$1,
2100
2103
  user: user$1,
@@ -2789,7 +2792,8 @@ var lang_uk = {
2789
2792
  number_of_responses: number_of_responses$1,
2790
2793
  number_of_not_responses: number_of_not_responses$1,
2791
2794
  question_rating: question_rating$1,
2792
- no_response_yet: no_response_yet$1
2795
+ no_response_yet: no_response_yet$1,
2796
+ external_survey_is_highlight_in_the_table: external_survey_is_highlight_in_the_table$1
2793
2797
  };
2794
2798
 
2795
2799
  var DEFAULT_LANGUAGE = localStorage.getItem("language") !== null ? localStorage.getItem("language") : "uk";
@@ -7050,23 +7054,25 @@ var UploadFileButton = function UploadFileButton(_ref) {
7050
7054
  }, React__default.createElement(fa.FaTrashAlt, null)))), imagePreviewContainer);
7051
7055
  };
7052
7056
 
7053
- var USER_URL$1 = BASE_URL + "/api/user";
7057
+ var STUDENT_URL = BASE_URL + "/api/student";
7054
7058
  var CHANGE_PASSWORD = BASE_URL + "/api/Account/changePassword";
7055
7059
  var ACCOUNT_URL$1 = BASE_URL + "/api/account";
7056
7060
  var EDU_USER_URL = BASE_URL + "/api/User";
7057
- var get$5 = function get(filter) {
7058
- return api.get("" + USER_URL$1, {
7061
+ var ONE_ROSTER_USER_URL = BASE_URL + "/api/usersOneRoster";
7062
+ var ROSTER_USER_URL = BASE_URL + "/api/user/roster";
7063
+ var getRosterUser = function getRosterUser(filter) {
7064
+ return api.get("" + ROSTER_USER_URL, {
7059
7065
  params: filter
7060
7066
  });
7061
7067
  };
7062
- var getById$3 = function getById(id) {
7063
- return api.get(USER_URL$1 + "/" + id);
7068
+ var getRosterUserById = function getRosterUserById(id) {
7069
+ return api.get(ROSTER_USER_URL + "/" + id);
7064
7070
  };
7065
- var create$5 = function create(data) {
7066
- return api.post("" + USER_URL$1, data);
7071
+ var createRosterUser = function createRosterUser(data) {
7072
+ return api.post("" + ROSTER_USER_URL, data);
7067
7073
  };
7068
- var update$5 = function update(data) {
7069
- return api.put(USER_URL$1 + "/" + data.id, data);
7074
+ var updateRosterUser = function updateRosterUser(data) {
7075
+ return api.put(ROSTER_USER_URL + "/" + data.id, data);
7070
7076
  };
7071
7077
  var remove$3 = function remove(id) {
7072
7078
  return api["delete"](EDU_USER_URL + "/delete-item-user/" + id);
@@ -7080,6 +7086,17 @@ var forgotChangePassword = function forgotChangePassword(data) {
7080
7086
  var switchAccountUser = function switchAccountUser(id) {
7081
7087
  return api.post(EDU_USER_URL + "/switch-user/" + id);
7082
7088
  };
7089
+ var getRosterStudentsApi = function getRosterStudentsApi(filter) {
7090
+ return api.get("" + ONE_ROSTER_USER_URL, {
7091
+ params: filter
7092
+ });
7093
+ };
7094
+ var getRosterStudentBySourcedIdApi = function getRosterStudentBySourcedIdApi(sourcedId) {
7095
+ return api.get(ONE_ROSTER_USER_URL + "/" + sourcedId);
7096
+ };
7097
+ var syncRosterStudentsApi = function syncRosterStudentsApi() {
7098
+ return api.put(STUDENT_URL + "/sync-students");
7099
+ };
7083
7100
 
7084
7101
  var initValue$3 = {
7085
7102
  id: "",
@@ -7132,7 +7149,7 @@ var useUserDetail = function useUserDetail(id) {
7132
7149
  };
7133
7150
  dispatch(setLoading(true));
7134
7151
  var _temp = _catch(function () {
7135
- return Promise.resolve(getById$3(id)).then(function (res) {
7152
+ return Promise.resolve(getRosterUserById(id)).then(function (res) {
7136
7153
  var _res$data$roles, _res$data, _res$data2;
7137
7154
  setUserDetail(_extends({}, res.data, {
7138
7155
  dateOfBirth: dateFns.format(new Date(res.data.dateOfBirth), DATE_FORMAT),
@@ -7164,11 +7181,11 @@ var useUserDetail = function useUserDetail(id) {
7164
7181
  dispatch(setLoading(true));
7165
7182
  var _temp5 = _catch(function () {
7166
7183
  function _temp4() {
7167
- var next = !!id ? update$5 : create$5;
7184
+ var next = !!id ? updateRosterUser : createRosterUser;
7168
7185
  !id && delete data.id;
7169
7186
  return Promise.resolve(next(data)).then(function (result) {
7170
7187
  if (!!result) {
7171
- getById$3(result.data.id).then(function (e) {
7188
+ getRosterUserById(result.data.id).then(function (e) {
7172
7189
  backToList(e.data.fullName);
7173
7190
  });
7174
7191
  }
@@ -7289,6 +7306,142 @@ var changePasswordSchema = yup.object({
7289
7306
  confirmedNewPassword: yup.string().required("Confirm password is required")
7290
7307
  });
7291
7308
 
7309
+ var defaultFilter = {
7310
+ currentPage: 1,
7311
+ pageSize: 100,
7312
+ role: "student"
7313
+ };
7314
+ var useStudentSelector = function useStudentSelector(value) {
7315
+ var _useState = React.useState([]),
7316
+ students = _useState[0],
7317
+ setStudents = _useState[1];
7318
+ var _useState2 = React.useState(false),
7319
+ isLoading = _useState2[0],
7320
+ setLoading = _useState2[1];
7321
+ var _useState3 = React.useState(defaultFilter),
7322
+ filter = _useState3[0],
7323
+ setFilter = _useState3[1];
7324
+ var _useState4 = React.useState(),
7325
+ student = _useState4[0],
7326
+ setStudent = _useState4[1];
7327
+ var dispatch = reactRedux.useDispatch();
7328
+ var getRosterStudents = React.useCallback(function () {
7329
+ try {
7330
+ var _temp2 = function _temp2() {
7331
+ setLoading(false);
7332
+ };
7333
+ setLoading(true);
7334
+ var _temp = _catch(function () {
7335
+ return Promise.resolve(getRosterStudentsApi(filter)).then(function (res) {
7336
+ var _res$data;
7337
+ var students = ((_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.items) || [];
7338
+ setStudents(mapStudentsToOptions(students));
7339
+ });
7340
+ }, function (err) {
7341
+ console.log("err:", err);
7342
+ dispatch(setAlert({
7343
+ type: "error",
7344
+ message: "Cannot get roster students"
7345
+ }));
7346
+ });
7347
+ return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
7348
+ } catch (e) {
7349
+ return Promise.reject(e);
7350
+ }
7351
+ }, [JSON.stringify(filter)]);
7352
+ var getStudentBySourcedId = React.useCallback(function () {
7353
+ try {
7354
+ var _temp4 = function _temp4() {
7355
+ setLoading(false);
7356
+ };
7357
+ if (!value) return Promise.resolve();
7358
+ var v = students.find(function (i) {
7359
+ return i.value === value;
7360
+ });
7361
+ if (v) {
7362
+ setStudent(v);
7363
+ return Promise.resolve();
7364
+ }
7365
+ setLoading(true);
7366
+ var _temp3 = _catch(function () {
7367
+ return Promise.resolve(getRosterStudentBySourcedIdApi(value)).then(function (res) {
7368
+ var student = res.data;
7369
+ setStudent({
7370
+ label: student.sourcedId + " - " + student.givenName + " - " + student.email,
7371
+ value: student.sourcedId
7372
+ });
7373
+ });
7374
+ }, function (err) {
7375
+ console.log("err:", err);
7376
+ });
7377
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
7378
+ } catch (e) {
7379
+ return Promise.reject(e);
7380
+ }
7381
+ }, [value]);
7382
+ var mapStudentsToOptions = function mapStudentsToOptions(students) {
7383
+ return students.map(function (i) {
7384
+ return {
7385
+ label: rosterUserInfo(i),
7386
+ value: i.sourcedId
7387
+ };
7388
+ });
7389
+ };
7390
+ var rosterUserInfo = function rosterUserInfo(rosterUser) {
7391
+ var result = [];
7392
+ var givenName = rosterUser.givenName,
7393
+ middleName = rosterUser.middleName,
7394
+ familyName = rosterUser.familyName,
7395
+ email = rosterUser.email;
7396
+ var names = [];
7397
+ !!givenName && names.push(givenName);
7398
+ !!middleName && names.push(middleName);
7399
+ !!familyName && names.push(familyName);
7400
+ !!names.length && result.push(names.join(" "));
7401
+ !!email && result.push(email);
7402
+ return result.join(" - ");
7403
+ };
7404
+ var handleInputChange = function handleInputChange(value) {
7405
+ setFilter(function (state) {
7406
+ return _extends({}, state, {
7407
+ searchString: value
7408
+ });
7409
+ });
7410
+ };
7411
+ React.useEffect(function () {
7412
+ getRosterStudents();
7413
+ }, [JSON.stringify(filter)]);
7414
+ React.useEffect(function () {
7415
+ getStudentBySourcedId();
7416
+ }, [value]);
7417
+ return {
7418
+ students: students,
7419
+ isLoading: isLoading,
7420
+ student: student,
7421
+ handleInputChange: handleInputChange
7422
+ };
7423
+ };
7424
+
7425
+ var RosterStudentSelector = function RosterStudentSelector(_ref) {
7426
+ var value = _ref.value,
7427
+ onChange = _ref.onChange;
7428
+ var _useTranslation = reactI18next.useTranslation(),
7429
+ t = _useTranslation.t;
7430
+ var _useStudentSelector = useStudentSelector(value),
7431
+ students = _useStudentSelector.students,
7432
+ isLoading = _useStudentSelector.isLoading,
7433
+ student = _useStudentSelector.student,
7434
+ handleInputChange = _useStudentSelector.handleInputChange;
7435
+ return React__default.createElement(CustomSelector, {
7436
+ options: students,
7437
+ value: student,
7438
+ placeholder: t("Select student"),
7439
+ onChange: onChange,
7440
+ isLoading: isLoading,
7441
+ onInputChange: handleInputChange
7442
+ });
7443
+ };
7444
+
7292
7445
  var CREATE_USER = "create_user";
7293
7446
  var EDIT_USER_HEADER = "edit_user";
7294
7447
  var CHANGE_PASSWORD$1 = "change_password";
@@ -7505,7 +7658,12 @@ var UserDetail = function UserDetail() {
7505
7658
  }
7506
7659
  })))))), !!id && React__default.createElement(reactstrap.Row, null, React__default.createElement(reactstrap.Col, {
7507
7660
  md: 6
7508
- }), React__default.createElement(reactstrap.Col, {
7661
+ }, values.roles.includes("Student") && React__default.createElement(reactstrap.FormGroup, null, React__default.createElement(reactstrap.Label, null, "Map student from Roster"), React__default.createElement(RosterStudentSelector, {
7662
+ value: values.sourcedId,
7663
+ onChange: function onChange(e) {
7664
+ return setFieldValue("sourcedId", e.value);
7665
+ }
7666
+ }))), React__default.createElement(reactstrap.Col, {
7509
7667
  md: 6
7510
7668
  }, React__default.createElement(reactstrap.Button, {
7511
7669
  color: "primary",
@@ -7856,7 +8014,7 @@ var QuestionTypeSelector = function QuestionTypeSelector(props) {
7856
8014
  };
7857
8015
 
7858
8016
  var CATEGORY_URL = BASE_URL + "/api/SuggestionCategory";
7859
- var get$6 = function get() {
8017
+ var get$5 = function get() {
7860
8018
  return api.get(CATEGORY_URL);
7861
8019
  };
7862
8020
 
@@ -7870,7 +8028,7 @@ var SuggestionCategorySelector = function SuggestionCategorySelector(props) {
7870
8028
  var fetchCategory = function fetchCategory() {
7871
8029
  try {
7872
8030
  var _temp = _catch(function () {
7873
- return Promise.resolve(get$6()).then(function (res) {
8031
+ return Promise.resolve(get$5()).then(function (res) {
7874
8032
  setCategoryList(res.data.items);
7875
8033
  });
7876
8034
  }, function (err) {
@@ -7899,7 +8057,7 @@ var SuggestionCategorySelector = function SuggestionCategorySelector(props) {
7899
8057
  };
7900
8058
 
7901
8059
  var CATEGORY_URL$1 = BASE_URL + "/api/QuestionCategory";
7902
- var get$7 = function get(parentCategoryId) {
8060
+ var get$6 = function get(parentCategoryId) {
7903
8061
  return api.get(CATEGORY_URL$1, {
7904
8062
  params: {
7905
8063
  parentCategoryId: parentCategoryId
@@ -7924,7 +8082,7 @@ var QuestionCategorySelector = function QuestionCategorySelector(props) {
7924
8082
  var fetchCategory = function fetchCategory() {
7925
8083
  try {
7926
8084
  var _temp = _catch(function () {
7927
- return Promise.resolve(get$7(parentCategoryId)).then(function (res) {
8085
+ return Promise.resolve(get$6(parentCategoryId)).then(function (res) {
7928
8086
  setCategoryList(res.data.items);
7929
8087
  });
7930
8088
  }, function (err) {
@@ -8883,14 +9041,14 @@ var setGallery = toolkit.createAction("gallery/setGallery");
8883
9041
  var setTargetMedia = toolkit.createAction("gallery/setTargetMedia");
8884
9042
 
8885
9043
  var GALLERY_URL = BASE_URL + "/api/file";
8886
- var get$8 = function get(filter) {
9044
+ var get$7 = function get(filter) {
8887
9045
  return api.get("" + GALLERY_URL, {
8888
9046
  params: filter
8889
9047
  });
8890
9048
  };
8891
9049
 
8892
9050
  var TITLE$9 = "Gallery";
8893
- var defaultFilter = {
9051
+ var defaultFilter$1 = {
8894
9052
  searchString: ""
8895
9053
  };
8896
9054
  var useGalleryList = function useGalleryList(isLibrary) {
@@ -8910,7 +9068,7 @@ var useGalleryList = function useGalleryList(isLibrary) {
8910
9068
  var _useState = React.useState(),
8911
9069
  formDataMediaType = _useState[0],
8912
9070
  handleSelectFile = _useState[1];
8913
- var _useState2 = React.useState(Object.assign(_extends({}, defaultFilter), isLibrary ? {
9071
+ var _useState2 = React.useState(Object.assign(_extends({}, defaultFilter$1), isLibrary ? {
8914
9072
  isLibrary: true
8915
9073
  } : {})),
8916
9074
  filters = _useState2[0],
@@ -9079,7 +9237,7 @@ var useGalleryList = function useGalleryList(isLibrary) {
9079
9237
  };
9080
9238
  dispatch(setLoading(true));
9081
9239
  var _temp5 = _catch(function () {
9082
- return Promise.resolve(get$8(filters)).then(function (res) {
9240
+ return Promise.resolve(get$7(filters)).then(function (res) {
9083
9241
  dispatch(setGallery({
9084
9242
  mediaList: res.data,
9085
9243
  totalItems: res.data.length || 0
@@ -9304,7 +9462,7 @@ var GalleryList = function GalleryList(_ref) {
9304
9462
  };
9305
9463
 
9306
9464
  var CLASS_URL = BASE_URL + "/api/academicclass";
9307
- var get$9 = function get() {
9465
+ var get$8 = function get() {
9308
9466
  return api.get(CLASS_URL);
9309
9467
  };
9310
9468
 
@@ -9318,7 +9476,7 @@ var AcademicClassSelector = function AcademicClassSelector(props) {
9318
9476
  var getData = function getData() {
9319
9477
  try {
9320
9478
  var _temp = _catch(function () {
9321
- return Promise.resolve(get$9()).then(function (res) {
9479
+ return Promise.resolve(get$8()).then(function (res) {
9322
9480
  setClasses(res.data.items);
9323
9481
  });
9324
9482
  }, function (err) {
@@ -10561,7 +10719,7 @@ var generateRandomString = (function () {
10561
10719
 
10562
10720
  var amplitudeClient = amplitude.getInstance();
10563
10721
 
10564
- var USER_URL$2 = "/admin/user";
10722
+ var USER_URL$1 = "/admin/user";
10565
10723
  var CREATE_USER_URL = "/admin/create-user";
10566
10724
  var TITLE$a = "User list";
10567
10725
  var HOMEPAGE_TEACHER$1 = "/home";
@@ -10595,9 +10753,9 @@ var useUserList = function useUserList() {
10595
10753
  };
10596
10754
  dispatch(setLoading(true));
10597
10755
  var _temp = _catch(function () {
10598
- return Promise.resolve(fullName ? get$5(_extends({}, filters, {
10756
+ return Promise.resolve(fullName ? getRosterUser(_extends({}, filters, {
10599
10757
  searchString: fullName
10600
- })) : get$5(filters)).then(function (res) {
10758
+ })) : getRosterUser(filters)).then(function (res) {
10601
10759
  var _res$data = res.data,
10602
10760
  items = _res$data.items,
10603
10761
  totalItems = _res$data.totalItems;
@@ -10622,6 +10780,59 @@ var useUserList = function useUserList() {
10622
10780
  return Promise.reject(e);
10623
10781
  }
10624
10782
  }, [dispatch, filters]);
10783
+ var handleSyncRosterStudents = function handleSyncRosterStudents() {
10784
+ try {
10785
+ var _temp4 = function _temp4() {
10786
+ dispatch(setLoading(false));
10787
+ };
10788
+ dispatch(setLoading(true));
10789
+ var _temp3 = _catch(function () {
10790
+ return Promise.resolve(syncRosterStudentsApi()).then(function (res) {
10791
+ if (res.data) {
10792
+ dispatch(setAlert({
10793
+ type: "success",
10794
+ message: res.data + " student" + (res.data > 1 ? "s have" : " has") + " been synchronized"
10795
+ }));
10796
+ getData();
10797
+ } else {
10798
+ dispatch(setAlert({
10799
+ type: "success",
10800
+ message: "Every student synchronized"
10801
+ }));
10802
+ }
10803
+ });
10804
+ }, function (err) {
10805
+ var _err$response2, _err$response2$data;
10806
+ dispatch(setAlert({
10807
+ type: "danger",
10808
+ message: ((_err$response2 = err.response) === null || _err$response2 === void 0 ? void 0 : (_err$response2$data = _err$response2.data) === null || _err$response2$data === void 0 ? void 0 : _err$response2$data.title) || err.message
10809
+ }));
10810
+ });
10811
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
10812
+ } catch (e) {
10813
+ return Promise.reject(e);
10814
+ }
10815
+ };
10816
+ var rosterUserInfo = function rosterUserInfo(record) {
10817
+ if (!record) return '';
10818
+ var result = [];
10819
+ var sourcedId = record.sourcedId,
10820
+ rosterUser = record.rosterUser;
10821
+ !!sourcedId && result.push(sourcedId);
10822
+ if (rosterUser) {
10823
+ var givenName = rosterUser.givenName,
10824
+ middleName = rosterUser.middleName,
10825
+ familyName = rosterUser.familyName,
10826
+ email = rosterUser.email;
10827
+ var names = [];
10828
+ !!givenName && names.push(givenName);
10829
+ !!middleName && names.push(middleName);
10830
+ !!familyName && names.push(familyName);
10831
+ !!names.length && result.push(names.join(" "));
10832
+ !!email && result.push(email);
10833
+ }
10834
+ return result.join(" / ");
10835
+ };
10625
10836
  React.useEffect(function () {
10626
10837
  document.title = TITLE$a;
10627
10838
  }, []);
@@ -10657,10 +10868,10 @@ var useUserList = function useUserList() {
10657
10868
  }
10658
10869
  }));
10659
10870
  } catch (err) {
10660
- var _err$response2, _err$response2$data;
10871
+ var _err$response3, _err$response3$data;
10661
10872
  dispatch(setAlert({
10662
10873
  type: "danger",
10663
- message: ((_err$response2 = err.response) === null || _err$response2 === void 0 ? void 0 : (_err$response2$data = _err$response2.data) === null || _err$response2$data === void 0 ? void 0 : _err$response2$data.title) || err.message
10874
+ message: ((_err$response3 = err.response) === null || _err$response3 === void 0 ? void 0 : (_err$response3$data = _err$response3.data) === null || _err$response3$data === void 0 ? void 0 : _err$response3$data.title) || err.message
10664
10875
  }));
10665
10876
  }
10666
10877
  dispatch(setLoading(false));
@@ -10702,7 +10913,7 @@ var useUserList = function useUserList() {
10702
10913
  };
10703
10914
  var swicthUser = React.useCallback(function (id) {
10704
10915
  try {
10705
- var _temp3 = _catch(function () {
10916
+ var _temp5 = _catch(function () {
10706
10917
  return Promise.resolve(switchAccountUser(id)).then(function (res) {
10707
10918
  var data = res.data;
10708
10919
  dispatch(setModal({
@@ -10711,11 +10922,11 @@ var useUserList = function useUserList() {
10711
10922
  message: "Do you want to impersonate this user?",
10712
10923
  onConfirm: function () {
10713
10924
  try {
10714
- var _temp5 = function _temp5() {
10925
+ var _temp7 = function _temp7() {
10715
10926
  dispatch(setLoading(false));
10716
10927
  };
10717
10928
  dispatch(setLoading(true));
10718
- var _temp4 = _catch(function () {
10929
+ var _temp6 = _catch(function () {
10719
10930
  var req = {
10720
10931
  email: data.email,
10721
10932
  password: "default",
@@ -10726,13 +10937,13 @@ var useUserList = function useUserList() {
10726
10937
  redirectLoginUser(res);
10727
10938
  });
10728
10939
  }, function (err) {
10729
- var _err$response3, _err$response3$data;
10940
+ var _err$response4, _err$response4$data;
10730
10941
  setAlert({
10731
10942
  type: "danger",
10732
- message: ((_err$response3 = err.response) === null || _err$response3 === void 0 ? void 0 : (_err$response3$data = _err$response3.data) === null || _err$response3$data === void 0 ? void 0 : _err$response3$data.title) || err.message
10943
+ message: ((_err$response4 = err.response) === null || _err$response4 === void 0 ? void 0 : (_err$response4$data = _err$response4.data) === null || _err$response4$data === void 0 ? void 0 : _err$response4$data.title) || err.message
10733
10944
  });
10734
10945
  });
10735
- return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4));
10946
+ return Promise.resolve(_temp6 && _temp6.then ? _temp6.then(_temp7) : _temp7(_temp6));
10736
10947
  } catch (e) {
10737
10948
  return Promise.reject(e);
10738
10949
  }
@@ -10740,19 +10951,19 @@ var useUserList = function useUserList() {
10740
10951
  }));
10741
10952
  });
10742
10953
  }, function (err) {
10743
- var _err$response4, _err$response4$data;
10954
+ var _err$response5, _err$response5$data;
10744
10955
  dispatch(setAlert({
10745
10956
  type: "danger",
10746
- message: ((_err$response4 = err.response) === null || _err$response4 === void 0 ? void 0 : (_err$response4$data = _err$response4.data) === null || _err$response4$data === void 0 ? void 0 : _err$response4$data.title) || err.message
10957
+ message: ((_err$response5 = err.response) === null || _err$response5 === void 0 ? void 0 : (_err$response5$data = _err$response5.data) === null || _err$response5$data === void 0 ? void 0 : _err$response5$data.title) || err.message
10747
10958
  }));
10748
10959
  });
10749
- return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(function () {}) : void 0);
10960
+ return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(function () {}) : void 0);
10750
10961
  } catch (e) {
10751
10962
  return Promise.reject(e);
10752
10963
  }
10753
10964
  }, [filters]);
10754
10965
  var reDirectDetailPage = function reDirectDetailPage(id) {
10755
- var url = !!id ? USER_URL$2 + "/" + id : CREATE_USER_URL;
10966
+ var url = !!id ? USER_URL$1 + "/" + id : CREATE_USER_URL;
10756
10967
  history.push(url);
10757
10968
  };
10758
10969
  return {
@@ -10764,10 +10975,34 @@ var useUserList = function useUserList() {
10764
10975
  removeData: removeData,
10765
10976
  changeFilters: changeFilters,
10766
10977
  reDirectDetailPage: reDirectDetailPage,
10767
- swicthUser: swicthUser
10978
+ swicthUser: swicthUser,
10979
+ handleSyncRosterStudents: handleSyncRosterStudents,
10980
+ rosterUserInfo: rosterUserInfo
10768
10981
  };
10769
10982
  };
10770
10983
 
10984
+ var buttonTextStyle$1 = {
10985
+ fontWeight: 500
10986
+ };
10987
+ var buttonStyle$1 = {
10988
+ height: 38
10989
+ };
10990
+ var SyncButtonIcon = function SyncButtonIcon(_ref) {
10991
+ var text = _ref.text,
10992
+ onClick = _ref.onClick,
10993
+ _ref$className = _ref.className,
10994
+ className = _ref$className === void 0 ? "" : _ref$className;
10995
+ return React__default.createElement(reactstrap.Button, {
10996
+ onClick: onClick,
10997
+ color: 'primary',
10998
+ style: buttonStyle$1,
10999
+ className: "d-flex align-items-center " + className
11000
+ }, React__default.createElement(fa.FaSyncAlt, null), React__default.createElement("span", {
11001
+ className: 'ml-2',
11002
+ style: buttonTextStyle$1
11003
+ }, text));
11004
+ };
11005
+
10771
11006
  var header$4 = "User";
10772
11007
  var UserList = function UserList() {
10773
11008
  var _useUserList = useUserList(),
@@ -10778,7 +11013,9 @@ var UserList = function UserList() {
10778
11013
  removeData = _useUserList.removeData,
10779
11014
  changeFilters = _useUserList.changeFilters,
10780
11015
  reDirectDetailPage = _useUserList.reDirectDetailPage,
10781
- swicthUser = _useUserList.swicthUser;
11016
+ swicthUser = _useUserList.swicthUser,
11017
+ handleSyncRosterStudents = _useUserList.handleSyncRosterStudents,
11018
+ rosterUserInfo = _useUserList.rosterUserInfo;
10782
11019
  var _useTranslation = reactI18next.useTranslation(),
10783
11020
  t = _useTranslation.t;
10784
11021
  return React__default.createElement("div", {
@@ -10804,7 +11041,13 @@ var UserList = function UserList() {
10804
11041
  })), React__default.createElement(reactstrap.Col, {
10805
11042
  md: 4,
10806
11043
  className: "d-flex justify-content-end align-items-center"
10807
- }, t("total_of_users"), " : ", totalItems)), React__default.createElement(reactstrap.Row, {
11044
+ }, t("total_of_users"), " : ", totalItems), React__default.createElement(reactstrap.Col, {
11045
+ md: 12,
11046
+ className: "d-flex justify-content-end my-2"
11047
+ }, React__default.createElement(SyncButtonIcon, {
11048
+ text: "Sync Roster students",
11049
+ onClick: handleSyncRosterStudents
11050
+ }))), React__default.createElement(reactstrap.Row, {
10808
11051
  className: "mb-2"
10809
11052
  }, React__default.createElement(reactstrap.Col, {
10810
11053
  md: 12
@@ -10827,6 +11070,8 @@ var UserList = function UserList() {
10827
11070
  }, t("active_status")), React__default.createElement("th", {
10828
11071
  className: "align-top"
10829
11072
  }, t("created_time")), React__default.createElement("th", {
11073
+ className: "align-top"
11074
+ }, "Information Roster (Sourced Id / Full name / Email)"), React__default.createElement("th", {
10830
11075
  className: "text-center"
10831
11076
  }, t("action")))), React__default.createElement("tbody", null, userList.map(function (record) {
10832
11077
  return React__default.createElement("tr", {
@@ -10850,7 +11095,7 @@ var UserList = function UserList() {
10850
11095
  className: "align-middle"
10851
11096
  }, record.isActive ? t("active") : t("inactive")), React__default.createElement("td", {
10852
11097
  className: "align-middle"
10853
- }, utcToLocalTime(record === null || record === void 0 ? void 0 : record.createTime, "yyyy-MM-DD HH:mm")), React__default.createElement("td", {
11098
+ }, utcToLocalTime(record === null || record === void 0 ? void 0 : record.createTime, "yyyy-MM-DD HH:mm")), React__default.createElement("td", null, rosterUserInfo(record)), React__default.createElement("td", {
10854
11099
  className: "text-center align-middle"
10855
11100
  }, React__default.createElement(fa.FaUsersCog, {
10856
11101
  style: {