# ember-jsonapi-pagination

> A JSON API spec pagination addon for ember.

Latest version **0.0.4** (published 2021-08-23) · MIT license · 0 weekly downloads

## Install

```sh
npm install ember-jsonapi-pagination
pnpm add ember-jsonapi-pagination
yarn add ember-jsonapi-pagination
bun add ember-jsonapi-pagination
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.4 |
| Published | 2021-08-23 |
| First published | 2021-01-04 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | 10.* \|\| >= 14.* |
| Dependencies | 4 |
| Unpacked size | 11.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Tobias Brysiewicz |
| Maintainers | tbrysiewicz |
| Keywords | ember-addon, pagination, json-api |

## Links

- npm: https://www.npmjs.com/package/ember-jsonapi-pagination
- npm.io page: https://npm.io/package/ember-jsonapi-pagination

## Dependencies (4)

- [query-string](https://npm.io/package/query-string.md) ^6.13.7
- [ember-cli-babel](https://npm.io/package/ember-cli-babel.md) ^7.22.1
- [ember-auto-import](https://npm.io/package/ember-auto-import.md) ^1.9.0
- [ember-cli-htmlbars](https://npm.io/package/ember-cli-htmlbars.md) ^5.3.1

## Alternatives

- [@mapbox/jsonlint-lines-primitives](https://npm.io/package/@mapbox/jsonlint-lines-primitives.md) — 5.3M weekly downloads
- [reftools](https://npm.io/package/reftools.md) — 3.5M weekly downloads
- [@hey-api/openapi-ts](https://npm.io/package/@hey-api/openapi-ts.md) — 3.5M weekly downloads
- [@mapbox/geojson-rewind](https://npm.io/package/@mapbox/geojson-rewind.md) — 2.4M weekly downloads
- [turbo-stream](https://npm.io/package/turbo-stream.md) — 1.7M weekly downloads

## Recent versions

- 0.0.4 (latest) — 2021-08-23
- 0.0.3 — 2021-08-23
- 0.0.2 — 2021-08-18
- 0.0.1 — 2021-01-04

## README

ember-jsonapi-pagination
==============================================================================

This addon improves pagination support to Ember applications that use Ember Data's JSONAPI serializer. It provides the following:

1) A `JsonapiPaginationSerializer` that will append [JSONAPI pagination properties](https://jsonapi.org/format/#fetching-pagination) when returning a response for a `findAll` or `query` request.

2) A `<JsonapiPagination />` component than can be used to render an unordered list of pagination links that can be used in your templates

Compatibility
------------------------------------------------------------------------------

* Ember.js v3.16 or above
* Ember CLI v2.13 or above
* Node.js v10 or above


Installation
------------------------------------------------------------------------------

```
ember install ember-jsonapi-pagination
```


Usage
------------------------------------------------------------------------------

#### Serializer

The minimum usage of this addon requires using the `JsonapiPaginationSerializer` for any models that will return JSONAPI compliant pagination links. You can use this serializer for specific models or as your application serializer, depending on your needs and preference.

The serializer extends Ember Data's built in `JSONAPISerializer`.

```javascript
import JsonapiPaginationSerializer from 'ember-jsonapi-pagination/serializers/jsonapi-pagination';

export default class ApplicationSerializer extends JsonapiPaginationSerializer {}
```

The serializer will include a `pagination` object on the model's `meta` object. It will parse the links and pull the page number from each link's `page` query param. If your JSONAPI document looks like this:

```json
{
  "data": [...],
  "included": [...],
  "links": {
    "first": "https://example.com/api/posts?page=1",
    "prev": "https://example.com/api/posts?page=2",
    "self": "https://example.com/api/posts?page=3",
    "next": "https://example.com/api/posts?page=4",
    "last": "https://example.com/api/posts?page=10"
  }
}
```

Then, for example in a controller, `this.model.meta.pagination` will look like this:

```json
{
  "first": { "number": 1 },
  "prev": { "number": 2 },
  "self": { "number": 3 },
  "next": { "number": 4 },
  "last": { "number": 10 }
}
```

#### Component

The `<JsonapiPagination />` component can be used with or without a block that provides a template for pagination.

**Example (without block):**

```html
<JsonapiPagination @model={{this.model}} @goToPage={{this.goToPage}} />
```

**Example (with block):**

```html
<JsonapiPagination @model={{this.model}} @padBy={{2}} as |pages|>
  <ul>
    {{#each pages as |page|}}
      <li><a href="#" {{on "click" (fn this.goToPage page.number)}}>{{page.number}}</a></li>
    {{/each}}
  </ul>
</JsonapiPagination>
```

**Arguments:**

|Name|Type|Description|
|---|---|---|
|`@model`|JSONAPI Document|The collection model as returned by Ember Data|
|`@goToPage`|Function|An action that will be called when a page number is clicked. It will receive one argument: the page number|
|`@padBy`|Number|The number of pagination objects to include between `first` and `prev` +  `next` and `last` links|
|`@minimalMode`|Boolean|If true, only previous and next page objects are built|

Contributing
------------------------------------------------------------------------------

See the [Contributing](CONTRIBUTING.md) guide for details.


License
------------------------------------------------------------------------------

This project is licensed under the [MIT License](LICENSE.md).

---
_Source: https://npm.io/package/ember-jsonapi-pagination · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
