xref: /openbmc/webui-vue/src/views/HardwareStatus/Sensors/Sensors.vue (revision de23ea23d88451a2fa2774ec72053772603c23ae)
17affc529SSandeepa Singh<template>
27affc529SSandeepa Singh  <b-container fluid="xl">
37affc529SSandeepa Singh    <page-title />
47affc529SSandeepa Singh    <b-row class="align-items-end">
57affc529SSandeepa Singh      <b-col sm="6" md="5" xl="4">
67affc529SSandeepa Singh        <search
77affc529SSandeepa Singh          :placeholder="$t('pageSensors.searchForSensors')"
87affc529SSandeepa Singh          data-test-id="sensors-input-searchForSensors"
97affc529SSandeepa Singh          @change-search="onChangeSearchInput"
107affc529SSandeepa Singh          @clear-search="onClearSearchInput"
117affc529SSandeepa Singh        />
127affc529SSandeepa Singh      </b-col>
137affc529SSandeepa Singh      <b-col sm="3" md="3" xl="2">
147affc529SSandeepa Singh        <table-cell-count
157affc529SSandeepa Singh          :filtered-items-count="filteredRows"
167affc529SSandeepa Singh          :total-number-of-cells="allSensors.length"
177affc529SSandeepa Singh        ></table-cell-count>
187affc529SSandeepa Singh      </b-col>
197affc529SSandeepa Singh      <b-col sm="3" md="4" xl="6" class="text-right">
207affc529SSandeepa Singh        <table-filter :filters="tableFilters" @filter-change="onFilterChange" />
217affc529SSandeepa Singh      </b-col>
227affc529SSandeepa Singh    </b-row>
237affc529SSandeepa Singh    <b-row>
247affc529SSandeepa Singh      <b-col xl="12">
257affc529SSandeepa Singh        <table-toolbar
267affc529SSandeepa Singh          ref="toolbar"
277affc529SSandeepa Singh          :selected-items-count="selectedRows.length"
287affc529SSandeepa Singh          @clear-selected="clearSelectedRows($refs.table)"
297affc529SSandeepa Singh        >
307affc529SSandeepa Singh          <template #toolbar-buttons>
317affc529SSandeepa Singh            <table-toolbar-export
327affc529SSandeepa Singh              :data="selectedRows"
337affc529SSandeepa Singh              :file-name="exportFileNameByDate()"
347affc529SSandeepa Singh            />
357affc529SSandeepa Singh          </template>
367affc529SSandeepa Singh        </table-toolbar>
377affc529SSandeepa Singh        <b-table
387affc529SSandeepa Singh          ref="table"
397affc529SSandeepa Singh          responsive="md"
407affc529SSandeepa Singh          selectable
417affc529SSandeepa Singh          no-select-on-click
427affc529SSandeepa Singh          sort-icon-left
437affc529SSandeepa Singh          hover
447affc529SSandeepa Singh          no-sort-reset
457affc529SSandeepa Singh          sticky-header="75vh"
467affc529SSandeepa Singh          sort-by="status"
477affc529SSandeepa Singh          show-empty
487affc529SSandeepa Singh          :no-border-collapse="true"
497affc529SSandeepa Singh          :items="filteredSensors"
507affc529SSandeepa Singh          :fields="fields"
517affc529SSandeepa Singh          :sort-desc="true"
527affc529SSandeepa Singh          :sort-compare="sortCompare"
537affc529SSandeepa Singh          :filter="searchFilter"
547affc529SSandeepa Singh          :empty-text="$t('global.table.emptyMessage')"
557affc529SSandeepa Singh          :empty-filtered-text="$t('global.table.emptySearchMessage')"
5641057853SKenneth Fullbright          :busy="isBusy"
577affc529SSandeepa Singh          @filtered="onFiltered"
587affc529SSandeepa Singh          @row-selected="onRowSelected($event, filteredSensors.length)"
597affc529SSandeepa Singh        >
607affc529SSandeepa Singh          <!-- Checkbox column -->
617affc529SSandeepa Singh          <template #head(checkbox)>
627affc529SSandeepa Singh            <b-form-checkbox
637affc529SSandeepa Singh              v-model="tableHeaderCheckboxModel"
647affc529SSandeepa Singh              :indeterminate="tableHeaderCheckboxIndeterminate"
657affc529SSandeepa Singh              @change="onChangeHeaderCheckbox($refs.table)"
667affc529SSandeepa Singh            >
677affc529SSandeepa Singh              <span class="sr-only">{{ $t('global.table.selectAll') }}</span>
687affc529SSandeepa Singh            </b-form-checkbox>
697affc529SSandeepa Singh          </template>
707affc529SSandeepa Singh          <template #cell(checkbox)="row">
717affc529SSandeepa Singh            <b-form-checkbox
727affc529SSandeepa Singh              v-model="row.rowSelected"
737affc529SSandeepa Singh              @change="toggleSelectRow($refs.table, row.index)"
747affc529SSandeepa Singh            >
757affc529SSandeepa Singh              <span class="sr-only">{{ $t('global.table.selectItem') }}</span>
767affc529SSandeepa Singh            </b-form-checkbox>
777affc529SSandeepa Singh          </template>
787affc529SSandeepa Singh
797affc529SSandeepa Singh          <template #cell(status)="{ value }">
807affc529SSandeepa Singh            <status-icon :status="statusIcon(value)" /> {{ value }}
817affc529SSandeepa Singh          </template>
827affc529SSandeepa Singh          <template #cell(currentValue)="data">
837affc529SSandeepa Singh            {{ data.value }} {{ data.item.units }}
847affc529SSandeepa Singh          </template>
857affc529SSandeepa Singh          <template #cell(lowerCaution)="data">
867affc529SSandeepa Singh            {{ data.value }} {{ data.item.units }}
877affc529SSandeepa Singh          </template>
887affc529SSandeepa Singh          <template #cell(upperCaution)="data">
897affc529SSandeepa Singh            {{ data.value }} {{ data.item.units }}
907affc529SSandeepa Singh          </template>
917affc529SSandeepa Singh          <template #cell(lowerCritical)="data">
927affc529SSandeepa Singh            {{ data.value }} {{ data.item.units }}
937affc529SSandeepa Singh          </template>
947affc529SSandeepa Singh          <template #cell(upperCritical)="data">
957affc529SSandeepa Singh            {{ data.value }} {{ data.item.units }}
967affc529SSandeepa Singh          </template>
977affc529SSandeepa Singh        </b-table>
987affc529SSandeepa Singh      </b-col>
997affc529SSandeepa Singh    </b-row>
1007affc529SSandeepa Singh  </b-container>
1017affc529SSandeepa Singh</template>
1027affc529SSandeepa Singh
1037affc529SSandeepa Singh<script>
1047affc529SSandeepa Singhimport PageTitle from '@/components/Global/PageTitle';
1057affc529SSandeepa Singhimport Search from '@/components/Global/Search';
1067affc529SSandeepa Singhimport StatusIcon from '@/components/Global/StatusIcon';
1077affc529SSandeepa Singhimport TableFilter from '@/components/Global/TableFilter';
1087affc529SSandeepa Singhimport TableToolbar from '@/components/Global/TableToolbar';
1097affc529SSandeepa Singhimport TableToolbarExport from '@/components/Global/TableToolbarExport';
1107affc529SSandeepa Singhimport TableCellCount from '@/components/Global/TableCellCount';
1117affc529SSandeepa Singh
1127affc529SSandeepa Singhimport BVTableSelectableMixin, {
1137affc529SSandeepa Singh  selectedRows,
1147affc529SSandeepa Singh  tableHeaderCheckboxModel,
1157affc529SSandeepa Singh  tableHeaderCheckboxIndeterminate,
1167affc529SSandeepa Singh} from '@/components/Mixins/BVTableSelectableMixin';
1177affc529SSandeepa Singhimport LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
1187affc529SSandeepa Singhimport TableFilterMixin from '@/components/Mixins/TableFilterMixin';
1199726f9a7SDixsie Wolmersimport DataFormatterMixin from '@/components/Mixins/DataFormatterMixin';
1207affc529SSandeepa Singhimport TableSortMixin from '@/components/Mixins/TableSortMixin';
1217affc529SSandeepa Singhimport SearchFilterMixin, {
1227affc529SSandeepa Singh  searchFilter,
1237affc529SSandeepa Singh} from '@/components/Mixins/SearchFilterMixin';
124*de23ea23SSurya Vimport { useI18n } from 'vue-i18n';
125*de23ea23SSurya Vimport i18n from '@/i18n';
1267affc529SSandeepa Singh
1277affc529SSandeepa Singhexport default {
1287affc529SSandeepa Singh  name: 'Sensors',
1297affc529SSandeepa Singh  components: {
1307affc529SSandeepa Singh    PageTitle,
1317affc529SSandeepa Singh    Search,
1327affc529SSandeepa Singh    StatusIcon,
1337affc529SSandeepa Singh    TableCellCount,
1347affc529SSandeepa Singh    TableFilter,
1357affc529SSandeepa Singh    TableToolbar,
1367affc529SSandeepa Singh    TableToolbarExport,
1377affc529SSandeepa Singh  },
1387affc529SSandeepa Singh  mixins: [
1397affc529SSandeepa Singh    TableFilterMixin,
1407affc529SSandeepa Singh    BVTableSelectableMixin,
1417affc529SSandeepa Singh    LoadingBarMixin,
1429726f9a7SDixsie Wolmers    DataFormatterMixin,
1437affc529SSandeepa Singh    TableSortMixin,
1447affc529SSandeepa Singh    SearchFilterMixin,
1457affc529SSandeepa Singh  ],
1467affc529SSandeepa Singh  beforeRouteLeave(to, from, next) {
1477affc529SSandeepa Singh    this.hideLoader();
1487affc529SSandeepa Singh    next();
1497affc529SSandeepa Singh  },
1507affc529SSandeepa Singh  data() {
1517affc529SSandeepa Singh    return {
152*de23ea23SSurya V      $t: useI18n().t,
15341057853SKenneth Fullbright      isBusy: true,
1547affc529SSandeepa Singh      fields: [
1557affc529SSandeepa Singh        {
1567affc529SSandeepa Singh          key: 'checkbox',
1577affc529SSandeepa Singh          sortable: false,
1587affc529SSandeepa Singh          label: '',
1597affc529SSandeepa Singh        },
1607affc529SSandeepa Singh        {
1617affc529SSandeepa Singh          key: 'name',
1627affc529SSandeepa Singh          sortable: true,
163*de23ea23SSurya V          label: i18n.global.t('pageSensors.table.name'),
1647affc529SSandeepa Singh        },
1657affc529SSandeepa Singh        {
1667affc529SSandeepa Singh          key: 'status',
1677affc529SSandeepa Singh          sortable: true,
168*de23ea23SSurya V          label: i18n.global.t('pageSensors.table.status'),
1697affc529SSandeepa Singh          tdClass: 'text-nowrap',
1707affc529SSandeepa Singh        },
1717affc529SSandeepa Singh        {
1727affc529SSandeepa Singh          key: 'lowerCritical',
1739726f9a7SDixsie Wolmers          formatter: this.dataFormatter,
174*de23ea23SSurya V          label: i18n.global.t('pageSensors.table.lowerCritical'),
1757affc529SSandeepa Singh        },
1767affc529SSandeepa Singh        {
1777affc529SSandeepa Singh          key: 'lowerCaution',
1789726f9a7SDixsie Wolmers          formatter: this.dataFormatter,
179*de23ea23SSurya V          label: i18n.global.t('pageSensors.table.lowerWarning'),
1807affc529SSandeepa Singh        },
1817affc529SSandeepa Singh
1827affc529SSandeepa Singh        {
1837affc529SSandeepa Singh          key: 'currentValue',
1849726f9a7SDixsie Wolmers          formatter: this.dataFormatter,
185*de23ea23SSurya V          label: i18n.global.t('pageSensors.table.currentValue'),
1867affc529SSandeepa Singh        },
1877affc529SSandeepa Singh        {
1887affc529SSandeepa Singh          key: 'upperCaution',
1899726f9a7SDixsie Wolmers          formatter: this.dataFormatter,
190*de23ea23SSurya V          label: i18n.global.t('pageSensors.table.upperWarning'),
1917affc529SSandeepa Singh        },
1927affc529SSandeepa Singh        {
1937affc529SSandeepa Singh          key: 'upperCritical',
1949726f9a7SDixsie Wolmers          formatter: this.dataFormatter,
195*de23ea23SSurya V          label: i18n.global.t('pageSensors.table.upperCritical'),
1967affc529SSandeepa Singh        },
1977affc529SSandeepa Singh      ],
1987affc529SSandeepa Singh      tableFilters: [
1997affc529SSandeepa Singh        {
2007affc529SSandeepa Singh          key: 'status',
201*de23ea23SSurya V          label: i18n.global.t('pageSensors.table.status'),
2023bf966a7Skirankumarb07          values: [
203*de23ea23SSurya V            i18n.global.t('global.action.ok'),
204*de23ea23SSurya V            i18n.global.t('global.action.warning'),
205*de23ea23SSurya V            i18n.global.t('global.action.critical'),
2063bf966a7Skirankumarb07          ],
2077affc529SSandeepa Singh        },
2087affc529SSandeepa Singh      ],
2097affc529SSandeepa Singh      activeFilters: [],
2107affc529SSandeepa Singh      searchFilter: searchFilter,
2117affc529SSandeepa Singh      searchTotalFilteredRows: 0,
2127affc529SSandeepa Singh      selectedRows: selectedRows,
2137affc529SSandeepa Singh      tableHeaderCheckboxModel: tableHeaderCheckboxModel,
2147affc529SSandeepa Singh      tableHeaderCheckboxIndeterminate: tableHeaderCheckboxIndeterminate,
2157affc529SSandeepa Singh    };
2167affc529SSandeepa Singh  },
2177affc529SSandeepa Singh  computed: {
2187affc529SSandeepa Singh    allSensors() {
2197affc529SSandeepa Singh      return this.$store.getters['sensors/sensors'];
2207affc529SSandeepa Singh    },
2217affc529SSandeepa Singh    filteredRows() {
2227affc529SSandeepa Singh      return this.searchFilter
2237affc529SSandeepa Singh        ? this.searchTotalFilteredRows
2247affc529SSandeepa Singh        : this.filteredSensors.length;
2257affc529SSandeepa Singh    },
2267affc529SSandeepa Singh    filteredSensors() {
2277affc529SSandeepa Singh      return this.getFilteredTableData(this.allSensors, this.activeFilters);
2287affc529SSandeepa Singh    },
2297affc529SSandeepa Singh  },
2307affc529SSandeepa Singh  created() {
2317affc529SSandeepa Singh    this.startLoader();
23241057853SKenneth Fullbright    this.$store.dispatch('sensors/getAllSensors').finally(() => {
23341057853SKenneth Fullbright      this.endLoader();
23441057853SKenneth Fullbright      this.isBusy = false;
23541057853SKenneth Fullbright    });
2367affc529SSandeepa Singh  },
2377affc529SSandeepa Singh  methods: {
2387affc529SSandeepa Singh    sortCompare(a, b, key) {
2397affc529SSandeepa Singh      if (key === 'status') {
2407affc529SSandeepa Singh        return this.sortStatus(a, b, key);
2417affc529SSandeepa Singh      }
2427affc529SSandeepa Singh    },
2437affc529SSandeepa Singh    onFilterChange({ activeFilters }) {
2447affc529SSandeepa Singh      this.activeFilters = activeFilters;
2457affc529SSandeepa Singh    },
2467affc529SSandeepa Singh    onFiltered(filteredItems) {
2477affc529SSandeepa Singh      this.searchTotalFilteredRows = filteredItems.length;
2487affc529SSandeepa Singh    },
2497affc529SSandeepa Singh    onChangeSearchInput(event) {
2507affc529SSandeepa Singh      this.searchFilter = event;
2517affc529SSandeepa Singh    },
2527affc529SSandeepa Singh    exportFileNameByDate() {
2537affc529SSandeepa Singh      // Create export file name based on date
2547affc529SSandeepa Singh      let date = new Date();
2557affc529SSandeepa Singh      date =
2567affc529SSandeepa Singh        date.toISOString().slice(0, 10) +
2577affc529SSandeepa Singh        '_' +
2587affc529SSandeepa Singh        date.toString().split(':').join('-').split(' ')[4];
259*de23ea23SSurya V      return i18n.global.t('pageSensors.exportFilePrefix') + date;
2607affc529SSandeepa Singh    },
2617affc529SSandeepa Singh  },
2627affc529SSandeepa Singh};
2637affc529SSandeepa Singh</script>
264