text: import * as types from './mutation_types';
  import { normalizeJob } from './utils';
  
  export default {
    [types.REQUEST_LATEST_PIPELINE](state) {
      state.isLoadingPipeline = true;
    },
    [types.RECEIVE_LASTEST_PIPELINE_ERROR](state) {
      state.isLoadingPipeline = false;
    },
    [types.RECEIVE_LASTEST_PIPELINE_SUCCESS](state, pipeline) {
      state.isLoadingPipeline = false;
      state.hasLoadedPipeline = true;
  
      if (pipeline) {
        state.latestPipeline = {
          id: pipeline.id,
          path: pipeline.path,
          commit: pipeline.commit,
          details: {
            status: pipeline.details.status,
          },
          yamlError: pipeline.yaml_errors,
        };
        state.stages = pipeline.details.stages.map((stage, i) => {
          const foundStage = state.stages.find(s => s.id === i);
          return {
            id: i,
            dropdownPath: stage.dropdown_path,
            name: stage.name,
            status: stage.status,
            isCollapsed: foundStage ? foundStage.isCollapsed : false,
            isLoading: foundStage ? foundStage.isLoading : false,
            jobs: foundStage ? foundStage.jobs : [],
          };
        });
      } else {
        state.latestPipeline = null;
      }
    },
    [types.REQUEST_JOBS](state, id) {
      state.stages = state.stages.map(stage => ({
        ...stage,
        isLoading: stage.id === id ? true : stage.isLoading,
      }));
    },
    [types.RECEIVE_JOBS_ERROR](state, id) {
      state.stages = state.stages.map(stage => ({
        ...stage,
        isLoading: stage.id === id ? false : stage.isLoading,
      }));
    },
    [types.RECEIVE_JOBS_SUCCESS](state, { id, data }) {
      state.stages = state.stages.map(stage => ({
        ...stage,
        isLoading: stage.id === id ? false : stage.isLoading,
        jobs: stage.id === id ? data.latest_statuses.map(normalizeJob) : stage.jobs,
      }));
    },
    [types.TOGGLE_STAGE_COLLAPSE](state, id) {
      state.stages = state.stages.map(stage => ({
        ...stage,
        isCollapsed: stage.id === id ? !stage.isCollapsed : stage.isCollapsed,
      }));
    },
    [types.SET_DETAIL_JOB](state, job) {
      state.detailJob = { ...job };
    },
    [types.REQUEST_JOB_LOGS](state) {
      state.detailJob.isLoading = true;
    },
    [types.RECEIVE_JOB_LOGS_ERROR](state) {
      state.detailJob.isLoading = false;
    },
    [types.RECEIVE_JOB_LOGS_SUCCESS](state, data) {
      state.detailJob.isLoading = false;
      state.detailJob.output = data.html;
    },
  };
  