Skip to content
Snippets Groups Projects
search.reducer.ts 6.48 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[];
    
        dataLengthIsLoading: boolean;
        dataLengthIsLoaded: boolean;
    
    François Agneray's avatar
    François Agneray committed
        selectedData: any[];
    
    Tifenn Guillas's avatar
    Tifenn Guillas committed
        processWip: boolean;
        processDone: boolean;
        processId: string;
    
    export 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: [],
    
        searchData: [],
        dataLengthIsLoading: false,
        dataLengthIsLoaded: false,
    
    Tifenn Guillas's avatar
    Tifenn Guillas committed
        selectedData: [],
        processWip: false,
        processDone: false,
    
        processId: 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: string = action.payload;
    
    François Agneray's avatar
    François Agneray committed
                return {
                    ...state,
                    currentStep
                };
    
            case actions.SELECT_DATASET:
    
                const datasetName: string = action.payload;
    
    François Agneray's avatar
    François Agneray committed
                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
                };
    
    
            case actions.IS_CONE_SEARCH_ADDED:
    
                const coneSearchAdded: boolean = action.payload;
    
    François Agneray's avatar
    François Agneray committed
            case actions.UPDATE_CRITERIA_LIST:
    
                const criteriaList: Criterion[] = action.payload;
    
    François Agneray's avatar
    François Agneray committed
                return {
                    ...state,
                    criteriaList
                };
    
            case actions.ADD_CRITERION:
    
                const criterion: Criterion = action.payload;
    
    François Agneray's avatar
    François Agneray committed
                return {
                    ...state,
                    criteriaList: [...state.criteriaList, criterion]
                };
    
            case actions.DELETE_CRITERION:
    
                const id: number = action.payload;
    
    François Agneray's avatar
    François Agneray committed
                return {
                    ...state,
                    criteriaList: [...state.criteriaList.filter(c => c.id !== id)]
                };
    
            case actions.UPDATE_OUTPUT_LIST:
    
                const outputList: number[] = action.payload;
    
    François Agneray's avatar
    François Agneray committed
                return {
                    ...state,
                    outputList
                };
    
    
            case actions.RETRIEVE_DATA_SUCCESS:
    
                const searchData: any[] = action.payload;
    
                return {
                    ...state,
    
            case actions.GET_DATA_LENGTH:
                return {
                    ...state,
                    dataLengthIsLoading: true
                };
    
    
            case actions.GET_DATA_LENGTH_SUCCESS:
    
                const dataLength: number = action.payload;
    
    François Agneray's avatar
    François Agneray committed
                return {
                    ...state,
    
                    dataLengthIsLoading: false,
                    dataLengthIsLoaded: true,
    
            case actions.GET_DATA_LENGTH_FAIL:
                return {
                    ...state,
                    dataLengthIsLoading: false
                };
    
    
    François Agneray's avatar
    François Agneray committed
            case actions.ADD_SELECTED_DATA:
    
                const addData: number | string = 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: number | string = 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: string = action.payload;
    
    Tifenn Guillas's avatar
    Tifenn Guillas committed
                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.DESTROY_RESULTS:
                return {
                    ...state,
                    searchData: null,
    
            case actions.RESET_SEARCH:
                return { ...initialState };
    
    
    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;
    
    export const getIsConeSearchAdded = (state: State) => state.coneSearchAdded;
    
    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 getDataLengthIsLoading = (state: State) => state.dataLengthIsLoading;
    export const getDataLengthIsLoaded = (state: State) => state.dataLengthIsLoaded;
    
    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;