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 ( - + - + @@ -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("Name")} - {/*TODO: sort*/} - {gettext('Name')} {sortByName && sortIcon} {gettext("Actions")} {gettext("Size")}{gettext("Last Update")} - {/*TODO: sort*/} - {gettext('Last Update')} {sortByTime && sortIcon} {gettext("Owner")}
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 {
{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")}