xref: /openbmc/webui-vue/src/views/HardwareStatus/Inventory/InventoryTablePowerSupplies.vue (revision 825059ac475c16d5dcbbdb1af2d33d4f73d30f66)
17affc529SSandeepa Singh<template>
27affc529SSandeepa Singh  <page-section :section-title="$t('pageInventory.powerSupplies')">
37affc529SSandeepa Singh    <b-row class="align-items-end">
47affc529SSandeepa Singh      <b-col sm="6" md="5" xl="4">
57affc529SSandeepa Singh        <search
67affc529SSandeepa Singh          @change-search="onChangeSearchInput"
77affc529SSandeepa Singh          @clear-search="onClearSearchInput"
87affc529SSandeepa Singh        />
97affc529SSandeepa Singh      </b-col>
107affc529SSandeepa Singh      <b-col sm="6" md="3" xl="2">
117affc529SSandeepa Singh        <table-cell-count
127affc529SSandeepa Singh          :filtered-items-count="filteredRows"
137affc529SSandeepa Singh          :total-number-of-cells="powerSupplies.length"
147affc529SSandeepa Singh        ></table-cell-count>
157affc529SSandeepa Singh      </b-col>
167affc529SSandeepa Singh    </b-row>
177affc529SSandeepa Singh    <b-table
187affc529SSandeepa Singh      sort-icon-left
197affc529SSandeepa Singh      no-sort-reset
207affc529SSandeepa Singh      hover
217affc529SSandeepa Singh      responsive="md"
227affc529SSandeepa Singh      sort-by="health"
237affc529SSandeepa Singh      show-empty
247affc529SSandeepa Singh      :items="powerSupplies"
257affc529SSandeepa Singh      :fields="fields"
267affc529SSandeepa Singh      :sort-desc="true"
277affc529SSandeepa Singh      :sort-compare="sortCompare"
287affc529SSandeepa Singh      :filter="searchFilter"
297affc529SSandeepa Singh      :empty-text="$t('global.table.emptyMessage')"
307affc529SSandeepa Singh      :empty-filtered-text="$t('global.table.emptySearchMessage')"
3141057853SKenneth Fullbright      :busy="isBusy"
327affc529SSandeepa Singh      @filtered="onFiltered"
337affc529SSandeepa Singh    >
347affc529SSandeepa Singh      <!-- Expand chevron icon -->
357affc529SSandeepa Singh      <template #cell(expandRow)="row">
367affc529SSandeepa Singh        <b-button
377affc529SSandeepa Singh          variant="link"
387affc529SSandeepa Singh          data-test-id="hardwareStatus-button-expandPowerSupplies"
397affc529SSandeepa Singh          :title="expandRowLabel"
407affc529SSandeepa Singh          class="btn-icon-only"
417affc529SSandeepa Singh          @click="toggleRowDetails(row)"
427affc529SSandeepa Singh        >
437affc529SSandeepa Singh          <icon-chevron />
447affc529SSandeepa Singh          <span class="sr-only">{{ expandRowLabel }}</span>
457affc529SSandeepa Singh        </b-button>
467affc529SSandeepa Singh      </template>
477affc529SSandeepa Singh
487affc529SSandeepa Singh      <!-- Health -->
497affc529SSandeepa Singh      <template #cell(health)="{ value }">
507affc529SSandeepa Singh        <status-icon :status="statusIcon(value)" />
517affc529SSandeepa Singh        {{ value }}
527affc529SSandeepa Singh      </template>
537affc529SSandeepa Singh
54db2940a8SFarah Rasheed      <!-- StatusState -->
55db2940a8SFarah Rasheed      <template #cell(statusState)="{ value }">
56db2940a8SFarah Rasheed        <status-icon :status="statusStateIcon(value)" />
57db2940a8SFarah Rasheed        {{ value }}
58db2940a8SFarah Rasheed      </template>
59db2940a8SFarah Rasheed
607affc529SSandeepa Singh      <template #row-details="{ item }">
617affc529SSandeepa Singh        <b-container fluid>
627affc529SSandeepa Singh          <b-row>
637affc529SSandeepa Singh            <b-col sm="6" xl="4">
647affc529SSandeepa Singh              <dl>
657affc529SSandeepa Singh                <!-- Name -->
667affc529SSandeepa Singh                <dt>{{ $t('pageInventory.table.name') }}:</dt>
679726f9a7SDixsie Wolmers                <dd>{{ dataFormatter(item.name) }}</dd>
687affc529SSandeepa Singh                <!-- Part number -->
697affc529SSandeepa Singh                <dt>{{ $t('pageInventory.table.partNumber') }}:</dt>
709726f9a7SDixsie Wolmers                <dd>{{ dataFormatter(item.partNumber) }}</dd>
717affc529SSandeepa Singh                <!-- Serial number -->
727affc529SSandeepa Singh                <dt>{{ $t('pageInventory.table.serialNumber') }}:</dt>
739726f9a7SDixsie Wolmers                <dd>{{ dataFormatter(item.serialNumber) }}</dd>
747affc529SSandeepa Singh                <!-- Spare part number -->
757affc529SSandeepa Singh                <dt>{{ $t('pageInventory.table.sparePartNumber') }}:</dt>
769726f9a7SDixsie Wolmers                <dd>{{ dataFormatter(item.sparePartNumber) }}</dd>
777affc529SSandeepa Singh                <!-- Model -->
787affc529SSandeepa Singh                <dt>{{ $t('pageInventory.table.model') }}:</dt>
799726f9a7SDixsie Wolmers                <dd>{{ dataFormatter(item.model) }}</dd>
807affc529SSandeepa Singh              </dl>
817affc529SSandeepa Singh            </b-col>
827affc529SSandeepa Singh            <b-col sm="6" xl="4">
837affc529SSandeepa Singh              <dl>
847affc529SSandeepa Singh                <!-- Status state -->
857affc529SSandeepa Singh                <dt>{{ $t('pageInventory.table.statusState') }}:</dt>
869726f9a7SDixsie Wolmers                <dd>{{ dataFormatter(item.statusState) }}</dd>
877affc529SSandeepa Singh                <!-- Status Health rollup state -->
887affc529SSandeepa Singh                <dt>{{ $t('pageInventory.table.statusHealthRollup') }}:</dt>
899726f9a7SDixsie Wolmers                <dd>{{ dataFormatter(item.statusHealth) }}</dd>
907affc529SSandeepa Singh                <!-- Efficiency percent -->
917affc529SSandeepa Singh                <dt>{{ $t('pageInventory.table.efficiencyPercent') }}:</dt>
92d0b078f6SGlukhov Mikhail                <dd>
93d0b078f6SGlukhov Mikhail                  {{ dataFormatter(item.efficiencyPercent) }}
94d0b078f6SGlukhov Mikhail                  {{ $t('unit.Percent') }}
95d0b078f6SGlukhov Mikhail                </dd>
967affc529SSandeepa Singh                <!-- Power input watts -->
977affc529SSandeepa Singh                <dt>{{ $t('pageInventory.table.powerInputWatts') }}:</dt>
98d0b078f6SGlukhov Mikhail                <dd>
99d0b078f6SGlukhov Mikhail                  {{ dataFormatter(item.powerInputWatts) }}
100d0b078f6SGlukhov Mikhail                  {{ $t('unit.W') }}
101d0b078f6SGlukhov Mikhail                </dd>
1027affc529SSandeepa Singh              </dl>
1037affc529SSandeepa Singh            </b-col>
1047affc529SSandeepa Singh          </b-row>
1057affc529SSandeepa Singh          <div class="section-divider mb-3 mt-3"></div>
1067affc529SSandeepa Singh          <b-row>
1077affc529SSandeepa Singh            <b-col sm="6" xl="4">
1087affc529SSandeepa Singh              <dl>
1097affc529SSandeepa Singh                <!-- Manufacturer -->
1107affc529SSandeepa Singh                <dt>{{ $t('pageInventory.table.manufacturer') }}:</dt>
1119726f9a7SDixsie Wolmers                <dd>{{ dataFormatter(item.manufacturer) }}</dd>
1127affc529SSandeepa Singh              </dl>
1137affc529SSandeepa Singh            </b-col>
1147affc529SSandeepa Singh            <b-col sm="6" xl="4">
1157affc529SSandeepa Singh              <dl>
1167affc529SSandeepa Singh                <!-- Firmware version -->
1177affc529SSandeepa Singh                <dt>{{ $t('pageInventory.table.firmwareVersion') }}:</dt>
1189726f9a7SDixsie Wolmers                <dd>{{ dataFormatter(item.firmwareVersion) }}</dd>
1197affc529SSandeepa Singh              </dl>
1207affc529SSandeepa Singh            </b-col>
1217affc529SSandeepa Singh          </b-row>
1227affc529SSandeepa Singh        </b-container>
1237affc529SSandeepa Singh      </template>
1247affc529SSandeepa Singh    </b-table>
1257affc529SSandeepa Singh  </page-section>
1267affc529SSandeepa Singh</template>
1277affc529SSandeepa Singh
1287affc529SSandeepa Singh<script>
1297affc529SSandeepa Singhimport PageSection from '@/components/Global/PageSection';
1307affc529SSandeepa Singhimport IconChevron from '@carbon/icons-vue/es/chevron--down/20';
1317affc529SSandeepa Singh
1327affc529SSandeepa Singhimport StatusIcon from '@/components/Global/StatusIcon';
1337affc529SSandeepa Singhimport TableCellCount from '@/components/Global/TableCellCount';
1349726f9a7SDixsie Wolmersimport DataFormatterMixin from '@/components/Mixins/DataFormatterMixin';
1357affc529SSandeepa Singhimport TableSortMixin from '@/components/Mixins/TableSortMixin';
1367affc529SSandeepa Singhimport Search from '@/components/Global/Search';
1377affc529SSandeepa Singhimport SearchFilterMixin, {
1387affc529SSandeepa Singh  searchFilter,
1397affc529SSandeepa Singh} from '@/components/Mixins/SearchFilterMixin';
1407affc529SSandeepa Singhimport TableRowExpandMixin, {
1417affc529SSandeepa Singh  expandRowLabel,
1427affc529SSandeepa Singh} from '@/components/Mixins/TableRowExpandMixin';
143de23ea23SSurya Vimport { useI18n } from 'vue-i18n';
144de23ea23SSurya Vimport i18n from '@/i18n';
1457affc529SSandeepa Singh
1467affc529SSandeepa Singhexport default {
1477affc529SSandeepa Singh  components: { IconChevron, PageSection, StatusIcon, Search, TableCellCount },
1487affc529SSandeepa Singh  mixins: [
1497affc529SSandeepa Singh    TableRowExpandMixin,
1509726f9a7SDixsie Wolmers    DataFormatterMixin,
1517affc529SSandeepa Singh    TableSortMixin,
1527affc529SSandeepa Singh    SearchFilterMixin,
1537affc529SSandeepa Singh  ],
1547affc529SSandeepa Singh  data() {
1557affc529SSandeepa Singh    return {
156de23ea23SSurya V      $t: useI18n().t,
15741057853SKenneth Fullbright      isBusy: true,
1587affc529SSandeepa Singh      fields: [
1597affc529SSandeepa Singh        {
1607affc529SSandeepa Singh          key: 'expandRow',
1617affc529SSandeepa Singh          label: '',
1627affc529SSandeepa Singh          tdClass: 'table-row-expand',
1637affc529SSandeepa Singh          sortable: false,
1647affc529SSandeepa Singh        },
1657affc529SSandeepa Singh        {
1667affc529SSandeepa Singh          key: 'id',
167de23ea23SSurya V          label: i18n.global.t('pageInventory.table.id'),
1689726f9a7SDixsie Wolmers          formatter: this.dataFormatter,
1697affc529SSandeepa Singh          sortable: true,
1707affc529SSandeepa Singh        },
1717affc529SSandeepa Singh        {
1727affc529SSandeepa Singh          key: 'health',
173de23ea23SSurya V          label: i18n.global.t('pageInventory.table.health'),
1749726f9a7SDixsie Wolmers          formatter: this.dataFormatter,
1757affc529SSandeepa Singh          sortable: true,
1767affc529SSandeepa Singh          tdClass: 'text-nowrap',
1777affc529SSandeepa Singh        },
1787affc529SSandeepa Singh        {
179db2940a8SFarah Rasheed          key: 'statusState',
180*825059acSSurya Venkatesan          label: i18n.global.t('pageInventory.table.state'),
181db2940a8SFarah Rasheed          formatter: this.dataFormatter,
182db2940a8SFarah Rasheed          tdClass: 'text-nowrap',
183db2940a8SFarah Rasheed        },
184db2940a8SFarah Rasheed        {
1857affc529SSandeepa Singh          key: 'locationNumber',
186de23ea23SSurya V          label: i18n.global.t('pageInventory.table.locationNumber'),
1879726f9a7SDixsie Wolmers          formatter: this.dataFormatter,
1887affc529SSandeepa Singh          sortable: true,
1897affc529SSandeepa Singh        },
1907affc529SSandeepa Singh        {
1917affc529SSandeepa Singh          key: 'identifyLed',
192de23ea23SSurya V          label: i18n.global.t('pageInventory.table.identifyLed'),
1939726f9a7SDixsie Wolmers          formatter: this.dataFormatter,
1947affc529SSandeepa Singh        },
1957affc529SSandeepa Singh      ],
1967affc529SSandeepa Singh      searchFilter: searchFilter,
1977affc529SSandeepa Singh      searchTotalFilteredRows: 0,
1987affc529SSandeepa Singh      expandRowLabel: expandRowLabel,
1997affc529SSandeepa Singh    };
2007affc529SSandeepa Singh  },
2017affc529SSandeepa Singh  computed: {
2027affc529SSandeepa Singh    filteredRows() {
2037affc529SSandeepa Singh      return this.searchFilter
2047affc529SSandeepa Singh        ? this.searchTotalFilteredRows
2057affc529SSandeepa Singh        : this.powerSupplies.length;
2067affc529SSandeepa Singh    },
2077affc529SSandeepa Singh    powerSupplies() {
2087affc529SSandeepa Singh      return this.$store.getters['powerSupply/powerSupplies'];
2097affc529SSandeepa Singh    },
2107affc529SSandeepa Singh  },
2117affc529SSandeepa Singh  created() {
2127affc529SSandeepa Singh    this.$store.dispatch('powerSupply/getAllPowerSupplies').finally(() => {
2137affc529SSandeepa Singh      // Emit initial data fetch complete to parent component
2147affc529SSandeepa Singh      this.$root.$emit('hardware-status-power-supplies-complete');
21541057853SKenneth Fullbright      this.isBusy = false;
2167affc529SSandeepa Singh    });
2177affc529SSandeepa Singh  },
2187affc529SSandeepa Singh  methods: {
2197affc529SSandeepa Singh    sortCompare(a, b, key) {
2207affc529SSandeepa Singh      if (key === 'health') {
2217affc529SSandeepa Singh        return this.sortStatus(a, b, key);
222db2940a8SFarah Rasheed      } else if (key === 'statusState') {
223db2940a8SFarah Rasheed        return this.sortStatusState(a, b, key);
2247affc529SSandeepa Singh      }
2257affc529SSandeepa Singh    },
2267affc529SSandeepa Singh    onFiltered(filteredItems) {
2277affc529SSandeepa Singh      this.searchTotalFilteredRows = filteredItems.length;
2287affc529SSandeepa Singh    },
229db2940a8SFarah Rasheed    /**
230db2940a8SFarah Rasheed     * Returns the icon to use for status state based on the given status.
231db2940a8SFarah Rasheed     * @param {string} status The status to determine the icon for.
232db2940a8SFarah Rasheed     * @return {string} The icon for the given status.
233db2940a8SFarah Rasheed     */
234db2940a8SFarah Rasheed    statusStateIcon(status) {
235db2940a8SFarah Rasheed      switch (status) {
236db2940a8SFarah Rasheed        case 'Enabled':
237db2940a8SFarah Rasheed          return 'success';
238db2940a8SFarah Rasheed        case 'Absent':
239db2940a8SFarah Rasheed          return 'warning';
240db2940a8SFarah Rasheed        default:
241db2940a8SFarah Rasheed          return '';
242db2940a8SFarah Rasheed      }
243db2940a8SFarah Rasheed    },
244db2940a8SFarah Rasheed    /**
245db2940a8SFarah Rasheed     * Sorts the status state of two objects based on the provided key.
246db2940a8SFarah Rasheed     * @param {Object} a The first object to compare.
247db2940a8SFarah Rasheed     * @param {Object} b The second object to compare.
248db2940a8SFarah Rasheed     * @param {string} key The key to use for comparison.
249db2940a8SFarah Rasheed     */
250db2940a8SFarah Rasheed    sortStatusState(a, b, key) {
251db2940a8SFarah Rasheed      const statusState = ['Enabled', 'Absent'];
252db2940a8SFarah Rasheed      return statusState.indexOf(a[key]) - statusState.indexOf(b[key]);
253db2940a8SFarah Rasheed    },
2547affc529SSandeepa Singh  },
2557affc529SSandeepa Singh};
2567affc529SSandeepa Singh</script>
257