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