blob: 68bee056474878c2c36301f55e3da261335d9fa9 [file] [log] [blame]
Sneha Patela02c6f92021-09-09 12:40:38 -05001<template>
2 <page-section :section-title="$t('pageInventory.assemblies')">
3 <b-table
4 sort-icon-left
5 no-sort-reset
6 hover
7 responsive="md"
8 :items="items"
9 :fields="fields"
10 show-empty
11 :empty-text="$t('global.table.emptyMessage')"
Kenneth Fullbright41057852021-12-27 16:19:37 -060012 :busy="isBusy"
Sneha Patela02c6f92021-09-09 12:40:38 -050013 >
14 <!-- Expand chevron icon -->
15 <template #cell(expandRow)="row">
16 <b-button
17 variant="link"
18 data-test-id="hardwareStatus-button-expandAssembly"
19 :title="expandRowLabel"
20 class="btn-icon-only"
21 @click="toggleRowDetails(row)"
22 >
23 <icon-chevron />
24 <span class="sr-only">{{ expandRowLabel }}</span>
25 </b-button>
26 </template>
27
28 <!-- Toggle identify LED -->
29 <template #cell(identifyLed)="row">
30 <b-form-checkbox
31 v-if="hasIdentifyLed(row.item.identifyLed)"
32 v-model="row.item.identifyLed"
33 name="switch"
34 switch
35 @change="toggleIdentifyLedValue(row.item)"
36 >
37 <span v-if="row.item.identifyLed">
38 {{ $t('global.status.on') }}
39 </span>
40 <span v-else> {{ $t('global.status.off') }} </span>
41 </b-form-checkbox>
42 <div v-else>--</div>
43 </template>
44
45 <template #row-details="{ item }">
46 <b-container fluid>
47 <b-row>
48 <b-col class="mt-2" sm="6" xl="6">
49 <!-- Nmae -->
50 <dt>{{ $t('pageInventory.table.name') }}:</dt>
Dixsie Wolmers75110452021-10-26 11:16:45 -050051 <dd>{{ dataFormatter(item.name) }}</dd>
Sneha Patela02c6f92021-09-09 12:40:38 -050052 <!-- Serial number -->
53 <dt>{{ $t('pageInventory.table.serialNumber') }}:</dt>
Dixsie Wolmers75110452021-10-26 11:16:45 -050054 <dd>{{ dataFormatter(item.serialNumber) }}</dd>
Sneha Patela02c6f92021-09-09 12:40:38 -050055 </b-col>
56 <b-col class="mt-2" sm="6" xl="6">
57 <!-- Model-->
58 <dt>Model</dt>
Dixsie Wolmers75110452021-10-26 11:16:45 -050059 <dd>{{ dataFormatter(item.model) }}</dd>
Sneha Patela02c6f92021-09-09 12:40:38 -050060 <!-- Spare Part Number -->
61 <dt>Spare Part Number</dt>
Dixsie Wolmers75110452021-10-26 11:16:45 -050062 <dd>{{ dataFormatter(item.sparePartNumber) }}</dd>
Sneha Patela02c6f92021-09-09 12:40:38 -050063 </b-col>
64 </b-row>
65 </b-container>
66 </template>
67 </b-table>
68 </page-section>
69</template>
70
71<script>
72import PageSection from '@/components/Global/PageSection';
73import IconChevron from '@carbon/icons-vue/es/chevron--down/20';
74import BVToastMixin from '@/components/Mixins/BVToastMixin';
75import TableRowExpandMixin, {
76 expandRowLabel,
77} from '@/components/Mixins/TableRowExpandMixin';
Dixsie Wolmers9726f9a2021-09-07 15:33:16 -050078import DataFormatterMixin from '@/components/Mixins/DataFormatterMixin';
Surya Vde23ea22024-07-11 15:19:46 +053079import { useI18n } from 'vue-i18n';
80import i18n from '@/i18n';
Sneha Patela02c6f92021-09-09 12:40:38 -050081
82export default {
83 components: { IconChevron, PageSection },
Dixsie Wolmers9726f9a2021-09-07 15:33:16 -050084 mixins: [BVToastMixin, TableRowExpandMixin, DataFormatterMixin],
Sneha Patela02c6f92021-09-09 12:40:38 -050085 data() {
86 return {
Surya Vde23ea22024-07-11 15:19:46 +053087 $t: useI18n().t,
Kenneth Fullbright41057852021-12-27 16:19:37 -060088 isBusy: true,
Sneha Patela02c6f92021-09-09 12:40:38 -050089 fields: [
90 {
91 key: 'expandRow',
92 label: '',
93 tdClass: 'table-row-expand',
94 },
95 {
Kenneth Fullbright799bcd32021-12-17 10:28:45 -060096 key: 'name',
Surya Vde23ea22024-07-11 15:19:46 +053097 label: i18n.global.t('pageInventory.table.id'),
Dixsie Wolmers75110452021-10-26 11:16:45 -050098 formatter: this.dataFormatter,
Sneha Patela02c6f92021-09-09 12:40:38 -050099 sortable: true,
100 },
101 {
102 key: 'partNumber',
Surya Vde23ea22024-07-11 15:19:46 +0530103 label: i18n.global.t('pageInventory.table.partNumber'),
Dixsie Wolmers75110452021-10-26 11:16:45 -0500104 formatter: this.dataFormatter,
Sneha Patela02c6f92021-09-09 12:40:38 -0500105 sortable: true,
106 },
107 {
108 key: 'locationNumber',
Surya Vde23ea22024-07-11 15:19:46 +0530109 label: i18n.global.t('pageInventory.table.locationNumber'),
Dixsie Wolmers75110452021-10-26 11:16:45 -0500110 formatter: this.dataFormatter,
Sneha Patela02c6f92021-09-09 12:40:38 -0500111 sortable: true,
112 },
113 {
114 key: 'identifyLed',
Surya Vde23ea22024-07-11 15:19:46 +0530115 label: i18n.global.t('pageInventory.table.identifyLed'),
Dixsie Wolmers75110452021-10-26 11:16:45 -0500116 formatter: this.dataFormatter,
Sneha Patela02c6f92021-09-09 12:40:38 -0500117 },
118 ],
119 expandRowLabel: expandRowLabel,
120 };
121 },
122 computed: {
123 assemblies() {
124 return this.$store.getters['assemblies/assemblies'];
125 },
126 items() {
127 if (this.assemblies) {
128 return this.assemblies;
129 } else {
130 return [];
131 }
132 },
133 },
134 created() {
135 this.$store.dispatch('assemblies/getAssemblyInfo').finally(() => {
136 // Emit initial data fetch complete to parent component
137 this.$root.$emit('hardware-status-assembly-complete');
Kenneth Fullbright41057852021-12-27 16:19:37 -0600138 this.isBusy = false;
Sneha Patela02c6f92021-09-09 12:40:38 -0500139 });
140 },
141 methods: {
142 toggleIdentifyLedValue(row) {
143 this.$store
144 .dispatch('assemblies/updateIdentifyLedValue', {
145 uri: row.uri,
Kenneth Fullbrightd600bb52021-12-20 17:01:31 -0600146 memberId: row.id,
Sneha Patela02c6f92021-09-09 12:40:38 -0500147 identifyLed: row.identifyLed,
148 })
Nikhil Ashokaf11a1902024-05-09 15:17:44 +0530149 .then((message) => this.successToast(message))
Sneha Patela02c6f92021-09-09 12:40:38 -0500150 .catch(({ message }) => this.errorToast(message));
151 },
152 hasIdentifyLed(identifyLed) {
153 return typeof identifyLed === 'boolean';
154 },
155 },
156};
157</script>