Skip to content

Commit 9959ba0

Browse files
committed
Add pagination to Group index page
1 parent a08d8eb commit 9959ba0

File tree

7 files changed

+37
-6
lines changed

7 files changed

+37
-6
lines changed

app/controllers/group/index.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import Ember from 'ember';
2+
import Pagination from 'ember-cli-jsonapi-pagination/mixins/controllers/jsonapi-pagination';
3+
4+
export default Ember.Controller.extend(Pagination, {
5+
totalPages: Ember.computed('size', 'number', 'model.posts.[]', function() {
6+
return this.get('posts.meta.total-pages');
7+
})
8+
});

app/routes/group/index.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
import Ember from 'ember';
2+
import Pagination from 'ember-cli-jsonapi-pagination/mixins/routes/jsonapi-pagination';
23

34
const KIND_POST = 0;
45

5-
export default Ember.Route.extend({
6-
model() {
6+
export default Ember.Route.extend(Pagination, {
7+
model(params) {
78
const group = this.modelFor("group");
89

910
const filter = {
1011
group: group.get("id"),
1112
kind: KIND_POST
1213
};
1314

14-
const posts = this.store.query("post", {
15+
const posts = this.queryPaginated("post", {
1516
filter: filter,
16-
page: { size: 5 },
17+
size: params.size,
18+
number: params.number,
1719
sort: "-published_at"
1820
});
1921

app/templates/group/index.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
{{post-view post=post snippets=true}}
1111
</div>
1212
{{/each}}
13+
{{paginate-collection totalPages=totalPages currentPage=number setCurrentPage=(action "setCurrentPage")}}
1314
</div>
1415
</section>
1516
{{/if}}

mirage/config.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,17 @@ export default function() {
5252

5353
this.get("/posts", function(schema, request) {
5454
const groupId = request.queryParams["filter[group]"];
55+
const pageSize = parseInt(request.queryParams["page[size]"]);
56+
const pageNumber = parseInt(request.queryParams["page[number]"]);
5557

5658
if (groupId) {
5759
const group = schema.groups.find(groupId);
58-
return group.posts;
60+
const postIds = group.posts.models.map(model => model.id);
61+
const offset = (pageNumber - 1) * pageSize;
62+
63+
let json = this.serialize(schema.posts.find(postIds.slice(offset, offset + pageSize)));
64+
json.meta = { "total-pages": Math.ceil(group.posts.models.length / pageSize) };
65+
return json;
5966
}
6067

6168
return schema.posts.all();

mirage/scenarios/default.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export default function(server) {
2121
server.createList("announcement", 5, { bulletin });
2222
}
2323

24-
server.createList("post", 10, { group: englishService });
24+
server.createList("post", 40, { group: englishService });
2525

2626
server.create("user", { email: "[email protected]", name: "Test User" });
2727
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"ember-cli-htmlbars": "^1.0.11",
4141
"ember-cli-htmlbars-inline-precompile": "^0.3.1",
4242
"ember-cli-inject-live-reload": "^1.3.1",
43+
"ember-cli-jsonapi-pagination": "0.0.2",
4344
"ember-cli-mirage": "^0.2.0",
4445
"ember-cli-moment-shim": "1.0.0",
4546
"ember-cli-page-object": "^1.1.0",
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { moduleFor, test } from 'ember-qunit';
2+
3+
moduleFor('controller:group/index', 'Unit | Controller | group/index', {
4+
// Specify the other units that are required for this test.
5+
// needs: ['controller:foo']
6+
});
7+
8+
// Replace this with your real tests.
9+
test('it exists', function(assert) {
10+
let controller = this.subject();
11+
assert.ok(controller);
12+
});

0 commit comments

Comments
 (0)