Skip to content
Snippets Groups Projects
search.reducer.ts 3.45 KiB
Newer Older
  • Learn to ignore specific revisions
  • François Agneray's avatar
    François Agneray committed
    import * as actions from './search.action';
    
    
    François Agneray's avatar
    François Agneray committed
    import { Criterion, SearchMeta } from './model';
    
    François Agneray's avatar
    François Agneray committed
    
    export interface State {
        currentStep: string;
        datasetName: string;
    
    François Agneray's avatar
    François Agneray committed
        criteriaStepChecked: boolean;
        outputStepChecked: boolean;
        resultStepChecked: boolean;
    
    François Agneray's avatar
    François Agneray committed
        criteriaList: Criterion[];
        outputList: number[];
    
    François Agneray's avatar
    François Agneray committed
        searchMeta: SearchMeta;
        searchData: any[];
    
    François Agneray's avatar
    François Agneray committed
    }
    
    const initialState: State = {
        currentStep: null,
        datasetName: null,
    
    François Agneray's avatar
    François Agneray committed
        criteriaStepChecked: false,
        outputStepChecked: false,
        resultStepChecked: false,
    
    François Agneray's avatar
    François Agneray committed
        criteriaList: [],
    
    François Agneray's avatar
    François Agneray committed
        outputList: [],
        searchMeta: null,
        searchData: null
    
    François Agneray's avatar
    François Agneray committed
    };
    
    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
                };
    
    
    François Agneray's avatar
    François Agneray committed
            case actions.NEW_SEARCH:
                return initialState;
    
    
    François Agneray's avatar
    François Agneray committed
            case actions.CRITERIA_CHECKED:
                return {
                    ...state,
                    criteriaStepChecked: true
                };
    
            case actions.OUTPUT_CHECKED:
                return {
                    ...state,
                    outputStepChecked: true
                };
    
            case actions.RESULT_CHECKED:
                return {
                    ...state,
                    resultStepChecked: true
                };
    
    
    François Agneray's avatar
    François Agneray committed
            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
                };
    
    
    François Agneray's avatar
    François Agneray committed
            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
                }
    
    
    François Agneray's avatar
    François Agneray committed
            default:
                return state;
        }
    }
    
    export const getCurrentStep = (state: State) => state.currentStep;
    export const getDatasetName = (state: State) => state.datasetName;
    
    François Agneray's avatar
    François Agneray committed
    export const getCriteriaStepChecked = (state: State) => state.criteriaStepChecked;
    export const getOutputStepChecked = (state: State) => state.outputStepChecked;
    export const getResultStepChecked = (state: State) => state.resultStepChecked;
    
    François Agneray's avatar
    François Agneray committed
    export const getCriteriaList = (state: State) => state.criteriaList;
    export const getOutputList = (state: State) => state.outputList;
    
    François Agneray's avatar
    François Agneray committed
    export const getSearchMeta = (state: State) => state.searchMeta;
    export const getSearchData = (state: State) => state.searchData;