summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/ide/stores/modules/pipelines/actions.js
diff options
context:
space:
mode:
authorPhil Hughes <me@iamphill.com>2018-05-25 14:13:59 +0100
committerPhil Hughes <me@iamphill.com>2018-05-25 14:13:59 +0100
commita83dd6642104faf4c8764283f5b7252a8ecd9590 (patch)
tree66cabf49dfb6049bb5e4a4c0135f9fd86b4cf62e /app/assets/javascripts/ide/stores/modules/pipelines/actions.js
parent0c0a779f4c97622ad2359a94d1c870b75a8b0e6d (diff)
downloadgitlab-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.js66
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));
};