@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 +3 -0
- package/dist/index.js +7 -1
- package/dist/src/VehiclePlateField.d.ts +6 -0
- package/dist/src/VehiclePlateField.js +42 -0
- package/index.ts +3 -0
- package/package.json +1 -1
- package/src/VehiclePlateField.tsx +63 -0
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,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
|
@@ -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;
|