UNPKG

@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

125 lines (124 loc) 5.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var utils_1 = require("@open-tender/utils"); var react_1 = require("react"); var utils_2 = require("../utils"); var codeErrMsg = 'Employee has been assigned a swipe card. Please use card to punch in / out.'; var deptErrMsg = "This employee doesn't have any departments. Please contact HR."; var usePunch = function (api) { var isAborted = (0, react_1.useRef)(false); var _a = (0, react_1.useState)(null), error = _a[0], setError = _a[1]; var _b = (0, react_1.useState)(null), msg = _b[0], setMsg = _b[1]; var _c = (0, react_1.useState)(null), modal = _c[0], setModal = _c[1]; (0, react_1.useEffect)(function () { return function () { isAborted.current = true; }; }, []); var reset = (0, react_1.useCallback)(function () { setError(null); setModal(null); setMsg(null); }, []); var print = (0, react_1.useCallback)(function (employeeId) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { var err_1, detail; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, api.postPrintShiftSummary(employeeId)]; case 1: _a.sent(); return [3 /*break*/, 3]; case 2: err_1 = _a.sent(); if (!isAborted.current) { detail = (0, utils_1.handleRespError)(err_1).detail; setError(detail || 'Unknown error'); } return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }, [api]); var send = (0, react_1.useCallback)(function (data, employee) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { var err_2, detail; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, api.postTimePunch(data)]; case 1: _a.sent(); if (!isAborted.current) { setMsg((0, utils_2.makePunchMessage)(employee, data.punch_type)); } return [3 /*break*/, 3]; case 2: err_2 = _a.sent(); if (!isAborted.current) { detail = (0, utils_1.handleRespError)(err_2).detail; setError(detail || 'Unknown error'); } return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }, [api]); var submit = (0, react_1.useCallback)(function (employee, blockPin) { if (employee && employee.code && blockPin) { setError(codeErrMsg); } else if (!employee.punches) { if (!employee.departments.length) { setError(deptErrMsg); } else if (employee.departments.length > 1) { setModal({ type: 'punchDept', args: { employee: employee } }); } else { var employee_id = employee.employee_id, departments = employee.departments; var data = { employee_id: employee_id, department_id: departments[0].id, punch_type: 'PUNCH_IN', tips: '0.00' }; send(data, employee); } } else { var lastPunch = employee.punches[employee.punches.length - 1]; var employee_id = lastPunch.employee_id, department_id = lastPunch.department_id, punch_type = lastPunch.punch_type; if (punch_type === 'BREAK_OUT') { var data = { employee_id: employee_id, department_id: department_id, punch_type: 'BREAK_IN', tips: '0.00' }; send(data, employee); } else if (punch_type === 'PUNCH_OUT') { if (employee.departments.length > 1) { setModal({ type: 'punchDept', args: { employee: employee } }); } else { var data = { employee_id: employee_id, department_id: employee.departments[0].id, punch_type: 'PUNCH_IN', tips: '0.00' }; send(data, employee); } } else { setModal({ type: 'punchType', args: { employee: employee } }); } } }, [send]); return (0, react_1.useMemo)(function () { return ({ submit: submit, send: send, print: print, error: error, msg: msg, modal: modal, reset: reset }); }, [submit, send, print, error, msg, modal, reset]); }; exports.default = usePunch;