diff options
Diffstat (limited to 'app/assets/javascripts')
5 files changed, 43 insertions, 14 deletions
diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index e16d520024b..eb919241318 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -230,12 +230,12 @@ const Api = { return axios.get(url, { params }); }, - pipelineJobs(projectPath, pipelineId) { + pipelineJobs(projectPath, pipelineId, params = {}) { const url = Api.buildUrl(this.pipelineJobsPath) .replace(':id', encodeURIComponent(projectPath)) .replace(':pipeline_id', pipelineId); - return axios.get(url); + return axios.get(url, { params }); }, buildUrl(url) { diff --git a/app/assets/javascripts/ide/stores/modules/pipelines/actions.js b/app/assets/javascripts/ide/stores/modules/pipelines/actions.js index 146a0e72354..07f7b201f2e 100644 --- a/app/assets/javascripts/ide/stores/modules/pipelines/actions.js +++ b/app/assets/javascripts/ide/stores/modules/pipelines/actions.js @@ -28,12 +28,20 @@ export const receiveJobsError = ({ commit }) => { }; export const receiveJobsSuccess = ({ commit }, data) => commit(types.RECEIVE_JOBS_SUCCESS, data); -export const fetchJobs = ({ dispatch, state, rootState }) => { +export const fetchJobs = ({ dispatch, state, rootState }, page = '1') => { dispatch('requestJobs'); - Api.pipelineJobs(rootState.currentProjectId, state.latestPipeline.id) - .then(({ data }) => { + Api.pipelineJobs(rootState.currentProjectId, state.latestPipeline.id, { + page, + }) + .then(({ data, headers }) => { + const nextPage = headers && headers['x-next-page']; + dispatch('receiveJobsSuccess', data); + + if (nextPage) { + dispatch('fetchJobs', nextPage); + } }) .catch(() => dispatch('receiveJobsError')); }; diff --git a/app/assets/javascripts/ide/stores/modules/pipelines/getters.js b/app/assets/javascripts/ide/stores/modules/pipelines/getters.js index 8344bb1b34e..d6c91f5b64d 100644 --- a/app/assets/javascripts/ide/stores/modules/pipelines/getters.js +++ b/app/assets/javascripts/ide/stores/modules/pipelines/getters.js @@ -1,2 +1,7 @@ -// eslint-disable-next-line import/prefer-default-export export const hasLatestPipeline = state => !state.isLoadingPipeline && !!state.latestPipeline; + +export const failedJobs = state => + state.stages.reduce( + (acc, stage) => acc.concat(stage.jobs.filter(job => job.status === 'failed')), + [], + ); diff --git a/app/assets/javascripts/ide/stores/modules/pipelines/mutations.js b/app/assets/javascripts/ide/stores/modules/pipelines/mutations.js index 382775de10a..2b16e57b386 100644 --- a/app/assets/javascripts/ide/stores/modules/pipelines/mutations.js +++ b/app/assets/javascripts/ide/stores/modules/pipelines/mutations.js @@ -26,12 +26,28 @@ export default { }, [types.RECEIVE_JOBS_SUCCESS](state, jobs) { state.isLoadingJobs = false; - state.jobs = jobs.map(job => ({ - id: job.id, - name: job.name, - status: job.status, - stage: job.stage, - duration: job.duration, - })); + + state.stages = jobs.reduce((acc, job) => { + let stage = acc.find(s => s.title === job.stage); + + if (!stage) { + stage = { + title: job.stage, + jobs: [], + }; + + acc.push(stage); + } + + stage.jobs = stage.jobs.concat({ + id: job.id, + name: job.name, + status: job.status, + stage: job.stage, + duration: job.duration, + }); + + return acc; + }, state.stages); }, }; diff --git a/app/assets/javascripts/ide/stores/modules/pipelines/state.js b/app/assets/javascripts/ide/stores/modules/pipelines/state.js index deb376f07d6..6f22542aaea 100644 --- a/app/assets/javascripts/ide/stores/modules/pipelines/state.js +++ b/app/assets/javascripts/ide/stores/modules/pipelines/state.js @@ -2,5 +2,5 @@ export default () => ({ isLoadingPipeline: false, isLoadingJobs: false, latestPipeline: null, - jobs: [], + stages: [], }); |