import React, { useEffect, useState, useRef, useCallback, } from 'react'; import { useTranslation } from 'next-i18next'; import Link from 'next/link'; import AdminUsersContainer from '~/client/services/AdminUsersContainer'; import { toastError } from '~/client/util/toastr'; import PaginationWrapper from '../PaginationWrapper'; import { withUnstatedContainers } from '../UnstatedUtils'; import InviteUserControl from './Users/InviteUserControl'; import PasswordResetModal from './Users/PasswordResetModal'; import UserTable from './Users/UserTable'; import styles from './UserManagement.module.scss'; type UserManagementProps = { adminUsersContainer: AdminUsersContainer } const UserManagement = (props: UserManagementProps) => { const { t } = useTranslation('admin'); const { adminUsersContainer } = props; const [isNotifyCommentShow, setIsNotifyCommentShow] = useState(false); const inputRef = useRef(null); const pagingHandler = useCallback(async(selectedPage: number) => { try { await adminUsersContainer.retrieveUsersByPagingNum(selectedPage); } catch (err) { toastError(err); } }, [adminUsersContainer]); // for Next routing useEffect(() => { pagingHandler(1); }, [pagingHandler]); const validateToggleStatus = (statusType: string) => { return (adminUsersContainer.isSelected(statusType)) ? ( adminUsersContainer.state.selectedStatusList.size > 1 ) : ( true ); }; const clickHandler = (statusType: string) => { if (!validateToggleStatus(statusType)) { return setIsNotifyCommentShow(true); } if (isNotifyCommentShow) { setIsNotifyCommentShow(false); } adminUsersContainer.handleClick(statusType); }; const resetButtonClickHandler = useCallback(async() => { try { await adminUsersContainer.resetAllChanges(); setIsNotifyCommentShow(false); if (inputRef.current != null) { inputRef.current.value = ''; } } catch (err) { toastError(err); } }, [adminUsersContainer]); const changeSearchTextHandler = useCallback(async(e: React.FormEvent) => { await adminUsersContainer.handleChangeSearchText(e?.currentTarget.value); }, [adminUsersContainer]); const renderCheckbox = (status: string, statusLabel: string, statusColor: string) => { return (
clickHandler(status)} />
); }; const pager = (
); return (
{ adminUsersContainer.state.userForPasswordResetModal != null && ( ) }

{t('admin:user_management.external_account')}

{t('user_management.user_management')}

search { adminUsersContainer.state.searchText.length > 0 ? ( { await adminUsersContainer.clearSearchText(); if (inputRef.current != null) { inputRef.current.value = ''; } }} /> ) : '' }
{renderCheckbox('all', 'All', 'secondary')} {renderCheckbox('registered', 'Approval Pending', 'info')} {renderCheckbox('active', 'Active', 'success')} {renderCheckbox('suspended', 'Suspended', 'warning text-dark')} {renderCheckbox('invited', 'Invited', 'pink')}
{ isNotifyCommentShow && {t('admin:user_management.click_twice_same_checkbox')} }
{pager} {pager}
); }; const UserManagementWrapper = withUnstatedContainers(UserManagement, [AdminUsersContainer]); export default UserManagementWrapper;