@movalib/movalib-commons 1.0.39 → 1.0.41

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/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export { default as MovaSnackbar } from './src/MovaSnackbar';
4
4
  export { default as MovaLogin } from './src/MovaLogin';
5
5
  export { default as MovaSignUp } from './src/MovaSignUp';
6
6
  export { default as MovaCopyright } from './src/MovaCopyright';
7
+ export { default as MovaVehicleTireField } from './src/MovaVehicleTireField';
7
8
  export { default as User } from './src/models/User';
8
9
  export { default as Role } from './src/models/Role';
9
10
  export { default as Address } from './src/models/Address';
@@ -12,6 +13,7 @@ export { default as Document } from './src/models/Document';
12
13
  export { default as Garage } from './src/models/Garage';
13
14
  export { default as Schedule } from './src/models/Schedule';
14
15
  export { default as Event } from './src/models/Event';
16
+ export { default as VehicleTire } from './src/models/VehicleTire';
15
17
  export type { MovaFormField, MovaLoginForm, MovaUserSignUpForm, MovaInterval } from './src/helpers/Types';
16
18
  export { validateField } from './src/helpers/Tools';
17
19
  export { RoleType, MovaAppType, DayOfWeek, EventState, EventType, DocumentType, DigitalPassportIndex, DocumentState } from './src/helpers/Enums';
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.DocumentState = exports.DigitalPassportIndex = exports.DocumentType = exports.EventType = exports.EventState = exports.DayOfWeek = exports.MovaAppType = exports.RoleType = exports.validateField = exports.Event = exports.Schedule = exports.Garage = exports.Document = exports.Vehicle = exports.Address = exports.Role = exports.User = exports.MovaCopyright = exports.MovaSignUp = exports.MovaLogin = exports.MovaSnackbar = exports.TestButton = exports.VehiclePlateField = void 0;
7
+ exports.DocumentState = exports.DigitalPassportIndex = exports.DocumentType = exports.EventType = exports.EventState = exports.DayOfWeek = exports.MovaAppType = exports.RoleType = exports.validateField = exports.VehicleTire = exports.Event = exports.Schedule = exports.Garage = exports.Document = exports.Vehicle = exports.Address = exports.Role = exports.User = exports.MovaVehicleTireField = exports.MovaCopyright = exports.MovaSignUp = exports.MovaLogin = exports.MovaSnackbar = exports.TestButton = exports.VehiclePlateField = void 0;
8
8
  // Export des composants
9
9
  var VehiclePlateField_1 = require("./src/VehiclePlateField");
10
10
  Object.defineProperty(exports, "VehiclePlateField", { enumerable: true, get: function () { return __importDefault(VehiclePlateField_1).default; } });
@@ -18,6 +18,8 @@ var MovaSignUp_1 = require("./src/MovaSignUp");
18
18
  Object.defineProperty(exports, "MovaSignUp", { enumerable: true, get: function () { return __importDefault(MovaSignUp_1).default; } });
19
19
  var MovaCopyright_1 = require("./src/MovaCopyright");
20
20
  Object.defineProperty(exports, "MovaCopyright", { enumerable: true, get: function () { return __importDefault(MovaCopyright_1).default; } });
21
+ var MovaVehicleTireField_1 = require("./src/MovaVehicleTireField");
22
+ Object.defineProperty(exports, "MovaVehicleTireField", { enumerable: true, get: function () { return __importDefault(MovaVehicleTireField_1).default; } });
21
23
  // Export des classes
22
24
  var User_1 = require("./src/models/User");
23
25
  Object.defineProperty(exports, "User", { enumerable: true, get: function () { return __importDefault(User_1).default; } });
@@ -35,6 +37,8 @@ var Schedule_1 = require("./src/models/Schedule");
35
37
  Object.defineProperty(exports, "Schedule", { enumerable: true, get: function () { return __importDefault(Schedule_1).default; } });
36
38
  var Event_1 = require("./src/models/Event");
37
39
  Object.defineProperty(exports, "Event", { enumerable: true, get: function () { return __importDefault(Event_1).default; } });
40
+ var VehicleTire_1 = require("./src/models/VehicleTire");
41
+ Object.defineProperty(exports, "VehicleTire", { enumerable: true, get: function () { return __importDefault(VehicleTire_1).default; } });
38
42
  // Export des méthodes utilitaires
39
43
  var Tools_1 = require("./src/helpers/Tools");
40
44
  Object.defineProperty(exports, "validateField", { enumerable: true, get: function () { return Tools_1.validateField; } });
@@ -0,0 +1,8 @@
1
+ import { type FC } from 'react';
2
+ import VehicleTire from './models/VehicleTire';
3
+ interface MovaVehicleTireFieldProps {
4
+ vehicleTire: VehicleTire;
5
+ onChangeVehicleTire: (vehicleTire: VehicleTire, isValid: boolean) => void;
6
+ }
7
+ declare const MovaVehicleTireField: FC<MovaVehicleTireFieldProps>;
8
+ export default MovaVehicleTireField;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var jsx_runtime_1 = require("react/jsx-runtime");
7
+ var material_1 = require("@mui/material");
8
+ var react_1 = require("react");
9
+ var VehicleTire_1 = __importDefault(require("./models/VehicleTire"));
10
+ // Regex pour une taille de pneumatique Française
11
+ var regex = /^\d{9}[A-Za-z]$/;
12
+ var MovaVehicleTireField = function (_a) {
13
+ var vehicleTire = _a.vehicleTire, onChangeVehicleTire = _a.onChangeVehicleTire;
14
+ var _b = (0, react_1.useState)(''), rawValue = _b[0], setRawValue = _b[1];
15
+ var _c = (0, react_1.useState)(''), tireInfo = _c[0], setTireInfo = _c[1];
16
+ var _d = (0, react_1.useState)(false), error = _d[0], setError = _d[1];
17
+ var _e = (0, react_1.useState)(0), lastLength = _e[0], setLastLength = _e[1]; // Ajout d'un état pour stocker la longueur précédente
18
+ (0, react_1.useEffect)(function () {
19
+ //setTireInfo(formatVehicleTire(vehicleTire));
20
+ }, [vehicleTire]);
21
+ (0, react_1.useEffect)(function () {
22
+ // 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".
23
+ // On ne peut saisir que 10 caractères maximum (ex : 245551791V)
24
+ var value = rawValue.toUpperCase().replace(/[^0-9A-QS-Za-qs-z]/g, '').slice(0, 10);
25
+ console.log(value);
26
+ // On valide la saisie (le champ n'est pas obligatoire)
27
+ var isValid = value.length == 0 || (value.length > 0 && regex.test(value));
28
+ setError(!regex.test(value));
29
+ console.log(isValid);
30
+ // Vérifier si l'utilisateur est en train de supprimer un caractère
31
+ var isDeleting = value.length < lastLength;
32
+ console.log("Deleting : ".concat(isDeleting));
33
+ // Ajout du " / "
34
+ if (value.length >= 3 && !(rawValue.length == 5 && isDeleting)) {
35
+ console.log('Ajout : /');
36
+ value = "".concat(value.substring(0, 3), " / ").concat(value.substring(3));
37
+ }
38
+ // Ajout du " R"
39
+ if (value.length >= 8 && !(rawValue.length == 9 && isDeleting)) {
40
+ console.log('Ajout : R');
41
+ value = "".concat(value.substring(0, 8), " R").concat(value.substring(8));
42
+ }
43
+ // Ajout d'un espace après la saisie du diamètre des pneus
44
+ if (value.length >= 12 && !(rawValue.length <= 12 && isDeleting)) {
45
+ console.log('Ajout : " "');
46
+ value = "".concat(value.substring(0, 12), " ").concat(value.substring(12));
47
+ }
48
+ setTireInfo(value);
49
+ console.log(value.length);
50
+ if (value.length >= 16 && !(rawValue.length == 17 && isDeleting)) {
51
+ var parts = value.split(" ");
52
+ if (parts.length === 5) {
53
+ var width = parts[0], separator = parts[1], height = parts[2], diameter = parts[3], speedIndex = parts[4];
54
+ var vehicleTire_1 = new VehicleTire_1.default(width, height, diameter, speedIndex);
55
+ onChangeVehicleTire(vehicleTire_1, isValid);
56
+ }
57
+ }
58
+ else {
59
+ onChangeVehicleTire(vehicleTire, isValid);
60
+ }
61
+ setLastLength(value.length); // Mettre à jour la longueur précédente
62
+ }, [rawValue]);
63
+ var handleChange = function (e) {
64
+ e.preventDefault();
65
+ setRawValue(e.target.value);
66
+ };
67
+ 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: {
68
+ width: '100%',
69
+ '& input': { textTransform: 'uppercase' } // CSS pour forcer les majuscules dans l'input
70
+ }, error: error && tireInfo.length > 0, helperText: error && tireInfo.length > 0 ? "Saisie invalide" : '' }));
71
+ };
72
+ exports.default = MovaVehicleTireField;
@@ -1,7 +1,7 @@
1
1
  export default class VehicleTire {
2
- tireWidth: string;
3
- tireHeight: string;
4
- tireDiameter: string;
5
- tireSpeedIndex: string;
6
- constructor(tireWidth: string, tireHeight: string, tireDiameter: string, tireSpeedIndex: string);
2
+ width: string;
3
+ height: string;
4
+ diameter: string;
5
+ speedIndex: string;
6
+ constructor(width: string, height: string, diameter: string, speedIndex: string);
7
7
  }
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var VehicleTire = /** @class */ (function () {
4
- function VehicleTire(tireWidth, tireHeight, tireDiameter, tireSpeedIndex) {
5
- this.tireWidth = tireWidth;
6
- this.tireHeight = tireHeight;
7
- this.tireDiameter = tireDiameter;
8
- this.tireSpeedIndex = tireSpeedIndex;
4
+ function VehicleTire(width, height, diameter, speedIndex) {
5
+ this.width = width;
6
+ this.height = height;
7
+ this.diameter = diameter;
8
+ this.speedIndex = speedIndex;
9
9
  }
10
10
  return VehicleTire;
11
11
  }());
package/index.ts CHANGED
@@ -7,6 +7,8 @@ export { default as MovaSnackbar } from './src/MovaSnackbar';
7
7
  export { default as MovaLogin } from './src/MovaLogin';
8
8
  export { default as MovaSignUp } from './src/MovaSignUp';
9
9
  export { default as MovaCopyright } from './src/MovaCopyright';
10
+ export { default as MovaVehicleTireField } from './src/MovaVehicleTireField';
11
+
10
12
 
11
13
  // Export des classes
12
14
  export { default as User } from './src/models/User';
@@ -17,6 +19,7 @@ export { default as Document } from './src/models/Document';
17
19
  export { default as Garage } from './src/models/Garage';
18
20
  export { default as Schedule } from './src/models/Schedule';
19
21
  export { default as Event } from './src/models/Event';
22
+ export { default as VehicleTire } from './src/models/VehicleTire';
20
23
 
21
24
  // Export des types
22
25
  export type { MovaFormField, MovaLoginForm, MovaUserSignUpForm, MovaInterval } from './src/helpers/Types';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@movalib/movalib-commons",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
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",
@@ -0,0 +1,104 @@
1
+ import { TextField } from '@mui/material';
2
+ import { useState, type FC, useEffect } from 'react';
3
+ import VehicleTire from './models/VehicleTire';
4
+
5
+ interface MovaVehicleTireFieldProps {
6
+ vehicleTire: VehicleTire,
7
+ onChangeVehicleTire: (vehicleTire: VehicleTire, isValid: boolean) => void;
8
+ }
9
+
10
+ // Regex pour une taille de pneumatique Française
11
+ const regex = /^\d{9}[A-Za-z]$/;
12
+
13
+ const MovaVehicleTireField: FC<MovaVehicleTireFieldProps> = ({ vehicleTire, onChangeVehicleTire }) => {
14
+
15
+ const [rawValue, setRawValue] = useState('');
16
+ const [tireInfo, setTireInfo] = useState('');
17
+ const [error, setError] = useState<boolean>(false);
18
+ const [lastLength, setLastLength] = useState<number>(0); // Ajout d'un état pour stocker la longueur précédente
19
+
20
+ useEffect(() => {
21
+ //setTireInfo(formatVehicleTire(vehicleTire));
22
+ }, [vehicleTire ]);
23
+
24
+ useEffect(() => {
25
+
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".
27
+ // On ne peut saisir que 10 caractères maximum (ex : 245551791V)
28
+ let value = rawValue.toUpperCase().replace(/[^0-9A-QS-Za-qs-z]/g, '').slice(0, 10);
29
+
30
+ console.log(value);
31
+
32
+ // On valide la saisie (le champ n'est pas obligatoire)
33
+ let isValid = value.length == 0 || (value.length > 0 && regex.test(value));
34
+ setError(!regex.test(value));
35
+
36
+ console.log(isValid);
37
+
38
+ // Vérifier si l'utilisateur est en train de supprimer un caractère
39
+ const isDeleting = value.length < lastLength;
40
+ console.log(`Deleting : ${isDeleting}`);
41
+
42
+ // Ajout du " / "
43
+ if (value.length >= 3 && !(rawValue.length == 5 && isDeleting)) {
44
+ console.log('Ajout : /')
45
+ value = `${value.substring(0, 3)} / ${value.substring(3)}`;
46
+ }
47
+
48
+ // Ajout du " R"
49
+ if (value.length >= 8 && !(rawValue.length == 9 && isDeleting)) {
50
+ console.log('Ajout : R')
51
+ value = `${value.substring(0, 8)} R${value.substring(8)}`;
52
+ }
53
+
54
+
55
+ // Ajout d'un espace après la saisie du diamètre des pneus
56
+ if (value.length >= 12 && !(rawValue.length <= 12 && isDeleting)) {
57
+ console.log('Ajout : " "')
58
+ value = `${value.substring(0, 12)} ${value.substring(12)}`;
59
+ }
60
+
61
+ setTireInfo(value);
62
+ console.log(value.length);
63
+
64
+ if (value.length >= 16 && !(rawValue.length == 17 && isDeleting)) {
65
+
66
+ const parts = value.split(" ");
67
+
68
+ if (parts.length === 5) {
69
+ let [width, separator, height, diameter, speedIndex] = parts;
70
+ const vehicleTire = new VehicleTire(width, height, diameter, speedIndex);
71
+ onChangeVehicleTire(vehicleTire, isValid);
72
+ }
73
+ } else {
74
+ onChangeVehicleTire(vehicleTire, isValid);
75
+ }
76
+
77
+ setLastLength(value.length); // Mettre à jour la longueur précédente
78
+
79
+ }, [rawValue]);
80
+
81
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
82
+ e.preventDefault();
83
+ setRawValue(e.target.value);
84
+ };
85
+
86
+ return (
87
+ <TextField
88
+ label="Taille des pneumatiques"
89
+ variant="outlined"
90
+ value={tireInfo}
91
+ onChange={handleChange}
92
+ fullWidth
93
+ placeholder='XXX XX RXX XXX'
94
+ sx={{
95
+ width: '100%',
96
+ '& input': { textTransform: 'uppercase' } // CSS pour forcer les majuscules dans l'input
97
+ }}
98
+ error={error && tireInfo.length > 0}
99
+ helperText={error && tireInfo.length > 0 ? "Saisie invalide" : ''}
100
+ />
101
+ );
102
+ }
103
+
104
+ export default MovaVehicleTireField;
@@ -1,22 +1,21 @@
1
1
  export default class VehicleTire {
2
2
 
3
- tireWidth: string;
4
- tireHeight: string;
5
- tireDiameter: string;
6
- tireSpeedIndex: string;
3
+ width: string;
4
+ height: string;
5
+ diameter: string;
6
+ speedIndex: string;
7
7
 
8
8
  constructor(
9
- tireWidth: string,
10
- tireHeight: string,
11
- tireDiameter: string,
12
- tireSpeedIndex: string
9
+ width: string,
10
+ height: string,
11
+ diameter: string,
12
+ speedIndex: string
13
13
  ) {
14
14
 
15
- this.tireWidth = tireWidth;
16
- this.tireHeight = tireHeight;
17
- this.tireDiameter = tireDiameter;
18
- this.tireSpeedIndex = tireSpeedIndex;
15
+ this.width = width;
16
+ this.height = height;
17
+ this.diameter = diameter;
18
+ this.speedIndex = speedIndex;
19
19
  }
20
-
21
20
 
22
21
  }