diff options
author | Phil Hughes <me@iamphill.com> | 2018-05-25 14:13:59 +0100 |
---|---|---|
committer | Phil Hughes <me@iamphill.com> | 2018-05-25 14:13:59 +0100 |
commit | a83dd6642104faf4c8764283f5b7252a8ecd9590 (patch) | |
tree | 66cabf49dfb6049bb5e4a4c0135f9fd86b4cf62e /app/assets/javascripts/ide/stores/modules/pipelines/actions.js | |
parent | 0c0a779f4c97622ad2359a94d1c870b75a8b0e6d (diff) | |
download | gitlab-ce-a83dd6642104faf4c8764283f5b7252a8ecd9590.tar.gz |
refactored to use data we already have
this required moving some data store actions & mutations around
Diffstat (limited to 'app/assets/javascripts/ide/stores/modules/pipelines/actions.js')
-rw-r--r-- | app/assets/javascripts/ide/stores/modules/pipelines/actions.js | 66 |
1 files changed, 39 insertions, 27 deletions
diff --git a/app/assets/javascripts/ide/stores/modules/pipelines/actions.js b/app/assets/javascripts/ide/stores/modules/pipelines/actions.js index b5d78b381ea..35b7be4d866 100644 --- a/app/assets/javascripts/ide/stores/modules/pipelines/actions.js +++ b/app/assets/javascripts/ide/stores/modules/pipelines/actions.js @@ -1,41 +1,55 @@ +import Visibility from 'visibilityjs'; import axios from 'axios'; import { __ } from '../../../../locale'; -import Api from '../../../../api'; import flash from '../../../../flash'; +import Poll from '../../../../lib/utils/poll'; +import service from '../../../services'; import * as types from './mutation_types'; +let eTagPoll; + +export const stopPipelinePolling = () => eTagPoll.stop(); +export const restartPipelinePolling = () => eTagPoll.restart(); + export const requestLatestPipeline = ({ commit }) => commit(types.REQUEST_LATEST_PIPELINE); -export const receiveLatestPipelineError = ({ commit }) => { +export const receiveLatestPipelineError = ({ commit, dispatch }) => { flash(__('There was an error loading latest pipeline')); commit(types.RECEIVE_LASTEST_PIPELINE_ERROR); + dispatch('stopPipelinePolling'); }; -export const receiveLatestPipelineSuccess = ({ commit }, pipeline) => - commit(types.RECEIVE_LASTEST_PIPELINE_SUCCESS, pipeline); - -export const fetchLatestPipeline = ({ dispatch, rootState }, sha) => { - dispatch('requestLatestPipeline'); +export const receiveLatestPipelineSuccess = ({ rootGetters, commit }, { pipelines }) => { + if (pipelines && pipelines.length) { + const lastCommitHash = rootGetters.lastCommit && rootGetters.lastCommit.id; + const lastCommitPipeline = pipelines.find(pipeline => pipeline.commit.id === lastCommitHash); - return Api.pipelines(rootState.currentProjectId, { sha, per_page: '1' }) - .then(({ data }) => { - dispatch('receiveLatestPipelineSuccess', data.pop()); - }) - .catch(() => dispatch('receiveLatestPipelineError')); + commit(types.RECEIVE_LASTEST_PIPELINE_SUCCESS, lastCommitPipeline); + } }; -export const requestStages = ({ commit }) => commit(types.REQUEST_STAGES); -export const receiveStagesError = ({ commit }) => { - flash(__('There was an error loading job stages')); - commit(types.RECEIVE_STAGES_ERROR); -}; -export const receiveStagesSuccess = ({ commit }, data) => - commit(types.RECEIVE_STAGES_SUCCESS, data); +export const fetchLatestPipeline = ({ dispatch, rootGetters }) => { + if (eTagPoll) return; + + dispatch('requestLatestPipeline'); + + eTagPoll = new Poll({ + resource: service, + method: 'lastCommitPipelines', + data: { getters: rootGetters }, + successCallback: ({ data }) => dispatch('receiveLatestPipelineSuccess', data), + errorCallback: () => dispatch('receiveLatestPipelineError'), + }); -export const fetchStages = ({ dispatch, state, rootState }) => { - dispatch('requestStages'); + if (!Visibility.hidden()) { + eTagPoll.makeRequest(); + } - Api.pipelineJobs(rootState.currentProjectId, state.latestPipeline.id) - .then(({ data }) => dispatch('receiveStagesSuccess', data)) - .catch(() => dispatch('receiveStagesError')); + Visibility.change(() => { + if (!Visibility.hidden()) { + eTagPoll.restart(); + } else { + eTagPoll.stop(); + } + }); }; export const requestJobs = ({ commit }, id) => commit(types.REQUEST_JOBS, id); @@ -51,9 +65,7 @@ export const fetchJobs = ({ dispatch }, stage) => { axios .get(stage.dropdown_path) - .then(({ data }) => { - dispatch('receiveJobsSuccess', { id: stage.id, data }); - }) + .then(({ data }) => dispatch('receiveJobsSuccess', { id: stage.id, data })) .catch(() => dispatch('receiveJobsError', stage.id)); }; |