blob: 120cf669153befa3bab66a70ebed93b67c379d1e [file] [log] [blame]
Yoshie Muranaka30abccb2020-03-11 12:44:24 -07001<template>
Yoshie Muranaka3111b6f2020-04-21 19:48:38 -07002 <b-container fluid="xl">
Yoshie Muranaka30abccb2020-03-11 12:44:24 -07003 <page-title />
SurenNeware787635a2020-11-24 22:42:42 +05304 <b-row class="align-items-end">
Sukanya Pandey99010962020-07-27 21:44:47 +05305 <b-col sm="6" md="5" xl="4">
SurenNeware71724be2020-06-01 15:31:00 +05306 <search
7 :placeholder="$t('pageSensors.searchForSensors')"
Sandeepa Singhb28e2432021-02-10 19:26:21 +05308 data-test-id="sensors-input-searchForSensors"
Sukanya Pandeyedb8a772020-10-29 11:33:42 +05309 @change-search="onChangeSearchInput"
10 @clear-search="onClearSearchInput"
SurenNeware71724be2020-06-01 15:31:00 +053011 />
12 </b-col>
Sukanya Pandey99010962020-07-27 21:44:47 +053013 <b-col sm="3" md="3" xl="2">
14 <table-cell-count
15 :filtered-items-count="filteredRows"
16 :total-number-of-cells="allSensors.length"
17 ></table-cell-count>
18 </b-col>
jason westoverd36ac8a2025-11-03 20:58:59 -060019 <b-col sm="3" md="4" xl="6" class="text-end">
Sukanya Pandeyedb8a772020-10-29 11:33:42 +053020 <table-filter :filters="tableFilters" @filter-change="onFilterChange" />
Yoshie Muranaka82cca542020-04-07 10:20:37 -070021 </b-col>
22 </b-row>
23 <b-row>
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070024 <b-col xl="12">
Yoshie Muranakab1a71912020-04-29 10:52:39 -070025 <table-toolbar
26 ref="toolbar"
jason westoverd36ac8a2025-11-03 20:58:59 -060027 :selected-items-count="
28 Array.isArray(selectedRows) ? selectedRows.length : 0
29 "
Sukanya Pandeyedb8a772020-10-29 11:33:42 +053030 @clear-selected="clearSelectedRows($refs.table)"
Yoshie Muranakab1a71912020-04-29 10:52:39 -070031 >
Dixsie Wolmers27d68af2021-05-02 18:20:27 -050032 <template #toolbar-buttons>
Yoshie Muranakab1a71912020-04-29 10:52:39 -070033 <table-toolbar-export
34 :data="selectedRows"
SurenNeware1471f8f2020-09-18 18:41:22 +053035 :file-name="exportFileNameByDate()"
Yoshie Muranakab1a71912020-04-29 10:52:39 -070036 />
37 </template>
38 </table-toolbar>
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070039 <b-table
Yoshie Muranakab1a71912020-04-29 10:52:39 -070040 ref="table"
SurenNeware5e25e282020-07-08 15:57:23 +053041 responsive="md"
Yoshie Muranakab1a71912020-04-29 10:52:39 -070042 selectable
43 no-select-on-click
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070044 sort-icon-left
Sukanya Pandeyfde429e2020-09-14 20:48:39 +053045 hover
jason westoverd36ac8a2025-11-03 20:58:59 -060046 must-sort
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070047 sticky-header="75vh"
jason westoverd36ac8a2025-11-03 20:58:59 -060048 thead-class="table-light"
49 :sort-by="['status']"
SurenNeware307382e2020-07-27 20:45:14 +053050 show-empty
Yoshie Muranaka82cca542020-04-07 10:20:37 -070051 :items="filteredSensors"
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070052 :fields="fields"
jason westoverd36ac8a2025-11-03 20:58:59 -060053 :sort-desc="[true]"
SurenNeware71724be2020-06-01 15:31:00 +053054 :filter="searchFilter"
SurenNeware307382e2020-07-27 20:45:14 +053055 :empty-text="$t('global.table.emptyMessage')"
SurenNeware156a0e62020-08-28 19:20:03 +053056 :empty-filtered-text="$t('global.table.emptySearchMessage')"
Kenneth Fullbright41057852021-12-27 16:19:37 -060057 :busy="isBusy"
Sukanya Pandey99010962020-07-27 21:44:47 +053058 @filtered="onFiltered"
Yoshie Muranakab1a71912020-04-29 10:52:39 -070059 @row-selected="onRowSelected($event, filteredSensors.length)"
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070060 >
Yoshie Muranakab1a71912020-04-29 10:52:39 -070061 <!-- Checkbox column -->
Derick Montague602e98a2020-10-21 16:20:00 -050062 <template #head(checkbox)>
Yoshie Muranakab1a71912020-04-29 10:52:39 -070063 <b-form-checkbox
64 v-model="tableHeaderCheckboxModel"
65 :indeterminate="tableHeaderCheckboxIndeterminate"
jason westoverd36ac8a2025-11-03 20:58:59 -060066 @change="onChangeHeaderCheckbox($refs.table, $event)"
Dixsie Wolmersc42ad712020-11-19 17:29:24 -060067 >
jason westoverd36ac8a2025-11-03 20:58:59 -060068 <span class="visually-hidden-focusable">
69 {{ $t('global.table.selectAll') }}
70 </span>
Dixsie Wolmersc42ad712020-11-19 17:29:24 -060071 </b-form-checkbox>
Yoshie Muranakab1a71912020-04-29 10:52:39 -070072 </template>
Derick Montague602e98a2020-10-21 16:20:00 -050073 <template #cell(checkbox)="row">
Yoshie Muranakab1a71912020-04-29 10:52:39 -070074 <b-form-checkbox
75 v-model="row.rowSelected"
76 @change="toggleSelectRow($refs.table, row.index)"
Dixsie Wolmersc42ad712020-11-19 17:29:24 -060077 >
jason westoverd36ac8a2025-11-03 20:58:59 -060078 <span class="visually-hidden-focusable">
79 {{ $t('global.table.selectItem') }}
80 </span>
Dixsie Wolmersc42ad712020-11-19 17:29:24 -060081 </b-form-checkbox>
Yoshie Muranakab1a71912020-04-29 10:52:39 -070082 </template>
83
Derick Montague602e98a2020-10-21 16:20:00 -050084 <template #cell(status)="{ value }">
Dixsie Wolmersa04d46f2020-10-22 06:34:56 -050085 <status-icon :status="statusIcon(value)" /> {{ value }}
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070086 </template>
Derick Montague602e98a2020-10-21 16:20:00 -050087 <template #cell(currentValue)="data">
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070088 {{ data.value }} {{ data.item.units }}
89 </template>
Derick Montague602e98a2020-10-21 16:20:00 -050090 <template #cell(lowerCaution)="data">
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070091 {{ data.value }} {{ data.item.units }}
92 </template>
Derick Montague602e98a2020-10-21 16:20:00 -050093 <template #cell(upperCaution)="data">
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070094 {{ data.value }} {{ data.item.units }}
95 </template>
Derick Montague602e98a2020-10-21 16:20:00 -050096 <template #cell(lowerCritical)="data">
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070097 {{ data.value }} {{ data.item.units }}
98 </template>
Derick Montague602e98a2020-10-21 16:20:00 -050099 <template #cell(upperCritical)="data">
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700100 {{ data.value }} {{ data.item.units }}
101 </template>
102 </b-table>
103 </b-col>
104 </b-row>
105 </b-container>
106</template>
107
108<script>
SurenNeware5e25e282020-07-08 15:57:23 +0530109import PageTitle from '@/components/Global/PageTitle';
110import Search from '@/components/Global/Search';
111import StatusIcon from '@/components/Global/StatusIcon';
112import TableFilter from '@/components/Global/TableFilter';
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700113import TableToolbar from '@/components/Global/TableToolbar';
114import TableToolbarExport from '@/components/Global/TableToolbarExport';
Sukanya Pandey99010962020-07-27 21:44:47 +0530115import TableCellCount from '@/components/Global/TableCellCount';
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700116
SurenNewareba91c492020-10-27 14:18:54 +0530117import BVTableSelectableMixin, {
118 selectedRows,
119 tableHeaderCheckboxModel,
120 tableHeaderCheckboxIndeterminate,
121} from '@/components/Mixins/BVTableSelectableMixin';
Yoshie Muranaka50ff1832020-05-01 11:00:17 -0700122import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
SurenNeware5e25e282020-07-08 15:57:23 +0530123import TableFilterMixin from '@/components/Mixins/TableFilterMixin';
Dixsie Wolmers9726f9a2021-09-07 15:33:16 -0500124import DataFormatterMixin from '@/components/Mixins/DataFormatterMixin';
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700125import TableSortMixin from '@/components/Mixins/TableSortMixin';
SurenNewareba91c492020-10-27 14:18:54 +0530126import SearchFilterMixin, {
127 searchFilter,
128} from '@/components/Mixins/SearchFilterMixin';
Surya Vde23ea22024-07-11 15:19:46 +0530129import { useI18n } from 'vue-i18n';
130import i18n from '@/i18n';
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700131
132export default {
133 name: 'Sensors',
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700134 components: {
135 PageTitle,
SurenNeware71724be2020-06-01 15:31:00 +0530136 Search,
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700137 StatusIcon,
Sukanya Pandey99010962020-07-27 21:44:47 +0530138 TableCellCount,
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700139 TableFilter,
140 TableToolbar,
Derick Montague602e98a2020-10-21 16:20:00 -0500141 TableToolbarExport,
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700142 },
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700143 mixins: [
144 TableFilterMixin,
145 BVTableSelectableMixin,
146 LoadingBarMixin,
Dixsie Wolmers9726f9a2021-09-07 15:33:16 -0500147 DataFormatterMixin,
Dixsie Wolmers9b22b492020-09-07 21:26:06 -0500148 TableSortMixin,
Derick Montague602e98a2020-10-21 16:20:00 -0500149 SearchFilterMixin,
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700150 ],
Derick Montague602e98a2020-10-21 16:20:00 -0500151 beforeRouteLeave(to, from, next) {
152 this.hideLoader();
153 next();
154 },
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700155 data() {
156 return {
Surya Vde23ea22024-07-11 15:19:46 +0530157 $t: useI18n().t,
Kenneth Fullbright41057852021-12-27 16:19:37 -0600158 isBusy: true,
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700159 fields: [
160 {
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700161 key: 'checkbox',
162 sortable: false,
Derick Montague602e98a2020-10-21 16:20:00 -0500163 label: '',
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700164 },
165 {
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700166 key: 'name',
167 sortable: true,
Surya Vde23ea22024-07-11 15:19:46 +0530168 label: i18n.global.t('pageSensors.table.name'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700169 },
170 {
171 key: 'status',
172 sortable: true,
Surya Vde23ea22024-07-11 15:19:46 +0530173 label: i18n.global.t('pageSensors.table.status'),
Derick Montague602e98a2020-10-21 16:20:00 -0500174 tdClass: 'text-nowrap',
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700175 },
176 {
177 key: 'lowerCritical',
Dixsie Wolmers9726f9a2021-09-07 15:33:16 -0500178 formatter: this.dataFormatter,
Surya Vde23ea22024-07-11 15:19:46 +0530179 label: i18n.global.t('pageSensors.table.lowerCritical'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700180 },
181 {
182 key: 'lowerCaution',
Dixsie Wolmers9726f9a2021-09-07 15:33:16 -0500183 formatter: this.dataFormatter,
Surya Vde23ea22024-07-11 15:19:46 +0530184 label: i18n.global.t('pageSensors.table.lowerWarning'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700185 },
186
187 {
188 key: 'currentValue',
Dixsie Wolmers9726f9a2021-09-07 15:33:16 -0500189 formatter: this.dataFormatter,
Surya Vde23ea22024-07-11 15:19:46 +0530190 label: i18n.global.t('pageSensors.table.currentValue'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700191 },
192 {
193 key: 'upperCaution',
Dixsie Wolmers9726f9a2021-09-07 15:33:16 -0500194 formatter: this.dataFormatter,
Surya Vde23ea22024-07-11 15:19:46 +0530195 label: i18n.global.t('pageSensors.table.upperWarning'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700196 },
197 {
198 key: 'upperCritical',
Dixsie Wolmers9726f9a2021-09-07 15:33:16 -0500199 formatter: this.dataFormatter,
Surya Vde23ea22024-07-11 15:19:46 +0530200 label: i18n.global.t('pageSensors.table.upperCritical'),
Derick Montague602e98a2020-10-21 16:20:00 -0500201 },
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700202 ],
203 tableFilters: [
204 {
Yoshie Muranaka00454002020-06-22 09:14:05 -0700205 key: 'status',
Surya Vde23ea22024-07-11 15:19:46 +0530206 label: i18n.global.t('pageSensors.table.status'),
kirankumarb073bf966a2023-02-07 19:12:33 +0530207 values: [
Surya Vde23ea22024-07-11 15:19:46 +0530208 i18n.global.t('global.action.ok'),
209 i18n.global.t('global.action.warning'),
210 i18n.global.t('global.action.critical'),
kirankumarb073bf966a2023-02-07 19:12:33 +0530211 ],
Derick Montague602e98a2020-10-21 16:20:00 -0500212 },
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700213 ],
SurenNeware71724be2020-06-01 15:31:00 +0530214 activeFilters: [],
SurenNewareba91c492020-10-27 14:18:54 +0530215 searchFilter: searchFilter,
Derick Montague602e98a2020-10-21 16:20:00 -0500216 searchTotalFilteredRows: 0,
SurenNewareba91c492020-10-27 14:18:54 +0530217 selectedRows: selectedRows,
218 tableHeaderCheckboxModel: tableHeaderCheckboxModel,
219 tableHeaderCheckboxIndeterminate: tableHeaderCheckboxIndeterminate,
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700220 };
221 },
222 computed: {
223 allSensors() {
224 return this.$store.getters['sensors/sensors'];
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700225 },
Sukanya Pandey99010962020-07-27 21:44:47 +0530226 filteredRows() {
227 return this.searchFilter
228 ? this.searchTotalFilteredRows
229 : this.filteredSensors.length;
230 },
Yoshie Muranaka396aaab2020-05-20 10:11:06 -0700231 filteredSensors() {
232 return this.getFilteredTableData(this.allSensors, this.activeFilters);
Derick Montague602e98a2020-10-21 16:20:00 -0500233 },
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700234 },
235 created() {
Yoshie Muranaka50ff1832020-05-01 11:00:17 -0700236 this.startLoader();
Kenneth Fullbright41057852021-12-27 16:19:37 -0600237 this.$store.dispatch('sensors/getAllSensors').finally(() => {
238 this.endLoader();
239 this.isBusy = false;
240 });
Yoshie Muranaka50ff1832020-05-01 11:00:17 -0700241 },
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700242 methods: {
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700243 onFilterChange({ activeFilters }) {
244 this.activeFilters = activeFilters;
SurenNeware71724be2020-06-01 15:31:00 +0530245 },
Sukanya Pandey99010962020-07-27 21:44:47 +0530246 onFiltered(filteredItems) {
247 this.searchTotalFilteredRows = filteredItems.length;
SurenNeware1471f8f2020-09-18 18:41:22 +0530248 },
249 onChangeSearchInput(event) {
250 this.searchFilter = event;
251 },
252 exportFileNameByDate() {
253 // Create export file name based on date
254 let date = new Date();
255 date =
256 date.toISOString().slice(0, 10) +
257 '_' +
Derick Montague602e98a2020-10-21 16:20:00 -0500258 date.toString().split(':').join('-').split(' ')[4];
Surya Vde23ea22024-07-11 15:19:46 +0530259 return i18n.global.t('pageSensors.exportFilePrefix') + date;
Derick Montague602e98a2020-10-21 16:20:00 -0500260 },
261 },
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700262};
263</script>