/* eslint-disable no-new */ /* global Flash */ import Vue from 'vue'; import EnvironmentsService from '../services/environments_service'; import EnvironmentTable from '../components/environments_table'; import EnvironmentsStore from '../stores/environments_store'; import TablePaginationComponent from '../../vue_shared/components/table_pagination'; import '../../lib/utils/common_utils'; import '../../vue_shared/vue_resource_interceptor'; export default Vue.component('environment-folder-view', { components: { 'environment-table': EnvironmentTable, 'table-pagination': TablePaginationComponent, }, 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}`; this.service = new EnvironmentsService(endpoint); this.isLoading = true; return this.service.get() .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: `

Environments / {{folderName}}

`, });