@movalib/movalib-commons 1.0.22 → 1.0.24

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
@@ -1,3 +1,4 @@
1
+ export { default as VehiclePlateField } from './src/VehiclePlateField';
1
2
  export { default as TestButton } from './src/TestButton';
2
3
  export { default as MovaSnackbar } from './src/MovaSnackbar';
3
4
  export { default as MovaLogin } from './src/MovaLogin';
@@ -6,5 +7,7 @@ export { default as MovaCopyright } from './src/MovaCopyright';
6
7
  export { default as User } from './src/models/User';
7
8
  export { default as Role } from './src/models/Role';
8
9
  export { default as Address } from './src/models/Address';
10
+ export { default as Vehicle } from './src/models/Vehicle';
11
+ export { default as Document } from './src/models/Document';
9
12
  export type { MovaFormField, MovaLoginForm, MovaUserSignUpForm } from './src/helpers/Types';
10
13
  export { RoleType, MovaAppType } from './src/helpers/Enums';
package/dist/index.js CHANGED
@@ -4,8 +4,10 @@ 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.MovaAppType = exports.RoleType = exports.Address = exports.Role = exports.User = exports.MovaCopyright = exports.MovaSignUp = exports.MovaLogin = exports.MovaSnackbar = exports.TestButton = void 0;
7
+ exports.MovaAppType = exports.RoleType = exports.Document = exports.Vehicle = exports.Address = exports.Role = exports.User = exports.MovaCopyright = exports.MovaSignUp = exports.MovaLogin = exports.MovaSnackbar = exports.TestButton = exports.VehiclePlateField = void 0;
8
8
  // Export des composants
9
+ var VehiclePlateField_1 = require("./src/VehiclePlateField");
10
+ Object.defineProperty(exports, "VehiclePlateField", { enumerable: true, get: function () { return __importDefault(VehiclePlateField_1).default; } });
9
11
  var TestButton_1 = require("./src/TestButton");
10
12
  Object.defineProperty(exports, "TestButton", { enumerable: true, get: function () { return __importDefault(TestButton_1).default; } });
11
13
  var MovaSnackbar_1 = require("./src/MovaSnackbar");
@@ -23,6 +25,10 @@ var Role_1 = require("./src/models/Role");
23
25
  Object.defineProperty(exports, "Role", { enumerable: true, get: function () { return __importDefault(Role_1).default; } });
24
26
  var Address_1 = require("./src/models/Address");
25
27
  Object.defineProperty(exports, "Address", { enumerable: true, get: function () { return __importDefault(Address_1).default; } });
28
+ var Vehicle_1 = require("./src/models/Vehicle");
29
+ Object.defineProperty(exports, "Vehicle", { enumerable: true, get: function () { return __importDefault(Vehicle_1).default; } });
30
+ var Document_1 = require("./src/models/Document");
31
+ Object.defineProperty(exports, "Document", { enumerable: true, get: function () { return __importDefault(Document_1).default; } });
26
32
  // Export des enums
27
33
  var Enums_1 = require("./src/helpers/Enums");
28
34
  Object.defineProperty(exports, "RoleType", { enumerable: true, get: function () { return Enums_1.RoleType; } });
@@ -0,0 +1,6 @@
1
+ import { FunctionComponent } from 'react';
2
+ interface VehiclePlateFieldProps {
3
+ onValidVehiclePlate: (vehiclePlate: string) => void;
4
+ }
5
+ declare const VehiclePlateField: FunctionComponent<VehiclePlateFieldProps>;
6
+ export default VehiclePlateField;
@@ -0,0 +1,42 @@
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 react_1 = require("react");
8
+ var TextField_1 = __importDefault(require("@mui/material/TextField"));
9
+ var VehiclePlateField = function (_a) {
10
+ var onValidVehiclePlate = _a.onValidVehiclePlate;
11
+ var _b = (0, react_1.useState)(''), value = _b[0], setValue = _b[1];
12
+ var _c = (0, react_1.useState)(false), error = _c[0], setError = _c[1];
13
+ var _d = (0, react_1.useState)(0), lastLength = _d[0], setLastLength = _d[1]; // Ajout d'un état pour stocker la longueur précédente
14
+ (0, react_1.useEffect)(function () {
15
+ if (!error && value !== '') {
16
+ onValidVehiclePlate(value);
17
+ }
18
+ }, [error, value, onValidVehiclePlate]);
19
+ var handleChange = function (e) {
20
+ var inputValue = e.target.value.toUpperCase().replace(/[^A-Z0-9]/g, ''); // Convertir en majuscules et supprimer les caractères non valides
21
+ // Vérifier si l'utilisateur est en train de supprimer un caractère
22
+ var isDeleting = inputValue.length < lastLength;
23
+ // Supprimer les tirets pour avoir une chaîne propre
24
+ var cleanInput = inputValue.replace(/-/g, '');
25
+ // Ajouter des tirets aux positions appropriées
26
+ if (cleanInput.length > 1 && !(cleanInput.length == 2 && isDeleting)) {
27
+ inputValue = "".concat(cleanInput.slice(0, 2), "-").concat(cleanInput.slice(2));
28
+ }
29
+ if (cleanInput.length > 4 && !(cleanInput.length == 5 && isDeleting)) {
30
+ inputValue = "".concat(cleanInput.slice(0, 2), "-").concat(cleanInput.slice(2, 5), "-").concat(cleanInput.slice(5, 7));
31
+ }
32
+ var regex = /^[A-Z]{2}-\d{3}-[A-Z]{2}$/; // Regex pour une plaque d'immatriculation française
33
+ setValue(inputValue);
34
+ setError(!regex.test(inputValue));
35
+ setLastLength(inputValue.length); // Mettre à jour la longueur précédente
36
+ };
37
+ return ((0, jsx_runtime_1.jsx)(TextField_1.default, { label: "Plaque d'immatriculation", variant: "outlined", value: value, onChange: handleChange, error: error, autoFocus: true, sx: {
38
+ width: '100%',
39
+ '& input': { textTransform: 'uppercase' } // CSS pour forcer les majuscules dans l'input
40
+ }, helperText: error ? "Utilisez le format 'XX-123-XX'" : '' }));
41
+ };
42
+ exports.default = VehiclePlateField;
package/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  // src/index.ts
2
2
 
3
3
  // Export des composants
4
+ export { default as VehiclePlateField } from './src/VehiclePlateField';
4
5
  export { default as TestButton } from './src/TestButton';
5
6
  export { default as MovaSnackbar } from './src/MovaSnackbar';
6
7
  export { default as MovaLogin } from './src/MovaLogin';
@@ -11,6 +12,8 @@ export { default as MovaCopyright } from './src/MovaCopyright';
11
12
  export { default as User } from './src/models/User';
12
13
  export { default as Role } from './src/models/Role';
13
14
  export { default as Address } from './src/models/Address';
15
+ export { default as Vehicle } from './src/models/Vehicle';
16
+ export { default as Document } from './src/models/Document';
14
17
 
15
18
  // Export des types
16
19
  export type { MovaFormField, MovaLoginForm, MovaUserSignUpForm } from './src/helpers/Types';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@movalib/movalib-commons",
3
- "version": "1.0.22",
3
+ "version": "1.0.24",
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,63 @@
1
+ import React, { FunctionComponent, useEffect, useState } from 'react';
2
+ import TextField from '@mui/material/TextField';
3
+
4
+ interface VehiclePlateFieldProps {
5
+ onValidVehiclePlate: (vehiclePlate: string) => void;
6
+ }
7
+
8
+ const VehiclePlateField: FunctionComponent<VehiclePlateFieldProps> = ({ onValidVehiclePlate }) => {
9
+
10
+ const [value, setValue] = useState<string>('');
11
+ const [error, setError] = useState<boolean>(false);
12
+ const [lastLength, setLastLength] = useState<number>(0); // Ajout d'un état pour stocker la longueur précédente
13
+
14
+ useEffect(() => {
15
+ if (!error && value !== '') {
16
+ onValidVehiclePlate(value);
17
+ }
18
+ }, [error, value, onValidVehiclePlate]);
19
+
20
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
21
+
22
+ let inputValue = e.target.value.toUpperCase().replace(/[^A-Z0-9]/g, ''); // Convertir en majuscules et supprimer les caractères non valides
23
+
24
+ // Vérifier si l'utilisateur est en train de supprimer un caractère
25
+ const isDeleting = inputValue.length < lastLength;
26
+
27
+ // Supprimer les tirets pour avoir une chaîne propre
28
+ const cleanInput = inputValue.replace(/-/g, '');
29
+
30
+ // Ajouter des tirets aux positions appropriées
31
+ if (cleanInput.length > 1 && !(cleanInput.length == 2 && isDeleting)) {
32
+ inputValue = `${cleanInput.slice(0, 2)}-${cleanInput.slice(2)}`;
33
+ }
34
+
35
+ if (cleanInput.length > 4 && !(cleanInput.length == 5 && isDeleting)) {
36
+ inputValue = `${cleanInput.slice(0, 2)}-${cleanInput.slice(2, 5)}-${cleanInput.slice(5, 7)}`;
37
+ }
38
+
39
+ const regex = /^[A-Z]{2}-\d{3}-[A-Z]{2}$/; // Regex pour une plaque d'immatriculation française
40
+
41
+ setValue(inputValue);
42
+ setError(!regex.test(inputValue));
43
+ setLastLength(inputValue.length); // Mettre à jour la longueur précédente
44
+ };
45
+
46
+ return (
47
+ <TextField
48
+ label="Plaque d'immatriculation"
49
+ variant="outlined"
50
+ value={value}
51
+ onChange={handleChange}
52
+ error={error}
53
+ autoFocus
54
+ sx={{
55
+ width: '100%',
56
+ '& input': { textTransform: 'uppercase' } // CSS pour forcer les majuscules dans l'input
57
+ }}
58
+ helperText={error ? "Utilisez le format 'XX-123-XX'" : ''}
59
+ />
60
+ );
61
+ };
62
+
63
+ export default VehiclePlateField;