blob: 96e6ba64dd91f1a1bba019f47c45535ddb2f7753 [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
SurenNewareba91c492020-10-27 14:18:54 +0530110import BVTableSelectableMixin, {
111 selectedRows,
112 tableHeaderCheckboxModel,
113 tableHeaderCheckboxIndeterminate,
114} from '@/components/Mixins/BVTableSelectableMixin';
Yoshie Muranaka50ff1832020-05-01 11:00:17 -0700115import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
SurenNeware5e25e282020-07-08 15:57:23 +0530116import TableFilterMixin from '@/components/Mixins/TableFilterMixin';
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700117import TableDataFormatterMixin from '@/components/Mixins/TableDataFormatterMixin';
118import TableSortMixin from '@/components/Mixins/TableSortMixin';
SurenNewareba91c492020-10-27 14:18:54 +0530119import SearchFilterMixin, {
120 searchFilter,
121} from '@/components/Mixins/SearchFilterMixin';
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700122
123export default {
124 name: 'Sensors',
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700125 components: {
126 PageTitle,
SurenNeware71724be2020-06-01 15:31:00 +0530127 Search,
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700128 StatusIcon,
Sukanya Pandey99010962020-07-27 21:44:47 +0530129 TableCellCount,
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700130 TableFilter,
131 TableToolbar,
Derick Montague602e98a2020-10-21 16:20:00 -0500132 TableToolbarExport,
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700133 },
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700134 mixins: [
135 TableFilterMixin,
136 BVTableSelectableMixin,
137 LoadingBarMixin,
138 TableDataFormatterMixin,
Dixsie Wolmers9b22b492020-09-07 21:26:06 -0500139 TableSortMixin,
Derick Montague602e98a2020-10-21 16:20:00 -0500140 SearchFilterMixin,
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700141 ],
Derick Montague602e98a2020-10-21 16:20:00 -0500142 beforeRouteLeave(to, from, next) {
143 this.hideLoader();
144 next();
145 },
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700146 data() {
147 return {
148 fields: [
149 {
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700150 key: 'checkbox',
151 sortable: false,
Derick Montague602e98a2020-10-21 16:20:00 -0500152 label: '',
Yoshie Muranakab1a71912020-04-29 10:52:39 -0700153 },
154 {
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700155 key: 'name',
156 sortable: true,
Derick Montague602e98a2020-10-21 16:20:00 -0500157 label: this.$t('pageSensors.table.name'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700158 },
159 {
160 key: 'status',
161 sortable: true,
Dixsie Wolmersa04d46f2020-10-22 06:34:56 -0500162 label: this.$t('pageSensors.table.status'),
Derick Montague602e98a2020-10-21 16:20:00 -0500163 tdClass: 'text-nowrap',
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700164 },
165 {
166 key: 'lowerCritical',
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700167 formatter: this.tableFormatter,
Derick Montague602e98a2020-10-21 16:20:00 -0500168 label: this.$t('pageSensors.table.lowerCritical'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700169 },
170 {
171 key: 'lowerCaution',
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700172 formatter: this.tableFormatter,
Derick Montague602e98a2020-10-21 16:20:00 -0500173 label: this.$t('pageSensors.table.lowerWarning'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700174 },
175
176 {
177 key: 'currentValue',
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700178 formatter: this.tableFormatter,
Derick Montague602e98a2020-10-21 16:20:00 -0500179 label: this.$t('pageSensors.table.currentValue'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700180 },
181 {
182 key: 'upperCaution',
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700183 formatter: this.tableFormatter,
Derick Montague602e98a2020-10-21 16:20:00 -0500184 label: this.$t('pageSensors.table.upperWarning'),
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700185 },
186 {
187 key: 'upperCritical',
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700188 formatter: this.tableFormatter,
Derick Montague602e98a2020-10-21 16:20:00 -0500189 label: this.$t('pageSensors.table.upperCritical'),
190 },
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700191 ],
192 tableFilters: [
193 {
Yoshie Muranaka00454002020-06-22 09:14:05 -0700194 key: 'status',
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700195 label: this.$t('pageSensors.table.status'),
Derick Montague602e98a2020-10-21 16:20:00 -0500196 values: ['OK', 'Warning', 'Critical'],
197 },
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700198 ],
SurenNeware71724be2020-06-01 15:31:00 +0530199 activeFilters: [],
SurenNewareba91c492020-10-27 14:18:54 +0530200 searchFilter: searchFilter,
Derick Montague602e98a2020-10-21 16:20:00 -0500201 searchTotalFilteredRows: 0,
SurenNewareba91c492020-10-27 14:18:54 +0530202 selectedRows: selectedRows,
203 tableHeaderCheckboxModel: tableHeaderCheckboxModel,
204 tableHeaderCheckboxIndeterminate: tableHeaderCheckboxIndeterminate,
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700205 };
206 },
207 computed: {
208 allSensors() {
209 return this.$store.getters['sensors/sensors'];
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700210 },
Sukanya Pandey99010962020-07-27 21:44:47 +0530211 filteredRows() {
212 return this.searchFilter
213 ? this.searchTotalFilteredRows
214 : this.filteredSensors.length;
215 },
Yoshie Muranaka396aaab2020-05-20 10:11:06 -0700216 filteredSensors() {
217 return this.getFilteredTableData(this.allSensors, this.activeFilters);
Derick Montague602e98a2020-10-21 16:20:00 -0500218 },
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700219 },
220 created() {
Yoshie Muranaka50ff1832020-05-01 11:00:17 -0700221 this.startLoader();
222 this.$store
223 .dispatch('sensors/getAllSensors')
224 .finally(() => this.endLoader());
225 },
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700226 methods: {
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700227 sortCompare(a, b, key) {
228 if (key === 'status') {
Yoshie Muranaka202c5992020-06-18 12:02:57 -0700229 return this.sortStatus(a, b, key);
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700230 }
Yoshie Muranaka82cca542020-04-07 10:20:37 -0700231 },
232 onFilterChange({ activeFilters }) {
233 this.activeFilters = activeFilters;
SurenNeware71724be2020-06-01 15:31:00 +0530234 },
Sukanya Pandey99010962020-07-27 21:44:47 +0530235 onFiltered(filteredItems) {
236 this.searchTotalFilteredRows = filteredItems.length;
SurenNeware1471f8f2020-09-18 18:41:22 +0530237 },
238 onChangeSearchInput(event) {
239 this.searchFilter = event;
240 },
241 exportFileNameByDate() {
242 // Create export file name based on date
243 let date = new Date();
244 date =
245 date.toISOString().slice(0, 10) +
246 '_' +
Derick Montague602e98a2020-10-21 16:20:00 -0500247 date.toString().split(':').join('-').split(' ')[4];
SurenNeware1471f8f2020-09-18 18:41:22 +0530248 return this.$t('pageSensors.exportFilePrefix') + date;
Derick Montague602e98a2020-10-21 16:20:00 -0500249 },
250 },
Yoshie Muranaka30abccb2020-03-11 12:44:24 -0700251};
252</script>