pi-kiosk-shared 2.1.4 → 2.1.7

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.
Files changed (60) hide show
  1. package/README.md +80 -85
  2. package/dist/api.d.ts +5 -2
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +36 -6
  5. package/dist/api.js.map +1 -1
  6. package/dist/index.d.ts +0 -10
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -11
  9. package/dist/index.js.map +1 -1
  10. package/dist/types.d.ts +11 -7
  11. package/dist/types.d.ts.map +1 -1
  12. package/package.json +7 -9
  13. package/dist/components/ErrorDisplay.d.ts +0 -13
  14. package/dist/components/ErrorDisplay.d.ts.map +0 -1
  15. package/dist/components/ErrorDisplay.js +0 -9
  16. package/dist/components/ErrorDisplay.js.map +0 -1
  17. package/dist/components/LoadingSpinner.d.ts +0 -9
  18. package/dist/components/LoadingSpinner.d.ts.map +0 -1
  19. package/dist/components/LoadingSpinner.js +0 -11
  20. package/dist/components/LoadingSpinner.js.map +0 -1
  21. package/dist/config/deployment.d.ts +0 -97
  22. package/dist/config/deployment.d.ts.map +0 -1
  23. package/dist/config/deployment.js +0 -154
  24. package/dist/config/deployment.js.map +0 -1
  25. package/dist/config/environments.d.ts +0 -42
  26. package/dist/config/environments.d.ts.map +0 -1
  27. package/dist/config/environments.js +0 -191
  28. package/dist/config/environments.js.map +0 -1
  29. package/dist/config/environments.test.d.ts +0 -1
  30. package/dist/config/environments.test.js +0 -49
  31. package/dist/config/logger.d.ts +0 -41
  32. package/dist/config/logger.d.ts.map +0 -1
  33. package/dist/config/logger.js +0 -119
  34. package/dist/config/logger.js.map +0 -1
  35. package/dist/constants.d.ts +0 -91
  36. package/dist/constants.d.ts.map +0 -1
  37. package/dist/constants.js +0 -113
  38. package/dist/constants.js.map +0 -1
  39. package/dist/hooks/useApi.d.ts +0 -21
  40. package/dist/hooks/useApi.d.ts.map +0 -1
  41. package/dist/hooks/useApi.js +0 -52
  42. package/dist/hooks/useApi.js.map +0 -1
  43. package/dist/hooks/useAsyncOperation.d.ts +0 -22
  44. package/dist/hooks/useAsyncOperation.d.ts.map +0 -1
  45. package/dist/hooks/useAsyncOperation.js +0 -59
  46. package/dist/hooks/useAsyncOperation.js.map +0 -1
  47. package/dist/hooks/useErrorHandler.d.ts +0 -15
  48. package/dist/hooks/useErrorHandler.d.ts.map +0 -1
  49. package/dist/hooks/useErrorHandler.js +0 -55
  50. package/dist/hooks/useErrorHandler.js.map +0 -1
  51. package/dist/utils/simple.test.d.ts +0 -1
  52. package/dist/utils/simple.test.js +0 -45
  53. package/dist/utils.d.ts +0 -24
  54. package/dist/utils.d.ts.map +0 -1
  55. package/dist/utils.js +0 -159
  56. package/dist/utils.js.map +0 -1
  57. package/dist/validation.d.ts +0 -46
  58. package/dist/validation.d.ts.map +0 -1
  59. package/dist/validation.js +0 -173
  60. package/dist/validation.js.map +0 -1
package/dist/utils.js DELETED
@@ -1,159 +0,0 @@
1
- // Shared utility functions - consolidated from utils/simple.ts
2
- export const validateEmail = (email) => {
3
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
4
- // Additional check for consecutive dots which are invalid
5
- if (email.includes('..'))
6
- return false;
7
- return emailRegex.test(email);
8
- };
9
- export const formatPrice = (price) => {
10
- return new Intl.NumberFormat('cs-CZ', {
11
- style: 'currency',
12
- currency: 'CZK',
13
- minimumFractionDigits: 2,
14
- maximumFractionDigits: 2
15
- }).format(price);
16
- };
17
- // Price precision handling utilities
18
- export const PRICE_PRECISION = 2; // 2 decimal places for CZK
19
- export const roundPrice = (price) => {
20
- return Math.round(price * 100) / 100;
21
- };
22
- export const parsePrice = (value) => {
23
- const num = typeof value === 'string' ? parseFloat(value) : value;
24
- return roundPrice(num);
25
- };
26
- export const validatePrice = (price) => {
27
- return !isNaN(price) && price > 0 && price <= 999999.99;
28
- };
29
- // Convert decimal to string for API calls to avoid precision issues
30
- export const priceToString = (price) => {
31
- return price.toFixed(PRICE_PRECISION);
32
- };
33
- // Convert string back to number for calculations
34
- export const stringToPrice = (priceStr) => {
35
- return parseFloat(priceStr);
36
- };
37
- export const getKioskIdFromUrl = () => {
38
- const urlParams = new URLSearchParams(window.location.search);
39
- const kioskId = urlParams.get('kioskId');
40
- if (!kioskId) {
41
- throw new Error('Kiosk ID is required. Please add ?kioskId=X to the URL where X is your kiosk number.');
42
- }
43
- const parsedId = parseInt(kioskId);
44
- if (isNaN(parsedId) || parsedId <= 0) {
45
- throw new Error(`Invalid kiosk ID: ${kioskId}. Kiosk ID must be a positive number.`);
46
- }
47
- return parsedId;
48
- };
49
- export const getKioskSecretFromUrl = () => {
50
- const urlParams = new URLSearchParams(window.location.search);
51
- return urlParams.get('secret') || undefined;
52
- };
53
- export const formatDate = (date) => {
54
- const d = typeof date === 'string' ? new Date(date) : date;
55
- return d.toLocaleDateString('cs-CZ', {
56
- year: 'numeric',
57
- month: 'short',
58
- day: 'numeric',
59
- hour: '2-digit',
60
- minute: '2-digit'
61
- });
62
- };
63
- export const debounce = (func, delay) => {
64
- let timeoutId;
65
- return (...args) => {
66
- clearTimeout(timeoutId);
67
- timeoutId = setTimeout(() => func(...args), delay);
68
- };
69
- };
70
- export const generatePaymentId = () => {
71
- return `pay-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
72
- };
73
- export const validateKioskId = (kioskId) => {
74
- return Number.isInteger(kioskId) && kioskId > 0;
75
- };
76
- // Cart utility functions
77
- export const createEmptyCart = () => ({
78
- items: [],
79
- totalAmount: 0,
80
- totalItems: 0
81
- });
82
- export const addToCart = (cart, product, quantity = 1) => {
83
- const existingItemIndex = cart.items.findIndex((item) => item.product.id === product.id);
84
- // Create a new items array
85
- const newItems = [...cart.items];
86
- if (existingItemIndex !== -1) {
87
- // Create a new item object with updated quantity (immutable update)
88
- const existingItem = cart.items[existingItemIndex];
89
- newItems[existingItemIndex] = {
90
- ...existingItem,
91
- quantity: existingItem.quantity + quantity
92
- };
93
- }
94
- else {
95
- // Add new item to the array
96
- newItems.push({ product, quantity });
97
- }
98
- // Calculate totals
99
- const totalAmount = roundPrice(newItems.reduce((sum, item) => sum + (item.product.price * item.quantity), 0));
100
- const totalItems = newItems.reduce((sum, item) => sum + item.quantity, 0);
101
- // Return a new cart object (immutable)
102
- return {
103
- ...cart,
104
- items: newItems,
105
- totalAmount,
106
- totalItems
107
- };
108
- };
109
- export const removeFromCart = (cart, productId) => {
110
- // Create a new items array (immutable)
111
- const newItems = cart.items.filter((item) => item.product.id !== productId);
112
- // Calculate totals
113
- const totalAmount = roundPrice(newItems.reduce((sum, item) => sum + (item.product.price * item.quantity), 0));
114
- const totalItems = newItems.reduce((sum, item) => sum + item.quantity, 0);
115
- // Return a new cart object (immutable)
116
- return {
117
- ...cart,
118
- items: newItems,
119
- totalAmount,
120
- totalItems
121
- };
122
- };
123
- export const updateCartItemQuantity = (cart, productId, quantity) => {
124
- if (quantity <= 0) {
125
- return removeFromCart(cart, productId);
126
- }
127
- const itemIndex = cart.items.findIndex((item) => item.product.id === productId);
128
- if (itemIndex === -1) {
129
- return cart;
130
- }
131
- // Create a new items array with updated item (immutable)
132
- const newItems = [...cart.items];
133
- const existingItem = cart.items[itemIndex];
134
- newItems[itemIndex] = {
135
- ...existingItem,
136
- quantity
137
- };
138
- // Calculate totals
139
- const totalAmount = roundPrice(newItems.reduce((sum, item) => sum + (item.product.price * item.quantity), 0));
140
- const totalItems = newItems.reduce((sum, item) => sum + item.quantity, 0);
141
- // Return a new cart object (immutable)
142
- return {
143
- ...cart,
144
- items: newItems,
145
- totalAmount,
146
- totalItems
147
- };
148
- };
149
- export const clearCart = (cart) => {
150
- // Return a new cart object (immutable)
151
- return {
152
- ...cart,
153
- items: [],
154
- totalAmount: 0,
155
- totalItems: 0
156
- };
157
- };
158
- // Note: getErrorMessage is now exported from ./errors.ts instead
159
- //# sourceMappingURL=utils.js.map
package/dist/utils.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- export interface ValidationResult {
2
- isValid: boolean;
3
- errors: Record<string, string>;
4
- }
5
- export declare const validators: {
6
- required: (value: any) => string | null;
7
- email: (value: string) => string | null;
8
- minLength: (value: string, min: number, fieldName: string) => string | null;
9
- maxLength: (value: string, max: number, fieldName: string) => string | null;
10
- positiveNumber: (value: number, fieldName: string) => string | null;
11
- username: (value: string) => string | null;
12
- password: (value: string) => string | null;
13
- kioskId: (value: number) => string | null;
14
- quantity: (value: number, fieldName?: string) => string | null;
15
- price: (value: number, fieldName?: string) => string | null;
16
- };
17
- export interface ValidationSchema {
18
- [field: string]: Array<(value: any) => string | null>;
19
- }
20
- export declare const validateSchema: (data: Record<string, any>, schema: ValidationSchema) => ValidationResult;
21
- export declare const validationSchemas: {
22
- login: {
23
- username: ((value: string) => string | null)[];
24
- password: ((value: string) => string | null)[];
25
- };
26
- customerEmail: {
27
- email: ((value: string) => string | null)[];
28
- };
29
- product: {
30
- name: ((value: any) => string | null)[];
31
- price: ((value: number, fieldName?: string) => string | null)[];
32
- description: ((value: any) => string | null)[];
33
- };
34
- kioskId: {
35
- kioskId: ((value: number) => string | null)[];
36
- };
37
- inventory: {
38
- quantityInStock: ((value: number, fieldName?: string) => string | null)[];
39
- };
40
- payment: {
41
- productId: ((value: any) => string | null)[];
42
- kioskId: ((value: number) => string | null)[];
43
- amount: ((value: number, fieldName?: string) => string | null)[];
44
- };
45
- };
46
- //# sourceMappingURL=validation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,eAAO,MAAM,UAAU;sBACH,GAAG,KAAG,MAAM,GAAG,IAAI;mBAOtB,MAAM,KAAG,MAAM,GAAG,IAAI;uBAUlB,MAAM,OAAO,MAAM,aAAa,MAAM,KAAG,MAAM,GAAG,IAAI;uBAStD,MAAM,OAAO,MAAM,aAAa,MAAM,KAAG,MAAM,GAAG,IAAI;4BASjD,MAAM,aAAa,MAAM,KAAG,MAAM,GAAG,IAAI;sBAS/C,MAAM,KAAG,MAAM,GAAG,IAAI;sBActB,MAAM,KAAG,MAAM,GAAG,IAAI;qBAUvB,MAAM,KAAG,MAAM,GAAG,IAAI;sBAUrB,MAAM,cAAa,MAAM,KAAgB,MAAM,GAAG,IAAI;mBAUzD,MAAM,cAAa,MAAM,KAAY,MAAM,GAAG,IAAI;CAoBlE,CAAC;AAGF,MAAM,WAAW,gBAAgB;IAC/B,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC;CACvD;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,gBAAgB,KAAG,gBAmBpF,CAAC;AAGF,eAAO,MAAM,iBAAiB;;2BA7FV,MAAM,KAAG,MAAM,GAAG,IAAI;2BActB,MAAM,KAAG,MAAM,GAAG,IAAI;;;wBAnDzB,MAAM,KAAG,MAAM,GAAG,IAAI;;;uBAuJzB,GAAG;wBAtEA,MAAM,cAAa,MAAM,KAAY,MAAM,GAAG,IAAI;8BA+ErD,GAAG;;;0BAnGE,MAAM,KAAG,MAAM,GAAG,IAAI;;;kCAUrB,MAAM,cAAa,MAAM,KAAgB,MAAM,GAAG,IAAI;;;4BA6G5D,GAAG;0BAvHE,MAAM,KAAG,MAAM,GAAG,IAAI;yBAoBxB,MAAM,cAAa,MAAM,KAAY,MAAM,GAAG,IAAI;;CA+GlE,CAAC"}
@@ -1,173 +0,0 @@
1
- // Shared validation utilities
2
- // ValidationError is imported but not used directly in this file
3
- import { APP_CONFIG, UI_MESSAGES } from './constants';
4
- export const validators = {
5
- required: (value) => {
6
- if (value === null || value === undefined || value === '') {
7
- return UI_MESSAGES.REQUIRED_FIELD;
8
- }
9
- return null;
10
- },
11
- email: (value) => {
12
- if (!value)
13
- return null; // Let required validator handle empty values
14
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
15
- if (!emailRegex.test(value)) {
16
- return UI_MESSAGES.INVALID_EMAIL;
17
- }
18
- return null;
19
- },
20
- minLength: (value, min, fieldName) => {
21
- if (!value)
22
- return null; // Let required validator handle empty values
23
- if (value.length < min) {
24
- return `${fieldName} musí mít alespoň ${min} znaků`;
25
- }
26
- return null;
27
- },
28
- maxLength: (value, max, fieldName) => {
29
- if (!value)
30
- return null;
31
- if (value.length > max) {
32
- return `${fieldName} může mít maximálně ${max} znaků`;
33
- }
34
- return null;
35
- },
36
- positiveNumber: (value, fieldName) => {
37
- if (value === null || value === undefined)
38
- return null;
39
- if (value <= 0) {
40
- return `${fieldName} musí být větší než 0`;
41
- }
42
- return null;
43
- },
44
- username: (value) => {
45
- if (!value)
46
- return null;
47
- if (value.length < APP_CONFIG.MIN_USERNAME_LENGTH) {
48
- return `Uživatelské jméno musí mít alespoň ${APP_CONFIG.MIN_USERNAME_LENGTH} znaky`;
49
- }
50
- if (!/^[a-zA-Z0-9_]+$/.test(value)) {
51
- return 'Uživatelské jméno může obsahovat pouze písmena, číslice a podtržítka';
52
- }
53
- return null;
54
- },
55
- password: (value) => {
56
- if (!value)
57
- return null;
58
- if (value.length < APP_CONFIG.MIN_PASSWORD_LENGTH) {
59
- return `Heslo musí mít alespoň ${APP_CONFIG.MIN_PASSWORD_LENGTH} znaků`;
60
- }
61
- return null;
62
- },
63
- kioskId: (value) => {
64
- if (value === null || value === undefined)
65
- return null;
66
- if (!Number.isInteger(value) || value <= 0) {
67
- return 'Kiosk ID musí být kladné celé číslo';
68
- }
69
- return null;
70
- },
71
- quantity: (value, fieldName = 'Množství') => {
72
- if (value === null || value === undefined)
73
- return null;
74
- if (!Number.isInteger(value) || value < 0) {
75
- return `${fieldName} musí být nezáporné celé číslo`;
76
- }
77
- return null;
78
- },
79
- price: (value, fieldName = 'Cena') => {
80
- if (value === null || value === undefined)
81
- return null;
82
- if (isNaN(value) || value <= 0) {
83
- return `${fieldName} musí být kladné číslo`;
84
- }
85
- // Check for reasonable price range (0.01 to 999999.99)
86
- if (value < 0.01 || value > 999999.99) {
87
- return `${fieldName} musí být v rozsahu 0,01 - 999 999,99 Kč`;
88
- }
89
- // Check for precision (max 2 decimal places)
90
- const rounded = Math.round(value * 100) / 100;
91
- if (Math.abs(value - rounded) > 0.001) {
92
- return `${fieldName} může mít maximálně 2 desetinná místa`;
93
- }
94
- return null;
95
- }
96
- };
97
- export const validateSchema = (data, schema) => {
98
- const errors = {};
99
- for (const [field, validatorFunctions] of Object.entries(schema)) {
100
- const value = data[field];
101
- for (const validator of validatorFunctions) {
102
- const error = validator(value);
103
- if (error) {
104
- errors[field] = error;
105
- break; // Stop at first error for this field
106
- }
107
- }
108
- }
109
- return {
110
- isValid: Object.keys(errors).length === 0,
111
- errors
112
- };
113
- };
114
- // Common validation schemas
115
- export const validationSchemas = {
116
- login: {
117
- username: [
118
- (value) => validators.required(value),
119
- validators.username
120
- ],
121
- password: [
122
- (value) => validators.required(value),
123
- validators.password
124
- ]
125
- },
126
- customerEmail: {
127
- email: [
128
- (value) => validators.required(value),
129
- validators.email
130
- ]
131
- },
132
- product: {
133
- name: [
134
- (value) => validators.required(value),
135
- (value) => validators.minLength(value, 2, 'Název produktu'),
136
- (value) => validators.maxLength(value, APP_CONFIG.MAX_PRODUCT_NAME_LENGTH, 'Název produktu')
137
- ],
138
- price: [
139
- (value) => validators.required(value),
140
- validators.price
141
- ],
142
- description: [
143
- (value) => validators.maxLength(value, APP_CONFIG.MAX_DESCRIPTION_LENGTH, 'Popis')
144
- ]
145
- },
146
- kioskId: {
147
- kioskId: [
148
- (value) => validators.required(value),
149
- validators.kioskId
150
- ]
151
- },
152
- inventory: {
153
- quantityInStock: [
154
- (value) => validators.required(value),
155
- validators.quantity
156
- ]
157
- },
158
- payment: {
159
- productId: [
160
- (value) => validators.required(value),
161
- (value) => validators.positiveNumber(value, 'ID produktu')
162
- ],
163
- kioskId: [
164
- (value) => validators.required(value),
165
- validators.kioskId
166
- ],
167
- amount: [
168
- (value) => validators.required(value),
169
- validators.price
170
- ]
171
- }
172
- };
173
- //# sourceMappingURL=validation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}