@movalib/movalib-commons 1.59.39 → 1.60.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 +0 -1
- package/dist/src/DialogForgotPassword.js +3 -1
- package/dist/src/MovaLogin.js +19 -2
- package/dist/src/MovaSignUp.js +17 -7
- package/index.ts +1 -1
- package/package.json +6 -2
- package/src/DialogForgotPassword.tsx +5 -1
- package/src/MovaLogin.tsx +28 -3
- package/src/MovaSignUp.tsx +29 -13
- package/src/components/QrCodePLVContainer/QrCodePLVContainer.tsx +1 -1
package/devIndex.tsx
CHANGED
|
@@ -26,7 +26,6 @@ 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
29
|
import MovaVehicleTireField from "./src/MovaVehicleTireField";
|
|
31
30
|
|
|
32
31
|
const App = () => {
|
|
@@ -27,7 +27,9 @@ var DialogForgotPassword = function (_a) {
|
|
|
27
27
|
return ((0, jsx_runtime_1.jsxs)(material_1.Dialog, __assign({ open: openForgotPassword, onClose: handleOnClose, "aria-labelledby": "forgot-password-dialog-title", "aria-describedby": "forgot-password-dialog-description" }, { children: [(0, jsx_runtime_1.jsx)(material_1.DialogTitle, __assign({ id: "forgot-password-title" }, { children: "R\u00E9cup\u00E9ration du mot de passe" })), (0, jsx_runtime_1.jsxs)(material_1.DialogContent, { children: [(0, jsx_runtime_1.jsx)(material_1.DialogContentText, __assign({ id: "forgot-password-dialog-description", sx: { mb: 2 } }, { children: movaAppType === Enums_1.MovaAppType.GARAGE ?
|
|
28
28
|
"Saisissez votre email pour procéder à la réinitialisation de votre mot de passe."
|
|
29
29
|
:
|
|
30
|
-
"Saisissez votre n° de téléphone ou votre email pour procéder à la réinitialisation de votre mot de passe." })), (0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", autoFocus: true, required: true, fullWidth: true, id: movaAppType === Enums_1.MovaAppType.GARAGE ? "email" : "phoneNumberEmail", label: movaAppType === Enums_1.MovaAppType.GARAGE ? "Adresse email" : "N° de téléphone ou adresse email", name: movaAppType === Enums_1.MovaAppType.GARAGE ? "email" : "phoneNumberEmail", autoComplete: "email", onChange: function (e) { return handleInputChange(e); }, value: movaAppType === Enums_1.MovaAppType.GARAGE ? form.email.value : form.phoneNumberEmail.value, error: movaAppType === Enums_1.MovaAppType.GARAGE ? !form.email.isValid : !form.phoneNumberEmail.isValid, helperText: movaAppType === Enums_1.MovaAppType.GARAGE
|
|
30
|
+
"Saisissez votre n° de téléphone ou votre email pour procéder à la réinitialisation de votre mot de passe." })), (0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", autoFocus: true, required: true, fullWidth: true, id: movaAppType === Enums_1.MovaAppType.GARAGE ? "email" : "phoneNumberEmail", label: movaAppType === Enums_1.MovaAppType.GARAGE ? "Adresse email" : "N° de téléphone ou adresse email", name: movaAppType === Enums_1.MovaAppType.GARAGE ? "email" : "phoneNumberEmail", autoComplete: "email", onChange: function (e) { return handleInputChange(e); }, value: movaAppType === Enums_1.MovaAppType.GARAGE ? form.email.value : form.phoneNumberEmail.value, error: movaAppType === Enums_1.MovaAppType.GARAGE ? !form.email.isValid : !form.phoneNumberEmail.isValid, helperText: movaAppType === Enums_1.MovaAppType.GARAGE
|
|
31
|
+
? form.email.error
|
|
32
|
+
: form.phoneNumberEmail.error || "Saisir l’indicatif pour un numéro étranger (ex : +32 …)" })] }), (0, jsx_runtime_1.jsx)(material_1.DialogActions, { children: (0, jsx_runtime_1.jsx)(material_1.Button, __assign({ onClick: function (e) { return handleSubmitForgotPassword(e); }, color: "primary", disabled: movaAppType === Enums_1.MovaAppType.GARAGE ? !(form.email.value && (0, Validator_1.validateEmail)(form.email.value))
|
|
31
33
|
: !(form.phoneNumberEmail.value), sx: { ml: 1 } }, { children: "Envoyer ma demande" })) })] })));
|
|
32
34
|
};
|
|
33
35
|
exports.default = DialogForgotPassword;
|
package/dist/src/MovaLogin.js
CHANGED
|
@@ -70,6 +70,7 @@ var InputAdornment_1 = __importDefault(require("@mui/material/InputAdornment"));
|
|
|
70
70
|
var Visibility_1 = __importDefault(require("@mui/icons-material/Visibility"));
|
|
71
71
|
var VisibilityOff_1 = __importDefault(require("@mui/icons-material/VisibilityOff"));
|
|
72
72
|
var DialogForgotPassword_1 = __importDefault(require("./DialogForgotPassword"));
|
|
73
|
+
var libphonenumber_js_1 = require("libphonenumber-js");
|
|
73
74
|
// Permet de centrer le contenu de l'application
|
|
74
75
|
var styles = {
|
|
75
76
|
display: 'flex',
|
|
@@ -125,8 +126,23 @@ var MovaLogin = function (_a) {
|
|
|
125
126
|
// Validator pour l'email
|
|
126
127
|
newForm.email = (0, Tools_1.validateField)(form.email, Validator_1.validateEmail, 'Adresse email invalide');
|
|
127
128
|
}
|
|
129
|
+
/* if(movaAppType === MovaAppType.INDIVIDUAL){
|
|
130
|
+
newForm.phoneNumberEmail = validateField(form.phoneNumberEmail, value => !!value, 'Champ obligatoire');
|
|
131
|
+
} */
|
|
128
132
|
if (movaAppType === Enums_1.MovaAppType.INDIVIDUAL) {
|
|
129
|
-
newForm.phoneNumberEmail = (0, Tools_1.validateField)(form.phoneNumberEmail, function (value) {
|
|
133
|
+
newForm.phoneNumberEmail = (0, Tools_1.validateField)(form.phoneNumberEmail, function (value) {
|
|
134
|
+
var _a;
|
|
135
|
+
if (!value)
|
|
136
|
+
return false;
|
|
137
|
+
// Si c’est un email valide => OK
|
|
138
|
+
if ((0, Validator_1.validateEmail)(value))
|
|
139
|
+
return true;
|
|
140
|
+
// Remplace 00 par + si le numéro commence par 00 (pour compatibilité avec libphonenumber-js)
|
|
141
|
+
var normalizedValue = value.startsWith('00') ? value.replace(/^00/, '+') : value;
|
|
142
|
+
// Si le numéro commence par + ou 00, tentative de parsing direct. Format local, Pays par défaut : FR
|
|
143
|
+
var phoneNumber = (0, libphonenumber_js_1.parsePhoneNumberFromString)(normalizedValue, normalizedValue.startsWith('+') || normalizedValue.startsWith('00') ? undefined : 'FR');
|
|
144
|
+
return (_a = phoneNumber === null || phoneNumber === void 0 ? void 0 : phoneNumber.isValid()) !== null && _a !== void 0 ? _a : false;
|
|
145
|
+
}, 'Email ou numéro de téléphone invalide');
|
|
130
146
|
}
|
|
131
147
|
newForm.password = (0, Tools_1.validateField)(form.password, function (value) { return !!value; }, 'Champ obligatoire');
|
|
132
148
|
// Validator pour le mot de passe
|
|
@@ -230,7 +246,8 @@ var MovaLogin = function (_a) {
|
|
|
230
246
|
flexDirection: 'column',
|
|
231
247
|
alignItems: 'center',
|
|
232
248
|
} }, { children: [(0, jsx_runtime_1.jsx)("img", { src: getMovaLogo(), style: { width: '80%' } }), headerText && (0, jsx_runtime_1.jsx)(material_1.Typography, __assign({ variant: "button", sx: { pt: 3, width: '100%' } }, { children: headerText })), (0, jsx_runtime_1.jsx)("br", {})] })), (0, jsx_runtime_1.jsxs)(material_1.Box, __assign({ component: "form", onSubmit: handleSubmit, noValidate: true, sx: { mt: 1 } }, { children: [movaAppType === Enums_1.MovaAppType.INDIVIDUAL &&
|
|
233
|
-
(0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", required: true, fullWidth: true, id: "phoneNumberEmail", label: "N\u00B0 de t\u00E9l\u00E9phone ou adresse email", name: "phoneNumberEmail", autoFocus: true, onChange: function (e) { return handleInputChange(e); }, value: form.phoneNumberEmail.value, error: !form.phoneNumberEmail.isValid, helperText: form.phoneNumberEmail.error
|
|
249
|
+
(0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", required: true, fullWidth: true, id: "phoneNumberEmail", label: "N\u00B0 de t\u00E9l\u00E9phone ou adresse email", name: "phoneNumberEmail", autoFocus: true, onChange: function (e) { return handleInputChange(e); }, value: form.phoneNumberEmail.value, error: !form.phoneNumberEmail.isValid, helperText: form.phoneNumberEmail.error ||
|
|
250
|
+
"Saisir l’indicatif pour un numéro étranger (ex : +32 …)", sx: {
|
|
234
251
|
'& .MuiOutlinedInput-notchedOutline': {
|
|
235
252
|
borderColor: darkMode ? 'white' : 'default', // Couleur de la bordure
|
|
236
253
|
}
|
package/dist/src/MovaSignUp.js
CHANGED
|
@@ -70,6 +70,7 @@ var Visibility_1 = __importDefault(require("@mui/icons-material/Visibility"));
|
|
|
70
70
|
var VisibilityOff_1 = __importDefault(require("@mui/icons-material/VisibilityOff"));
|
|
71
71
|
var Info_1 = __importDefault(require("@mui/icons-material/Info"));
|
|
72
72
|
var UserService_1 = __importDefault(require("./services/UserService"));
|
|
73
|
+
var libphonenumber_js_1 = require("libphonenumber-js");
|
|
73
74
|
// ATTENTION : s'assurer de la présence des documents suivants à la racine du composant porteur (dossier 'public')
|
|
74
75
|
var CGUPath = "https://s3.eu-west-3.amazonaws.com/legal.movalib.com/Movalib_CGU.pdf";
|
|
75
76
|
// Permet de centrer le contenu de l'application
|
|
@@ -119,13 +120,20 @@ var MovaSignUp = function (_a) {
|
|
|
119
120
|
var fieldValue = e.target.value;
|
|
120
121
|
// On autorise uniquement les chiffre pour le n° de téléphone
|
|
121
122
|
if (fieldName == "phoneNumber") {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
123
|
+
// Nettoyage : on autorise chiffres + éventuellement un "+" en début
|
|
124
|
+
var cleaned = fieldValue.trim().replace(/[^\d+]/g, '');
|
|
125
|
+
// Normalisation : 0033... → +33...
|
|
126
|
+
if (cleaned.startsWith('00')) {
|
|
127
|
+
cleaned = cleaned.replace(/^00/, '+');
|
|
126
128
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
+
// Parsing avec FR par défaut si local
|
|
130
|
+
var parsed = (0, libphonenumber_js_1.parsePhoneNumberFromString)(cleaned, cleaned.startsWith('+') ? undefined : 'FR');
|
|
131
|
+
// Mise à jour du champ
|
|
132
|
+
if (parsed === null || parsed === void 0 ? void 0 : parsed.isValid()) {
|
|
133
|
+
var e164 = parsed.number; // format +33...
|
|
134
|
+
//fieldValue = e164;
|
|
135
|
+
// Vérification de l'existence du compte
|
|
136
|
+
UserService_1.default.existsByPhoneNumber(e164).then(function (response) {
|
|
129
137
|
if (response && response.data) {
|
|
130
138
|
if (response.data.isActive === false) {
|
|
131
139
|
setUserExist(true);
|
|
@@ -143,6 +151,7 @@ var MovaSignUp = function (_a) {
|
|
|
143
151
|
});
|
|
144
152
|
}
|
|
145
153
|
else {
|
|
154
|
+
// Si numéro invalide ou incomplet, on réinitialise les flags
|
|
146
155
|
setUserExist(false);
|
|
147
156
|
setUserIsAlreadyActive(false);
|
|
148
157
|
}
|
|
@@ -254,7 +263,8 @@ var MovaSignUp = function (_a) {
|
|
|
254
263
|
'& .MuiOutlinedInput-notchedOutline': {
|
|
255
264
|
borderColor: darkMode ? 'white' : 'default', // Couleur de la bordure
|
|
256
265
|
}
|
|
257
|
-
} }), usePhoneNumber && (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.TextField, { type: "tel", margin: "normal", required: true, fullWidth: true, id: "phoneNumber", label: "N\u00B0 de t\u00E9l\u00E9phone", name: "phoneNumber", autoComplete: "tel", disabled: userToEdit && userToEdit.phoneNumber ? true : false, onChange: function (e) { return handleInputChange(e); }, value: userForm.phoneNumber.value, error: Boolean(userForm.phoneNumber.error), helperText: userForm.phoneNumber.error
|
|
266
|
+
} }), usePhoneNumber && (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.TextField, { type: "tel", margin: "normal", required: true, fullWidth: true, id: "phoneNumber", label: "N\u00B0 de t\u00E9l\u00E9phone", name: "phoneNumber", autoComplete: "tel", disabled: userToEdit && userToEdit.phoneNumber ? true : false, onChange: function (e) { return handleInputChange(e); }, value: userForm.phoneNumber.value, error: Boolean(userForm.phoneNumber.error), helperText: userForm.phoneNumber.error ||
|
|
267
|
+
"Saisir l’indicatif pour un numéro étranger (ex : +32 …)", InputProps: {
|
|
258
268
|
endAdornment: ((0, jsx_runtime_1.jsx)(InputAdornment_1.default, __assign({ position: "end" }, { children: !userExist && (0, jsx_runtime_1.jsx)(material_1.IconButton, __assign({ edge: "end", onClick: function () { return setOpenPhoneNumberInfo(!openPhoneNumberInfo); } }, { children: (0, jsx_runtime_1.jsx)(Info_1.default, {}) })) }))),
|
|
259
269
|
} }), openPhoneNumberInfo && !userExist && (0, jsx_runtime_1.jsx)(material_1.Alert, __assign({ severity: "info", variant: 'standard' }, { children: "Entrez le num\u00E9ro de t\u00E9l\u00E9phone que vous avez utilis\u00E9 pour r\u00E9server, afin de suivre facilement vos rendez-vous." })), userExist && (0, jsx_runtime_1.jsx)(material_1.Alert, __assign({ severity: "success", variant: 'standard' }, { children: "Rendez-vous trouv\u00E9(s) pour ce num\u00E9ro ! Vous pourrez le(s) consulter apr\u00E8s avoir cr\u00E9\u00E9 votre compte." })), userIsAlreadyActive && (0, jsx_runtime_1.jsx)(material_1.Alert, __assign({ severity: "error", sx: { marginTop: '5px' }, variant: 'standard' }, { children: "Il semble qu\u2019un compte existe d\u00E9j\u00E0 avec ce num\u00E9ro. Connectez-vous ou utilisez \"Mot de passe oubli\u00E9\" pour y acc\u00E9der facilement." }))] }), (0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", required: true, fullWidth: true, id: "email", label: "Adresse email", name: "email", autoComplete: "email", disabled: userToEdit && userToEdit.email ? true : false, onChange: function (e) { return handleInputChange(e); }, value: userForm.email.value, error: !userForm.email.isValid, helperText: userForm.email.error, sx: {
|
|
260
270
|
'& .MuiOutlinedInput-notchedOutline': {
|
package/index.ts
CHANGED
|
@@ -31,7 +31,7 @@ export { default as ActivateAccount } from './src/components/singup/ActivateAcco
|
|
|
31
31
|
export { QrCodePLVContainer } from './src/components/QrCodePLVContainer/QrCodePLVContainer';
|
|
32
32
|
export { PLVComponent, PrintSize } from './src/components/QrCodePLVContainer/PLVComponent';
|
|
33
33
|
export {LinkedDocumentDialog} from './src/components/LinkedDocumentDialog';
|
|
34
|
-
export { default as MovaTable } from './src/components/MovaTable/MovaTable'
|
|
34
|
+
export { default as MovaTable } from './src/components/MovaTable/MovaTable';
|
|
35
35
|
|
|
36
36
|
// Export des classes
|
|
37
37
|
export { default as Subscription } from './src/models/Subscription';
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@movalib/movalib-commons",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.60.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",
|
|
7
7
|
"private": false,
|
|
8
8
|
"scripts": {
|
|
9
|
-
"start": "webpack-dev-server --entry ./devIndex.tsx --open
|
|
9
|
+
"start": "webpack-dev-server --entry ./devIndex.tsx --open",
|
|
10
10
|
"build": "rm -rf dist && tsc && npm run copy-assets",
|
|
11
11
|
"copy-assets": "cp -r src/assets/ dist/src/assets/ && cp -r src/style/. dist/src/style/",
|
|
12
12
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
@@ -50,12 +50,16 @@
|
|
|
50
50
|
"react-app"
|
|
51
51
|
]
|
|
52
52
|
},
|
|
53
|
+
"peerDependencies": {
|
|
54
|
+
"libphonenumber-js": "1.9.52"
|
|
55
|
+
},
|
|
53
56
|
"devDependencies": {
|
|
54
57
|
"@types/js-cookie": "^3.0.4",
|
|
55
58
|
"@types/lodash": "^4.17.17",
|
|
56
59
|
"@types/pdfjs-dist": "^2.10.377",
|
|
57
60
|
"@types/react-input-mask": "^3.0.5",
|
|
58
61
|
"html-webpack-plugin": "^5.5.3",
|
|
62
|
+
"libphonenumber-js": "1.9.52",
|
|
59
63
|
"ts-loader": "^9.4.4",
|
|
60
64
|
"webpack-cli": "^5.1.4"
|
|
61
65
|
}
|
|
@@ -49,7 +49,11 @@ const DialogForgotPassword: React.FC<{
|
|
|
49
49
|
onChange={e => handleInputChange(e)}
|
|
50
50
|
value={movaAppType === MovaAppType.GARAGE ? form.email.value : form.phoneNumberEmail.value}
|
|
51
51
|
error={movaAppType === MovaAppType.GARAGE ? !form.email.isValid : !form.phoneNumberEmail.isValid}
|
|
52
|
-
helperText={
|
|
52
|
+
helperText={
|
|
53
|
+
movaAppType === MovaAppType.GARAGE
|
|
54
|
+
? form.email.error
|
|
55
|
+
: form.phoneNumberEmail.error || "Saisir l’indicatif pour un numéro étranger (ex : +32 …)"
|
|
56
|
+
}
|
|
53
57
|
/>
|
|
54
58
|
</DialogContent>
|
|
55
59
|
<DialogActions>
|
package/src/MovaLogin.tsx
CHANGED
|
@@ -19,6 +19,7 @@ import InputAdornment from '@mui/material/InputAdornment';
|
|
|
19
19
|
import Visibility from '@mui/icons-material/Visibility';
|
|
20
20
|
import VisibilityOff from '@mui/icons-material/VisibilityOff';
|
|
21
21
|
import DialogForgotPassword from "./DialogForgotPassword";
|
|
22
|
+
import { parsePhoneNumberFromString, isValidPhoneNumber } from 'libphonenumber-js';
|
|
22
23
|
|
|
23
24
|
// Permet de centrer le contenu de l'application
|
|
24
25
|
const styles: CSSProperties = {
|
|
@@ -100,9 +101,30 @@ const MovaLogin: FunctionComponent<MovaLoginProps> = ({ loading, movaAppType, on
|
|
|
100
101
|
newForm.email = validateField(form.email, validateEmail, 'Adresse email invalide');
|
|
101
102
|
}
|
|
102
103
|
|
|
103
|
-
|
|
104
|
+
/* if(movaAppType === MovaAppType.INDIVIDUAL){
|
|
104
105
|
newForm.phoneNumberEmail = validateField(form.phoneNumberEmail, value => !!value, 'Champ obligatoire');
|
|
105
|
-
}
|
|
106
|
+
} */
|
|
107
|
+
|
|
108
|
+
if (movaAppType === MovaAppType.INDIVIDUAL) {
|
|
109
|
+
newForm.phoneNumberEmail = validateField(
|
|
110
|
+
form.phoneNumberEmail,
|
|
111
|
+
(value) => {
|
|
112
|
+
if (!value) return false;
|
|
113
|
+
|
|
114
|
+
// Si c’est un email valide => OK
|
|
115
|
+
if (validateEmail(value)) return true;
|
|
116
|
+
|
|
117
|
+
// Remplace 00 par + si le numéro commence par 00 (pour compatibilité avec libphonenumber-js)
|
|
118
|
+
const normalizedValue = value.startsWith('00') ? value.replace(/^00/, '+') : value;
|
|
119
|
+
|
|
120
|
+
// Si le numéro commence par + ou 00, tentative de parsing direct. Format local, Pays par défaut : FR
|
|
121
|
+
const phoneNumber = parsePhoneNumberFromString(normalizedValue, normalizedValue.startsWith('+') || normalizedValue.startsWith('00') ? undefined : 'FR');
|
|
122
|
+
|
|
123
|
+
return phoneNumber?.isValid() ?? false;
|
|
124
|
+
},
|
|
125
|
+
'Email ou numéro de téléphone invalide'
|
|
126
|
+
);
|
|
127
|
+
}
|
|
106
128
|
|
|
107
129
|
newForm.password = validateField(form.password, value => !!value, 'Champ obligatoire');
|
|
108
130
|
|
|
@@ -245,7 +267,10 @@ const MovaLogin: FunctionComponent<MovaLoginProps> = ({ loading, movaAppType, on
|
|
|
245
267
|
onChange={e => handleInputChange(e)}
|
|
246
268
|
value={form.phoneNumberEmail.value}
|
|
247
269
|
error={!form.phoneNumberEmail.isValid}
|
|
248
|
-
helperText={
|
|
270
|
+
helperText={
|
|
271
|
+
form.phoneNumberEmail.error ||
|
|
272
|
+
"Saisir l’indicatif pour un numéro étranger (ex : +32 …)"
|
|
273
|
+
}
|
|
249
274
|
sx={{
|
|
250
275
|
'& .MuiOutlinedInput-notchedOutline': {
|
|
251
276
|
borderColor: darkMode ? 'white' : 'default', // Couleur de la bordure
|
package/src/MovaSignUp.tsx
CHANGED
|
@@ -24,6 +24,7 @@ import isValid from 'date-fns/isValid';
|
|
|
24
24
|
import Logger from "./helpers/Logger";
|
|
25
25
|
import User from "./models/User";
|
|
26
26
|
import UserService from "./services/UserService";
|
|
27
|
+
import { parsePhoneNumberFromString } from 'libphonenumber-js';
|
|
27
28
|
|
|
28
29
|
// ATTENTION : s'assurer de la présence des documents suivants à la racine du composant porteur (dossier 'public')
|
|
29
30
|
const CGUPath:string = "https://s3.eu-west-3.amazonaws.com/legal.movalib.com/Movalib_CGU.pdf";
|
|
@@ -105,18 +106,29 @@ const MovaSignUp: FunctionComponent<MovaSignUpProps> = ({ loading, movaAppType,
|
|
|
105
106
|
|
|
106
107
|
// On autorise uniquement les chiffre pour le n° de téléphone
|
|
107
108
|
if (fieldName == "phoneNumber"){
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
// Nettoyage : on autorise chiffres + éventuellement un "+" en début
|
|
110
|
+
let cleaned = fieldValue.trim().replace(/[^\d+]/g, '');
|
|
111
|
+
|
|
112
|
+
// Normalisation : 0033... → +33...
|
|
113
|
+
if (cleaned.startsWith('00')) {
|
|
114
|
+
cleaned = cleaned.replace(/^00/, '+');
|
|
112
115
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
116
|
+
|
|
117
|
+
// Parsing avec FR par défaut si local
|
|
118
|
+
const parsed = parsePhoneNumberFromString(cleaned, cleaned.startsWith('+') ? undefined : 'FR');
|
|
119
|
+
|
|
120
|
+
// Mise à jour du champ
|
|
121
|
+
if (parsed?.isValid()) {
|
|
122
|
+
const e164 = parsed.number; // format +33...
|
|
123
|
+
//fieldValue = e164;
|
|
124
|
+
|
|
125
|
+
// Vérification de l'existence du compte
|
|
126
|
+
UserService.existsByPhoneNumber(e164).then((response) => {
|
|
127
|
+
if (response && response.data) {
|
|
128
|
+
if (response.data.isActive === false) {
|
|
129
|
+
setUserExist(true);
|
|
130
|
+
setUserIsAlreadyActive(false);
|
|
131
|
+
} else if (response.data.isActive === true) {
|
|
120
132
|
setUserIsAlreadyActive(true);
|
|
121
133
|
setUserExist(false);
|
|
122
134
|
} else {
|
|
@@ -124,8 +136,9 @@ const MovaSignUp: FunctionComponent<MovaSignUpProps> = ({ loading, movaAppType,
|
|
|
124
136
|
setUserIsAlreadyActive(false);
|
|
125
137
|
}
|
|
126
138
|
}
|
|
127
|
-
})
|
|
139
|
+
});
|
|
128
140
|
} else {
|
|
141
|
+
// Si numéro invalide ou incomplet, on réinitialise les flags
|
|
129
142
|
setUserExist(false);
|
|
130
143
|
setUserIsAlreadyActive(false);
|
|
131
144
|
}
|
|
@@ -313,7 +326,10 @@ const MovaSignUp: FunctionComponent<MovaSignUpProps> = ({ loading, movaAppType,
|
|
|
313
326
|
onChange={e => handleInputChange(e)}
|
|
314
327
|
value={userForm.phoneNumber.value}
|
|
315
328
|
error={Boolean(userForm.phoneNumber.error)}
|
|
316
|
-
helperText={
|
|
329
|
+
helperText={
|
|
330
|
+
userForm.phoneNumber.error ||
|
|
331
|
+
"Saisir l’indicatif pour un numéro étranger (ex : +32 …)"
|
|
332
|
+
}
|
|
317
333
|
InputProps={{
|
|
318
334
|
endAdornment: (
|
|
319
335
|
<InputAdornment position="end">
|
|
@@ -109,7 +109,7 @@ export const QrCodePLVContainer = ({ data }: { data: string }) => {
|
|
|
109
109
|
const qrCodeBlob = await qrCode.getRawData("png");
|
|
110
110
|
|
|
111
111
|
// Convertir l'image QR code en un tableau de bytes
|
|
112
|
-
const qrImageBytes = await qrCodeBlob?.arrayBuffer();
|
|
112
|
+
const qrImageBytes = await (qrCodeBlob as Blob)?.arrayBuffer();
|
|
113
113
|
// Intégrer l'image du QR code dans le PDF
|
|
114
114
|
const qrImage = await pdfDoc.embedPng(qrImageBytes!);
|
|
115
115
|
|