1828dda9bSDerick Montague<template> 2828dda9bSDerick Montague <b-container fluid="xl"> 3828dda9bSDerick Montague <page-title /> 4828dda9bSDerick Montague <b-row> 5828dda9bSDerick Montague <b-col sm="6" lg="5" xl="4"> 6828dda9bSDerick Montague <page-section :section-title="$t('pageDumps.initiateDump')"> 7828dda9bSDerick Montague <dumps-form /> 8828dda9bSDerick Montague </page-section> 9828dda9bSDerick Montague </b-col> 10828dda9bSDerick Montague </b-row> 11828dda9bSDerick Montague <b-row> 12828dda9bSDerick Montague <b-col xl="10"> 13828dda9bSDerick Montague <page-section :section-title="$t('pageDumps.dumpsAvailableOnBmc')"> 14828dda9bSDerick Montague <b-row class="align-items-start"> 15828dda9bSDerick Montague <b-col sm="8" xl="6" class="d-sm-flex align-items-end"> 16828dda9bSDerick Montague <search 17828dda9bSDerick Montague :placeholder="$t('pageDumps.table.searchDumps')" 18828dda9bSDerick Montague @change-search="onChangeSearchInput" 19828dda9bSDerick Montague @clear-search="onClearSearchInput" 20828dda9bSDerick Montague /> 21828dda9bSDerick Montague <div class="ml-sm-4"> 22828dda9bSDerick Montague <table-cell-count 23e39b95d6SSukanya Pandey :filtered-items-count="filteredRows" 24e39b95d6SSukanya Pandey :total-number-of-cells="allDumps.length" 25828dda9bSDerick Montague ></table-cell-count> 26828dda9bSDerick Montague </div> 27828dda9bSDerick Montague </b-col> 28828dda9bSDerick Montague <b-col sm="8" md="7" xl="6"> 29828dda9bSDerick Montague <table-date-filter @change="onChangeDateTimeFilter" /> 30828dda9bSDerick Montague </b-col> 31828dda9bSDerick Montague </b-row> 32e39b95d6SSukanya Pandey <b-row> 33e39b95d6SSukanya Pandey <b-col class="text-right"> 34e39b95d6SSukanya Pandey <table-filter 35e39b95d6SSukanya Pandey :filters="tableFilters" 36e39b95d6SSukanya Pandey @filter-change="onFilterChange" 37e39b95d6SSukanya Pandey /> 38e39b95d6SSukanya Pandey </b-col> 39e39b95d6SSukanya Pandey </b-row> 40828dda9bSDerick Montague <table-toolbar 41828dda9bSDerick Montague :selected-items-count="selectedRows.length" 42828dda9bSDerick Montague :actions="batchActions" 43828dda9bSDerick Montague @clear-selected="clearSelectedRows($refs.table)" 44828dda9bSDerick Montague @batch-action="onTableBatchAction" 45828dda9bSDerick Montague /> 46828dda9bSDerick Montague <b-table 47828dda9bSDerick Montague ref="table" 48828dda9bSDerick Montague show-empty 49828dda9bSDerick Montague hover 50828dda9bSDerick Montague sort-icon-left 51828dda9bSDerick Montague no-sort-reset 52828dda9bSDerick Montague sort-desc 53828dda9bSDerick Montague selectable 54828dda9bSDerick Montague no-select-on-click 55828dda9bSDerick Montague responsive="md" 56828dda9bSDerick Montague sort-by="dateTime" 57828dda9bSDerick Montague :fields="fields" 58e39b95d6SSukanya Pandey :items="filteredDumps" 59828dda9bSDerick Montague :empty-text="$t('global.table.emptyMessage')" 60828dda9bSDerick Montague :empty-filtered-text="$t('global.table.emptySearchMessage')" 61828dda9bSDerick Montague :filter="searchFilter" 6241057853SKenneth Fullbright :busy="isBusy" 63d7cd12c2SNikhil Ashoka @filtered="onFiltered" 6441057853SKenneth Fullbright @row-selected="onRowSelected($event, filteredTableItems.length)" 65828dda9bSDerick Montague > 66828dda9bSDerick Montague <!-- Checkbox column --> 67828dda9bSDerick Montague <template #head(checkbox)> 68828dda9bSDerick Montague <b-form-checkbox 69828dda9bSDerick Montague v-model="tableHeaderCheckboxModel" 70828dda9bSDerick Montague :indeterminate="tableHeaderCheckboxIndeterminate" 71828dda9bSDerick Montague @change="onChangeHeaderCheckbox($refs.table)" 72828dda9bSDerick Montague > 73828dda9bSDerick Montague <span class="sr-only">{{ $t('global.table.selectAll') }}</span> 74828dda9bSDerick Montague </b-form-checkbox> 75828dda9bSDerick Montague </template> 76828dda9bSDerick Montague <template #cell(checkbox)="row"> 77828dda9bSDerick Montague <b-form-checkbox 78828dda9bSDerick Montague v-model="row.rowSelected" 79828dda9bSDerick Montague @change="toggleSelectRow($refs.table, row.index)" 80828dda9bSDerick Montague > 81828dda9bSDerick Montague <span class="sr-only">{{ $t('global.table.selectItem') }}</span> 82828dda9bSDerick Montague </b-form-checkbox> 83828dda9bSDerick Montague </template> 84828dda9bSDerick Montague 85828dda9bSDerick Montague <!-- Date and Time column --> 86828dda9bSDerick Montague <template #cell(dateTime)="{ value }"> 87de23ea23SSurya V <p class="mb-0">{{ $filters.formatDate(value) }}</p> 88de23ea23SSurya V <p class="mb-0">{{ $filters.formatTime(value) }}</p> 89828dda9bSDerick Montague </template> 90828dda9bSDerick Montague 91828dda9bSDerick Montague <!-- Size column --> 92828dda9bSDerick Montague <template #cell(size)="{ value }"> 93828dda9bSDerick Montague {{ convertBytesToMegabytes(value) }} MB 94828dda9bSDerick Montague </template> 95828dda9bSDerick Montague 96828dda9bSDerick Montague <!-- Actions column --> 97828dda9bSDerick Montague <template #cell(actions)="row"> 98828dda9bSDerick Montague <table-row-action 99828dda9bSDerick Montague v-for="(action, index) in row.item.actions" 100828dda9bSDerick Montague :key="index" 101828dda9bSDerick Montague :value="action.value" 102828dda9bSDerick Montague :title="action.title" 103828dda9bSDerick Montague :download-location="row.item.data" 104828dda9bSDerick Montague :export-name="exportFileName(row)" 105828dda9bSDerick Montague @click-table-action="onTableRowAction($event, row.item)" 106828dda9bSDerick Montague > 107828dda9bSDerick Montague <template #icon> 108828dda9bSDerick Montague <icon-download v-if="action.value === 'download'" /> 109828dda9bSDerick Montague <icon-delete v-if="action.value === 'delete'" /> 110828dda9bSDerick Montague </template> 111828dda9bSDerick Montague </table-row-action> 112828dda9bSDerick Montague </template> 113828dda9bSDerick Montague </b-table> 114828dda9bSDerick Montague </page-section> 115828dda9bSDerick Montague </b-col> 116828dda9bSDerick Montague </b-row> 117f7000cd6SSukanya Pandey <!-- Table pagination --> 118f7000cd6SSukanya Pandey <b-row> 119f7000cd6SSukanya Pandey <b-col sm="6" xl="5"> 120f7000cd6SSukanya Pandey <b-form-group 121f7000cd6SSukanya Pandey class="table-pagination-select" 122f7000cd6SSukanya Pandey :label="$t('global.table.itemsPerPage')" 123f7000cd6SSukanya Pandey label-for="pagination-items-per-page" 124f7000cd6SSukanya Pandey > 125f7000cd6SSukanya Pandey <b-form-select 126f7000cd6SSukanya Pandey id="pagination-items-per-page" 127f7000cd6SSukanya Pandey v-model="perPage" 128f7000cd6SSukanya Pandey :options="itemsPerPageOptions" 129f7000cd6SSukanya Pandey /> 130f7000cd6SSukanya Pandey </b-form-group> 131f7000cd6SSukanya Pandey </b-col> 132f7000cd6SSukanya Pandey <b-col sm="6" xl="5"> 133f7000cd6SSukanya Pandey <b-pagination 134f7000cd6SSukanya Pandey v-model="currentPage" 135f7000cd6SSukanya Pandey first-number 136f7000cd6SSukanya Pandey last-number 137f7000cd6SSukanya Pandey :per-page="perPage" 138e39b95d6SSukanya Pandey :total-rows="getTotalRowCount()" 139f7000cd6SSukanya Pandey aria-controls="table-dump-entries" 140f7000cd6SSukanya Pandey /> 141f7000cd6SSukanya Pandey </b-col> 142f7000cd6SSukanya Pandey </b-row> 143828dda9bSDerick Montague </b-container> 144828dda9bSDerick Montague</template> 145828dda9bSDerick Montague 146828dda9bSDerick Montague<script> 147828dda9bSDerick Montagueimport IconDelete from '@carbon/icons-vue/es/trash-can/20'; 148828dda9bSDerick Montagueimport IconDownload from '@carbon/icons-vue/es/download/20'; 149828dda9bSDerick Montagueimport DumpsForm from './DumpsForm'; 150828dda9bSDerick Montagueimport PageSection from '@/components/Global/PageSection'; 151828dda9bSDerick Montagueimport PageTitle from '@/components/Global/PageTitle'; 152828dda9bSDerick Montagueimport Search from '@/components/Global/Search'; 153828dda9bSDerick Montagueimport TableCellCount from '@/components/Global/TableCellCount'; 154828dda9bSDerick Montagueimport TableDateFilter from '@/components/Global/TableDateFilter'; 155828dda9bSDerick Montagueimport TableRowAction from '@/components/Global/TableRowAction'; 156828dda9bSDerick Montagueimport TableToolbar from '@/components/Global/TableToolbar'; 157828dda9bSDerick Montagueimport BVTableSelectableMixin, { 158828dda9bSDerick Montague selectedRows, 159828dda9bSDerick Montague tableHeaderCheckboxModel, 160828dda9bSDerick Montague tableHeaderCheckboxIndeterminate, 161828dda9bSDerick Montague} from '@/components/Mixins/BVTableSelectableMixin'; 162828dda9bSDerick Montagueimport BVToastMixin from '@/components/Mixins/BVToastMixin'; 163f7000cd6SSukanya Pandeyimport BVPaginationMixin, { 164f7000cd6SSukanya Pandey currentPage, 165f7000cd6SSukanya Pandey perPage, 166f7000cd6SSukanya Pandey itemsPerPageOptions, 167f7000cd6SSukanya Pandey} from '@/components/Mixins/BVPaginationMixin'; 168828dda9bSDerick Montagueimport LoadingBarMixin from '@/components/Mixins/LoadingBarMixin'; 169828dda9bSDerick Montagueimport SearchFilterMixin, { 170828dda9bSDerick Montague searchFilter, 171828dda9bSDerick Montague} from '@/components/Mixins/SearchFilterMixin'; 172e39b95d6SSukanya Pandeyimport TableFilter from '@/components/Global/TableFilter'; 173828dda9bSDerick Montagueimport TableFilterMixin from '@/components/Mixins/TableFilterMixin'; 174de23ea23SSurya Vimport i18n from '@/i18n'; 175*6e53b14bSPaul Fertserimport { useI18n } from 'vue-i18n'; 176828dda9bSDerick Montague 177828dda9bSDerick Montagueexport default { 178828dda9bSDerick Montague components: { 179828dda9bSDerick Montague DumpsForm, 180828dda9bSDerick Montague IconDelete, 181828dda9bSDerick Montague IconDownload, 182828dda9bSDerick Montague PageSection, 183828dda9bSDerick Montague PageTitle, 184828dda9bSDerick Montague Search, 185828dda9bSDerick Montague TableCellCount, 186828dda9bSDerick Montague TableDateFilter, 187828dda9bSDerick Montague TableRowAction, 188828dda9bSDerick Montague TableToolbar, 189e39b95d6SSukanya Pandey TableFilter, 190828dda9bSDerick Montague }, 191828dda9bSDerick Montague mixins: [ 192828dda9bSDerick Montague BVTableSelectableMixin, 193828dda9bSDerick Montague BVToastMixin, 194f7000cd6SSukanya Pandey BVPaginationMixin, 195828dda9bSDerick Montague LoadingBarMixin, 196828dda9bSDerick Montague SearchFilterMixin, 197828dda9bSDerick Montague TableFilterMixin, 198828dda9bSDerick Montague ], 199828dda9bSDerick Montague beforeRouteLeave(to, from, next) { 200828dda9bSDerick Montague // Hide loader if the user navigates to another page 201828dda9bSDerick Montague // before request is fulfilled. 202828dda9bSDerick Montague this.hideLoader(); 203828dda9bSDerick Montague next(); 204828dda9bSDerick Montague }, 205828dda9bSDerick Montague data() { 206828dda9bSDerick Montague return { 207*6e53b14bSPaul Fertser $t: useI18n().t, 20841057853SKenneth Fullbright isBusy: true, 209828dda9bSDerick Montague fields: [ 210828dda9bSDerick Montague { 211828dda9bSDerick Montague key: 'checkbox', 212828dda9bSDerick Montague sortable: false, 213828dda9bSDerick Montague }, 214828dda9bSDerick Montague { 215828dda9bSDerick Montague key: 'dateTime', 216de23ea23SSurya V label: i18n.global.t('pageDumps.table.dateAndTime'), 217828dda9bSDerick Montague sortable: true, 218828dda9bSDerick Montague }, 219828dda9bSDerick Montague { 220828dda9bSDerick Montague key: 'dumpType', 221de23ea23SSurya V label: i18n.global.t('pageDumps.table.dumpType'), 222828dda9bSDerick Montague sortable: true, 223828dda9bSDerick Montague }, 224828dda9bSDerick Montague { 225828dda9bSDerick Montague key: 'id', 226de23ea23SSurya V label: i18n.global.t('pageDumps.table.id'), 227828dda9bSDerick Montague sortable: true, 228828dda9bSDerick Montague }, 229828dda9bSDerick Montague { 230828dda9bSDerick Montague key: 'size', 231de23ea23SSurya V label: i18n.global.t('pageDumps.table.size'), 232828dda9bSDerick Montague sortable: true, 233828dda9bSDerick Montague }, 234828dda9bSDerick Montague { 235828dda9bSDerick Montague key: 'actions', 236828dda9bSDerick Montague sortable: false, 237828dda9bSDerick Montague label: '', 238828dda9bSDerick Montague tdClass: 'text-right text-nowrap', 239828dda9bSDerick Montague }, 240828dda9bSDerick Montague ], 241828dda9bSDerick Montague batchActions: [ 242828dda9bSDerick Montague { 243828dda9bSDerick Montague value: 'delete', 244de23ea23SSurya V label: i18n.global.t('global.action.delete'), 245828dda9bSDerick Montague }, 246828dda9bSDerick Montague ], 247e39b95d6SSukanya Pandey tableFilters: [ 248e39b95d6SSukanya Pandey { 249e39b95d6SSukanya Pandey key: 'dumpType', 250de23ea23SSurya V label: i18n.global.t('pageDumps.table.dumpType'), 251e39b95d6SSukanya Pandey values: [ 252e39b95d6SSukanya Pandey 'BMC Dump Entry', 253e39b95d6SSukanya Pandey 'Hostboot Dump Entry', 254e39b95d6SSukanya Pandey 'Resource Dump Entry', 255e39b95d6SSukanya Pandey 'System Dump Entry', 256e39b95d6SSukanya Pandey ], 257e39b95d6SSukanya Pandey }, 258e39b95d6SSukanya Pandey ], 259e39b95d6SSukanya Pandey activeFilters: [], 260f7000cd6SSukanya Pandey currentPage: currentPage, 261828dda9bSDerick Montague filterEndDate: null, 262828dda9bSDerick Montague filterStartDate: null, 263f7000cd6SSukanya Pandey itemsPerPageOptions: itemsPerPageOptions, 264f7000cd6SSukanya Pandey perPage: perPage, 265828dda9bSDerick Montague searchFilter, 266e39b95d6SSukanya Pandey searchTotalFilteredRows: 0, 267828dda9bSDerick Montague selectedRows, 268828dda9bSDerick Montague tableHeaderCheckboxIndeterminate, 269828dda9bSDerick Montague tableHeaderCheckboxModel, 270828dda9bSDerick Montague }; 271828dda9bSDerick Montague }, 272828dda9bSDerick Montague computed: { 273e39b95d6SSukanya Pandey filteredRows() { 274e39b95d6SSukanya Pandey return this.searchFilter 275e39b95d6SSukanya Pandey ? this.searchTotalFilteredRows 276e39b95d6SSukanya Pandey : this.filteredDumps.length; 277828dda9bSDerick Montague }, 278e39b95d6SSukanya Pandey allDumps() { 279e39b95d6SSukanya Pandey return this.$store.getters['dumps/allDumps'].map((item) => { 280828dda9bSDerick Montague return { 281828dda9bSDerick Montague ...item, 282828dda9bSDerick Montague actions: [ 283828dda9bSDerick Montague { 284828dda9bSDerick Montague value: 'download', 285de23ea23SSurya V title: i18n.global.t('global.action.download'), 286828dda9bSDerick Montague }, 287828dda9bSDerick Montague { 288828dda9bSDerick Montague value: 'delete', 289de23ea23SSurya V title: i18n.global.t('global.action.delete'), 290828dda9bSDerick Montague }, 291828dda9bSDerick Montague ], 292828dda9bSDerick Montague }; 293828dda9bSDerick Montague }); 294828dda9bSDerick Montague }, 295e39b95d6SSukanya Pandey filteredDumpsByDate() { 296828dda9bSDerick Montague return this.getFilteredTableDataByDate( 297e39b95d6SSukanya Pandey this.allDumps, 298828dda9bSDerick Montague this.filterStartDate, 299828dda9bSDerick Montague this.filterEndDate, 3008132399cSEd Tanous 'dateTime', 301828dda9bSDerick Montague ); 302828dda9bSDerick Montague }, 303e39b95d6SSukanya Pandey filteredDumps() { 304e39b95d6SSukanya Pandey return this.getFilteredTableData( 305e39b95d6SSukanya Pandey this.filteredDumpsByDate, 3068132399cSEd Tanous this.activeFilters, 307e39b95d6SSukanya Pandey ); 308828dda9bSDerick Montague }, 309828dda9bSDerick Montague }, 310828dda9bSDerick Montague created() { 311828dda9bSDerick Montague this.startLoader(); 312210b1276SKees Trommel this.$store.dispatch('dumps/getAllDumps').finally(() => { 31341057853SKenneth Fullbright this.endLoader(); 31441057853SKenneth Fullbright this.isBusy = false; 31541057853SKenneth Fullbright }); 316828dda9bSDerick Montague }, 317828dda9bSDerick Montague methods: { 318828dda9bSDerick Montague convertBytesToMegabytes(bytes) { 319828dda9bSDerick Montague return parseFloat((bytes / 1000000).toFixed(3)); 320828dda9bSDerick Montague }, 321e39b95d6SSukanya Pandey onFilterChange({ activeFilters }) { 322e39b95d6SSukanya Pandey this.activeFilters = activeFilters; 323e39b95d6SSukanya Pandey }, 324e39b95d6SSukanya Pandey onFiltered(filteredItems) { 325e39b95d6SSukanya Pandey this.searchTotalFilteredRows = filteredItems.length; 326828dda9bSDerick Montague }, 327828dda9bSDerick Montague onChangeDateTimeFilter({ fromDate, toDate }) { 328828dda9bSDerick Montague this.filterStartDate = fromDate; 329828dda9bSDerick Montague this.filterEndDate = toDate; 330828dda9bSDerick Montague }, 331828dda9bSDerick Montague onTableRowAction(action, dump) { 332828dda9bSDerick Montague if (action === 'delete') { 333828dda9bSDerick Montague this.$bvModal 334de23ea23SSurya V .msgBoxConfirm( 335de23ea23SSurya V i18n.global.t('pageDumps.modal.deleteDumpConfirmation'), 336de23ea23SSurya V { 337de23ea23SSurya V title: i18n.global.t('pageDumps.modal.deleteDump'), 338de23ea23SSurya V okTitle: i18n.global.t('pageDumps.modal.deleteDump'), 339de23ea23SSurya V cancelTitle: i18n.global.t('global.action.cancel'), 340d1ef18e6SPaul Fertser autoFocusButton: 'ok', 341de23ea23SSurya V }, 342de23ea23SSurya V ) 343828dda9bSDerick Montague .then((deleteConfrimed) => { 344828dda9bSDerick Montague if (deleteConfrimed) { 345828dda9bSDerick Montague this.$store 346828dda9bSDerick Montague .dispatch('dumps/deleteDumps', [dump]) 347828dda9bSDerick Montague .then((messages) => { 348828dda9bSDerick Montague messages.forEach(({ type, message }) => { 349828dda9bSDerick Montague if (type === 'success') { 350828dda9bSDerick Montague this.successToast(message); 351828dda9bSDerick Montague } else if (type === 'error') { 352828dda9bSDerick Montague this.errorToast(message); 353828dda9bSDerick Montague } 354828dda9bSDerick Montague }); 355828dda9bSDerick Montague }); 356828dda9bSDerick Montague } 357828dda9bSDerick Montague }); 358828dda9bSDerick Montague } 359828dda9bSDerick Montague }, 360828dda9bSDerick Montague onTableBatchAction(action) { 361828dda9bSDerick Montague if (action === 'delete') { 362828dda9bSDerick Montague this.$bvModal 363828dda9bSDerick Montague .msgBoxConfirm( 364de23ea23SSurya V i18n.global.t( 365828dda9bSDerick Montague 'pageDumps.modal.deleteDumpConfirmation', 3668132399cSEd Tanous this.selectedRows.length, 367828dda9bSDerick Montague ), 368828dda9bSDerick Montague { 369de23ea23SSurya V title: i18n.global.t( 370828dda9bSDerick Montague 'pageDumps.modal.deleteDump', 3718132399cSEd Tanous this.selectedRows.length, 372828dda9bSDerick Montague ), 373de23ea23SSurya V okTitle: i18n.global.t( 374828dda9bSDerick Montague 'pageDumps.modal.deleteDump', 3758132399cSEd Tanous this.selectedRows.length, 376828dda9bSDerick Montague ), 377de23ea23SSurya V cancelTitle: i18n.global.t('global.action.cancel'), 378d1ef18e6SPaul Fertser autoFocusButton: 'ok', 3798132399cSEd Tanous }, 380828dda9bSDerick Montague ) 381828dda9bSDerick Montague .then((deleteConfrimed) => { 382828dda9bSDerick Montague if (deleteConfrimed) { 383828dda9bSDerick Montague if (this.selectedRows.length === this.dumps.length) { 384828dda9bSDerick Montague this.$store 385828dda9bSDerick Montague .dispatch('dumps/deleteAllDumps') 386828dda9bSDerick Montague .then((success) => this.successToast(success)) 387828dda9bSDerick Montague .catch(({ message }) => this.errorToast(message)); 388828dda9bSDerick Montague } else { 389828dda9bSDerick Montague this.$store 390828dda9bSDerick Montague .dispatch('dumps/deleteDumps', this.selectedRows) 391828dda9bSDerick Montague .then((messages) => { 392828dda9bSDerick Montague messages.forEach(({ type, message }) => { 393828dda9bSDerick Montague if (type === 'success') { 394828dda9bSDerick Montague this.successToast(message); 395828dda9bSDerick Montague } else if (type === 'error') { 396828dda9bSDerick Montague this.errorToast(message); 397828dda9bSDerick Montague } 398828dda9bSDerick Montague }); 399828dda9bSDerick Montague }); 400828dda9bSDerick Montague } 401828dda9bSDerick Montague } 402828dda9bSDerick Montague }); 403828dda9bSDerick Montague } 404828dda9bSDerick Montague }, 405828dda9bSDerick Montague exportFileName(row) { 406cc79a531SGunnar Mills let filename = row.item.dumpType + '_' + row.item.id + '.tar.xz'; 407828dda9bSDerick Montague filename = filename.replace(RegExp(' ', 'g'), '_'); 408828dda9bSDerick Montague return filename; 409828dda9bSDerick Montague }, 410828dda9bSDerick Montague }, 411828dda9bSDerick Montague}; 412828dda9bSDerick Montague</script> 413