summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/ide/stores
diff options
context:
space:
mode:
authorPhil Hughes <me@iamphill.com>2018-05-14 16:30:52 +0100
committerPhil Hughes <me@iamphill.com>2018-05-22 11:11:36 +0100
commitba90742631a5e1a0d1edc546d5d49b59210642bf (patch)
tree67b8e75ae82003cf502ba7303bf6d586224949cb /app/assets/javascripts/ide/stores
parent50985f54baf9a4d7e840e22ce8914f0bc919f5d8 (diff)
downloadgitlab-ce-ba90742631a5e1a0d1edc546d5d49b59210642bf.tar.gz
group jobs into stageside-jobs-list
Diffstat (limited to 'app/assets/javascripts/ide/stores')
-rw-r--r--app/assets/javascripts/ide/stores/modules/pipelines/actions.js14
-rw-r--r--app/assets/javascripts/ide/stores/modules/pipelines/getters.js7
-rw-r--r--app/assets/javascripts/ide/stores/modules/pipelines/mutations.js30
-rw-r--r--app/assets/javascripts/ide/stores/modules/pipelines/state.js2
4 files changed, 41 insertions, 12 deletions
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: [],
});