Skip to content
Snippets Groups Projects
search.reducer.ts 5.73 KiB
Newer Older
  • Learn to ignore specific revisions
  • François Agneray's avatar
    François Agneray committed
    import * as actions from './search.action';
    
    
    import { Criterion } from './model';
    
    François Agneray's avatar
    François Agneray committed
    
    export interface State {
    
    François Agneray's avatar
    François Agneray committed
        pristine: boolean;
    
    François Agneray's avatar
    François Agneray committed
        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
        searchData: any[];
    
    François Agneray's avatar
    François Agneray committed
        selectedData: any[];
    
    Tifenn Guillas's avatar
    Tifenn Guillas committed
        processWip: boolean;
        processDone: boolean;
        processId: string;
    
        outputListEmpty: boolean;
    
    François Agneray's avatar
    François Agneray committed
    }
    
    const initialState: State = {
    
    François Agneray's avatar
    François Agneray committed
        pristine: true,
    
    François Agneray's avatar
    François Agneray committed
        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: [],
    
    François Agneray's avatar
    François Agneray committed
        searchData: null,
    
    Tifenn Guillas's avatar
    Tifenn Guillas committed
        selectedData: [],
        processWip: false,
        processDone: false,
    
        processId: null,
        outputListEmpty: 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,
    
    François Agneray's avatar
    François Agneray committed
                    pristine: false,
    
    François Agneray's avatar
    François Agneray committed
                    datasetName
                };
    
    
    François Agneray's avatar
    François Agneray committed
            case actions.NEW_SEARCH:
    
                return {
                    ...initialState,
                    currentStep: 'dataset'
                };
    
    François Agneray's avatar
    François Agneray committed
    
    
    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
                };
    
    
            case actions.RETRIEVE_DATA_SUCCESS:
                const searchData = action.payload as any[];
    
                return {
                    ...state,
    
            case actions.GET_DATA_LENGTH_SUCCESS:
                const dataLength = action.payload as number;
    
    François Agneray's avatar
    François Agneray committed
                return {
                    ...state,
    
    François Agneray's avatar
    François Agneray committed
            case actions.ADD_SELECTED_DATA:
    
                const addData = action.payload;
    
    François Agneray's avatar
    François Agneray committed
                return {
                    ...state,
                    selectedData: [...state.selectedData, addData]
    
    Tifenn Guillas's avatar
    Tifenn Guillas committed
                };
    
    François Agneray's avatar
    François Agneray committed
    
            case actions.DELETE_SELECTED_DATA:
    
                const deleteData = action.payload;
    
    François Agneray's avatar
    François Agneray committed
                return {
                    ...state,
                    selectedData: [...state.selectedData.filter(d => d !== deleteData)]
    
    Tifenn Guillas's avatar
    Tifenn Guillas committed
                };
    
            case actions.EXECUTE_PROCESS:
                return {
                    ...state,
                    processWip: true,
                    processDone: false
                };
    
            case actions.EXECUTE_PROCESS_WIP:
                const processId = action.payload as string;
                return {
                    ...state,
                    processId
                };
    
            case actions.EXECUTE_PROCESS_SUCCESS:
                return {
                    ...state,
                    processWip: false,
                    processDone: true
                };
    
            case actions.EXECUTE_PROCESS_FAIL:
                return {
                    ...state,
                    processWip: false,
                    processDone: false,
                    processId: null
                };
    
            
            case actions.OUTPUT_LIST_EMPTY:
                const outputListEmpty = action.payload as boolean;
                return {
                    ...state,
                    outputListEmpty
                };
    
            case actions.DESTROY_RESULTS:
                return {
                    ...state,
                    searchData: null,
    
    François Agneray's avatar
    François Agneray committed
            default:
                return state;
        }
    }
    
    
    François Agneray's avatar
    François Agneray committed
    export const getPristine = (state: State) => state.pristine;
    
    François Agneray's avatar
    François Agneray committed
    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 getSearchData = (state: State) => state.searchData;
    
    export const getDataLength = (state: State) => state.dataLength;
    
    François Agneray's avatar
    François Agneray committed
    export const getSelectedData = (state: State) => state.selectedData;
    
    Tifenn Guillas's avatar
    Tifenn Guillas committed
    export const getProcessWip = (state: State) => state.processWip;
    export const getProcessDone = (state: State) => state.processDone;
    export const getProcessId = (state: State) => state.processId;
    
    export const getOutputListEmpty = (state: State) => state.outputListEmpty;