table element
Rows of records with formatted columns.
Renders
<table> inside a scrollable wrapper, a header row from the cells labelsRequired
cells and data.Native apps
Web, and server-driven native apps
Syntax
table element
{ "type": "table" }An element lives in a screen's sections, another element's elements, a layout slot or a component root.
Properties
| Property | Type | Description |
|---|---|---|
cells | array of object | |
data | object |
|
currency | string | ISO currency for format=currency |
empty | element |
Plus the properties every element accepts: id, className, style, responsive, states, animation, visible, ariaLabel, attributes and more.
Example
table example
{
"type": "table",
"data": {
"source": "DATABASE.products",
"columns": ["name", "stock", "price"],
"sort": { "field": "name" },
"limit": 3
},
"cells": [
{ "field": "name", "label": "Product" },
{ "field": "stock", "label": "Stock", "format": "number" },
{ "field": "price", "label": "Price", "format": "currency" }
],
"currency": "INR",
"empty": { "type": "text", "content": "No products." }
}Each cell has field, label and optional format (text number currency percent date datetime date-long date-short time markdown).
Expected output
The HTML IWC rendered for the example above (inside the page's content wrapper). Class names such as i807b63fc are generated per element for its scoped CSS.
Rendered HTML
<div class="iwc-page ipage" id="iwc-content">
<div class="iwc-table i8f0b71c1 iwc-table-wrap">
<table class="iwc-table">
<thead>
<tr>
<th scope="col">
Product
</th>
<th scope="col">
Stock
</th>
<th scope="col">
Price
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
Desk Lamp
</td>
<td>
12
</td>
<td>
₹2,499.00
</td>
</tr>
<tr>
<td>
Dot Notebook
</td>
<td>
7
</td>
<td>
₹399.00
</td>
</tr>
<tr>
<td>
Stoneware Mug
</td>
<td>
40
</td>
<td>
₹649.00
</td>
</tr>
</tbody>
</table>
</div>
</div>Data, conditions & styling
- Conditional rendering:
"visible": {"auth": "signed-in"},{"roles": ["admin"]}or an expression such as"=product.stock > 0". Decided on the server: hidden elements are never sent. - Data binding:
bindtakes text from data (name,user.name,props.title,params.slug,state.cart.count);bindsbinds attributes. Containers become data-driven withdata+item. See data binding. - Styling:
classNamefor your stylesheets,stylefor CSS in JSON,statesfor hover/focus/active,animationfor entrance motion. See the style property reference. - Responsive behaviour:
responsiveapplies CSS at or below a breakpoint ({"mobile": {"padding": "12px"}}); grids also takeresponsiveColumns.