Skip to content
Snippets Groups Projects
detail.reducer.ts 2.11 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
     * This file is part of Anis Client.
     *
     * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
     *
     * For the full copyright and license information, please view the LICENSE
     * file that was distributed with this source code.
     */
    
    import { createReducer, on } from '@ngrx/store';
    
    import * as detailActions from '../actions/detail.actions';
    
    
    /**
     * Interface for detail state.
     *
     * @interface State
     */
    
    export interface State {
        object: any;
        objectIsLoading: boolean;
        objectIsLoaded: boolean;
        spectraCSV: string;
        spectraIsLoading: boolean;
        spectraIsLoaded: boolean;
    }
    
    export const initialState: State = {
        object: null,
        objectIsLoading: false,
        objectIsLoaded: false,
        spectraCSV: null,
        spectraIsLoading: false,
        spectraIsLoaded: false,
    };
    
    export const detailReducer = createReducer(
        initialState,
        on(detailActions.retrieveObject, state => ({
            ...state,
            objectIsLoading: true,
            objectIsLoaded: false
        })),
        on(detailActions.retrieveObjectSuccess, (state, { object }) => ({
            ...state,
            objectIsLoading: false,
            objectIsLoaded: true,
            object
        })),
        on(detailActions.retrieveObjectFail, state => ({
            ...state,
            objectIsLoading: false
        })),
        on(detailActions.retrieveSpectra, state => ({
            ...state,
            spectraIsLoading: true,
            spectraIsLoaded: false
        })),
        on(detailActions.retrieveSpectraSuccess, (state, { spectraCSV }) => ({
            ...state,
            spectraIsLoading: false,
            spectraIsLoaded: true,
            spectraCSV
        })),
        on(detailActions.retrieveSpectraFail, state => ({
            ...state,
            spectraIsLoading: false
        }))
    );
    
    export const selectObject = (state: State) => state.object;
    export const selectObjectIsLoading = (state: State) => state.objectIsLoading;
    export const selectObjectIsLoaded = (state: State) => state.objectIsLoaded;
    export const selectSpectraCSV = (state: State) => state.spectraCSV;
    export const selectSpectraIsLoading = (state: State) => state.spectraIsLoading;
    export const selectSpectraIsLoaded = (state: State) => state.spectraIsLoaded;