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.
@@ -3,7 +3,7 @@ import i18n from 'i18next';
3
3
  import { initReactI18next, useTranslation } from 'react-i18next';
4
4
  export { I18nextProvider, useTranslation } from 'react-i18next';
5
5
  import React, { useState, useCallback, useEffect, forwardRef, useRef, Suspense, useMemo, memo, Fragment, useImperativeHandle } from 'react';
6
- import { Input, Modal, ModalHeader, ModalBody, ModalFooter, Button, Row, Col, Form, FormGroup, Label, Navbar, NavbarBrand, Collapse, Nav, NavItem, NavLink, Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Alert, Pagination, PaginationItem, PaginationLink, Table, CustomInput, TabContent, TabPane, Card, CardImg, CardBody, CardTitle, CardHeader, CardText } from 'reactstrap';
6
+ import { Input, Modal, ModalHeader, ModalBody, ModalFooter, Button, Row, Col, Form, FormGroup, Label, Navbar, NavbarBrand, Collapse, Nav, NavItem, NavLink, Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Alert, Pagination, PaginationItem, PaginationLink, Table, Popover, PopoverBody, CustomInput, TabContent, TabPane, Card, CardImg, CardBody, CardTitle, CardHeader, CardText } from 'reactstrap';
7
7
  import { useHistory, Link, useLocation, Switch, Route, Prompt, useParams } from 'react-router-dom';
8
8
  import { Formik } from 'formik';
9
9
  import { object, string, boolean, number, array } from 'yup';
@@ -22,16 +22,18 @@ import { RiLogoutBoxRLine } from 'react-icons/ri';
22
22
  import Pusher from 'pusher-js/with-encryption';
23
23
  import { BsChevronDown } from 'react-icons/bs';
24
24
  import { FaPlus, FaTrashAlt, FaSyncAlt, FaUsersCog, FaRegEdit, FaArrowLeft, FaDownload, FaTrash, FaEdit, FaFolderPlus, FaFileUpload } from 'react-icons/fa';
25
- import { format } from 'date-fns';
25
+ import { format, differenceInCalendarYears } from 'date-fns';
26
26
  import { Editor } from '@tinymce/tinymce-react';
27
- import differenceInCalendarYears from 'date-fns/differenceInCalendarYears';
27
+ import differenceInCalendarYears$1 from 'date-fns/differenceInCalendarYears';
28
+ import { BiSearchAlt2, BiFilterAlt } from 'react-icons/bi';
29
+ import { HiFilter } from 'react-icons/hi';
30
+ import { AiOutlineSortAscending, AiOutlineSortDescending, AiOutlineEye } from 'react-icons/ai';
28
31
  import DatePicker from 'react-datepicker';
29
32
  import toDate from 'date-fns/toDate';
30
33
  import { MdAttachFile } from 'react-icons/md';
31
34
  import Creatable from 'react-select/creatable';
32
35
  import ReactNotification$1 from 'react-notifications-component';
33
36
  import 'react-notifications-component/dist/theme.css';
34
- import { AiOutlineEye } from 'react-icons/ai';
35
37
  import 'symbol-observable';
36
38
 
37
39
  var dashboard = "Dashboard";
@@ -2798,7 +2800,7 @@ function _catch(body, recover) {
2798
2800
  return result;
2799
2801
  }
2800
2802
 
2801
- 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"};
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","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"};
2802
2804
 
2803
2805
  var style = {
2804
2806
  fontSize: "0.85rem"
@@ -7302,6 +7304,11 @@ var getRosterUser = function getRosterUser(filter) {
7302
7304
  params: filter
7303
7305
  });
7304
7306
  };
7307
+ var getRosterUserExport = function getRosterUserExport(filter) {
7308
+ return api.get(ROSTER_USER_URL + "/export-csv", {
7309
+ params: filter
7310
+ });
7311
+ };
7305
7312
  var getRosterUserById = function getRosterUserById(id) {
7306
7313
  return api.get(ROSTER_USER_URL + "/" + id);
7307
7314
  };
@@ -7335,6 +7342,173 @@ var syncRosterStudentsApi = function syncRosterStudentsApi() {
7335
7342
  return api.put(STUDENT_URL + "/sync-students");
7336
7343
  };
7337
7344
 
7345
+ var UserOrder;
7346
+
7347
+ (function (UserOrder) {
7348
+ UserOrder[UserOrder["Id"] = 0] = "Id";
7349
+ UserOrder[UserOrder["Name"] = 1] = "Name";
7350
+ UserOrder[UserOrder["Email"] = 2] = "Email";
7351
+ UserOrder[UserOrder["Age"] = 3] = "Age";
7352
+ UserOrder[UserOrder["Role"] = 4] = "Role";
7353
+ UserOrder[UserOrder["Status"] = 5] = "Status";
7354
+ UserOrder[UserOrder["CreatedAt"] = 6] = "CreatedAt";
7355
+ UserOrder[UserOrder["RosterUser"] = 7] = "RosterUser";
7356
+ })(UserOrder || (UserOrder = {}));
7357
+
7358
+ var SearchBy;
7359
+
7360
+ (function (SearchBy) {
7361
+ SearchBy[SearchBy["Id"] = 0] = "Id";
7362
+ SearchBy[SearchBy["Name"] = 1] = "Name";
7363
+ SearchBy[SearchBy["Email"] = 2] = "Email";
7364
+ SearchBy[SearchBy["Role"] = 3] = "Role";
7365
+ SearchBy[SearchBy["RosterUser"] = 4] = "RosterUser";
7366
+ SearchBy[SearchBy["Status"] = 5] = "Status";
7367
+ })(SearchBy || (SearchBy = {}));
7368
+
7369
+ var _userOrders;
7370
+ 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);
7371
+ var UserColumns = [{
7372
+ name: "name",
7373
+ sortBy: UserOrder.Name,
7374
+ searchBy: SearchBy.Name,
7375
+ className: "align-top",
7376
+ getOption: function getOption(user) {
7377
+ var _user$fullName, _user$fullName$trim;
7378
+
7379
+ return {
7380
+ label: user.fullName || "empty",
7381
+ 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)
7382
+ };
7383
+ }
7384
+ }, {
7385
+ name: "email",
7386
+ sortBy: UserOrder.Email,
7387
+ searchBy: SearchBy.Email,
7388
+ className: "align-top",
7389
+ getOption: function getOption(user) {
7390
+ var _user$email, _user$email$trim;
7391
+
7392
+ return {
7393
+ label: user.email || "empty",
7394
+ 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)
7395
+ };
7396
+ }
7397
+ }, {
7398
+ name: "age",
7399
+ sortBy: UserOrder.Age,
7400
+ className: "align-top"
7401
+ }, {
7402
+ name: "role",
7403
+ sortBy: UserOrder.Role,
7404
+ searchBy: SearchBy.Role,
7405
+ className: "align-top",
7406
+ getOption: function getOption(user) {
7407
+ var _user$roles, _user$roles2, _user$roles3, _user$roles3$join, _user$roles3$join$tri;
7408
+
7409
+ return {
7410
+ 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) {
7411
+ return role === "SecondaryTeacher" ? "SupportTeacher" : role;
7412
+ }).join(", ") : "empty",
7413
+ 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)
7414
+ };
7415
+ }
7416
+ }, {
7417
+ name: "active_status",
7418
+ sortBy: UserOrder.Status,
7419
+ searchBy: SearchBy.Status,
7420
+ className: "align-top",
7421
+ getOption: function getOption(user, t) {
7422
+ return {
7423
+ label: user.isActive ? t("active") : t("inactive"),
7424
+ value: user.isActive
7425
+ };
7426
+ },
7427
+ options: [{
7428
+ label: "Active",
7429
+ value: "true"
7430
+ }, {
7431
+ label: "Inactive",
7432
+ value: "false"
7433
+ }]
7434
+ }, {
7435
+ name: "created_time",
7436
+ sortBy: UserOrder.CreatedAt,
7437
+ className: "align-top"
7438
+ }, {
7439
+ name: "Information Roster (Sourced Id / Full name / Email)",
7440
+ sortBy: UserOrder.RosterUser,
7441
+ searchBy: SearchBy.RosterUser,
7442
+ className: "align-top",
7443
+ getOption: function getOption(record) {
7444
+ if (!record) return {
7445
+ label: "empty",
7446
+ value: ""
7447
+ };
7448
+ var result = [];
7449
+ var sourcedId = record.sourcedId,
7450
+ rosterUser = record.rosterUser;
7451
+ !!sourcedId && result.push(sourcedId);
7452
+
7453
+ if (rosterUser) {
7454
+ var givenName = rosterUser.givenName,
7455
+ middleName = rosterUser.middleName,
7456
+ familyName = rosterUser.familyName,
7457
+ email = rosterUser.email;
7458
+ var names = [];
7459
+ !!givenName && names.push(givenName);
7460
+ !!middleName && names.push(middleName);
7461
+ !!familyName && names.push(familyName);
7462
+ !!names.length && result.push(names.join(" "));
7463
+ !!email && result.push(email);
7464
+ }
7465
+
7466
+ return {
7467
+ label: result.length ? result.join(" / ") : "empty",
7468
+ 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) || "")
7469
+ };
7470
+ }
7471
+ }, {
7472
+ name: "action",
7473
+ className: "text-center"
7474
+ }];
7475
+ var DEFAULT_PAGE_SIZE$1 = {
7476
+ label: "10",
7477
+ value: 10
7478
+ };
7479
+ var DEFAULT_FILTER$1 = {
7480
+ searchString: "",
7481
+ currentPage: 1,
7482
+ pageSize: DEFAULT_PAGE_SIZE$1.value
7483
+ };
7484
+ var DEFAULT_FILTER_POPOVER = {
7485
+ currentPage: 1,
7486
+ pageSize: 200
7487
+ };
7488
+ var CSV_PREFIX = "data:text/csv;charset=utf-8,";
7489
+
7490
+ var useFilters$1 = function useFilters() {
7491
+ var _useState = useState(DEFAULT_FILTER$1),
7492
+ filters = _useState[0],
7493
+ setFilters = _useState[1];
7494
+
7495
+ var changeFilters = function changeFilters(updatedFilters) {
7496
+ var newFilters = _extends({}, filters, updatedFilters);
7497
+
7498
+ if (!!newFilters.searchString && !!updatedFilters.searchString && updatedFilters.searchString != filters.searchString) {
7499
+ newFilters.currentPage = 1;
7500
+ }
7501
+
7502
+ setFilters(newFilters);
7503
+ };
7504
+
7505
+ return {
7506
+ filters: filters,
7507
+ setFilters: setFilters,
7508
+ changeFilters: changeFilters
7509
+ };
7510
+ };
7511
+
7338
7512
  var USER_URL$1 = "/admin/user";
7339
7513
  var CREATE_USER_URL = "/admin/create-user";
7340
7514
  var TITLE$7 = "User list";
@@ -7356,17 +7530,14 @@ var useUserList = function useUserList() {
7356
7530
  return state.users.totalItems;
7357
7531
  });
7358
7532
 
7359
- var _useFilters = useFilters(),
7533
+ var _useFilters = useFilters$1(),
7360
7534
  filters = _useFilters.filters,
7361
7535
  changeFilters = _useFilters.changeFilters;
7362
7536
 
7363
- var _useState = useState(!!queryName ? queryName : ""),
7364
- fullName = _useState[0],
7365
- setFullName = _useState[1];
7366
-
7537
+ var fullName = !!queryName ? queryName : "";
7367
7538
  var isDistrict = window.location.host.includes("-district");
7368
7539
  var dispatch = useDispatch();
7369
- var getData = useCallback(function (fullName) {
7540
+ var getData = useCallback(function () {
7370
7541
  try {
7371
7542
  var _temp3 = function _temp3() {
7372
7543
  dispatch(setLoading(false));
@@ -7375,9 +7546,7 @@ var useUserList = function useUserList() {
7375
7546
  dispatch(setLoading(true));
7376
7547
 
7377
7548
  var _temp4 = _catch(function () {
7378
- return Promise.resolve(fullName ? getRosterUser(_extends({}, filters, {
7379
- searchString: fullName
7380
- })) : getRosterUser(filters)).then(function (res) {
7549
+ return Promise.resolve(getRosterUser(filters)).then(function (res) {
7381
7550
  var _res$data = res.data,
7382
7551
  items = _res$data.items,
7383
7552
  totalItems = _res$data.totalItems;
@@ -7472,13 +7641,13 @@ var useUserList = function useUserList() {
7472
7641
  document.title = TITLE$7;
7473
7642
  }, []);
7474
7643
  useEffect(function () {
7475
- if (!!fullName) {
7476
- getData(fullName);
7477
- setFullName(null);
7478
- } else {
7479
- getData();
7480
- }
7481
- }, [filters]);
7644
+ changeFilters(_extends({}, filters, {
7645
+ searchString: fullName
7646
+ }));
7647
+ }, [fullName]);
7648
+ useEffect(function () {
7649
+ getData();
7650
+ }, [JSON.stringify(filters)]);
7482
7651
  var removeData = useCallback(function (id) {
7483
7652
  dispatch(setLoading(true));
7484
7653
 
@@ -7620,6 +7789,7 @@ var useUserList = function useUserList() {
7620
7789
  totalItems: totalItems,
7621
7790
  filters: filters,
7622
7791
  queryName: queryName,
7792
+ fullName: fullName,
7623
7793
  getData: getData,
7624
7794
  removeData: removeData,
7625
7795
  changeFilters: changeFilters,
@@ -7728,6 +7898,481 @@ var SyncButtonIcon = function SyncButtonIcon(_ref) {
7728
7898
  }, text));
7729
7899
  };
7730
7900
 
7901
+ var useClickOutside = function useClickOutside(wrapperRef, onClickOutside) {
7902
+ useEffect(function () {
7903
+ function handleClickOutside(event) {
7904
+ if (wrapperRef.current && !wrapperRef.current.contains(event.target)) {
7905
+ onClickOutside === null || onClickOutside === void 0 ? void 0 : onClickOutside();
7906
+ }
7907
+ }
7908
+
7909
+ document.addEventListener("mousedown", handleClickOutside);
7910
+ return function () {
7911
+ document.removeEventListener("mousedown", handleClickOutside);
7912
+ };
7913
+ }, [wrapperRef.current]);
7914
+ };
7915
+
7916
+ var useFilterPopover = function useFilterPopover(props) {
7917
+ var sortBy = props.sortBy,
7918
+ filters = props.filters,
7919
+ users = props.users,
7920
+ searchBy = props.searchBy,
7921
+ defaultOptions = props.defaultOptions,
7922
+ selectedOptions = props.selectedOptions,
7923
+ onOptionsChange = props.onOptionsChange,
7924
+ onSearch = props.onSearch,
7925
+ onClose = props.onClose,
7926
+ onChangeFilters = props.onChangeFilters,
7927
+ getOption = props.getOption;
7928
+
7929
+ var _useState = useState(),
7930
+ sOptions = _useState[0],
7931
+ setSOptions = _useState[1];
7932
+
7933
+ var _useState2 = useState([]),
7934
+ filteredOptions = _useState2[0],
7935
+ setFilteredOptions = _useState2[1];
7936
+
7937
+ var ref = useRef(null);
7938
+ useClickOutside(ref, onClose);
7939
+
7940
+ var _useTranslation = useTranslation(),
7941
+ t = _useTranslation.t;
7942
+
7943
+ var handleSearch = useCallback(function (e) {
7944
+ var _e$target$value$trim, _e$target$value;
7945
+
7946
+ 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 : "";
7947
+ searchBy != undefined && !defaultOptions && (onSearch === null || onSearch === void 0 ? void 0 : onSearch(value, searchBy));
7948
+ searchBy != undefined && !!defaultOptions && setFilteredOptions(defaultOptions.filter(function (i) {
7949
+ return i.label.toLowerCase().includes(value === null || value === void 0 ? void 0 : value.toLowerCase());
7950
+ }));
7951
+ }, [searchBy, JSON.stringify(defaultOptions)]);
7952
+ var handleApplyFilter = useCallback(function () {
7953
+ onOptionsChange === null || onOptionsChange === void 0 ? void 0 : onOptionsChange(sOptions, searchBy);
7954
+ onClose === null || onClose === void 0 ? void 0 : onClose();
7955
+ }, [JSON.stringify(sOptions)]);
7956
+ var handleOptionSelected = useCallback(function (e) {
7957
+ var value = e.target.value;
7958
+ if (!value) setSOptions(undefined);else {
7959
+ var newOptions = sOptions != null ? sOptions : [];
7960
+ var index = newOptions.indexOf(value);
7961
+
7962
+ if (index > -1) {
7963
+ newOptions.splice(index, 1);
7964
+ } else {
7965
+ newOptions = [].concat(newOptions, [value]);
7966
+ }
7967
+
7968
+ setSOptions(newOptions == undefined ? newOptions : [].concat(newOptions));
7969
+ }
7970
+ }, [JSON.stringify(sOptions)]);
7971
+ var handleOptionSelectedAll = useCallback(function (e) {
7972
+ var value = e.target.checked;
7973
+ if (!value) setSOptions([""]);else setSOptions(undefined);
7974
+ }, []);
7975
+ var handleSortDesc = useCallback(function () {
7976
+ onChangeFilters === null || onChangeFilters === void 0 ? void 0 : onChangeFilters(_extends({}, filters, {
7977
+ sortBy: (filters === null || filters === void 0 ? void 0 : filters.isDescending) === true ? undefined : sortBy,
7978
+ isDescending: (filters === null || filters === void 0 ? void 0 : filters.isDescending) === true ? undefined : true
7979
+ }));
7980
+ onClose === null || onClose === void 0 ? void 0 : onClose();
7981
+ }, [JSON.stringify(filters), searchBy, searchBy]);
7982
+ var handleSortAsc = useCallback(function () {
7983
+ onChangeFilters === null || onChangeFilters === void 0 ? void 0 : onChangeFilters(_extends({}, filters, {
7984
+ sortBy: (filters === null || filters === void 0 ? void 0 : filters.isDescending) === false ? undefined : sortBy,
7985
+ isDescending: (filters === null || filters === void 0 ? void 0 : filters.isDescending) === false ? undefined : false
7986
+ }));
7987
+ onClose === null || onClose === void 0 ? void 0 : onClose();
7988
+ }, [JSON.stringify(filters), searchBy, searchBy]);
7989
+ var options = useMemo(function () {
7990
+ if (!getOption) return [];
7991
+ return users.reduce(function (i, current) {
7992
+ var _extends2;
7993
+
7994
+ var option = getOption(current, t);
7995
+ return _extends({}, i, (_extends2 = {}, _extends2[option.label] = option.value, _extends2));
7996
+ }, {});
7997
+ }, [JSON.stringify(users), JSON.stringify(getOption)]);
7998
+ var isAscending = (filters === null || filters === void 0 ? void 0 : filters.isDescending) == false && filters.sortBy === sortBy;
7999
+ var isDescending = !!(filters !== null && filters !== void 0 && filters.isDescending) && filters.sortBy === sortBy;
8000
+ useEffect(function () {
8001
+ if ((filters === null || filters === void 0 ? void 0 : filters.searchBy) !== searchBy) setSOptions(undefined);else setSOptions(selectedOptions);
8002
+ }, [JSON.stringify(selectedOptions), filters === null || filters === void 0 ? void 0 : filters.searchBy]);
8003
+ useEffect(function () {
8004
+ setFilteredOptions(defaultOptions || []);
8005
+ }, [JSON.stringify(defaultOptions)]);
8006
+ return {
8007
+ ref: ref,
8008
+ options: options,
8009
+ sOptions: sOptions,
8010
+ isAscending: isAscending,
8011
+ isDescending: isDescending,
8012
+ filteredOptions: filteredOptions,
8013
+ handleSearch: handleSearch,
8014
+ handleApplyFilter: handleApplyFilter,
8015
+ handleOptionSelected: handleOptionSelected,
8016
+ handleOptionSelectedAll: handleOptionSelectedAll,
8017
+ handleSortDesc: handleSortDesc,
8018
+ handleSortAsc: handleSortAsc
8019
+ };
8020
+ };
8021
+
8022
+ var FilterPopover = function FilterPopover(props) {
8023
+ var searchString = props.searchString,
8024
+ defaultOptions = props.defaultOptions,
8025
+ onClose = props.onClose,
8026
+ getOption = props.getOption;
8027
+
8028
+ var _useFilterPopover = useFilterPopover(props),
8029
+ ref = _useFilterPopover.ref,
8030
+ options = _useFilterPopover.options,
8031
+ sOptions = _useFilterPopover.sOptions,
8032
+ isAscending = _useFilterPopover.isAscending,
8033
+ isDescending = _useFilterPopover.isDescending,
8034
+ filteredOptions = _useFilterPopover.filteredOptions,
8035
+ handleSearch = _useFilterPopover.handleSearch,
8036
+ handleApplyFilter = _useFilterPopover.handleApplyFilter,
8037
+ handleOptionSelected = _useFilterPopover.handleOptionSelected,
8038
+ handleOptionSelectedAll = _useFilterPopover.handleOptionSelectedAll,
8039
+ handleSortDesc = _useFilterPopover.handleSortDesc,
8040
+ handleSortAsc = _useFilterPopover.handleSortAsc;
8041
+
8042
+ return React.createElement(Popover, Object.assign({}, props, {
8043
+ hideArrow: true
8044
+ }), React.createElement(PopoverBody, {
8045
+ className: "pb-3"
8046
+ }, React.createElement("div", {
8047
+ ref: ref,
8048
+ className: styles["popover"]
8049
+ }, React.createElement("div", {
8050
+ className: "d-flex flex-column " + styles["popover__sort"]
8051
+ }, React.createElement(Label, {
8052
+ className: "font-weight-bold"
8053
+ }, "Sort"), React.createElement("div", {
8054
+ className: "px-1 " + styles["popover__sort__item"] + " " + (isAscending && styles["popover__sort__item--active"]),
8055
+ onClick: handleSortAsc
8056
+ }, React.createElement(AiOutlineSortAscending, {
8057
+ className: "mr-1"
8058
+ }), "Ascending"), React.createElement("div", {
8059
+ className: "px-1 mt-1 " + styles["popover__sort__item"] + " " + (isDescending && styles["popover__sort__item--active"]),
8060
+ onClick: handleSortDesc
8061
+ }, React.createElement(AiOutlineSortDescending, {
8062
+ className: "mr-1"
8063
+ }), "Descending")), typeof getOption != 'undefined' && React.createElement(React.Fragment, null, React.createElement("div", {
8064
+ className: "border border-top-1 border-bottom-0 mx-1 my-2"
8065
+ }), React.createElement("div", {
8066
+ className: "d-flex flex-column"
8067
+ }, React.createElement(Label, {
8068
+ className: "font-weight-bold"
8069
+ }, "Filter"), React.createElement("div", {
8070
+ className: "position-relative px-1 " + styles["popover__search"]
8071
+ }, React.createElement(BiSearchAlt2, {
8072
+ className: "position-absolute " + styles["popover__search__icon"]
8073
+ }), React.createElement(Input, {
8074
+ className: styles["popover__search__input"],
8075
+ value: searchString,
8076
+ onChange: handleSearch
8077
+ })), React.createElement("div", {
8078
+ className: "mx-1 mt-2 p-2 bg-light " + styles["popover__options"]
8079
+ }, React.createElement(FormGroup, {
8080
+ className: "d-flex align-items-center",
8081
+ check: true
8082
+ }, React.createElement(Input, {
8083
+ type: "checkbox",
8084
+ onChange: handleOptionSelectedAll,
8085
+ checked: sOptions == undefined
8086
+ }), " ", React.createElement(Label, {
8087
+ check: true
8088
+ }, "(Select all)")), !!getOption && !defaultOptions && Object.keys(options).map(function (i) {
8089
+ return React.createElement(FormGroup, {
8090
+ key: i.id,
8091
+ className: "d-flex align-items-center",
8092
+ check: true
8093
+ }, React.createElement(Input, {
8094
+ type: "checkbox",
8095
+ value: options["" + i],
8096
+ onChange: handleOptionSelected,
8097
+ checked: (sOptions === null || sOptions === void 0 ? void 0 : sOptions.includes(options["" + i])) || sOptions == undefined
8098
+ }), " ", React.createElement(Label, {
8099
+ check: true
8100
+ }, i));
8101
+ }), !!defaultOptions && filteredOptions.map(function (i) {
8102
+ return React.createElement(FormGroup, {
8103
+ key: i.value,
8104
+ className: "d-flex align-items-center",
8105
+ check: true
8106
+ }, React.createElement(Input, {
8107
+ type: "checkbox",
8108
+ value: i.value,
8109
+ onChange: handleOptionSelected,
8110
+ checked: (sOptions === null || sOptions === void 0 ? void 0 : sOptions.includes(i.value)) || sOptions == undefined
8111
+ }), " ", React.createElement(Label, {
8112
+ check: true
8113
+ }, i.label));
8114
+ }))), React.createElement("div", {
8115
+ className: "d-flex justify-content-end mt-3"
8116
+ }, React.createElement(Button, {
8117
+ color: "primary",
8118
+ className: "mr-2",
8119
+ size: "sm",
8120
+ onClick: handleApplyFilter
8121
+ }, "Apply Filter"), React.createElement(Button, {
8122
+ color: "secondary",
8123
+ size: "sm",
8124
+ onClick: onClose
8125
+ }, "Cancel"))))));
8126
+ };
8127
+
8128
+ var HeaderCell = function HeaderCell(_ref) {
8129
+ var _filters$searchByStri;
8130
+
8131
+ var data = _ref.data,
8132
+ popoverId = _ref.popoverId,
8133
+ filters = _ref.filters,
8134
+ onChangeFilters = _ref.onChangeFilters,
8135
+ onOpenFilter = _ref.onOpenFilter,
8136
+ onClose = _ref.onClose,
8137
+ rest = _objectWithoutPropertiesLoose(_ref, ["data", "popoverId", "filters", "onChangeFilters", "onOpenFilter", "onClose"]);
8138
+
8139
+ var _useTranslation = useTranslation(),
8140
+ t = _useTranslation.t;
8141
+
8142
+ var id = useMemo(function () {
8143
+ return data.sortBy != undefined ? userOrders[data.sortBy] : "";
8144
+ }, [data.sortBy]);
8145
+ var isOpen = useMemo(function () {
8146
+ return popoverId === id;
8147
+ }, [id, popoverId]);
8148
+
8149
+ var handleOpenFilter = function handleOpenFilter() {
8150
+ onOpenFilter === null || onOpenFilter === void 0 ? void 0 : onOpenFilter(id);
8151
+ };
8152
+
8153
+ return React.createElement("th", {
8154
+ className: data.className
8155
+ }, !!id && data.sortBy !== undefined ? React.createElement("div", {
8156
+ className: "w-100 d-flex justify-content-between align-items-center " + styles["table-filter-icon"]
8157
+ }, t(data.name), React.createElement("div", {
8158
+ className: "ml-2 p-1",
8159
+ id: id,
8160
+ onClick: handleOpenFilter,
8161
+ style: {
8162
+ cursor: "pointer"
8163
+ }
8164
+ }, data.sortBy !== undefined && data.sortBy === (filters === null || filters === void 0 ? void 0 : filters.sortBy) && React.createElement("span", null, filters.isDescending ? React.createElement(AiOutlineSortDescending, null) : React.createElement(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.createElement(HiFilter, null) : React.createElement(BiFilterAlt, null)), React.createElement(FilterPopover, Object.assign({
8165
+ target: id,
8166
+ placement: "bottom-end",
8167
+ isOpen: isOpen,
8168
+ filters: filters,
8169
+ onClose: onClose,
8170
+ onChangeFilters: onChangeFilters,
8171
+ sortBy: data.sortBy,
8172
+ searchBy: data.searchBy,
8173
+ getOption: data.getOption,
8174
+ defaultOptions: data.options
8175
+ }, rest))) : t(data.name));
8176
+ };
8177
+
8178
+ var useTableHeader = function useTableHeader(props) {
8179
+ var filters = props.filters,
8180
+ onChangeFilters = props.onChangeFilters;
8181
+
8182
+ var _useState = useState(),
8183
+ popoverId = _useState[0],
8184
+ setPopoverId = _useState[1];
8185
+
8186
+ var _useState2 = useState([]),
8187
+ users = _useState2[0],
8188
+ setUsers = _useState2[1];
8189
+
8190
+ var _useState3 = useState(_extends({}, DEFAULT_FILTER_POPOVER, {
8191
+ sortBy: filters.sortBy,
8192
+ isDescending: filters.isDescending,
8193
+ searchString: filters.searchString
8194
+ })),
8195
+ popoverFilters = _useState3[0],
8196
+ setPopoverFilters = _useState3[1];
8197
+
8198
+ var dispatch = useDispatch();
8199
+ var getData = useCallback(function () {
8200
+ try {
8201
+ var _temp2 = _catch(function () {
8202
+ return Promise.resolve(getRosterUser(popoverFilters)).then(function (res) {
8203
+ var items = res.data.items;
8204
+
8205
+ for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {
8206
+ var user = _step.value;
8207
+ user.roles = user.roles.includes("EduTeacher") ? [ROLES.EDUTEACHER] : user.roles;
8208
+ }
8209
+
8210
+ setUsers(items);
8211
+ });
8212
+ }, function (err) {
8213
+ var _err$response, _err$response$data;
8214
+
8215
+ dispatch(setAlert({
8216
+ type: "danger",
8217
+ 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
8218
+ }));
8219
+ });
8220
+
8221
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
8222
+ } catch (e) {
8223
+ return Promise.reject(e);
8224
+ }
8225
+ }, [JSON.stringify(popoverFilters)]);
8226
+
8227
+ var handleFilterIcon = function handleFilterIcon(id) {
8228
+ setPopoverId(id);
8229
+ };
8230
+
8231
+ var handleCloseFilter = function handleCloseFilter() {
8232
+ setPopoverId("");
8233
+ };
8234
+
8235
+ useEffect(function () {
8236
+ setPopoverFilters(_extends({}, popoverFilters, {
8237
+ sortBy: filters.sortBy,
8238
+ isDescending: filters.isDescending
8239
+ }));
8240
+ }, [filters.sortBy, filters.isDescending]);
8241
+ var handleSearch = useCallback(function (search, searchBy) {
8242
+ setPopoverFilters(_extends({}, popoverFilters, {
8243
+ searchStringBy: search,
8244
+ searchBy: searchBy
8245
+ }));
8246
+ }, [JSON.stringify(popoverFilters)]);
8247
+ var handleChangeFilters = useCallback(function (value, searchBy) {
8248
+ onChangeFilters === null || onChangeFilters === void 0 ? void 0 : onChangeFilters(_extends({}, filters, {
8249
+ searchByStrings: value,
8250
+ searchBy: searchBy
8251
+ }));
8252
+ }, [JSON.stringify(filters)]);
8253
+ useEffect(function () {
8254
+ getData();
8255
+ }, [JSON.stringify(popoverFilters)]);
8256
+ useEffect(function () {
8257
+ setPopoverFilters(_extends({}, DEFAULT_FILTER_POPOVER, {
8258
+ sortBy: filters.sortBy,
8259
+ isDescending: filters.isDescending,
8260
+ searchString: filters.searchString
8261
+ }));
8262
+ }, [JSON.stringify(filters)]);
8263
+ return {
8264
+ popoverFilters: popoverFilters,
8265
+ popoverId: popoverId,
8266
+ users: users,
8267
+ handleFilterIcon: handleFilterIcon,
8268
+ handleCloseFilter: handleCloseFilter,
8269
+ handleSearch: handleSearch,
8270
+ handleChangeFilters: handleChangeFilters
8271
+ };
8272
+ };
8273
+
8274
+ var TableHeader = function TableHeader(_ref) {
8275
+ var headers = _ref.headers,
8276
+ filters = _ref.filters,
8277
+ onChangeFilters = _ref.onChangeFilters;
8278
+
8279
+ var _useTableHeader = useTableHeader({
8280
+ filters: filters,
8281
+ onChangeFilters: onChangeFilters
8282
+ }),
8283
+ popoverFilters = _useTableHeader.popoverFilters,
8284
+ popoverId = _useTableHeader.popoverId,
8285
+ users = _useTableHeader.users,
8286
+ handleFilterIcon = _useTableHeader.handleFilterIcon,
8287
+ handleCloseFilter = _useTableHeader.handleCloseFilter,
8288
+ handleSearch = _useTableHeader.handleSearch,
8289
+ handleChangeFilters = _useTableHeader.handleChangeFilters;
8290
+
8291
+ return React.createElement("tr", null, headers.map(function (header) {
8292
+ return React.createElement(HeaderCell, {
8293
+ key: header.name,
8294
+ data: header,
8295
+ popoverId: popoverId,
8296
+ filters: filters,
8297
+ users: users,
8298
+ searchString: popoverFilters.searchStringBy,
8299
+ selectedOptions: filters.searchByStrings,
8300
+ onSearch: handleSearch,
8301
+ onChangeFilters: onChangeFilters,
8302
+ onClose: handleCloseFilter,
8303
+ onOpenFilter: handleFilterIcon,
8304
+ onOptionsChange: handleChangeFilters
8305
+ });
8306
+ }));
8307
+ };
8308
+
8309
+ var useExportUsersCsv = function useExportUsersCsv() {
8310
+ var dispatch = useDispatch();
8311
+ var schoolName = useSelector(function (state) {
8312
+ var _state$common, _state$common$user;
8313
+
8314
+ 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;
8315
+ }) || "";
8316
+
8317
+ var exportUsers = function exportUsers(filters) {
8318
+ try {
8319
+ var _temp3 = function _temp3() {
8320
+ dispatch(setLoading(false));
8321
+ };
8322
+
8323
+ dispatch(setLoading(true));
8324
+
8325
+ var _temp4 = _catch(function () {
8326
+ return Promise.resolve(getRosterUserExport(filters)).then(function (res) {
8327
+ var data = res.data;
8328
+ var encodedUri = convertDataExportUser(data);
8329
+ var link = document.createElement("a");
8330
+ link.href = encodedUri;
8331
+ link.download = schoolName + "_Users_Report.csv";
8332
+ link.click();
8333
+ });
8334
+ }, function (err) {
8335
+ var _err$response, _err$response$data;
8336
+
8337
+ dispatch(setAlert({
8338
+ type: "danger",
8339
+ 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
8340
+ }));
8341
+ });
8342
+
8343
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp3) : _temp3(_temp4));
8344
+ } catch (e) {
8345
+ return Promise.reject(e);
8346
+ }
8347
+ };
8348
+
8349
+ var convertDataExportUser = function convertDataExportUser(data) {
8350
+ 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";
8351
+ var content = data.map(function (user) {
8352
+ var _user$rosterUser, _user$rosterUser2, _user$rosterUser3, _user$rosterUser4, _user$rosterUser5, _user$rosterUser6, _user$rosterUser7;
8353
+
8354
+ var age = user.dateOfBirth !== DATE_MIN_VALUE ? differenceInCalendarYears(moment().toDate(), moment.utc(user.dateOfBirth).local().toDate()) : "";
8355
+ 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);
8356
+ }).join('\n');
8357
+ return "" + CSV_PREFIX + headers + encodeURIComponent(content);
8358
+ };
8359
+
8360
+ var escapeCell = function escapeCell(value) {
8361
+ if (!value) return "";
8362
+ return "\"" + value.replace(/"/g, '""').replaceAll(/\n/g, " ") + "\"";
8363
+ };
8364
+
8365
+ return {
8366
+ exportUsers: exportUsers
8367
+ };
8368
+ };
8369
+
8370
+ var buttonTextStyle$2 = {
8371
+ fontWeight: 500
8372
+ };
8373
+ var buttonStyle$2 = {
8374
+ height: 38
8375
+ };
7731
8376
  var header$2 = "User";
7732
8377
 
7733
8378
  var UserList = function UserList() {
@@ -7736,6 +8381,7 @@ var UserList = function UserList() {
7736
8381
  userList = _useUserList.userList,
7737
8382
  totalItems = _useUserList.totalItems,
7738
8383
  filters = _useUserList.filters,
8384
+ fullName = _useUserList.fullName,
7739
8385
  removeData = _useUserList.removeData,
7740
8386
  changeFilters = _useUserList.changeFilters,
7741
8387
  reDirectDetailPage = _useUserList.reDirectDetailPage,
@@ -7743,11 +8389,18 @@ var UserList = function UserList() {
7743
8389
  handleSyncRosterStudents = _useUserList.handleSyncRosterStudents,
7744
8390
  rosterUserInfo = _useUserList.rosterUserInfo;
7745
8391
 
8392
+ var _useExportUsersCsv = useExportUsersCsv(),
8393
+ exportUsers = _useExportUsersCsv.exportUsers;
8394
+
7746
8395
  var _useTranslation = useTranslation(),
7747
8396
  t = _useTranslation.t;
7748
8397
 
8398
+ var handleExportUsers = function handleExportUsers() {
8399
+ return exportUsers(filters);
8400
+ };
8401
+
7749
8402
  return React.createElement("div", {
7750
- className: "fadeIn animated"
8403
+ className: "fadeIn animated h-100"
7751
8404
  }, React.createElement("h5", {
7752
8405
  className: "mb-2"
7753
8406
  }, t("" + header$2)), React.createElement(Row, {
@@ -7775,33 +8428,34 @@ var UserList = function UserList() {
7775
8428
  }, React.createElement(SyncButtonIcon, {
7776
8429
  text: "Sync Roster students",
7777
8430
  onClick: handleSyncRosterStudents
7778
- }))), React.createElement(Row, {
8431
+ }), React.createElement("button", {
8432
+ className: "btn btn-success d-flex align-items-center border-0 p-0 ml-2",
8433
+ style: buttonStyle$2,
8434
+ onClick: handleExportUsers
8435
+ }, React.createElement("div", {
8436
+ className: "" + styles["button-icon"]
8437
+ }, React.createElement("img", {
8438
+ src: "images/export-icon.svg",
8439
+ alt: ""
8440
+ })), React.createElement("p", {
8441
+ className: styles["button-content"] + " mb-0",
8442
+ style: buttonTextStyle$2
8443
+ }, "Export to CSV")))), React.createElement(Row, {
7779
8444
  className: "mb-2"
7780
8445
  }, React.createElement(Col, {
7781
8446
  md: 12
7782
- }, userList && userList.length > 0 ? React.createElement("div", null, React.createElement(Table, {
8447
+ }, React.createElement("div", null, React.createElement(Table, {
7783
8448
  bordered: true,
7784
8449
  hover: true,
7785
8450
  striped: true,
7786
8451
  responsive: true,
7787
8452
  size: "sm"
7788
- }, React.createElement("thead", null, React.createElement("tr", null, React.createElement("th", {
7789
- className: "align-top"
7790
- }, t("name")), React.createElement("th", {
7791
- className: "align-top"
7792
- }, t("email")), React.createElement("th", {
7793
- className: "align-top"
7794
- }, t("age")), React.createElement("th", {
7795
- className: "align-top"
7796
- }, t("role")), React.createElement("th", {
7797
- className: "align-top"
7798
- }, t("active_status")), React.createElement("th", {
7799
- className: "align-top"
7800
- }, t("created_time")), React.createElement("th", {
7801
- className: "align-top"
7802
- }, "Information Roster (Sourced Id / Full name / Email)"), React.createElement("th", {
7803
- className: "text-center"
7804
- }, t("action")))), React.createElement("tbody", null, userList.map(function (record) {
8453
+ }, React.createElement("thead", null, React.createElement(TableHeader, {
8454
+ headers: UserColumns,
8455
+ filters: filters,
8456
+ fullName: fullName,
8457
+ onChangeFilters: changeFilters
8458
+ })), React.createElement("tbody", null, userList && userList.length > 0 && userList.map(function (record) {
7805
8459
  return React.createElement("tr", {
7806
8460
  key: record.id
7807
8461
  }, React.createElement("td", {
@@ -7815,7 +8469,7 @@ var UserList = function UserList() {
7815
8469
  className: "align-middle"
7816
8470
  }, record.email), React.createElement("td", {
7817
8471
  className: "align-middle"
7818
- }, differenceInCalendarYears(new Date(), new Date(record.dateOfBirth))), React.createElement("td", {
8472
+ }, record.dateOfBirth !== DATE_MIN_VALUE && differenceInCalendarYears$1(new Date(), new Date(record.dateOfBirth))), React.createElement("td", {
7819
8473
  className: "align-middle"
7820
8474
  }, !!record.roles && record.roles.map(function (role) {
7821
8475
  return role === "SecondaryTeacher" ? "SupportTeacher" : role;
@@ -7839,9 +8493,13 @@ var UserList = function UserList() {
7839
8493
  return removeData(record.id);
7840
8494
  }
7841
8495
  })));
7842
- })))) : React.createElement(EmptyDataAlert, {
8496
+ }), (!userList || !userList.length) && React.createElement("tr", null, React.createElement("td", {
8497
+ colSpan: 12,
8498
+ className: "p-0"
8499
+ }, React.createElement(EmptyDataAlert, {
8500
+ className: "mb-0",
7843
8501
  label: t("user")
7844
- })), React.createElement(Col, {
8502
+ }))))))), React.createElement(Col, {
7845
8503
  md: 12
7846
8504
  }, React.createElement(CustomPagination, {
7847
8505
  filters: filters,