added timeticket redux
This commit is contained in:
25
redux/timetickets/timetickets.actions.js
Normal file
25
redux/timetickets/timetickets.actions.js
Normal file
@@ -0,0 +1,25 @@
|
||||
import TimeTicketsActionTypes from "./timetickets.types";
|
||||
export const setTimeTicket = (timeTicket) => ({
|
||||
type: TimeTicketsActionTypes.SET_TIME_TICKET,
|
||||
payload: timeTicket,
|
||||
});
|
||||
export const setTimeTicketJobId = (jobId) => ({
|
||||
type: TimeTicketsActionTypes.SET_TIME_TICKET_JOB_ID,
|
||||
payload: jobId,
|
||||
});
|
||||
export const setTimeTicketJob = (job) => ({
|
||||
type: TimeTicketsActionTypes.SET_TIME_TICKET_JOB,
|
||||
payload: job,
|
||||
});
|
||||
export const timeTicketCreateStart = (timeTicket) => ({
|
||||
type: TimeTicketsActionTypes.TIME_TICKET_CREATE_START,
|
||||
payload: timeTicket,
|
||||
});
|
||||
export const timeTicketCreateSuccess = (insertTimeTickets) => ({
|
||||
type: TimeTicketsActionTypes.TIME_TICKET_CREATE_SUCCESS,
|
||||
payload: insertTimeTickets,
|
||||
});
|
||||
export const timeTicketCreateFailure = (error) => ({
|
||||
type: TimeTicketsActionTypes.TIME_TICKET_CREATE_FAILURE,
|
||||
payload: error,
|
||||
});
|
||||
51
redux/timetickets/timetickets.reducer.js
Normal file
51
redux/timetickets/timetickets.reducer.js
Normal file
@@ -0,0 +1,51 @@
|
||||
import TimeTicketsActionTypes from "./timetickets.types";
|
||||
|
||||
const INITIAL_STATE = {
|
||||
timeTicket: null,
|
||||
timeTickets: [],
|
||||
timeTicketJobId: null,
|
||||
timeTicketJob: null,
|
||||
uploadTimeTicketInProgress: false,
|
||||
uploadTimeTicketError: null,
|
||||
};
|
||||
|
||||
const timeTicketsReducer = (state = INITIAL_STATE, action) => {
|
||||
switch (action.type) {
|
||||
case TimeTicketsActionTypes.SET_TIME_TICKET:
|
||||
return {
|
||||
...state,
|
||||
timeTicket: action.payload,
|
||||
};
|
||||
case TimeTicketsActionTypes.SET_TIME_TICKET_JOB_ID:
|
||||
return {
|
||||
...state,
|
||||
timeTicketJobId: action.payload,
|
||||
};
|
||||
case TimeTicketsActionTypes.SET_TIME_TICKET_JOB:
|
||||
return {
|
||||
...state,
|
||||
timeTicketJob: action.payload,
|
||||
};
|
||||
case TimeTicketsActionTypes.TIME_TICKET_CREATE_START:
|
||||
return {
|
||||
...state,
|
||||
uploadTimeTicketInProgress: true,
|
||||
};
|
||||
case TimeTicketsActionTypes.TIME_TICKET_CREATE_SUCCESS:
|
||||
return {
|
||||
...state, //TODO add logic here when successful
|
||||
uploadTimeTicketInProgress: false,
|
||||
uploadTimeTicketError: null,
|
||||
};
|
||||
case TimeTicketsActionTypes.TIME_TICKET_CREATE_FAILURE:
|
||||
return {
|
||||
...state,
|
||||
uploadTimeTicketInProgress: false,
|
||||
uploadTimeTicketError: action.payload,
|
||||
};
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
};
|
||||
|
||||
export default timeTicketsReducer;
|
||||
51
redux/timetickets/timetickets.sagas.js
Normal file
51
redux/timetickets/timetickets.sagas.js
Normal file
@@ -0,0 +1,51 @@
|
||||
import {
|
||||
timeTicketCreateFailure,
|
||||
timeTicketCreateSuccess,
|
||||
} from "./timetickets.actions";
|
||||
import TimeTicketsActionTypes from "./timetickets.types";
|
||||
import { client } from "../../graphql/client";
|
||||
|
||||
import { all, call, put, select, takeLatest } from "redux-saga/effects";
|
||||
import { logImEXEvent } from "../../firebase/firebase.analytics";
|
||||
import { selectCurrentTimeTicket } from "./timetickets.selectors";
|
||||
import { INSERT_NEW_TIME_TICKET } from "../../graphql/timetickets.queries";
|
||||
|
||||
|
||||
export function* onCreateTimeTicketStart() {
|
||||
yield takeLatest(
|
||||
TimeTicketsActionTypes.TIME_TICKET_CREATE_START,
|
||||
insertNewTimeTicket
|
||||
);
|
||||
}
|
||||
export function* insertNewTimeTicket({ payload: { timeticketinsert } }) {
|
||||
try {
|
||||
logImEXEvent("redux_insertnewtimeticket_attempt");
|
||||
//console.loging
|
||||
// console.log("Saga", employeeId, pin, pin);
|
||||
const timeTicket = yield select(selectCurrentTimeTicket);
|
||||
// const response = yield call(axios.post, "/tech/login", {
|
||||
// shopid: bodyshop.id,
|
||||
// employeeid: employeeId,
|
||||
// pin: pin,
|
||||
// });
|
||||
// const { valid, data, error } = response.data;
|
||||
const result = yield client.query({
|
||||
query: INSERT_NEW_TIME_TICKET,
|
||||
variables: {
|
||||
id: employeeId,
|
||||
},
|
||||
});
|
||||
const { valid, data, error } = result.data;
|
||||
if (valid) {
|
||||
yield put(timeTicketCreateSuccess(data));
|
||||
} else {
|
||||
yield put(timeTicketCreateFailure(error));
|
||||
}
|
||||
} catch (error) {
|
||||
yield put(timeTicketCreateFailure(error));
|
||||
}
|
||||
}
|
||||
|
||||
export function* timeTicketsSagas() {
|
||||
yield all([call(onCreateTimeTicketStart)]);
|
||||
}
|
||||
16
redux/timetickets/timetickets.selectors.js
Normal file
16
redux/timetickets/timetickets.selectors.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import { createSelector } from "reselect";
|
||||
|
||||
const selectTimeTicketsState = (state) => state.TimeTickets;
|
||||
|
||||
export const selectCurrentTimeTicketJobId = createSelector(
|
||||
[selectTimeTicketsState],
|
||||
(TimeTickets) => TimeTickets.timeTicketJobId
|
||||
);
|
||||
export const selectCurrentTimeTicketJob = createSelector(
|
||||
[selectTimeTicketsState],
|
||||
(TimeTickets) => TimeTickets.timeTicketJob
|
||||
);
|
||||
export const selectCurrentTimeTicket = createSelector(
|
||||
[selectTimeTicketsState],
|
||||
(TimeTickets) => TimeTickets.timeTicket
|
||||
);
|
||||
9
redux/timetickets/timetickets.types.js
Normal file
9
redux/timetickets/timetickets.types.js
Normal file
@@ -0,0 +1,9 @@
|
||||
const TimeTicketsActionTypes = {
|
||||
SET_TIME_TICKET: "SET_TIME_TICKET",
|
||||
SET_TIME_TICKET_JOB: "SET_TIME_TICKET_JOB",
|
||||
SET_TIME_TICKET_JOB_ID: "SET_TIME_TICKET_JOB_ID",
|
||||
TIME_TICKET_CREATE_START: "TIME_TICKET_CREATE_START",
|
||||
TIME_TICKET_CREATE_SUCCESS: "TIME_TICKET_CREATE_SUCCESS",
|
||||
TIME_TICKET_CREATE_FAILURE: "TIME_TICKET_CREATE_FAILURE",
|
||||
};
|
||||
export default TimeTicketsActionTypes;
|
||||
Reference in New Issue
Block a user