Skip to content
Snippets Groups Projects
search.reducer.ts 6.2 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 {
    
    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[];
    
        searchMetaIsLoading: boolean;
        searchMetaIsLoaded: boolean;
    
    François Agneray's avatar
    François Agneray committed
        searchMeta: SearchMeta;
        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;
    
    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: [],
    
        searchMetaIsLoading: false,
        searchMetaIsLoaded: false,
    
    François Agneray's avatar
    François Agneray committed
        searchMeta: null,
    
    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
    
    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_META:
                return {
                    ...state,
                    searchMetaIsLoading: true
                };
    
    
    François Agneray's avatar
    François Agneray committed
            case actions.RETRIEVE_META_SUCCESS:
                const searchMeta = action.payload as SearchMeta;
    
                return {
                    ...state,
    
                    searchMeta,
                    searchMetaIsLoading: false,
                    searchMetaIsLoaded: true
                };
    
            case actions.RETRIEVE_META_FAIL:
                return {
                    ...state,
                    searchMeta,
                    searchMetaIsLoading: false,
                    searchMetaIsLoaded: false
    
    François Agneray's avatar
    François Agneray committed
    
            case actions.RETRIEVE_DATA_SUCCESS:
                const searchData = action.payload as any[];
    
                return {
                    ...state,
                    searchData
    
    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.DESTROY_RESULTS:
                return {
                    ...state,
                    searchMetaIsLoaded: false,
                    searchMeta: null,
                    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;
    
    export const getSearchMetaIsLoading = (state: State) => state.searchMetaIsLoading;
    export const getSearchMetaIsLoaded = (state: State) => state.searchMetaIsLoaded;
    
    François Agneray's avatar
    François Agneray committed
    export const getSearchMeta = (state: State) => state.searchMeta;
    export const getSearchData = (state: State) => state.searchData;
    
    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;