Show:

Basic Usage

  • columns - Controller array to setup the table headers/columns (detailed below).
  • modelName - for the component to make the proper request when filtering/sorting, you must pass the model type matching your Ember model structure. e.g. brand/diagram, product.
  • record - this is bound to the controller and is used to iterate over the table's model data.

Template

{{! app/templates/my-route.hbs }}

{{#ember-tabular columns=columns modelName="user" record=users as |section|}}
    {{#if section.isBody}}
        {{#each users as |row|}}
            <tr>
                <td>{{row.username}}</td>
                <td>{{row.emailAddress}}</td>
                <td>{{row.firstName}}</td>
                <td>{{row.lastName}}</td>
                <td>
                    {{#link-to "index" class="btn btn-xs" role="button"}}
                        Edit
                    {{/link-to}}
                </td>
            </tr>
        {{/each}}
    {{/if}}
{{/ember-tabular}}

Controller

Setup the columns array, which is how the table headers are constructed, label is required in all cases.

// app/controllers/my-route.js

export default Ember.Controller.extend({
  users: null,
  columns: [
    {
      property: 'username',
      label: 'Username',
      defaultSort: 'username',
    },
    {
      property: 'emailAddress',
      label: 'Email',
    },
    {
      property: 'firstName',
      label: 'First Name',
    },
    {
      property: 'lastName',
      label: 'Last Name',
    },
    {
      property: 'updatedAt',
      label: 'Last Updated',
      type: 'date',
    },
  ],
});

Methods

defaultSort

()

Runs on init to set the default sort param.

failure

(
  • response
)

Parameters:

normalize

(
  • data
  • params
)
Object

Used to normalize query parameters returned from request to components expected format.

Parameters:

  • data Object

    Data object returned from request.

  • params Object

    The returned object of query parameters.

Returns:

Object:

data

normalizeFilter

(
  • query
)
Object

Used to normalize filter related query parameters returned from request to components expected format. ?filter[last-name] => filter[lastName]. ?filter[user.first-name] => filter[user.firstName].

Parameters:

  • query Object

    The returned object of query parameters.

Returns:

Object:

query

normalizePagination

(
  • data
  • params
)
Object

Used to normalize pagination related query parameters returned from request to components expected format. ?page[offset] => offset. ?page[limit] => limit.

Parameters:

  • data Object

    Data object returned from request.

  • params Object

    The returned object of query parameters.

Returns:

Object:

data

normalizeProperty

(
  • property
)
String

Used to normalize properties to components expected format. By default this will camelize the property.

Parameters:

Returns:

String:

property

normalizeSort

(
  • query
)
Object

Used to normalize sort related query parameters returned from request to components expected format. Expects json:api by default.

Parameters:

  • query Object

    The returned object of query parameters.

Returns:

Object:

query

request

(
  • params
  • modelName
)

Make request to API for data.

Parameters:

  • params Object

    Serialized query parameters.

  • modelName String

reset

()

Resets all state specific properties.

segmentProperty

(
  • property
)
Array

Parameters:

Returns:

Array:

segments

serialize

(
  • params
)
Object

Used to serialize the parameters within request.

Parameters:

  • params Object

    An object of query parameters.

Returns:

Object:

params The serialized query parameters.

serializeFilter

(
  • params
)
Object

Transform params related to filtering into API expected format. Follows json:api spec by default: http://jsonapi.org/recommendations/#filtering. ?filter[lastName] => ?filter[last-name].

Parameters:

  • params Object

    An object of query parameters.

Returns:

Object:

params The serialized filter query parameters.

serializePagination

(
  • params
)
Object

Transform params related to pagination into API expected format. Follows json:api spec by default: http://jsonapi.org/format/#fetching-pagination.

offset => ?page[offset].

limit => ?page[limit].

If you are not using Ember Data then you can extend this addon's component and override a set of serialize and normalized methods:

import EmberTabular from 'ember-tabular/components/ember-tabular';
                    
                    export default EmberTabular.extend({
                      serializePagination(params) {
                        // override default pagination ?page[offset]= and ?[page]limit=
                        // offset and limit will be sent as ?offset= and ?limit=
                        params.offset = (params.page * params.limit) - params.limit;
                        if (isNaN(params.offset)) {
                          params.offset = null;
                        }
                    
                        return params;
                      },
                    });
                    

Parameters:

  • params Object

    An object of query parameters.

Returns:

Object:

params The serialized pagination query parameters.

serializeProperty

(
  • property
)
String

Follows json:api dasherized naming. lastName => last-name.

If you are not supporting json:api's dasherized properties this can be extended to support other conventions:

import EmberTabular from 'ember-tabular/components/ember-tabular';
                    
                    export default EmberTabular.extend({
                      serializeProperty(property) {
                        // Override to convert all properties sent in requests to camelize instead of the default dasherized
                        // ?filter[lastName]&sort=isAdmin
                        // (pseudo code)
                        if (property) {
                          return Ember.String.camelize(property);
                        }
                    
                        return null;
                      },
                    });
                    

Parameters:

Returns:

String:

property

serializeSort

(
  • params
)
Object

Transform params related to sorting into API expected format. Follows json:api spec by default: http://jsonapi.org/format/#fetching-sorting. ?sort=lastName => ?sort=last-name.

Parameters:

  • params Object

    An object of query parameters.

Returns:

Object:

params The serialized sort query parameters.

setColumnDefaults

()

Runs on init to setup the table header default columns.

setModel

()

Sets the record after the request is resolved.

setSort

(
  • sortProperty
)

Sets the active sort property.

Parameters:

updateSortUI

(
  • sortProperty
)

Sets the proper classes on table headers when sorting.

Parameters:

Properties

columnLength

Unknown

Computed Property to determine the column length dependent upon columns.

Sub-properties:

columns

Array

This is typically setup on the controller and passed into the component, and is used to construct the table headers/filtering.

export default Ember.Controller.extend({
                      users: null,
                      columns: [
                        {
                          property: 'username',
                          label: 'Username',
                          defaultSort: 'username',
                        },
                        {
                          property: 'emailAddress',
                          label: 'Email',
                        },
                        {
                          property: 'firstName',
                          label: 'First Name',
                          sort: false,
                        },
                        {
                          property: 'isAdmin',
                          label: 'Is Admin',
                          list: [
                            {
                              label: 'Yes',
                              value: true,
                            },
                            {
                              label: 'No',
                              value: false,
                            }
                          ],
                        },
                        {
                          property: 'updatedAt',
                          label: 'Last Updated',
                          type: 'date',
                        },
                        {
                          label: 'Actions',
                        },
                      ],
                    });
                    
  • columns.property - {String}
    • Required for column filtering/sorting
    • Properties should be in camelCase format
  • columns.label - {String}
    • Required in all use-cases
  • columns.type - {String} - Default: text
    • Sets the filter <input type="">
  • columns.sort - {Boolean} - Default: true
    • Required for column sorting
  • columns.list - {Array} - Default: null - Filtering the column based on a dropdown list.
    • list.label - Displayed to the user for selection.
    • list.value - Value that is sent in the request.
  • columns.defaultSort - {String}
    • Initial sort value for API request
    • Will be overridden with any sorting changes

Default: null

defaultFailureMessage

String

Default: 'There was an issue. Please check below for errors.'

defaultSuccessMessage

String

Default: 'Success!'

errors

Array

Conforms to json:api spec: http://jsonapi.org/format/#errors

Default: null

filter

Object

Default: null

isColumnFilters

Boolean

Used in templates to determine if table header will allow filtering.

Default: false

isFailure

Boolean

Default: false

isLoading

Boolean

Default: false

isrecordLoaded

Function

Determine if record is loaded using a number of different property checks.

isSuccess

Boolean

Default: false

limit

Number

Used in request to construct pagination.

Default: 10

makeRequest

Boolean

Component will attempt to make a request to fetch the data.

Default: true

modelName

String

Model to be requested using makeRequest: true.

Default: null

offset

Number

Used in request to construct pagination.

Default: 0

page

Number

Default: 1

pageLimit

Number

Number passed to the pagination add-on.

Default: 0

paginationWrapperClass

String

Default: ''

query

Object

Constructs the query object to be used in request.

record

Object

This is typically bound to the controller and is used to iterate over the table's model data.

Default: null

showFilterRow

Boolean

Used to toggle the filter row bar.

Default: false

sort

String

Default: null

sortableClass

String

Default: 'sortable'

staticParams

Object

Object to pass in static query-params that will not change based on any filter/sort criteria. Additional table-wide filters that need to be applied in all requests. Typically bound to the controller.

// app/controllers/location.js
                    
                    export default Ember.Controller.extend({
                      staticParams: Ember.computed('model', function() {
                        return {
                          'filter[is-open]': '1',
                          include: 'hours',
                        };
                      }),
                      ...
                    });
                    
{{! app/templates/my-route.hbs }}
                    
                    {{#ember-tabular columns=columns modelName="user" record=users staticParams=staticParams as |section|}}
                      ...
                    {{/ember-tabular}}
                    

Default: null

tableClass

String

Default: 'table-bordered table-hover'

tableLoadedMessage

String

Once the isRecordLoaded is determined if true and no data exists then this is displayed.

Default: 'No Data.'

tableWrapperClass

String

Default: ''