Source: reducers/fetching.js

import {
    FORM_REQUEST_SENT,
    FORM_REQUEST_SUCCESS,
    FORM_REQUEST_FINISHED,
    FORM_REQUEST_ERROR,
    DATA_REQUEST_SENT,
    DATA_REQUEST_SUCCESS,
    DATA_REQUEST_ERROR,
} from '../actions/types'

const initialState = {
    dataFetching: {},
    formRequest: {},
}

/**
 * Reducer for requests to the backend (data fetching, form submitting)
 * @param  {} state=initialState
 * @param  {} action
 */
export const fetching = (state = initialState, action) => {
    switch (action.type) {

        case DATA_REQUEST_SENT:
            return {
                dataFetching: {
                    data: action.data,
                    isFetching: true,
                    status: action.status,
                    message: action.message
                },
                formRequest: {}
            }

        case DATA_REQUEST_SUCCESS:
            return {
                dataFetching: {
                    data: action.data,
                    isFetching: false,
                    status: action.status,
                    message: action.message
                },
                formRequest: {}
            }
        case DATA_REQUEST_ERROR:
            return {
                dataFetching: {
                    data: action.data,
                    isFetching: false,
                    status: action.status,
                    message: action.message
                },
                formRequest: {}
            }

        case FORM_REQUEST_ERROR:
            return {
                dataFetching: {},
                formRequest: {
                    form: action.form,
                    isFetching: false,
                    status: action.status,
                    message: action.message
                }
            }
        case FORM_REQUEST_SENT:
            return {
                dataFetching: {},
                formRequest: {
                    form: action.form,
                    isFetching: true
                }
            }

        case FORM_REQUEST_SUCCESS:
            return {
                dataFetching: {},
                formRequest: {
                    form: action.form,
                    isFetching: false,
                    status: action.status,
                    message: action.message
                }
            }
        case FORM_REQUEST_FINISHED:
            return {
                dataFetching: {},
                formRequest: {}
            }

            case 'GEOCODE_SUCCESS':
                return {
                    dataFetching: {
                        data: 'geocode',
                        isFetching: false,
                        message: '',
                        status: true,
                        coordinates: action.data
                    },
                    formRequest: {}
                }
                case 'GEOCODE_ERROR':
                    return {
                        dataFetching: {
                            data: 'geocode',
                            isFetching: false,
                            message: 'geocode.error',
                        },
                        formRequest: {}
                    }
        default:
            return state;
    }

}