|
@@ -9,6 +9,7 @@ import UserMenu from './UserMenu';
|
|
|
import { createSubscribedElement } from '../../UnstatedUtils';
|
|
import { createSubscribedElement } from '../../UnstatedUtils';
|
|
|
import AppContainer from '../../../services/AppContainer';
|
|
import AppContainer from '../../../services/AppContainer';
|
|
|
import AdminUsersContainer from '../../../services/AdminUsersContainer';
|
|
import AdminUsersContainer from '../../../services/AdminUsersContainer';
|
|
|
|
|
+import SortIcons from './SortIcons';
|
|
|
|
|
|
|
|
class UserTable extends React.Component {
|
|
class UserTable extends React.Component {
|
|
|
|
|
|
|
@@ -74,9 +75,18 @@ class UserTable extends React.Component {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ sortIconsClickedHandler(sort, sortOrder) {
|
|
|
|
|
+ const isAsc = sortOrder === 'asc';
|
|
|
|
|
+
|
|
|
|
|
+ const { adminUsersContainer } = this.props;
|
|
|
|
|
+ adminUsersContainer.sort(sort, isAsc);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
render() {
|
|
render() {
|
|
|
const { t, adminUsersContainer } = this.props;
|
|
const { t, adminUsersContainer } = this.props;
|
|
|
|
|
|
|
|
|
|
+ const isCurrentSortOrderAsc = adminUsersContainer.state.sortOrder === 'asc';
|
|
|
|
|
+
|
|
|
return (
|
|
return (
|
|
|
<Fragment>
|
|
<Fragment>
|
|
|
<table className="table table-default table-bordered table-user-list">
|
|
<table className="table table-default table-bordered table-user-list">
|
|
@@ -88,26 +98,13 @@ class UserTable extends React.Component {
|
|
|
<div className="mr-3">
|
|
<div className="mr-3">
|
|
|
{t('status')}
|
|
{t('status')}
|
|
|
</div>
|
|
</div>
|
|
|
- <div className="d-flex flex-column text-center">
|
|
|
|
|
- <Fragment>
|
|
|
|
|
- <a
|
|
|
|
|
- className={`fa ${(
|
|
|
|
|
- adminUsersContainer.state.sort === 'status')
|
|
|
|
|
- && (adminUsersContainer.state.sortOrder === 'asc') ? 'fa-chevron-up' : 'fa-angle-up'}`}
|
|
|
|
|
- aria-hidden="true"
|
|
|
|
|
- onClick={() => adminUsersContainer.onClickSort('status', true)}
|
|
|
|
|
- >
|
|
|
|
|
- </a>
|
|
|
|
|
- <a
|
|
|
|
|
- className={`fa ${(
|
|
|
|
|
- adminUsersContainer.state.sort === 'status')
|
|
|
|
|
- && (adminUsersContainer.state.sortOrder === 'desc') ? 'fa-chevron-down' : 'fa-angle-down'}`}
|
|
|
|
|
- aria-hidden="true"
|
|
|
|
|
- onClick={() => adminUsersContainer.onClickSort('status', false)}
|
|
|
|
|
- >
|
|
|
|
|
- </a>
|
|
|
|
|
- </Fragment>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <SortIcons
|
|
|
|
|
+ isSelected={adminUsersContainer.state.sort === 'status'}
|
|
|
|
|
+ isAsc={isCurrentSortOrderAsc}
|
|
|
|
|
+ onClick={(sortOrder) => {
|
|
|
|
|
+ this.sortIconsClickedHandler('status', sortOrder);
|
|
|
|
|
+ }}
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
|
<th>
|
|
<th>
|
|
@@ -115,26 +112,13 @@ class UserTable extends React.Component {
|
|
|
<div className="mr-3">
|
|
<div className="mr-3">
|
|
|
<code>username</code>
|
|
<code>username</code>
|
|
|
</div>
|
|
</div>
|
|
|
- <div className="d-flex flex-column text-center">
|
|
|
|
|
- <Fragment>
|
|
|
|
|
- <a
|
|
|
|
|
- className={`fa ${(
|
|
|
|
|
- adminUsersContainer.state.sort === 'username')
|
|
|
|
|
- && (adminUsersContainer.state.sortOrder === 'asc') ? 'fa-chevron-up' : 'fa-angle-up'}`}
|
|
|
|
|
- aria-hidden="true"
|
|
|
|
|
- onClick={() => adminUsersContainer.onClickSort('username', true)}
|
|
|
|
|
- >
|
|
|
|
|
- </a>
|
|
|
|
|
- <a
|
|
|
|
|
- className={`fa ${(
|
|
|
|
|
- adminUsersContainer.state.sort === 'username')
|
|
|
|
|
- && (adminUsersContainer.state.sortOrder === 'desc') ? 'fa-chevron-down' : 'fa-angle-down'}`}
|
|
|
|
|
- aria-hidden="true"
|
|
|
|
|
- onClick={() => adminUsersContainer.onClickSort('username', false)}
|
|
|
|
|
- >
|
|
|
|
|
- </a>
|
|
|
|
|
- </Fragment>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <SortIcons
|
|
|
|
|
+ isSelected={adminUsersContainer.state.sort === 'username'}
|
|
|
|
|
+ isAsc={isCurrentSortOrderAsc}
|
|
|
|
|
+ onClick={(sortOrder) => {
|
|
|
|
|
+ this.sortIconsClickedHandler('username', sortOrder);
|
|
|
|
|
+ }}
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
|
<th>
|
|
<th>
|
|
@@ -142,26 +126,13 @@ class UserTable extends React.Component {
|
|
|
<div className="mr-3">
|
|
<div className="mr-3">
|
|
|
{t('Name')}
|
|
{t('Name')}
|
|
|
</div>
|
|
</div>
|
|
|
- <div className="d-flex flex-column text-center">
|
|
|
|
|
- <Fragment>
|
|
|
|
|
- <a
|
|
|
|
|
- className={`fa ${(
|
|
|
|
|
- adminUsersContainer.state.sort === 'name')
|
|
|
|
|
- && (adminUsersContainer.state.sortOrder === 'asc') ? 'fa-chevron-up' : 'fa-angle-up'}`}
|
|
|
|
|
- aria-hidden="true"
|
|
|
|
|
- onClick={() => adminUsersContainer.onClickSort('name', true)}
|
|
|
|
|
- >
|
|
|
|
|
- </a>
|
|
|
|
|
- <a
|
|
|
|
|
- className={`fa ${(
|
|
|
|
|
- adminUsersContainer.state.sort === 'name')
|
|
|
|
|
- && (adminUsersContainer.state.sortOrder === 'desc') ? 'fa-chevron-down' : 'fa-angle-down'}`}
|
|
|
|
|
- aria-hidden="true"
|
|
|
|
|
- onClick={() => adminUsersContainer.onClickSort('name', false)}
|
|
|
|
|
- >
|
|
|
|
|
- </a>
|
|
|
|
|
- </Fragment>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <SortIcons
|
|
|
|
|
+ isSelected={adminUsersContainer.state.sort === 'name'}
|
|
|
|
|
+ isAsc={isCurrentSortOrderAsc}
|
|
|
|
|
+ onClick={(sortOrder) => {
|
|
|
|
|
+ this.sortIconsClickedHandler('name', sortOrder);
|
|
|
|
|
+ }}
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
|
<th>
|
|
<th>
|
|
@@ -169,26 +140,13 @@ class UserTable extends React.Component {
|
|
|
<div className="mr-3">
|
|
<div className="mr-3">
|
|
|
{t('Email')}
|
|
{t('Email')}
|
|
|
</div>
|
|
</div>
|
|
|
- <div className="d-flex flex-column text-center">
|
|
|
|
|
- <Fragment>
|
|
|
|
|
- <a
|
|
|
|
|
- className={`fa ${(
|
|
|
|
|
- adminUsersContainer.state.sort === 'email')
|
|
|
|
|
- && (adminUsersContainer.state.sortOrder === 'asc') ? 'fa-chevron-up' : 'fa-angle-up'}`}
|
|
|
|
|
- aria-hidden="true"
|
|
|
|
|
- onClick={() => adminUsersContainer.onClickSort('email', true)}
|
|
|
|
|
- >
|
|
|
|
|
- </a>
|
|
|
|
|
- <a
|
|
|
|
|
- className={`fa ${(
|
|
|
|
|
- adminUsersContainer.state.sort === 'email')
|
|
|
|
|
- && (adminUsersContainer.state.sortOrder === 'desc') ? 'fa-chevron-down' : 'fa-angle-down'}`}
|
|
|
|
|
- aria-hidden="true"
|
|
|
|
|
- onClick={() => adminUsersContainer.onClickSort('email', false)}
|
|
|
|
|
- >
|
|
|
|
|
- </a>
|
|
|
|
|
- </Fragment>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <SortIcons
|
|
|
|
|
+ isSelected={adminUsersContainer.state.sort === 'email'}
|
|
|
|
|
+ isAsc={isCurrentSortOrderAsc}
|
|
|
|
|
+ onClick={(sortOrder) => {
|
|
|
|
|
+ this.sortIconsClickedHandler('email', sortOrder);
|
|
|
|
|
+ }}
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
|
<th width="100px">
|
|
<th width="100px">
|
|
@@ -196,26 +154,13 @@ class UserTable extends React.Component {
|
|
|
<div className="mr-3">
|
|
<div className="mr-3">
|
|
|
{t('Created')}
|
|
{t('Created')}
|
|
|
</div>
|
|
</div>
|
|
|
- <div className="d-flex flex-column text-center">
|
|
|
|
|
- <Fragment>
|
|
|
|
|
- <a
|
|
|
|
|
- className={`fa ${(
|
|
|
|
|
- adminUsersContainer.state.sort === 'createdAt')
|
|
|
|
|
- && (adminUsersContainer.state.sortOrder === 'asc') ? 'fa-chevron-up' : 'fa-angle-up'}`}
|
|
|
|
|
- aria-hidden="true"
|
|
|
|
|
- onClick={() => adminUsersContainer.onClickSort('createdAt', true)}
|
|
|
|
|
- >
|
|
|
|
|
- </a>
|
|
|
|
|
- <a
|
|
|
|
|
- className={`fa ${(
|
|
|
|
|
- adminUsersContainer.state.sort === 'createdAt')
|
|
|
|
|
- && (adminUsersContainer.state.sortOrder === 'desc') ? 'fa-chevron-down' : 'fa-angle-down'}`}
|
|
|
|
|
- aria-hidden="true"
|
|
|
|
|
- onClick={() => adminUsersContainer.onClickSort('createdAt', false)}
|
|
|
|
|
- >
|
|
|
|
|
- </a>
|
|
|
|
|
- </Fragment>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <SortIcons
|
|
|
|
|
+ isSelected={adminUsersContainer.state.sort === 'createdAt'}
|
|
|
|
|
+ isAsc={isCurrentSortOrderAsc}
|
|
|
|
|
+ onClick={(sortOrder) => {
|
|
|
|
|
+ this.sortIconsClickedHandler('createdAt', sortOrder);
|
|
|
|
|
+ }}
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
|
<th width="150px">
|
|
<th width="150px">
|
|
@@ -223,26 +168,13 @@ class UserTable extends React.Component {
|
|
|
<div className="mr-3">
|
|
<div className="mr-3">
|
|
|
{t('Last_Login')}
|
|
{t('Last_Login')}
|
|
|
</div>
|
|
</div>
|
|
|
- <div className="d-flex flex-column text-center">
|
|
|
|
|
- <Fragment>
|
|
|
|
|
- <a
|
|
|
|
|
- className={`fa ${(
|
|
|
|
|
- adminUsersContainer.state.sort === 'lastLoginAt')
|
|
|
|
|
- && (adminUsersContainer.state.sortOrder === 'asc') ? 'fa-chevron-up' : 'fa-angle-up'}`}
|
|
|
|
|
- aria-hidden="true"
|
|
|
|
|
- onClick={() => adminUsersContainer.onClickSort('lastLoginAt', true)}
|
|
|
|
|
- >
|
|
|
|
|
- </a>
|
|
|
|
|
- <a
|
|
|
|
|
- className={`fa ${(
|
|
|
|
|
- adminUsersContainer.state.sort === 'lastLoginAt')
|
|
|
|
|
- && (adminUsersContainer.state.sortOrder === 'desc') ? 'fa-chevron-down' : 'fa-angle-down'}`}
|
|
|
|
|
- aria-hidden="true"
|
|
|
|
|
- onClick={() => adminUsersContainer.onClickSort('lastLoginAt', false)}
|
|
|
|
|
- >
|
|
|
|
|
- </a>
|
|
|
|
|
- </Fragment>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <SortIcons
|
|
|
|
|
+ isSelected={adminUsersContainer.state.sort === 'lastLoginAt'}
|
|
|
|
|
+ isAsc={isCurrentSortOrderAsc}
|
|
|
|
|
+ onClick={(sortOrder) => {
|
|
|
|
|
+ this.sortIconsClickedHandler('lastLoginAt', sortOrder);
|
|
|
|
|
+ }}
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
</th>
|
|
</th>
|
|
|
<th width="70px"></th>
|
|
<th width="70px"></th>
|
|
@@ -279,9 +211,6 @@ class UserTable extends React.Component {
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const UserTableWrapper = (props) => {
|
|
|
|
|
- return createSubscribedElement(UserTable, props, [AppContainer, AdminUsersContainer]);
|
|
|
|
|
-};
|
|
|
|
|
|
|
|
|
|
UserTable.propTypes = {
|
|
UserTable.propTypes = {
|
|
|
t: PropTypes.func.isRequired, // i18next
|
|
t: PropTypes.func.isRequired, // i18next
|
|
@@ -290,4 +219,8 @@ UserTable.propTypes = {
|
|
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+const UserTableWrapper = (props) => {
|
|
|
|
|
+ return createSubscribedElement(UserTable, props, [AppContainer, AdminUsersContainer]);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
export default withTranslation()(UserTableWrapper);
|
|
export default withTranslation()(UserTableWrapper);
|