@movalib/movalib-commons 1.0.40 → 1.0.42

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';
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.VehicleTire = 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; } });
@@ -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,73 @@
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
+ var Tools_1 = require("./helpers/Tools");
11
+ // Regex pour une taille de pneumatique Française
12
+ var regex = /^\d{9}[A-Za-z]$/;
13
+ var MovaVehicleTireField = function (_a) {
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
19
+ (0, react_1.useEffect)(function () {
20
+ setTireInfo((0, Tools_1.formatVehicleTire)(vehicleTire));
21
+ }, [vehicleTire]);
22
+ (0, react_1.useEffect)(function () {
23
+ // 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".
24
+ // On ne peut saisir que 10 caractères maximum (ex : 245551791V)
25
+ var value = rawValue.toUpperCase().replace(/[^0-9A-QS-Za-qs-z]/g, '').slice(0, 10);
26
+ console.log(value);
27
+ // On valide la saisie (le champ n'est pas obligatoire)
28
+ var isValid = value.length == 0 || (value.length > 0 && regex.test(value));
29
+ setError(!regex.test(value));
30
+ console.log(isValid);
31
+ // Vérifier si l'utilisateur est en train de supprimer un caractère
32
+ var isDeleting = value.length < lastLength;
33
+ console.log("Deleting : ".concat(isDeleting));
34
+ // Ajout du " / "
35
+ if (value.length >= 3 && !(rawValue.length == 5 && isDeleting)) {
36
+ console.log('Ajout : /');
37
+ value = "".concat(value.substring(0, 3), " / ").concat(value.substring(3));
38
+ }
39
+ // Ajout du " R"
40
+ if (value.length >= 8 && !(rawValue.length == 9 && isDeleting)) {
41
+ console.log('Ajout : R');
42
+ value = "".concat(value.substring(0, 8), " R").concat(value.substring(8));
43
+ }
44
+ // Ajout d'un espace après la saisie du diamètre des pneus
45
+ if (value.length >= 12 && !(rawValue.length <= 12 && isDeleting)) {
46
+ console.log('Ajout : " "');
47
+ value = "".concat(value.substring(0, 12), " ").concat(value.substring(12));
48
+ }
49
+ setTireInfo(value);
50
+ console.log(value.length);
51
+ if (value.length >= 16 && !(rawValue.length == 17 && isDeleting)) {
52
+ var parts = value.split(" ");
53
+ if (parts.length === 5) {
54
+ var width = parts[0], separator = parts[1], height = parts[2], diameter = parts[3], speedIndex = parts[4];
55
+ var vehicleTire_1 = new VehicleTire_1.default(width, height, diameter, speedIndex);
56
+ onChangeVehicleTire(vehicleTire_1, isValid);
57
+ }
58
+ }
59
+ else {
60
+ onChangeVehicleTire(vehicleTire, isValid);
61
+ }
62
+ setLastLength(value.length); // Mettre à jour la longueur précédente
63
+ }, [rawValue]);
64
+ var handleChange = function (e) {
65
+ e.preventDefault();
66
+ setRawValue(e.target.value);
67
+ };
68
+ 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: {
69
+ width: '100%',
70
+ '& input': { textTransform: 'uppercase' } // CSS pour forcer les majuscules dans l'input
71
+ }, error: error && tireInfo.length > 0, helperText: error && tireInfo.length > 0 ? "Saisie invalide" : '' }));
72
+ };
73
+ exports.default = MovaVehicleTireField;
@@ -1,4 +1,7 @@
1
+ import VehicleTire from "../models/VehicleTire";
1
2
  import { MovaFormField } from "./Types";
3
+ export declare function formatVehicleTire(vehicleTire: VehicleTire): string;
4
+ export declare function formatVehicleTireStr(input: string): string;
2
5
  /**
3
6
  * Valide un champ de formulaire en utilisant une fonction de validation personnalisée.
4
7
  *
@@ -1,6 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateField = void 0;
3
+ exports.validateField = exports.formatVehicleTireStr = exports.formatVehicleTire = void 0;
4
+ function formatVehicleTire(vehicleTire) {
5
+ if (vehicleTire) {
6
+ var concatened = "".concat(vehicleTire.width).concat(vehicleTire.height).concat(vehicleTire.diameter).concat(vehicleTire.speedIndex);
7
+ return formatVehicleTireStr(concatened);
8
+ }
9
+ return '';
10
+ }
11
+ exports.formatVehicleTire = formatVehicleTire;
12
+ function formatVehicleTireStr(input) {
13
+ var formatted = input.toUpperCase().replace(/[^0-9A-QS-Za-qs-z]/g, '').slice(0, 10);
14
+ if (formatted.length >= 3) {
15
+ formatted = "".concat(formatted.substring(0, 3), " / ").concat(formatted.substring(3));
16
+ }
17
+ var indexOfR = formatted.indexOf(" R");
18
+ if (formatted.length >= 8 && indexOfR === -1) {
19
+ formatted = "".concat(formatted.substring(0, 8), " R").concat(formatted.substring(8));
20
+ if (formatted.length >= 12 && indexOfR === -1)
21
+ formatted = "".concat(formatted.substring(0, 12), " ").concat(formatted.substring(12));
22
+ }
23
+ else if (indexOfR !== -1 && formatted.length > indexOfR + 2) {
24
+ formatted = "".concat(formatted.substring(0, indexOfR + 2), " ").concat(formatted.substring(indexOfR + 2));
25
+ }
26
+ return formatted;
27
+ }
28
+ exports.formatVehicleTireStr = formatVehicleTireStr;
29
+ ;
4
30
  /**
5
31
  * Valide un champ de formulaire en utilisant une fonction de validation personnalisée.
6
32
  *
@@ -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';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@movalib/movalib-commons",
3
- "version": "1.0.40",
3
+ "version": "1.0.42",
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,105 @@
1
+ import { TextField } from '@mui/material';
2
+ import { useState, type FC, useEffect } from 'react';
3
+ import VehicleTire from './models/VehicleTire';
4
+ import { formatVehicleTire } from './helpers/Tools';
5
+
6
+ interface MovaVehicleTireFieldProps {
7
+ vehicleTire: VehicleTire,
8
+ onChangeVehicleTire: (vehicleTire: VehicleTire, isValid: boolean) => void;
9
+ }
10
+
11
+ // Regex pour une taille de pneumatique Française
12
+ const regex = /^\d{9}[A-Za-z]$/;
13
+
14
+ const MovaVehicleTireField: FC<MovaVehicleTireFieldProps> = ({ vehicleTire, onChangeVehicleTire }) => {
15
+
16
+ const [rawValue, setRawValue] = useState('');
17
+ const [tireInfo, setTireInfo] = useState('');
18
+ const [error, setError] = useState<boolean>(false);
19
+ const [lastLength, setLastLength] = useState<number>(0); // Ajout d'un état pour stocker la longueur précédente
20
+
21
+ useEffect(() => {
22
+ setTireInfo(formatVehicleTire(vehicleTire));
23
+ }, [vehicleTire ]);
24
+
25
+ useEffect(() => {
26
+
27
+ // 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".
28
+ // On ne peut saisir que 10 caractères maximum (ex : 245551791V)
29
+ let value = rawValue.toUpperCase().replace(/[^0-9A-QS-Za-qs-z]/g, '').slice(0, 10);
30
+
31
+ console.log(value);
32
+
33
+ // On valide la saisie (le champ n'est pas obligatoire)
34
+ let isValid = value.length == 0 || (value.length > 0 && regex.test(value));
35
+ setError(!regex.test(value));
36
+
37
+ console.log(isValid);
38
+
39
+ // Vérifier si l'utilisateur est en train de supprimer un caractère
40
+ const isDeleting = value.length < lastLength;
41
+ console.log(`Deleting : ${isDeleting}`);
42
+
43
+ // Ajout du " / "
44
+ if (value.length >= 3 && !(rawValue.length == 5 && isDeleting)) {
45
+ console.log('Ajout : /')
46
+ value = `${value.substring(0, 3)} / ${value.substring(3)}`;
47
+ }
48
+
49
+ // Ajout du " R"
50
+ if (value.length >= 8 && !(rawValue.length == 9 && isDeleting)) {
51
+ console.log('Ajout : R')
52
+ value = `${value.substring(0, 8)} R${value.substring(8)}`;
53
+ }
54
+
55
+
56
+ // Ajout d'un espace après la saisie du diamètre des pneus
57
+ if (value.length >= 12 && !(rawValue.length <= 12 && isDeleting)) {
58
+ console.log('Ajout : " "')
59
+ value = `${value.substring(0, 12)} ${value.substring(12)}`;
60
+ }
61
+
62
+ setTireInfo(value);
63
+ console.log(value.length);
64
+
65
+ if (value.length >= 16 && !(rawValue.length == 17 && isDeleting)) {
66
+
67
+ const parts = value.split(" ");
68
+
69
+ if (parts.length === 5) {
70
+ let [width, separator, height, diameter, speedIndex] = parts;
71
+ const vehicleTire = new VehicleTire(width, height, diameter, speedIndex);
72
+ onChangeVehicleTire(vehicleTire, isValid);
73
+ }
74
+ } else {
75
+ onChangeVehicleTire(vehicleTire, isValid);
76
+ }
77
+
78
+ setLastLength(value.length); // Mettre à jour la longueur précédente
79
+
80
+ }, [rawValue]);
81
+
82
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
83
+ e.preventDefault();
84
+ setRawValue(e.target.value);
85
+ };
86
+
87
+ return (
88
+ <TextField
89
+ label="Taille des pneumatiques"
90
+ variant="outlined"
91
+ value={tireInfo}
92
+ onChange={handleChange}
93
+ fullWidth
94
+ placeholder='XXX XX RXX XXX'
95
+ sx={{
96
+ width: '100%',
97
+ '& input': { textTransform: 'uppercase' } // CSS pour forcer les majuscules dans l'input
98
+ }}
99
+ error={error && tireInfo.length > 0}
100
+ helperText={error && tireInfo.length > 0 ? "Saisie invalide" : ''}
101
+ />
102
+ );
103
+ }
104
+
105
+ export default MovaVehicleTireField;
@@ -1,5 +1,37 @@
1
+ import VehicleTire from "../models/VehicleTire";
1
2
  import { MovaFormField } from "./Types";
2
3
 
4
+ export function formatVehicleTire(vehicleTire: VehicleTire){
5
+ if(vehicleTire){
6
+ let concatened = `${vehicleTire.width}${vehicleTire.height}${vehicleTire.diameter}${vehicleTire.speedIndex}`;
7
+ return formatVehicleTireStr(concatened);
8
+ }
9
+ return '';
10
+ }
11
+
12
+ export function formatVehicleTireStr(input: string){
13
+
14
+ let formatted = input.toUpperCase().replace(/[^0-9A-QS-Za-qs-z]/g, '').slice(0, 10);
15
+
16
+ if (formatted.length >= 3) {
17
+ formatted = `${formatted.substring(0, 3)} / ${formatted.substring(3)}`;
18
+ }
19
+
20
+ const indexOfR = formatted.indexOf(" R");
21
+
22
+ if (formatted.length >= 8 && indexOfR === -1) {
23
+ formatted = `${formatted.substring(0, 8)} R${formatted.substring(8)}`;
24
+
25
+ if (formatted.length >= 12 && indexOfR === -1)
26
+ formatted = `${formatted.substring(0, 12)} ${formatted.substring(12)}`;
27
+
28
+ } else if (indexOfR !== -1 && formatted.length > indexOfR + 2) {
29
+ formatted = `${formatted.substring(0, indexOfR + 2)} ${formatted.substring(indexOfR + 2)}`;
30
+ }
31
+
32
+ return formatted;
33
+ };
34
+
3
35
  /**
4
36
  * Valide un champ de formulaire en utilisant une fonction de validation personnalisée.
5
37
  *
@@ -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
  }