diff --git a/frontend/src/components/shared-repo-list-view/shared-repo-list-view.js b/frontend/src/components/shared-repo-list-view/shared-repo-list-view.js
index 63719117da..26d60715b7 100644
--- a/frontend/src/components/shared-repo-list-view/shared-repo-list-view.js
+++ b/frontend/src/components/shared-repo-list-view/shared-repo-list-view.js
@@ -7,6 +7,9 @@ const propTypes = {
libraryType: PropTypes.string,
currentGroup: PropTypes.object,
isShowTableThread: PropTypes.bool,
+ sortBy: PropTypes.string,
+ sortOrder: PropTypes.string,
+ sortItems: PropTypes.func,
repoList: PropTypes.array.isRequired,
onItemUnshare: PropTypes.func.isRequired,
onItemDelete: PropTypes.func.isRequired,
@@ -22,6 +25,28 @@ class SharedRepoListView extends React.Component {
};
}
+ sortByName = (e) => {
+ e.preventDefault();
+ const sortBy = 'name';
+ const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';
+ this.props.sortItems(sortBy, sortOrder);
+ }
+
+ sortByTime = (e) => {
+ e.preventDefault();
+ const sortBy = 'time';
+ const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';
+ this.props.sortItems(sortBy, sortOrder);
+ }
+
+ getSortMetaData = () => {
+ return {
+ sortByName: this.props.sortBy == 'name',
+ sortByTime: this.props.sortBy == 'time',
+ sortIcon: this.props.sortOrder == 'asc' ? :
+ };
+ }
+
onFreezedItem = () => {
this.setState({
isItemFreezed: !this.state.isItemFreezed,
@@ -52,19 +77,18 @@ class SharedRepoListView extends React.Component {
renderPCUI = () => {
let isShowTableThread = this.props.isShowTableThread !== undefined ? this.props.isShowTableThread : true;
+
+ const { sortByName, sortByTime, sortIcon } = this.getSortMetaData();
+
return (
{gettext("Library Type")} |
- {gettext("Name")}
- {/*TODO: sort*/}
- |
+ {gettext('Name')} {sortByName && sortIcon} |
{gettext("Actions")} |
{gettext("Size")} |
- {gettext("Last Update")}
- {/*TODO: sort*/}
- |
+ {gettext('Last Update')} {sortByTime && sortIcon} |
{gettext("Owner")} |
@@ -77,15 +101,18 @@ class SharedRepoListView extends React.Component {
renderMobileUI = () => {
let isShowTableThread = this.props.isShowTableThread !== undefined ? this.props.isShowTableThread : true;
+
+ const { sortByName, sortByTime, sortIcon } = this.getSortMetaData();
+
return (
{gettext("Library Type")} |
- {gettext("Sort:")} {/* TODO: sort */}
- {gettext("name")}
- {gettext("last update")}
+ {gettext("Sort:")}
+ {gettext("name")} {sortByName && sortIcon}
+ {gettext("last update")} {sortByTime && sortIcon}
|
{gettext("Actions")} |
diff --git a/frontend/src/pages/groups/group-view.js b/frontend/src/pages/groups/group-view.js
index 8677ea3f29..fb8b6671e1 100644
--- a/frontend/src/pages/groups/group-view.js
+++ b/frontend/src/pages/groups/group-view.js
@@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
import { gettext, siteRoot, username, loginUrl } from '../../utils/constants';
import { Link } from '@reach/router';
import { seafileAPI } from '../../utils/seafile-api';
+import { Utils } from '../../utils/utils';
import Loading from '../../components/loading';
import ModalPortal from '../../components/modal-portal';
import Group from '../../models/group';
@@ -42,6 +43,8 @@ class GroupView extends React.Component {
currentRepo: null,
isStaff: false,
isOwner: false,
+ sortBy: 'name', // 'name' or 'time'
+ sortOrder: 'asc', // 'asc' or 'desc'
repoList: [],
libraryType: 'group',
isCreateRepoDialogShow: false,
@@ -116,7 +119,7 @@ class GroupView extends React.Component {
});
this.setState({
isLoading: false,
- repoList: repoList
+ repoList: Utils.sortRepos(repoList, this.state.sortBy, this.state.sortOrder)
});
}).catch((error) => {
if (error.response) {
@@ -313,6 +316,14 @@ class GroupView extends React.Component {
this.setState({isShowDetails: false});
}
+ sortItems = (sortBy, sortOrder) => {
+ this.setState({
+ sortBy: sortBy,
+ sortOrder: sortOrder,
+ repoList: Utils.sortRepos(this.state.repoList, sortBy, sortOrder)
+ });
+ }
+
render() {
let { errMessage, emptyTip, currentGroup } = this.state;
let isShowSettingIcon = !(currentGroup && currentGroup.parent_group_id !== 0 && currentGroup.admins.indexOf(username) === -1);
@@ -418,6 +429,9 @@ class GroupView extends React.Component {
{
if (error.response) {
@@ -144,6 +147,14 @@ class PublicSharedView extends React.Component {
this.setState({isSelectRepoDialpgShow: !this.state.isSelectRepoDialpgShow});
}
+ sortItems = (sortBy, sortOrder) => {
+ this.setState({
+ sortBy: sortBy,
+ sortOrder: sortOrder,
+ repoList: Utils.sortRepos(this.state.repoList, sortBy, sortOrder)
+ });
+ }
+
render() {
let errMessage = this.state.errMessage;
let emptyTip = (
@@ -184,6 +195,9 @@ class PublicSharedView extends React.Component {