import React, { useEffect, useState, useRef } from 'react'; import { useTranslation } from 'next-i18next'; import AdminUsersContainer from '~/client/services/AdminUsersContainer'; import { toastError } from '~/client/util/apiNotification'; 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 = (async(selectedPage: number) => { try { await adminUsersContainer.retrieveUsersByPagingNum(selectedPage); } catch (err) { toastError(err); } }) // componentDidMount useEffect(() => { pagingHandler(1); }, []); 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 = (async() => { try { await adminUsersContainer.resetAllChanges(); setIsNotifyCommentShow(false); (inputRef.current != null) && (inputRef.current.value = ''); } catch (err) { toastError(err); } }) const changeSearchTextHandler = (async(e: React.FormEvent) => { await adminUsersContainer.handleChangeSearchText(e?.currentTarget.value); }) 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')}

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