1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-12 13:24:52 +00:00

[system admin] improved pagination for all (#4404)

* [system admin] improved pagination for all

* [paginator] show 'current page'

* redesigned paginator

* [pagination] cleanup
This commit is contained in:
llj
2020-01-13 12:07:24 +08:00
committed by Daniel Pan
parent fc176627e6
commit a5ad32d3c4
26 changed files with 284 additions and 99 deletions

View File

@@ -1,57 +1,82 @@
import React, { Component, Fragment } from 'react'; import React, { Component } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { navigate } from '@reach/router';
import { gettext } from '../utils/constants'; import { gettext } from '../utils/constants';
import '../css/pagination.css';
const propTypes = { const propTypes = {
currentPage: PropTypes.number.isRequired,
gotoPreviousPage: PropTypes.func.isRequired, gotoPreviousPage: PropTypes.func.isRequired,
gotoNextPage: PropTypes.func.isRequired, gotoNextPage: PropTypes.func.isRequired,
currentPage: PropTypes.number.isRequired,
hasNextPage: PropTypes.bool.isRequired, hasNextPage: PropTypes.bool.isRequired,
canResetPerPage: PropTypes.bool.isRequired, resetPerPage: PropTypes.func.isRequired,
resetPerPage: PropTypes.func, curPerPage: PropTypes.number.isRequired
curPerPage: PropTypes.number,
}; };
class Paginator extends Component { class Paginator extends Component {
resetPerPage = (perPage) => { resetPerPage = (e) => {
const perPage = e.target.value;
this.updateURL(1, perPage);
this.props.resetPerPage(perPage); this.props.resetPerPage(perPage);
} }
goToPrevious = (e) => { goToPrevious = () => {
e.preventDefault(); const { currentPage, curPerPage } = this.props;
this.updateURL(currentPage - 1, curPerPage);
this.props.gotoPreviousPage(); this.props.gotoPreviousPage();
} }
goToNext = (e) => { goToNext = () => {
e.preventDefault(); const { currentPage, curPerPage } = this.props;
this.updateURL(currentPage + 1, curPerPage);
this.props.gotoNextPage(); this.props.gotoNextPage();
} }
updateURL = (page, perPage) => {
let url = new URL(location.href);
let searchParams = new URLSearchParams(url.search);
searchParams.set('page', page);
searchParams.set('per_page', perPage);
url.search = searchParams.toString();
navigate(url.toString());
}
getPerPageText = (perPage) => {
return gettext('{number_placeholder} / Page').replace('{number_placeholder}', perPage);
}
render() { render() {
let { curPerPage } = this.props; const { curPerPage, currentPage } = this.props;
return ( return (
<Fragment> <div className="my-6 paginator d-flex align-items-center justify-content-center">
<div className="my-6 text-center"> <button
{this.props.currentPage != 1 && className="btn btn-secondary"
<a href="#" onClick={this.goToPrevious}>{gettext('Previous')}</a> disabled={currentPage == 1}
} onClick={this.goToPrevious}
{this.props.hasNextPage && >
<a href="#" onClick={this.goToNext} className="ml-4">{gettext('Next')}</a> <span className="fas fa-chevron-left"></span>
} </button>
{(this.props.currentPage != 1 || this.props.hasNextPage) && <span className="btn btn-primary mx-4">{currentPage}</span>
<span className="d-inline-block mx-2">|</span> <button
} className="btn btn-secondary"
{this.props.canResetPerPage && disabled={!this.props.hasNextPage}
<Fragment> onClick={this.goToNext}
{gettext('Per page:')} >
<span className={`${curPerPage === 25 ? '' : 'a-simulate '} mx-1`} onClick={() => {return this.resetPerPage(25);}}>25</span> <span className="fas fa-chevron-right"></span>
<span className={`${curPerPage === 50 ? '' : 'a-simulate '} mr-1`} onClick={() => {return this.resetPerPage(50);}}>50</span> </button>
<span className={`${curPerPage === 100 ? '' : 'a-simulate '}`} onClick={() => {return this.resetPerPage(100);}}>100</span>
</Fragment> <select
} className="form-control d-inline-block w-auto ml-6"
value={curPerPage}
onChange={this.resetPerPage}
>
<option value="25">{this.getPerPageText(25)}</option>
<option value="50">{this.getPerPageText(50)}</option>
<option value="100">{this.getPerPageText(100)}</option>
</select>
</div> </div>
</Fragment>
); );
} }
} }

View File

@@ -0,0 +1,3 @@
.paginator .btn {
min-width: 2.375rem;
}

View File

@@ -64,7 +64,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={perPage} curPerPage={perPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />
@@ -102,7 +101,7 @@ class AdminLoginLogs extends Component {
loading: true, loading: true,
errorMsg: '', errorMsg: '',
logList: [], logList: [],
perPage: 100, perPage: 25,
currentPage: 1, currentPage: 1,
hasNextPage: false, hasNextPage: false,
}; };
@@ -110,7 +109,14 @@ class AdminLoginLogs extends Component {
} }
componentDidMount () { componentDidMount () {
this.getLogsByPage(this.initPage); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getLogsByPage(this.state.currentPage);
});
} }
getLogsByPage = (page) => { getLogsByPage = (page) => {

View File

@@ -63,7 +63,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={perPage} curPerPage={perPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />
@@ -199,7 +198,7 @@ class AdminOperationLogs extends Component {
loading: true, loading: true,
errorMsg: '', errorMsg: '',
logList: [], logList: [],
perPage: 100, perPage: 25,
currentPage: 1, currentPage: 1,
hasNextPage: false, hasNextPage: false,
}; };
@@ -207,7 +206,14 @@ class AdminOperationLogs extends Component {
} }
componentDidMount () { componentDidMount () {
this.getLogsByPage(this.initPage); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getLogsByPage(this.state.currentPage);
});
} }
getLogsByPage = (page) => { getLogsByPage = (page) => {

View File

@@ -24,7 +24,7 @@ class Content extends Component {
} }
render() { render() {
const { loading, errorMsg, items, pageInfo } = this.props; const { loading, errorMsg, items, pageInfo, curPerPage } = this.props;
if (loading) { if (loading) {
return <Loading />; return <Loading />;
} else if (errorMsg) { } else if (errorMsg) {
@@ -59,7 +59,8 @@ class Content extends Component {
gotoNextPage={this.getNextPageDevicesList} gotoNextPage={this.getNextPageDevicesList}
currentPage={pageInfo.current_page} currentPage={pageInfo.current_page}
hasNextPage={pageInfo.has_next_page} hasNextPage={pageInfo.has_next_page}
canResetPerPage={false} curPerPage={curPerPage}
resetPerPage={this.props.resetPerPage}
/> />
</Fragment> </Fragment>
); );
@@ -155,12 +156,19 @@ class DevicesByPlatform extends Component {
errorMsg: '', errorMsg: '',
devicesData: {}, devicesData: {},
pageInfo: {}, pageInfo: {},
perPage: 50 perPage: 25
}; };
} }
componentDidMount () { componentDidMount () {
this.getDevicesListByPage(1); let urlParams = (new URL(window.location)).searchParams;
const { currentPage = 1, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getDevicesListByPage(this.state.currentPage);
});
} }
getDevicesListByPage = (page) => { getDevicesListByPage = (page) => {
@@ -180,14 +188,24 @@ class DevicesByPlatform extends Component {
}); });
} }
resetPerPage = (perPage) => {
this.setState({
perPage: perPage
}, () => {
this.getDevicesListByPage(1);
});
}
render() { render() {
return ( return (
<div className="cur-view-content"> <div className="cur-view-content">
<Content <Content
getDevicesListByPage={this.getDevicesListByPage}
loading={this.state.loading} loading={this.state.loading}
errorMsg={this.state.errorMsg} errorMsg={this.state.errorMsg}
items={this.state.devicesData} items={this.state.devicesData}
getDevicesListByPage={this.getDevicesListByPage}
curPerPage={this.state.perPage}
resetPerPage={this.resetPerPage}
pageInfo={this.state.pageInfo} pageInfo={this.state.pageInfo}
/> />
</div> </div>

View File

@@ -37,7 +37,7 @@ class Content extends Component {
} }
render() { render() {
const { loading, errorMsg, items, pageInfo } = this.props; const { loading, errorMsg, items, pageInfo, curPerPage } = this.props;
if (loading) { if (loading) {
return <Loading />; return <Loading />;
} else if (errorMsg) { } else if (errorMsg) {
@@ -79,7 +79,8 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={pageInfo.current_page} currentPage={pageInfo.current_page}
hasNextPage={pageInfo.has_next_page} hasNextPage={pageInfo.has_next_page}
canResetPerPage={false} curPerPage={curPerPage}
resetPerPage={this.props.resetPerPage}
/> />
} }
</Fragment> </Fragment>

View File

@@ -19,13 +19,20 @@ class Groups extends Component {
errorMsg: '', errorMsg: '',
groupList: [], groupList: [],
pageInfo: {}, pageInfo: {},
perPage: 100, perPage: 25,
isCreateGroupDialogOpen: false isCreateGroupDialogOpen: false
}; };
} }
componentDidMount () { componentDidMount () {
this.getGroupListByPage(1); let urlParams = (new URL(window.location)).searchParams;
const { currentPage = 1, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getGroupListByPage(this.state.currentPage);
});
} }
toggleCreateGroupDialog = () => { toggleCreateGroupDialog = () => {
@@ -47,6 +54,14 @@ class Groups extends Component {
}); });
} }
resetPerPage = (perPage) => {
this.setState({
perPage: perPage
}, () => {
this.getGroupListByPage(1);
});
}
createGroup = (groupName, OnwerEmail) => { createGroup = (groupName, OnwerEmail) => {
seafileAPI.sysAdminCreateNewGroup(groupName, OnwerEmail).then(res => { seafileAPI.sysAdminCreateNewGroup(groupName, OnwerEmail).then(res => {
let newGroupList = this.state.groupList; let newGroupList = this.state.groupList;
@@ -130,6 +145,8 @@ class Groups extends Component {
deleteGroup={this.deleteGroup} deleteGroup={this.deleteGroup}
transferGroup={this.transferGroup} transferGroup={this.transferGroup}
getListByPage={this.getGroupListByPage} getListByPage={this.getGroupListByPage}
resetPerPage={this.resetPerPage}
curPerPage={this.state.perPage}
/> />
</div> </div>
</div> </div>

View File

@@ -83,7 +83,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={perPage} curPerPage={perPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />
@@ -231,7 +230,7 @@ class InstitutionUsers extends Component {
errorMsg: '', errorMsg: '',
institutionName: '', institutionName: '',
userList: [], userList: [],
perPage: 100, perPage: 25,
currentPage: 1, currentPage: 1,
hasNextPage: false, hasNextPage: false,
isAddUserDialogOpen: false isAddUserDialogOpen: false
@@ -245,7 +244,15 @@ class InstitutionUsers extends Component {
institutionName: res.data.name institutionName: res.data.name
}); });
}); });
this.getInstitutionUsersByPage(this.initPage);
let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getInstitutionUsersByPage(this.state.currentPage);
});
} }
getInstitutionUsersByPage = (page) => { getInstitutionUsersByPage = (page) => {

View File

@@ -64,7 +64,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={perPage} curPerPage={perPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />
@@ -142,7 +141,7 @@ class Institutions extends Component {
loading: true, loading: true,
errorMsg: '', errorMsg: '',
institutionList: [], institutionList: [],
perPage: 100, perPage: 25,
currentPage: 1, currentPage: 1,
hasNextPage: false, hasNextPage: false,
isAddInstitutionDialogOpen: false, isAddInstitutionDialogOpen: false,
@@ -151,7 +150,14 @@ class Institutions extends Component {
} }
componentDidMount () { componentDidMount () {
this.getInstitutionsByPage(this.initPage); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getInstitutionsByPage(this.state.currentPage);
});
} }
getInstitutionsByPage = (page) => { getInstitutionsByPage = (page) => {

View File

@@ -82,7 +82,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={curPerPage} curPerPage={curPerPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />
@@ -232,7 +231,14 @@ class Invitations extends Component {
} }
componentDidMount () { componentDidMount () {
this.getItemsByPage(1); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getItemsByPage(this.state.currentPage);
});
} }
getItemsByPage = (page) => { getItemsByPage = (page) => {

View File

@@ -67,7 +67,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={perPage} curPerPage={perPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />
@@ -130,7 +129,7 @@ class ShareLinks extends Component {
loading: true, loading: true,
errorMsg: '', errorMsg: '',
shareLinkList: [], shareLinkList: [],
perPage: 100, perPage: 25,
currentPage: 1, currentPage: 1,
hasNextPage: false, hasNextPage: false,
}; };
@@ -138,7 +137,14 @@ class ShareLinks extends Component {
} }
componentDidMount () { componentDidMount () {
this.getShareLinksByPage(this.initPage); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getShareLinksByPage(this.state.currentPage);
});
} }
getShareLinksByPage = (page) => { getShareLinksByPage = (page) => {

View File

@@ -68,7 +68,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={perPage} curPerPage={perPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />
@@ -133,7 +132,7 @@ class UploadLinks extends Component {
loading: true, loading: true,
errorMsg: '', errorMsg: '',
uploadLinkList: [], uploadLinkList: [],
perPage: 100, perPage: 25,
currentPage: 1, currentPage: 1,
hasNextPage: false, hasNextPage: false,
}; };
@@ -141,7 +140,14 @@ class UploadLinks extends Component {
} }
componentDidMount() { componentDidMount() {
this.getUploadLinksByPage(this.initPage); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getUploadLinksByPage(this.state.currentPage);
});
} }
getUploadLinksByPage = (page) => { getUploadLinksByPage = (page) => {

View File

@@ -69,7 +69,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={perPage} curPerPage={perPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />
@@ -124,7 +123,7 @@ class FileAccessLogs extends Component {
loading: true, loading: true,
errorMsg: '', errorMsg: '',
logList: [], logList: [],
perPage: 100, perPage: 25,
currentPage: 1, currentPage: 1,
hasNextPage: false, hasNextPage: false,
isExportExcelDialogOpen: false, isExportExcelDialogOpen: false,
@@ -137,7 +136,14 @@ class FileAccessLogs extends Component {
} }
componentDidMount () { componentDidMount () {
this.getLogsByPage(this.initPage); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getLogsByPage(this.state.currentPage);
});
} }
getLogsByPage = (page) => { getLogsByPage = (page) => {

View File

@@ -67,7 +67,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={perPage} curPerPage={perPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />
@@ -152,7 +151,7 @@ class FileUpdateLogs extends Component {
loading: true, loading: true,
errorMsg: '', errorMsg: '',
logList: [], logList: [],
perPage: 100, perPage: 25,
currentPage: 1, currentPage: 1,
hasNextPage: false, hasNextPage: false,
isExportExcelDialogOpen: false, isExportExcelDialogOpen: false,
@@ -165,7 +164,14 @@ class FileUpdateLogs extends Component {
} }
componentDidMount () { componentDidMount () {
this.getLogsByPage(this.initPage); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getLogsByPage(this.state.currentPage);
});
} }
getLogsByPage = (page) => { getLogsByPage = (page) => {

View File

@@ -67,7 +67,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={perPage} curPerPage={perPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />
@@ -120,7 +119,7 @@ class LoginLogs extends Component {
loading: true, loading: true,
errorMsg: '', errorMsg: '',
logList: [], logList: [],
perPage: 100, perPage: 25,
currentPage: 1, currentPage: 1,
hasNextPage: false, hasNextPage: false,
isExportExcelDialogOpen: false, isExportExcelDialogOpen: false,
@@ -133,7 +132,14 @@ class LoginLogs extends Component {
} }
componentDidMount () { componentDidMount () {
this.getLogsByPage(this.initPage); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getLogsByPage(this.state.currentPage);
});
} }
getLogsByPage = (page) => { getLogsByPage = (page) => {

View File

@@ -47,9 +47,9 @@ class Content extends Component {
<th width="10%">{gettext('Share From')}</th> <th width="10%">{gettext('Share From')}</th>
<th width="10%">{gettext('Share To')}</th> <th width="10%">{gettext('Share To')}</th>
<th width="20%">{gettext('Actions')}</th> <th width="20%">{gettext('Actions')}</th>
<th width="10%">{gettext('Permission')}</th> <th width="13%">{gettext('Permission')}</th>
<th width="20%">{gettext('Library')}</th> <th width="20%">{gettext('Library')}</th>
<th width="15%">{gettext('Folder')}</th> <th width="12%">{gettext('Folder')}</th>
<th width="15%">{gettext('Date')}</th> <th width="15%">{gettext('Date')}</th>
</tr> </tr>
</thead> </thead>
@@ -69,7 +69,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={perPage} curPerPage={perPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />
@@ -137,7 +136,7 @@ class SharePermissionLogs extends Component {
loading: true, loading: true,
errorMsg: '', errorMsg: '',
logList: [], logList: [],
perPage: 100, perPage: 25,
currentPage: 1, currentPage: 1,
hasNextPage: false, hasNextPage: false,
isExportExcelDialogOpen: false, isExportExcelDialogOpen: false,
@@ -150,7 +149,14 @@ class SharePermissionLogs extends Component {
} }
componentDidMount () { componentDidMount () {
this.getLogsByPage(this.initPage); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getLogsByPage(this.state.currentPage);
});
} }
getLogsByPage = (page) => { getLogsByPage = (page) => {

View File

@@ -67,7 +67,6 @@ class Content extends Component {
currentPage={this.props.currentPage} currentPage={this.props.currentPage}
hasNextPage={this.props.hasNextPage} hasNextPage={this.props.hasNextPage}
curPerPage={this.props.curPerPage} curPerPage={this.props.curPerPage}
canResetPerPage={true}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
gotoPreviousPage={this.getPreviousPage} gotoPreviousPage={this.getPreviousPage}
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}

View File

@@ -27,7 +27,14 @@ class Orgs extends Component {
} }
componentDidMount() { componentDidMount() {
this.getItemsByPage(1); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getItemsByPage(this.state.currentPage);
});
} }
getItemsByPage = (page) => { getItemsByPage = (page) => {

View File

@@ -20,13 +20,20 @@ class AllRepos extends Component {
errorMsg: '', errorMsg: '',
repos: [], repos: [],
pageInfo: {}, pageInfo: {},
perPage: 100, perPage: 25,
isCreateRepoDialogOpen: false isCreateRepoDialogOpen: false
}; };
} }
componentDidMount () { componentDidMount () {
this.getReposByPage(1); let urlParams = (new URL(window.location)).searchParams;
const { currentPage = 1, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getReposByPage(this.state.currentPage);
});
} }
toggleCreateRepoDialog = () => { toggleCreateRepoDialog = () => {

View File

@@ -87,7 +87,6 @@ class Content extends Component {
gotoNextPage={this.getNextPageList} gotoNextPage={this.getNextPageList}
currentPage={pageInfo.current_page} currentPage={pageInfo.current_page}
hasNextPage={pageInfo.has_next_page} hasNextPage={pageInfo.has_next_page}
canResetPerPage={true}
curPerPage={curPerPage} curPerPage={curPerPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />

View File

@@ -44,7 +44,7 @@ class Content extends Component {
} }
render() { render() {
const { loading, errorMsg, items, pageInfo } = this.props; const { loading, errorMsg, items, pageInfo, curPerPage } = this.props;
if (loading) { if (loading) {
return <Loading />; return <Loading />;
} else if (errorMsg) { } else if (errorMsg) {
@@ -88,7 +88,8 @@ class Content extends Component {
gotoNextPage={this.getNextPageList} gotoNextPage={this.getNextPageList}
currentPage={pageInfo.current_page} currentPage={pageInfo.current_page}
hasNextPage={pageInfo.has_next_page} hasNextPage={pageInfo.has_next_page}
canResetPerPage={false} curPerPage={curPerPage}
resetPerPage={this.props.resetPerPage}
/> />
} }
</Fragment> </Fragment>
@@ -270,13 +271,20 @@ class TrashRepos extends Component {
errorMsg: '', errorMsg: '',
repos: [], repos: [],
pageInfo: {}, pageInfo: {},
perPage: 100, perPage: 25,
isCleanTrashDialogOpen: false isCleanTrashDialogOpen: false
}; };
} }
componentDidMount () { componentDidMount () {
this.getReposByPage(1); let urlParams = (new URL(window.location)).searchParams;
const { currentPage = 1, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getReposByPage(this.state.currentPage);
});
} }
toggleCleanTrashDialog = () => { toggleCleanTrashDialog = () => {
@@ -299,6 +307,14 @@ class TrashRepos extends Component {
}); });
} }
resetPerPage = (perPage) => {
this.setState({
perPage: perPage
}, () => {
this.getReposByPage(1);
});
}
onDeleteRepo = (targetRepo) => { onDeleteRepo = (targetRepo) => {
let repos = this.state.repos.filter(repo => { let repos = this.state.repos.filter(repo => {
return repo.id != targetRepo.id; return repo.id != targetRepo.id;
@@ -374,6 +390,8 @@ class TrashRepos extends Component {
onDeleteRepo={this.onDeleteRepo} onDeleteRepo={this.onDeleteRepo}
onRestoreRepo={this.onRestoreRepo} onRestoreRepo={this.onRestoreRepo}
getListByPage={this.getReposByPage} getListByPage={this.getReposByPage}
resetPerPage={this.resetPerPage}
curPerPage={this.state.perPage}
/> />
</div> </div>
</div> </div>

View File

@@ -16,7 +16,7 @@ class TrafficOrganizationsTable extends React.Component {
super(props); super(props);
this.state = { this.state = {
userTrafficList: [], userTrafficList: [],
perPage: 100, perPage: 25,
currentPage: 1, currentPage: 1,
hasNextPage: false, hasNextPage: false,
month: moment().format('YYYYMM'), month: moment().format('YYYYMM'),
@@ -29,15 +29,22 @@ class TrafficOrganizationsTable extends React.Component {
} }
componentDidMount() { componentDidMount() {
this.onGenerateReports(this.initMonth, this.initPage); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.onGenerateReports(this.initMonth, this.state.currentPage);
});
} }
getPreviousPage = () => { getPreviousPage = () => {
this.onGenerateReports(this.state.currentPage - 1); this.onGenerateReports(this.state.month, this.state.currentPage - 1);
} }
getNextPage = () => { getNextPage = () => {
this.onGenerateReports(this.state.currentPage + 1); this.onGenerateReports(this.state.month, this.state.currentPage + 1);
} }
handleChange = (e) => { handleChange = (e) => {
@@ -128,7 +135,6 @@ class TrafficOrganizationsTable extends React.Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={perPage} curPerPage={perPage}
resetPerPage={this.resetPerPage} resetPerPage={this.resetPerPage}
/> />

View File

@@ -17,7 +17,7 @@ class TrafficOrganizationsTable extends React.Component {
this.state = { this.state = {
userTrafficList: [], userTrafficList: [],
hasNextPage: false, hasNextPage: false,
perPage: 100, perPage: 25,
currentPage: 1, currentPage: 1,
month: moment().format('YYYYMM'), month: moment().format('YYYYMM'),
isLoading: false, isLoading: false,
@@ -29,15 +29,22 @@ class TrafficOrganizationsTable extends React.Component {
} }
componentDidMount() { componentDidMount() {
this.onGenerateReports(this.initMonth, this.initPage); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.onGenerateReports(this.initMonth, this.state.currentPage);
});
} }
getPreviousPage = () => { getPreviousPage = () => {
this.onGenerateReports(this.state.currentPage - 1); this.onGenerateReports(this.state.month, this.state.currentPage - 1);
} }
getNextPage = () => { getNextPage = () => {
this.onGenerateReports(this.state.currentPage + 1); this.onGenerateReports(this.state.month, this.state.currentPage + 1);
} }
handleChange = (e) => { handleChange = (e) => {
@@ -131,7 +138,6 @@ class TrafficOrganizationsTable extends React.Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={perPage} curPerPage={perPage}
resetPerPage={this.resetPerPage} resetPerPage={this.resetPerPage}
/> />

View File

@@ -60,7 +60,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={curPerPage} curPerPage={curPerPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />
@@ -112,7 +111,14 @@ class Users extends Component {
} }
componentDidMount () { componentDidMount () {
this.getUsersListByPage(1); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getUsersListByPage(this.state.currentPage);
});
} }
getUsersListByPage = (page) => { getUsersListByPage = (page) => {

View File

@@ -125,7 +125,6 @@ class Content extends Component {
gotoNextPage={this.getNextPage} gotoNextPage={this.getNextPage}
currentPage={currentPage} currentPage={currentPage}
hasNextPage={hasNextPage} hasNextPage={hasNextPage}
canResetPerPage={true}
curPerPage={curPerPage} curPerPage={curPerPage}
resetPerPage={this.props.resetPerPage} resetPerPage={this.props.resetPerPage}
/> />

View File

@@ -45,7 +45,14 @@ class Users extends Component {
if (this.props.isAdmin) { // 'Admin' page if (this.props.isAdmin) { // 'Admin' page
this.getUserList(); // no pagination this.getUserList(); // no pagination
} else { } else {
this.getUsersListByPage(1); let urlParams = (new URL(window.location)).searchParams;
const { currentPage, perPage } = this.state;
this.setState({
perPage: parseInt(urlParams.get('per_page') || perPage),
currentPage: parseInt(urlParams.get('page') || currentPage)
}, () => {
this.getUsersListByPage(this.state.currentPage);
});
} }
} }