Skip to content

Commit 214de0d

Browse files
authored
Merge pull request erikras#1314 from sslotsky/violet-paginator
feat(violet-paginator): Adds Pagination example with violet-paginator
2 parents 3720269 + c98989a commit 214de0d

File tree

12 files changed

+191
-7
lines changed

12 files changed

+191
-7
lines changed

.eslintrc

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"mocha": true
66
},
77
"rules": {
8+
"new-cap": [2, { "capIsNewExceptions": ["List", "Map", "Set"] }],
89
"react/no-multi-comp": 0,
910
"import/default": 0,
1011
"import/no-duplicates": 0,

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ dist/
55
webpack-assets.json
66
webpack-stats.json
77
npm-debug.log
8+
*.swp

package.json

+6-3
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
"file-loader": "^0.8.5",
110110
"hoist-non-react-statics": "^1.0.3",
111111
"http-proxy": "^1.12.0",
112+
"immutable": "^3.8.1",
112113
"invariant": "^2.2.0",
113114
"less": "^2.5.3",
114115
"less-loader": "^2.2.1",
@@ -117,9 +118,9 @@
117118
"multireducer": "^2.0.0",
118119
"piping": "^0.3.0",
119120
"pretty-error": "^1.2.0",
120-
"react": "^0.14.2",
121+
"react": "0.14.8",
121122
"react-bootstrap": "^0.28.1",
122-
"react-dom": "^0.14.1",
123+
"react-dom": "0.14.8",
123124
"react-helmet": "^2.2.0",
124125
"react-inline-css": "^2.0.0",
125126
"react-redux": "^4.0.0",
@@ -129,13 +130,15 @@
129130
"redux": "^3.0.4",
130131
"redux-async-connect": "^1.0.0-rc2",
131132
"redux-form": "^3.0.12",
133+
"redux-thunk": "^2.1.0",
132134
"scroll-behavior": "^0.3.2",
133135
"serialize-javascript": "^1.1.2",
134136
"serve-favicon": "^2.3.0",
135137
"socket.io": "^1.3.7",
136138
"socket.io-client": "^1.3.7",
137139
"superagent": "^1.4.0",
138140
"url-loader": "^0.5.7",
141+
"violet-paginator": "^1.8.1",
139142
"warning": "^2.1.0",
140143
"webpack-isomorphic-tools": "^2.2.18"
141144
},
@@ -172,7 +175,7 @@
172175
"phantomjs": "^1.9.18",
173176
"phantomjs-polyfill": "0.0.1",
174177
"react-a11y": "^0.2.6",
175-
"react-addons-test-utils": "^0.14.0",
178+
"react-addons-test-utils": "0.14.8",
176179
"react-transform-catch-errors": "^1.0.0",
177180
"react-transform-hmr": "^1.0.1",
178181
"redbox-react": "^1.1.1",

src/containers/App/App.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -87,17 +87,20 @@ export default class App extends Component {
8787
<LinkContainer to="/survey">
8888
<NavItem eventKey={3}>Survey</NavItem>
8989
</LinkContainer>
90+
<LinkContainer to="/pagination">
91+
<NavItem eventKey={4}>Pagination</NavItem>
92+
</LinkContainer>
9093
<LinkContainer to="/about">
91-
<NavItem eventKey={4}>About Us</NavItem>
94+
<NavItem eventKey={5}>About Us</NavItem>
9295
</LinkContainer>
9396

9497
{!user &&
9598
<LinkContainer to="/login">
96-
<NavItem eventKey={5}>Login</NavItem>
99+
<NavItem eventKey={6}>Login</NavItem>
97100
</LinkContainer>}
98101
{user &&
99102
<LinkContainer to="/logout">
100-
<NavItem eventKey={6} className="logout-link" onClick={this.handleLogout}>
103+
<NavItem eventKey={7} className="logout-link" onClick={this.handleLogout}>
101104
Logout
102105
</NavItem>
103106
</LinkContainer>}

src/containers/Home/Home.js

+9
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ export default class Home extends Component {
8686
<li><a href="https://github.com/erikras/redux-form" target="_blank">redux-form</a> to manage form state
8787
in Redux
8888
</li>
89+
<li><a href="https://github.com/sslotsky/violet-paginator" target="_blank">violet-paginator</a> to manage list state
90+
in Redux, including pagination, sorting, filtering, updating, and more.
91+
</li>
8992
<li><a href="https://github.com/erikras/multireducer" target="_blank">multireducer</a> combine several
9093
identical reducer states into one key-based reducer</li>
9194
<li><a href="https://github.com/webpack/style-loader" target="_blank">style-loader</a> and <a
@@ -147,6 +150,12 @@ export default class Home extends Component {
147150
still-experimental <a href="https://github.com/erikras/redux-form" target="_blank">redux-form</a> to
148151
manage form state inside the Redux store. This includes immediate client-side validation.
149152
</dd>
153+
<dt>Pagination</dt>
154+
<dd>
155+
The <Link to="/pagination">Pagination page</Link> uses
156+
<a href="https://www.npmjs.com/package/violet-paginator" target="_blank">violet-paginator</a> to
157+
paginate and sort records in a data table.
158+
</dd>
150159
<dt>WebSockets / socket.io</dt>
151160
<dd>
152161
The <Link to="/chat">Chat</Link> uses the socket.io technology for real-time
+104
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import React from 'react';
2+
import Helmet from 'react-helmet';
3+
import { List } from 'immutable';
4+
import { connect } from 'react-redux';
5+
import { VioletDataTable, VioletPaginator } from 'violet-paginator';
6+
7+
import './violet.min.scss';
8+
import './Pagination.scss';
9+
10+
function paginate(list, page, pageSize) {
11+
return list.skip((page - 1) * pageSize).take(pageSize);
12+
}
13+
14+
function order(list, sort, sortOrder) {
15+
if (sort) {
16+
const sorted = list.sortBy(item => item[sort]);
17+
if (sortOrder === 'desc') {
18+
return sorted.reverse();
19+
}
20+
21+
return sorted;
22+
}
23+
24+
return list;
25+
}
26+
27+
function mockFetch({ query: { pageSize, page, sort, sortOrder } }) {
28+
const records = List([{
29+
name: 'Ewe and IPA',
30+
rank: 75
31+
}, {
32+
name: 'Pouty Stout',
33+
rank: 86
34+
}, {
35+
name: 'WPA Evil Angel',
36+
rank: 63
37+
}, {
38+
name: 'Maltster',
39+
rank: 68
40+
}, {
41+
name: 'Beer Mosaic Pale',
42+
rank: 92
43+
}, {
44+
name: 'Honey Porter IDK',
45+
rank: 93
46+
}, {
47+
name: 'Puntification BeerSocialist Brown',
48+
rank: 88
49+
}, {
50+
name: 'HefeLite Dubble All-Grain',
51+
rank: 55
52+
}]);
53+
54+
const filtered = paginate(
55+
order(records, sort, sortOrder),
56+
page,
57+
pageSize
58+
);
59+
60+
return () => Promise.resolve({
61+
data: {
62+
results: filtered.toJS(),
63+
total_count: records.count()
64+
}
65+
});
66+
}
67+
68+
export function Pagination({ fetch }) {
69+
const headers = [{
70+
field: 'name',
71+
text: 'Name'
72+
}, {
73+
field: 'rank',
74+
text: 'Rank'
75+
}];
76+
77+
const config = {
78+
fetch,
79+
listId: 'recipes',
80+
pageSize: 3
81+
};
82+
83+
return (
84+
<section style={{ width: '50%' }}>
85+
<h1>Pagination</h1>
86+
<Helmet title="Pagination" />
87+
88+
<p>
89+
This is an example of a datatable in redux with sorting and pagination capability
90+
provided by <a href="https://www.npmjs.com/package/violet-paginator" target="_blank">violet-paginator</a>.
91+
</p>
92+
<VioletPaginator {...config} />
93+
<VioletDataTable
94+
{...config}
95+
headers={headers}
96+
/>
97+
</section>
98+
);
99+
}
100+
101+
export default connect(
102+
undefined,
103+
{ fetch: mockFetch }
104+
)(Pagination);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
a {
2+
cursor: pointer;
3+
}
+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
2+
audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}
3+
abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
4+
sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
5+
pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible;text-transform:none}
6+
select{text-transform:none}button,html input[type="button"]{-webkit-appearance:button;cursor:pointer}input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
7+
button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input::-moz-focus-inner{border:0;padding:0}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
8+
input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
9+
input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}
10+
legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}html{font-family:"Work Sans","Helvetica Neue",Arial,sans-serif;font-size:14px;line-height:19px}
11+
@media(min-width:500px){html{font-size:16px;line-height:22px}}@media(min-width:900px){html{font-size:17px;line-height:24px}}img{margin:1rem 0}h1,h2,h3,h4,h5,h6{font-family:"Work Sans","Helvetica Neue",Arial,sans-serif;font-weight:normal}
12+
h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{border:0}h1{line-height:1.1}p{margin:0}p+p{margin-top:1rem}.align-center{text-align:center}a{color:#333;text-decoration:none;border-bottom:1px solid #555}footer{text-align:center}
13+
footer a{border:0}pre{padding:1rem;font-family:"Source Code Pro","Menlo",monospace;border-top:1px solid #ddd;border-left:1px solid #ddd;border-bottom:1px solid #eee;border-right:1px solid #eee;background:#fafafa}
14+
@media(min-width:500px){pre{padding:1.7rem}}@media(min-width:900px){pre{padding:2rem}}.highlight{background-color:#ffa;padding:.1rem}.form-group{padding-bottom:1rem}@media(min-width:767px){.form-group{padding-bottom:1.7rem}
15+
}@media(min-width:900px){.form-group{padding-bottom:2rem}}.form-group.submit{padding-top:.5rem;padding-bottom:0!important}@media(min-width:767px){.form-group.submit{padding-top:.85rem}}@media(min-width:900px){.form-group.submit{padding-top:1rem}
16+
}.form-group.checkbox label{padding-bottom:0!important;line-height:2rem}.form-group.checkbox input[type=checkbox],.form-group.checkbox input[type=radio]{height:2rem;margin-right:.5rem;float:left}label{display:block;padding-bottom:.25rem;font-family:"Work Sans","Helvetica Neue",Arial,sans-serif;color:rgba(0,0,0,0.54);line-height:2rem}
17+
@media(min-width:767px){label{padding-bottom:.425rem}}@media(min-width:900px){label{padding-bottom:.5rem}}input[type=text],input[type=submit],textarea,select{-webkit-appearance:none}input[type=text],input[type=date],input[type=password],input[type=email],input[type=datetime-local],textarea,select{font-family:"Work Sans","Helvetica Neue",Arial,sans-serif;border-top:1px solid #ddd;border-left:1px solid #ddd;border-bottom:1px solid #eee;border-right:1px solid #eee;width:100%;padding:8px;font-size:16px;background:#fff;border-radius:0}
18+
input[type=text][disabled],input[type=date][disabled],input[type=password][disabled],input[type=email][disabled],input[type=datetime-local][disabled],textarea[disabled],select[disabled]{background:#fafafa}
19+
@media(min-width:500px){textarea{width:100%;height:10em}}.btn,input[type=submit],button{font-family:"Work Sans","Helvetica Neue",Arial,sans-serif;-webkit-appearance:none;border:0;display:inline-block;padding:.5rem 1rem;text-decoration:none;color:#FFF;text-shadow:-1px -1px 0 rgba(0,0,0,0.2);background:#666;line-height:1.8rem;padding:.5rem 1rem}
20+
.btn i,input[type=submit] i,button i{margin-right:.5rem}@media(min-width:767px){.row{display:flex}}.col-1{flex:1}.col-2{flex:2}.col-3{flex:3}.col-4{flex:4}.col-5{flex:5}.col-6{flex:6}.col-7{flex:7}.col-8{flex:8}
21+
.col-9{flex:9}.col-10{flex:10}body{background:#fdfdfd;padding:1rem}@media(min-width:500px){body{padding:1.7rem}}@media(min-width:900px){body{padding:2rem}}@media(min-width:900px){body{padding:2rem}}@media(min-width:900px) and (min-width:500px){body{padding:3.4rem}
22+
}@media(min-width:900px) and (min-width:900px){body{padding:4rem}}.soft{padding:2rem}@media(min-width:500px){.soft{padding:3.4rem}}@media(min-width:900px){.soft{padding:4rem}}.soft-half{padding:1rem}@media(min-width:500px){.soft-half{padding:1.7rem}
23+
}@media(min-width:900px){.soft-half{padding:2rem}}.soft-quarter{padding:.5rem}@media(min-width:500px){.soft-quarter{padding:.85rem}}@media(min-width:900px){.soft-quarter{padding:1rem}}.soft-sides{padding-left:2rem;padding-right:2rem}
24+
@media(min-width:767px){.soft-sides{padding-left:3.4rem;padding-right:3.4rem}}@media(min-width:900px){.soft-sides{padding-left:4rem;padding-right:4rem}}.soft-half-sides{padding-left:1rem;padding-right:1rem}
25+
@media(min-width:767px){.soft-half-sides{padding-left:1.7rem;padding-right:1.7rem}}@media(min-width:900px){.soft-half-sides{padding-left:2rem;padding-right:2rem}}.soft-quarter-sides{padding-left:.5rem;padding-right:.5rem}
26+
@media(min-width:767px){.soft-quarter-sides{padding-left:.85rem;padding-right:.85rem}}@media(min-width:900px){.soft-quarter-sides{padding-left:1rem;padding-right:1rem}}.soft-ends{padding-top:2rem;padding-bottom:2rem}
27+
@media(min-width:767px){.soft-ends{padding-top:3.4rem;padding-bottom:3.4rem}}@media(min-width:900px){.soft-ends{padding-top:4rem;padding-bottom:4rem}}.soft-half-ends{padding-top:1rem;padding-bottom:1rem}
28+
@media(min-width:767px){.soft-half-ends{padding-top:1.7rem;padding-bottom:1.7rem}}@media(min-width:900px){.soft-half-ends{padding-top:2rem;padding-bottom:2rem}}.soft-quarter-ends{padding-top:.5rem;padding-bottom:.5rem}
29+
@media(min-width:767px){.soft-quarter-ends{padding-top:.85rem;padding-bottom:.85rem}}@media(min-width:900px){.soft-quarter-ends{padding-top:1rem;padding-bottom:1rem}}.soft-top{padding-top:2rem}@media(min-width:767px){.soft-top{padding-top:3.4rem}
30+
}@media(min-width:900px){.soft-top{padding-top:4rem}}.soft-half-top{padding-top:1rem}@media(min-width:767px){.soft-half-top{padding-top:1.7rem}}@media(min-width:900px){.soft-half-top{padding-top:2rem}
31+
}.soft-quarter-top{padding-top:.5rem}@media(min-width:767px){.soft-quarter-top{padding-top:.85rem}}@media(min-width:900px){.soft-quarter-top{padding-top:1rem}}.soft-bottom{padding-bottom:2rem}@media(min-width:767px){.soft-bottom{padding-bottom:3.4rem}
32+
}@media(min-width:900px){.soft-bottom{padding-bottom:4rem}}.soft-half-bottom{padding-bottom:1rem}@media(min-width:767px){.soft-half-bottom{padding-bottom:1.7rem}}@media(min-width:900px){.soft-half-bottom{padding-bottom:2rem}
33+
}.soft-quarter-bottom{padding-bottom:.5rem}@media(min-width:767px){.soft-quarter-bottom{padding-bottom:.85rem}}@media(min-width:900px){.soft-quarter-bottom{padding-bottom:1rem}}.soft-right{padding-right:2rem}
34+
@media(min-width:767px){.soft-right{padding-right:3.4rem}}@media(min-width:900px){.soft-right{padding-right:4rem}}.soft-half-right{padding-right:1rem}@media(min-width:767px){.soft-half-right{padding-right:1.7rem}
35+
}@media(min-width:900px){.soft-half-right{padding-right:2rem}}.soft-quarter-right{padding-right:.5rem}@media(min-width:767px){.soft-quarter-right{padding-right:.85rem}}@media(min-width:900px){.soft-quarter-right{padding-right:1rem}
36+
}.soft-left{padding-left:2rem}@media(min-width:767px){.soft-left{padding-left:3.4rem}}@media(min-width:900px){.soft-left{padding-left:4rem}}.soft-half-left{padding-left:1rem}@media(min-width:767px){.soft-half-left{padding-left:1.7rem}
37+
}@media(min-width:900px){.soft-half-left{padding-left:2rem}}.soft-quarter-left{padding-left:.5rem}@media(min-width:767px){.soft-quarter-left{padding-left:.85rem}}@media(min-width:900px){.soft-quarter-left{padding-left:1rem}
38+
}.hard{padding:0!important}.hard-ends{padding-top:0!important;padding-bottom:0!important}.hard-sides{padding-left:0!important;padding-right:0!important}.hard-top{padding-top:0!important}.hard-bottom{padding-bottom:0!important}
39+
.hard-left{padding-left:0!important}.hard-right{padding-right:0!important}.flush{margin:0!important}.flush-ends{margin-top:0!important;margin-bottom:0!important}.flush-sides{margin-left:0!important;margin-right:0!important}
40+
.flush-top{margin-top:0!important}.flush-bottom{margin-bottom:0!important}.flush-left{margin-left:0!important}.flush-right{margin-right:0!important}@media(max-width:500px){.hide-on-mobile{display:none}
41+
}@media(min-width:500px) and (max-width:900px){.hide-on-tablet{display:none}}@media(min-width:500px){.hide-above-mobile{display:none}}.sep{height:2px;background:#fff;border-top:1px solid #ccc}section{padding-top:.5rem;padding-bottom:.5rem}
42+
@media(min-width:767px){section{padding-top:.85rem;padding-bottom:.85rem}}@media(min-width:900px){section{padding-top:1rem;padding-bottom:1rem}}.inset{border-top:1px solid #ddd;border-left:1px solid #ddd;border-bottom:1px solid #eee;border-right:1px solid #eee}
43+
.outset{border-top:1px solid #eee;border-left:1px solid #eee;border-bottom:1px solid #ddd;border-right:1px solid #ddd}table{width:100%;margin-bottom:1.25rem}table th{text-align:left}table th,table td{padding-top:.25rem;padding-bottom:.25rem}
44+
@media(min-width:767px){table th,table td{padding-top:.425rem;padding-bottom:.425rem}}@media(min-width:900px){table th,table td{padding-top:.5rem;padding-bottom:.5rem}}table.border th,table.border td{padding:.33333rem;border:1px solid #dfdfdf}
45+
@media(min-width:500px){table.border th,table.border td{padding:.56667rem}}@media(min-width:900px){table.border th,table.border td{padding:.66667rem}}.alert{position:relative;background-color:#7e69c6;color:#fff;padding:4rem}
46+
.alert a.close{position:absolute;top:50%;right:4rem;border:0;color:#fff;width:2rem;text-align:center;line-height:2rem;margin-top:-1rem}.pagination{padding:0!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;cursor:default;list-style:none;text-align:center}
47+
.pagination li{border-top:1px solid #eee;border-left:1px solid #eee;border-bottom:1px solid #ddd;border-right:1px solid #ddd;display:inline-block;text-align:center;margin:.25rem}.pagination li:active{border-top:1px solid #ddd;border-left:1px solid #ddd;border-bottom:1px solid #eee;border-right:1px solid #eee}
48+
.pagination li.disabled{padding:.5rem;color:rgba(0,0,0,0.54)}@media(min-width:500px){.pagination li.disabled{padding:.85rem}}@media(min-width:900px){.pagination li.disabled{padding:1rem}}.pagination li.disabled:active{border-top:1px solid #eee;border-left:1px solid #eee;border-bottom:1px solid #ddd;border-right:1px solid #ddd}
49+
.pagination li.skip,.pagination li.current{padding:.5rem;border:0;margin:0}@media(min-width:500px){.pagination li.skip,.pagination li.current{padding:.85rem}}@media(min-width:900px){.pagination li.skip,.pagination li.current{padding:1rem}
50+
}.pagination li a{display:block;padding:.5rem;cursor:pointer;border:0}@media(min-width:500px){.pagination li a{padding:.85rem}}@media(min-width:900px){.pagination li a{padding:1rem}}

src/containers/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ export Login from './Login/Login';
77
export LoginSuccess from './LoginSuccess/LoginSuccess';
88
export Survey from './Survey/Survey';
99
export NotFound from './NotFound/NotFound';
10+
export Pagination from './Pagination/Pagination';

src/redux/create.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { createStore as _createStore, applyMiddleware, compose } from 'redux';
22
import createMiddleware from './middleware/clientMiddleware';
33
import { routerMiddleware } from 'react-router-redux';
4+
import thunk from 'redux-thunk';
5+
import Immutable from 'immutable';
46

57
export default function createStore(history, client, data) {
68
// Sync dispatched route actions to the history
79
const reduxRouterMiddleware = routerMiddleware(history);
810

9-
const middleware = [createMiddleware(client), reduxRouterMiddleware];
11+
const middleware = [createMiddleware(client), reduxRouterMiddleware, thunk];
1012

1113
let finalCreateStore;
1214
if (__DEVELOPMENT__ && __CLIENT__ && __DEVTOOLS__) {
@@ -22,6 +24,9 @@ export default function createStore(history, client, data) {
2224
}
2325

2426
const reducer = require('./modules/reducer');
27+
if (data) {
28+
data.pagination = Immutable.fromJS(data.pagination);
29+
}
2530
const store = finalCreateStore(reducer, data);
2631

2732

src/redux/modules/reducer.js

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { combineReducers } from 'redux';
22
import multireducer from 'multireducer';
33
import { routerReducer } from 'react-router-redux';
44
import {reducer as reduxAsyncConnect} from 'redux-async-connect';
5+
import { pagination } from 'violet-paginator';
56

67
import auth from './auth';
78
import counter from './counter';
@@ -20,5 +21,6 @@ export default combineReducers({
2021
counter3: counter
2122
}),
2223
info,
24+
pagination,
2325
widgets
2426
});

0 commit comments

Comments
 (0)