mario-core 2.9.157-level → 2.9.158-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.
package/dist/index.js CHANGED
@@ -27,13 +27,15 @@ var fa = require('react-icons/fa');
27
27
  var dateFns = require('date-fns');
28
28
  var tinymceReact = require('@tinymce/tinymce-react');
29
29
  var differenceInCalendarYears = _interopDefault(require('date-fns/differenceInCalendarYears'));
30
+ var bi = require('react-icons/bi');
31
+ var hi = require('react-icons/hi');
32
+ var ai = require('react-icons/ai');
30
33
  var DatePicker = _interopDefault(require('react-datepicker'));
31
34
  var toDate = _interopDefault(require('date-fns/toDate'));
32
35
  var md = require('react-icons/md');
33
36
  var Creatable = _interopDefault(require('react-select/creatable'));
34
37
  var ReactNotification$1 = _interopDefault(require('react-notifications-component'));
35
38
  require('react-notifications-component/dist/theme.css');
36
- var ai = require('react-icons/ai');
37
39
  require('symbol-observable');
38
40
 
39
41
  var dashboard = "Dashboard";
@@ -2800,7 +2802,7 @@ function _catch(body, recover) {
2800
2802
  return result;
2801
2803
  }
2802
2804
 
2803
- var styles = {"btn-login-google":"_2HqmH","notification-count":"_2sew7","text-introduction":"_3OgWF","btn-trans-border":"_r9cAh","contact":"_NszFe","learn-more":"_MDjzH","title-quote":"_1Swkw","descriptions-quote":"_gi8vj","box-login":"_38Lo1","block-verification":"_1OzGy","block-login":"_wWIyO","title-login":"_3nuns","title-forgot-password":"_21qb6","btn-close":"_NhW9l","btn-login":"_3IL10","digital-privacy-icon":"_141p1","return-to-login":"_Ce3Kg","recover-account":"_2t6d9","link-to-login":"_3bDsd","remember":"_11FZt","term-and-conditions":"_3LXoI","descriptions-forgot-pass":"_PMcjT","content-icon":"_2rZY6","descriptions-icon":"_3SOdX","title-icon":"_y9lM2","nav-home":"_1TT1q","box-introduction":"_32V6L","icon":"_20YJX","form-user-name":"_39BJD","checkbox-remember":"_2K9b2","block-reset-password":"_23Sua","block-forgot-pass":"_3CWP6","page-not-login":"_3Wmco","content-quote":"_13Rk0","home-page":"_o6HKW","red-background":"_jOY7o","imageAnimation":"_wnn2_","login":"_F-hjL","login-content":"_149oA","logo-home":"_24U3W","img-box":"_2v-L_","img-login":"_3ncTL","img-login-rectangle":"_2kOvJ","c-main":"_39l0X","container-fluid":"_1BMwK","input-file-label":"_1XNpH","delete-avatar-button":"_1z5h9","header-logo":"_Gewcf","box-sidebar":"_2vcmv","sidebar-logo":"_1hXpy","sidebar-nav-links":"_3vb3s","c-active":"_36jSM","sidebar-nav-links-hover":"_DNrus","box-sidebar-header":"_3NEZj","box-logout":"_1wUDG","sidebar-btn-minimized":"_1S7Px","sidebar-logout":"_2P85D","nav-mobile":"_1qjbW","filter-media-file":"_1I62C","div":"_3cLcM","dropdown-menu":"_1krbH","header-avatar":"_RQaHE","dropdown-menu-flag":"_XK8oS","dropdown-content":"_3ys4W","dropdown-change":"_ToOW_","item-address":"_3sQlR","item-logout":"_3bqSM","title-address":"_1jgSI","img-avatar":"_35Ttz","item-contact":"_1wc7o","logout":"_1_9tV","content-text":"_3S4f2","dropdown-content-language":"_3ajui","dropdown-item-language":"_3Y_y4","dropdown-item-language-active":"_CzNMi","hide-in-mobile":"_1INnO","hamburger-menu":"_2yRc8","box-content-home-page":"_ABUIP","collapse-box":"_WX97m","hide-in-desktop":"_2LIqK","control-input":"_2Zz97","custom-control":"_3-yp5","item-select-role":"_1KcY7","item-role-active":"_dOVso","model-switch-roles":"_3ZqxI","title":"_g-p72"};
2805
+ var styles = {"btn-login-google":"_2HqmH","notification-count":"_2sew7","text-introduction":"_3OgWF","btn-trans-border":"_r9cAh","contact":"_NszFe","learn-more":"_MDjzH","title-quote":"_1Swkw","descriptions-quote":"_gi8vj","box-login":"_38Lo1","block-verification":"_1OzGy","block-login":"_wWIyO","title-login":"_3nuns","title-forgot-password":"_21qb6","btn-close":"_NhW9l","btn-login":"_3IL10","digital-privacy-icon":"_141p1","return-to-login":"_Ce3Kg","recover-account":"_2t6d9","link-to-login":"_3bDsd","remember":"_11FZt","term-and-conditions":"_3LXoI","descriptions-forgot-pass":"_PMcjT","content-icon":"_2rZY6","descriptions-icon":"_3SOdX","title-icon":"_y9lM2","nav-home":"_1TT1q","box-introduction":"_32V6L","icon":"_20YJX","form-user-name":"_39BJD","checkbox-remember":"_2K9b2","block-reset-password":"_23Sua","block-forgot-pass":"_3CWP6","page-not-login":"_3Wmco","content-quote":"_13Rk0","home-page":"_o6HKW","red-background":"_jOY7o","imageAnimation":"_wnn2_","login":"_F-hjL","login-content":"_149oA","logo-home":"_24U3W","img-box":"_2v-L_","img-login":"_3ncTL","img-login-rectangle":"_2kOvJ","c-main":"_39l0X","container-fluid":"_1BMwK","input-file-label":"_1XNpH","delete-avatar-button":"_1z5h9","header-logo":"_Gewcf","box-sidebar":"_2vcmv","sidebar-logo":"_1hXpy","sidebar-nav-links":"_3vb3s","c-active":"_36jSM","sidebar-nav-links-hover":"_DNrus","box-sidebar-header":"_3NEZj","box-logout":"_1wUDG","sidebar-btn-minimized":"_1S7Px","sidebar-logout":"_2P85D","nav-mobile":"_1qjbW","filter-media-file":"_1I62C","div":"_3cLcM","dropdown-menu":"_1krbH","header-avatar":"_RQaHE","dropdown-menu-flag":"_XK8oS","dropdown-content":"_3ys4W","dropdown-change":"_ToOW_","item-address":"_3sQlR","item-logout":"_3bqSM","title-address":"_1jgSI","img-avatar":"_35Ttz","item-contact":"_1wc7o","logout":"_1_9tV","content-text":"_3S4f2","dropdown-content-language":"_3ajui","dropdown-item-language":"_3Y_y4","dropdown-item-language-active":"_CzNMi","popover__sort__item":"_1ocBa","popover__sort__item--active":"_18NhM","popover__search__icon":"_2bquW","popover__search__input":"_3A4G4","popover__options":"_1MsEW","button-export":"_2rTzM","button-content":"_18y0w","button-icon":"_3cZAT","hide-in-mobile":"_1INnO","hamburger-menu":"_2yRc8","box-content-home-page":"_ABUIP","collapse-box":"_WX97m","hide-in-desktop":"_2LIqK","control-input":"_2Zz97","custom-control":"_3-yp5","item-select-role":"_1KcY7","item-role-active":"_dOVso","model-switch-roles":"_3ZqxI","title":"_g-p72"};
2804
2806
 
2805
2807
  var style = {
2806
2808
  fontSize: "0.85rem"
@@ -7304,6 +7306,11 @@ var getRosterUser = function getRosterUser(filter) {
7304
7306
  params: filter
7305
7307
  });
7306
7308
  };
7309
+ var getRosterUserExport = function getRosterUserExport(filter) {
7310
+ return api.get(ROSTER_USER_URL + "/export-csv", {
7311
+ params: filter
7312
+ });
7313
+ };
7307
7314
  var getRosterUserById = function getRosterUserById(id) {
7308
7315
  return api.get(ROSTER_USER_URL + "/" + id);
7309
7316
  };
@@ -7337,6 +7344,173 @@ var syncRosterStudentsApi = function syncRosterStudentsApi() {
7337
7344
  return api.put(STUDENT_URL + "/sync-students");
7338
7345
  };
7339
7346
 
7347
+ var UserOrder;
7348
+
7349
+ (function (UserOrder) {
7350
+ UserOrder[UserOrder["Id"] = 0] = "Id";
7351
+ UserOrder[UserOrder["Name"] = 1] = "Name";
7352
+ UserOrder[UserOrder["Email"] = 2] = "Email";
7353
+ UserOrder[UserOrder["Age"] = 3] = "Age";
7354
+ UserOrder[UserOrder["Role"] = 4] = "Role";
7355
+ UserOrder[UserOrder["Status"] = 5] = "Status";
7356
+ UserOrder[UserOrder["CreatedAt"] = 6] = "CreatedAt";
7357
+ UserOrder[UserOrder["RosterUser"] = 7] = "RosterUser";
7358
+ })(UserOrder || (UserOrder = {}));
7359
+
7360
+ var SearchBy;
7361
+
7362
+ (function (SearchBy) {
7363
+ SearchBy[SearchBy["Id"] = 0] = "Id";
7364
+ SearchBy[SearchBy["Name"] = 1] = "Name";
7365
+ SearchBy[SearchBy["Email"] = 2] = "Email";
7366
+ SearchBy[SearchBy["Role"] = 3] = "Role";
7367
+ SearchBy[SearchBy["RosterUser"] = 4] = "RosterUser";
7368
+ SearchBy[SearchBy["Status"] = 5] = "Status";
7369
+ })(SearchBy || (SearchBy = {}));
7370
+
7371
+ var _userOrders;
7372
+ var userOrders = (_userOrders = {}, _userOrders[UserOrder.Id] = "filter-id", _userOrders[UserOrder.Name] = "filter-name", _userOrders[UserOrder.Email] = "filter-email", _userOrders[UserOrder.Age] = "filter-age", _userOrders[UserOrder.Role] = "filter-role", _userOrders[UserOrder.Status] = "filter-status", _userOrders[UserOrder.CreatedAt] = "filter-createdAt", _userOrders[UserOrder.RosterUser] = "filter-roster", _userOrders);
7373
+ var UserColumns = [{
7374
+ name: "name",
7375
+ sortBy: UserOrder.Name,
7376
+ searchBy: SearchBy.Name,
7377
+ className: "align-top",
7378
+ getOption: function getOption(user) {
7379
+ var _user$fullName, _user$fullName$trim;
7380
+
7381
+ return {
7382
+ label: user.fullName || "empty",
7383
+ value: (_user$fullName = user.fullName) === null || _user$fullName === void 0 ? void 0 : (_user$fullName$trim = _user$fullName.trim) === null || _user$fullName$trim === void 0 ? void 0 : _user$fullName$trim.call(_user$fullName)
7384
+ };
7385
+ }
7386
+ }, {
7387
+ name: "email",
7388
+ sortBy: UserOrder.Email,
7389
+ searchBy: SearchBy.Email,
7390
+ className: "align-top",
7391
+ getOption: function getOption(user) {
7392
+ var _user$email, _user$email$trim;
7393
+
7394
+ return {
7395
+ label: user.email || "empty",
7396
+ value: (_user$email = user.email) === null || _user$email === void 0 ? void 0 : (_user$email$trim = _user$email.trim) === null || _user$email$trim === void 0 ? void 0 : _user$email$trim.call(_user$email)
7397
+ };
7398
+ }
7399
+ }, {
7400
+ name: "age",
7401
+ sortBy: UserOrder.Age,
7402
+ className: "align-top"
7403
+ }, {
7404
+ name: "role",
7405
+ sortBy: UserOrder.Role,
7406
+ searchBy: SearchBy.Role,
7407
+ className: "align-top",
7408
+ getOption: function getOption(user) {
7409
+ var _user$roles, _user$roles2, _user$roles3, _user$roles3$join, _user$roles3$join$tri;
7410
+
7411
+ return {
7412
+ label: (_user$roles = user.roles) !== null && _user$roles !== void 0 && _user$roles.length ? (_user$roles2 = user.roles) === null || _user$roles2 === void 0 ? void 0 : _user$roles2.map(function (role) {
7413
+ return role === "SecondaryTeacher" ? "SupportTeacher" : role;
7414
+ }).join(", ") : "empty",
7415
+ value: (_user$roles3 = user.roles) === null || _user$roles3 === void 0 ? void 0 : (_user$roles3$join = _user$roles3.join("")) === null || _user$roles3$join === void 0 ? void 0 : (_user$roles3$join$tri = _user$roles3$join.trim) === null || _user$roles3$join$tri === void 0 ? void 0 : _user$roles3$join$tri.call(_user$roles3$join)
7416
+ };
7417
+ }
7418
+ }, {
7419
+ name: "active_status",
7420
+ sortBy: UserOrder.Status,
7421
+ searchBy: SearchBy.Status,
7422
+ className: "align-top",
7423
+ getOption: function getOption(user, t) {
7424
+ return {
7425
+ label: user.isActive ? t("active") : t("inactive"),
7426
+ value: user.isActive
7427
+ };
7428
+ },
7429
+ options: [{
7430
+ label: "Active",
7431
+ value: "true"
7432
+ }, {
7433
+ label: "Inactive",
7434
+ value: "false"
7435
+ }]
7436
+ }, {
7437
+ name: "created_time",
7438
+ sortBy: UserOrder.CreatedAt,
7439
+ className: "align-top"
7440
+ }, {
7441
+ name: "Information Roster (Sourced Id / Full name / Email)",
7442
+ sortBy: UserOrder.RosterUser,
7443
+ searchBy: SearchBy.RosterUser,
7444
+ className: "align-top",
7445
+ getOption: function getOption(record) {
7446
+ if (!record) return {
7447
+ label: "empty",
7448
+ value: ""
7449
+ };
7450
+ var result = [];
7451
+ var sourcedId = record.sourcedId,
7452
+ rosterUser = record.rosterUser;
7453
+ !!sourcedId && result.push(sourcedId);
7454
+
7455
+ if (rosterUser) {
7456
+ var givenName = rosterUser.givenName,
7457
+ middleName = rosterUser.middleName,
7458
+ familyName = rosterUser.familyName,
7459
+ email = rosterUser.email;
7460
+ var names = [];
7461
+ !!givenName && names.push(givenName);
7462
+ !!middleName && names.push(middleName);
7463
+ !!familyName && names.push(familyName);
7464
+ !!names.length && result.push(names.join(" "));
7465
+ !!email && result.push(email);
7466
+ }
7467
+
7468
+ return {
7469
+ label: result.length ? result.join(" / ") : "empty",
7470
+ value: "" + (sourcedId || "") + ((rosterUser === null || rosterUser === void 0 ? void 0 : rosterUser.familyName) || "") + ((rosterUser === null || rosterUser === void 0 ? void 0 : rosterUser.middleName) || "") + ((rosterUser === null || rosterUser === void 0 ? void 0 : rosterUser.givenName) || "") + ((rosterUser === null || rosterUser === void 0 ? void 0 : rosterUser.email) || "")
7471
+ };
7472
+ }
7473
+ }, {
7474
+ name: "action",
7475
+ className: "text-center"
7476
+ }];
7477
+ var DEFAULT_PAGE_SIZE$1 = {
7478
+ label: "10",
7479
+ value: 10
7480
+ };
7481
+ var DEFAULT_FILTER$1 = {
7482
+ searchString: "",
7483
+ currentPage: 1,
7484
+ pageSize: DEFAULT_PAGE_SIZE$1.value
7485
+ };
7486
+ var DEFAULT_FILTER_POPOVER = {
7487
+ currentPage: 1,
7488
+ pageSize: 200
7489
+ };
7490
+ var CSV_PREFIX = "data:text/csv;charset=utf-8,";
7491
+
7492
+ var useFilters$1 = function useFilters() {
7493
+ var _useState = React.useState(DEFAULT_FILTER$1),
7494
+ filters = _useState[0],
7495
+ setFilters = _useState[1];
7496
+
7497
+ var changeFilters = function changeFilters(updatedFilters) {
7498
+ var newFilters = _extends({}, filters, updatedFilters);
7499
+
7500
+ if (!!newFilters.searchString && !!updatedFilters.searchString && updatedFilters.searchString != filters.searchString) {
7501
+ newFilters.currentPage = 1;
7502
+ }
7503
+
7504
+ setFilters(newFilters);
7505
+ };
7506
+
7507
+ return {
7508
+ filters: filters,
7509
+ setFilters: setFilters,
7510
+ changeFilters: changeFilters
7511
+ };
7512
+ };
7513
+
7340
7514
  var USER_URL$1 = "/admin/user";
7341
7515
  var CREATE_USER_URL = "/admin/create-user";
7342
7516
  var TITLE$7 = "User list";
@@ -7358,17 +7532,14 @@ var useUserList = function useUserList() {
7358
7532
  return state.users.totalItems;
7359
7533
  });
7360
7534
 
7361
- var _useFilters = useFilters(),
7535
+ var _useFilters = useFilters$1(),
7362
7536
  filters = _useFilters.filters,
7363
7537
  changeFilters = _useFilters.changeFilters;
7364
7538
 
7365
- var _useState = React.useState(!!queryName ? queryName : ""),
7366
- fullName = _useState[0],
7367
- setFullName = _useState[1];
7368
-
7539
+ var fullName = !!queryName ? queryName : "";
7369
7540
  var isDistrict = window.location.host.includes("-district");
7370
7541
  var dispatch = reactRedux.useDispatch();
7371
- var getData = React.useCallback(function (fullName) {
7542
+ var getData = React.useCallback(function () {
7372
7543
  try {
7373
7544
  var _temp3 = function _temp3() {
7374
7545
  dispatch(setLoading(false));
@@ -7377,9 +7548,7 @@ var useUserList = function useUserList() {
7377
7548
  dispatch(setLoading(true));
7378
7549
 
7379
7550
  var _temp4 = _catch(function () {
7380
- return Promise.resolve(fullName ? getRosterUser(_extends({}, filters, {
7381
- searchString: fullName
7382
- })) : getRosterUser(filters)).then(function (res) {
7551
+ return Promise.resolve(getRosterUser(filters)).then(function (res) {
7383
7552
  var _res$data = res.data,
7384
7553
  items = _res$data.items,
7385
7554
  totalItems = _res$data.totalItems;
@@ -7474,13 +7643,13 @@ var useUserList = function useUserList() {
7474
7643
  document.title = TITLE$7;
7475
7644
  }, []);
7476
7645
  React.useEffect(function () {
7477
- if (!!fullName) {
7478
- getData(fullName);
7479
- setFullName(null);
7480
- } else {
7481
- getData();
7482
- }
7483
- }, [filters]);
7646
+ changeFilters(_extends({}, filters, {
7647
+ searchString: fullName
7648
+ }));
7649
+ }, [fullName]);
7650
+ React.useEffect(function () {
7651
+ getData();
7652
+ }, [JSON.stringify(filters)]);
7484
7653
  var removeData = React.useCallback(function (id) {
7485
7654
  dispatch(setLoading(true));
7486
7655
 
@@ -7622,6 +7791,7 @@ var useUserList = function useUserList() {
7622
7791
  totalItems: totalItems,
7623
7792
  filters: filters,
7624
7793
  queryName: queryName,
7794
+ fullName: fullName,
7625
7795
  getData: getData,
7626
7796
  removeData: removeData,
7627
7797
  changeFilters: changeFilters,
@@ -7730,6 +7900,481 @@ var SyncButtonIcon = function SyncButtonIcon(_ref) {
7730
7900
  }, text));
7731
7901
  };
7732
7902
 
7903
+ var useClickOutside = function useClickOutside(wrapperRef, onClickOutside) {
7904
+ React.useEffect(function () {
7905
+ function handleClickOutside(event) {
7906
+ if (wrapperRef.current && !wrapperRef.current.contains(event.target)) {
7907
+ onClickOutside === null || onClickOutside === void 0 ? void 0 : onClickOutside();
7908
+ }
7909
+ }
7910
+
7911
+ document.addEventListener("mousedown", handleClickOutside);
7912
+ return function () {
7913
+ document.removeEventListener("mousedown", handleClickOutside);
7914
+ };
7915
+ }, [wrapperRef.current]);
7916
+ };
7917
+
7918
+ var useFilterPopover = function useFilterPopover(props) {
7919
+ var sortBy = props.sortBy,
7920
+ filters = props.filters,
7921
+ users = props.users,
7922
+ searchBy = props.searchBy,
7923
+ defaultOptions = props.defaultOptions,
7924
+ selectedOptions = props.selectedOptions,
7925
+ onOptionsChange = props.onOptionsChange,
7926
+ onSearch = props.onSearch,
7927
+ onClose = props.onClose,
7928
+ onChangeFilters = props.onChangeFilters,
7929
+ getOption = props.getOption;
7930
+
7931
+ var _useState = React.useState(),
7932
+ sOptions = _useState[0],
7933
+ setSOptions = _useState[1];
7934
+
7935
+ var _useState2 = React.useState([]),
7936
+ filteredOptions = _useState2[0],
7937
+ setFilteredOptions = _useState2[1];
7938
+
7939
+ var ref = React.useRef(null);
7940
+ useClickOutside(ref, onClose);
7941
+
7942
+ var _useTranslation = reactI18next.useTranslation(),
7943
+ t = _useTranslation.t;
7944
+
7945
+ var handleSearch = React.useCallback(function (e) {
7946
+ var _e$target$value$trim, _e$target$value;
7947
+
7948
+ var value = (_e$target$value$trim = (_e$target$value = e.target.value) === null || _e$target$value === void 0 ? void 0 : _e$target$value.trim()) != null ? _e$target$value$trim : "";
7949
+ searchBy != undefined && !defaultOptions && (onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, searchBy));
7950
+ searchBy != undefined && !!defaultOptions && setFilteredOptions(defaultOptions.filter(function (i) {
7951
+ return i.label.toLowerCase().includes(value === null || value === void 0 ? void 0 : value.toLowerCase());
7952
+ }));
7953
+ }, [searchBy, JSON.stringify(defaultOptions)]);
7954
+ var handleApplyFilter = React.useCallback(function () {
7955
+ onOptionsChange === null || onOptionsChange === void 0 ? void 0 : onOptionsChange(sOptions, searchBy);
7956
+ onClose === null || onClose === void 0 ? void 0 : onClose();
7957
+ }, [JSON.stringify(sOptions)]);
7958
+ var handleOptionSelected = React.useCallback(function (e) {
7959
+ var value = e.target.value;
7960
+ if (!value) setSOptions(undefined);else {
7961
+ var newOptions = sOptions != null ? sOptions : [];
7962
+ var index = newOptions.indexOf(value);
7963
+
7964
+ if (index > -1) {
7965
+ newOptions.splice(index, 1);
7966
+ } else {
7967
+ newOptions = [].concat(newOptions, [value]);
7968
+ }
7969
+
7970
+ setSOptions(newOptions == undefined ? newOptions : [].concat(newOptions));
7971
+ }
7972
+ }, [JSON.stringify(sOptions)]);
7973
+ var handleOptionSelectedAll = React.useCallback(function (e) {
7974
+ var value = e.target.checked;
7975
+ if (!value) setSOptions([""]);else setSOptions(undefined);
7976
+ }, []);
7977
+ var handleSortDesc = React.useCallback(function () {
7978
+ onChangeFilters === null || onChangeFilters === void 0 ? void 0 : onChangeFilters(_extends({}, filters, {
7979
+ sortBy: (filters === null || filters === void 0 ? void 0 : filters.isDescending) === true ? undefined : sortBy,
7980
+ isDescending: (filters === null || filters === void 0 ? void 0 : filters.isDescending) === true ? undefined : true
7981
+ }));
7982
+ onClose === null || onClose === void 0 ? void 0 : onClose();
7983
+ }, [JSON.stringify(filters), searchBy, searchBy]);
7984
+ var handleSortAsc = React.useCallback(function () {
7985
+ onChangeFilters === null || onChangeFilters === void 0 ? void 0 : onChangeFilters(_extends({}, filters, {
7986
+ sortBy: (filters === null || filters === void 0 ? void 0 : filters.isDescending) === false ? undefined : sortBy,
7987
+ isDescending: (filters === null || filters === void 0 ? void 0 : filters.isDescending) === false ? undefined : false
7988
+ }));
7989
+ onClose === null || onClose === void 0 ? void 0 : onClose();
7990
+ }, [JSON.stringify(filters), searchBy, searchBy]);
7991
+ var options = React.useMemo(function () {
7992
+ if (!getOption) return [];
7993
+ return users.reduce(function (i, current) {
7994
+ var _extends2;
7995
+
7996
+ var option = getOption(current, t);
7997
+ return _extends({}, i, (_extends2 = {}, _extends2[option.label] = option.value, _extends2));
7998
+ }, {});
7999
+ }, [JSON.stringify(users), JSON.stringify(getOption)]);
8000
+ var isAscending = (filters === null || filters === void 0 ? void 0 : filters.isDescending) == false && filters.sortBy === sortBy;
8001
+ var isDescending = !!(filters !== null && filters !== void 0 && filters.isDescending) && filters.sortBy === sortBy;
8002
+ React.useEffect(function () {
8003
+ if ((filters === null || filters === void 0 ? void 0 : filters.searchBy) !== searchBy) setSOptions(undefined);else setSOptions(selectedOptions);
8004
+ }, [JSON.stringify(selectedOptions), filters === null || filters === void 0 ? void 0 : filters.searchBy]);
8005
+ React.useEffect(function () {
8006
+ setFilteredOptions(defaultOptions || []);
8007
+ }, [JSON.stringify(defaultOptions)]);
8008
+ return {
8009
+ ref: ref,
8010
+ options: options,
8011
+ sOptions: sOptions,
8012
+ isAscending: isAscending,
8013
+ isDescending: isDescending,
8014
+ filteredOptions: filteredOptions,
8015
+ handleSearch: handleSearch,
8016
+ handleApplyFilter: handleApplyFilter,
8017
+ handleOptionSelected: handleOptionSelected,
8018
+ handleOptionSelectedAll: handleOptionSelectedAll,
8019
+ handleSortDesc: handleSortDesc,
8020
+ handleSortAsc: handleSortAsc
8021
+ };
8022
+ };
8023
+
8024
+ var FilterPopover = function FilterPopover(props) {
8025
+ var searchString = props.searchString,
8026
+ defaultOptions = props.defaultOptions,
8027
+ onClose = props.onClose,
8028
+ getOption = props.getOption;
8029
+
8030
+ var _useFilterPopover = useFilterPopover(props),
8031
+ ref = _useFilterPopover.ref,
8032
+ options = _useFilterPopover.options,
8033
+ sOptions = _useFilterPopover.sOptions,
8034
+ isAscending = _useFilterPopover.isAscending,
8035
+ isDescending = _useFilterPopover.isDescending,
8036
+ filteredOptions = _useFilterPopover.filteredOptions,
8037
+ handleSearch = _useFilterPopover.handleSearch,
8038
+ handleApplyFilter = _useFilterPopover.handleApplyFilter,
8039
+ handleOptionSelected = _useFilterPopover.handleOptionSelected,
8040
+ handleOptionSelectedAll = _useFilterPopover.handleOptionSelectedAll,
8041
+ handleSortDesc = _useFilterPopover.handleSortDesc,
8042
+ handleSortAsc = _useFilterPopover.handleSortAsc;
8043
+
8044
+ return React__default.createElement(reactstrap.Popover, Object.assign({}, props, {
8045
+ hideArrow: true
8046
+ }), React__default.createElement(reactstrap.PopoverBody, {
8047
+ className: "pb-3"
8048
+ }, React__default.createElement("div", {
8049
+ ref: ref,
8050
+ className: styles["popover"]
8051
+ }, React__default.createElement("div", {
8052
+ className: "d-flex flex-column " + styles["popover__sort"]
8053
+ }, React__default.createElement(reactstrap.Label, {
8054
+ className: "font-weight-bold"
8055
+ }, "Sort"), React__default.createElement("div", {
8056
+ className: "px-1 " + styles["popover__sort__item"] + " " + (isAscending && styles["popover__sort__item--active"]),
8057
+ onClick: handleSortAsc
8058
+ }, React__default.createElement(ai.AiOutlineSortAscending, {
8059
+ className: "mr-1"
8060
+ }), "Ascending"), React__default.createElement("div", {
8061
+ className: "px-1 mt-1 " + styles["popover__sort__item"] + " " + (isDescending && styles["popover__sort__item--active"]),
8062
+ onClick: handleSortDesc
8063
+ }, React__default.createElement(ai.AiOutlineSortDescending, {
8064
+ className: "mr-1"
8065
+ }), "Descending")), typeof getOption != 'undefined' && React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
8066
+ className: "border border-top-1 border-bottom-0 mx-1 my-2"
8067
+ }), React__default.createElement("div", {
8068
+ className: "d-flex flex-column"
8069
+ }, React__default.createElement(reactstrap.Label, {
8070
+ className: "font-weight-bold"
8071
+ }, "Filter"), React__default.createElement("div", {
8072
+ className: "position-relative px-1 " + styles["popover__search"]
8073
+ }, React__default.createElement(bi.BiSearchAlt2, {
8074
+ className: "position-absolute " + styles["popover__search__icon"]
8075
+ }), React__default.createElement(reactstrap.Input, {
8076
+ className: styles["popover__search__input"],
8077
+ value: searchString,
8078
+ onChange: handleSearch
8079
+ })), React__default.createElement("div", {
8080
+ className: "mx-1 mt-2 p-2 bg-light " + styles["popover__options"]
8081
+ }, React__default.createElement(reactstrap.FormGroup, {
8082
+ className: "d-flex align-items-center",
8083
+ check: true
8084
+ }, React__default.createElement(reactstrap.Input, {
8085
+ type: "checkbox",
8086
+ onChange: handleOptionSelectedAll,
8087
+ checked: sOptions == undefined
8088
+ }), " ", React__default.createElement(reactstrap.Label, {
8089
+ check: true
8090
+ }, "(Select all)")), !!getOption && !defaultOptions && Object.keys(options).map(function (i) {
8091
+ return React__default.createElement(reactstrap.FormGroup, {
8092
+ key: i.id,
8093
+ className: "d-flex align-items-center",
8094
+ check: true
8095
+ }, React__default.createElement(reactstrap.Input, {
8096
+ type: "checkbox",
8097
+ value: options["" + i],
8098
+ onChange: handleOptionSelected,
8099
+ checked: (sOptions === null || sOptions === void 0 ? void 0 : sOptions.includes(options["" + i])) || sOptions == undefined
8100
+ }), " ", React__default.createElement(reactstrap.Label, {
8101
+ check: true
8102
+ }, i));
8103
+ }), !!defaultOptions && filteredOptions.map(function (i) {
8104
+ return React__default.createElement(reactstrap.FormGroup, {
8105
+ key: i.value,
8106
+ className: "d-flex align-items-center",
8107
+ check: true
8108
+ }, React__default.createElement(reactstrap.Input, {
8109
+ type: "checkbox",
8110
+ value: i.value,
8111
+ onChange: handleOptionSelected,
8112
+ checked: (sOptions === null || sOptions === void 0 ? void 0 : sOptions.includes(i.value)) || sOptions == undefined
8113
+ }), " ", React__default.createElement(reactstrap.Label, {
8114
+ check: true
8115
+ }, i.label));
8116
+ }))), React__default.createElement("div", {
8117
+ className: "d-flex justify-content-end mt-3"
8118
+ }, React__default.createElement(reactstrap.Button, {
8119
+ color: "primary",
8120
+ className: "mr-2",
8121
+ size: "sm",
8122
+ onClick: handleApplyFilter
8123
+ }, "Apply Filter"), React__default.createElement(reactstrap.Button, {
8124
+ color: "secondary",
8125
+ size: "sm",
8126
+ onClick: onClose
8127
+ }, "Cancel"))))));
8128
+ };
8129
+
8130
+ var HeaderCell = function HeaderCell(_ref) {
8131
+ var _filters$searchByStri;
8132
+
8133
+ var data = _ref.data,
8134
+ popoverId = _ref.popoverId,
8135
+ filters = _ref.filters,
8136
+ onChangeFilters = _ref.onChangeFilters,
8137
+ onOpenFilter = _ref.onOpenFilter,
8138
+ onClose = _ref.onClose,
8139
+ rest = _objectWithoutPropertiesLoose(_ref, ["data", "popoverId", "filters", "onChangeFilters", "onOpenFilter", "onClose"]);
8140
+
8141
+ var _useTranslation = reactI18next.useTranslation(),
8142
+ t = _useTranslation.t;
8143
+
8144
+ var id = React.useMemo(function () {
8145
+ return data.sortBy != undefined ? userOrders[data.sortBy] : "";
8146
+ }, [data.sortBy]);
8147
+ var isOpen = React.useMemo(function () {
8148
+ return popoverId === id;
8149
+ }, [id, popoverId]);
8150
+
8151
+ var handleOpenFilter = function handleOpenFilter() {
8152
+ onOpenFilter === null || onOpenFilter === void 0 ? void 0 : onOpenFilter(id);
8153
+ };
8154
+
8155
+ return React__default.createElement("th", {
8156
+ className: data.className
8157
+ }, !!id && data.sortBy !== undefined ? React__default.createElement("div", {
8158
+ className: "w-100 d-flex justify-content-between align-items-center " + styles["table-filter-icon"]
8159
+ }, t(data.name), React__default.createElement("div", {
8160
+ className: "ml-2 p-1",
8161
+ id: id,
8162
+ onClick: handleOpenFilter,
8163
+ style: {
8164
+ cursor: "pointer"
8165
+ }
8166
+ }, data.sortBy !== undefined && data.sortBy === (filters === null || filters === void 0 ? void 0 : filters.sortBy) && React__default.createElement("span", null, filters.isDescending ? React__default.createElement(ai.AiOutlineSortDescending, null) : React__default.createElement(ai.AiOutlineSortAscending, null)), !!(filters !== null && filters !== void 0 && (_filters$searchByStri = filters.searchByStrings) !== null && _filters$searchByStri !== void 0 && _filters$searchByStri.length) && data.searchBy === (filters === null || filters === void 0 ? void 0 : filters.searchBy) ? React__default.createElement(hi.HiFilter, null) : React__default.createElement(bi.BiFilterAlt, null)), React__default.createElement(FilterPopover, Object.assign({
8167
+ target: id,
8168
+ placement: "bottom-end",
8169
+ isOpen: isOpen,
8170
+ filters: filters,
8171
+ onClose: onClose,
8172
+ onChangeFilters: onChangeFilters,
8173
+ sortBy: data.sortBy,
8174
+ searchBy: data.searchBy,
8175
+ getOption: data.getOption,
8176
+ defaultOptions: data.options
8177
+ }, rest))) : t(data.name));
8178
+ };
8179
+
8180
+ var useTableHeader = function useTableHeader(props) {
8181
+ var filters = props.filters,
8182
+ onChangeFilters = props.onChangeFilters;
8183
+
8184
+ var _useState = React.useState(),
8185
+ popoverId = _useState[0],
8186
+ setPopoverId = _useState[1];
8187
+
8188
+ var _useState2 = React.useState([]),
8189
+ users = _useState2[0],
8190
+ setUsers = _useState2[1];
8191
+
8192
+ var _useState3 = React.useState(_extends({}, DEFAULT_FILTER_POPOVER, {
8193
+ sortBy: filters.sortBy,
8194
+ isDescending: filters.isDescending,
8195
+ searchString: filters.searchString
8196
+ })),
8197
+ popoverFilters = _useState3[0],
8198
+ setPopoverFilters = _useState3[1];
8199
+
8200
+ var dispatch = reactRedux.useDispatch();
8201
+ var getData = React.useCallback(function () {
8202
+ try {
8203
+ var _temp2 = _catch(function () {
8204
+ return Promise.resolve(getRosterUser(popoverFilters)).then(function (res) {
8205
+ var items = res.data.items;
8206
+
8207
+ for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {
8208
+ var user = _step.value;
8209
+ user.roles = user.roles.includes("EduTeacher") ? [ROLES.EDUTEACHER] : user.roles;
8210
+ }
8211
+
8212
+ setUsers(items);
8213
+ });
8214
+ }, function (err) {
8215
+ var _err$response, _err$response$data;
8216
+
8217
+ dispatch(setAlert({
8218
+ type: "danger",
8219
+ message: ((_err$response = err.response) === null || _err$response === void 0 ? void 0 : (_err$response$data = _err$response.data) === null || _err$response$data === void 0 ? void 0 : _err$response$data.title) || err.message
8220
+ }));
8221
+ });
8222
+
8223
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
8224
+ } catch (e) {
8225
+ return Promise.reject(e);
8226
+ }
8227
+ }, [JSON.stringify(popoverFilters)]);
8228
+
8229
+ var handleFilterIcon = function handleFilterIcon(id) {
8230
+ setPopoverId(id);
8231
+ };
8232
+
8233
+ var handleCloseFilter = function handleCloseFilter() {
8234
+ setPopoverId("");
8235
+ };
8236
+
8237
+ React.useEffect(function () {
8238
+ setPopoverFilters(_extends({}, popoverFilters, {
8239
+ sortBy: filters.sortBy,
8240
+ isDescending: filters.isDescending
8241
+ }));
8242
+ }, [filters.sortBy, filters.isDescending]);
8243
+ var handleSearch = React.useCallback(function (search, searchBy) {
8244
+ setPopoverFilters(_extends({}, popoverFilters, {
8245
+ searchStringBy: search,
8246
+ searchBy: searchBy
8247
+ }));
8248
+ }, [JSON.stringify(popoverFilters)]);
8249
+ var handleChangeFilters = React.useCallback(function (value, searchBy) {
8250
+ onChangeFilters === null || onChangeFilters === void 0 ? void 0 : onChangeFilters(_extends({}, filters, {
8251
+ searchByStrings: value,
8252
+ searchBy: searchBy
8253
+ }));
8254
+ }, [JSON.stringify(filters)]);
8255
+ React.useEffect(function () {
8256
+ getData();
8257
+ }, [JSON.stringify(popoverFilters)]);
8258
+ React.useEffect(function () {
8259
+ setPopoverFilters(_extends({}, DEFAULT_FILTER_POPOVER, {
8260
+ sortBy: filters.sortBy,
8261
+ isDescending: filters.isDescending,
8262
+ searchString: filters.searchString
8263
+ }));
8264
+ }, [JSON.stringify(filters)]);
8265
+ return {
8266
+ popoverFilters: popoverFilters,
8267
+ popoverId: popoverId,
8268
+ users: users,
8269
+ handleFilterIcon: handleFilterIcon,
8270
+ handleCloseFilter: handleCloseFilter,
8271
+ handleSearch: handleSearch,
8272
+ handleChangeFilters: handleChangeFilters
8273
+ };
8274
+ };
8275
+
8276
+ var TableHeader = function TableHeader(_ref) {
8277
+ var headers = _ref.headers,
8278
+ filters = _ref.filters,
8279
+ onChangeFilters = _ref.onChangeFilters;
8280
+
8281
+ var _useTableHeader = useTableHeader({
8282
+ filters: filters,
8283
+ onChangeFilters: onChangeFilters
8284
+ }),
8285
+ popoverFilters = _useTableHeader.popoverFilters,
8286
+ popoverId = _useTableHeader.popoverId,
8287
+ users = _useTableHeader.users,
8288
+ handleFilterIcon = _useTableHeader.handleFilterIcon,
8289
+ handleCloseFilter = _useTableHeader.handleCloseFilter,
8290
+ handleSearch = _useTableHeader.handleSearch,
8291
+ handleChangeFilters = _useTableHeader.handleChangeFilters;
8292
+
8293
+ return React__default.createElement("tr", null, headers.map(function (header) {
8294
+ return React__default.createElement(HeaderCell, {
8295
+ key: header.name,
8296
+ data: header,
8297
+ popoverId: popoverId,
8298
+ filters: filters,
8299
+ users: users,
8300
+ searchString: popoverFilters.searchStringBy,
8301
+ selectedOptions: filters.searchByStrings,
8302
+ onSearch: handleSearch,
8303
+ onChangeFilters: onChangeFilters,
8304
+ onClose: handleCloseFilter,
8305
+ onOpenFilter: handleFilterIcon,
8306
+ onOptionsChange: handleChangeFilters
8307
+ });
8308
+ }));
8309
+ };
8310
+
8311
+ var useExportUsersCsv = function useExportUsersCsv() {
8312
+ var dispatch = reactRedux.useDispatch();
8313
+ var schoolName = reactRedux.useSelector(function (state) {
8314
+ var _state$common, _state$common$user;
8315
+
8316
+ 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.schoolName;
8317
+ }) || "";
8318
+
8319
+ var exportUsers = function exportUsers(filters) {
8320
+ try {
8321
+ var _temp3 = function _temp3() {
8322
+ dispatch(setLoading(false));
8323
+ };
8324
+
8325
+ dispatch(setLoading(true));
8326
+
8327
+ var _temp4 = _catch(function () {
8328
+ return Promise.resolve(getRosterUserExport(filters)).then(function (res) {
8329
+ var data = res.data;
8330
+ var encodedUri = convertDataExportUser(data);
8331
+ var link = document.createElement("a");
8332
+ link.href = encodedUri;
8333
+ link.download = schoolName + "_Users_Report.csv";
8334
+ link.click();
8335
+ });
8336
+ }, function (err) {
8337
+ var _err$response, _err$response$data;
8338
+
8339
+ dispatch(setAlert({
8340
+ type: "danger",
8341
+ message: ((_err$response = err.response) === null || _err$response === void 0 ? void 0 : (_err$response$data = _err$response.data) === null || _err$response$data === void 0 ? void 0 : _err$response$data.title) || err.message
8342
+ }));
8343
+ });
8344
+
8345
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp3) : _temp3(_temp4));
8346
+ } catch (e) {
8347
+ return Promise.reject(e);
8348
+ }
8349
+ };
8350
+
8351
+ var convertDataExportUser = function convertDataExportUser(data) {
8352
+ var headers = "First Name,Last Name,Email,Phone,Age,Role,Active Status,Create Time,Roster Sourced Id,Roster Status,Roster Family Name,Roster Middle Name,Roster Given Name,Roster Email,Roster Role,Roster Grades\n";
8353
+ var content = data.map(function (user) {
8354
+ var _user$rosterUser, _user$rosterUser2, _user$rosterUser3, _user$rosterUser4, _user$rosterUser5, _user$rosterUser6, _user$rosterUser7;
8355
+
8356
+ var age = user.dateOfBirth !== DATE_MIN_VALUE ? dateFns.differenceInCalendarYears(moment().toDate(), moment.utc(user.dateOfBirth).local().toDate()) : "";
8357
+ return escapeCell(user.firstName) + "," + escapeCell(user.lastName) + "," + escapeCell(user.email) + "," + escapeCell(user.phoneNumber) + "," + age + "," + escapeCell(user.roles.join(", ")) + "," + (user.isActive ? "Active" : "Inactive") + "," + utcToLocalTime(user === null || user === void 0 ? void 0 : user.createTime, "yyyy-MM-DD HH:mm") + "," + escapeCell(user.sourcedId) + "," + escapeCell((_user$rosterUser = user.rosterUser) === null || _user$rosterUser === void 0 ? void 0 : _user$rosterUser.status) + "," + escapeCell((_user$rosterUser2 = user.rosterUser) === null || _user$rosterUser2 === void 0 ? void 0 : _user$rosterUser2.familyName) + "," + escapeCell((_user$rosterUser3 = user.rosterUser) === null || _user$rosterUser3 === void 0 ? void 0 : _user$rosterUser3.middleName) + "," + escapeCell((_user$rosterUser4 = user.rosterUser) === null || _user$rosterUser4 === void 0 ? void 0 : _user$rosterUser4.givenName) + "," + escapeCell((_user$rosterUser5 = user.rosterUser) === null || _user$rosterUser5 === void 0 ? void 0 : _user$rosterUser5.email) + "," + escapeCell((_user$rosterUser6 = user.rosterUser) === null || _user$rosterUser6 === void 0 ? void 0 : _user$rosterUser6.role) + "," + escapeCell((_user$rosterUser7 = user.rosterUser) === null || _user$rosterUser7 === void 0 ? void 0 : _user$rosterUser7.grades);
8358
+ }).join('\n');
8359
+ return "" + CSV_PREFIX + headers + encodeURIComponent(content);
8360
+ };
8361
+
8362
+ var escapeCell = function escapeCell(value) {
8363
+ if (!value) return "";
8364
+ return "\"" + value.replace(/"/g, '""').replaceAll(/\n/g, " ") + "\"";
8365
+ };
8366
+
8367
+ return {
8368
+ exportUsers: exportUsers
8369
+ };
8370
+ };
8371
+
8372
+ var buttonTextStyle$2 = {
8373
+ fontWeight: 500
8374
+ };
8375
+ var buttonStyle$2 = {
8376
+ height: 38
8377
+ };
7733
8378
  var header$2 = "User";
7734
8379
 
7735
8380
  var UserList = function UserList() {
@@ -7738,6 +8383,7 @@ var UserList = function UserList() {
7738
8383
  userList = _useUserList.userList,
7739
8384
  totalItems = _useUserList.totalItems,
7740
8385
  filters = _useUserList.filters,
8386
+ fullName = _useUserList.fullName,
7741
8387
  removeData = _useUserList.removeData,
7742
8388
  changeFilters = _useUserList.changeFilters,
7743
8389
  reDirectDetailPage = _useUserList.reDirectDetailPage,
@@ -7745,11 +8391,18 @@ var UserList = function UserList() {
7745
8391
  handleSyncRosterStudents = _useUserList.handleSyncRosterStudents,
7746
8392
  rosterUserInfo = _useUserList.rosterUserInfo;
7747
8393
 
8394
+ var _useExportUsersCsv = useExportUsersCsv(),
8395
+ exportUsers = _useExportUsersCsv.exportUsers;
8396
+
7748
8397
  var _useTranslation = reactI18next.useTranslation(),
7749
8398
  t = _useTranslation.t;
7750
8399
 
8400
+ var handleExportUsers = function handleExportUsers() {
8401
+ return exportUsers(filters);
8402
+ };
8403
+
7751
8404
  return React__default.createElement("div", {
7752
- className: "fadeIn animated"
8405
+ className: "fadeIn animated h-100"
7753
8406
  }, React__default.createElement("h5", {
7754
8407
  className: "mb-2"
7755
8408
  }, t("" + header$2)), React__default.createElement(reactstrap.Row, {
@@ -7777,33 +8430,34 @@ var UserList = function UserList() {
7777
8430
  }, React__default.createElement(SyncButtonIcon, {
7778
8431
  text: "Sync Roster students",
7779
8432
  onClick: handleSyncRosterStudents
7780
- }))), React__default.createElement(reactstrap.Row, {
8433
+ }), React__default.createElement("button", {
8434
+ className: "btn btn-success d-flex align-items-center border-0 p-0 ml-2",
8435
+ style: buttonStyle$2,
8436
+ onClick: handleExportUsers
8437
+ }, React__default.createElement("div", {
8438
+ className: "" + styles["button-icon"]
8439
+ }, React__default.createElement("img", {
8440
+ src: "images/export-icon.svg",
8441
+ alt: ""
8442
+ })), React__default.createElement("p", {
8443
+ className: styles["button-content"] + " mb-0",
8444
+ style: buttonTextStyle$2
8445
+ }, "Export to CSV")))), React__default.createElement(reactstrap.Row, {
7781
8446
  className: "mb-2"
7782
8447
  }, React__default.createElement(reactstrap.Col, {
7783
8448
  md: 12
7784
- }, userList && userList.length > 0 ? React__default.createElement("div", null, React__default.createElement(reactstrap.Table, {
8449
+ }, React__default.createElement("div", null, React__default.createElement(reactstrap.Table, {
7785
8450
  bordered: true,
7786
8451
  hover: true,
7787
8452
  striped: true,
7788
8453
  responsive: true,
7789
8454
  size: "sm"
7790
- }, React__default.createElement("thead", null, React__default.createElement("tr", null, React__default.createElement("th", {
7791
- className: "align-top"
7792
- }, t("name")), React__default.createElement("th", {
7793
- className: "align-top"
7794
- }, t("email")), React__default.createElement("th", {
7795
- className: "align-top"
7796
- }, t("age")), React__default.createElement("th", {
7797
- className: "align-top"
7798
- }, t("role")), React__default.createElement("th", {
7799
- className: "align-top"
7800
- }, t("active_status")), React__default.createElement("th", {
7801
- className: "align-top"
7802
- }, t("created_time")), React__default.createElement("th", {
7803
- className: "align-top"
7804
- }, "Information Roster (Sourced Id / Full name / Email)"), React__default.createElement("th", {
7805
- className: "text-center"
7806
- }, t("action")))), React__default.createElement("tbody", null, userList.map(function (record) {
8455
+ }, React__default.createElement("thead", null, React__default.createElement(TableHeader, {
8456
+ headers: UserColumns,
8457
+ filters: filters,
8458
+ fullName: fullName,
8459
+ onChangeFilters: changeFilters
8460
+ })), React__default.createElement("tbody", null, userList && userList.length > 0 && userList.map(function (record) {
7807
8461
  return React__default.createElement("tr", {
7808
8462
  key: record.id
7809
8463
  }, React__default.createElement("td", {
@@ -7817,7 +8471,7 @@ var UserList = function UserList() {
7817
8471
  className: "align-middle"
7818
8472
  }, record.email), React__default.createElement("td", {
7819
8473
  className: "align-middle"
7820
- }, differenceInCalendarYears(new Date(), new Date(record.dateOfBirth))), React__default.createElement("td", {
8474
+ }, record.dateOfBirth !== DATE_MIN_VALUE && differenceInCalendarYears(new Date(), new Date(record.dateOfBirth))), React__default.createElement("td", {
7821
8475
  className: "align-middle"
7822
8476
  }, !!record.roles && record.roles.map(function (role) {
7823
8477
  return role === "SecondaryTeacher" ? "SupportTeacher" : role;
@@ -7841,9 +8495,13 @@ var UserList = function UserList() {
7841
8495
  return removeData(record.id);
7842
8496
  }
7843
8497
  })));
7844
- })))) : React__default.createElement(EmptyDataAlert, {
8498
+ }), (!userList || !userList.length) && React__default.createElement("tr", null, React__default.createElement("td", {
8499
+ colSpan: 12,
8500
+ className: "p-0"
8501
+ }, React__default.createElement(EmptyDataAlert, {
8502
+ className: "mb-0",
7845
8503
  label: t("user")
7846
- })), React__default.createElement(reactstrap.Col, {
8504
+ }))))))), React__default.createElement(reactstrap.Col, {
7847
8505
  md: 12
7848
8506
  }, React__default.createElement(CustomPagination, {
7849
8507
  filters: filters,