import * as actions from './search.action'; import { Criterion, SearchMeta } from './model'; export interface State { currentStep: string; datasetName: string; criteriaStepChecked: boolean; outputStepChecked: boolean; resultStepChecked: boolean; criteriaList: Criterion[]; outputList: number[]; searchMeta: SearchMeta; searchData: any[]; } const initialState: State = { currentStep: null, datasetName: null, criteriaStepChecked: false, outputStepChecked: false, resultStepChecked: false, criteriaList: [], outputList: [], searchMeta: null, searchData: null }; export function reducer(state: State = initialState, action: actions.Actions): State { switch (action.type) { case actions.CHANGE_STEP: const currentStep = action.payload as string; return { ...state, currentStep }; case actions.SELECT_DATASET: const datasetName = action.payload as string; return { ...state, datasetName }; case actions.NEW_SEARCH: return initialState; case actions.CRITERIA_CHECKED: return { ...state, criteriaStepChecked: true }; case actions.OUTPUT_CHECKED: return { ...state, outputStepChecked: true }; case actions.RESULT_CHECKED: return { ...state, resultStepChecked: true }; case actions.UPDATE_CRITERIA_LIST: const criteriaList = action.payload as Criterion[]; return { ...state, criteriaList }; case actions.ADD_CRITERION: const criterion = action.payload as Criterion; return { ...state, criteriaList: [...state.criteriaList, criterion] }; case actions.DELETE_CRITERION: const id = action.payload as number; return { ...state, criteriaList: [...state.criteriaList.filter(c => c.id !== id)] }; case actions.UPDATE_OUTPUT_LIST: const outputList = action.payload as number[]; return { ...state, outputList }; case actions.RETRIEVE_META_SUCCESS: const searchMeta = action.payload as SearchMeta; return { ...state, searchMeta } case actions.RETRIEVE_DATA_SUCCESS: const searchData = action.payload as any[]; return { ...state, searchData } default: return state; } } export const getCurrentStep = (state: State) => state.currentStep; export const getDatasetName = (state: State) => state.datasetName; export const getCriteriaStepChecked = (state: State) => state.criteriaStepChecked; export const getOutputStepChecked = (state: State) => state.outputStepChecked; export const getResultStepChecked = (state: State) => state.resultStepChecked; export const getCriteriaList = (state: State) => state.criteriaList; export const getOutputList = (state: State) => state.outputList; export const getSearchMeta = (state: State) => state.searchMeta; export const getSearchData = (state: State) => state.searchData;