import React, { useCallback } from 'react'; import type { IUserHasId } from '@growi/core'; import { UserPicture } from '@growi/ui/dist/components'; import dateFnsFormat from 'date-fns/format'; import { useTranslation } from 'next-i18next'; import AdminUsersContainer from '~/client/services/AdminUsersContainer'; import { withUnstatedContainers } from '../../UnstatedUtils'; import { SortIcons } from './SortIcons'; import UserMenu from './UserMenu'; type UserTableProps = { adminUsersContainer: AdminUsersContainer, } const UserTable = (props: UserTableProps) => { const { t } = useTranslation('admin'); const { adminUsersContainer } = props; const getUserStatusLabel = (userStatus: number) => { let additionalClassName = 'text-bg-info'; let text = 'Approval Pending'; switch (userStatus) { case 1: additionalClassName = 'text-bg-info'; text = 'Approval Pending'; break; case 2: additionalClassName = 'text-bg-success'; text = 'Active'; break; case 3: additionalClassName = 'text-bg-warning'; text = 'Suspended'; break; case 4: additionalClassName = 'text-bg-danger'; text = 'Deleted'; break; case 5: additionalClassName = 'text-bg-secondary'; text = 'Invited'; break; } return ( {text} ); }; const sortIconsClickedHandler = useCallback(async(sort: string, sortOrder: string) => { const isAsc = sortOrder === 'asc'; await adminUsersContainer.sort(sort, isAsc); }, [adminUsersContainer]); const isCurrentSortOrderAsc = adminUsersContainer.state.sortOrder === 'asc'; return (
{ adminUsersContainer.state.users.map((user: IUserHasId) => { return ( ); }) }
#
{t('user_management.status')}
sortIconsClickedHandler('status', sortOrder)} />
username
sortIconsClickedHandler('username', sortOrder)} />
{t('Name')}
sortIconsClickedHandler('name', sortOrder)} />
{t('Email')}
sortIconsClickedHandler('email', sortOrder)} />
{t('Created')}
sortIconsClickedHandler('createdAt', sortOrder)} />
{t('last_login')}
sortIconsClickedHandler('lastLoginAt', sortOrder)} />
{getUserStatusLabel(user.status)} {(user.admin) && ( {t('admin:user_management.user_table.administrator')} )} {(user.readOnly) && ( {t('admin:user_management.user_table.read_only')} )} {user.username} {user.name} {user.email} {dateFnsFormat(new Date(user.createdAt), 'yyyy-MM-dd')} {user.lastLoginAt && {dateFnsFormat(new Date(user.lastLoginAt), 'yyyy-MM-dd HH:mm')}}
); }; const UserTableWrapper = withUnstatedContainers(UserTable, [AdminUsersContainer]); export default UserTableWrapper;