ptcs-collection¶
Overview¶
The collection component contains a collection of arbitrary UI components. The client has full control over the creation of the components and can chose between three layouts: grid, flex, or table.
The component is data driven; the client supplies an array of items and methods that convert the items into UI components. The returned components are managed in a virtual scroller, allowing the component to handle many sub-components efficiently.
The collection component supports sorting and grouping with headers and footers.
Usage Example¶
Basic Usage¶
<ptcs-collection items="[[items]]" item-width="[[itemWidth]]" item-height="[[itemHeight]]"
create-cell="[[createCell]]" assign-cell="[[assignCell]]"></ptcs-collection>
Note that itemWidth
, itemHeight
, createCell
, and assignCell
are callback methods (functions).
Grouping with headers and footers¶
<ptcs-collection items="[[items]]" item-width="[[itemWidth]]" item-height="[[itemHeight]]"
create-cell="[[createCell]]" assign-cell="[[assignCell]]"
group="groupKey" headers footers></ptcs-collection>
Component API¶
Properties¶
Property | Type | Description | Default | Triggers a changed event? |
---|---|---|---|---|
assignCell | Function | Binds a cell element, created by createCell , to an item in the items array. The prototype is: (cellElement , item , index , selected , collection ). Note: selected is true if the element is selected. collection is the collection component. It can e.g. be used to check if the collection has been disabled. |
||
assignFooter | Function | Binds a footer element, created by createFooter , to a group key (a string). The prototype is: (footerElement , groupKey , set ). Note: set is a Set that contains all items that belongs to the group. |
||
assignHeader | Function | Binds a header element, created by createHeader , to a group key (a string). The prototype is: (headerElement , groupKey , set ). Note: set is a Set that contains all items that belongs to the group. |
||
autoSelectFirstItem | Boolean | Automatically select the first item of items`` when starting?| false` |
||
autoScroll | Boolean | Scroll to the closest selected item when the collection is resized? | false |
|
columnGap | Number or String | Specifies the gap between columns | 8px |
|
cellTabKeyScope | String | Controls the scope of navigation when interacting with the contents of a cell using the keyboard. When the scope is set to cell , using the TAB inside a cell loops over the elements within the cell. When the scope is set to collection , the TAB key navigates to the next cell in the collection after the last element in the current cell is selected. |
cell |
|
createCell | Function | Function that returns an empty cell DOM element: () => Element . The element will be used by assignCell to assign an item to it. Note that the element can be reused by any number of items. |
||
createFooter | Function | Function that returns an empty footer DOM element: () => Element . The element will be used by assignFooter to assign an group identfier to it. Note that the element can be reused by any number of groups. |
||
createHeader | Function | Function that returns an empty header DOM element: () => Element . The element will be used by assignHeader to assign an group identfier to it. Note that the element can be reused by any number of groups. |
||
dataState | String | Specifies an explicit data state: data - display items, loading - display message as specified by iconStateLoading and labelStateLoading . error - display message as specified by iconStateError and labelStateError |
data |
|
disabled | Boolean | Disable component? | false |
|
disableWrapping | Boolean | Put whole group in a single row? (Only supported in the flex layout.) | false |
|
footers | Boolean or String | Show footers? If true (Boolean) show footers. If pinned (String) show footers and pin bottomost footer to bottom of collection viewport. |
false |
|
group | String or Function | Specify grouping. If group is a string, it specifies the name of a field that contains a group key in the items. If group is a function, it should use the following prototype: (item , index ) => String . The returned value is the grouping key. |
||
groupGap | Number or String | Specifies the gap between groups. Only applicable if grouping is enabled. | 8px |
|
headers | Boolean or String | Show headers? If true (Boolean) show headers. If pinned (String) show headers and pin topmost header to top of collection viewport. |
false |
|
rowHorizontalAlignment | String | Specify horizontal alignment: space-between , space-evenly , left , center , right , stretch . |
space-evenly |
|
iconStateEmpty | String | Specify icon to display when items is not an array |
||
iconStateError | String | Specify icon to display when dataState is error |
||
iconStateLoading | String | Specify icons to display when dataState is loading |
||
iconStateNoData | String | Specify icon to display when items is not an array |
||
itemHeight | Function | Function that returns the DOM element height of an item: (items[index], index) => height (a number ) |
||
items | Array | The rendered collection items. | ||
itemWidth | Function | Function that returns the DOM element width of an item: (items[index], index) => width (a number ) |
||
labelStateEmpty | String | Specify label to display when items is an empty array |
||
labelStateError | String | Specify label to display when dataState is error |
||
labelStateLoading | String | Specify label to display when dataState is loading |
||
labelStateNoData | String | Specify label to display when items is not an array |
||
lastLineAlignment | String | Specify horizontal alignment on the last row of a group or of the collection. The supported values are: space-between , space-evenly , left , center , right , stretch . Note that lastLineAlignment is only applicable when the layout is flex . If unassigned, the value of rowHorizontalAlignment is used. |
||
layout | String | Select layout method: flex , grid , or table . flex places as many cells as fits on each rown. grid aligns the cells in columns. table uses one cell per row. |
flex |
|
leftAlignLastRow | Boolean | Pad the last rows (plural when grouping is active) with ghost cells? Only available in flex mode. |
false |
|
rowGap | Number or String | Specifies the gap between rows | 4px |
|
selectionMode | String | Specify selection mode: none - no cells can be selected. single - one cell can be selected. multiple - any number of cells can be selected. |
none |
|
spaceAbove | Number or String | Specifies the space above the first row | 0 |
|
spaceBelow | Number or String | Specifies the space below the last row | 0 |
|
spaceLeft | Number or String | Specifies the space to the left of each row | 0 |
|
spaceRight | Number or String | Specifies the space the right od each row | 0 |
|
sort | String or Function | Specify sorting. If sort is a string, it specifies a name of a field that contains a sort key in the items. The sort key is sorted numerically when comparing two numbers and alphabetically otherwise. If sort is a function, it should use the following prototype: (itemA , itemB ) => Number . The returned value should be less than zero if itemA < itemB, greater than zero if itemA > itemB, and zero if the items have the same sort position. |
||
stretchRowHeight | Booelan | If disableWrapping is true and group unassigned, stretches the height of the (single) row to the collection height. |
false |
|
uniformHeight | Boolean | Use the same row height for all rows? | false |
|
rowVerticalAlignment | String | Specify vertical alignment: top , center , bottom , stretch . |
center |
|
preventCellContextMenu | Boolean | Specify if right-click menu is visible for the collection cells | false |
Events¶
Name | Data | Description |
---|---|---|
selection | selection | Triggered when the current selection changes. If selectionMode is single , then selection is an integer that specifies the index of the selected item or -1 if no item is selected. If selectionMode is multiple , then selection is an array of integers that specifies the indexes of the selected items or null if no items are selected. |
cell-select-mode | index, selected | Triggered for each item when its selection state changes. index specifies the index of the item. selected is true if the item has become selected or false if it has become unselected. |
cell-clicked | index, clickedOn | Triggered when the user clicks on a cell. index is the index of the clicked item. clickedOn is the DOM node that was clicked. |
cell-double-clicked | index, clickedOn | Triggered when cell is double clicked. index is the index of the clicked item. clickedOn is the DOM node that was clicked. |
cell-long-clicked | index, clickedOn | Triggered when cell is long clicked. index is the index of the clicked item. clickedOn is the DOM node that was clicked. |
cell-right-clicked | index, clickedOn | Triggered when cell is right clicked. index is the index of the clicked item. clickedOn is the DOM node that was clicked. |
Methods¶
Signature | Description |
---|---|
refreshCell(index) | Inform the collection that the item at index needs to be redrawn. Note that the item will only be redrawn if it is currently visible (inside the viewport) |
reLayout() | Inform the collection that the entire layout must be recomputed. This is needed whenever any item changes sizes. The request is debounced; it will take a while before it takes effect, so there is no performance penalty to call it several times. |
select(index, selected) | Manually select or unselect individual items. index is the index of the item, selected should be: true if the item should be selected, false if the item should be unselected, and undefined if the current selection state should toggle. |
selectAll() | If selectionMode is multiple , select all items. |
unselectAll() | Unselect all items |
Styling¶
Parts¶
Part | Description |
---|---|
container | The element that contains the virtual scroller (that displays the items) |
footer | A footer row |
header | A header row |
message-container | The container that contains an message, when items is invalid or empty, or dataState is error or loading . Note that the message is only displayed if the client has specified an icon and / or a label for the message state. |
message-icon | The message icon |
message-label | The message label |
row | A row that contains cell |