MetaPhase-Consulting/State-TalentMAP

View on GitHub
src/actions/cycleManagement.js

Summary

Maintainability
A
0 mins
Test Coverage
F
9%
import { batch } from 'react-redux';
import { CancelToken } from 'axios';
import { convertQueryToString } from 'utilities';
import {
  ASSIGNMENT_CYCLE_CREATE_ERROR,
  ASSIGNMENT_CYCLE_CREATE_ERROR_TITLE,
  ASSIGNMENT_CYCLE_CREATE_SUCCESS,
  ASSIGNMENT_CYCLE_CREATE_SUCCESS_TITLE,
  ASSIGNMENT_CYCLE_DELETE_ERROR,
  ASSIGNMENT_CYCLE_DELETE_ERROR_TITLE,
  ASSIGNMENT_CYCLE_DELETE_SUCCESS,
  ASSIGNMENT_CYCLE_DELETE_SUCCESS_TITLE,
  ASSIGNMENT_CYCLE_EDIT_ERROR,
  ASSIGNMENT_CYCLE_EDIT_ERROR_TITLE,
  ASSIGNMENT_CYCLE_EDIT_SUCCESS,
  ASSIGNMENT_CYCLE_EDIT_SUCCESS_TITLE,
  ASSIGNMENT_CYCLE_MERGE_ERROR,
  ASSIGNMENT_CYCLE_MERGE_ERROR_TITLE,
  ASSIGNMENT_CYCLE_MERGE_SUCCESS,
  ASSIGNMENT_CYCLE_MERGE_SUCCESS_TITLE,
  ASSIGNMENT_CYCLE_POST_POSITIONS_ERROR,
  ASSIGNMENT_CYCLE_POST_POSITIONS_ERROR_TITLE,
  ASSIGNMENT_CYCLE_POST_POSITIONS_SUCCESS,
  ASSIGNMENT_CYCLE_POST_POSITIONS_TITLE,
  EDIT_CYCLE_CLASSIFICATIONS_ERROR,
  EDIT_CYCLE_CLASSIFICATIONS_ERROR_TITLE,
  EDIT_CYCLE_CLASSIFICATIONS_SUCCESS,
  EDIT_CYCLE_CLASSIFICATIONS_SUCCESS_TITLE,
  EDIT_CYCLE_POSITION_ERROR,
  EDIT_CYCLE_POSITION_ERROR_TITLE,
  EDIT_CYCLE_POSITION_SUCCESS,
  EDIT_CYCLE_POSITION_SUCCESS_TITLE,
} from 'Constants/SystemMessages';
import api from '../api';
import { toastError, toastSuccess } from './toast';


// ================ Cycle Management: Get Cycles ================

let cancelCycleManagementFetch;

export function cycleManagementFetchDataErrored(bool) {
  return {
    type: 'CYCLE_MANAGEMENT_FETCH_HAS_ERRORED',
    hasErrored: bool,
  };
}
export function cycleManagementFetchDataLoading(bool) {
  return {
    type: 'CYCLE_MANAGEMENT_FETCH_IS_LOADING',
    isLoading: bool,
  };
}
export function cycleManagementFetchDataSuccess(results) {
  return {
    type: 'CYCLE_MANAGEMENT_FETCH_SUCCESS',
    results,
  };
}
export function cycleManagementFetchData() {
  return (dispatch) => {
    if (cancelCycleManagementFetch) {
      cancelCycleManagementFetch('cancel');
    }
    batch(() => {
      dispatch(cycleManagementFetchDataLoading(true));
      dispatch(cycleManagementFetchDataErrored(false));
    });
    const endpoint = '/fsbid/assignment_cycles/';
    api().get(endpoint, {
      cancelToken: new CancelToken((c) => { cancelCycleManagementFetch = c; }),
    })
      .then(({ data }) => {
        batch(() => {
          dispatch(cycleManagementFetchDataSuccess(data));
          dispatch(cycleManagementFetchDataErrored(false));
          dispatch(cycleManagementFetchDataLoading(false));
        });
      })
      .catch((err) => {
        if (err?.message !== 'cancel') {
          batch(() => {
            dispatch(cycleManagementFetchDataSuccess([]));
            dispatch(cycleManagementFetchDataErrored(true));
            dispatch(cycleManagementFetchDataLoading(false));
          });
        }
      });
  };
}

// ================ Cycle Management: User Filter Selections ================

export function cycleManagementSelectionsSaveSuccess(result) {
  return {
    type: 'CYCLE_MANAGEMENT_SELECTIONS_SAVE_SUCCESS',
    result,
  };
}
export function saveCycleManagementSelections(queryObject) {
  return (dispatch) => dispatch(cycleManagementSelectionsSaveSuccess(queryObject));
}


// ================ Cycle Management: Create Cycle ================

let cancelCycleManagementCreate;

export function cycleManagementCreateCycle(data) {
  return (dispatch) => {
    if (cancelCycleManagementCreate) {
      cancelCycleManagementCreate('cancel');
    }
    api()
      .post('/fsbid/assignment_cycles/create/', {
        data,
      }, {
        cancelToken: new CancelToken((c) => { cancelCycleManagementCreate = c; }),
      })
      .then(() => {
        batch(() => {
          dispatch(toastSuccess(
            ASSIGNMENT_CYCLE_CREATE_SUCCESS, ASSIGNMENT_CYCLE_CREATE_SUCCESS_TITLE,
          ));
          dispatch(cycleManagementFetchData());
        });
      })
      .catch((err) => {
        if (err?.message !== 'cancel') {
          dispatch(toastError(ASSIGNMENT_CYCLE_CREATE_ERROR, ASSIGNMENT_CYCLE_CREATE_ERROR_TITLE));
        }
      });
  };
}


// ================ Cycle Management: Get Cycle ================

let cancelCycleManagementGetCycle;

export function cycleManagementAssignmentCycleFetchDataErrored(bool) {
  return {
    type: 'CYCLE_MANAGEMENT_ASSIGNMENT_CYCLE_FETCH_HAS_ERRORED',
    hasErrored: bool,
  };
}
export function cycleManagementAssignmentCycleFetchDataLoading(bool) {
  return {
    type: 'CYCLE_MANAGEMENT_ASSIGNMENT_CYCLE_FETCH_IS_LOADING',
    isLoading: bool,
  };
}
export function cycleManagementAssignmentCycleFetchDataSuccess(results) {
  return {
    type: 'CYCLE_MANAGEMENT_ASSIGNMENT_CYCLE_FETCH_SUCCESS',
    results,
  };
}
export function cycleManagementAssignmentCycleFetchData(id) {
  return (dispatch) => {
    if (cancelCycleManagementGetCycle) {
      cancelCycleManagementGetCycle('cancel');
    }
    batch(() => {
      dispatch(cycleManagementAssignmentCycleFetchDataLoading(true));
      dispatch(cycleManagementAssignmentCycleFetchDataErrored(false));
    });
    api().get(`/fsbid/assignment_cycles/${id}/`, {
      cancelToken: new CancelToken((c) => { cancelCycleManagementGetCycle = c; }),
    })
      .then(({ data }) => {
        batch(() => {
          dispatch(cycleManagementAssignmentCycleFetchDataSuccess(data));
          dispatch(cycleManagementAssignmentCycleFetchDataErrored(false));
          dispatch(cycleManagementAssignmentCycleFetchDataLoading(false));
        });
      })
      .catch((err) => {
        if (err?.message !== 'cancel') {
          batch(() => {
            dispatch(cycleManagementAssignmentCycleFetchDataSuccess({}));
            dispatch(cycleManagementAssignmentCycleFetchDataErrored(true));
            dispatch(cycleManagementAssignmentCycleFetchDataLoading(false));
          });
        }
      });
  };
}


// ================ Cycle Management: Update Cycle ================

let cancelCycleManagementUpdate;

export function cycleManagementUpdateCycleSuccess(bool) {
  return {
    type: 'CYCLE_MANAGEMENT_ASSIGNMENT_CYCLE_UPDATE_SUCCESS',
    success: bool,
  };
}
export function cycleManagementUpdateCycle(data) {
  return (dispatch) => {
    if (cancelCycleManagementUpdate) {
      cancelCycleManagementUpdate('cancel');
    }
    api()
      .post('/fsbid/assignment_cycles/update/', {
        data,
      }, {
        cancelToken: new CancelToken((c) => { cancelCycleManagementUpdate = c; }),
      })
      .then(() => {
        batch(() => {
          dispatch(toastSuccess(
            ASSIGNMENT_CYCLE_EDIT_SUCCESS, ASSIGNMENT_CYCLE_EDIT_SUCCESS_TITLE,
          ));
          dispatch(cycleManagementUpdateCycleSuccess(true));
        });
      })
      .catch((err) => {
        if (err?.message !== 'cancel') {
          dispatch(toastError(ASSIGNMENT_CYCLE_EDIT_ERROR, ASSIGNMENT_CYCLE_EDIT_ERROR_TITLE));
        }
      });
  };
}


// ================ Cycle Management: Post Open Positions ================

let cancelCycleManagementPostPositions;

export function cycleManagementPostOpenPositions(id) {
  return (dispatch) => {
    if (cancelCycleManagementPostPositions) {
      cancelCycleManagementPostPositions('cancel');
    }
    dispatch(cycleManagementUpdateCycleSuccess(false));
    api()
      .get(`/fsbid/assignment_cycles/post/${id}/`, {
        cancelToken: new CancelToken((c) => { cancelCycleManagementPostPositions = c; }),
      })
      .then(() => {
        batch(() => {
          dispatch(toastSuccess(
            ASSIGNMENT_CYCLE_POST_POSITIONS_SUCCESS, ASSIGNMENT_CYCLE_POST_POSITIONS_TITLE,
          ));
          dispatch(cycleManagementUpdateCycleSuccess(true));
        });
      })
      .catch((err) => {
        if (err?.message !== 'cancel') {
          dispatch(
            toastError(
              ASSIGNMENT_CYCLE_POST_POSITIONS_ERROR,
              ASSIGNMENT_CYCLE_POST_POSITIONS_ERROR_TITLE,
            ),
          );
        }
      });
  };
}


// ================ Cycle Management: Delete Cycle ================

let cancelCycleManagementDelete;

export function cycleManagementDeleteCycleSuccess(bool) {
  return {
    type: 'ASSIGNMENT_CYCLE_DELETE_SUCCESS',
    success: bool,
  };
}
export function cycleManagementDeleteCycle(data) {
  return (dispatch) => {
    if (cancelCycleManagementDelete) {
      cancelCycleManagementDelete('cancel');
    }
    dispatch(cycleManagementDeleteCycleSuccess(false));
    api()
      .post('/fsbid/assignment_cycles/delete/', {
        data,
      }, {
        cancelToken: new CancelToken((c) => { cancelCycleManagementDelete = c; }),
      })
      .then(() => {
        batch(() => {
          dispatch(toastSuccess(ASSIGNMENT_CYCLE_DELETE_SUCCESS,
            ASSIGNMENT_CYCLE_DELETE_SUCCESS_TITLE));
          dispatch(cycleManagementDeleteCycleSuccess(true));
        });
      },
      ).catch((err) => {
        if (err?.message !== 'cancel') {
          batch(() => {
            dispatch(
              toastError(
                ASSIGNMENT_CYCLE_DELETE_ERROR,
                ASSIGNMENT_CYCLE_DELETE_ERROR_TITLE,
              ),
            );
          });
        }
      });
  };
}


// ================ Cycle Management: Merge Cycle ================

let cancelCycleManagementMerge;

export function cycleManagementMergeCycleSuccess(bool) {
  return {
    type: 'ASSIGNMENT_CYCLE_MERGE_SUCCESS',
    success: bool,
  };
}
export function cycleManagementMergeCycle(data) {
  return (dispatch) => {
    if (cancelCycleManagementMerge) {
      cancelCycleManagementMerge('cancel');
    }
    dispatch(cycleManagementMergeCycleSuccess(false));
    api()
      .post('/fsbid/assignment_cycles/merge/', {
        data,
      }, {
        cancelToken: new CancelToken((c) => { cancelCycleManagementMerge = c; }),
      })
      .then(() => {
        batch(() => {
          dispatch(toastSuccess(ASSIGNMENT_CYCLE_MERGE_SUCCESS,
            ASSIGNMENT_CYCLE_MERGE_SUCCESS_TITLE));
          dispatch(cycleManagementMergeCycleSuccess(true));
        });
      },
      ).catch((err) => {
        if (err?.message !== 'cancel') {
          batch(() => {
            dispatch(
              toastError(
                ASSIGNMENT_CYCLE_MERGE_ERROR,
                ASSIGNMENT_CYCLE_MERGE_ERROR_TITLE,
              ),
            );
          });
        }
      });
  };
}


// ================ Cycle Classifications: Get Classifications ================

let cancelCycleClassificationsFetch;

export function cycleClassificationsIsLoading(bool) {
  return {
    type: 'CYCLE_CLASSIFICATIONS_IS_LOADING',
    isLoading: bool,
  };
}
export function cycleClassificationsFetchDataSuccess(results) {
  return {
    type: 'CYCLE_CLASSIFICATIONS_FETCH_DATA_SUCCESS',
    results,
  };
}
export function cycleClassificationsFetchData() {
  return (dispatch) => {
    if (cancelCycleClassificationsFetch) {
      cancelCycleClassificationsFetch('cancel');
    }
    batch(() => {
      dispatch(cycleClassificationsIsLoading(true));
    });
    const endpoint = '/fsbid/assignment_cycles/classifications/';
    api().get(endpoint, {
      cancelToken: new CancelToken((c) => { cancelCycleClassificationsFetch = c; }),
    })
      .then(({ data }) => {
        batch(() => {
          dispatch(cycleClassificationsFetchDataSuccess(data));
          dispatch(cycleClassificationsIsLoading(false));
        });
      })
      .catch((err) => {
        if (err?.message !== 'cancel') {
          batch(() => {
            dispatch(cycleClassificationsFetchDataSuccess([]));
            dispatch(cycleClassificationsIsLoading(false));
          });
        }
      });
  };
}


// ================ Cycle Classifications: Edit Classifications ================

let cancelCycleClassificationsEdit;

export function cycleClassificationsEditCycleSuccess(bool) {
  return {
    type: 'CYCLE_CLASSIFICATIONS_EDIT_SUCCESS',
    success: bool,
  };
}
export function cycleClassificationsEditCycle(data) {
  return (dispatch) => {
    if (cancelCycleClassificationsEdit) {
      cancelCycleClassificationsEdit('cancel');
    }
    api()
      .post('/fsbid/assignment_cycles/classifications/update/', {
        data,
      }, {
        cancelToken: new CancelToken((c) => { cancelCycleClassificationsEdit = c; }),
      })
      .then(() => {
        batch(() => {
          dispatch(toastSuccess(
            EDIT_CYCLE_CLASSIFICATIONS_SUCCESS, EDIT_CYCLE_CLASSIFICATIONS_SUCCESS_TITLE,
          ));
          dispatch(cycleClassificationsEditCycleSuccess(true));
        });
      })
      .catch((err) => {
        if (err?.message !== 'cancel') {
          batch(() => {
            dispatch(toastError(
              EDIT_CYCLE_CLASSIFICATIONS_ERROR, EDIT_CYCLE_CLASSIFICATIONS_ERROR_TITLE,
            ));
          });
        }
      });
  };
}


// ================ Cycle Positions: Filters ================

let cancelCPfiltersData;

export function cyclePositionFiltersLoading(bool) {
  return {
    type: 'CYCLE_POSITIONS_FILTERS_IS_LOADING',
    isLoading: bool,
  };
}
export function cyclePositionFiltersSuccess(results) {
  return {
    type: 'CYCLE_POSITIONS_FILTERS_SUCCESS',
    results,
  };
}
export function cyclePositionFiltersFetchData() {
  return (dispatch) => {
    if (cancelCPfiltersData) { cancelCPfiltersData('cancel'); dispatch(cyclePositionFiltersLoading(true)); }
    batch(() => {
      dispatch(cyclePositionFiltersLoading(true));
    });
    api().get('/fsbid/assignment_cycles/positions/filters/', {
      cancelToken: new CancelToken((c) => { cancelCPfiltersData = c; }),
    })
      .then(({ data }) => {
        batch(() => {
          dispatch(cyclePositionFiltersSuccess(data));
          dispatch(cyclePositionFiltersLoading(false));
        });
      })
      .catch((err) => {
        if (err?.message !== 'cancel') {
          batch(() => {
            dispatch(cyclePositionFiltersSuccess({}));
            dispatch(cyclePositionFiltersLoading(false));
          });
        }
      });
  };
}


// ================ Cycle Positions: User Filter Selections ================

export function cyclePositionSearchSelectionsSaveSuccess(result) {
  return {
    type: 'CYCLE_POSITIONS_SEARCH_SELECTIONS_SAVE_SUCCESS',
    result,
  };
}
export function saveCyclePositionSearchSelections(queryObject) {
  return (dispatch) => dispatch(cyclePositionSearchSelectionsSaveSuccess(queryObject));
}


// ================ Cycle Positions: Get Positions ================

let cancelCPfetch;

export function cyclePositionSearchFetchDataErrored(bool) {
  return {
    type: 'CYCLE_POSITION_SEARCH_FETCH_HAS_ERRORED',
    hasErrored: bool,
  };
}
export function cyclePositionSearchFetchDataLoading(bool) {
  return {
    type: 'CYCLE_POSITION_SEARCH_FETCH_IS_LOADING',
    isLoading: bool,
  };
}
export function cyclePositionSearchFetchDataSuccess(results) {
  return {
    type: 'CYCLE_POSITION_SEARCH_FETCH_SUCCESS',
    results,
  };
}
export function cyclePositionSearchFetchData(query = {}) {
  return (dispatch) => {
    if (cancelCPfetch) {
      cancelCPfetch('cancel');
    }
    batch(() => {
      dispatch(cyclePositionSearchFetchDataLoading(true));
      dispatch(cyclePositionSearchFetchDataErrored(false));
    });
    const q = convertQueryToString(query);
    api().get(`/fsbid/assignment_cycles/positions/?${q}`, {
      cancelToken: new CancelToken((c) => { cancelCPfetch = c; }),
    })
      .then(({ data }) => {
        batch(() => {
          dispatch(cyclePositionSearchFetchDataSuccess(data));
          dispatch(cyclePositionSearchFetchDataErrored(false));
          dispatch(cyclePositionSearchFetchDataLoading(false));
        });
      })
      .catch((err) => {
        if (err?.message !== 'cancel') {
          batch(() => {
            dispatch(cyclePositionSearchFetchDataSuccess([]));
            dispatch(cyclePositionSearchFetchDataErrored(true));
            dispatch(cyclePositionSearchFetchDataLoading(false));
          });
        }
      });
  };
}


// ================ Cycle Positions: Get Single Position ================

let cancelCPremove;

export function cyclePositionGetPositionHasErrored(bool) {
  return {
    type: 'CYCLE_POSITION_FETCH_HAS_ERRORED',
    hasErrored: bool,
  };
}
export function cyclePositionGetPositionIsLoading(bool) {
  return {
    type: 'CYCLE_POSITION_FETCH_IS_LOADING',
    isLoading: bool,
  };
}
export function cyclePositionGetPositionSuccess(data) {
  return {
    type: 'CYCLE_POSITION_FETCH_SUCCESS',
    data,
  };
}
export function cyclePositionGetPosition(id) {
  return (dispatch) => {
    if (cancelCPremove) { cancelCPremove('cancel'); }
    dispatch(cyclePositionGetPositionIsLoading(true));
    dispatch(cyclePositionGetPositionHasErrored(false));
    api()
      .get(`/fsbid/assignment_cycles/position/${id}/`, {
        cancelToken: new CancelToken((c) => {
          cancelCPremove = c;
        }),
      })
      .then(({ data }) => {
        batch(() => {
          dispatch(cyclePositionGetPositionSuccess(data));
          dispatch(cyclePositionGetPositionHasErrored(false));
          dispatch(cyclePositionGetPositionIsLoading(false));
        });
      })
      .catch((err) => {
        if (err?.message !== 'cancel') {
          dispatch(cyclePositionGetPositionSuccess([]));
          dispatch(cyclePositionGetPositionHasErrored(true));
          dispatch(cyclePositionGetPositionIsLoading(false));
        }
      });
  };
}


// ================ Cycle Positions: Edit Position ================

let cancelCPedit;

export function cyclePositionEditSuccess(bool) {
  return {
    type: 'CYCLE_POSITION_EDIT_SUCCESS',
    success: bool,
  };
}
export function cyclePositionEdit(data) {
  return (dispatch) => {
    if (cancelCPedit) { cancelCPedit('cancel'); }
    api()
      .post('/fsbid/assignment_cycles/position/update/', {
        data,
      }, {
        cancelToken: new CancelToken((c) => {
          cancelCPedit = c;
        }),
      })
      .then(() => {
        batch(() => {
          dispatch(
            toastSuccess(EDIT_CYCLE_POSITION_SUCCESS, EDIT_CYCLE_POSITION_SUCCESS_TITLE));
          dispatch(cyclePositionEditSuccess(true));
        });
      })
      .catch((err) => {
        if (err?.message !== 'cancel') {
          dispatch(toastError(EDIT_CYCLE_POSITION_ERROR, EDIT_CYCLE_POSITION_ERROR_TITLE));
        }
      });
  };
}