@movalib/movalib-commons 1.44.0 → 1.46.0

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/devIndex.tsx CHANGED
@@ -26,6 +26,8 @@ import GaragePLV from './src/GaragePLV';
26
26
  import AddressFields from './src/AddressFields';
27
27
  import IbanInput from './src/IbanInput';
28
28
  import GenderSelector from './src/GenderSelector';
29
+ import {VehicleTire} from "./index";
30
+ import MovaVehicleTireField from "./src/MovaVehicleTireField";
29
31
 
30
32
  const App = () => {
31
33
 
@@ -123,6 +125,11 @@ const App = () => {
123
125
  alert('plaque valide');
124
126
  } } />
125
127
  </Container>
128
+ <Container style={flexCenter} sx={{ width: '400px', mt: 2}}>
129
+ <MovaVehicleTireField onChangeVehicleTire={(vehicleTire) => {
130
+ console.log(vehicleTire);
131
+ }}/>
132
+ </Container>
126
133
 
127
134
 
128
135
  <MovaLogin
package/dist/devIndex.js CHANGED
@@ -63,6 +63,7 @@ var GaragePLV_1 = __importDefault(require("./src/GaragePLV"));
63
63
  var AddressFields_1 = __importDefault(require("./src/AddressFields"));
64
64
  var IbanInput_1 = __importDefault(require("./src/IbanInput"));
65
65
  var GenderSelector_1 = __importDefault(require("./src/GenderSelector"));
66
+ var MovaVehicleTireField_1 = __importDefault(require("./src/MovaVehicleTireField"));
66
67
  var App = function () {
67
68
  Logger_1.default.enableLogging();
68
69
  // Chargement de données garage de test
@@ -130,6 +131,8 @@ var App = function () {
130
131
  gender: undefined
131
132
  } }), (0, jsx_runtime_1.jsx)(material_1.Container, __assign({ style: Tools_1.flexCenter, sx: { width: '400px', mt: 2 } }, { children: (0, jsx_runtime_1.jsx)(VehiclePlateField_1.default, { onValidVehiclePlate: function (vehiclePlate) {
132
133
  alert('plaque valide');
134
+ } }) })), (0, jsx_runtime_1.jsx)(material_1.Container, __assign({ style: Tools_1.flexCenter, sx: { width: '400px', mt: 2 } }, { children: (0, jsx_runtime_1.jsx)(MovaVehicleTireField_1.default, { onChangeVehicleTire: function (vehicleTire) {
135
+ console.log(vehicleTire);
133
136
  } }) })), (0, jsx_runtime_1.jsx)(MovaLogin_1.default, { darkMode: false, movaAppType: Enums_1.MovaAppType.INDIVIDUAL, version: "0.1.3", onSubmit: function (form) {
134
137
  alert('Form Submitted !');
135
138
  }, onSubmitForgotPassword: function (email) {
@@ -1,7 +1,7 @@
1
1
  import { type FC } from 'react';
2
2
  import VehicleTire from './models/VehicleTire';
3
3
  interface MovaVehicleTireFieldProps {
4
- vehicleTire: VehicleTire;
4
+ vehicleTire?: VehicleTire;
5
5
  onChangeVehicleTire: (vehicleTire: VehicleTire, isValid: boolean) => void;
6
6
  }
7
7
  declare const MovaVehicleTireField: FC<MovaVehicleTireFieldProps>;
@@ -12,59 +12,50 @@ var Tools_1 = require("./helpers/Tools");
12
12
  var regex = /^\d{9}[A-Za-z]$/;
13
13
  var MovaVehicleTireField = function (_a) {
14
14
  var vehicleTire = _a.vehicleTire, onChangeVehicleTire = _a.onChangeVehicleTire;
15
- var _b = (0, react_1.useState)(''), rawValue = _b[0], setRawValue = _b[1];
16
- var _c = (0, react_1.useState)(''), tireInfo = _c[0], setTireInfo = _c[1];
17
- var _d = (0, react_1.useState)(false), error = _d[0], setError = _d[1];
18
- var _e = (0, react_1.useState)(0), lastLength = _e[0], setLastLength = _e[1]; // Ajout d'un état pour stocker la longueur précédente
15
+ var _b = (0, react_1.useState)(''), tireInfo = _b[0], setTireInfo = _b[1];
16
+ var _c = (0, react_1.useState)(false), error = _c[0], setError = _c[1];
17
+ var _d = (0, react_1.useState)(0), lastLength = _d[0], setLastLength = _d[1]; // Ajout d'un état pour stocker la longueur précédente
19
18
  (0, react_1.useEffect)(function () {
20
- setRawValue((0, Tools_1.formatVehicleTire)(vehicleTire));
21
- setTireInfo((0, Tools_1.formatVehicleTire)(vehicleTire));
19
+ if (vehicleTire) {
20
+ setTireInfo((0, Tools_1.formatVehicleTire)(vehicleTire));
21
+ }
22
22
  }, [vehicleTire]);
23
- (0, react_1.useEffect)(function () {
23
+ var handleChange = function (e) {
24
+ e.preventDefault();
25
+ var rawValue = e.target.value;
24
26
  // Cette expression régulière supprimera tous les caractères qui ne sont pas des chiffres ou des lettres alphabétiques, à l'exception de "R" et "r".
25
27
  // On ne peut saisir que 10 caractères maximum (ex : 245551791V)
26
28
  var value = rawValue.toUpperCase().replace(/[^0-9A-QS-Za-qs-z]/g, '').slice(0, 10);
27
- console.log(value);
28
29
  // On valide la saisie (le champ n'est pas obligatoire)
29
30
  var isValid = value.length == 0 || (value.length > 0 && regex.test(value));
30
31
  setError(!regex.test(value));
31
- console.log(isValid);
32
32
  // Vérifier si l'utilisateur est en train de supprimer un caractère
33
33
  var isDeleting = value.length < lastLength;
34
- console.log("Deleting : ".concat(isDeleting));
35
34
  // Ajout du " / "
36
35
  if (value.length >= 3 && !(rawValue.length == 5 && isDeleting)) {
37
- console.log('Ajout : /');
38
36
  value = "".concat(value.substring(0, 3), " / ").concat(value.substring(3));
39
37
  }
40
38
  // Ajout du " R"
41
39
  if (value.length >= 8 && !(rawValue.length == 9 && isDeleting)) {
42
- console.log('Ajout : R');
43
40
  value = "".concat(value.substring(0, 8), " R").concat(value.substring(8));
44
41
  }
45
42
  // Ajout d'un espace après la saisie du diamètre des pneus
46
43
  if (value.length >= 12 && !(rawValue.length <= 12 && isDeleting)) {
47
- console.log('Ajout : " "');
48
44
  value = "".concat(value.substring(0, 12), " ").concat(value.substring(12));
49
45
  }
50
46
  setTireInfo(value);
51
- console.log(value.length);
52
- if (value.length >= 16 && !(rawValue.length == 17 && isDeleting)) {
53
- var parts = value.split(" ");
54
- if (parts.length === 5) {
55
- var width = parts[0], separator = parts[1], height = parts[2], diameter = parts[3], speedIndex = parts[4];
56
- var vehicleTire_1 = new VehicleTire_1.default(width, height, diameter, speedIndex);
57
- onChangeVehicleTire(vehicleTire_1, isValid);
58
- }
47
+ var parts = value.split(" ");
48
+ if (value.length >= 16 && !(rawValue.length == 17 && isDeleting) && parts.length === 5) {
49
+ var width = parts[0], _separator = parts[1], height = parts[2], diameter = parts[3], speedIndex = parts[4];
50
+ var vehicleTire_1 = new VehicleTire_1.default(width, height, diameter, speedIndex);
51
+ onChangeVehicleTire(vehicleTire_1, isValid);
59
52
  }
60
53
  else {
61
- onChangeVehicleTire(vehicleTire, isValid);
54
+ var width = parts[0], _separator = parts[1], height = parts[2], diameter = parts[3], speedIndex = parts[4];
55
+ var vehicleTire_2 = new VehicleTire_1.default(width !== null && width !== void 0 ? width : '', height !== null && height !== void 0 ? height : '', diameter !== null && diameter !== void 0 ? diameter : '', speedIndex !== null && speedIndex !== void 0 ? speedIndex : '');
56
+ onChangeVehicleTire(vehicleTire_2, isValid);
62
57
  }
63
58
  setLastLength(value.length); // Mettre à jour la longueur précédente
64
- }, [rawValue]);
65
- var handleChange = function (e) {
66
- e.preventDefault();
67
- setRawValue(e.target.value);
68
59
  };
69
60
  return ((0, jsx_runtime_1.jsx)(material_1.TextField, { label: "Taille des pneumatiques", variant: "outlined", value: tireInfo, onChange: handleChange, fullWidth: true, placeholder: 'XXX XX RXX XXX', sx: {
70
61
  width: '100%',
@@ -1,14 +1,10 @@
1
1
  import { APIMethod, MovaAppType } from "./Enums";
2
2
  export declare const API_BASE_URL: string;
3
- type APISuccess<T> = {
4
- success: true;
5
- data: T;
3
+ export type APIResponse<T> = {
4
+ success: boolean;
5
+ data?: T;
6
+ error?: string;
6
7
  };
7
- type APIError = {
8
- success: false;
9
- error: string;
10
- };
11
- export type APIResponse<T> = APISuccess<T> | APIError;
12
8
  export type APIRequest = {
13
9
  url: string;
14
10
  method: APIMethod;
@@ -22,4 +18,3 @@ export type APIRequest = {
22
18
  * @returns
23
19
  */
24
20
  export declare const request: (options: APIRequest) => Promise<APIResponse<any>>;
25
- export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@movalib/movalib-commons",
3
- "version": "1.44.0",
3
+ "version": "1.46.0",
4
4
  "description": "Bibliothèque d'objets communs à l'ensemble des projets React de Movalib",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -4,87 +4,77 @@ import VehicleTire from './models/VehicleTire';
4
4
  import { formatVehicleTire } from './helpers/Tools';
5
5
 
6
6
  interface MovaVehicleTireFieldProps {
7
- vehicleTire: VehicleTire,
7
+ vehicleTire?: VehicleTire,
8
8
  onChangeVehicleTire: (vehicleTire: VehicleTire, isValid: boolean) => void;
9
9
  }
10
10
 
11
11
  // Regex pour une taille de pneumatique Française
12
- const regex = /^\d{9}[A-Za-z]$/;
12
+ const regex = /^\d{9}[A-Za-z]$/;
13
13
 
14
14
  const MovaVehicleTireField: FC<MovaVehicleTireFieldProps> = ({ vehicleTire, onChangeVehicleTire }) => {
15
15
 
16
- const [rawValue, setRawValue] = useState('');
17
16
  const [tireInfo, setTireInfo] = useState('');
18
17
  const [error, setError] = useState<boolean>(false);
19
18
  const [lastLength, setLastLength] = useState<number>(0); // Ajout d'un état pour stocker la longueur précédente
20
19
 
21
20
  useEffect(() => {
22
- setRawValue(formatVehicleTire(vehicleTire));
21
+ if(vehicleTire) {
23
22
  setTireInfo(formatVehicleTire(vehicleTire));
23
+ }
24
24
  }, [vehicleTire]);
25
25
 
26
- useEffect(() => {
26
+
27
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
28
+ e.preventDefault();
29
+ const rawValue = e.target.value;
27
30
 
28
31
  // Cette expression régulière supprimera tous les caractères qui ne sont pas des chiffres ou des lettres alphabétiques, à l'exception de "R" et "r".
29
32
  // On ne peut saisir que 10 caractères maximum (ex : 245551791V)
30
33
  let value = rawValue.toUpperCase().replace(/[^0-9A-QS-Za-qs-z]/g, '').slice(0, 10);
31
34
 
32
- console.log(value);
33
35
 
34
36
  // On valide la saisie (le champ n'est pas obligatoire)
35
37
  let isValid = value.length == 0 || (value.length > 0 && regex.test(value));
36
38
  setError(!regex.test(value));
37
39
 
38
- console.log(isValid);
39
-
40
40
  // Vérifier si l'utilisateur est en train de supprimer un caractère
41
41
  const isDeleting = value.length < lastLength;
42
- console.log(`Deleting : ${isDeleting}`);
43
-
42
+
44
43
  // Ajout du " / "
45
44
  if (value.length >= 3 && !(rawValue.length == 5 && isDeleting)) {
46
- console.log('Ajout : /')
47
45
  value = `${value.substring(0, 3)} / ${value.substring(3)}`;
48
46
  }
49
47
 
50
48
  // Ajout du " R"
51
49
  if (value.length >= 8 && !(rawValue.length == 9 && isDeleting)) {
52
- console.log('Ajout : R')
53
50
  value = `${value.substring(0, 8)} R${value.substring(8)}`;
54
51
  }
55
52
 
56
53
 
57
54
  // Ajout d'un espace après la saisie du diamètre des pneus
58
55
  if (value.length >= 12 && !(rawValue.length <= 12 && isDeleting)) {
59
- console.log('Ajout : " "')
60
56
  value = `${value.substring(0, 12)} ${value.substring(12)}`;
61
57
  }
62
58
 
63
59
  setTireInfo(value);
64
- console.log(value.length);
65
-
66
- if (value.length >= 16 && !(rawValue.length == 17 && isDeleting)) {
67
60
 
68
- const parts = value.split(" ");
61
+ const parts = value.split(" ");
69
62
 
70
- if (parts.length === 5) {
71
- let [width, separator, height, diameter, speedIndex] = parts;
63
+ if (value.length >= 16 && !(rawValue.length == 17 && isDeleting) && parts.length === 5) {
64
+ const [width, _separator, height, diameter, speedIndex] = parts;
72
65
  const vehicleTire = new VehicleTire(width, height, diameter, speedIndex);
73
66
  onChangeVehicleTire(vehicleTire, isValid);
74
- }
75
67
  } else {
68
+ const [width, _separator, height, diameter, speedIndex] = parts;
69
+ const vehicleTire = new VehicleTire(width ?? '', height ?? '', diameter ?? '', speedIndex ?? '');
70
+
76
71
  onChangeVehicleTire(vehicleTire, isValid);
77
72
  }
78
73
 
79
74
  setLastLength(value.length); // Mettre à jour la longueur précédente
80
75
 
81
- }, [rawValue]);
76
+ };
82
77
 
83
- const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
84
- e.preventDefault();
85
- setRawValue(e.target.value);
86
- };
87
-
88
78
  return (
89
79
  <TextField
90
80
  label="Taille des pneumatiques"
@@ -93,14 +83,14 @@ const MovaVehicleTireField: FC<MovaVehicleTireFieldProps> = ({ vehicleTire, onCh
93
83
  onChange={handleChange}
94
84
  fullWidth
95
85
  placeholder='XXX XX RXX XXX'
96
- sx={{
97
- width: '100%',
86
+ sx={{
87
+ width: '100%',
98
88
  '& input': { textTransform: 'uppercase' } // CSS pour forcer les majuscules dans l'input
99
89
  }}
100
- error={error && tireInfo.length > 0}
101
- helperText={error && tireInfo.length > 0 ? "Saisie invalide" : ''}
90
+ error={error && tireInfo.length > 0}
91
+ helperText={error && tireInfo.length > 0 ? "Saisie invalide" : ''}
102
92
  />
103
93
  );
104
94
  }
105
95
 
106
- export default MovaVehicleTireField;
96
+ export default MovaVehicleTireField;
@@ -13,8 +13,16 @@ type APIError = {
13
13
  success: false;
14
14
  error: string;
15
15
  };
16
+ // This inference type is not ready yet, we have to be sure
17
+ // that we handle all the backend return cases before changing this
18
+ // export type APIResponse<T> = APISuccess<T> | APIError;
16
19
 
17
- export type APIResponse<T> = APISuccess<T> | APIError;
20
+ export type APIResponse<T> = {
21
+ success: boolean,
22
+ data?: T,
23
+ error?: string
24
+
25
+ }
18
26
 
19
27
  export type APIRequest = {
20
28
  url: string,