blob: 387b18dd8b763075aa4d961ea7f69297ceece528 [file] [log] [blame]
<div class="bmc-table__container">
<table-toolbar ng-if="$ctrl.selectable"
selection-count="$ctrl.selectedRows.size"
active="$ctrl.selectedRows.size > 0"
actions="$ctrl.batchActions"
emit-action="$ctrl.onEmitBatchAction(action)"
emit-close="$ctrl.onToolbarClose()"
ng-animate-children="true">
</table-toolbar>
<table class="bmc-table {{$ctrl.size}}"
ng-class="{
'bmc-table--sortable': $ctrl.sortable,
'bmc-table--expandable': $ctrl.expandable,
'bmc-table--selectable': $ctrl.selectable,
'bmc-table--row-actions-enabled': '$ctrl.rowActionsEnabled',
}">
<thead class="bmc-table__head">
<!-- Header row -->
<tr>
<!-- Expandable empty cell -->
<th ng-if="$ctrl.expandable"
class="bmc-table__column-header"></th>
<!-- Select checkbox -->
<th ng-if="$ctrl.selectable"
class="bmc-table__column-header">
<table-checkbox ng-model="$ctrl.selectHeaderCheckbox"
indeterminate="$ctrl.someSelected"
emit-change="$ctrl.onHeaderSelectChange(checked)">
</table-checkbox>
</th>
<!-- Header items -->
<th ng-repeat="headerItem in $ctrl.header track by $index"
class="bmc-table__column-header">
<span ng-if="!$ctrl.sortable || !headerItem.sortable">
{{headerItem.label}}
</span>
<span ng-if="$ctrl.sortable && headerItem.sortable"
ng-click="$ctrl.onClickSort($index)"
class="bmc-table__column-header--sortable">
{{headerItem.label}}
<!-- Sort icons -->
<button class="sort-icon"
type="button"
aria-label="sort {{headerItem.label}}">
<icon file="icon-arrow--up.svg"
ng-if="$index === $ctrl.activeSort"
ng-class="{
'sort-icon--descending': !$ctrl.sortAscending,
'sort-icon--ascending' : $ctrl.sortAscending }"
class="sort-icon--active"
aria-hidden="true"></icon>
<span ng-if="$index !== $ctrl.activeSort"
class="sort-icon--inactive"
aria-hidden="true">
<icon file="icon-arrow--up.svg"></icon>
<icon file="icon-arrow--down.svg"></icon>
</span>
</button>
</span>
</th>
<!-- Row actions empty cell -->
<th ng-if="$ctrl.rowActionsEnabled"
class="bmc-table__column-header"></th>
</tr>
</thead>
<tbody class="bmc-table__body">
<!-- Data rows -->
<tr ng-if="$ctrl.data.length > 0"
ng-repeat-start="row in $ctrl.data track by $index"
class="bmc-table__row"
ng-class="{
'bmc-table__row--expanded': $ctrl.expandedRows.has($index),
'bmc-table__row--selected': $ctrl.selectedRows.has($index),
}">
<!-- Row expansion trigger -->
<td ng-if="$ctrl.expandable"
class="bmc-table__cell">
<button type="button"
class="btn btn--expand"
aria-label="expand row"
ng-click="$ctrl.onClickExpand($index)">
<icon file="icon-chevron-right.svg" aria-hidden="true"></icon>
</button>
</td>
<!-- Row checkbox -->
<td ng-if="$ctrl.selectable"
class="bmc-table__cell">
<table-checkbox ng-if="row.selectable"
ng-model="row.selected"
emit-change="$ctrl.onRowSelectChange($index)">
</table-checkbox>
</td>
<!-- Row item -->
<td ng-repeat="item in row.uiData track by $index"
class="bmc-table__cell">
<ng-bind-html ng-bind-html="item"></ng-bind-html>
</td>
<!-- Row Actions -->
<td ng-if="$ctrl.rowActionsEnabled"
class="bmc-table__cell bmc-table__row-actions">
<table-actions
ng-if="row.actions"
actions="row.actions"
emit-action="$ctrl.onEmitRowAction(action, row)">
</table-actions>
</td>
</tr>
<!-- Expansion row -->
<tr ng-repeat-end
ng-if="$ctrl.expandedRows.has($index)"
class="bmc-table__expansion-row">
<td class="bmc-table__cell"></td>
<td class="bmc-table__cell"
colspan="{{$ctrl.header.length + $ctrl.sortable +
$ctrl.expandable + $ctrl.rowActionsEnabled}}">
<ng-bind-html
ng-bind-html="row.expandContent || 'No data'">
</ng-bind-html>
</td>
</tr>
<!-- Empty table -->
<tr ng-if="$ctrl.data.length === 0"
class="bmc-table__expansion-row">
<td class="bmc-table__cell"
colspan="{{$ctrl.header.length + $ctrl.sortable +
$ctrl.expandable + $ctrl.rowActionsEnabled}}">
No data
</td>
</tr>
</tbody>
</table>
</div>