blob: c9da6abb26a5b110d9e5e409be0bc6f0fe73043f [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 />
4 <b-row>
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')"
Sukanya Pandeyedb8a772020-10-29 11:33:42 +05308 @change-search="onChangeSearchInput"
9 @clear-search="onClearSearchInput"
SurenNeware71724be2020-06-01 15:31:00 +053010 />
11 </b-col>
Sukanya Pandey99010962020-07-27 21:44:47 +053012 <b-col sm="3" md="3" xl="2">
13 <table-cell-count
14 :filtered-items-count="filteredRows"
15 :total-number-of-cells="allSensors.length"
16 ></table-cell-count>
17 </b-col>
18 <b-col sm="3" md="4" xl="6" class="text-right">
Sukanya Pandeyedb8a772020-10-29 11:33:42 +053019 <table-filter :filters="tableFilters" @filter-change="onFilterChange" />
Yoshie Muranaka82cca542020-04-07 10:20:37 -070020 </b-col>
21 </b-row>
22 <b-row>
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070023 <b-col xl="12">
Yoshie Muranakab1a71912020-04-29 10:52:39 -070024 <table-toolbar
25 ref="toolbar"
26 :selected-items-count="selectedRows.length"
Sukanya Pandeyedb8a772020-10-29 11:33:42 +053027 @clear-selected="clearSelectedRows($refs.table)"
Yoshie Muranakab1a71912020-04-29 10:52:39 -070028 >
Derick Montague602e98a2020-10-21 16:20:00 -050029 <template #export>
Yoshie Muranakab1a71912020-04-29 10:52:39 -070030 <table-toolbar-export
31 :data="selectedRows"
SurenNeware1471f8f2020-09-18 18:41:22 +053032 :file-name="exportFileNameByDate()"
Yoshie Muranakab1a71912020-04-29 10:52:39 -070033 />
34 </template>
35 </table-toolbar>
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070036 <b-table
Yoshie Muranakab1a71912020-04-29 10:52:39 -070037 ref="table"
SurenNeware5e25e282020-07-08 15:57:23 +053038 responsive="md"
Yoshie Muranakab1a71912020-04-29 10:52:39 -070039 selectable
40 no-select-on-click
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070041 sort-icon-left
Sukanya Pandeyfde429e2020-09-14 20:48:39 +053042 hover
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070043 no-sort-reset
44 sticky-header="75vh"
45 sort-by="status"
SurenNeware307382e2020-07-27 20:45:14 +053046 show-empty
Mateusz Gapski1d2da292020-09-10 12:07:45 +020047 :no-border-collapse="true"
Yoshie Muranaka82cca542020-04-07 10:20:37 -070048 :items="filteredSensors"
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070049 :fields="fields"
50 :sort-desc="true"
51 :sort-compare="sortCompare"
SurenNeware71724be2020-06-01 15:31:00 +053052 :filter="searchFilter"
SurenNeware307382e2020-07-27 20:45:14 +053053 :empty-text="$t('global.table.emptyMessage')"
SurenNeware156a0e62020-08-28 19:20:03 +053054 :empty-filtered-text="$t('global.table.emptySearchMessage')"
Sukanya Pandey99010962020-07-27 21:44:47 +053055 @filtered="onFiltered"
Yoshie Muranakab1a71912020-04-29 10:52:39 -070056 @row-selected="onRowSelected($event, filteredSensors.length)"
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070057 >
Yoshie Muranakab1a71912020-04-29 10:52:39 -070058 <!-- Checkbox column -->
Derick Montague602e98a2020-10-21 16:20:00 -050059 <template #head(checkbox)>
Yoshie Muranakab1a71912020-04-29 10:52:39 -070060 <b-form-checkbox
61 v-model="tableHeaderCheckboxModel"
62 :indeterminate="tableHeaderCheckboxIndeterminate"
63 @change="onChangeHeaderCheckbox($refs.table)"
Dixsie Wolmersc42ad712020-11-19 17:29:24 -060064 >
65 <span class="sr-only">{{ $t('global.table.selectAll') }}</span>
66 </b-form-checkbox>
Yoshie Muranakab1a71912020-04-29 10:52:39 -070067 </template>
Derick Montague602e98a2020-10-21 16:20:00 -050068 <template #cell(checkbox)="row">
Yoshie Muranakab1a71912020-04-29 10:52:39 -070069 <b-form-checkbox
70 v-model="row.rowSelected"
71 @change="toggleSelectRow($refs.table, row.index)"
Dixsie Wolmersc42ad712020-11-19 17:29:24 -060072 >
73 <span class="sr-only">{{ $t('global.table.selectItem') }}</span>
74 </b-form-checkbox>
Yoshie Muranakab1a71912020-04-29 10:52:39 -070075 </template>
76
Derick Montague602e98a2020-10-21 16:20:00 -050077 <template #cell(status)="{ value }">
Dixsie Wolmersa04d46f2020-10-22 06:34:56 -050078 <status-icon :status="statusIcon(value)" /> {{ value }}
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070079 </template>
Derick Montague602e98a2020-10-21 16:20:00 -050080 <template #cell(currentValue)="data">
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070081 {{ data.value }} {{ data.item.units }}
82 </template>
Derick Montague602e98a2020-10-21 16:20:00 -050083 <template #cell(lowerCaution)="data">
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070084 {{ data.value }} {{ data.item.units }}
85 </template>
Derick Montague602e98a2020-10-21 16:20:00 -050086 <template #cell(upperCaution)="data">
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070087 {{ data.value }} {{ data.item.units }}
88 </template>
Derick Montague602e98a2020-10-21 16:20:00 -050089 <template #cell(lowerCritical)="data">
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070090 {{ data.value }} {{ data.item.units }}
91 </template>
Derick Montague602e98a2020-10-21 16:20:00 -050092 <template #cell(upperCritical)="data">
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070093 {{ data.value }} {{ data.item.units }}
94 </template>
95 </b-table>
96 </b-col>
97 </b-row>
98 </b-container>
99</template>
100
101<script>
SurenNeware5e25e282020-07-08 15:57:23 +0530102import PageTitle from '@/components/Global/PageTitle';
103import Search from '@/components/Global/Search';
104import StatusIcon from '@/components/Global/StatusIcon';
105import TableFilter from '@/components/Global/TableFilter';
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700106import TableToolbar from '@/components/Global/TableToolbar';
107import TableToolbarExport from '@/components/Global/TableToolbarExport';
Sukanya Pandey99010962020-07-27 21:44:47 +0530108import TableCellCount from '@/components/Global/TableCellCount';
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700109
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700110import BVTableSelectableMixin from '@/components/Mixins/BVTableSelectableMixin';
Yoshie Muranaka50ff1832020-05-01 11:00:17 -0700111import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
SurenNeware5e25e282020-07-08 15:57:23 +0530112import TableFilterMixin from '@/components/Mixins/TableFilterMixin';
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700113import TableDataFormatterMixin from '@/components/Mixins/TableDataFormatterMixin';
114import TableSortMixin from '@/components/Mixins/TableSortMixin';
Dixsie Wolmers9b22b492020-09-07 21:26:06 -0500115import SearchFilterMixin from '@/components/Mixins/SearchFilterMixin';
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700116
117export default {
118 name: 'Sensors',
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700119 components: {
120 PageTitle,
SurenNeware71724be2020-06-01 15:31:00 +0530121 Search,
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700122 StatusIcon,
Sukanya Pandey99010962020-07-27 21:44:47 +0530123 TableCellCount,
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700124 TableFilter,
125 TableToolbar,
Derick Montague602e98a2020-10-21 16:20:00 -0500126 TableToolbarExport,
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700127 },
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700128 mixins: [
129 TableFilterMixin,
130 BVTableSelectableMixin,
131 LoadingBarMixin,
132 TableDataFormatterMixin,
Dixsie Wolmers9b22b492020-09-07 21:26:06 -0500133 TableSortMixin,
Derick Montague602e98a2020-10-21 16:20:00 -0500134 SearchFilterMixin,
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700135 ],
Derick Montague602e98a2020-10-21 16:20:00 -0500136 beforeRouteLeave(to, from, next) {
137 this.hideLoader();
138 next();
139 },
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700140 data() {
141 return {
142 fields: [
143 {
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700144 key: 'checkbox',
145 sortable: false,
Derick Montague602e98a2020-10-21 16:20:00 -0500146 label: '',
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700147 },
148 {
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700149 key: 'name',
150 sortable: true,
Derick Montague602e98a2020-10-21 16:20:00 -0500151 label: this.$t('pageSensors.table.name'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700152 },
153 {
154 key: 'status',
155 sortable: true,
Dixsie Wolmersa04d46f2020-10-22 06:34:56 -0500156 label: this.$t('pageSensors.table.status'),
Derick Montague602e98a2020-10-21 16:20:00 -0500157 tdClass: 'text-nowrap',
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700158 },
159 {
160 key: 'lowerCritical',
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700161 formatter: this.tableFormatter,
Derick Montague602e98a2020-10-21 16:20:00 -0500162 label: this.$t('pageSensors.table.lowerCritical'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700163 },
164 {
165 key: 'lowerCaution',
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700166 formatter: this.tableFormatter,
Derick Montague602e98a2020-10-21 16:20:00 -0500167 label: this.$t('pageSensors.table.lowerWarning'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700168 },
169
170 {
171 key: 'currentValue',
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700172 formatter: this.tableFormatter,
Derick Montague602e98a2020-10-21 16:20:00 -0500173 label: this.$t('pageSensors.table.currentValue'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700174 },
175 {
176 key: 'upperCaution',
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700177 formatter: this.tableFormatter,
Derick Montague602e98a2020-10-21 16:20:00 -0500178 label: this.$t('pageSensors.table.upperWarning'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700179 },
180 {
181 key: 'upperCritical',
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700182 formatter: this.tableFormatter,
Derick Montague602e98a2020-10-21 16:20:00 -0500183 label: this.$t('pageSensors.table.upperCritical'),
184 },
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700185 ],
186 tableFilters: [
187 {
Yoshie Muranaka00454002020-06-22 09:14:05 -0700188 key: 'status',
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700189 label: this.$t('pageSensors.table.status'),
Derick Montague602e98a2020-10-21 16:20:00 -0500190 values: ['OK', 'Warning', 'Critical'],
191 },
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700192 ],
SurenNeware71724be2020-06-01 15:31:00 +0530193 activeFilters: [],
Derick Montague602e98a2020-10-21 16:20:00 -0500194 searchTotalFilteredRows: 0,
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700195 };
196 },
197 computed: {
198 allSensors() {
199 return this.$store.getters['sensors/sensors'];
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700200 },
Sukanya Pandey99010962020-07-27 21:44:47 +0530201 filteredRows() {
202 return this.searchFilter
203 ? this.searchTotalFilteredRows
204 : this.filteredSensors.length;
205 },
Yoshie Muranaka396aaab2020-05-20 10:11:06 -0700206 filteredSensors() {
207 return this.getFilteredTableData(this.allSensors, this.activeFilters);
Derick Montague602e98a2020-10-21 16:20:00 -0500208 },
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700209 },
210 created() {
Yoshie Muranaka50ff1832020-05-01 11:00:17 -0700211 this.startLoader();
212 this.$store
213 .dispatch('sensors/getAllSensors')
214 .finally(() => this.endLoader());
215 },
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700216 methods: {
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700217 sortCompare(a, b, key) {
218 if (key === 'status') {
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700219 return this.sortStatus(a, b, key);
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700220 }
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700221 },
222 onFilterChange({ activeFilters }) {
223 this.activeFilters = activeFilters;
SurenNeware71724be2020-06-01 15:31:00 +0530224 },
Sukanya Pandey99010962020-07-27 21:44:47 +0530225 onFiltered(filteredItems) {
226 this.searchTotalFilteredRows = filteredItems.length;
SurenNeware1471f8f2020-09-18 18:41:22 +0530227 },
228 onChangeSearchInput(event) {
229 this.searchFilter = event;
230 },
231 exportFileNameByDate() {
232 // Create export file name based on date
233 let date = new Date();
234 date =
235 date.toISOString().slice(0, 10) +
236 '_' +
Derick Montague602e98a2020-10-21 16:20:00 -0500237 date.toString().split(':').join('-').split(' ')[4];
SurenNeware1471f8f2020-09-18 18:41:22 +0530238 return this.$t('pageSensors.exportFilePrefix') + date;
Derick Montague602e98a2020-10-21 16:20:00 -0500239 },
240 },
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700241};
242</script>