mario-core 2.9.149-level → 2.9.151-level

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,7 @@
1
+ import React, { FC } from "react";
2
+ interface Props {
3
+ onClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
4
+ className?: string;
5
+ }
6
+ declare const SyncButtonIcon: FC<Props>;
7
+ 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
@@ -3271,9 +3271,7 @@ var useLogin = function useLogin() {
3271
3271
 
3272
3272
  amplitude.getInstance().init(!isLocalhost ? INIT_AMPLITUDE_KEY_PROD : INIT_AMPLITUDE_KEY_STAGE, data.email, {
3273
3273
  includeReferrer: false,
3274
- includeUtm: false,
3275
- includeGclid: false,
3276
- includeFbclid: false
3274
+ includeUtm: false
3277
3275
  });
3278
3276
  var hostName = window.location.hostname;
3279
3277
  amplitude.getInstance().setUserProperties({
@@ -7253,23 +7251,25 @@ var SkillList = function SkillList() {
7253
7251
  var setUserList = toolkit.createAction("users/setUserList");
7254
7252
  var setStudentList = toolkit.createAction("users/setStudentList");
7255
7253
 
7256
- var USER_URL$1 = BASE_URL + "/api/user";
7254
+ var STUDENT_URL = BASE_URL + "/api/student";
7257
7255
  var CHANGE_PASSWORD = BASE_URL + "/api/Account/changePassword";
7258
7256
  var ACCOUNT_URL$1 = BASE_URL + "/api/account";
7259
7257
  var EDU_USER_URL = BASE_URL + "/api/User";
7260
- var get$5 = function get(filter) {
7261
- return api.get("" + USER_URL$1, {
7258
+ var ONE_ROSTER_USER_URL = BASE_URL + "/api/usersOneRoster";
7259
+ var ROSTER_USER_URL = BASE_URL + "/api/user/roster";
7260
+ var getRosterUser = function getRosterUser(filter) {
7261
+ return api.get("" + ROSTER_USER_URL, {
7262
7262
  params: filter
7263
7263
  });
7264
7264
  };
7265
- var getById$3 = function getById(id) {
7266
- return api.get(USER_URL$1 + "/" + id);
7265
+ var getRosterUserById = function getRosterUserById(id) {
7266
+ return api.get(ROSTER_USER_URL + "/" + id);
7267
7267
  };
7268
- var create$5 = function create(data) {
7269
- return api.post("" + USER_URL$1, data);
7268
+ var createRosterUser = function createRosterUser(data) {
7269
+ return api.post("" + ROSTER_USER_URL, data);
7270
7270
  };
7271
- var update$5 = function update(data) {
7272
- return api.put(USER_URL$1 + "/" + data.id, data);
7271
+ var updateRosterUser = function updateRosterUser(data) {
7272
+ return api.put(ROSTER_USER_URL + "/" + data.id, data);
7273
7273
  };
7274
7274
  var remove$3 = function remove(id) {
7275
7275
  return api["delete"](EDU_USER_URL + "/delete-item-user/" + id);
@@ -7283,8 +7283,19 @@ var forgotChangePassword = function forgotChangePassword(data) {
7283
7283
  var switchAccountUser = function switchAccountUser(id) {
7284
7284
  return api.post(EDU_USER_URL + "/switch-user/" + id);
7285
7285
  };
7286
+ var getRosterStudentsApi = function getRosterStudentsApi(filter) {
7287
+ return api.get("" + ONE_ROSTER_USER_URL, {
7288
+ params: filter
7289
+ });
7290
+ };
7291
+ var getRosterStudentBySourcedIdApi = function getRosterStudentBySourcedIdApi(sourcedId) {
7292
+ return api.get(ONE_ROSTER_USER_URL + "/" + sourcedId);
7293
+ };
7294
+ var syncRosterStudentsApi = function syncRosterStudentsApi() {
7295
+ return api.put(STUDENT_URL + "/sync-students");
7296
+ };
7286
7297
 
7287
- var USER_URL$2 = "/admin/user";
7298
+ var USER_URL$1 = "/admin/user";
7288
7299
  var CREATE_USER_URL = "/admin/create-user";
7289
7300
  var TITLE$7 = "User list";
7290
7301
  var HOMEPAGE_TEACHER$1 = "/home";
@@ -7324,9 +7335,9 @@ var useUserList = function useUserList() {
7324
7335
  dispatch(setLoading(true));
7325
7336
 
7326
7337
  var _temp4 = _catch(function () {
7327
- return Promise.resolve(fullName ? get$5(_extends({}, filters, {
7338
+ return Promise.resolve(fullName ? getRosterUser(_extends({}, filters, {
7328
7339
  searchString: fullName
7329
- })) : get$5(filters)).then(function (res) {
7340
+ })) : getRosterUser(filters)).then(function (res) {
7330
7341
  var _res$data = res.data,
7331
7342
  items = _res$data.items,
7332
7343
  totalItems = _res$data.totalItems;
@@ -7355,6 +7366,68 @@ var useUserList = function useUserList() {
7355
7366
  return Promise.reject(e);
7356
7367
  }
7357
7368
  }, [dispatch, filters]);
7369
+
7370
+ var handleSyncRosterStudents = function handleSyncRosterStudents() {
7371
+ try {
7372
+ var _temp7 = function _temp7() {
7373
+ dispatch(setLoading(false));
7374
+ };
7375
+
7376
+ dispatch(setLoading(true));
7377
+
7378
+ var _temp8 = _catch(function () {
7379
+ return Promise.resolve(syncRosterStudentsApi()).then(function (res) {
7380
+ if (res.data) {
7381
+ dispatch(setAlert({
7382
+ type: "success",
7383
+ message: res.data + " student" + (res.data > 1 ? "s have" : " has") + " been synchronized"
7384
+ }));
7385
+ getData();
7386
+ } else {
7387
+ dispatch(setAlert({
7388
+ type: "success",
7389
+ message: "Every student synchronized"
7390
+ }));
7391
+ }
7392
+ });
7393
+ }, function (err) {
7394
+ var _err$response2, _err$response2$data;
7395
+
7396
+ dispatch(setAlert({
7397
+ type: "danger",
7398
+ 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
7399
+ }));
7400
+ });
7401
+
7402
+ return Promise.resolve(_temp8 && _temp8.then ? _temp8.then(_temp7) : _temp7(_temp8));
7403
+ } catch (e) {
7404
+ return Promise.reject(e);
7405
+ }
7406
+ };
7407
+
7408
+ var rosterUserInfo = function rosterUserInfo(record) {
7409
+ if (!record) return '';
7410
+ var result = [];
7411
+ var sourcedId = record.sourcedId,
7412
+ rosterUser = record.rosterUser;
7413
+ !!sourcedId && result.push(sourcedId);
7414
+
7415
+ if (rosterUser) {
7416
+ var givenName = rosterUser.givenName,
7417
+ middleName = rosterUser.middleName,
7418
+ familyName = rosterUser.familyName,
7419
+ email = rosterUser.email;
7420
+ var names = [];
7421
+ !!givenName && names.push(givenName);
7422
+ !!middleName && names.push(middleName);
7423
+ !!familyName && names.push(familyName);
7424
+ !!names.length && result.push(names.join(" "));
7425
+ !!email && result.push(email);
7426
+ }
7427
+
7428
+ return result.join(" / ");
7429
+ };
7430
+
7358
7431
  React.useEffect(function () {
7359
7432
  document.title = TITLE$7;
7360
7433
  }, []);
@@ -7391,11 +7464,11 @@ var useUserList = function useUserList() {
7391
7464
  }
7392
7465
  }));
7393
7466
  } catch (err) {
7394
- var _err$response2, _err$response2$data;
7467
+ var _err$response3, _err$response3$data;
7395
7468
 
7396
7469
  dispatch(setAlert({
7397
7470
  type: "danger",
7398
- 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
7471
+ 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
7399
7472
  }));
7400
7473
  }
7401
7474
 
@@ -7441,7 +7514,7 @@ var useUserList = function useUserList() {
7441
7514
 
7442
7515
  var swicthUser = React.useCallback(function (id) {
7443
7516
  try {
7444
- var _temp6 = _catch(function () {
7517
+ var _temp10 = _catch(function () {
7445
7518
  return Promise.resolve(switchAccountUser(id)).then(function (res) {
7446
7519
  var data = res.data;
7447
7520
  dispatch(setModal({
@@ -7450,13 +7523,13 @@ var useUserList = function useUserList() {
7450
7523
  message: "Do you want to impersonate this user?",
7451
7524
  onConfirm: function () {
7452
7525
  try {
7453
- var _temp9 = function _temp9() {
7526
+ var _temp13 = function _temp13() {
7454
7527
  dispatch(setLoading(false));
7455
7528
  };
7456
7529
 
7457
7530
  dispatch(setLoading(true));
7458
7531
 
7459
- var _temp10 = _catch(function () {
7532
+ var _temp14 = _catch(function () {
7460
7533
  var req = {
7461
7534
  email: data.email,
7462
7535
  password: "default",
@@ -7467,15 +7540,15 @@ var useUserList = function useUserList() {
7467
7540
  redirectLoginUser(res);
7468
7541
  });
7469
7542
  }, function (err) {
7470
- var _err$response3, _err$response3$data;
7543
+ var _err$response4, _err$response4$data;
7471
7544
 
7472
7545
  setAlert({
7473
7546
  type: "danger",
7474
- 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
7547
+ 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
7475
7548
  });
7476
7549
  });
7477
7550
 
7478
- return Promise.resolve(_temp10 && _temp10.then ? _temp10.then(_temp9) : _temp9(_temp10));
7551
+ return Promise.resolve(_temp14 && _temp14.then ? _temp14.then(_temp13) : _temp13(_temp14));
7479
7552
  } catch (e) {
7480
7553
  return Promise.reject(e);
7481
7554
  }
@@ -7483,22 +7556,22 @@ var useUserList = function useUserList() {
7483
7556
  }));
7484
7557
  });
7485
7558
  }, function (err) {
7486
- var _err$response4, _err$response4$data;
7559
+ var _err$response5, _err$response5$data;
7487
7560
 
7488
7561
  dispatch(setAlert({
7489
7562
  type: "danger",
7490
- 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
7563
+ 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
7491
7564
  }));
7492
7565
  });
7493
7566
 
7494
- return Promise.resolve(_temp6 && _temp6.then ? _temp6.then(function () {}) : void 0);
7567
+ return Promise.resolve(_temp10 && _temp10.then ? _temp10.then(function () {}) : void 0);
7495
7568
  } catch (e) {
7496
7569
  return Promise.reject(e);
7497
7570
  }
7498
7571
  }, [filters]);
7499
7572
 
7500
7573
  var reDirectDetailPage = function reDirectDetailPage(id) {
7501
- var url = !!id ? USER_URL$2 + "/" + id : CREATE_USER_URL;
7574
+ var url = !!id ? USER_URL$1 + "/" + id : CREATE_USER_URL;
7502
7575
  history.push(url);
7503
7576
  };
7504
7577
 
@@ -7511,7 +7584,9 @@ var useUserList = function useUserList() {
7511
7584
  removeData: removeData,
7512
7585
  changeFilters: changeFilters,
7513
7586
  reDirectDetailPage: reDirectDetailPage,
7514
- swicthUser: swicthUser
7587
+ swicthUser: swicthUser,
7588
+ handleSyncRosterStudents: handleSyncRosterStudents,
7589
+ rosterUserInfo: rosterUserInfo
7515
7590
  };
7516
7591
  };
7517
7592
 
@@ -7590,6 +7665,29 @@ var utcToLocalTime = (function (time, FORMAT) {
7590
7665
  }
7591
7666
  });
7592
7667
 
7668
+ var buttonTextStyle$1 = {
7669
+ fontWeight: 500
7670
+ };
7671
+ var buttonStyle$1 = {
7672
+ height: 38
7673
+ };
7674
+
7675
+ var SyncButtonIcon = function SyncButtonIcon(_ref) {
7676
+ var text = _ref.text,
7677
+ onClick = _ref.onClick,
7678
+ _ref$className = _ref.className,
7679
+ className = _ref$className === void 0 ? "" : _ref$className;
7680
+ return React__default.createElement(reactstrap.Button, {
7681
+ onClick: onClick,
7682
+ color: 'primary',
7683
+ style: buttonStyle$1,
7684
+ className: "d-flex align-items-center " + className
7685
+ }, React__default.createElement(fa.FaSyncAlt, null), React__default.createElement("span", {
7686
+ className: 'ml-2',
7687
+ style: buttonTextStyle$1
7688
+ }, text));
7689
+ };
7690
+
7593
7691
  var header$2 = "User";
7594
7692
 
7595
7693
  var UserList = function UserList() {
@@ -7601,7 +7699,9 @@ var UserList = function UserList() {
7601
7699
  removeData = _useUserList.removeData,
7602
7700
  changeFilters = _useUserList.changeFilters,
7603
7701
  reDirectDetailPage = _useUserList.reDirectDetailPage,
7604
- swicthUser = _useUserList.swicthUser;
7702
+ swicthUser = _useUserList.swicthUser,
7703
+ handleSyncRosterStudents = _useUserList.handleSyncRosterStudents,
7704
+ rosterUserInfo = _useUserList.rosterUserInfo;
7605
7705
 
7606
7706
  var _useTranslation = reactI18next.useTranslation(),
7607
7707
  t = _useTranslation.t;
@@ -7629,7 +7729,13 @@ var UserList = function UserList() {
7629
7729
  })), React__default.createElement(reactstrap.Col, {
7630
7730
  md: 4,
7631
7731
  className: "d-flex justify-content-end align-items-center"
7632
- }, t("total_of_users"), " : ", totalItems)), React__default.createElement(reactstrap.Row, {
7732
+ }, t("total_of_users"), " : ", totalItems), React__default.createElement(reactstrap.Col, {
7733
+ md: 12,
7734
+ className: "d-flex justify-content-end my-2"
7735
+ }, React__default.createElement(SyncButtonIcon, {
7736
+ text: "Sync Roster students",
7737
+ onClick: handleSyncRosterStudents
7738
+ }))), React__default.createElement(reactstrap.Row, {
7633
7739
  className: "mb-2"
7634
7740
  }, React__default.createElement(reactstrap.Col, {
7635
7741
  md: 12
@@ -7652,6 +7758,8 @@ var UserList = function UserList() {
7652
7758
  }, t("active_status")), React__default.createElement("th", {
7653
7759
  className: "align-top"
7654
7760
  }, t("created_time")), React__default.createElement("th", {
7761
+ className: "align-top"
7762
+ }, "Information Roster (Sourced Id / Full name / Email)"), React__default.createElement("th", {
7655
7763
  className: "text-center"
7656
7764
  }, t("action")))), React__default.createElement("tbody", null, userList.map(function (record) {
7657
7765
  return React__default.createElement("tr", {
@@ -7675,7 +7783,7 @@ var UserList = function UserList() {
7675
7783
  className: "align-middle"
7676
7784
  }, record.isActive ? t("active") : t("inactive")), React__default.createElement("td", {
7677
7785
  className: "align-middle"
7678
- }, utcToLocalTime(record === null || record === void 0 ? void 0 : record.createTime, "yyyy-MM-DD HH:mm")), React__default.createElement("td", {
7786
+ }, 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", {
7679
7787
  className: "text-center align-middle"
7680
7788
  }, React__default.createElement(fa.FaUsersCog, {
7681
7789
  style: {
@@ -7855,7 +7963,7 @@ var useUserDetail = function useUserDetail(id) {
7855
7963
  dispatch(setLoading(true));
7856
7964
 
7857
7965
  var _temp4 = _catch(function () {
7858
- return Promise.resolve(getById$3(id)).then(function (res) {
7966
+ return Promise.resolve(getRosterUserById(id)).then(function (res) {
7859
7967
  var _res$data$roles, _res$data, _res$data2;
7860
7968
 
7861
7969
  setUserDetail(_extends({}, res.data, {
@@ -7892,11 +8000,11 @@ var useUserDetail = function useUserDetail(id) {
7892
8000
 
7893
8001
  var _temp10 = _catch(function () {
7894
8002
  function _temp6() {
7895
- var next = !!id ? update$5 : create$5;
8003
+ var next = !!id ? updateRosterUser : createRosterUser;
7896
8004
  !id && delete data.id;
7897
8005
  return Promise.resolve(next(data)).then(function (result) {
7898
8006
  if (!!result) {
7899
- getById$3(result.data.id).then(function (e) {
8007
+ getRosterUserById(result.data.id).then(function (e) {
7900
8008
  backToList(e.data.fullName);
7901
8009
  });
7902
8010
  }
@@ -8035,6 +8143,163 @@ var changePasswordSchema = yup.object({
8035
8143
  confirmedNewPassword: yup.string().required("Confirm password is required")
8036
8144
  });
8037
8145
 
8146
+ var defaultFilter = {
8147
+ currentPage: 1,
8148
+ pageSize: 100,
8149
+ role: "student"
8150
+ };
8151
+
8152
+ var useStudentSelector = function useStudentSelector(value) {
8153
+ var _useState = React.useState([]),
8154
+ students = _useState[0],
8155
+ setStudents = _useState[1];
8156
+
8157
+ var _useState2 = React.useState(false),
8158
+ isLoading = _useState2[0],
8159
+ setLoading = _useState2[1];
8160
+
8161
+ var _useState3 = React.useState(defaultFilter),
8162
+ filter = _useState3[0],
8163
+ setFilter = _useState3[1];
8164
+
8165
+ var _useState4 = React.useState(),
8166
+ student = _useState4[0],
8167
+ setStudent = _useState4[1];
8168
+
8169
+ var dispatch = reactRedux.useDispatch();
8170
+ var getRosterStudents = React.useCallback(function () {
8171
+ try {
8172
+ var _temp3 = function _temp3() {
8173
+ setLoading(false);
8174
+ };
8175
+
8176
+ setLoading(true);
8177
+
8178
+ var _temp4 = _catch(function () {
8179
+ return Promise.resolve(getRosterStudentsApi(filter)).then(function (res) {
8180
+ var _res$data;
8181
+
8182
+ var students = ((_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.items) || [];
8183
+ setStudents(mapStudentsToOptions(students));
8184
+ });
8185
+ }, function (err) {
8186
+ console.log("err:", err);
8187
+ dispatch(setAlert({
8188
+ type: "error",
8189
+ message: "Cannot get roster students"
8190
+ }));
8191
+ });
8192
+
8193
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp3) : _temp3(_temp4));
8194
+ } catch (e) {
8195
+ return Promise.reject(e);
8196
+ }
8197
+ }, [JSON.stringify(filter)]);
8198
+ var getStudentBySourcedId = React.useCallback(function () {
8199
+ try {
8200
+ var _temp7 = function _temp7() {
8201
+ setLoading(false);
8202
+ };
8203
+
8204
+ if (!value) return Promise.resolve();
8205
+ var v = students.find(function (i) {
8206
+ return i.value === value;
8207
+ });
8208
+
8209
+ if (v) {
8210
+ setStudent(v);
8211
+ return Promise.resolve();
8212
+ }
8213
+
8214
+ setLoading(true);
8215
+
8216
+ var _temp8 = _catch(function () {
8217
+ return Promise.resolve(getRosterStudentBySourcedIdApi(value)).then(function (res) {
8218
+ var student = res.data;
8219
+ setStudent({
8220
+ label: student.sourcedId + " - " + student.givenName + " - " + student.email,
8221
+ value: student.sourcedId
8222
+ });
8223
+ });
8224
+ }, function (err) {
8225
+ console.log("err:", err);
8226
+ });
8227
+
8228
+ return Promise.resolve(_temp8 && _temp8.then ? _temp8.then(_temp7) : _temp7(_temp8));
8229
+ } catch (e) {
8230
+ return Promise.reject(e);
8231
+ }
8232
+ }, [value]);
8233
+
8234
+ var mapStudentsToOptions = function mapStudentsToOptions(students) {
8235
+ return students.map(function (i) {
8236
+ return {
8237
+ label: rosterUserInfo(i),
8238
+ value: i.sourcedId
8239
+ };
8240
+ });
8241
+ };
8242
+
8243
+ var rosterUserInfo = function rosterUserInfo(rosterUser) {
8244
+ var result = [];
8245
+ var givenName = rosterUser.givenName,
8246
+ middleName = rosterUser.middleName,
8247
+ familyName = rosterUser.familyName,
8248
+ email = rosterUser.email;
8249
+ var names = [];
8250
+ !!givenName && names.push(givenName);
8251
+ !!middleName && names.push(middleName);
8252
+ !!familyName && names.push(familyName);
8253
+ !!names.length && result.push(names.join(" "));
8254
+ !!email && result.push(email);
8255
+ return result.join(" - ");
8256
+ };
8257
+
8258
+ var handleInputChange = function handleInputChange(value) {
8259
+ setFilter(function (state) {
8260
+ return _extends({}, state, {
8261
+ searchString: value
8262
+ });
8263
+ });
8264
+ };
8265
+
8266
+ React.useEffect(function () {
8267
+ getRosterStudents();
8268
+ }, [JSON.stringify(filter)]);
8269
+ React.useEffect(function () {
8270
+ getStudentBySourcedId();
8271
+ }, [value]);
8272
+ return {
8273
+ students: students,
8274
+ isLoading: isLoading,
8275
+ student: student,
8276
+ handleInputChange: handleInputChange
8277
+ };
8278
+ };
8279
+
8280
+ var RosterStudentSelector = function RosterStudentSelector(_ref) {
8281
+ var value = _ref.value,
8282
+ onChange = _ref.onChange;
8283
+
8284
+ var _useTranslation = reactI18next.useTranslation(),
8285
+ t = _useTranslation.t;
8286
+
8287
+ var _useStudentSelector = useStudentSelector(value),
8288
+ students = _useStudentSelector.students,
8289
+ isLoading = _useStudentSelector.isLoading,
8290
+ student = _useStudentSelector.student,
8291
+ handleInputChange = _useStudentSelector.handleInputChange;
8292
+
8293
+ return React__default.createElement(CustomSelector, {
8294
+ options: students,
8295
+ value: student,
8296
+ placeholder: t("Select student"),
8297
+ onChange: onChange,
8298
+ isLoading: isLoading,
8299
+ onInputChange: handleInputChange
8300
+ });
8301
+ };
8302
+
8038
8303
  var CREATE_USER = "create_user";
8039
8304
  var EDIT_USER_HEADER = "edit_user";
8040
8305
  var CHANGE_PASSWORD$1 = "change_password";
@@ -8262,7 +8527,12 @@ var UserDetail = function UserDetail() {
8262
8527
  }
8263
8528
  })))))), !!id && React__default.createElement(reactstrap.Row, null, React__default.createElement(reactstrap.Col, {
8264
8529
  md: 6
8265
- }), React__default.createElement(reactstrap.Col, {
8530
+ }, values.roles.includes("Student") && React__default.createElement(reactstrap.FormGroup, null, React__default.createElement(reactstrap.Label, null, "Map student from Roster"), React__default.createElement(RosterStudentSelector, {
8531
+ value: values.sourcedId,
8532
+ onChange: function onChange(e) {
8533
+ return setFieldValue("sourcedId", e.value);
8534
+ }
8535
+ }))), React__default.createElement(reactstrap.Col, {
8266
8536
  md: 6
8267
8537
  }, React__default.createElement(reactstrap.Button, {
8268
8538
  color: "primary",
@@ -8588,7 +8858,7 @@ var QuestionTypeSelector = function QuestionTypeSelector(props) {
8588
8858
  };
8589
8859
 
8590
8860
  var CATEGORY_URL = BASE_URL + "/api/SuggestionCategory";
8591
- var get$6 = function get() {
8861
+ var get$5 = function get() {
8592
8862
  return api.get(CATEGORY_URL);
8593
8863
  };
8594
8864
 
@@ -8604,7 +8874,7 @@ var SuggestionCategorySelector = function SuggestionCategorySelector(props) {
8604
8874
  var fetchCategory = function fetchCategory() {
8605
8875
  try {
8606
8876
  var _temp2 = _catch(function () {
8607
- return Promise.resolve(get$6()).then(function (res) {
8877
+ return Promise.resolve(get$5()).then(function (res) {
8608
8878
  setCategoryList(res.data.items);
8609
8879
  });
8610
8880
  }, function (err) {
@@ -8635,7 +8905,7 @@ var SuggestionCategorySelector = function SuggestionCategorySelector(props) {
8635
8905
  };
8636
8906
 
8637
8907
  var CATEGORY_URL$1 = BASE_URL + "/api/QuestionCategory";
8638
- var get$7 = function get(parentCategoryId) {
8908
+ var get$6 = function get(parentCategoryId) {
8639
8909
  return api.get(CATEGORY_URL$1, {
8640
8910
  params: {
8641
8911
  parentCategoryId: parentCategoryId
@@ -8662,7 +8932,7 @@ var QuestionCategorySelector = function QuestionCategorySelector(props) {
8662
8932
  var fetchCategory = function fetchCategory() {
8663
8933
  try {
8664
8934
  var _temp2 = _catch(function () {
8665
- return Promise.resolve(get$7(parentCategoryId)).then(function (res) {
8935
+ return Promise.resolve(get$6(parentCategoryId)).then(function (res) {
8666
8936
  setCategoryList(res.data.items);
8667
8937
  });
8668
8938
  }, function (err) {
@@ -9683,14 +9953,14 @@ var setGallery = toolkit.createAction("gallery/setGallery");
9683
9953
  var setTargetMedia = toolkit.createAction("gallery/setTargetMedia");
9684
9954
 
9685
9955
  var GALLERY_URL = BASE_URL + "/api/file";
9686
- var get$8 = function get(filter) {
9956
+ var get$7 = function get(filter) {
9687
9957
  return api.get("" + GALLERY_URL, {
9688
9958
  params: filter
9689
9959
  });
9690
9960
  };
9691
9961
 
9692
9962
  var TITLE$a = "Gallery";
9693
- var defaultFilter = {
9963
+ var defaultFilter$1 = {
9694
9964
  searchString: ""
9695
9965
  };
9696
9966
 
@@ -9714,7 +9984,7 @@ var useGalleryList = function useGalleryList(isLibrary) {
9714
9984
  formDataMediaType = _useState[0],
9715
9985
  handleSelectFile = _useState[1];
9716
9986
 
9717
- var _useState2 = React.useState(Object.assign(_extends({}, defaultFilter), isLibrary ? {
9987
+ var _useState2 = React.useState(Object.assign(_extends({}, defaultFilter$1), isLibrary ? {
9718
9988
  isLibrary: true
9719
9989
  } : {})),
9720
9990
  filters = _useState2[0],
@@ -9905,7 +10175,7 @@ var useGalleryList = function useGalleryList(isLibrary) {
9905
10175
  dispatch(setLoading(true));
9906
10176
 
9907
10177
  var _temp12 = _catch(function () {
9908
- return Promise.resolve(get$8(filters)).then(function (res) {
10178
+ return Promise.resolve(get$7(filters)).then(function (res) {
9909
10179
  dispatch(setGallery({
9910
10180
  mediaList: res.data,
9911
10181
  totalItems: res.data.length || 0
@@ -10145,7 +10415,7 @@ var GalleryList = function GalleryList(_ref) {
10145
10415
  };
10146
10416
 
10147
10417
  var CLASS_URL = BASE_URL + "/api/academicclass";
10148
- var get$9 = function get() {
10418
+ var get$8 = function get() {
10149
10419
  return api.get(CLASS_URL);
10150
10420
  };
10151
10421
 
@@ -10161,7 +10431,7 @@ var AcademicClassSelector = function AcademicClassSelector(props) {
10161
10431
  var getData = function getData() {
10162
10432
  try {
10163
10433
  var _temp2 = _catch(function () {
10164
- return Promise.resolve(get$9()).then(function (res) {
10434
+ return Promise.resolve(get$8()).then(function (res) {
10165
10435
  setClasses(res.data.items);
10166
10436
  });
10167
10437
  }, function (err) {