xref: /openbmc/phosphor-webui/app/common/components/table/table.html (revision 1d83af072eb4c047ef08fae79775a34599ed5ed3)
18c80dbd9SYoshie Muranaka<table class="bmc-table {{$ctrl.size}}">
2b1f64248SYoshie Muranaka  <thead class="bmc-table__head">
3b1f64248SYoshie Muranaka    <!-- Header row (non-sortable) -->
4b1f64248SYoshie Muranaka    <tr ng-if="!$ctrl.sortable">
5b1f64248SYoshie Muranaka      <th ng-repeat="headerItem in $ctrl.header"
6fa56273dSYoshie Muranaka          class="bmc-table__column-header">
7b1f64248SYoshie Muranaka        {{headerItem.label}}
8b1f64248SYoshie Muranaka      </th>
9b1f64248SYoshie Muranaka    </tr>
10b1f64248SYoshie Muranaka    <!-- Header row (sortable) -->
11b1f64248SYoshie Muranaka    <tr ng-if="$ctrl.sortable">
12b1f64248SYoshie Muranaka      <th ng-repeat="headerItem in $ctrl.header track by $index"
13b1f64248SYoshie Muranaka          class="bmc-table__column-header">
14b1f64248SYoshie Muranaka        <span ng-if="!headerItem.sortable">
15b1f64248SYoshie Muranaka          {{headerItem.label}}
16b1f64248SYoshie Muranaka        </span>
17b1f64248SYoshie Muranaka        <span ng-if="headerItem.sortable"
18b1f64248SYoshie Muranaka              ng-click="$ctrl.onClickSort($index)"
19b1f64248SYoshie Muranaka              class="bmc-table__column-header--sortable">
20b1f64248SYoshie Muranaka          {{headerItem.label}}
21b1f64248SYoshie Muranaka          <!-- Sort icons -->
22b1f64248SYoshie Muranaka          <button class="sort-icon"
23b1f64248SYoshie Muranaka                  type="button"
24b1f64248SYoshie Muranaka                  aria-label="sort {{headerItem.label}}">
25b1f64248SYoshie Muranaka            <icon file="icon-arrow--up.svg"
26b1f64248SYoshie Muranaka                  ng-if="$index === $ctrl.activeSort"
27b1f64248SYoshie Muranaka                  ng-class="{
28b1f64248SYoshie Muranaka                    'sort-icon--descending': !$ctrl.sortAscending,
29b1f64248SYoshie Muranaka                    'sort-icon--ascending' : $ctrl.sortAscending }"
30b1f64248SYoshie Muranaka                  class="sort-icon--active"
31b1f64248SYoshie Muranaka                  aria-hidden="true"></icon>
32b1f64248SYoshie Muranaka            <span ng-if="$index !== $ctrl.activeSort"
33b1f64248SYoshie Muranaka                  class="sort-icon--inactive"
34b1f64248SYoshie Muranaka                  aria-hidden="true">
35b1f64248SYoshie Muranaka                <icon file="icon-arrow--up.svg"></icon>
36b1f64248SYoshie Muranaka                <icon file="icon-arrow--down.svg"></icon>
37b1f64248SYoshie Muranaka            </span>
38b1f64248SYoshie Muranaka          </button>
39b1f64248SYoshie Muranaka        </span>
40fa56273dSYoshie Muranaka      </th>
41fa56273dSYoshie Muranaka    </tr>
42fa56273dSYoshie Muranaka  </thead>
43b1f64248SYoshie Muranaka  <tbody class="bmc-table__body">
44fa56273dSYoshie Muranaka    <!-- Data rows -->
45b1f64248SYoshie Muranaka    <tr ng-if="$ctrl.data.length > 0"
46*1d83af07SYoshie Muranaka        ng-repeat-start="row in $ctrl.data track by $index"
47*1d83af07SYoshie Muranaka        class="bmc-table__row"
48*1d83af07SYoshie Muranaka        ng-class="{
49*1d83af07SYoshie Muranaka          'bmc-table__row--expanded': $ctrl.expandedRows.has($index)
50*1d83af07SYoshie Muranaka        }">
51*1d83af07SYoshie Muranaka      <!-- Row expansion trigger -->
52*1d83af07SYoshie Muranaka      <td ng-if="$ctrl.expandable"
53*1d83af07SYoshie Muranaka          class="bmc-table__cell">
54*1d83af07SYoshie Muranaka        <button type="button"
55*1d83af07SYoshie Muranaka                class="btn  btn--expand"
56*1d83af07SYoshie Muranaka                aria-label="expand row"
57*1d83af07SYoshie Muranaka                ng-click="$ctrl.onClickExpand($index)">
58*1d83af07SYoshie Muranaka          <icon file="icon-chevron-right.svg" aria-hidden="true"></icon>
59*1d83af07SYoshie Muranaka        </button>
60*1d83af07SYoshie Muranaka      </td>
61fa56273dSYoshie Muranaka      <!-- Row item -->
628c80dbd9SYoshie Muranaka      <td ng-repeat="item in row.uiData track by $index"
63fa56273dSYoshie Muranaka          class="bmc-table__cell">
648c80dbd9SYoshie Muranaka          <ng-bind-html ng-bind-html="item"></ng-bind-html>
65fa56273dSYoshie Muranaka      </td>
66fa56273dSYoshie Muranaka      <!-- Row Actions -->
67bb688795SYoshie Muranaka      <td ng-if="$ctrl.rowActionsEnabled"
68fa56273dSYoshie Muranaka          class="bmc-table__cell  bmc-table__row-actions">
69bb688795SYoshie Muranaka        <table-actions
70bb688795SYoshie Muranaka          actions="row.actions"
71bb688795SYoshie Muranaka          emit-action="$ctrl.onEmitTableAction(action, row)">
72bb688795SYoshie Muranaka        </table-actions>
73fa56273dSYoshie Muranaka      </td>
74fa56273dSYoshie Muranaka    </tr>
75*1d83af07SYoshie Muranaka    <!-- Expansion row -->
76*1d83af07SYoshie Muranaka    <tr ng-repeat-end
77*1d83af07SYoshie Muranaka        ng-if="$ctrl.expandedRows.has($index)"
78*1d83af07SYoshie Muranaka        class="bmc-table__expansion-row">
79*1d83af07SYoshie Muranaka      <td class="bmc-table__cell"></td>
80*1d83af07SYoshie Muranaka      <td class="bmc-table__cell"
81*1d83af07SYoshie Muranaka          colspan="{{$ctrl.header.length - 1}}">
82*1d83af07SYoshie Muranaka        <ng-bind-html
83*1d83af07SYoshie Muranaka          ng-bind-html="row.expandContent || 'No data'">
84*1d83af07SYoshie Muranaka        </ng-bind-html>
85*1d83af07SYoshie Muranaka      </td>
86*1d83af07SYoshie Muranaka    </tr>
87fa56273dSYoshie Muranaka    <!-- Empty table -->
88*1d83af07SYoshie Muranaka    <tr ng-if="$ctrl.data.length === 0"
89*1d83af07SYoshie Muranaka        class="bmc-table__expansion-row">
90*1d83af07SYoshie Muranaka      <td class="bmc-table__cell"
91*1d83af07SYoshie Muranaka          colspan="{{$ctrl.header.length}}">No data</td>
92fa56273dSYoshie Muranaka    </tr>
93fa56273dSYoshie Muranaka  </tbody>
94fa56273dSYoshie Muranaka</table>