diff --git a/frontend/src/pages/shared-libs/shared-libs.js b/frontend/src/pages/shared-libs/shared-libs.js
index a50d943a0a..d7ef6eee9c 100644
--- a/frontend/src/pages/shared-libs/shared-libs.js
+++ b/frontend/src/pages/shared-libs/shared-libs.js
@@ -1,15 +1,31 @@
import React, { Component } from 'react';
+import PropTypes from 'prop-types';
import moment from 'moment';
import { Link } from '@reach/router';
import { seafileAPI } from '../../utils/seafile-api';
import { Utils } from '../../utils/utils';
+import Repo from '../../models/repo';
import { gettext, siteRoot, loginUrl, isPro } from '../../utils/constants';
import Loading from '../../components/loading';
class Content extends 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);
+ }
+
render() {
- const {loading, errorMsg, items} = this.props.data;
+ const { loading, errorMsg, items, sortBy, sortOrder } = this.props;
if (loading) {
return ;
@@ -23,14 +39,19 @@ class Content extends Component {
);
+ // sort
+ const sortByName = sortBy == 'name';
+ const sortByTime = sortBy == 'time';
+ const sortIcon = sortOrder == 'asc' ? : ;
+
const desktopThead = (
{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")} |
@@ -41,9 +62,9 @@ class Content extends Component {
{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")} |
@@ -62,18 +83,20 @@ class Content extends Component {
}
}
-class TableBody extends Component {
+Content.propTypes = {
+ loading: PropTypes.bool.isRequired,
+ errorMsg: PropTypes.string.isRequired,
+ items: PropTypes.array.isRequired,
+ sortBy: PropTypes.string.isRequired,
+ sortOrder: PropTypes.string.isRequired,
+ sortItems: PropTypes.func.isRequired
+};
- constructor(props) {
- super(props);
- this.state = {
- items: this.props.items
- };
- }
+class TableBody extends Component {
render() {
- let listItems = this.state.items.map(function(item, index) {
+ let listItems = this.props.items.map(function(item, index) {
return ;
}, this);
@@ -83,6 +106,10 @@ class TableBody extends Component {
}
}
+TableBody.propTypes = {
+ items: PropTypes.array.isRequired
+};
+
class Item extends Component {
constructor(props) {
@@ -181,7 +208,7 @@ class Item extends Component {
: ''}
- {Utils.bytesToSize(data.size)} |
+ {data.size} |
{moment(data.last_modified).fromNow()} |
{data.owner_name} |
@@ -193,7 +220,7 @@ class Item extends Component {
{data.repo_name}
{data.owner_name}
- {Utils.bytesToSize(data.size)}
+ {data.size}
{moment(data.last_modified).fromNow()}
|
@@ -209,22 +236,31 @@ class Item extends Component {
}
}
+Item.propTypes = {
+ data: PropTypes.object.isRequired
+};
+
class SharedLibraries extends Component {
constructor(props) {
super(props);
this.state = {
loading: true,
errorMsg: '',
- items: []
+ items: [],
+ sortBy: 'name', // 'name' or 'time'
+ sortOrder: 'asc' // 'asc' or 'desc'
};
}
componentDidMount() {
seafileAPI.listRepos({type:'shared'}).then((res) => {
// res: {data: {...}, status: 200, statusText: "OK", headers: {…}, config: {…}, …}
+ let repoList = res.data.repos.map((item) => {
+ return new Repo(item);
+ });
this.setState({
loading: false,
- items: res.data.repos
+ items: Utils.sortRepos(repoList, this.state.sortBy, this.state.sortOrder)
});
}).catch((error) => {
if (error.response) {
@@ -250,6 +286,14 @@ class SharedLibraries extends Component {
});
}
+ sortItems = (sortBy, sortOrder) => {
+ this.setState({
+ sortBy: sortBy,
+ sortOrder: sortOrder,
+ items: Utils.sortRepos(this.state.items, sortBy, sortOrder)
+ });
+ }
+
render() {
return (
@@ -258,7 +302,14 @@ class SharedLibraries extends Component {
{gettext("Shared with me")}
-
+
|