@open-tender/store 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/hooks/index.d.ts +8 -1
- package/dist/cjs/hooks/index.js +15 -1
- package/dist/cjs/hooks/useBarcode.d.ts +7 -0
- package/dist/cjs/hooks/useBarcode.js +62 -0
- package/dist/cjs/hooks/useCardSwipe.d.ts +7 -0
- package/dist/cjs/hooks/useCardSwipe.js +78 -0
- package/dist/cjs/hooks/useEmployee.d.ts +8 -0
- package/dist/cjs/hooks/useEmployee.js +60 -0
- package/dist/cjs/hooks/useGiftCardBalance.d.ts +9 -0
- package/dist/cjs/hooks/useGiftCardBalance.js +52 -0
- package/dist/cjs/hooks/usePrevious.d.ts +2 -0
- package/dist/cjs/hooks/usePrevious.js +11 -0
- package/dist/cjs/hooks/usePunch.d.ts +12 -0
- package/dist/cjs/hooks/usePunch.js +123 -0
- package/dist/cjs/hooks/useRefund.d.ts +17 -0
- package/dist/cjs/hooks/useRefund.js +90 -0
- package/dist/esm/hooks/index.d.ts +8 -1
- package/dist/esm/hooks/index.js +8 -1
- package/dist/esm/hooks/useBarcode.d.ts +7 -0
- package/dist/esm/hooks/useBarcode.js +60 -0
- package/dist/esm/hooks/useCardSwipe.d.ts +7 -0
- package/dist/esm/hooks/useCardSwipe.js +76 -0
- package/dist/esm/hooks/useEmployee.d.ts +8 -0
- package/dist/esm/hooks/useEmployee.js +58 -0
- package/dist/esm/hooks/useGiftCardBalance.d.ts +9 -0
- package/dist/esm/hooks/useGiftCardBalance.js +50 -0
- package/dist/esm/hooks/usePrevious.d.ts +2 -0
- package/dist/esm/hooks/usePrevious.js +9 -0
- package/dist/esm/hooks/usePunch.d.ts +12 -0
- package/dist/esm/hooks/usePunch.js +121 -0
- package/dist/esm/hooks/useRefund.d.ts +17 -0
- package/dist/esm/hooks/useRefund.js +88 -0
- package/package.json +1 -1
|
@@ -1,2 +1,9 @@
|
|
|
1
|
+
import useBarcode from './useBarcode';
|
|
1
2
|
import useBuilder from './useBuilder';
|
|
2
|
-
|
|
3
|
+
import useCardSwipe from './useCardSwipe';
|
|
4
|
+
import useEmployee from './useEmployee';
|
|
5
|
+
import useGiftCardBalance from './useGiftCardBalance';
|
|
6
|
+
import usePrevious from './usePrevious';
|
|
7
|
+
import usePunch from './usePunch';
|
|
8
|
+
import useRefund from './useRefund';
|
|
9
|
+
export { useBarcode, useBuilder, useCardSwipe, useEmployee, useGiftCardBalance, usePrevious, usePunch, useRefund };
|
package/dist/cjs/hooks/index.js
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useBuilder = void 0;
|
|
3
|
+
exports.useRefund = exports.usePunch = exports.usePrevious = exports.useGiftCardBalance = exports.useEmployee = exports.useCardSwipe = exports.useBuilder = exports.useBarcode = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
+
var useBarcode_1 = tslib_1.__importDefault(require("./useBarcode"));
|
|
6
|
+
exports.useBarcode = useBarcode_1.default;
|
|
5
7
|
var useBuilder_1 = tslib_1.__importDefault(require("./useBuilder"));
|
|
6
8
|
exports.useBuilder = useBuilder_1.default;
|
|
9
|
+
var useCardSwipe_1 = tslib_1.__importDefault(require("./useCardSwipe"));
|
|
10
|
+
exports.useCardSwipe = useCardSwipe_1.default;
|
|
11
|
+
var useEmployee_1 = tslib_1.__importDefault(require("./useEmployee"));
|
|
12
|
+
exports.useEmployee = useEmployee_1.default;
|
|
13
|
+
var useGiftCardBalance_1 = tslib_1.__importDefault(require("./useGiftCardBalance"));
|
|
14
|
+
exports.useGiftCardBalance = useGiftCardBalance_1.default;
|
|
15
|
+
var usePrevious_1 = tslib_1.__importDefault(require("./usePrevious"));
|
|
16
|
+
exports.usePrevious = usePrevious_1.default;
|
|
17
|
+
var usePunch_1 = tslib_1.__importDefault(require("./usePunch"));
|
|
18
|
+
exports.usePunch = usePunch_1.default;
|
|
19
|
+
var useRefund_1 = tslib_1.__importDefault(require("./useRefund"));
|
|
20
|
+
exports.useRefund = useRefund_1.default;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var utils_1 = require("../utils");
|
|
6
|
+
var useBarcode = function (api) {
|
|
7
|
+
var isAborted = (0, react_1.useRef)(false);
|
|
8
|
+
var _a = (0, react_1.useState)(null), code = _a[0], setCode = _a[1];
|
|
9
|
+
var _b = (0, react_1.useState)(null), error = _b[0], setError = _b[1];
|
|
10
|
+
(0, react_1.useEffect)(function () {
|
|
11
|
+
return function () {
|
|
12
|
+
isAborted.current = true;
|
|
13
|
+
};
|
|
14
|
+
}, []);
|
|
15
|
+
var read = (0, react_1.useCallback)(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
16
|
+
var data, err_1, detail;
|
|
17
|
+
return tslib_1.__generator(this, function (_a) {
|
|
18
|
+
switch (_a.label) {
|
|
19
|
+
case 0:
|
|
20
|
+
_a.trys.push([0, 2, , 3]);
|
|
21
|
+
return [4 /*yield*/, api.getBarcodeRead()];
|
|
22
|
+
case 1:
|
|
23
|
+
data = (_a.sent()).data;
|
|
24
|
+
if (!isAborted.current) {
|
|
25
|
+
setCode(data);
|
|
26
|
+
}
|
|
27
|
+
return [3 /*break*/, 3];
|
|
28
|
+
case 2:
|
|
29
|
+
err_1 = _a.sent();
|
|
30
|
+
if (!isAborted.current) {
|
|
31
|
+
detail = (0, utils_1.handleRespError)(err_1).detail;
|
|
32
|
+
setError(detail);
|
|
33
|
+
}
|
|
34
|
+
return [3 /*break*/, 3];
|
|
35
|
+
case 3: return [2 /*return*/];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}); }, [api]);
|
|
39
|
+
var cancel = (0, react_1.useCallback)(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
40
|
+
var err_2, detail;
|
|
41
|
+
return tslib_1.__generator(this, function (_a) {
|
|
42
|
+
switch (_a.label) {
|
|
43
|
+
case 0:
|
|
44
|
+
_a.trys.push([0, 2, , 3]);
|
|
45
|
+
return [4 /*yield*/, api.postBarcodeCancel()];
|
|
46
|
+
case 1:
|
|
47
|
+
_a.sent();
|
|
48
|
+
return [3 /*break*/, 3];
|
|
49
|
+
case 2:
|
|
50
|
+
err_2 = _a.sent();
|
|
51
|
+
if (!isAborted.current) {
|
|
52
|
+
detail = (0, utils_1.handleRespError)(err_2).detail;
|
|
53
|
+
setError(detail);
|
|
54
|
+
}
|
|
55
|
+
return [3 /*break*/, 3];
|
|
56
|
+
case 3: return [2 /*return*/];
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}); }, [api]);
|
|
60
|
+
return (0, react_1.useMemo)(function () { return ({ code: code, error: error, read: read, cancel: cancel }); }, [code, error, read, cancel]);
|
|
61
|
+
};
|
|
62
|
+
exports.default = useBarcode;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var utils_1 = require("../utils");
|
|
6
|
+
var parseSwipeCard = function (data) {
|
|
7
|
+
try {
|
|
8
|
+
var parts = data.split('?');
|
|
9
|
+
var code = parts[0].slice(1);
|
|
10
|
+
return code.length > 36 ? null : code;
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
var useCardSwipe = function (api, parse) {
|
|
17
|
+
if (parse === void 0) { parse = true; }
|
|
18
|
+
var isAborted = (0, react_1.useRef)(false);
|
|
19
|
+
var _a = (0, react_1.useState)(null), code = _a[0], setCode = _a[1];
|
|
20
|
+
var _b = (0, react_1.useState)(null), error = _b[0], setError = _b[1];
|
|
21
|
+
(0, react_1.useEffect)(function () {
|
|
22
|
+
return function () {
|
|
23
|
+
isAborted.current = true;
|
|
24
|
+
};
|
|
25
|
+
}, []);
|
|
26
|
+
var read = (0, react_1.useCallback)(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
27
|
+
var data, err_1, detail;
|
|
28
|
+
return tslib_1.__generator(this, function (_a) {
|
|
29
|
+
switch (_a.label) {
|
|
30
|
+
case 0:
|
|
31
|
+
_a.trys.push([0, 2, , 3]);
|
|
32
|
+
return [4 /*yield*/, api.getCardRead()];
|
|
33
|
+
case 1:
|
|
34
|
+
data = (_a.sent()).data;
|
|
35
|
+
if (parse)
|
|
36
|
+
data = parseSwipeCard(data);
|
|
37
|
+
data ? setCode(data) : setError('Could not read card. Please try again.');
|
|
38
|
+
if (!isAborted.current) {
|
|
39
|
+
data
|
|
40
|
+
? setCode(data)
|
|
41
|
+
: setError('Could not read card. Please try again.');
|
|
42
|
+
}
|
|
43
|
+
return [3 /*break*/, 3];
|
|
44
|
+
case 2:
|
|
45
|
+
err_1 = _a.sent();
|
|
46
|
+
if (!isAborted.current) {
|
|
47
|
+
detail = (0, utils_1.handleRespError)(err_1).detail;
|
|
48
|
+
setError(detail);
|
|
49
|
+
}
|
|
50
|
+
return [3 /*break*/, 3];
|
|
51
|
+
case 3: return [2 /*return*/];
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}); }, [api, parse]);
|
|
55
|
+
var cancel = (0, react_1.useCallback)(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
56
|
+
var err_2, detail;
|
|
57
|
+
return tslib_1.__generator(this, function (_a) {
|
|
58
|
+
switch (_a.label) {
|
|
59
|
+
case 0:
|
|
60
|
+
_a.trys.push([0, 2, , 3]);
|
|
61
|
+
return [4 /*yield*/, api.postCardCancel()];
|
|
62
|
+
case 1:
|
|
63
|
+
_a.sent();
|
|
64
|
+
return [3 /*break*/, 3];
|
|
65
|
+
case 2:
|
|
66
|
+
err_2 = _a.sent();
|
|
67
|
+
if (!isAborted.current) {
|
|
68
|
+
detail = (0, utils_1.handleRespError)(err_2).detail;
|
|
69
|
+
setError(detail);
|
|
70
|
+
}
|
|
71
|
+
return [3 /*break*/, 3];
|
|
72
|
+
case 3: return [2 /*return*/];
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}); }, [api]);
|
|
76
|
+
return (0, react_1.useMemo)(function () { return ({ code: code, error: error, read: read, cancel: cancel }); }, [code, error, read, cancel]);
|
|
77
|
+
};
|
|
78
|
+
exports.default = useCardSwipe;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Employee } from '../types';
|
|
2
|
+
declare const useEmployee: (api: any) => {
|
|
3
|
+
employee: Employee | null;
|
|
4
|
+
error: string | null;
|
|
5
|
+
fetch: (identifier: string | number, withPunches?: boolean) => Promise<void>;
|
|
6
|
+
reset: () => void;
|
|
7
|
+
};
|
|
8
|
+
export default useEmployee;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var utils_1 = require("../utils");
|
|
6
|
+
var useEmployee = function (api) {
|
|
7
|
+
var isAborted = (0, react_1.useRef)(false);
|
|
8
|
+
var _a = (0, react_1.useState)(null), employee = _a[0], setEmployee = _a[1];
|
|
9
|
+
var _b = (0, react_1.useState)(null), error = _b[0], setError = _b[1];
|
|
10
|
+
(0, react_1.useEffect)(function () {
|
|
11
|
+
return function () {
|
|
12
|
+
isAborted.current = true;
|
|
13
|
+
};
|
|
14
|
+
}, []);
|
|
15
|
+
var fetch = (0, react_1.useCallback)(function (identifier, withPunches) {
|
|
16
|
+
if (withPunches === void 0) { withPunches = false; }
|
|
17
|
+
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
18
|
+
var employee_1, employee_id, response, err_1, detail;
|
|
19
|
+
return tslib_1.__generator(this, function (_a) {
|
|
20
|
+
switch (_a.label) {
|
|
21
|
+
case 0:
|
|
22
|
+
_a.trys.push([0, 4, , 5]);
|
|
23
|
+
return [4 /*yield*/, api.getEmployee(identifier)];
|
|
24
|
+
case 1:
|
|
25
|
+
employee_1 = _a.sent();
|
|
26
|
+
if (!withPunches) return [3 /*break*/, 3];
|
|
27
|
+
employee_id = employee_1.employee_id;
|
|
28
|
+
return [4 /*yield*/, api.getTimePunchesReport(null, employee_id)];
|
|
29
|
+
case 2:
|
|
30
|
+
response = _a.sent();
|
|
31
|
+
if (response.length)
|
|
32
|
+
employee_1 = response[0];
|
|
33
|
+
_a.label = 3;
|
|
34
|
+
case 3:
|
|
35
|
+
if (!isAborted.current) {
|
|
36
|
+
setEmployee(employee_1);
|
|
37
|
+
}
|
|
38
|
+
return [3 /*break*/, 5];
|
|
39
|
+
case 4:
|
|
40
|
+
err_1 = _a.sent();
|
|
41
|
+
if (!isAborted.current) {
|
|
42
|
+
detail = (0, utils_1.handleRespError)(err_1).detail;
|
|
43
|
+
if (detail.includes('does not exist')) {
|
|
44
|
+
detail = 'Employee not found. Please try again.';
|
|
45
|
+
}
|
|
46
|
+
setError(detail);
|
|
47
|
+
}
|
|
48
|
+
return [3 /*break*/, 5];
|
|
49
|
+
case 5: return [2 /*return*/];
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
}, [api]);
|
|
54
|
+
var reset = (0, react_1.useCallback)(function () {
|
|
55
|
+
setEmployee(null);
|
|
56
|
+
setError(null);
|
|
57
|
+
}, []);
|
|
58
|
+
return (0, react_1.useMemo)(function () { return ({ employee: employee, error: error, fetch: fetch, reset: reset }); }, [employee, error, fetch, reset]);
|
|
59
|
+
};
|
|
60
|
+
exports.default = useEmployee;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { GiftCardBalance } from '../types';
|
|
2
|
+
declare const useGiftCardBalance: (api: any) => {
|
|
3
|
+
giftCard: GiftCardBalance | null;
|
|
4
|
+
loading: string;
|
|
5
|
+
error: string | null;
|
|
6
|
+
fetch: (code: string) => Promise<void>;
|
|
7
|
+
reset: () => void;
|
|
8
|
+
};
|
|
9
|
+
export default useGiftCardBalance;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var utils_1 = require("../utils");
|
|
6
|
+
var useGiftCardBalance = function (api) {
|
|
7
|
+
var isAborted = (0, react_1.useRef)(false);
|
|
8
|
+
var _a = (0, react_1.useState)(null), giftCard = _a[0], setGiftCard = _a[1];
|
|
9
|
+
var _b = (0, react_1.useState)('idle'), loading = _b[0], setLoading = _b[1];
|
|
10
|
+
var _c = (0, react_1.useState)(null), error = _c[0], setError = _c[1];
|
|
11
|
+
(0, react_1.useEffect)(function () {
|
|
12
|
+
return function () {
|
|
13
|
+
isAborted.current = true;
|
|
14
|
+
};
|
|
15
|
+
}, []);
|
|
16
|
+
var fetch = (0, react_1.useCallback)(function (code) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
17
|
+
var giftCard_1, err_1, detail;
|
|
18
|
+
return tslib_1.__generator(this, function (_a) {
|
|
19
|
+
switch (_a.label) {
|
|
20
|
+
case 0:
|
|
21
|
+
setLoading('pending');
|
|
22
|
+
_a.label = 1;
|
|
23
|
+
case 1:
|
|
24
|
+
_a.trys.push([1, 3, , 4]);
|
|
25
|
+
return [4 /*yield*/, api.getGiftCardBalance(code)];
|
|
26
|
+
case 2:
|
|
27
|
+
giftCard_1 = _a.sent();
|
|
28
|
+
if (!isAborted.current) {
|
|
29
|
+
setGiftCard(giftCard_1);
|
|
30
|
+
}
|
|
31
|
+
return [3 /*break*/, 4];
|
|
32
|
+
case 3:
|
|
33
|
+
err_1 = _a.sent();
|
|
34
|
+
if (!isAborted.current) {
|
|
35
|
+
detail = (0, utils_1.handleRespError)(err_1).detail;
|
|
36
|
+
setError(detail);
|
|
37
|
+
}
|
|
38
|
+
return [3 /*break*/, 4];
|
|
39
|
+
case 4:
|
|
40
|
+
setLoading('idle');
|
|
41
|
+
return [2 /*return*/];
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}); }, [api]);
|
|
45
|
+
var reset = (0, react_1.useCallback)(function () {
|
|
46
|
+
setGiftCard(null);
|
|
47
|
+
setLoading('idle');
|
|
48
|
+
setError(null);
|
|
49
|
+
}, []);
|
|
50
|
+
return (0, react_1.useMemo)(function () { return ({ giftCard: giftCard, loading: loading, error: error, fetch: fetch, reset: reset }); }, [giftCard, loading, error, fetch, reset]);
|
|
51
|
+
};
|
|
52
|
+
exports.default = useGiftCardBalance;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var react_1 = require("react");
|
|
4
|
+
var usePrevious = function (value) {
|
|
5
|
+
var ref = (0, react_1.useRef)();
|
|
6
|
+
(0, react_1.useEffect)(function () {
|
|
7
|
+
ref.current = value;
|
|
8
|
+
});
|
|
9
|
+
return ref.current;
|
|
10
|
+
};
|
|
11
|
+
exports.default = usePrevious;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ModalState } from '../slices';
|
|
2
|
+
import { Employee, Punch } from '../types';
|
|
3
|
+
declare const usePunch: (api: any) => {
|
|
4
|
+
submit: (employee: Employee, blockPin: boolean) => void;
|
|
5
|
+
send: (data: Punch, employee: Employee) => Promise<void>;
|
|
6
|
+
print: (employeeId: number) => Promise<void>;
|
|
7
|
+
error: string | null;
|
|
8
|
+
msg: string | null;
|
|
9
|
+
modal: ModalState | null;
|
|
10
|
+
reset: () => void;
|
|
11
|
+
};
|
|
12
|
+
export default usePunch;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var utils_1 = require("../utils");
|
|
6
|
+
var codeErrMsg = 'Employee has been assigned a swipe card. Please use card to punch in / out.';
|
|
7
|
+
var deptErrMsg = "This employee doesn't have any departments. Please contact HR.";
|
|
8
|
+
var usePunch = function (api) {
|
|
9
|
+
var isAborted = (0, react_1.useRef)(false);
|
|
10
|
+
var _a = (0, react_1.useState)(null), error = _a[0], setError = _a[1];
|
|
11
|
+
var _b = (0, react_1.useState)(null), msg = _b[0], setMsg = _b[1];
|
|
12
|
+
var _c = (0, react_1.useState)(null), modal = _c[0], setModal = _c[1];
|
|
13
|
+
(0, react_1.useEffect)(function () {
|
|
14
|
+
return function () {
|
|
15
|
+
isAborted.current = true;
|
|
16
|
+
};
|
|
17
|
+
}, []);
|
|
18
|
+
var reset = (0, react_1.useCallback)(function () {
|
|
19
|
+
setError(null);
|
|
20
|
+
setModal(null);
|
|
21
|
+
setMsg(null);
|
|
22
|
+
}, []);
|
|
23
|
+
var print = (0, react_1.useCallback)(function (employeeId) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
24
|
+
var err_1, detail;
|
|
25
|
+
return tslib_1.__generator(this, function (_a) {
|
|
26
|
+
switch (_a.label) {
|
|
27
|
+
case 0:
|
|
28
|
+
_a.trys.push([0, 2, , 3]);
|
|
29
|
+
return [4 /*yield*/, api.postPrintShiftSummary(employeeId)];
|
|
30
|
+
case 1:
|
|
31
|
+
_a.sent();
|
|
32
|
+
return [3 /*break*/, 3];
|
|
33
|
+
case 2:
|
|
34
|
+
err_1 = _a.sent();
|
|
35
|
+
if (!isAborted.current) {
|
|
36
|
+
detail = (0, utils_1.handleRespError)(err_1).detail;
|
|
37
|
+
setError(detail);
|
|
38
|
+
}
|
|
39
|
+
return [3 /*break*/, 3];
|
|
40
|
+
case 3: return [2 /*return*/];
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}); }, [api]);
|
|
44
|
+
var send = (0, react_1.useCallback)(function (data, employee) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
45
|
+
var err_2, detail;
|
|
46
|
+
return tslib_1.__generator(this, function (_a) {
|
|
47
|
+
switch (_a.label) {
|
|
48
|
+
case 0:
|
|
49
|
+
_a.trys.push([0, 2, , 3]);
|
|
50
|
+
return [4 /*yield*/, api.postTimePunch(data)];
|
|
51
|
+
case 1:
|
|
52
|
+
_a.sent();
|
|
53
|
+
if (!isAborted.current) {
|
|
54
|
+
setMsg((0, utils_1.makePunchMessage)(employee, data.punch_type));
|
|
55
|
+
}
|
|
56
|
+
return [3 /*break*/, 3];
|
|
57
|
+
case 2:
|
|
58
|
+
err_2 = _a.sent();
|
|
59
|
+
if (!isAborted.current) {
|
|
60
|
+
detail = (0, utils_1.handleRespError)(err_2).detail;
|
|
61
|
+
setError(detail);
|
|
62
|
+
}
|
|
63
|
+
return [3 /*break*/, 3];
|
|
64
|
+
case 3: return [2 /*return*/];
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}); }, [api]);
|
|
68
|
+
var submit = (0, react_1.useCallback)(function (employee, blockPin) {
|
|
69
|
+
if (employee && employee.code && blockPin) {
|
|
70
|
+
setError(codeErrMsg);
|
|
71
|
+
}
|
|
72
|
+
else if (!employee.punches) {
|
|
73
|
+
if (!employee.departments.length) {
|
|
74
|
+
setError(deptErrMsg);
|
|
75
|
+
}
|
|
76
|
+
else if (employee.departments.length > 1) {
|
|
77
|
+
setModal({ type: 'punchDept', args: { employee: employee } });
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
var employee_id = employee.employee_id, departments = employee.departments;
|
|
81
|
+
var data = {
|
|
82
|
+
employee_id: employee_id,
|
|
83
|
+
department_id: departments[0].id,
|
|
84
|
+
punch_type: 'PUNCH_IN',
|
|
85
|
+
tips: '0.00'
|
|
86
|
+
};
|
|
87
|
+
send(data, employee);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
var lastPunch = employee.punches[employee.punches.length - 1];
|
|
92
|
+
var employee_id = lastPunch.employee_id, department_id = lastPunch.department_id, punch_type = lastPunch.punch_type;
|
|
93
|
+
if (punch_type === 'BREAK_OUT') {
|
|
94
|
+
var data = {
|
|
95
|
+
employee_id: employee_id,
|
|
96
|
+
department_id: department_id,
|
|
97
|
+
punch_type: 'BREAK_IN',
|
|
98
|
+
tips: '0.00'
|
|
99
|
+
};
|
|
100
|
+
send(data, employee);
|
|
101
|
+
}
|
|
102
|
+
else if (punch_type === 'PUNCH_OUT') {
|
|
103
|
+
if (employee.departments.length > 1) {
|
|
104
|
+
setModal({ type: 'punchDept', args: { employee: employee } });
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
var data = {
|
|
108
|
+
employee_id: employee_id,
|
|
109
|
+
department_id: employee.departments[0].id,
|
|
110
|
+
punch_type: 'PUNCH_IN',
|
|
111
|
+
tips: '0.00'
|
|
112
|
+
};
|
|
113
|
+
send(data, employee);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
setModal({ type: 'punchType', args: { employee: employee } });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}, [send]);
|
|
121
|
+
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]);
|
|
122
|
+
};
|
|
123
|
+
exports.default = usePunch;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Money, OrderSurcharge, Refund, RefundItem } from '../types';
|
|
2
|
+
declare const useRefund: (initialState?: {}) => {
|
|
3
|
+
refund: Refund;
|
|
4
|
+
resetRefund: () => void;
|
|
5
|
+
incrementItem: (item: RefundItem) => void;
|
|
6
|
+
decrementItem: (item: RefundItem) => void;
|
|
7
|
+
removeSurcharge: (surcharge: OrderSurcharge) => void;
|
|
8
|
+
addBackSurcharge: (surcharge: OrderSurcharge) => void;
|
|
9
|
+
removeTip: (tip: Money) => void;
|
|
10
|
+
addBackTip: () => void;
|
|
11
|
+
removeShipping: (shipping: Money) => void;
|
|
12
|
+
addBackShipping: () => void;
|
|
13
|
+
removeTax: () => void;
|
|
14
|
+
addBackTax: () => void;
|
|
15
|
+
refundInFull: () => void;
|
|
16
|
+
};
|
|
17
|
+
export default useRefund;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var emptyState = {
|
|
6
|
+
full_refund: false,
|
|
7
|
+
all_taxes: false,
|
|
8
|
+
items: [],
|
|
9
|
+
surcharges: [],
|
|
10
|
+
tip: '0.00',
|
|
11
|
+
shipping: '0.00'
|
|
12
|
+
};
|
|
13
|
+
var useRefund = function (initialState) {
|
|
14
|
+
if (initialState === void 0) { initialState = {}; }
|
|
15
|
+
var _a = (0, react_1.useState)(tslib_1.__assign(tslib_1.__assign({}, emptyState), initialState)), refund = _a[0], setRefund = _a[1];
|
|
16
|
+
var resetRefund = function () {
|
|
17
|
+
setRefund(emptyState);
|
|
18
|
+
};
|
|
19
|
+
var refundInFull = function () {
|
|
20
|
+
setRefund(tslib_1.__assign(tslib_1.__assign({}, emptyState), { full_refund: true }));
|
|
21
|
+
};
|
|
22
|
+
var updateItems = function (refundItem) {
|
|
23
|
+
var otherItems = refund.items.filter(function (i) { return i.item_no !== refundItem.item_no; });
|
|
24
|
+
var items = refundItem.quantity ? tslib_1.__spreadArray(tslib_1.__spreadArray([], otherItems, true), [refundItem], false) : otherItems;
|
|
25
|
+
setRefund(tslib_1.__assign(tslib_1.__assign({}, refund), { items: items }));
|
|
26
|
+
};
|
|
27
|
+
var incrementItem = function (item) {
|
|
28
|
+
var quantity = item.quantity, item_no = item.item_no;
|
|
29
|
+
var currentItem = refund.items.find(function (i) { return i.item_no === item_no; });
|
|
30
|
+
var newQuantity = currentItem ? currentItem.quantity + 1 : 1;
|
|
31
|
+
var updatedQuantity = Math.min(newQuantity, quantity);
|
|
32
|
+
var refundItem = { item_no: item_no, quantity: updatedQuantity };
|
|
33
|
+
updateItems(refundItem);
|
|
34
|
+
};
|
|
35
|
+
var decrementItem = function (item) {
|
|
36
|
+
var item_no = item.item_no;
|
|
37
|
+
var currentItem = refund.items.find(function (i) { return i.item_no === item_no; });
|
|
38
|
+
var newQuantity = currentItem ? currentItem.quantity - 1 : 0;
|
|
39
|
+
var updatedQuantity = Math.max(newQuantity, 0);
|
|
40
|
+
var refundItem = { item_no: item_no, quantity: updatedQuantity };
|
|
41
|
+
updateItems(refundItem);
|
|
42
|
+
};
|
|
43
|
+
var removeSurcharge = function (surcharge) {
|
|
44
|
+
var current = refund.surcharges.find(function (i) { return i.surcharge_id === surcharge.id; });
|
|
45
|
+
if (current)
|
|
46
|
+
return;
|
|
47
|
+
var surcharges = tslib_1.__spreadArray(tslib_1.__spreadArray([], (refund.surcharges || []), true), [
|
|
48
|
+
{ surcharge_id: surcharge.id }
|
|
49
|
+
], false);
|
|
50
|
+
setRefund(tslib_1.__assign(tslib_1.__assign({}, refund), { surcharges: surcharges }));
|
|
51
|
+
};
|
|
52
|
+
var addBackSurcharge = function (surcharge) {
|
|
53
|
+
var surcharges = refund.surcharges.filter(function (i) { return i.surcharge_id !== surcharge.id; });
|
|
54
|
+
setRefund(tslib_1.__assign(tslib_1.__assign({}, refund), { surcharges: surcharges }));
|
|
55
|
+
};
|
|
56
|
+
var removeTip = function (tip) {
|
|
57
|
+
setRefund(tslib_1.__assign(tslib_1.__assign({}, refund), { tip: tip }));
|
|
58
|
+
};
|
|
59
|
+
var addBackTip = function () {
|
|
60
|
+
setRefund(tslib_1.__assign(tslib_1.__assign({}, refund), { tip: '0.00' }));
|
|
61
|
+
};
|
|
62
|
+
var removeShipping = function (shipping) {
|
|
63
|
+
setRefund(tslib_1.__assign(tslib_1.__assign({}, refund), { shipping: shipping }));
|
|
64
|
+
};
|
|
65
|
+
var addBackShipping = function () {
|
|
66
|
+
setRefund(tslib_1.__assign(tslib_1.__assign({}, refund), { shipping: '0.00' }));
|
|
67
|
+
};
|
|
68
|
+
var removeTax = function () {
|
|
69
|
+
setRefund(tslib_1.__assign(tslib_1.__assign({}, refund), { all_taxes: true }));
|
|
70
|
+
};
|
|
71
|
+
var addBackTax = function () {
|
|
72
|
+
setRefund(tslib_1.__assign(tslib_1.__assign({}, refund), { all_taxes: false }));
|
|
73
|
+
};
|
|
74
|
+
return {
|
|
75
|
+
refund: refund,
|
|
76
|
+
resetRefund: resetRefund,
|
|
77
|
+
incrementItem: incrementItem,
|
|
78
|
+
decrementItem: decrementItem,
|
|
79
|
+
removeSurcharge: removeSurcharge,
|
|
80
|
+
addBackSurcharge: addBackSurcharge,
|
|
81
|
+
removeTip: removeTip,
|
|
82
|
+
addBackTip: addBackTip,
|
|
83
|
+
removeShipping: removeShipping,
|
|
84
|
+
addBackShipping: addBackShipping,
|
|
85
|
+
removeTax: removeTax,
|
|
86
|
+
addBackTax: addBackTax,
|
|
87
|
+
refundInFull: refundInFull
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
exports.default = useRefund;
|
|
@@ -1,2 +1,9 @@
|
|
|
1
|
+
import useBarcode from './useBarcode';
|
|
1
2
|
import useBuilder from './useBuilder';
|
|
2
|
-
|
|
3
|
+
import useCardSwipe from './useCardSwipe';
|
|
4
|
+
import useEmployee from './useEmployee';
|
|
5
|
+
import useGiftCardBalance from './useGiftCardBalance';
|
|
6
|
+
import usePrevious from './usePrevious';
|
|
7
|
+
import usePunch from './usePunch';
|
|
8
|
+
import useRefund from './useRefund';
|
|
9
|
+
export { useBarcode, useBuilder, useCardSwipe, useEmployee, useGiftCardBalance, usePrevious, usePunch, useRefund };
|
package/dist/esm/hooks/index.js
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
+
import useBarcode from './useBarcode';
|
|
1
2
|
import useBuilder from './useBuilder';
|
|
2
|
-
|
|
3
|
+
import useCardSwipe from './useCardSwipe';
|
|
4
|
+
import useEmployee from './useEmployee';
|
|
5
|
+
import useGiftCardBalance from './useGiftCardBalance';
|
|
6
|
+
import usePrevious from './usePrevious';
|
|
7
|
+
import usePunch from './usePunch';
|
|
8
|
+
import useRefund from './useRefund';
|
|
9
|
+
export { useBarcode, useBuilder, useCardSwipe, useEmployee, useGiftCardBalance, usePrevious, usePunch, useRefund };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { __awaiter, __generator } from "tslib";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { handleRespError } from '../utils';
|
|
4
|
+
var useBarcode = function (api) {
|
|
5
|
+
var isAborted = useRef(false);
|
|
6
|
+
var _a = useState(null), code = _a[0], setCode = _a[1];
|
|
7
|
+
var _b = useState(null), error = _b[0], setError = _b[1];
|
|
8
|
+
useEffect(function () {
|
|
9
|
+
return function () {
|
|
10
|
+
isAborted.current = true;
|
|
11
|
+
};
|
|
12
|
+
}, []);
|
|
13
|
+
var read = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
14
|
+
var data, err_1, detail;
|
|
15
|
+
return __generator(this, function (_a) {
|
|
16
|
+
switch (_a.label) {
|
|
17
|
+
case 0:
|
|
18
|
+
_a.trys.push([0, 2, , 3]);
|
|
19
|
+
return [4 /*yield*/, api.getBarcodeRead()];
|
|
20
|
+
case 1:
|
|
21
|
+
data = (_a.sent()).data;
|
|
22
|
+
if (!isAborted.current) {
|
|
23
|
+
setCode(data);
|
|
24
|
+
}
|
|
25
|
+
return [3 /*break*/, 3];
|
|
26
|
+
case 2:
|
|
27
|
+
err_1 = _a.sent();
|
|
28
|
+
if (!isAborted.current) {
|
|
29
|
+
detail = handleRespError(err_1).detail;
|
|
30
|
+
setError(detail);
|
|
31
|
+
}
|
|
32
|
+
return [3 /*break*/, 3];
|
|
33
|
+
case 3: return [2 /*return*/];
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}); }, [api]);
|
|
37
|
+
var cancel = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
38
|
+
var err_2, detail;
|
|
39
|
+
return __generator(this, function (_a) {
|
|
40
|
+
switch (_a.label) {
|
|
41
|
+
case 0:
|
|
42
|
+
_a.trys.push([0, 2, , 3]);
|
|
43
|
+
return [4 /*yield*/, api.postBarcodeCancel()];
|
|
44
|
+
case 1:
|
|
45
|
+
_a.sent();
|
|
46
|
+
return [3 /*break*/, 3];
|
|
47
|
+
case 2:
|
|
48
|
+
err_2 = _a.sent();
|
|
49
|
+
if (!isAborted.current) {
|
|
50
|
+
detail = handleRespError(err_2).detail;
|
|
51
|
+
setError(detail);
|
|
52
|
+
}
|
|
53
|
+
return [3 /*break*/, 3];
|
|
54
|
+
case 3: return [2 /*return*/];
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}); }, [api]);
|
|
58
|
+
return useMemo(function () { return ({ code: code, error: error, read: read, cancel: cancel }); }, [code, error, read, cancel]);
|
|
59
|
+
};
|
|
60
|
+
export default useBarcode;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { __awaiter, __generator } from "tslib";
|
|
2
|
+
import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
|
|
3
|
+
import { handleRespError } from '../utils';
|
|
4
|
+
var parseSwipeCard = function (data) {
|
|
5
|
+
try {
|
|
6
|
+
var parts = data.split('?');
|
|
7
|
+
var code = parts[0].slice(1);
|
|
8
|
+
return code.length > 36 ? null : code;
|
|
9
|
+
}
|
|
10
|
+
catch (err) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
var useCardSwipe = function (api, parse) {
|
|
15
|
+
if (parse === void 0) { parse = true; }
|
|
16
|
+
var isAborted = useRef(false);
|
|
17
|
+
var _a = useState(null), code = _a[0], setCode = _a[1];
|
|
18
|
+
var _b = useState(null), error = _b[0], setError = _b[1];
|
|
19
|
+
useEffect(function () {
|
|
20
|
+
return function () {
|
|
21
|
+
isAborted.current = true;
|
|
22
|
+
};
|
|
23
|
+
}, []);
|
|
24
|
+
var read = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
25
|
+
var data, err_1, detail;
|
|
26
|
+
return __generator(this, function (_a) {
|
|
27
|
+
switch (_a.label) {
|
|
28
|
+
case 0:
|
|
29
|
+
_a.trys.push([0, 2, , 3]);
|
|
30
|
+
return [4 /*yield*/, api.getCardRead()];
|
|
31
|
+
case 1:
|
|
32
|
+
data = (_a.sent()).data;
|
|
33
|
+
if (parse)
|
|
34
|
+
data = parseSwipeCard(data);
|
|
35
|
+
data ? setCode(data) : setError('Could not read card. Please try again.');
|
|
36
|
+
if (!isAborted.current) {
|
|
37
|
+
data
|
|
38
|
+
? setCode(data)
|
|
39
|
+
: setError('Could not read card. Please try again.');
|
|
40
|
+
}
|
|
41
|
+
return [3 /*break*/, 3];
|
|
42
|
+
case 2:
|
|
43
|
+
err_1 = _a.sent();
|
|
44
|
+
if (!isAborted.current) {
|
|
45
|
+
detail = handleRespError(err_1).detail;
|
|
46
|
+
setError(detail);
|
|
47
|
+
}
|
|
48
|
+
return [3 /*break*/, 3];
|
|
49
|
+
case 3: return [2 /*return*/];
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}); }, [api, parse]);
|
|
53
|
+
var cancel = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
54
|
+
var err_2, detail;
|
|
55
|
+
return __generator(this, function (_a) {
|
|
56
|
+
switch (_a.label) {
|
|
57
|
+
case 0:
|
|
58
|
+
_a.trys.push([0, 2, , 3]);
|
|
59
|
+
return [4 /*yield*/, api.postCardCancel()];
|
|
60
|
+
case 1:
|
|
61
|
+
_a.sent();
|
|
62
|
+
return [3 /*break*/, 3];
|
|
63
|
+
case 2:
|
|
64
|
+
err_2 = _a.sent();
|
|
65
|
+
if (!isAborted.current) {
|
|
66
|
+
detail = handleRespError(err_2).detail;
|
|
67
|
+
setError(detail);
|
|
68
|
+
}
|
|
69
|
+
return [3 /*break*/, 3];
|
|
70
|
+
case 3: return [2 /*return*/];
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}); }, [api]);
|
|
74
|
+
return useMemo(function () { return ({ code: code, error: error, read: read, cancel: cancel }); }, [code, error, read, cancel]);
|
|
75
|
+
};
|
|
76
|
+
export default useCardSwipe;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Employee } from '../types';
|
|
2
|
+
declare const useEmployee: (api: any) => {
|
|
3
|
+
employee: Employee | null;
|
|
4
|
+
error: string | null;
|
|
5
|
+
fetch: (identifier: string | number, withPunches?: boolean) => Promise<void>;
|
|
6
|
+
reset: () => void;
|
|
7
|
+
};
|
|
8
|
+
export default useEmployee;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { __awaiter, __generator } from "tslib";
|
|
2
|
+
import { useState, useEffect, useRef, useCallback, useMemo } from 'react';
|
|
3
|
+
import { handleRespError } from '../utils';
|
|
4
|
+
var useEmployee = function (api) {
|
|
5
|
+
var isAborted = useRef(false);
|
|
6
|
+
var _a = useState(null), employee = _a[0], setEmployee = _a[1];
|
|
7
|
+
var _b = useState(null), error = _b[0], setError = _b[1];
|
|
8
|
+
useEffect(function () {
|
|
9
|
+
return function () {
|
|
10
|
+
isAborted.current = true;
|
|
11
|
+
};
|
|
12
|
+
}, []);
|
|
13
|
+
var fetch = useCallback(function (identifier, withPunches) {
|
|
14
|
+
if (withPunches === void 0) { withPunches = false; }
|
|
15
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
16
|
+
var employee_1, employee_id, response, err_1, detail;
|
|
17
|
+
return __generator(this, function (_a) {
|
|
18
|
+
switch (_a.label) {
|
|
19
|
+
case 0:
|
|
20
|
+
_a.trys.push([0, 4, , 5]);
|
|
21
|
+
return [4 /*yield*/, api.getEmployee(identifier)];
|
|
22
|
+
case 1:
|
|
23
|
+
employee_1 = _a.sent();
|
|
24
|
+
if (!withPunches) return [3 /*break*/, 3];
|
|
25
|
+
employee_id = employee_1.employee_id;
|
|
26
|
+
return [4 /*yield*/, api.getTimePunchesReport(null, employee_id)];
|
|
27
|
+
case 2:
|
|
28
|
+
response = _a.sent();
|
|
29
|
+
if (response.length)
|
|
30
|
+
employee_1 = response[0];
|
|
31
|
+
_a.label = 3;
|
|
32
|
+
case 3:
|
|
33
|
+
if (!isAborted.current) {
|
|
34
|
+
setEmployee(employee_1);
|
|
35
|
+
}
|
|
36
|
+
return [3 /*break*/, 5];
|
|
37
|
+
case 4:
|
|
38
|
+
err_1 = _a.sent();
|
|
39
|
+
if (!isAborted.current) {
|
|
40
|
+
detail = handleRespError(err_1).detail;
|
|
41
|
+
if (detail.includes('does not exist')) {
|
|
42
|
+
detail = 'Employee not found. Please try again.';
|
|
43
|
+
}
|
|
44
|
+
setError(detail);
|
|
45
|
+
}
|
|
46
|
+
return [3 /*break*/, 5];
|
|
47
|
+
case 5: return [2 /*return*/];
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}, [api]);
|
|
52
|
+
var reset = useCallback(function () {
|
|
53
|
+
setEmployee(null);
|
|
54
|
+
setError(null);
|
|
55
|
+
}, []);
|
|
56
|
+
return useMemo(function () { return ({ employee: employee, error: error, fetch: fetch, reset: reset }); }, [employee, error, fetch, reset]);
|
|
57
|
+
};
|
|
58
|
+
export default useEmployee;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { GiftCardBalance } from '../types';
|
|
2
|
+
declare const useGiftCardBalance: (api: any) => {
|
|
3
|
+
giftCard: GiftCardBalance | null;
|
|
4
|
+
loading: string;
|
|
5
|
+
error: string | null;
|
|
6
|
+
fetch: (code: string) => Promise<void>;
|
|
7
|
+
reset: () => void;
|
|
8
|
+
};
|
|
9
|
+
export default useGiftCardBalance;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { __awaiter, __generator } from "tslib";
|
|
2
|
+
import { useState, useEffect, useRef, useCallback, useMemo } from 'react';
|
|
3
|
+
import { handleRespError } from '../utils';
|
|
4
|
+
var useGiftCardBalance = function (api) {
|
|
5
|
+
var isAborted = useRef(false);
|
|
6
|
+
var _a = useState(null), giftCard = _a[0], setGiftCard = _a[1];
|
|
7
|
+
var _b = useState('idle'), loading = _b[0], setLoading = _b[1];
|
|
8
|
+
var _c = useState(null), error = _c[0], setError = _c[1];
|
|
9
|
+
useEffect(function () {
|
|
10
|
+
return function () {
|
|
11
|
+
isAborted.current = true;
|
|
12
|
+
};
|
|
13
|
+
}, []);
|
|
14
|
+
var fetch = useCallback(function (code) { return __awaiter(void 0, void 0, void 0, function () {
|
|
15
|
+
var giftCard_1, err_1, detail;
|
|
16
|
+
return __generator(this, function (_a) {
|
|
17
|
+
switch (_a.label) {
|
|
18
|
+
case 0:
|
|
19
|
+
setLoading('pending');
|
|
20
|
+
_a.label = 1;
|
|
21
|
+
case 1:
|
|
22
|
+
_a.trys.push([1, 3, , 4]);
|
|
23
|
+
return [4 /*yield*/, api.getGiftCardBalance(code)];
|
|
24
|
+
case 2:
|
|
25
|
+
giftCard_1 = _a.sent();
|
|
26
|
+
if (!isAborted.current) {
|
|
27
|
+
setGiftCard(giftCard_1);
|
|
28
|
+
}
|
|
29
|
+
return [3 /*break*/, 4];
|
|
30
|
+
case 3:
|
|
31
|
+
err_1 = _a.sent();
|
|
32
|
+
if (!isAborted.current) {
|
|
33
|
+
detail = handleRespError(err_1).detail;
|
|
34
|
+
setError(detail);
|
|
35
|
+
}
|
|
36
|
+
return [3 /*break*/, 4];
|
|
37
|
+
case 4:
|
|
38
|
+
setLoading('idle');
|
|
39
|
+
return [2 /*return*/];
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}); }, [api]);
|
|
43
|
+
var reset = useCallback(function () {
|
|
44
|
+
setGiftCard(null);
|
|
45
|
+
setLoading('idle');
|
|
46
|
+
setError(null);
|
|
47
|
+
}, []);
|
|
48
|
+
return useMemo(function () { return ({ giftCard: giftCard, loading: loading, error: error, fetch: fetch, reset: reset }); }, [giftCard, loading, error, fetch, reset]);
|
|
49
|
+
};
|
|
50
|
+
export default useGiftCardBalance;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ModalState } from '../slices';
|
|
2
|
+
import { Employee, Punch } from '../types';
|
|
3
|
+
declare const usePunch: (api: any) => {
|
|
4
|
+
submit: (employee: Employee, blockPin: boolean) => void;
|
|
5
|
+
send: (data: Punch, employee: Employee) => Promise<void>;
|
|
6
|
+
print: (employeeId: number) => Promise<void>;
|
|
7
|
+
error: string | null;
|
|
8
|
+
msg: string | null;
|
|
9
|
+
modal: ModalState | null;
|
|
10
|
+
reset: () => void;
|
|
11
|
+
};
|
|
12
|
+
export default usePunch;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { __awaiter, __generator } from "tslib";
|
|
2
|
+
import { useState, useEffect, useRef, useCallback, useMemo } from 'react';
|
|
3
|
+
import { handleRespError, makePunchMessage } from '../utils';
|
|
4
|
+
var codeErrMsg = 'Employee has been assigned a swipe card. Please use card to punch in / out.';
|
|
5
|
+
var deptErrMsg = "This employee doesn't have any departments. Please contact HR.";
|
|
6
|
+
var usePunch = function (api) {
|
|
7
|
+
var isAborted = useRef(false);
|
|
8
|
+
var _a = useState(null), error = _a[0], setError = _a[1];
|
|
9
|
+
var _b = useState(null), msg = _b[0], setMsg = _b[1];
|
|
10
|
+
var _c = useState(null), modal = _c[0], setModal = _c[1];
|
|
11
|
+
useEffect(function () {
|
|
12
|
+
return function () {
|
|
13
|
+
isAborted.current = true;
|
|
14
|
+
};
|
|
15
|
+
}, []);
|
|
16
|
+
var reset = useCallback(function () {
|
|
17
|
+
setError(null);
|
|
18
|
+
setModal(null);
|
|
19
|
+
setMsg(null);
|
|
20
|
+
}, []);
|
|
21
|
+
var print = useCallback(function (employeeId) { return __awaiter(void 0, void 0, void 0, function () {
|
|
22
|
+
var err_1, detail;
|
|
23
|
+
return __generator(this, function (_a) {
|
|
24
|
+
switch (_a.label) {
|
|
25
|
+
case 0:
|
|
26
|
+
_a.trys.push([0, 2, , 3]);
|
|
27
|
+
return [4 /*yield*/, api.postPrintShiftSummary(employeeId)];
|
|
28
|
+
case 1:
|
|
29
|
+
_a.sent();
|
|
30
|
+
return [3 /*break*/, 3];
|
|
31
|
+
case 2:
|
|
32
|
+
err_1 = _a.sent();
|
|
33
|
+
if (!isAborted.current) {
|
|
34
|
+
detail = handleRespError(err_1).detail;
|
|
35
|
+
setError(detail);
|
|
36
|
+
}
|
|
37
|
+
return [3 /*break*/, 3];
|
|
38
|
+
case 3: return [2 /*return*/];
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}); }, [api]);
|
|
42
|
+
var send = useCallback(function (data, employee) { return __awaiter(void 0, void 0, void 0, function () {
|
|
43
|
+
var err_2, detail;
|
|
44
|
+
return __generator(this, function (_a) {
|
|
45
|
+
switch (_a.label) {
|
|
46
|
+
case 0:
|
|
47
|
+
_a.trys.push([0, 2, , 3]);
|
|
48
|
+
return [4 /*yield*/, api.postTimePunch(data)];
|
|
49
|
+
case 1:
|
|
50
|
+
_a.sent();
|
|
51
|
+
if (!isAborted.current) {
|
|
52
|
+
setMsg(makePunchMessage(employee, data.punch_type));
|
|
53
|
+
}
|
|
54
|
+
return [3 /*break*/, 3];
|
|
55
|
+
case 2:
|
|
56
|
+
err_2 = _a.sent();
|
|
57
|
+
if (!isAborted.current) {
|
|
58
|
+
detail = handleRespError(err_2).detail;
|
|
59
|
+
setError(detail);
|
|
60
|
+
}
|
|
61
|
+
return [3 /*break*/, 3];
|
|
62
|
+
case 3: return [2 /*return*/];
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}); }, [api]);
|
|
66
|
+
var submit = useCallback(function (employee, blockPin) {
|
|
67
|
+
if (employee && employee.code && blockPin) {
|
|
68
|
+
setError(codeErrMsg);
|
|
69
|
+
}
|
|
70
|
+
else if (!employee.punches) {
|
|
71
|
+
if (!employee.departments.length) {
|
|
72
|
+
setError(deptErrMsg);
|
|
73
|
+
}
|
|
74
|
+
else if (employee.departments.length > 1) {
|
|
75
|
+
setModal({ type: 'punchDept', args: { employee: employee } });
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
var employee_id = employee.employee_id, departments = employee.departments;
|
|
79
|
+
var data = {
|
|
80
|
+
employee_id: employee_id,
|
|
81
|
+
department_id: departments[0].id,
|
|
82
|
+
punch_type: 'PUNCH_IN',
|
|
83
|
+
tips: '0.00'
|
|
84
|
+
};
|
|
85
|
+
send(data, employee);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
var lastPunch = employee.punches[employee.punches.length - 1];
|
|
90
|
+
var employee_id = lastPunch.employee_id, department_id = lastPunch.department_id, punch_type = lastPunch.punch_type;
|
|
91
|
+
if (punch_type === 'BREAK_OUT') {
|
|
92
|
+
var data = {
|
|
93
|
+
employee_id: employee_id,
|
|
94
|
+
department_id: department_id,
|
|
95
|
+
punch_type: 'BREAK_IN',
|
|
96
|
+
tips: '0.00'
|
|
97
|
+
};
|
|
98
|
+
send(data, employee);
|
|
99
|
+
}
|
|
100
|
+
else if (punch_type === 'PUNCH_OUT') {
|
|
101
|
+
if (employee.departments.length > 1) {
|
|
102
|
+
setModal({ type: 'punchDept', args: { employee: employee } });
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
var data = {
|
|
106
|
+
employee_id: employee_id,
|
|
107
|
+
department_id: employee.departments[0].id,
|
|
108
|
+
punch_type: 'PUNCH_IN',
|
|
109
|
+
tips: '0.00'
|
|
110
|
+
};
|
|
111
|
+
send(data, employee);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
setModal({ type: 'punchType', args: { employee: employee } });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}, [send]);
|
|
119
|
+
return useMemo(function () { return ({ submit: submit, send: send, print: print, error: error, msg: msg, modal: modal, reset: reset }); }, [submit, send, print, error, msg, modal, reset]);
|
|
120
|
+
};
|
|
121
|
+
export default usePunch;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Money, OrderSurcharge, Refund, RefundItem } from '../types';
|
|
2
|
+
declare const useRefund: (initialState?: {}) => {
|
|
3
|
+
refund: Refund;
|
|
4
|
+
resetRefund: () => void;
|
|
5
|
+
incrementItem: (item: RefundItem) => void;
|
|
6
|
+
decrementItem: (item: RefundItem) => void;
|
|
7
|
+
removeSurcharge: (surcharge: OrderSurcharge) => void;
|
|
8
|
+
addBackSurcharge: (surcharge: OrderSurcharge) => void;
|
|
9
|
+
removeTip: (tip: Money) => void;
|
|
10
|
+
addBackTip: () => void;
|
|
11
|
+
removeShipping: (shipping: Money) => void;
|
|
12
|
+
addBackShipping: () => void;
|
|
13
|
+
removeTax: () => void;
|
|
14
|
+
addBackTax: () => void;
|
|
15
|
+
refundInFull: () => void;
|
|
16
|
+
};
|
|
17
|
+
export default useRefund;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { __assign, __spreadArray } from "tslib";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
var emptyState = {
|
|
4
|
+
full_refund: false,
|
|
5
|
+
all_taxes: false,
|
|
6
|
+
items: [],
|
|
7
|
+
surcharges: [],
|
|
8
|
+
tip: '0.00',
|
|
9
|
+
shipping: '0.00'
|
|
10
|
+
};
|
|
11
|
+
var useRefund = function (initialState) {
|
|
12
|
+
if (initialState === void 0) { initialState = {}; }
|
|
13
|
+
var _a = useState(__assign(__assign({}, emptyState), initialState)), refund = _a[0], setRefund = _a[1];
|
|
14
|
+
var resetRefund = function () {
|
|
15
|
+
setRefund(emptyState);
|
|
16
|
+
};
|
|
17
|
+
var refundInFull = function () {
|
|
18
|
+
setRefund(__assign(__assign({}, emptyState), { full_refund: true }));
|
|
19
|
+
};
|
|
20
|
+
var updateItems = function (refundItem) {
|
|
21
|
+
var otherItems = refund.items.filter(function (i) { return i.item_no !== refundItem.item_no; });
|
|
22
|
+
var items = refundItem.quantity ? __spreadArray(__spreadArray([], otherItems, true), [refundItem], false) : otherItems;
|
|
23
|
+
setRefund(__assign(__assign({}, refund), { items: items }));
|
|
24
|
+
};
|
|
25
|
+
var incrementItem = function (item) {
|
|
26
|
+
var quantity = item.quantity, item_no = item.item_no;
|
|
27
|
+
var currentItem = refund.items.find(function (i) { return i.item_no === item_no; });
|
|
28
|
+
var newQuantity = currentItem ? currentItem.quantity + 1 : 1;
|
|
29
|
+
var updatedQuantity = Math.min(newQuantity, quantity);
|
|
30
|
+
var refundItem = { item_no: item_no, quantity: updatedQuantity };
|
|
31
|
+
updateItems(refundItem);
|
|
32
|
+
};
|
|
33
|
+
var decrementItem = function (item) {
|
|
34
|
+
var item_no = item.item_no;
|
|
35
|
+
var currentItem = refund.items.find(function (i) { return i.item_no === item_no; });
|
|
36
|
+
var newQuantity = currentItem ? currentItem.quantity - 1 : 0;
|
|
37
|
+
var updatedQuantity = Math.max(newQuantity, 0);
|
|
38
|
+
var refundItem = { item_no: item_no, quantity: updatedQuantity };
|
|
39
|
+
updateItems(refundItem);
|
|
40
|
+
};
|
|
41
|
+
var removeSurcharge = function (surcharge) {
|
|
42
|
+
var current = refund.surcharges.find(function (i) { return i.surcharge_id === surcharge.id; });
|
|
43
|
+
if (current)
|
|
44
|
+
return;
|
|
45
|
+
var surcharges = __spreadArray(__spreadArray([], (refund.surcharges || []), true), [
|
|
46
|
+
{ surcharge_id: surcharge.id }
|
|
47
|
+
], false);
|
|
48
|
+
setRefund(__assign(__assign({}, refund), { surcharges: surcharges }));
|
|
49
|
+
};
|
|
50
|
+
var addBackSurcharge = function (surcharge) {
|
|
51
|
+
var surcharges = refund.surcharges.filter(function (i) { return i.surcharge_id !== surcharge.id; });
|
|
52
|
+
setRefund(__assign(__assign({}, refund), { surcharges: surcharges }));
|
|
53
|
+
};
|
|
54
|
+
var removeTip = function (tip) {
|
|
55
|
+
setRefund(__assign(__assign({}, refund), { tip: tip }));
|
|
56
|
+
};
|
|
57
|
+
var addBackTip = function () {
|
|
58
|
+
setRefund(__assign(__assign({}, refund), { tip: '0.00' }));
|
|
59
|
+
};
|
|
60
|
+
var removeShipping = function (shipping) {
|
|
61
|
+
setRefund(__assign(__assign({}, refund), { shipping: shipping }));
|
|
62
|
+
};
|
|
63
|
+
var addBackShipping = function () {
|
|
64
|
+
setRefund(__assign(__assign({}, refund), { shipping: '0.00' }));
|
|
65
|
+
};
|
|
66
|
+
var removeTax = function () {
|
|
67
|
+
setRefund(__assign(__assign({}, refund), { all_taxes: true }));
|
|
68
|
+
};
|
|
69
|
+
var addBackTax = function () {
|
|
70
|
+
setRefund(__assign(__assign({}, refund), { all_taxes: false }));
|
|
71
|
+
};
|
|
72
|
+
return {
|
|
73
|
+
refund: refund,
|
|
74
|
+
resetRefund: resetRefund,
|
|
75
|
+
incrementItem: incrementItem,
|
|
76
|
+
decrementItem: decrementItem,
|
|
77
|
+
removeSurcharge: removeSurcharge,
|
|
78
|
+
addBackSurcharge: addBackSurcharge,
|
|
79
|
+
removeTip: removeTip,
|
|
80
|
+
addBackTip: addBackTip,
|
|
81
|
+
removeShipping: removeShipping,
|
|
82
|
+
addBackShipping: addBackShipping,
|
|
83
|
+
removeTax: removeTax,
|
|
84
|
+
addBackTax: addBackTax,
|
|
85
|
+
refundInFull: refundInFull
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
export default useRefund;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-tender/store",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "A library of hooks, reducers, utility functions, and types for use with Open Tender applications that utilize our in-store POS API",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|