xref: /openbmc/webui-vue/src/views/HardwareStatus/Inventory/InventoryTableAssembly.vue (revision de23ea23d88451a2fa2774ec72053772603c23ae)
1a02c6f94SSneha Patel<template>
2a02c6f94SSneha Patel  <page-section :section-title="$t('pageInventory.assemblies')">
3a02c6f94SSneha Patel    <b-table
4a02c6f94SSneha Patel      sort-icon-left
5a02c6f94SSneha Patel      no-sort-reset
6a02c6f94SSneha Patel      hover
7a02c6f94SSneha Patel      responsive="md"
8a02c6f94SSneha Patel      :items="items"
9a02c6f94SSneha Patel      :fields="fields"
10a02c6f94SSneha Patel      show-empty
11a02c6f94SSneha Patel      :empty-text="$t('global.table.emptyMessage')"
1241057853SKenneth Fullbright      :busy="isBusy"
13a02c6f94SSneha Patel    >
14a02c6f94SSneha Patel      <!-- Expand chevron icon -->
15a02c6f94SSneha Patel      <template #cell(expandRow)="row">
16a02c6f94SSneha Patel        <b-button
17a02c6f94SSneha Patel          variant="link"
18a02c6f94SSneha Patel          data-test-id="hardwareStatus-button-expandAssembly"
19a02c6f94SSneha Patel          :title="expandRowLabel"
20a02c6f94SSneha Patel          class="btn-icon-only"
21a02c6f94SSneha Patel          @click="toggleRowDetails(row)"
22a02c6f94SSneha Patel        >
23a02c6f94SSneha Patel          <icon-chevron />
24a02c6f94SSneha Patel          <span class="sr-only">{{ expandRowLabel }}</span>
25a02c6f94SSneha Patel        </b-button>
26a02c6f94SSneha Patel      </template>
27a02c6f94SSneha Patel
28a02c6f94SSneha Patel      <!-- Toggle identify LED -->
29a02c6f94SSneha Patel      <template #cell(identifyLed)="row">
30a02c6f94SSneha Patel        <b-form-checkbox
31a02c6f94SSneha Patel          v-if="hasIdentifyLed(row.item.identifyLed)"
32a02c6f94SSneha Patel          v-model="row.item.identifyLed"
33a02c6f94SSneha Patel          name="switch"
34a02c6f94SSneha Patel          switch
35a02c6f94SSneha Patel          @change="toggleIdentifyLedValue(row.item)"
36a02c6f94SSneha Patel        >
37a02c6f94SSneha Patel          <span v-if="row.item.identifyLed">
38a02c6f94SSneha Patel            {{ $t('global.status.on') }}
39a02c6f94SSneha Patel          </span>
40a02c6f94SSneha Patel          <span v-else> {{ $t('global.status.off') }} </span>
41a02c6f94SSneha Patel        </b-form-checkbox>
42a02c6f94SSneha Patel        <div v-else>--</div>
43a02c6f94SSneha Patel      </template>
44a02c6f94SSneha Patel
45a02c6f94SSneha Patel      <template #row-details="{ item }">
46a02c6f94SSneha Patel        <b-container fluid>
47a02c6f94SSneha Patel          <b-row>
48a02c6f94SSneha Patel            <b-col class="mt-2" sm="6" xl="6">
49a02c6f94SSneha Patel              <!-- Nmae -->
50a02c6f94SSneha Patel              <dt>{{ $t('pageInventory.table.name') }}:</dt>
517511045cSDixsie Wolmers              <dd>{{ dataFormatter(item.name) }}</dd>
52a02c6f94SSneha Patel              <!-- Serial number -->
53a02c6f94SSneha Patel              <dt>{{ $t('pageInventory.table.serialNumber') }}:</dt>
547511045cSDixsie Wolmers              <dd>{{ dataFormatter(item.serialNumber) }}</dd>
55a02c6f94SSneha Patel            </b-col>
56a02c6f94SSneha Patel            <b-col class="mt-2" sm="6" xl="6">
57a02c6f94SSneha Patel              <!-- Model-->
58a02c6f94SSneha Patel              <dt>Model</dt>
597511045cSDixsie Wolmers              <dd>{{ dataFormatter(item.model) }}</dd>
60a02c6f94SSneha Patel              <!-- Spare Part Number -->
61a02c6f94SSneha Patel              <dt>Spare Part Number</dt>
627511045cSDixsie Wolmers              <dd>{{ dataFormatter(item.sparePartNumber) }}</dd>
63a02c6f94SSneha Patel            </b-col>
64a02c6f94SSneha Patel          </b-row>
65a02c6f94SSneha Patel        </b-container>
66a02c6f94SSneha Patel      </template>
67a02c6f94SSneha Patel    </b-table>
68a02c6f94SSneha Patel  </page-section>
69a02c6f94SSneha Patel</template>
70a02c6f94SSneha Patel
71a02c6f94SSneha Patel<script>
72a02c6f94SSneha Patelimport PageSection from '@/components/Global/PageSection';
73a02c6f94SSneha Patelimport IconChevron from '@carbon/icons-vue/es/chevron--down/20';
74a02c6f94SSneha Patelimport BVToastMixin from '@/components/Mixins/BVToastMixin';
75a02c6f94SSneha Patelimport TableRowExpandMixin, {
76a02c6f94SSneha Patel  expandRowLabel,
77a02c6f94SSneha Patel} from '@/components/Mixins/TableRowExpandMixin';
789726f9a7SDixsie Wolmersimport DataFormatterMixin from '@/components/Mixins/DataFormatterMixin';
79*de23ea23SSurya Vimport { useI18n } from 'vue-i18n';
80*de23ea23SSurya Vimport i18n from '@/i18n';
81a02c6f94SSneha Patel
82a02c6f94SSneha Patelexport default {
83a02c6f94SSneha Patel  components: { IconChevron, PageSection },
849726f9a7SDixsie Wolmers  mixins: [BVToastMixin, TableRowExpandMixin, DataFormatterMixin],
85a02c6f94SSneha Patel  data() {
86a02c6f94SSneha Patel    return {
87*de23ea23SSurya V      $t: useI18n().t,
8841057853SKenneth Fullbright      isBusy: true,
89a02c6f94SSneha Patel      fields: [
90a02c6f94SSneha Patel        {
91a02c6f94SSneha Patel          key: 'expandRow',
92a02c6f94SSneha Patel          label: '',
93a02c6f94SSneha Patel          tdClass: 'table-row-expand',
94a02c6f94SSneha Patel        },
95a02c6f94SSneha Patel        {
96799bcd3fSKenneth Fullbright          key: 'name',
97*de23ea23SSurya V          label: i18n.global.t('pageInventory.table.id'),
987511045cSDixsie Wolmers          formatter: this.dataFormatter,
99a02c6f94SSneha Patel          sortable: true,
100a02c6f94SSneha Patel        },
101a02c6f94SSneha Patel        {
102a02c6f94SSneha Patel          key: 'partNumber',
103*de23ea23SSurya V          label: i18n.global.t('pageInventory.table.partNumber'),
1047511045cSDixsie Wolmers          formatter: this.dataFormatter,
105a02c6f94SSneha Patel          sortable: true,
106a02c6f94SSneha Patel        },
107a02c6f94SSneha Patel        {
108a02c6f94SSneha Patel          key: 'locationNumber',
109*de23ea23SSurya V          label: i18n.global.t('pageInventory.table.locationNumber'),
1107511045cSDixsie Wolmers          formatter: this.dataFormatter,
111a02c6f94SSneha Patel          sortable: true,
112a02c6f94SSneha Patel        },
113a02c6f94SSneha Patel        {
114a02c6f94SSneha Patel          key: 'identifyLed',
115*de23ea23SSurya V          label: i18n.global.t('pageInventory.table.identifyLed'),
1167511045cSDixsie Wolmers          formatter: this.dataFormatter,
117a02c6f94SSneha Patel        },
118a02c6f94SSneha Patel      ],
119a02c6f94SSneha Patel      expandRowLabel: expandRowLabel,
120a02c6f94SSneha Patel    };
121a02c6f94SSneha Patel  },
122a02c6f94SSneha Patel  computed: {
123a02c6f94SSneha Patel    assemblies() {
124a02c6f94SSneha Patel      return this.$store.getters['assemblies/assemblies'];
125a02c6f94SSneha Patel    },
126a02c6f94SSneha Patel    items() {
127a02c6f94SSneha Patel      if (this.assemblies) {
128a02c6f94SSneha Patel        return this.assemblies;
129a02c6f94SSneha Patel      } else {
130a02c6f94SSneha Patel        return [];
131a02c6f94SSneha Patel      }
132a02c6f94SSneha Patel    },
133a02c6f94SSneha Patel  },
134a02c6f94SSneha Patel  created() {
135a02c6f94SSneha Patel    this.$store.dispatch('assemblies/getAssemblyInfo').finally(() => {
136a02c6f94SSneha Patel      // Emit initial data fetch complete to parent component
137a02c6f94SSneha Patel      this.$root.$emit('hardware-status-assembly-complete');
13841057853SKenneth Fullbright      this.isBusy = false;
139a02c6f94SSneha Patel    });
140a02c6f94SSneha Patel  },
141a02c6f94SSneha Patel  methods: {
142a02c6f94SSneha Patel    toggleIdentifyLedValue(row) {
143a02c6f94SSneha Patel      this.$store
144a02c6f94SSneha Patel        .dispatch('assemblies/updateIdentifyLedValue', {
145a02c6f94SSneha Patel          uri: row.uri,
146d600bb52SKenneth Fullbright          memberId: row.id,
147a02c6f94SSneha Patel          identifyLed: row.identifyLed,
148a02c6f94SSneha Patel        })
149f11a1901SNikhil Ashoka        .then((message) => this.successToast(message))
150a02c6f94SSneha Patel        .catch(({ message }) => this.errorToast(message));
151a02c6f94SSneha Patel    },
152a02c6f94SSneha Patel    hasIdentifyLed(identifyLed) {
153a02c6f94SSneha Patel      return typeof identifyLed === 'boolean';
154a02c6f94SSneha Patel    },
155a02c6f94SSneha Patel  },
156a02c6f94SSneha Patel};
157a02c6f94SSneha Patel</script>
158