pi-kiosk-shared 2.1.3 → 2.1.5

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 +27 -32
  2. package/dist/api.d.ts +2 -0
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +17 -2
  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 +5 -7
  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 -37
  26. package/dist/config/environments.d.ts.map +0 -1
  27. package/dist/config/environments.js +0 -172
  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
@@ -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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"}