xref: /openbmc/phosphor-webui/app/common/components/table/table.html (revision 5b8cef81cfa896ecdb0b6ad9d43c78d67d087a62)
1*5b8cef81SYoshie Muranaka<div class="bmc-table__container">
2*5b8cef81SYoshie Muranaka  <table-toolbar  ng-if="$ctrl.selectable"
3*5b8cef81SYoshie Muranaka                  selection-count="$ctrl.selectedRows.size"
4*5b8cef81SYoshie Muranaka                  active="$ctrl.selectedRows.size > 0"
5*5b8cef81SYoshie Muranaka                  actions="$ctrl.batchActions"
6*5b8cef81SYoshie Muranaka                  emit-action="$ctrl.onEmitBatchAction(action)"
7*5b8cef81SYoshie Muranaka                  emit-close="$ctrl.onToolbarClose()"
8*5b8cef81SYoshie Muranaka                  ng-animate-children="true">
9*5b8cef81SYoshie Muranaka  </table-toolbar>
10*5b8cef81SYoshie Muranaka  <table  class="bmc-table {{$ctrl.size}}"
11*5b8cef81SYoshie Muranaka          ng-class="{
12*5b8cef81SYoshie Muranaka            'bmc-table--sortable': $ctrl.sortable,
13*5b8cef81SYoshie Muranaka            'bmc-table--expandable': $ctrl.expandable,
14*5b8cef81SYoshie Muranaka            'bmc-table--selectable': $ctrl.selectable,
15*5b8cef81SYoshie Muranaka            'bmc-table--row-actions-enabled': '$ctrl.rowActionsEnabled',
16*5b8cef81SYoshie Muranaka          }">
17b1f64248SYoshie Muranaka    <thead class="bmc-table__head">
18*5b8cef81SYoshie Muranaka      <!-- Header row -->
19*5b8cef81SYoshie Muranaka      <tr>
20*5b8cef81SYoshie Muranaka        <!-- Expandable empty cell -->
21*5b8cef81SYoshie Muranaka        <th ng-if="$ctrl.expandable"
22*5b8cef81SYoshie Muranaka            class="bmc-table__column-header"></th>
23*5b8cef81SYoshie Muranaka        <!-- Select checkbox -->
24*5b8cef81SYoshie Muranaka        <th ng-if="$ctrl.selectable"
25fa56273dSYoshie Muranaka            class="bmc-table__column-header">
26*5b8cef81SYoshie Muranaka          <table-checkbox ng-model="$ctrl.selectHeaderCheckbox"
27*5b8cef81SYoshie Muranaka                          indeterminate="$ctrl.someSelected"
28*5b8cef81SYoshie Muranaka                          emit-change="$ctrl.onHeaderSelectChange(checked)">
29*5b8cef81SYoshie Muranaka          </table-checkbox>
30b1f64248SYoshie Muranaka        </th>
31*5b8cef81SYoshie Muranaka        <!-- Header items -->
32b1f64248SYoshie Muranaka        <th ng-repeat="headerItem in $ctrl.header track by $index"
33b1f64248SYoshie Muranaka            class="bmc-table__column-header">
34*5b8cef81SYoshie Muranaka          <span ng-if="!$ctrl.sortable || !headerItem.sortable">
35b1f64248SYoshie Muranaka            {{headerItem.label}}
36b1f64248SYoshie Muranaka          </span>
37*5b8cef81SYoshie Muranaka          <span ng-if="$ctrl.sortable && headerItem.sortable"
38b1f64248SYoshie Muranaka                ng-click="$ctrl.onClickSort($index)"
39b1f64248SYoshie Muranaka                class="bmc-table__column-header--sortable">
40b1f64248SYoshie Muranaka            {{headerItem.label}}
41b1f64248SYoshie Muranaka            <!-- Sort icons -->
42b1f64248SYoshie Muranaka            <button class="sort-icon"
43b1f64248SYoshie Muranaka                    type="button"
44b1f64248SYoshie Muranaka                    aria-label="sort {{headerItem.label}}">
45b1f64248SYoshie Muranaka              <icon file="icon-arrow--up.svg"
46b1f64248SYoshie Muranaka                    ng-if="$index === $ctrl.activeSort"
47b1f64248SYoshie Muranaka                    ng-class="{
48b1f64248SYoshie Muranaka                      'sort-icon--descending': !$ctrl.sortAscending,
49b1f64248SYoshie Muranaka                      'sort-icon--ascending' : $ctrl.sortAscending }"
50b1f64248SYoshie Muranaka                    class="sort-icon--active"
51b1f64248SYoshie Muranaka                    aria-hidden="true"></icon>
52b1f64248SYoshie Muranaka              <span ng-if="$index !== $ctrl.activeSort"
53b1f64248SYoshie Muranaka                    class="sort-icon--inactive"
54b1f64248SYoshie Muranaka                    aria-hidden="true">
55b1f64248SYoshie Muranaka                  <icon file="icon-arrow--up.svg"></icon>
56b1f64248SYoshie Muranaka                  <icon file="icon-arrow--down.svg"></icon>
57b1f64248SYoshie Muranaka              </span>
58b1f64248SYoshie Muranaka            </button>
59b1f64248SYoshie Muranaka          </span>
60fa56273dSYoshie Muranaka        </th>
61*5b8cef81SYoshie Muranaka        <!-- Row actions empty cell -->
62*5b8cef81SYoshie Muranaka        <th ng-if="$ctrl.rowActionsEnabled"
63*5b8cef81SYoshie Muranaka            class="bmc-table__column-header"></th>
64fa56273dSYoshie Muranaka      </tr>
65fa56273dSYoshie Muranaka    </thead>
66b1f64248SYoshie Muranaka    <tbody class="bmc-table__body">
67fa56273dSYoshie Muranaka      <!-- Data rows -->
68b1f64248SYoshie Muranaka      <tr ng-if="$ctrl.data.length > 0"
691d83af07SYoshie Muranaka          ng-repeat-start="row in $ctrl.data track by $index"
701d83af07SYoshie Muranaka          class="bmc-table__row"
711d83af07SYoshie Muranaka          ng-class="{
72*5b8cef81SYoshie Muranaka            'bmc-table__row--expanded': $ctrl.expandedRows.has($index),
73*5b8cef81SYoshie Muranaka            'bmc-table__row--selected': $ctrl.selectedRows.has($index),
741d83af07SYoshie Muranaka          }">
751d83af07SYoshie Muranaka        <!-- Row expansion trigger -->
761d83af07SYoshie Muranaka        <td ng-if="$ctrl.expandable"
771d83af07SYoshie Muranaka            class="bmc-table__cell">
781d83af07SYoshie Muranaka          <button type="button"
791d83af07SYoshie Muranaka                  class="btn  btn--expand"
801d83af07SYoshie Muranaka                  aria-label="expand row"
811d83af07SYoshie Muranaka                  ng-click="$ctrl.onClickExpand($index)">
821d83af07SYoshie Muranaka            <icon file="icon-chevron-right.svg" aria-hidden="true"></icon>
831d83af07SYoshie Muranaka          </button>
841d83af07SYoshie Muranaka        </td>
85*5b8cef81SYoshie Muranaka        <!-- Row checkbox -->
86*5b8cef81SYoshie Muranaka        <td ng-if="$ctrl.selectable"
87*5b8cef81SYoshie Muranaka            class="bmc-table__cell">
88*5b8cef81SYoshie Muranaka          <table-checkbox ng-if="row.selectable"
89*5b8cef81SYoshie Muranaka                          ng-model="row.selected"
90*5b8cef81SYoshie Muranaka                          emit-change="$ctrl.onRowSelectChange($index)">
91*5b8cef81SYoshie Muranaka          </table-checkbox>
92*5b8cef81SYoshie Muranaka        </td>
93fa56273dSYoshie Muranaka        <!-- Row item -->
948c80dbd9SYoshie Muranaka        <td ng-repeat="item in row.uiData track by $index"
95fa56273dSYoshie Muranaka            class="bmc-table__cell">
968c80dbd9SYoshie Muranaka            <ng-bind-html ng-bind-html="item"></ng-bind-html>
97fa56273dSYoshie Muranaka        </td>
98fa56273dSYoshie Muranaka        <!-- Row Actions -->
99bb688795SYoshie Muranaka        <td ng-if="$ctrl.rowActionsEnabled"
100fa56273dSYoshie Muranaka            class="bmc-table__cell  bmc-table__row-actions">
101bb688795SYoshie Muranaka          <table-actions
102bb688795SYoshie Muranaka            actions="row.actions"
103*5b8cef81SYoshie Muranaka            emit-action="$ctrl.onEmitRowAction(action, row)">
104bb688795SYoshie Muranaka          </table-actions>
105fa56273dSYoshie Muranaka        </td>
106fa56273dSYoshie Muranaka      </tr>
1071d83af07SYoshie Muranaka      <!-- Expansion row -->
1081d83af07SYoshie Muranaka      <tr ng-repeat-end
1091d83af07SYoshie Muranaka          ng-if="$ctrl.expandedRows.has($index)"
1101d83af07SYoshie Muranaka          class="bmc-table__expansion-row">
1111d83af07SYoshie Muranaka        <td class="bmc-table__cell"></td>
1121d83af07SYoshie Muranaka        <td class="bmc-table__cell"
113*5b8cef81SYoshie Muranaka            colspan="{{$ctrl.header.length + $ctrl.sortable +
114*5b8cef81SYoshie Muranaka                      $ctrl.expandable + $ctrl.rowActionsEnabled}}">
1151d83af07SYoshie Muranaka          <ng-bind-html
1161d83af07SYoshie Muranaka            ng-bind-html="row.expandContent || 'No data'">
1171d83af07SYoshie Muranaka          </ng-bind-html>
1181d83af07SYoshie Muranaka        </td>
1191d83af07SYoshie Muranaka      </tr>
120fa56273dSYoshie Muranaka      <!-- Empty table -->
1211d83af07SYoshie Muranaka      <tr ng-if="$ctrl.data.length === 0"
1221d83af07SYoshie Muranaka          class="bmc-table__expansion-row">
1231d83af07SYoshie Muranaka        <td class="bmc-table__cell"
124*5b8cef81SYoshie Muranaka            colspan="{{$ctrl.header.length + $ctrl.sortable +
125*5b8cef81SYoshie Muranaka                      $ctrl.expandable + $ctrl.rowActionsEnabled}}">
126*5b8cef81SYoshie Muranaka          No data
127*5b8cef81SYoshie Muranaka        </td>
128fa56273dSYoshie Muranaka      </tr>
129fa56273dSYoshie Muranaka    </tbody>
130fa56273dSYoshie Muranaka  </table>
131*5b8cef81SYoshie Muranaka</div>