API Docs for: 3.0.1.91d25ad1
Show:

Components.ModelsTable Class

Extends Ember.Component

Table-component with pagination, sorting and filtering.

It should be used when whole dataset is already loaded. For server-side pagination, filtering and sorting models-table-server-paginated should be used.

Basic usage example:

<ModelsTable @data={{model}} @columns={{columns}} />

Usage with block context:

<ModelsTable @data={{data}} @columns={{columns}} as |MT|>
  <MT.GlobalFilter />
  <MT.DataGroupBySelect />
  <MT.ColumnsDropdown />
  <MT.Table />
  <MT.Footer />
</ModelsTable>

Usage with block content 2:

<ModelsTable @data={{data}} @columns={{columns}} as |MT|>
  <MT.GlobalFilter />
  <MT.DataGroupBySelect />
  <MT.ColumnsDropdown />
  <MT.Table />
  <MT.PaginationNumeric />
  <MT.PaginationSimple />
  <MT.Summary />
  <MT.PageSizeSelect />
</ModelsTable>

ModelsTable yields references to the following contextual components:

Check own docs for each component to get detailed info.

References to the following properties are yielded:

References to the following actions are yielded:

ModelsTable has a lot of options you may configure, but there are two required properties called data and columns. First one contains data (e.g. list of records from the store). Second one is a list of table's columns (check models-table-column for available options).

Item Index

Methods

_checkColumnTitles

() protected

_clearFilters

() protected

Clear all filters.

_createColumn

(
  • options
)
Utils.ModelsTableColumn

Create a column. This can be overwritten if you need to use your own column object.

Override must something like:

Parameters:

Example:

_createColumn(options) {
  const column = this._createColumnInstance(options);
  setProperties(column, options);
  return this._postProcessColumn(column);
}

_createColumnInstance

(
  • options
)
protected

Generate hash for column-extend

Parameters:

_multiColumnsSorting

() protected

Set sortProperties when multi-columns sorting is used

_postProcessColumn

(
  • column
)
protected

Set values for some column-properties after its creation

Parameters:

Returns:

Utils.ModelsTableColumn

_sendColumnsVisibilityChangedAction

() protected

Send columnsVisibilityChangedAction-action when user changes which columns are visible. Action is sent if columnsVisibilityChangedAction is a closure action

_setupColumns

() private

Create new properties for columns

_setupColumnsComponent

() protected

Create new properties for columns for components

_setupColumnsOnce

() protected

Wrapper for _setupColumns to call it only once when observer is fired

_setupPageSizeOptions

() protected

Provide backward compatibility with pageSizeValues equal to an array with numbers and not objects pageSizeValues is live as is, pageSizeOptions is used in the templates

_setupSelectedRows

() protected

Preselect table rows if selectedItems is provided

multipleSelected may be set true if selectedItems has more than 1 item

_singleColumnSorting

() protected

Set sortProperties when single-column sorting is used

collapseRowOnNavigate

() protected

Collapse open rows when user change page size or moved to the another page

filteredContentObserver

() protected

filteredContentObserverOnce

() protected

focus

() protected

Focus on 'Global filter' on component render

forceToFirstPage

() protected

Handler for global filter and filter by each column

rebuildTable

() protected

Rebuild the whole table. This can be called to force a complete re-render of the table.

refilter

() protected

setup

() protected

Component init

Set visibility and filtering attributes for each column

updateColumns

() protected

Recalculate processedColumns when the columns attr changes

updateHeaderCellsColspan

() protected

Update colspans for table header cells

updateHeaderCellsColspanOnce

() protected

updateState

(
  • changes
)
protected

Parameters:

Returns:

object

userInteractionObserver

() protected

Send displayDataChangedAction-action when user does sort of filter. Action is sent if displayDataChangedAction is a closure-action

userInteractionObserverOnce

() protected

visibleContentObserver

() protected

Show first page if for some reasons there is no content for current page, but table data exists

visibleContentObserverOnce

() protected

Properties

allColumnsAreHidden

Boolean protected

True if all processedColumns are hidden by isHidden

Default: false

anyFilterUsed

Boolean protected

true if global filter or filter by any column is used

Default: false

arrangedContent

Object[] protected

filteredContent sorted by needed properties

Default: []

arrangedContentLength

Number protected

Alias to arrangedContent.length

Default: 0

checkTextTranslations

Boolean

Value for development purposes. Used to check translation issues like:

  • Auto generated titles for columns

Default: false

collapsedGroupValues

Array[]

List of grouped property values where the groups are collapsed

Default: []

collapseNumPaginationForPagesCount

Number

Used in numeric pagination. If pages count is less than collapseNumPaginationForPagesCount, all pages will be shown. E.g. for collapseNumPaginationForPagesCount = 4 and pagesCount = 4 pagination will be 1 2 3 4, however for collapseNumPaginationForPagesCount = 1 and pagesCount = 4 pagination will be 1 2 ... 4

Default: 1

columnComponents

Object

Hash of components to be used for columns.

See ModelsTableColumn, property component

Default: {}

columnDropdownOptions

Internal.ColumnDropdownOptions protected

These are options for the columns dropdown. By default, the 'Show All', 'Hide All' and 'Restore Defaults' buttons are displayed.

columnFieldsToCheckUpdate

String[]

columns fields which are observed to update shown table-columns It is used only if columnsAreUpdateable is true

Default: ['propertyName', 'component']

columns

Utils.ModelsTableColumn[]

Table columns. Check ModelsTableColumn for available properties

It's a second of the two attributes you must set to the component

Default: []

columnsAreUpdateable

Boolean

Determines if processedColumns will be updated if columns are changed (propertyName and template are observed)

IMPORTANT All filter, sort and visibility options will be dropped to the default values while updating

Default: false

columnSets

Internal.ColumnSet[]

Sets of columns that can be toggled together. Each object should have:

  • label (string) - The label for the set. This will be displayed in the columns dropdown.
  • showColumns (array|Function) - This should either be an array of propertyNames to show, or a function. If it is a function, the function will be called with the processedColumns as attribute.
  • hideOtherColumns (boolean) - If this is true (default), all columns not specified in showColumns will be hidden. If this is set to false, other columns will be left at whatever visibility they were before.
  • toggleSet (boolean) - If this is true (default is false), the set columns will be shown if one of them is currently hidden, else they will all be hidden. Settings this will result in a default of hideOtherColumns=false

Default: []

currentGroupingPropertyName

String

Property name used now for grouping rows

IMPORTANT It should be set initially if useDataGrouping is set to true

Default: null

currentPageNumber

Number

Currently shown page number. It may be set initially

Default: 1

currentPageNumberOptions

SelectOption protected

List of options for pageNumber-selectBox

Default: []

data

Object[]

All table records

It's a first of the two attributes you must set to the component

Default: []

dataGroupOptions

Internal.SelectOption[] protected

Default: []

dataGroupProperties

String[] | Object[]

List of property names can be used for grouping

It may be a list of strings of list of objects. In first case label and value in the select-box will be the same. In the second case you must set label and value properties for each list item

IMPORTANT It must contain currentGroupingPropertyName-value

Default: []

displayGroupedValueAs

String

Determines how grouped value will be displayed - as a row or column

Allowed values are row and column

Default: 'row'

doFilteringByHiddenColumns

Boolean

Determines if filtering should be done by hidden columns

Notice: after changing this value filtering results will be updated only after filter options are changed

Default: true

expandedItems

Object[]

Expanded row items.

It's set to the initial value when current page or page size is changed

Default: []

expandedRowComponent

Object

Component used in the 'expanded' row

It will receive several options:

Default: null

Example:

<ModelsTable
  @data={{model}}
  @columns={{columns}}
  @expandedRowComponent={{component "expanded-row"}}
/>

filteredContent

Object[] protected

data filtered with a global filter and columns filters

Filtering by columns is ignored if useFilteringByColumns is set to false

Default: []

filteringIgnoreCase

Boolean

Determines if filtering (global and by column) should ignore case

Default: false

filterString

String

Global filter value

Default: ''

firstIndex

Number protected

Index of the first currently shown record

Default: 0

focusGlobalFilter

Boolean

Determines if focus should be on the 'Global filter'-field on component render

Default: false

forceToFirstPageProps

String[] protected

Default: ['processedColumns.@each.filterString', 'filterString', 'pageSize']

globalFilterUsed

Boolean protected

true if some value is set to the global filter

Default: false

groupedArrangedContent

Object[] protected

filteredContent grouped by currentGroupingPropertyName sorted by needed properties

Default: []

groupedHeaders

Internal.GroupedHeader[]

List of the additional headers. Used to group columns.

Each object may have such fields:

  • title (string) - Header for grouped column
  • colspan (number) - HTML colspan attr
  • rowspan (number) - HTML rowspan attr

Default: []

groupedVisibleContent

Object[] protected

Content of the current table page when rows grouping is used

groupedVisibleContent sliced for currently shown page

Default: []

groupedVisibleContentValuesOrder

Object[] protected

List of grouped property values in order to show groups in the table

Default: []

groupHeaderCellComponent

Object

Component for header cell for column with grouping value

This component won't be used if useDataGrouping is not true and displayGroupedValueAs is not columns

Default: null

Example:

<ModelsTable
  @data={{model}}
  @columns={{columns}}
  @groupHeaderCellComponent={{component "group-header-cell"}}
/>

Component will receive such options:

  • currentGroupingPropertyName - property name used to group rows in the current moment

groupingRowComponent

Object

Component used in the row with a grouped value

This component won't be used if useDataGrouping is not true

Component will receive several options:

Default: null

Example:

<ModelsTable
  @data={{model}}
  @columns={{columns}}
  @groupingRowComponent={{component "grouping-row"}}
/>

groupSummaryRowComponent

Object

This component won't be used if useDataGrouping is not true

Component will receive several options:

  • visibleProcessedColumns - bound from visibleProcessedColumns
  • themeInstance - bound from themeInstance
  • groupedItems - list of all rows group items
  • visibleGroupedItems - list of rows group items shown on the current table page
  • selectedGroupedItems - list of selected rows group items
  • expandedGroupedItems - list of expanded rows group items

Default: null

Example:

<ModelsTable
  @data={{model}}
  @columns={{columns}}
  @groupSummaryRowComponent={{component "group-summary-row"}}
/>

isLastPage

Boolean protected

Is user on the last page

isolated

Boolean

Flag to determine if component should bubble inner click action handler

It's useful when models-table is used inside the row-expand

Default: false

lastIndex

Number protected

Index of the last currently shown record

Default: 10

multipleColumnsSorting

Boolean

Determines if multi-columns sorting should be used

Default: true

multipleExpand

Boolean

true - allow to expand more than 1 row, false - only 1 row may be expanded in the same time

Default: false

multipleSelect

Boolean

Allow or disallow to select multiple rows. If false - only one row may be selected in the same time

Default: false

noHeaderFilteringAndSorting

Boolean protected

true if all processedColumns don't use filtering and sorting

Default: false

pagesCount

Number protected

Number of pages

Default: 0

pageSize

Number

Number of records shown on one table-page

Default: 10

pageSizeOptions

SelectOption protected

List of options for pageSize-selectBox It's mapped from pageSizeValues This value should not be set manually!

Default: []

pageSizeValues

Number[]

List of possible pageSize values. Used to change size of visibleContent

Default: [10, 25, 50]

processedColumns

Utils.ModelsTableColumn[] protected

List of columns shown in the table. It's created from the columns provided to the component

Default: []

publicAPI

Unknown

Public API that allows for programmatic interaction with the component

  • refilter() - Invalidates the filteredContent property, causing the table to be re-filtered.
  • recordsCount - Size of the current arranged content

Default: null

registerAPI

Function

Action sent on init to give access to the Public API

Default: null

selectedItems

Object[]

List of currently selected row items

Row may be selected by clicking on it, if selectRowOnClick is set to true

Default: []

selectRowOnClick

Boolean

Allow or disallow to select rows on click. If false - no row can be selected

Default: true

showColumnsDropdown

Boolean

Determines if columns-dropdown should be shown

Default: true

showComponentFooter

Boolean

Determines if component footer should be shown on the page

Default: true

showCurrentPageNumberSelect

Boolean

Determines if dropdown for current page number should be shown near the pagination block

Default: true

showGlobalFilter

Boolean

Determines if 'Global filter'-field should be shown

Default: true

showPageSize

Boolean

Determines if page size should be shown

Default: true

sortByGroupedFieldDirection

String protected

Sort direction for grouped property values

Default: 'asc'

sortFunctions

Object protected

Hash of custom functions to sort table rows

sortMap

Internal.SortMap

Order of sorting for each columns. Unsorted column firstly become sorted ASC, then DESC, then sorting is dropped again

sortProperties

Unknown protected

List of properties to sort table rows

Each value is like 'propertyName:sortDirection'

ThemeInstance

Themes.Bootstrap3Theme

themeInstance is an instance of DefaultTheme or it's children. By default models-table uses BootstrapTheme instance.

You may create your own theme-class and set themeInstance to it's instance. Check Theme properties you may define in your own theme.

useDataGrouping

Boolean

Determines if rows should be grouped for some property

Grouped value may be shown in the separated row on the top of the group or in the first column (in the cell with rowspan) in the each group (see displayGroupedValueAs)

Generally you should not show column with property which is used for grouping (but it's up to you)

Default: false

useFilteringByColumns

Boolean

Determines if filtering by columns should be available to the user

Default: true

useNumericPagination

Boolean

Determines if numeric pagination should be used

Default: false

visibleContent

Object[] protected

Content of the current table page

arrangedContent sliced for currently shown page

Default: []

visibleProcessedColumns

Object[] protected

List of the currently visible columns

Default: []

Events

clearFilters

protected

Clear all column filters and global filter

May trigger sending displayDataChangedAction

clickOnRow

protected

Handler for row-click

Toggle selected-state for row. Select only one or multiple rows depends on multipleSelect value. May trigger sending displayDataChangedAction

Event Payload:

collapseAllRows

protected

Collapse all rows in the current page

May trigger sending displayDataChangedAction

collapseRow

protected

Collapse selected row

May trigger sending displayDataChangedAction

Event Payload:

columnsVisibilityChangedAction

Closure action sent on change of visible columns

The action will receive an array of objects as parameter, where every object looks like this: { propertyName: 'firstName', isHidden: true, mayBeHidden: false }

Example:

<ModelsTable
                      @data={{model}}
                      @columns={{columns}}
                      @columnsVisibilityChangedAction={{action "someAction"}}
                    />
                    

displayDataChangedAction

Closure action sent on user interaction

Action will send one parameter - object with fields:

  • sort - list with sort value propertyName:sortDirection
  • currentPageNumber - currently shown page number
  • pageSize - current page size
  • filterString - global filter value
  • filteredContent - filtered data
  • selectedItems - list with selected row items
  • expandedItems - list with expanded row items
  • columnFilters - hash with fields equal to filtered propertyName and values equal to filter values

Example:

<ModelsTable
                      @data={{model}}
                      @columns={{columns}}
                      @displayDataChangedAction={{action "someAction"}}
                    />
                    

doubleClickOnRow

protected

Handler for double-click on row

May trigger sending rowDoubleClickAction

Event Payload:

expandAllRows

protected

Expand all rows in the current page

It works only if multipleExpand is set to true. May trigger sending displayDataChangedAction

expandRow

protected

Expand selected row

It will cause expandedRowComponent to be used for it. It will collapse already expanded row if multipleExpand is set to false. Expanding is assigned to the record itself and not their index. So, if page #1 has first row expanded and user is moved to any another page, first row on new page won't be expanded. But when user will be back to the first page, first row will be expanded. May trigger sending displayDataChangedAction

Event Payload:

gotoCustomPage

protected

Pagination click-handler

It moves user to the selected page. Check models-table/pagination-numeric and models-table/pagination-simple for usage examples. May trigger sending displayDataChangedAction

Event Payload:

hideAllColumns

protected

Hide all columns that may be hidden (see mayBeHidden)

May trigger sending columnsVisibilityChangedAction

hoverOnRow

protected

Handler for row-hover

May trigger sending rowHoverAction

Event Payload:

outRow

protected

Handler for row-hover

May trigger sending rowOutAction

Event Payload:

restoreDefaultVisibility

protected

Restore columns visibility values according to their default visibility settings (see defaultVisible)

May trigger sending columnsVisibilityChangedAction

rowDoubleClickAction

Closure action sent on row double-click

Example:

<ModelsTable
                      @data={{model}}
                      @columns={{columns}}
                      @rowDoubleClickAction={{action "someAction"}}
                    />
                    

rowHoverAction

Closure action sent on row hover

Example:

<ModelsTable
                      @data={{model}}
                      @columns={{columns}}
                      @rowHoverAction={{action "someAction"}}
                    />
                    

rowOutAction

Closure action sent on row out

Example:

<ModelsTable
                      @data={{model}}
                      @columns={{columns}}
                      @rowOutAction={{action "someAction"}}
                    />
                    

showAllColumns

protected

Show all columns

Set each column isHidden value to false. May trigger sending columnsVisibilityChangedAction

sort

protected

Sort selected column by sortedBy or propertyName

It will drop sorting for other columns if multipleColumnsSorting is set to false. It will add new sorting if multipleColumnsSorting is set to true. May trigger sending displayDataChangedAction. Table will be dropped to the first page if sorting is done

For multiColumns-sorting calling sort will change sort-order. E.g.:

Event Payload:

Example:

sortProperties = ['a:asc', 'b:asc', 'c:desc'];
                    sort({propertyName: 'b'}); // sortProperties now is ['a:asc', 'c:desc', 'b:desc']
                    

toggleAllSelection

protected

Select/deselect all rows

May trigger sending displayDataChangedAction

toggleColumnSet

protected

Toggle visibility for every column in the selected columns set

It ignore columns that can't be hidden (see mayBeHidden). May trigger sending columnsVisibilityChangedAction

Event Payload:

toggleGroupedRows

protected

Collapse or expand rows group

Event Payload:

toggleGroupedRowsExpands

protected

Expand or collapse all rows in the rows group

IMPORTANT multipleExpand should be set to true otherwise this action won't do anything

Event Payload:

toggleGroupedRowsSelection

protected

Select/deselect rows from the rows group

IMPORTANT multipleSelect should be set to true otherwise this action won't do anything

May trigger sending displayDataChangedAction

Event Payload:

toggleHidden

protected

Toggle visibility for provided column

It doesn't do nothing if column can't be hidden (see mayBeHidden). May trigger sending columnsVisibilityChangedAction

Event Payload: