@@ -4,89 +4,13 @@ import cs from 'classnames';
4
4
import React , { Component } from 'react' ;
5
5
import PropTypes from 'prop-types' ;
6
6
import pageResolver from './page-resolver' ;
7
- import SizePerPageDropDown from './size-per-page-dropdown' ;
8
- import PaginationList from './pagination-list' ;
7
+ import paginationHandler from './pagination-handler' ;
8
+ import { SizePerPageDropdownAdapter } from './size-per-page-dropdown-adapter' ;
9
+ import { PaginationListWithAdapter } from './pagination-list-adapter' ;
9
10
import PaginationTotal from './pagination-total' ;
10
11
import Const from './const' ;
11
12
12
13
class Pagination extends pageResolver ( Component ) {
13
- constructor ( props ) {
14
- super ( props ) ;
15
- this . closeDropDown = this . closeDropDown . bind ( this ) ;
16
- this . toggleDropDown = this . toggleDropDown . bind ( this ) ;
17
- this . handleChangePage = this . handleChangePage . bind ( this ) ;
18
- this . handleChangeSizePerPage = this . handleChangeSizePerPage . bind ( this ) ;
19
- this . state = this . initialState ( ) ;
20
- }
21
-
22
- componentWillReceiveProps ( nextProps ) {
23
- const { dataSize, currSizePerPage } = nextProps ;
24
- if ( currSizePerPage !== this . props . currSizePerPage || dataSize !== this . props . dataSize ) {
25
- const totalPages = this . calculateTotalPage ( currSizePerPage , dataSize ) ;
26
- const lastPage = this . calculateLastPage ( totalPages ) ;
27
- this . setState ( { totalPages, lastPage } ) ;
28
- }
29
- }
30
-
31
- toggleDropDown ( ) {
32
- const dropdownOpen = ! this . state . dropdownOpen ;
33
- this . setState ( ( ) => {
34
- return { dropdownOpen } ;
35
- } ) ;
36
- }
37
-
38
- closeDropDown ( ) {
39
- this . setState ( ( ) => {
40
- return { dropdownOpen : false } ;
41
- } ) ;
42
- }
43
-
44
- handleChangeSizePerPage ( sizePerPage ) {
45
- const { currSizePerPage, onSizePerPageChange } = this . props ;
46
- const selectedSize = typeof sizePerPage === 'string' ? parseInt ( sizePerPage , 10 ) : sizePerPage ;
47
- let { currPage } = this . props ;
48
- if ( selectedSize !== currSizePerPage ) {
49
- const newTotalPages = this . calculateTotalPage ( selectedSize ) ;
50
- const newLastPage = this . calculateLastPage ( newTotalPages ) ;
51
- if ( currPage > newLastPage ) currPage = newLastPage ;
52
- onSizePerPageChange ( selectedSize , currPage ) ;
53
- }
54
- this . closeDropDown ( ) ;
55
- }
56
-
57
- handleChangePage ( newPage ) {
58
- let page ;
59
- const {
60
- currPage,
61
- pageStartIndex,
62
- prePageText,
63
- nextPageText,
64
- lastPageText,
65
- firstPageText,
66
- onPageChange
67
- // keepSizePerPageState
68
- } = this . props ;
69
- const { lastPage } = this . state ;
70
-
71
- if ( newPage === prePageText ) {
72
- page = this . backToPrevPage ( ) ;
73
- } else if ( newPage === nextPageText ) {
74
- page = ( currPage + 1 ) > lastPage ? lastPage : currPage + 1 ;
75
- } else if ( newPage === lastPageText ) {
76
- page = lastPage ;
77
- } else if ( newPage === firstPageText ) {
78
- page = pageStartIndex ;
79
- } else {
80
- page = parseInt ( newPage , 10 ) ;
81
- }
82
-
83
- // if (keepSizePerPageState) { this.closeDropDown(); }
84
-
85
- if ( page !== currPage ) {
86
- onPageChange ( page ) ;
87
- }
88
- }
89
-
90
14
defaultTotal = ( from , to , size ) => (
91
15
< PaginationTotal
92
16
from = { from }
@@ -103,49 +27,26 @@ class Pagination extends pageResolver(Component) {
103
27
return this . defaultTotal ( from , to , size ) ;
104
28
} ;
105
29
106
- renderSizePerPageDropDown ( ) {
107
- const {
108
- sizePerPageList,
109
- currSizePerPage,
110
- hideSizePerPage,
111
- sizePerPageRenderer,
112
- sizePerPageOptionRenderer
113
- } = this . props ;
114
- const { dropdownOpen : open } = this . state ;
115
-
116
- if ( sizePerPageList . length > 1 && ! hideSizePerPage ) {
117
- if ( sizePerPageRenderer ) {
118
- return sizePerPageRenderer ( {
119
- options : this . calculateSizePerPageStatus ( ) ,
120
- currSizePerPage : `${ currSizePerPage } ` ,
121
- onSizePerPageChange : this . handleChangeSizePerPage
122
- } ) ;
123
- }
124
- return (
125
- < SizePerPageDropDown
126
- currSizePerPage = { `${ currSizePerPage } ` }
127
- options = { this . calculateSizePerPageStatus ( ) }
128
- optionRenderer = { sizePerPageOptionRenderer }
129
- onSizePerPageChange = { this . handleChangeSizePerPage }
130
- onClick = { this . toggleDropDown }
131
- onBlur = { this . closeDropDown }
132
- open = { open }
133
- />
134
- ) ;
135
- }
136
- return null ;
137
- }
138
-
139
30
render ( ) {
140
- const { totalPages, lastPage } = this . state ;
141
31
const {
142
32
showTotal,
143
33
dataSize,
144
34
pageListRenderer,
145
35
pageButtonRenderer,
146
36
paginationTotalRenderer,
147
- hidePageListOnlyOnePage
37
+ hidePageListOnlyOnePage,
38
+ totalPages,
39
+ lastPage,
40
+ onPageChange,
41
+ sizePerPageList,
42
+ currSizePerPage,
43
+ hideSizePerPage,
44
+ sizePerPageRenderer,
45
+ sizePerPageOptionRenderer,
46
+ onSizePerPageChange,
47
+ ...rest
148
48
} = this . props ;
49
+
149
50
const pages = this . calculatePageStatus ( this . calculatePages ( totalPages , lastPage ) , lastPage ) ;
150
51
const [ from , to ] = this . calculateFromTo ( ) ;
151
52
const pageListClass = cs (
@@ -156,7 +57,14 @@ class Pagination extends pageResolver(Component) {
156
57
return (
157
58
< div className = "row react-bootstrap-table-pagination" >
158
59
< div className = "col-md-6 col-xs-6 col-sm-6 col-lg-6" >
159
- { this . renderSizePerPageDropDown ( ) }
60
+ < SizePerPageDropdownAdapter
61
+ sizePerPageList = { sizePerPageList }
62
+ currSizePerPage = { currSizePerPage }
63
+ hideSizePerPage = { hideSizePerPage }
64
+ sizePerPageRenderer = { sizePerPageRenderer }
65
+ sizePerPageOptionRenderer = { sizePerPageOptionRenderer }
66
+ onSizePerPageChange = { onSizePerPageChange }
67
+ />
160
68
{
161
69
showTotal ?
162
70
this . setTotal (
@@ -170,13 +78,15 @@ class Pagination extends pageResolver(Component) {
170
78
{
171
79
pageListRenderer ? pageListRenderer ( {
172
80
pages,
173
- onPageChange : this . handleChangePage
81
+ onPageChange
174
82
} ) : (
175
83
< div className = { pageListClass } >
176
- < PaginationList
177
- pages = { pages }
84
+ < PaginationListWithAdapter
85
+ { ...rest }
86
+ lastPage = { lastPage }
87
+ totalPages = { totalPages }
178
88
pageButtonRenderer = { pageButtonRenderer }
179
- onPageChange = { this . handleChangePage }
89
+ onPageChange = { onPageChange }
180
90
/>
181
91
</ div >
182
92
)
@@ -239,4 +149,4 @@ Pagination.defaultProps = {
239
149
hidePageListOnlyOnePage : Const . HIDE_PAGE_LIST_ONLY_ONE_PAGE
240
150
} ;
241
151
242
- export default Pagination ;
152
+ export default paginationHandler ( Pagination ) ;
0 commit comments