Skip to content
Snippets Groups Projects
ApplicationManagementActions.js 8.28 KiB
Newer Older
Orlando Piñero's avatar
Orlando Piñero committed
export const SHOW_ALL_APPLICATIONS = 'SHOW_ALL_APPLICATIONS';
export const SHOW_ALL_APPLICATIONS_ERROR = 'SHOW_ALL_APPLICATIONS_ERROR';
export const SHOW_MY_APPLICATIONS = 'SHOW_MY_APPLICATIONS';
export const SHOW_MY_APPLICATIONS_ERROR = 'SHOW_MY_APPLICATIONS_ERROR';
export const CREATE_NEW_APPLICATION_SUCCESS = 'CREATE_NEW_APPLICATION_SUCCESS';
export const CREATE_NEW_APPLICATION_ERROR = 'CREATE_NEW_APPLICATION_ERROR';
export const EDIT_APPLICATION_SUCCESS = 'EDIT_APPLICATION_SUCCESS';
export const EDIT_APPLICATION_ERROR = 'EDIT_APPLICATION_ERROR';
export const DELETE_APPLICATION_SUCCESS = 'DELETE_APPLICATION_SUCCESS';
export const DELETE_APPLICATION_ERROR = 'DELETE_APPLICATION_ERROR'

export const SHOW_DELETE_APPLICATION_MODAL = 'SHOW_DELETE_APPLICATION_MODAL'
export const HIDE_DELETE_APPLICATION_MODAL = 'HIDE_DELETE_APPLICATION_MODAL'
export const PRESS_EDIT_BUTTON = 'PRESS_EDIT_BUTTON';

const URL = process.env.REACT_APP_SERVER

export function getShowDeleteApplicationModalAction(deleteModalData) {
    return {
        type: SHOW_DELETE_APPLICATION_MODAL,
        deleteApplicationModalData: deleteModalData
    }
}

export function getHideDeleteApplicationModalAction() {
    return {
        type: HIDE_DELETE_APPLICATION_MODAL
    }
}


export function getCreateNewApplicationSuccessAction(applicationData) {
    return {
        type: CREATE_NEW_APPLICATION_SUCCESS,
        newApplicationData: applicationData
    }
}

export function getCreateNewApplicationErrorAction(error) {
    return {
        type: CREATE_NEW_APPLICATION_ERROR,
        error: error
    }
}

export function createNewApplication(applicationData, token) {

    const requestOptions = {
        method: 'POST',
        headers: {
            'Authorization': token,
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(applicationData)
    }

    return fetch(URL + '/degreeCourseApplications', requestOptions)
        .then(response => {
            return response.json().then(body => {
                if (response.status === 201) {
                    return body
                }
            })
        })
}

export function passNewApplication(applicationData, token) {

    return dispatch => {
        dispatch(getCreateNewApplicationSuccessAction());
        createNewApplication(applicationData, token)
            .then(newApplication => {
                const action = getCreateNewApplicationSuccessAction(newApplication)
                dispatch(action);
            },
                error => {
                    dispatch(getCreateNewApplicationErrorAction(error));
                }
            )
            .catch(error => {
                dispatch(getCreateNewApplicationErrorAction(error))
            })
    }
}




export function getAllApplicationsAction(applications) {
    return {
        type: SHOW_ALL_APPLICATIONS,
        applicationList: applications
    }
}

export function getMyApplicationsAction(applications) {
    return {
        type: SHOW_MY_APPLICATIONS,
        applicationList: applications
    }
}


export function getAllApplicationsErrorAction(error) {
    return {
        type: SHOW_ALL_APPLICATIONS_ERROR,
        error: error
    }
}

export function getMyApplicationsErrorAction(error) {
    return {
        type: SHOW_MY_APPLICATIONS_ERROR,
        error: error
    }
}


export function getAllApplications(token) {

    const requestOptions = {
        method: 'GET',
        headers: { 'Authorization': token }
    };

    return fetch(URL + '/degreeCourseApplications', requestOptions)
        .then(response => {
            return response.json().then(body => {
                if (response.status === 200) {
                    return body
                }
            })
        })
}

export function getMyApplications(token) {
    const requestOptions = {
        method: 'GET',
        headers: { 'Authorization': token }
    };

    return fetch(URL + '/degreeCourseApplications/myApplications', requestOptions)
        .then(response => {
            return response.json().then(body => {
                if (response.status === 200) {
                    return body
                }
            })
        })
}


export function displayAllApplications(token) {

    return dispatch => {
        dispatch(getAllApplicationsAction());
        getAllApplications(token)
            .then(applications => {
                const action = getAllApplicationsAction(applications)
                dispatch(action);
            },
                error => {
                    dispatch(getAllApplicationsErrorAction(error));
                }
            )
            .catch(error => {
                dispatch(getAllApplicationsErrorAction(error))
            })
    }
}

export function displayMyApplications(token) {

    return dispatch => {
        dispatch(getMyApplicationsAction());
        getMyApplications(token)
            .then(applications => {
                const action = getMyApplicationsAction(applications);
                dispatch(action);
            },
                error => {
                    dispatch(getMyApplicationsErrorAction(error));
                }
            )
            .catch(error => {
                dispatch(getMyApplicationsErrorAction(error));
            })
    }
}


export function getEditApplicationSuccessAction() {
    return {
        type: EDIT_APPLICATION_SUCCESS
    }
}

export function getEditApplicationErrorAction() {
    return {
        type: EDIT_APPLICATION_ERROR
    }
}

export function updateApplication(updateData, applicationID, token) {
    const requestOptions = {
        method: 'PUT',
        headers: {
            'Authorization': token,
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(updateData)
    }

    return fetch(URL + `/degreeCourseApplications/${applicationID}`, requestOptions)
        .then(response => {
            return response.json().then(body => {
                if (response.status === 200) {
                    return body
                }
            })
        })
}

export function editApplicationWithID(updateData, applicationID, token) {
    return dispatch => {
        dispatch(getEditApplicationSuccessAction());
        updateApplication(updateData, applicationID, token)
            .then(application => {
                const action = getEditApplicationSuccessAction(application)
                dispatch(action);
                getAllApplications(token)
                    .then(applications => {
                        const action = getAllApplicationsAction(applications)
                        dispatch(action)
                    })
            },
                error => {
                    dispatch(getEditApplicationErrorAction(error));
                }
            )
            .catch(error => {
                dispatch(getEditApplicationErrorAction(error))
            })
    }
}




export function getDeleteApplicationSuccessAction() {
    return {
        type: DELETE_APPLICATION_SUCCESS
    }
}

export function getDeleteApplicationErrorAction(error) {
    return {
        type: DELETE_APPLICATION_ERROR,
        error: error
    }
}

export function deleteApplication(applicationID, token) {
    const requestOptions = {
        method: 'DELETE',
        headers: {
            'Authorization': token
        }
    }

    return fetch(URL + '/degreeCourseApplications/' + applicationID, requestOptions)
        .then(response => {
            if (response.status === 204) {
                return response.status
            }
        })
}

export function deleteApplicationWithID(applicationID, token) {
    return dispatch => {
        dispatch(getDeleteApplicationSuccessAction(applicationID));
        deleteApplication(applicationID, token)
            .then(deleteApplication => {
                const action = getDeleteApplicationSuccessAction(deleteApplication)
                dispatch(action);
                getAllApplications(token)
                    .then(applications => {
                        const action = getAllApplicationsAction(applications)
                        dispatch(action)
                    })
            },
                error => {
                    dispatch(getDeleteApplicationErrorAction(error));
                }
            )
            .catch(error => {
                dispatch(getDeleteApplicationErrorAction(error))
            })
    }
}