/* eslint-disable no-param-reassign, no-new */ /* global Flash */ const Vue = window.Vue = require('vue'); window.Vue.use(require('vue-resource')); const EnvironmentsService = require('../services/environments_service'); const EnvironmentTable = require('../components/environments_table'); const EnvironmentsStore = require('../stores/environments_store'); require('../../vue_shared/components/table_pagination'); require('../../lib/utils/common_utils'); require('../../vue_shared/vue_resource_interceptor'); module.exports = Vue.component('environment-folder-view', { components: { 'environment-table': EnvironmentTable, 'table-pagination': gl.VueGlPagination, }, data() { const environmentsData = document.querySelector('#environments-folder-list-view').dataset; const store = new EnvironmentsStore(); const pathname = window.location.pathname; const endpoint = `${pathname}.json`; const folderName = pathname.substr(pathname.lastIndexOf('/') + 1); return { store, folderName, endpoint, state: store.state, visibility: 'available', isLoading: false, cssContainerClass: environmentsData.cssClass, canCreateDeployment: environmentsData.canCreateDeployment, canReadEnvironment: environmentsData.canReadEnvironment, // svgs commitIconSvg: environmentsData.commitIconSvg, playIconSvg: environmentsData.playIconSvg, terminalIconSvg: environmentsData.terminalIconSvg, // Pagination Properties, paginationInformation: {}, pageNumber: 1, }; }, computed: { scope() { return gl.utils.getParameterByName('scope'); }, canReadEnvironmentParsed() { return gl.utils.convertPermissionToBoolean(this.canReadEnvironment); }, canCreateDeploymentParsed() { return gl.utils.convertPermissionToBoolean(this.canCreateDeployment); }, /** * URL to link in the stopped tab. * * @return {String} */ stoppedPath() { return `${window.location.pathname}?scope=stopped`; }, /** * URL to link in the available tab. * * @return {String} */ availablePath() { return window.location.pathname; }, }, /** * Fetches all the environments and stores them. * Toggles loading property. */ created() { const scope = gl.utils.getParameterByName('scope') || this.visibility; const pageNumber = gl.utils.getParameterByName('page') || this.pageNumber; const endpoint = `${this.endpoint}?scope=${scope}&page=${pageNumber}`; const service = new EnvironmentsService(endpoint); this.isLoading = true; return service.all() .then(resp => ({ headers: resp.headers, body: resp.json(), })) .then((response) => { this.store.storeAvailableCount(response.body.available_count); this.store.storeStoppedCount(response.body.stopped_count); this.store.storeEnvironments(response.body.environments); this.store.setPagination(response.headers); }) .then(() => { this.isLoading = false; }) .catch(() => { this.isLoading = false; new Flash('An error occurred while fetching the environments.', 'alert'); }); }, methods: { /** * Will change the page number and update the URL. * * @param {Number} pageNumber desired page to go to. */ changePage(pageNumber) { const param = gl.utils.setParamInURL('page', pageNumber); gl.utils.visitUrl(param); return param; }, }, template: `