diff --git a/frontend/src/pages/sys-admin/links/share-links.js b/frontend/src/pages/sys-admin/links/share-links.js
index 30f110ada9..1289c82598 100644
--- a/frontend/src/pages/sys-admin/links/share-links.js
+++ b/frontend/src/pages/sys-admin/links/share-links.js
@@ -1,4 +1,5 @@
import React, { Component, Fragment } from 'react';
+import { navigate } from '@reach/router';
import { seafileAPI } from '../../../utils/seafile-api';
import { gettext, siteRoot } from '../../../utils/constants';
import toaster from '../../../components/toast';
@@ -25,8 +26,22 @@ class Content extends Component {
this.props.getShareLinksByPage(this.props.currentPage + 1);
}
+ sortByTime = (e) => {
+ e.preventDefault();
+ this.props.sortItems('ctime');
+ }
+
+ sortByCount = (e) => {
+ e.preventDefault();
+ this.props.sortItems('view_cnt');
+ }
+
render() {
- const { loading, errorMsg, items, perPage, currentPage , hasNextPage }= this.props;
+ const {
+ loading, errorMsg, items,
+ perPage, currentPage, hasNextPage,
+ sortBy, sortOrder
+ } = this.props;
if (loading) {
return
{gettext('Name')} | {gettext('Token')} | {gettext('Owner')} | -{gettext('Created At')} | -{gettext('Count')} | ++ {gettext('Created At')} {sortBy == 'ctime' ? sortIcon : initialSortIcon} + | ++ {gettext('Count')} {sortBy == 'view_cnt' ? sortIcon : initialSortIcon} + | {gettext('Expiration')} | {/*Operations*/} | @@ -151,24 +173,28 @@ class ShareLinks extends Component { perPage: 25, currentPage: 1, hasNextPage: false, + sortBy: '', + sortOrder: 'asc' }; this.initPage = 1; } componentDidMount () { let urlParams = (new URL(window.location)).searchParams; - const { currentPage, perPage } = this.state; + const { currentPage, perPage, sortBy, sortOrder } = this.state; this.setState({ perPage: parseInt(urlParams.get('per_page') || perPage), - currentPage: parseInt(urlParams.get('page') || currentPage) + currentPage: parseInt(urlParams.get('page') || currentPage), + sortBy: urlParams.get('order_by') || sortBy, + sortOrder: urlParams.get('direction') || sortOrder }, () => { this.getShareLinksByPage(this.state.currentPage); }); } getShareLinksByPage = (page) => { - let { perPage } = this.state; - seafileAPI.sysAdminListAllShareLinks(page, perPage).then((res) => { + const { perPage, sortBy, sortOrder } = this.state; + seafileAPI.sysAdminListShareLinks(page, perPage, sortBy, sortOrder).then((res) => { this.setState({ shareLinkList: res.data.share_link_list, loading: false, @@ -183,6 +209,24 @@ class ShareLinks extends Component { }); } + sortItems = (sortBy) => { + this.setState({ + currentPage: 1, + sortBy: sortBy, + sortOrder: this.state.sortOrder == 'asc' ? 'desc' : 'asc' + }, () => { + let url = new URL(location.href); + let searchParams = new URLSearchParams(url.search); + const { currentPage, sortBy, sortOrder } = this.state; + searchParams.set('page', currentPage); + searchParams.set('order_by', sortBy); + searchParams.set('direction', sortOrder); + url.search = searchParams.toString(); + navigate(url.toString()); + this.getShareLinksByPage(currentPage); + }); + } + deleteShareLink = (linkToken) => { seafileAPI.sysAdminDeleteShareLink(linkToken).then(res => { let newShareLinkList = this.state.shareLinkList.filter(item => @@ -219,6 +263,9 @@ class ShareLinks extends Component { hasNextPage={hasNextPage} getShareLinksByPage={this.getShareLinksByPage} resetPerPage={this.resetPerPage} + sortBy={this.state.sortBy} + sortOrder={this.state.sortOrder} + sortItems={this.sortItems} deleteShareLink={this.deleteShareLink} />
---|