import { effects } from "redux-saga"; import { isSendingCShiftRequest, setCShiftRequestError, setCShiftRequestErrors, setCShiftRequestSuccess, clearCShiftRequestError, clearCShiftRequestSuccess, setFormEmployeeUUID, setFormPriceUUID, setFormShiftDates, setFormShiftDuration, setFormShiftNote, setFormShiftStartTime, setCShiftUUID } from "../actions/cShift/reducer.actions"; import { createCShifts, getCShifts, getCShift, editCShift } from "../api/cShift.api"; function* createCShiftsCall(postBodies) { yield effects.put(isSendingCShiftRequest(true)); try { if (postBodies.length > 0) { return yield effects.call(createCShifts, postBodies); } else { yield effects.put( setCShiftRequestError({ response: { data: { dates: ["No dates selected."] } } }) ); return false; } } catch (exception) { yield effects.put(setCShiftRequestError(exception)); return false; } finally { yield effects.put(isSendingCShiftRequest(false)); } } function* getCShiftsCall(params) { yield effects.put(isSendingCShiftRequest(true)); try { return yield effects.call(getCShifts, params); } catch (exception) { yield effects.put(setCShiftRequestError(exception)); return false; } finally { yield effects.put(isSendingCShiftRequest(false)); } } function* getCShiftCall({ uuid, params }) { yield effects.put(isSendingCShiftRequest(true)); try { return yield effects.call(getCShift, uuid, params); } catch (exception) { yield effects.put(setCShiftRequestError(exception)); return false; } finally { yield effects.put(isSendingCShiftRequest(false)); } } function* editCShiftCall(payload) { yield effects.put(isSendingCShiftRequest(true)); try { const edit = yield effects.call(editCShift, payload.uuid, payload); yield effects.put(setCShiftUUID(true)); return edit; } catch (exception) { yield effects.put(setCShiftRequestError(exception)); return false; } finally { yield effects.put(isSendingCShiftRequest(false)); } } export function* createCShiftsFlow(request) { yield effects.put(clearCShiftRequestSuccess()); yield effects.put(clearCShiftRequestError()); const arrResponses = yield effects.call(createCShiftsCall, request.data); if (arrResponses) { const errorResps = arrResponses.filter(resp => !!resp.error); if (errorResps.length > 0) { yield effects.put(setCShiftRequestErrors(errorResps)); } const succResps = arrResponses.filter(resp => !resp.error); if (succResps.length > 0) { yield effects.put(setCShiftRequestSuccess(succResps)); yield effects.put(setFormEmployeeUUID("")); yield effects.put(setFormPriceUUID("")); yield effects.put(setFormShiftStartTime(null)); yield effects.put(setFormShiftDuration("")); yield effects.put(setFormShiftNote("")); yield effects.put(setFormShiftDates({})); } } } export function* getCShiftsFlow(request) { yield effects.put(clearCShiftRequestSuccess()); yield effects.put(clearCShiftRequestError()); const isSuccessful = yield effects.call(getCShiftsCall, request.data); if (isSuccessful) { yield effects.put(setCShiftRequestSuccess(isSuccessful)); } } export function* getCShiftFlow(request) { yield effects.put(clearCShiftRequestSuccess()); yield effects.put(clearCShiftRequestError()); const wasSuccessful = yield effects.call(getCShiftCall, request.data); if (wasSuccessful) { yield effects.put(setCShiftRequestSuccess(wasSuccessful)); } } export function* editCShiftFlow(request) { yield effects.put(clearCShiftRequestError()); const wasSuccessful = yield effects.call(editCShiftCall, request.data); if (wasSuccessful) { yield effects.put(setCShiftRequestSuccess(wasSuccessful)); } }