diff --git a/app/pods/components/pagination-pills/component.js b/app/pods/components/pagination-pills/component.js new file mode 100644 index 0000000..843b92e --- /dev/null +++ b/app/pods/components/pagination-pills/component.js @@ -0,0 +1,8 @@ +import Component from '@ember/component'; + +export default class PaginationPillsComponent extends Component { + didReceiveAttrs() { + const length = this.pages + this.set('pagesArray', Array.from({length}, (v, i) => ++i)) + } +} diff --git a/app/pods/components/pagination-pills/template.hbs b/app/pods/components/pagination-pills/template.hbs new file mode 100644 index 0000000..493bd81 --- /dev/null +++ b/app/pods/components/pagination-pills/template.hbs @@ -0,0 +1,31 @@ + diff --git a/app/pods/questions/index/controller.js b/app/pods/questions/index/controller.js index da078ed..c252c98 100644 --- a/app/pods/questions/index/controller.js +++ b/app/pods/questions/index/controller.js @@ -1,6 +1,7 @@ import Controller from '@ember/controller'; import { inject as service } from '@ember/service'; import { task, timeout } from 'ember-concurrency'; +import { computed } from '@ember/object'; export default Controller.extend({ store: service(), @@ -8,6 +9,9 @@ export default Controller.extend({ page: 1, limit: 10, searchString: '', + pageCount: computed('limit', 'questions', function() { + return Math.ceil(this.questions.meta.pagination.count / this.limit) + }), searchTask: task(function * () { yield timeout(250) diff --git a/app/pods/questions/index/template.hbs b/app/pods/questions/index/template.hbs index 954b3ba..69d44d0 100644 --- a/app/pods/questions/index/template.hbs +++ b/app/pods/questions/index/template.hbs @@ -65,5 +65,9 @@ {{/each}} + {{pagination-pills + pagination=questions.meta.pagination + pages=pageCount + setPage=(action (mut page))}} {{outlet}} \ No newline at end of file diff --git a/tests/integration/pods/components/pagination-pills/component-test.js b/tests/integration/pods/components/pagination-pills/component-test.js new file mode 100644 index 0000000..d477f74 --- /dev/null +++ b/tests/integration/pods/components/pagination-pills/component-test.js @@ -0,0 +1,26 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import hbs from 'htmlbars-inline-precompile'; + +module('Integration | Component | pagination-pills', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs`{{pagination-pills}}`); + + assert.equal(this.element.textContent.trim(), ''); + + // Template block usage: + await render(hbs` + {{#pagination-pills}} + template block text + {{/pagination-pills}} + `); + + assert.equal(this.element.textContent.trim(), 'template block text'); + }); +});