|
@@ -1,10 +1,10 @@
|
|
|
import React, { useCallback } from 'react';
|
|
import React, { useCallback } from 'react';
|
|
|
|
|
|
|
|
|
|
+import type { IUserHasId } from '@growi/core';
|
|
|
import { UserPicture } from '@growi/ui';
|
|
import { UserPicture } from '@growi/ui';
|
|
|
import dateFnsFormat from 'date-fns/format';
|
|
import dateFnsFormat from 'date-fns/format';
|
|
|
import { useTranslation } from 'next-i18next';
|
|
import { useTranslation } from 'next-i18next';
|
|
|
|
|
|
|
|
-import type { IUserHasId } from '@growi/core';
|
|
|
|
|
import AdminUsersContainer from '~/client/services/AdminUsersContainer';
|
|
import AdminUsersContainer from '~/client/services/AdminUsersContainer';
|
|
|
|
|
|
|
|
import { withUnstatedContainers } from '../../UnstatedUtils';
|
|
import { withUnstatedContainers } from '../../UnstatedUtils';
|
|
@@ -52,13 +52,13 @@ const UserTable = (props: UserTableProps) => {
|
|
|
<span className={`badge badge-pill ${additionalClassName}`}>
|
|
<span className={`badge badge-pill ${additionalClassName}`}>
|
|
|
{text}
|
|
{text}
|
|
|
</span>
|
|
</span>
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ );
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const sortIconsClickedHandler = useCallback(async(sort: string, sortOrder: string) => {
|
|
const sortIconsClickedHandler = useCallback(async(sort: string, sortOrder: string) => {
|
|
|
const isAsc = sortOrder === 'asc';
|
|
const isAsc = sortOrder === 'asc';
|
|
|
await adminUsersContainer.sort(sort, isAsc);
|
|
await adminUsersContainer.sort(sort, isAsc);
|
|
|
- }, [adminUsersContainer])
|
|
|
|
|
|
|
+ }, [adminUsersContainer]);
|
|
|
|
|
|
|
|
const isCurrentSortOrderAsc = adminUsersContainer.state.sortOrder === 'asc';
|
|
const isCurrentSortOrderAsc = adminUsersContainer.state.sortOrder === 'asc';
|
|
|
|
|
|
|
@@ -67,7 +67,7 @@ const UserTable = (props: UserTableProps) => {
|
|
|
<table className="table table-default table-bordered table-user-list">
|
|
<table className="table table-default table-bordered table-user-list">
|
|
|
<thead>
|
|
<thead>
|
|
|
<tr>
|
|
<tr>
|
|
|
- <th style={{ width: "100px" }}>#</th>
|
|
|
|
|
|
|
+ <th style={{ width: '100px' }}>#</th>
|
|
|
<th>
|
|
<th>
|
|
|
<div className="d-flex align-items-center">
|
|
<div className="d-flex align-items-center">
|
|
|
<div className="mr-3">
|
|
<div className="mr-3">
|
|
@@ -76,7 +76,7 @@ const UserTable = (props: UserTableProps) => {
|
|
|
<SortIcons
|
|
<SortIcons
|
|
|
isSelected={adminUsersContainer.state.sort === 'status'}
|
|
isSelected={adminUsersContainer.state.sort === 'status'}
|
|
|
isAsc={isCurrentSortOrderAsc}
|
|
isAsc={isCurrentSortOrderAsc}
|
|
|
- onClick={(sortOrder) => sortIconsClickedHandler('status', sortOrder)}
|
|
|
|
|
|
|
+ onClick={sortOrder => sortIconsClickedHandler('status', sortOrder)}
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
@@ -88,7 +88,7 @@ const UserTable = (props: UserTableProps) => {
|
|
|
<SortIcons
|
|
<SortIcons
|
|
|
isSelected={adminUsersContainer.state.sort === 'username'}
|
|
isSelected={adminUsersContainer.state.sort === 'username'}
|
|
|
isAsc={isCurrentSortOrderAsc}
|
|
isAsc={isCurrentSortOrderAsc}
|
|
|
- onClick={(sortOrder) => sortIconsClickedHandler('username', sortOrder)}
|
|
|
|
|
|
|
+ onClick={sortOrder => sortIconsClickedHandler('username', sortOrder)}
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
@@ -100,7 +100,7 @@ const UserTable = (props: UserTableProps) => {
|
|
|
<SortIcons
|
|
<SortIcons
|
|
|
isSelected={adminUsersContainer.state.sort === 'name'}
|
|
isSelected={adminUsersContainer.state.sort === 'name'}
|
|
|
isAsc={isCurrentSortOrderAsc}
|
|
isAsc={isCurrentSortOrderAsc}
|
|
|
- onClick={(sortOrder) => sortIconsClickedHandler('name', sortOrder)}
|
|
|
|
|
|
|
+ onClick={sortOrder => sortIconsClickedHandler('name', sortOrder)}
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
@@ -112,11 +112,11 @@ const UserTable = (props: UserTableProps) => {
|
|
|
<SortIcons
|
|
<SortIcons
|
|
|
isSelected={adminUsersContainer.state.sort === 'email'}
|
|
isSelected={adminUsersContainer.state.sort === 'email'}
|
|
|
isAsc={isCurrentSortOrderAsc}
|
|
isAsc={isCurrentSortOrderAsc}
|
|
|
- onClick={(sortOrder) => sortIconsClickedHandler('email', sortOrder)}
|
|
|
|
|
|
|
+ onClick={sortOrder => sortIconsClickedHandler('email', sortOrder)}
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
|
- <th style={{ width: "100px" }}>
|
|
|
|
|
|
|
+ <th style={{ width: '100px' }}>
|
|
|
<div className="d-flex align-items-center">
|
|
<div className="d-flex align-items-center">
|
|
|
<div className="mr-3">
|
|
<div className="mr-3">
|
|
|
{t('Created')}
|
|
{t('Created')}
|
|
@@ -124,11 +124,11 @@ const UserTable = (props: UserTableProps) => {
|
|
|
<SortIcons
|
|
<SortIcons
|
|
|
isSelected={adminUsersContainer.state.sort === 'createdAt'}
|
|
isSelected={adminUsersContainer.state.sort === 'createdAt'}
|
|
|
isAsc={isCurrentSortOrderAsc}
|
|
isAsc={isCurrentSortOrderAsc}
|
|
|
- onClick={(sortOrder) => sortIconsClickedHandler('createdAt', sortOrder)}
|
|
|
|
|
|
|
+ onClick={sortOrder => sortIconsClickedHandler('createdAt', sortOrder)}
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
|
- <th style={{ width: "150px" }}>
|
|
|
|
|
|
|
+ <th style={{ width: '150px' }}>
|
|
|
<div className="d-flex align-items-center">
|
|
<div className="d-flex align-items-center">
|
|
|
<div className="mr-3">
|
|
<div className="mr-3">
|
|
|
{t('last_login')}
|
|
{t('last_login')}
|
|
@@ -136,11 +136,11 @@ const UserTable = (props: UserTableProps) => {
|
|
|
<SortIcons
|
|
<SortIcons
|
|
|
isSelected={adminUsersContainer.state.sort === 'lastLoginAt'}
|
|
isSelected={adminUsersContainer.state.sort === 'lastLoginAt'}
|
|
|
isAsc={isCurrentSortOrderAsc}
|
|
isAsc={isCurrentSortOrderAsc}
|
|
|
- onClick={(sortOrder) => sortIconsClickedHandler('lastLoginAt', sortOrder)}
|
|
|
|
|
|
|
+ onClick={sortOrder => sortIconsClickedHandler('lastLoginAt', sortOrder)}
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
|
- <th style={{ width: "70px" }}></th>
|
|
|
|
|
|
|
+ <th style={{ width: '70px' }}></th>
|
|
|
</tr>
|
|
</tr>
|
|
|
</thead>
|
|
</thead>
|
|
|
<tbody>
|
|
<tbody>
|
|
@@ -176,9 +176,9 @@ const UserTable = (props: UserTableProps) => {
|
|
|
</tbody>
|
|
</tbody>
|
|
|
</table>
|
|
</table>
|
|
|
</div>
|
|
</div>
|
|
|
- )
|
|
|
|
|
|
|
+ );
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
const UserTableWrapper = withUnstatedContainers(UserTable, [AdminUsersContainer]);
|
|
const UserTableWrapper = withUnstatedContainers(UserTable, [AdminUsersContainer]);
|
|
|
|
|
|