stitch-ui
Version:
79 lines (76 loc) • 2.49 kB
JavaScript
import { createReducer } from "redux-act";
import { Map } from "immutable";
import * as actions from "./actions";
const updatePipeline = (state, pipelineKey, mutator) =>
state.pipelines.set(pipelineKey, mutator(state.pipelines.get(pipelineKey)));
export default createReducer(
{
[actions.initPipeline]: (state, { pipelineKey, pipelineObj }) => ({
...state,
pipelines: state.pipelines.set(pipelineKey, pipelineObj),
pipelinesClean: state.pipelines.set(pipelineKey, pipelineObj)
}),
[actions.discardChanges]: (state, { pipelineKey }) => ({
...state,
pipelines: state.pipelines.set(
pipelineKey,
state.pipelinesClean.get(pipelineKey)
)
}),
[actions.addStageAction]: (state, { pipelineKey }) => ({
...state,
pipelines: updatePipeline(state, pipelineKey, pipeline =>
pipeline.addStage()
)
}),
[actions.removeStageAction]: (state, { pipelineKey, index }) => ({
...state,
pipelines: updatePipeline(state, pipelineKey, pipeline =>
pipeline.removeStage(index)
)
}),
[actions.moveStageAction]: (
state,
{ pipelineKey, fromIndex, toIndex }
) => ({
...state,
pipelines: updatePipeline(state, pipelineKey, pipeline =>
pipeline.moveStage(fromIndex, toIndex)
)
}),
[actions.setOutputTypeAction]: (state, { pipelineKey, outputType }) => ({
...state,
pipelines: updatePipeline(state, pipelineKey, pipeline =>
pipeline.setOutputType(outputType)
)
}),
[actions.setStageAction]: (state, { pipelineKey, index, stage }) => ({
...state,
pipelines: updatePipeline(state, pipelineKey, pipeline =>
pipeline.setStage(index, stage)
)
}),
[actions.applyEditChange]: (state, { pipelineKey, index, mutator }) => ({
...state,
pipelines: updatePipeline(state, pipelineKey, pipeline =>
pipeline.applyEditChange(index, mutator)
)
}),
[actions.openEditorAction]: (state, { pipelineKey, index }) => ({
...state,
pipelines: updatePipeline(state, pipelineKey, pipeline =>
pipeline.startEditing(index)
)
}),
[actions.closeEditorAction]: (state, { pipelineKey, index }) => ({
...state,
pipelines: updatePipeline(state, pipelineKey, pipeline =>
pipeline.endEditing(index)
)
})
},
{
// A map of (pipelineKey) -> (models.Pipeline)
pipelines: new Map()
}
);