@open-tender/store
Version:
A library of hooks, reducers, utility functions, and types for use with Open Tender applications that utilize our in-store POS API
609 lines (608 loc) • 26.8 kB
JavaScript
var _a;
import { __assign, __awaiter, __generator } from "tslib";
import { currentLocalDate, isoToDate, timezoneMap } from '@open-tender/utils';
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
import {
// currentLocalDate,
filterOrdersToday, makeItemCounts, makeKdsOrder, makeKdsOrders, makeKdsStationCounts, makeOrdersForPrepStation, makeOrdersParams, notDone
// timezoneMap
} from '../utils';
import { addAlert } from './alerts';
import { ReducerType } from './types';
var initialState = {
terminalId: null,
itemTypes: null,
prepStations: [],
prepStationId: null,
orderType: 'CURRENT',
columns: 4,
boxes: 8,
cardWidth: 320,
fontSize: 'medium',
colorScheme: 'dark',
view: null,
page: 1,
search: null,
businessDate: null,
summary: true,
allDay: false,
allDayMods: false,
orders: [],
loading: 'idle',
error: null,
order: null,
counts: { current: null, future: null, qa: null },
stationCounts: null
};
export var KdsActionType;
(function (KdsActionType) {
KdsActionType["FetchKdsOrders"] = "kds/fetchKdsOrders";
KdsActionType["UpdateKdsOrder"] = "kds/updateKdsOrder";
KdsActionType["PrintKdsOrder"] = "kds/printKdsOrder";
KdsActionType["PrintTickets"] = "kds/printTickets";
KdsActionType["ResetTickets"] = "kds/resetTickets";
KdsActionType["PrintTicket"] = "kds/printTicket";
KdsActionType["UpdateTicket"] = "kds/updateTicket";
KdsActionType["ResetTicket"] = "kds/resetTicket";
KdsActionType["DoneTicket"] = "kds/doneTicket";
KdsActionType["CompleteTicket"] = "kds/completeTicket";
})(KdsActionType || (KdsActionType = {}));
export var fetchKdsOrders = createAsyncThunk(KdsActionType.FetchKdsOrders, function (params_1, _a) { return __awaiter(void 0, [params_1, _a], void 0, function (params, _b) {
var api, args, orders, ordersKds, prepStations, stationCounts, err_1;
var getState = _b.getState, rejectWithValue = _b.rejectWithValue;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_c.trys.push([0, 2, , 3]);
api = getState().config.api;
args = makeOrdersParams(params);
return [4 /*yield*/, api.getOrders(args)];
case 1:
orders = _c.sent();
ordersKds = makeKdsOrders(orders);
prepStations = getState().kds.prepStations;
stationCounts = prepStations
? makeKdsStationCounts(ordersKds, prepStations)
: null;
// const itemTypes = getState().kds.itemTypes
// const counts = makeKdsCounts(itemTypes, ordersKds)
return [2 /*return*/, { orders: ordersKds, stationCounts: stationCounts }];
case 2:
err_1 = _c.sent();
return [2 /*return*/, rejectWithValue(err_1)];
case 3: return [2 /*return*/];
}
});
}); });
export var updateKdsOrder = createAsyncThunk(KdsActionType.UpdateKdsOrder, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) {
var api, order, err_2, detail;
var orderId = _c.orderId, data = _c.data;
var getState = _d.getState, dispatch = _d.dispatch;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
_e.trys.push([0, 2, , 3]);
api = getState().config.api;
return [4 /*yield*/, api.patchOrder(orderId, data)];
case 1:
order = _e.sent();
dispatch(replaceKdsOrder(makeKdsOrder(order)));
return [3 /*break*/, 3];
case 2:
err_2 = _e.sent();
detail = err_2.detail;
dispatch(addAlert(detail));
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); });
export var printKdsOrder = createAsyncThunk(KdsActionType.PrintKdsOrder, function (orderId_1, _a) { return __awaiter(void 0, [orderId_1, _a], void 0, function (orderId, _b) {
var api, order, err_3, detail;
var getState = _b.getState, dispatch = _b.dispatch;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_c.trys.push([0, 2, , 3]);
api = getState().config.api;
return [4 /*yield*/, api.postReceipt(orderId)];
case 1:
order = _c.sent();
dispatch(replaceKdsOrder(makeKdsOrder(order)));
return [3 /*break*/, 3];
case 2:
err_3 = _c.sent();
detail = err_3.detail;
dispatch(addAlert(detail));
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); });
export var printTickets = createAsyncThunk(KdsActionType.PrintTickets, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) {
var api, statusUpdate, data, order, err_4, detail;
var orderId = _c.orderId, ticketNos = _c.ticketNos, status = _c.status;
var getState = _d.getState, dispatch = _d.dispatch;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
_e.trys.push([0, 2, , 3]);
api = getState().config.api;
statusUpdate = status ? { ticket_status: status } : {};
data = ticketNos
? __assign(__assign({}, statusUpdate), { ticket_nos: ticketNos }) : statusUpdate;
return [4 /*yield*/, api.postTicketsPrint(orderId, data)];
case 1:
order = _e.sent();
dispatch(replaceKdsOrder(makeKdsOrder(order)));
return [3 /*break*/, 3];
case 2:
err_4 = _e.sent();
detail = err_4.detail;
dispatch(addAlert(detail));
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); });
export var updateTickets = createAsyncThunk(KdsActionType.PrintTickets, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) {
var api, statusUpdate, data, order, err_5, detail;
var orderId = _c.orderId, ticketNos = _c.ticketNos, status = _c.status;
var getState = _d.getState, dispatch = _d.dispatch;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
_e.trys.push([0, 2, , 3]);
api = getState().config.api;
statusUpdate = { ticket_status: status };
data = ticketNos
? __assign(__assign({}, statusUpdate), { ticket_nos: ticketNos }) : statusUpdate;
return [4 /*yield*/, api.putTicketsStatus(orderId, data)];
case 1:
order = _e.sent();
dispatch(replaceKdsOrder(makeKdsOrder(order)));
return [3 /*break*/, 3];
case 2:
err_5 = _e.sent();
detail = err_5.detail;
dispatch(addAlert(detail));
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); });
export var resetTickets = createAsyncThunk(KdsActionType.ResetTickets, function (orderId_1, _a) { return __awaiter(void 0, [orderId_1, _a], void 0, function (orderId, _b) {
var api, order, err_6, detail;
var getState = _b.getState, dispatch = _b.dispatch;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_c.trys.push([0, 2, , 3]);
api = getState().config.api;
return [4 /*yield*/, api.postTicketsReset(orderId)];
case 1:
order = _c.sent();
dispatch(replaceKdsOrder(makeKdsOrder(order)));
return [3 /*break*/, 3];
case 2:
err_6 = _c.sent();
detail = err_6.detail;
dispatch(addAlert(detail));
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); });
export var printTicket = createAsyncThunk(KdsActionType.PrintTicket, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) {
var api, data, order, err_7, detail;
var orderId = _c.orderId, ticketNo = _c.ticketNo, status = _c.status;
var getState = _d.getState, dispatch = _d.dispatch;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
_e.trys.push([0, 2, , 3]);
api = getState().config.api;
data = status ? { ticket_status: status } : undefined;
return [4 /*yield*/, api.postTicketPrint(orderId, ticketNo, data)];
case 1:
order = _e.sent();
dispatch(replaceKdsOrder(makeKdsOrder(order)));
return [3 /*break*/, 3];
case 2:
err_7 = _e.sent();
detail = err_7.detail;
dispatch(addAlert(detail));
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); });
export var updateTicket = createAsyncThunk(KdsActionType.UpdateTicket, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) {
var api, data, order, err_8, detail;
var orderId = _c.orderId, ticketNo = _c.ticketNo, status = _c.status;
var getState = _d.getState, dispatch = _d.dispatch;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
_e.trys.push([0, 2, , 3]);
api = getState().config.api;
data = status ? { ticket_status: status } : undefined;
return [4 /*yield*/, api.putTicketStatus(orderId, ticketNo, data)];
case 1:
order = _e.sent();
dispatch(replaceKdsOrder(makeKdsOrder(order)));
return [3 /*break*/, 3];
case 2:
err_8 = _e.sent();
detail = err_8.detail;
dispatch(addAlert(detail));
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); });
export var resetTicket = createAsyncThunk(KdsActionType.ResetTicket, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) {
var api, order, err_9, detail;
var orderId = _c.orderId, ticketNo = _c.ticketNo;
var getState = _d.getState, dispatch = _d.dispatch;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
_e.trys.push([0, 2, , 3]);
api = getState().config.api;
return [4 /*yield*/, api.postTicketStatus(orderId, ticketNo, 'reset')];
case 1:
order = _e.sent();
dispatch(replaceKdsOrder(makeKdsOrder(order)));
return [3 /*break*/, 3];
case 2:
err_9 = _e.sent();
detail = err_9.detail;
dispatch(addAlert(detail));
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); });
export var doneTicket = createAsyncThunk(KdsActionType.DoneTicket, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) {
var api, order, err_10, detail;
var orderId = _c.orderId, ticketNo = _c.ticketNo;
var getState = _d.getState, dispatch = _d.dispatch;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
_e.trys.push([0, 2, , 3]);
api = getState().config.api;
return [4 /*yield*/, api.postTicketStatus(orderId, ticketNo, 'done')];
case 1:
order = _e.sent();
dispatch(replaceKdsOrder(makeKdsOrder(order)));
return [3 /*break*/, 3];
case 2:
err_10 = _e.sent();
detail = err_10.detail;
dispatch(addAlert(detail));
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); });
export var completeTicket = createAsyncThunk(KdsActionType.CompleteTicket, function (_a, _b) { return __awaiter(void 0, [_a, _b], void 0, function (_c, _d) {
var api, order, err_11, detail;
var orderId = _c.orderId, ticketNo = _c.ticketNo;
var getState = _d.getState, dispatch = _d.dispatch;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
_e.trys.push([0, 2, , 3]);
api = getState().config.api;
return [4 /*yield*/, api.postTicketStatus(orderId, ticketNo, 'completed')];
case 1:
order = _e.sent();
dispatch(replaceKdsOrder(makeKdsOrder(order)));
return [3 /*break*/, 3];
case 2:
err_11 = _e.sent();
detail = err_11.detail;
dispatch(addAlert(detail));
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); });
var kdsSlice = createSlice({
name: ReducerType.Kds,
initialState: initialState,
reducers: {
resetkds: function () { return initialState; },
setKdsTerminalId: function (state, action) {
state.terminalId = action.payload;
},
setKdsItemTypes: function (state, action) {
state.itemTypes = action.payload;
},
setKdsPrepStations: function (state, action) {
state.prepStations = action.payload;
},
setKdsPrepStationId: function (state, action) {
state.prepStationId = action.payload;
},
setKdsOrderType: function (state, action) {
state.orderType = action.payload;
},
setKdsColumns: function (state, action) {
state.columns = action.payload;
},
setKdsBoxes: function (state, action) {
state.boxes = action.payload;
},
setKdsCardWidth: function (state, action) {
state.cardWidth = action.payload;
},
setKdsFontSize: function (state, action) {
state.fontSize = action.payload;
},
setKdsColorScheme: function (state, action) {
state.colorScheme = action.payload;
},
setKdsPage: function (state, action) {
state.page = action.payload;
},
setKdsView: function (state, action) {
state.view = action.payload;
},
setKdsBusinessDate: function (state, action) {
state.businessDate = action.payload;
},
setKdsSearch: function (state, action) {
state.search = action.payload;
},
toggleKdsSummary: function (state) {
state.summary = !state.summary;
},
toggleKdsAllDay: function (state) {
state.allDay = !state.allDay;
},
toggleKdsAllDayMods: function (state) {
state.allDayMods = !state.allDayMods;
},
setKdsOrder: function (state, action) {
state.order = action.payload;
},
replaceKdsOrder: function (state, action) {
var updated = action.payload;
var tz = timezoneMap[updated.timezone];
var updatedOrders = state.orders
.map(function (i) {
return i.order_uuid === updated.order_uuid ? updated : i;
})
.filter(function (i) { var _a; return (_a = i.order_prep) === null || _a === void 0 ? void 0 : _a.fire_at; });
var orders = updatedOrders
.map(function (i) {
var _a;
return (__assign(__assign({}, i), { fireAt: ((_a = i.order_prep) === null || _a === void 0 ? void 0 : _a.fire_at)
? isoToDate(i.order_prep.fire_at, tz)
: new Date() }));
})
.sort(function (a, b) { return a.fireAt.getTime() - b.fireAt.getTime(); });
// const counts = makeKdsCounts(state.itemTypes, orders)
var stationCounts = makeKdsStationCounts(updatedOrders, state.prepStations || []);
var order = state.order ? updated : null;
return __assign(__assign({}, state), { orders: orders, order: order, stationCounts: stationCounts });
}
},
extraReducers: function (builder) {
builder
.addCase(fetchKdsOrders.fulfilled, function (state, action) {
var _a = action.payload, orders = _a.orders, stationCounts = _a.stationCounts;
state.orders = orders;
state.stationCounts = stationCounts;
state.loading = 'idle';
state.error = null;
})
.addCase(fetchKdsOrders.pending, function (state) {
state.loading = 'pending';
})
.addCase(fetchKdsOrders.rejected, function (state, action) {
state.error = action.payload;
state.loading = 'idle';
})
.addCase(updateKdsOrder.fulfilled, function (state) {
state.loading = 'idle';
state.error = null;
})
.addCase(updateKdsOrder.pending, function (state) {
state.loading = 'pending';
})
.addCase(updateKdsOrder.rejected, function (state) {
state.loading = 'idle';
})
.addCase(printKdsOrder.fulfilled, function (state) {
state.loading = 'idle';
state.error = null;
})
.addCase(printKdsOrder.pending, function (state) {
state.loading = 'pending';
})
.addCase(printKdsOrder.rejected, function (state) {
state.loading = 'idle';
})
.addCase(printTickets.fulfilled, function (state) {
state.loading = 'idle';
state.error = null;
})
.addCase(printTickets.pending, function (state) {
state.loading = 'pending';
})
.addCase(printTickets.rejected, function (state) {
state.loading = 'idle';
})
.addCase(resetTickets.fulfilled, function (state) {
state.loading = 'idle';
state.error = null;
})
.addCase(resetTickets.pending, function (state) {
state.loading = 'pending';
})
.addCase(resetTickets.rejected, function (state) {
state.loading = 'idle';
})
.addCase(printTicket.fulfilled, function (state) {
state.loading = 'idle';
state.error = null;
})
.addCase(printTicket.pending, function (state) {
state.loading = 'pending';
})
.addCase(printTicket.rejected, function (state) {
state.loading = 'idle';
})
.addCase(updateTicket.fulfilled, function (state) {
state.loading = 'idle';
state.error = null;
})
.addCase(updateTicket.pending, function (state) {
state.loading = 'pending';
})
.addCase(updateTicket.rejected, function (state) {
state.loading = 'idle';
})
.addCase(resetTicket.fulfilled, function (state) {
state.loading = 'idle';
state.error = null;
})
.addCase(resetTicket.pending, function (state) {
state.loading = 'pending';
})
.addCase(resetTicket.rejected, function (state) {
state.loading = 'idle';
})
.addCase(doneTicket.fulfilled, function (state) {
state.loading = 'idle';
state.error = null;
})
.addCase(doneTicket.pending, function (state) {
state.loading = 'pending';
})
.addCase(doneTicket.rejected, function (state) {
state.loading = 'idle';
})
.addCase(completeTicket.fulfilled, function (state) {
state.loading = 'idle';
state.error = null;
})
.addCase(completeTicket.pending, function (state) {
state.loading = 'pending';
})
.addCase(completeTicket.rejected, function (state) {
state.loading = 'idle';
});
}
});
export var resetkds = (_a = kdsSlice.actions, _a.resetkds), setKdsTerminalId = _a.setKdsTerminalId, setKdsItemTypes = _a.setKdsItemTypes, setKdsPrepStations = _a.setKdsPrepStations, setKdsPrepStationId = _a.setKdsPrepStationId, setKdsOrderType = _a.setKdsOrderType, setKdsColumns = _a.setKdsColumns, setKdsBoxes = _a.setKdsBoxes, setKdsCardWidth = _a.setKdsCardWidth, setKdsFontSize = _a.setKdsFontSize, setKdsColorScheme = _a.setKdsColorScheme, setKdsPage = _a.setKdsPage, setKdsView = _a.setKdsView, setKdsBusinessDate = _a.setKdsBusinessDate, setKdsSearch = _a.setKdsSearch, toggleKdsSummary = _a.toggleKdsSummary, toggleKdsAllDay = _a.toggleKdsAllDay, toggleKdsAllDayMods = _a.toggleKdsAllDayMods, setKdsOrder = _a.setKdsOrder, replaceKdsOrder = _a.replaceKdsOrder;
export var selectKds = function (state) { return state.kds; };
export var selectKdsTerminal = function (state) {
var terminalId = state.kds.terminalId;
if (!terminalId || !state.config.devices)
return null;
var kds_terminals = state.config.devices.kds_terminals;
return kds_terminals.find(function (i) { return i.kds_terminal_id === terminalId; });
};
export var selectKdsItemTypes = function (state) { return state.kds.itemTypes; };
export var selectKdsPrepStations = function (state) { return state.kds.prepStations; };
export var selectKdsPrepStationId = function (state) {
return state.kds.prepStationId;
};
export var selectKdsPrepStation = function (state) {
var _a;
var _b = state.kds, prepStations = _b.prepStations, prepStationId = _b.prepStationId;
return (_a = prepStations === null || prepStations === void 0 ? void 0 : prepStations.find(function (i) { return i.prep_station_id === prepStationId; })) !== null && _a !== void 0 ? _a : null;
};
export var selectKdsPrepType = function (state) {
var prepStation = selectKdsPrepStation(state);
return prepStation ? prepStation.prep_type : null;
};
export var selectKdsOrderType = function (state) { return state.kds.orderType; };
export var selectKdsColumns = function (state) { return state.kds.columns; };
export var selectKdsBoxes = function (state) { return state.kds.boxes; };
export var selectKdsCardWidth = function (state) { return state.kds.cardWidth; };
export var selectKdsFontSize = function (state) { return state.kds.fontSize; };
export var selectKdsColorScheme = function (state) { return state.kds.colorScheme; };
export var selectKdsSummary = function (state) { return state.kds.summary; };
export var selectKdsAllDay = function (state) { return state.kds.allDay; };
export var selectKdsAllDayMods = function (state) { return state.kds.allDayMods; };
export var selectKdsPage = function (state) { return state.kds.page; };
export var selectKdsPageIndex = function (state) { return state.kds.page - 1; };
export var selectKdsView = function (state) { return state.kds.view; };
export var selectKdsBusinessDate = function (state) { return state.kds.businessDate; };
export var selectKdsOrder = function (state) { return state.kds.order; };
export var selectKdsOrders = function (state) {
var _a = state.kds, orders = _a.orders, loading = _a.loading, error = _a.error;
return { orders: orders, loading: loading, error: error };
};
export var selectKdsCurrentOrders = function (state) {
var _a = state.kds, orders = _a.orders, loading = _a.loading, error = _a.error;
var filtered = orders.filter(function (i) {
if (!i.order_prep)
return false;
var _a = i.order_prep, fire_at = _a.fire_at, prep_status = _a.prep_status;
if (!fire_at)
return false;
var tz = timezoneMap[i.timezone];
var fireDate = isoToDate(fire_at, tz);
var currentDate = currentLocalDate(tz);
return notDone(prep_status) && fireDate < currentDate;
});
return { orders: filtered, loading: loading, error: error };
};
export var selectKdsCurrentCount = function (state) {
var orders = selectKdsCurrentOrders(state).orders;
return orders.length;
};
export var selectKdsFutureOrders = function (state) {
var _a = state.kds, orders = _a.orders, loading = _a.loading, error = _a.error;
var filtered = orders.filter(function (i) {
if (!i.order_prep)
return false;
var _a = i.order_prep, fire_at = _a.fire_at, prep_status = _a.prep_status;
if (!fire_at)
return false;
var tz = timezoneMap[i.timezone];
var fireDate = isoToDate(fire_at, tz);
var currentDate = currentLocalDate(tz);
return notDone(prep_status) && fireDate > currentDate;
});
return { orders: filtered, loading: loading, error: error };
};
export var selectKdsFutureCount = function (state) {
var orders = selectKdsFutureOrders(state).orders;
return orders.length;
};
export var selectKdsPrepStationOrders = function (state) {
var _a = state.kds, prepStations = _a.prepStations, prepStationId = _a.prepStationId, orderType = _a.orderType, orders = _a.orders;
var prepStation = prepStations.find(function (i) { return i.prep_station_id === prepStationId; });
if (!prepStation)
return [];
return makeOrdersForPrepStation(orders, prepStation, orderType);
};
export var selectKdsPrepStationAllDay = function (state) {
var orders = selectKdsPrepStationOrders(state);
var withMods = state.kds.allDayMods;
return makeItemCounts(orders, withMods);
};
export var selectKdsPrepStationAllIncomplete = function (state) {
var _a = state.kds, prepStations = _a.prepStations, prepStationId = _a.prepStationId, orders = _a.orders;
var prepStation = prepStations.find(function (i) { return i.prep_station_id === prepStationId; });
if (!prepStation)
return [];
return makeOrdersForPrepStation(orders, prepStation, 'INCOMPLETE');
};
export var selectKdsPrepStationAllIncompleteToday = function (state) {
var orders = selectKdsPrepStationAllIncomplete(state);
return filterOrdersToday(orders);
};
export var selectKdsOrdersCounts = function (state) {
var _a = state.kds.counts, current = _a.current, future = _a.future, qa = _a.qa;
return { current: current, future: future, qa: qa };
};
export var kdsReducer = kdsSlice.reducer;