a b/src/store/slices/experimentsSlice.ts
1
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
2
import { ExperimentConfig, SimulationResult, GeneAssembly } from '../../types';
3
import { ExperimentResult } from '../../utils/pipelines/experimentPipeline';
4
5
interface ExperimentsState {
6
  experiments: ExperimentConfig[];
7
  activeExperiment: ExperimentConfig | null;
8
  simulationResults: SimulationResult[];
9
  experimentResults: ExperimentResult[];
10
  geneAssemblies: GeneAssembly[];
11
  loading: boolean;
12
  error: string | null;
13
}
14
15
const initialState: ExperimentsState = {
16
  experiments: [],
17
  activeExperiment: null,
18
  simulationResults: [],
19
  experimentResults: [],
20
  geneAssemblies: [],
21
  loading: false,
22
  error: null,
23
};
24
25
const experimentsSlice = createSlice({
26
  name: 'experiments',
27
  initialState,
28
  reducers: {
29
    setExperiments(state, action: PayloadAction<ExperimentConfig[]>) {
30
      state.experiments = action.payload;
31
    },
32
    setActiveExperiment(state, action: PayloadAction<ExperimentConfig>) {
33
      state.activeExperiment = action.payload;
34
    },
35
    addExperiment(state, action: PayloadAction<ExperimentConfig>) {
36
      state.experiments.push(action.payload);
37
    },
38
    updateExperiment(state, action: PayloadAction<ExperimentConfig>) {
39
      const index = state.experiments.findIndex(exp => exp.id === action.payload.id);
40
      if (index !== -1) {
41
        state.experiments[index] = action.payload;
42
      }
43
    },
44
    addSimulationResult(state, action: PayloadAction<SimulationResult>) {
45
      state.simulationResults.push(action.payload);
46
    },
47
    addExperimentResult(state, action: PayloadAction<ExperimentResult>) {
48
      state.experimentResults.push(action.payload);
49
    },
50
    setGeneAssemblies(state, action: PayloadAction<GeneAssembly[]>) {
51
      state.geneAssemblies = action.payload;
52
    },
53
    addGeneAssembly(state, action: PayloadAction<GeneAssembly>) {
54
      state.geneAssemblies.push(action.payload);
55
    },
56
    setLoading(state, action: PayloadAction<boolean>) {
57
      state.loading = action.payload;
58
    },
59
    setError(state, action: PayloadAction<string | null>) {
60
      state.error = action.payload;
61
    },
62
    clearError(state) {
63
      state.error = null;
64
    },
65
  },
66
});
67
68
export const {
69
  setExperiments,
70
  setActiveExperiment,
71
  addExperiment,
72
  updateExperiment,
73
  addSimulationResult,
74
  addExperimentResult,
75
  setGeneAssemblies,
76
  addGeneAssembly,
77
  setLoading,
78
  setError,
79
  clearError,
80
} = experimentsSlice.actions;
81
82
export default experimentsSlice.reducer;