@movalib/movalib-commons 1.0.14 → 1.0.16

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.
Files changed (49) hide show
  1. package/PV_README.md +9 -1
  2. package/devIndex.tsx +33 -0
  3. package/dist/devIndex.js +34 -0
  4. package/dist/src/GenderSelector.d.ts +13 -0
  5. package/dist/src/GenderSelector.js +20 -0
  6. package/dist/{MovaCopyright.js → src/MovaCopyright.js} +1 -1
  7. package/dist/{MovaLogin.js → src/MovaLogin.js} +10 -23
  8. package/dist/src/MovaSignUp.d.ts +21 -0
  9. package/dist/src/MovaSignUp.js +169 -0
  10. package/dist/src/helpers/Tools.d.ts +10 -0
  11. package/dist/src/helpers/Tools.js +18 -0
  12. package/dist/src/helpers/Types.d.ts +18 -0
  13. package/dist/{index.d.ts → src/index.d.ts} +2 -4
  14. package/dist/{index.js → src/index.js} +1 -2
  15. package/dist/theme.d.ts +2 -0
  16. package/dist/theme.js +95 -0
  17. package/package.json +13 -8
  18. package/public/favicon.ico +0 -0
  19. package/public/index.html +9 -0
  20. package/src/GenderSelector.tsx +34 -0
  21. package/src/MovaCopyright.tsx +1 -1
  22. package/src/MovaLogin.tsx +17 -30
  23. package/src/MovaSignUp.tsx +277 -0
  24. package/src/helpers/Tools.ts +17 -1
  25. package/src/helpers/Types.ts +9 -0
  26. package/src/index.ts +3 -4
  27. package/theme.ts +95 -0
  28. package/tsconfig.json +1 -1
  29. package/webpack.config.js +35 -0
  30. package/dist/helpers/Tools.js +0 -2
  31. package/dist/helpers/Types.d.ts +0 -9
  32. /package/dist/{helpers/Tools.d.ts → devIndex.d.ts} +0 -0
  33. /package/dist/{MovaCopyright.d.ts → src/MovaCopyright.d.ts} +0 -0
  34. /package/dist/{MovaLogin.d.ts → src/MovaLogin.d.ts} +0 -0
  35. /package/dist/{MovaSnackbar.d.ts → src/MovaSnackbar.d.ts} +0 -0
  36. /package/dist/{MovaSnackbar.js → src/MovaSnackbar.js} +0 -0
  37. /package/dist/{TestButton.d.ts → src/TestButton.d.ts} +0 -0
  38. /package/dist/{TestButton.js → src/TestButton.js} +0 -0
  39. /package/dist/{helpers → src/helpers}/Enums.d.ts +0 -0
  40. /package/dist/{helpers → src/helpers}/Enums.js +0 -0
  41. /package/dist/{helpers → src/helpers}/Types.js +0 -0
  42. /package/dist/{helpers → src/helpers}/Validator.d.ts +0 -0
  43. /package/dist/{helpers → src/helpers}/Validator.js +0 -0
  44. /package/dist/{models → src/models}/Address.d.ts +0 -0
  45. /package/dist/{models → src/models}/Address.js +0 -0
  46. /package/dist/{models → src/models}/Role.d.ts +0 -0
  47. /package/dist/{models → src/models}/Role.js +0 -0
  48. /package/dist/{models → src/models}/User.d.ts +0 -0
  49. /package/dist/{models → src/models}/User.js +0 -0
package/PV_README.md CHANGED
@@ -12,4 +12,12 @@
12
12
  Make shure that "private=true" in your package.json
13
13
 
14
14
  ### `npm login`
15
- ### `npm publish --access=restricted`
15
+ ### `npm publish --access=restricted`
16
+
17
+ Pour lier la librairie aux projets qui l'utilise, executer la commande suivnte
18
+
19
+ ### `npm run link`
20
+
21
+ Les commandes exécutées (ci-dessous) permettent de contourner un problème de double référence vers react et react-dom lorsque les deux appli utilisent des Hook
22
+
23
+ "link": "npm link --only=production && npm link \"/home/dimitri/Projets/5 - MOVALIB/02 - Développement/Front-End/movalib-user-app/node_modules/react\" && npm link \"/home/dimitri/Projets/5 - MOVALIB/02 - Développement/Front-End/movalib-user-app/node_modules/react-dom\"",
package/devIndex.tsx ADDED
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { createRoot } from 'react-dom/client';
3
+ // Import des composants de la bibliothèque
4
+ import MovaLogin from './src/MovaLogin';
5
+ import { MovaLoginForm } from './src/helpers/Types';
6
+ import { MovaAppType } from './src/helpers/Enums';
7
+ import { ThemeProvider } from '@mui/material/styles';
8
+ import theme from './theme'; // Import du thème personnalisé
9
+ import MovaSignUp from './src/MovaSignUp';
10
+
11
+ const App = () => {
12
+ return (
13
+ <div>
14
+ <ThemeProvider theme={theme}>
15
+ <MovaLogin movaAppType={MovaAppType.GARAGE} onSubmit={function (form: MovaLoginForm): void {
16
+ alert('Form Submitted !');
17
+ } } />
18
+
19
+ <MovaSignUp movaAppType={MovaAppType.USER} onSubmit={function (form: MovaLoginForm): void {
20
+ alert('Form Submitted !');
21
+ } } />
22
+ </ThemeProvider>
23
+ </div>
24
+ );
25
+ };
26
+
27
+ const root = createRoot(document.getElementById('root')!);
28
+
29
+ root.render(
30
+ <React.StrictMode>
31
+ <App />
32
+ </React.StrictMode>
33
+ );
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var jsx_runtime_1 = require("react/jsx-runtime");
18
+ var react_1 = __importDefault(require("react"));
19
+ var client_1 = require("react-dom/client");
20
+ // Import des composants de la bibliothèque
21
+ var MovaLogin_1 = __importDefault(require("./src/MovaLogin"));
22
+ var Enums_1 = require("./src/helpers/Enums");
23
+ var styles_1 = require("@mui/material/styles");
24
+ var theme_1 = __importDefault(require("./theme")); // Import du thème personnalisé
25
+ var MovaSignUp_1 = __importDefault(require("./src/MovaSignUp"));
26
+ var App = function () {
27
+ return ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)(styles_1.ThemeProvider, __assign({ theme: theme_1.default }, { children: [(0, jsx_runtime_1.jsx)(MovaLogin_1.default, { movaAppType: Enums_1.MovaAppType.GARAGE, onSubmit: function (form) {
28
+ alert('Form Submitted !');
29
+ } }), (0, jsx_runtime_1.jsx)(MovaSignUp_1.default, { movaAppType: Enums_1.MovaAppType.USER, onSubmit: function (form) {
30
+ alert('Form Submitted !');
31
+ } })] })) }));
32
+ };
33
+ var root = (0, client_1.createRoot)(document.getElementById('root'));
34
+ root.render((0, jsx_runtime_1.jsx)(react_1.default.StrictMode, { children: (0, jsx_runtime_1.jsx)(App, {}) }));
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { SelectChangeEvent, SxProps, Theme } from '@mui/material';
3
+ import { MovaFormField } from './helpers/Types';
4
+ interface GenderSelectorProps {
5
+ handleSelectChange: (event: SelectChangeEvent<string>) => void;
6
+ form: {
7
+ gender: MovaFormField;
8
+ };
9
+ required?: boolean;
10
+ sx?: SxProps<Theme>;
11
+ }
12
+ declare const GenderSelector: React.FC<GenderSelectorProps>;
13
+ export default GenderSelector;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ var jsx_runtime_1 = require("react/jsx-runtime");
15
+ var material_1 = require("@mui/material");
16
+ var GenderSelector = function (_a) {
17
+ var handleSelectChange = _a.handleSelectChange, form = _a.form, required = _a.required, sx = _a.sx;
18
+ return ((0, jsx_runtime_1.jsxs)(material_1.FormControl, __assign({ fullWidth: true, margin: "normal", required: required, sx: __assign({}, sx), error: !form.gender.isValid }, { children: [(0, jsx_runtime_1.jsx)(material_1.InputLabel, __assign({ id: "gender-label" }, { children: "Sexe" })), (0, jsx_runtime_1.jsxs)(material_1.Select, __assign({ labelId: "gender-label", id: "gender", name: "gender", value: form.gender.value, onChange: function (e) { return handleSelectChange(e); } }, { children: [(0, jsx_runtime_1.jsx)(material_1.MenuItem, __assign({ value: "MALE" }, { children: "Homme" })), (0, jsx_runtime_1.jsx)(material_1.MenuItem, __assign({ value: "FEMALE" }, { children: "Femme" })), (0, jsx_runtime_1.jsx)(material_1.MenuItem, __assign({ value: "OTHER" }, { children: "Autre" }))] })), (0, jsx_runtime_1.jsx)(material_1.FormHelperText, { children: form.gender.error })] })));
19
+ };
20
+ exports.default = GenderSelector;
@@ -14,6 +14,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
14
14
  var jsx_runtime_1 = require("react/jsx-runtime");
15
15
  var material_1 = require("@mui/material");
16
16
  function MovaCopyright(props) {
17
- return ((0, jsx_runtime_1.jsxs)(material_1.Typography, __assign({ variant: "body2", color: "text.secondary", align: "center" }, props, { children: ['Copyright © ', (0, jsx_runtime_1.jsx)(material_1.Link, __assign({ color: "inherit", href: "https://www.movalib.com" }, { children: "Movalib.com" })), ' ', new Date().getFullYear(), '.'] })));
17
+ return ((0, jsx_runtime_1.jsxs)(material_1.Typography, __assign({ variant: "body2", color: "text.secondary", align: "center" }, props, { children: ['Copyright © ', (0, jsx_runtime_1.jsx)(material_1.Link, __assign({ color: "inherit", href: "https://www.movalib.com", target: "_blank", rel: "noopener noreferrer" }, { children: "Movalib.com" })), ' ', new Date().getFullYear(), '.'] })));
18
18
  }
19
19
  exports.default = MovaCopyright;
@@ -61,6 +61,7 @@ var material_1 = require("@mui/material");
61
61
  var MovaCopyright_1 = __importDefault(require("./MovaCopyright"));
62
62
  var Enums_1 = require("./helpers/Enums");
63
63
  var Validator_1 = require("./helpers/Validator");
64
+ var Tools_1 = require("./helpers/Tools");
64
65
  // Permet de centrer le contenu de l'application
65
66
  var styles = {
66
67
  display: 'flex',
@@ -76,7 +77,6 @@ var MovaLogin = function (_a) {
76
77
  var loading = _a.loading, movaAppType = _a.movaAppType, onSubmit = _a.onSubmit, alertMessage = _a.alertMessage, alertSeverity = _a.alertSeverity;
77
78
  var _b = (0, react_1.useState)(initialFormState), form = _b[0], setForm = _b[1];
78
79
  var _c = (0, react_1.useState)(""), message = _c[0], setMessage = _c[1];
79
- //const [loading, setLoading] = useState(false);
80
80
  var handleInputChange = function (e) {
81
81
  var _a;
82
82
  var fieldName = e.target.name;
@@ -100,27 +100,14 @@ var MovaLogin = function (_a) {
100
100
  });
101
101
  }); };
102
102
  var validateForm = function () {
103
- var newForm = form;
104
- // Validator email
105
- if (!(0, Validator_1.validateEmail)(form.email.value)) {
106
- var errorMsg = 'Adresse email invalide';
107
- var newField = { value: form.email.value, error: errorMsg, isValid: false };
108
- newForm = __assign(__assign({}, newForm), { email: newField });
109
- }
110
- else {
111
- var newField = { value: form.email.value, error: '', isValid: true };
112
- newForm = __assign(__assign({}, newForm), { email: newField });
113
- }
114
- // Validator password
115
- if (form.password.value.length < 8) {
116
- var errorMsg = 'Votre mot de passe doit faire au moins 8 caractères de long.';
117
- var newField = { value: form.password.value, error: errorMsg, isValid: false };
118
- newForm = __assign(__assign({}, newForm), { password: newField });
119
- }
120
- else {
121
- var newField = { value: form.password.value, error: '', isValid: true };
122
- newForm = __assign(__assign({}, newForm), { password: newField });
123
- }
103
+ var newForm = __assign({}, form);
104
+ // Validator pour les champs obligatoires
105
+ newForm.email = (0, Tools_1.validateField)(form.email, function (value) { return !!value; }, 'Champ obligatoire');
106
+ newForm.password = (0, Tools_1.validateField)(form.password, function (value) { return !!value; }, 'Champ obligatoire');
107
+ // Validator pour l'email
108
+ newForm.email = (0, Tools_1.validateField)(form.email, Validator_1.validateEmail, 'Adresse email invalide');
109
+ // Validator pour le mot de passe
110
+ newForm.password = (0, Tools_1.validateField)(form.password, function (value) { return value.length >= 8; }, 'Votre mot de passe doit faire au moins 8 caractères de long');
124
111
  setForm(newForm);
125
112
  return newForm.email.isValid && newForm.password.isValid;
126
113
  };
@@ -141,7 +128,7 @@ var MovaLogin = function (_a) {
141
128
  display: 'flex',
142
129
  flexDirection: 'column',
143
130
  alignItems: 'center',
144
- } }, { children: [(0, jsx_runtime_1.jsx)("img", { src: getMovaLogo(), style: { width: '80%' } }), (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: [(0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", required: true, fullWidth: true, id: "email", label: "Adresse email", name: "email", autoComplete: "email", autoFocus: true, onChange: function (e) { return handleInputChange(e); }, value: form.email.value, error: !form.email.isValid, helperText: form.email.error }), (0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", required: true, fullWidth: true, name: "password", label: "Mot de passe", type: "password", id: "password", autoComplete: "current-password", onChange: function (e) { return handleInputChange(e); }, value: form.password.value, error: !form.password.isValid, helperText: form.password.error }), (0, jsx_runtime_1.jsx)(material_1.FormControlLabel, { control: (0, jsx_runtime_1.jsx)(material_1.Checkbox, { value: "remember", color: "primary" }), label: "Se souvenir de moi" }), (0, jsx_runtime_1.jsx)(lab_1.LoadingButton, __assign({ loading: loading, type: "submit", fullWidth: true, variant: "contained", sx: { mt: 3, mb: 2 } }, { children: (0, jsx_runtime_1.jsx)("span", { children: "Se connecter" }) })), alertMessage && alertSeverity && (0, jsx_runtime_1.jsx)(material_1.Alert, __assign({ severity: alertSeverity, sx: { mb: 2 } }, { children: alertMessage })), (0, jsx_runtime_1.jsxs)(material_1.Grid, __assign({ container: true }, { children: [(0, jsx_runtime_1.jsx)(material_1.Grid, __assign({ item: true, xs: true }, { children: (0, jsx_runtime_1.jsx)(material_1.Link, __assign({ href: "#", variant: "body2", color: "text.secondary" }, { children: "Mot de passe oubli\u00E9 ?" })) })), (0, jsx_runtime_1.jsx)(material_1.Grid, __assign({ item: true }, { children: (0, jsx_runtime_1.jsx)(material_1.Link, __assign({ href: "#", variant: "body2", color: "text.secondary" }, { children: "Créer un compte" })) }))] }))] })), (0, jsx_runtime_1.jsx)(MovaCopyright_1.default, { sx: { mt: 8, mb: 4 } })] })), (0, jsx_runtime_1.jsx)("img", { src: leaf_pink_large_png_1.default, style: { position: 'fixed',
131
+ } }, { children: [(0, jsx_runtime_1.jsx)("img", { src: getMovaLogo(), style: { width: '80%' } }), (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: [(0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", required: true, fullWidth: true, id: "email", label: "Adresse email", name: "email", autoComplete: "email", autoFocus: true, onChange: function (e) { return handleInputChange(e); }, value: form.email.value, error: !form.email.isValid, helperText: form.email.error }), (0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", required: true, fullWidth: true, name: "password", label: "Mot de passe", type: "password", id: "password", autoComplete: "current-password", onChange: function (e) { return handleInputChange(e); }, value: form.password.value, error: !form.password.isValid, helperText: form.password.error }), (0, jsx_runtime_1.jsx)(material_1.FormControlLabel, { control: (0, jsx_runtime_1.jsx)(material_1.Checkbox, { value: "remember", color: "primary" }), label: "Se souvenir de moi" }), (0, jsx_runtime_1.jsx)(lab_1.LoadingButton, __assign({ loading: loading, type: "submit", fullWidth: true, variant: "contained", sx: { mt: 3, mb: 2 } }, { children: (0, jsx_runtime_1.jsx)("span", { children: "Se connecter" }) })), alertMessage && alertSeverity && (0, jsx_runtime_1.jsx)(material_1.Alert, __assign({ severity: alertSeverity, sx: { mb: 2 } }, { children: alertMessage })), (0, jsx_runtime_1.jsxs)(material_1.Grid, __assign({ container: true }, { children: [(0, jsx_runtime_1.jsx)(material_1.Grid, __assign({ item: true, xs: true }, { children: (0, jsx_runtime_1.jsx)(material_1.Link, __assign({ href: "/forgot-password", variant: "body2", color: "text.secondary" }, { children: "Mot de passe oubli\u00E9 ?" })) })), movaAppType === Enums_1.MovaAppType.USER && (0, jsx_runtime_1.jsx)(material_1.Grid, __assign({ item: true }, { children: (0, jsx_runtime_1.jsx)(material_1.Link, __assign({ href: "/signup", variant: "body2", color: "text.secondary" }, { children: "Créer un compte" })) }))] }))] })), (0, jsx_runtime_1.jsx)(MovaCopyright_1.default, { sx: { mt: 8, mb: 4 } })] })), (0, jsx_runtime_1.jsx)("img", { src: leaf_pink_large_png_1.default, style: { position: 'fixed',
145
132
  float: 'right',
146
133
  width: '250px',
147
134
  height: '400px',
@@ -0,0 +1,21 @@
1
+ import { FunctionComponent } from "react";
2
+ import { AlertColor } from "@mui/material";
3
+ import { MovaLoginForm } from "./helpers/Types";
4
+ import { MovaAppType } from "./helpers/Enums";
5
+ /**
6
+ * Propriétés du composant
7
+ * movaAppType : type d'application Movalib au sein de laquelle le composant est injectée
8
+ * onSubmit : callbakc invoquée en cas de formulaire valide
9
+ * alertMessage : éventuel message à afficher
10
+ * alertSeverity : niveau d'alerte pour le message à afficher
11
+ * loading : permet de mettre éventuellement le bouton de soumission en état de chargement
12
+ */
13
+ interface MovaSignUpProps {
14
+ movaAppType: MovaAppType;
15
+ onSubmit: (form: MovaLoginForm) => void;
16
+ alertMessage?: string;
17
+ alertSeverity?: AlertColor;
18
+ loading?: boolean;
19
+ }
20
+ declare const MovaLogin: FunctionComponent<MovaSignUpProps>;
21
+ export default MovaLogin;
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ var jsx_runtime_1 = require("react/jsx-runtime");
54
+ var react_1 = require("react");
55
+ var lab_1 = require("@mui/lab");
56
+ var logo_large_png_1 = __importDefault(require("./assets/images/logo/logo_large.png"));
57
+ var logo_pro_large_png_1 = __importDefault(require("./assets/images/logo/logo_pro_large.png"));
58
+ var leaf_green_large_png_1 = __importDefault(require("./assets/images/leaf_green_large.png"));
59
+ var leaf_pink_large_png_1 = __importDefault(require("./assets/images/leaf_pink_large.png"));
60
+ var material_1 = require("@mui/material");
61
+ var MovaCopyright_1 = __importDefault(require("./MovaCopyright"));
62
+ var Enums_1 = require("./helpers/Enums");
63
+ var Validator_1 = require("./helpers/Validator");
64
+ var GenderSelector_1 = __importDefault(require("./GenderSelector"));
65
+ var Tools_1 = require("./helpers/Tools");
66
+ // Permet de centrer le contenu de l'application
67
+ var styles = {
68
+ display: 'flex',
69
+ justifyContent: 'center',
70
+ alignItems: 'center',
71
+ height: '100vh', // Ajustez la hauteur en fonction de vos besoins
72
+ };
73
+ var initialUserFormState = {
74
+ firstname: { value: '', isValid: true },
75
+ lastname: { value: '', isValid: true },
76
+ email: { value: '', isValid: true },
77
+ password: { value: '', isValid: true },
78
+ gender: { value: '', isValid: true },
79
+ birthDate: { value: '', isValid: true },
80
+ acceptsTerms: { value: false, isValid: true },
81
+ };
82
+ var MovaLogin = function (_a) {
83
+ var loading = _a.loading, movaAppType = _a.movaAppType, onSubmit = _a.onSubmit, alertMessage = _a.alertMessage, alertSeverity = _a.alertSeverity;
84
+ var _b = (0, react_1.useState)(initialUserFormState), userForm = _b[0], setUserForm = _b[1];
85
+ var _c = (0, react_1.useState)(""), message = _c[0], setMessage = _c[1];
86
+ var handleInputChange = function (e) {
87
+ var _a;
88
+ var fieldName = e.target.name;
89
+ var fieldValue = e.target.value;
90
+ var newField = (_a = {}, _a[fieldName] = { value: fieldValue, isValid: true }, _a);
91
+ setUserForm(__assign(__assign({}, userForm), newField));
92
+ };
93
+ var handleCheckboxChange = function (e, checked) {
94
+ var _a;
95
+ var fieldName = e.target.name;
96
+ var fieldValue = checked;
97
+ var newField = (_a = {}, _a[fieldName] = { value: fieldValue, isValid: true }, _a);
98
+ setUserForm(__assign(__assign({}, userForm), newField));
99
+ };
100
+ var handleSelectChange = function (e) {
101
+ var _a;
102
+ var fieldName = e.target.name;
103
+ var fieldValue = e.target.value;
104
+ var newField = (_a = {}, _a[fieldName] = { value: fieldValue, isValid: true }, _a);
105
+ setUserForm(__assign(__assign({}, userForm), newField));
106
+ };
107
+ var handleSubmit = function (e) { return __awaiter(void 0, void 0, void 0, function () {
108
+ return __generator(this, function (_a) {
109
+ e.preventDefault();
110
+ try {
111
+ if (validateForm() && onSubmit) {
112
+ // Si le formulaire est valide, on appel la function callback transmise en props
113
+ onSubmit(userForm);
114
+ }
115
+ }
116
+ catch (error) {
117
+ console.error('Error occurred during submission:', error);
118
+ }
119
+ return [2 /*return*/];
120
+ });
121
+ }); };
122
+ var validateForm = function () {
123
+ var newForm = __assign({}, userForm);
124
+ // Validator pour les champs obligatoires
125
+ newForm.firstname = (0, Tools_1.validateField)(userForm.firstname, function (value) { return !!value; }, 'Champ obligatoire');
126
+ newForm.lastname = (0, Tools_1.validateField)(userForm.lastname, function (value) { return !!value; }, 'Champ obligatoire');
127
+ newForm.email = (0, Tools_1.validateField)(userForm.email, function (value) { return !!value; }, 'Champ obligatoire');
128
+ newForm.password = (0, Tools_1.validateField)(userForm.password, function (value) { return !!value; }, 'Champ obligatoire');
129
+ newForm.gender = (0, Tools_1.validateField)(userForm.gender, function (value) { return !!value; }, 'Champ obligatoire');
130
+ newForm.birthDate = (0, Tools_1.validateField)(userForm.birthDate, function (value) { return !!value; }, 'Champ obligatoire');
131
+ // Validator pour l'email
132
+ newForm.email = (0, Tools_1.validateField)(userForm.email, Validator_1.validateEmail, 'Adresse email invalide');
133
+ // Validator pour le mot de passe
134
+ newForm.password = (0, Tools_1.validateField)(userForm.password, function (value) { return value.length >= 8; }, 'Votre mot de passe doit faire au moins 8 caractères de long');
135
+ // Validator pour les CGU
136
+ newForm.acceptsTerms = (0, Tools_1.validateField)(userForm.acceptsTerms, function (value) { return Boolean(value); }, 'Vous devez accepter les termes de nos CGU');
137
+ setUserForm(newForm);
138
+ return newForm.firstname.isValid && newForm.lastname.isValid && newForm.email.isValid
139
+ && newForm.password.isValid && newForm.gender.isValid && newForm.birthDate.isValid;
140
+ };
141
+ var getMovaLogo = function () {
142
+ return movaAppType === Enums_1.MovaAppType.GARAGE ? logo_pro_large_png_1.default :
143
+ movaAppType === Enums_1.MovaAppType.USER ? logo_large_png_1.default :
144
+ movaAppType === Enums_1.MovaAppType.ADMIN ? logo_large_png_1.default : logo_large_png_1.default;
145
+ };
146
+ return ((0, jsx_runtime_1.jsxs)("div", __assign({ style: styles }, { children: [(0, jsx_runtime_1.jsx)("img", { src: leaf_green_large_png_1.default, style: { position: 'fixed',
147
+ float: 'left',
148
+ width: '250px',
149
+ height: '400px',
150
+ top: '-20%',
151
+ left: '3%',
152
+ opacity: '0.3',
153
+ zIndex: -8 }, alt: 'Feuille Verte Movalib' }), (0, jsx_runtime_1.jsxs)(material_1.Container, __assign({ component: "main", maxWidth: "sm" }, { children: [(0, jsx_runtime_1.jsx)(material_1.CssBaseline, {}), (0, jsx_runtime_1.jsxs)(material_1.Box, __assign({ sx: {
154
+ marginTop: 6,
155
+ display: 'flex',
156
+ flexDirection: 'column',
157
+ alignItems: 'center',
158
+ } }, { children: [(0, jsx_runtime_1.jsx)("img", { src: getMovaLogo(), style: { width: '50%' } }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)(material_1.Typography, __assign({ variant: "button", sx: { pt: 2 } }, { children: "Nouveau compte utilisateur" }))] })), (0, jsx_runtime_1.jsxs)(material_1.Box, __assign({ component: "form", onSubmit: handleSubmit, noValidate: true, sx: { mt: 1 } }, { children: [(0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", required: true, autoFocus: true, fullWidth: true, id: "firstname", label: "Pr\u00E9nom", name: "firstname", autoComplete: "given-name", onChange: function (e) { return handleInputChange(e); }, value: userForm.firstname.value, error: Boolean(userForm.firstname.error), helperText: userForm.firstname.error }), (0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", required: true, fullWidth: true, id: "lastname", label: "Nom", name: "lastname", autoComplete: "family-name", onChange: function (e) { return handleInputChange(e); }, value: userForm.lastname.value, error: Boolean(userForm.lastname.error), helperText: userForm.lastname.error }), (0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", required: true, fullWidth: true, id: "email", label: "Adresse email", name: "email", autoComplete: "email", onChange: function (e) { return handleInputChange(e); }, value: userForm.email.value, error: !userForm.email.isValid, helperText: userForm.email.error }), (0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", required: true, fullWidth: true, name: "password", label: "Mot de passe", type: "password", id: "password", autoComplete: "current-password", onChange: function (e) { return handleInputChange(e); }, value: userForm.password.value, error: !userForm.password.isValid, helperText: Boolean(userForm.password.error) ? userForm.password.error : "8 caractères minimum" }), (0, jsx_runtime_1.jsx)(GenderSelector_1.default, { handleSelectChange: handleSelectChange, form: userForm, required: true, sx: { width: '40%', mr: 2 } }), (0, jsx_runtime_1.jsx)(material_1.TextField, { margin: "normal", required: true, name: "birthDate", label: "Date de naissance", type: "date", InputLabelProps: {
159
+ shrink: true,
160
+ }, autoComplete: "bday", value: userForm.birthDate.value, error: !userForm.birthDate.isValid, helperText: userForm.birthDate.error, onChange: function (e) { return handleInputChange(e); }, sx: { width: '50%', float: 'right' } }), (0, jsx_runtime_1.jsxs)(material_1.FormControl, __assign({ error: !userForm.acceptsTerms.isValid }, { children: [(0, jsx_runtime_1.jsx)(material_1.FormControlLabel, { control: (0, jsx_runtime_1.jsx)(material_1.Checkbox, { name: "acceptsTerms", color: "primary", checked: userForm.acceptsTerms.value, onChange: function (e, checked) { return handleCheckboxChange(e, checked); } }), label: (0, jsx_runtime_1.jsxs)("span", { children: ["J'accepte les", ' ', (0, jsx_runtime_1.jsx)(material_1.Link, __assign({ href: "/terms-and-conditions", target: "_blank" }, { children: "Conditions G\u00E9n\u00E9rales d'Utilisation" }))] }) }), (0, jsx_runtime_1.jsx)(material_1.FormHelperText, { children: userForm.acceptsTerms.error })] })), alertMessage && alertSeverity && (0, jsx_runtime_1.jsx)(material_1.Alert, __assign({ severity: alertSeverity, sx: { mb: 2 } }, { children: alertMessage })), (0, jsx_runtime_1.jsx)(lab_1.LoadingButton, __assign({ loading: loading, type: "submit", fullWidth: true, variant: "contained", sx: { mt: 3, mb: 2 } }, { children: (0, jsx_runtime_1.jsx)("span", { children: "Cr\u00E9er mon compte" }) }))] })), (0, jsx_runtime_1.jsx)(MovaCopyright_1.default, { sx: { mt: 8, mb: 4 } })] })), (0, jsx_runtime_1.jsx)("img", { src: leaf_pink_large_png_1.default, style: { position: 'fixed',
161
+ float: 'right',
162
+ width: '250px',
163
+ height: '400px',
164
+ bottom: '-20%',
165
+ right: '3%',
166
+ opacity: '0.3',
167
+ zIndex: '-10' }, alt: 'Feuille Rose Movalib' })] })));
168
+ };
169
+ exports.default = MovaLogin;
@@ -0,0 +1,10 @@
1
+ import { MovaFormField } from "./Types";
2
+ /**
3
+ * Valide un champ de formulaire en utilisant une fonction de validation personnalisée.
4
+ *
5
+ * @param {MovaFormField} field - Le champ de formulaire à valider.
6
+ * @param {(value: string) => boolean} validator - La fonction de validation à utiliser pour le champ.
7
+ * @param {string} errorMsg - Le message d'erreur à associer au champ si la validation échoue.
8
+ * @returns {MovaFormField} - Le champ de formulaire avec les propriétés `error` et `isValid` mises à jour.
9
+ */
10
+ export declare const validateField: (field: MovaFormField, validator: (value: string) => boolean, errorMsg: string) => MovaFormField;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateField = void 0;
4
+ /**
5
+ * Valide un champ de formulaire en utilisant une fonction de validation personnalisée.
6
+ *
7
+ * @param {MovaFormField} field - Le champ de formulaire à valider.
8
+ * @param {(value: string) => boolean} validator - La fonction de validation à utiliser pour le champ.
9
+ * @param {string} errorMsg - Le message d'erreur à associer au champ si la validation échoue.
10
+ * @returns {MovaFormField} - Le champ de formulaire avec les propriétés `error` et `isValid` mises à jour.
11
+ */
12
+ var validateField = function (field, validator, errorMsg) {
13
+ if (!validator(field.value)) {
14
+ return { value: field.value, error: errorMsg, isValid: false };
15
+ }
16
+ return { value: field.value, error: '', isValid: true };
17
+ };
18
+ exports.validateField = validateField;
@@ -0,0 +1,18 @@
1
+ export type MovaUserSignUpForm = {
2
+ firstname: MovaFormField;
3
+ lastname: MovaFormField;
4
+ email: MovaFormField;
5
+ password: MovaFormField;
6
+ gender: MovaFormField;
7
+ birthDate: MovaFormField;
8
+ acceptsTerms: MovaFormField;
9
+ };
10
+ export type MovaLoginForm = {
11
+ email: MovaFormField;
12
+ password: MovaFormField;
13
+ };
14
+ export type MovaFormField = {
15
+ value?: any;
16
+ error?: string;
17
+ isValid?: boolean;
18
+ };
@@ -5,7 +5,5 @@ export { default as MovaCopyright } from './MovaCopyright';
5
5
  export { default as User } from './models/User';
6
6
  export { default as Role } from './models/Role';
7
7
  export { default as Address } from './models/Address';
8
- export type { MovaFormField } from './helpers/Types';
9
- export type { MovaLoginForm } from './helpers/Types';
10
- export { RoleType } from './helpers/Enums';
11
- export { MovaAppType } from './helpers/Enums';
8
+ export type { MovaFormField, MovaLoginForm, MovaUserSignUpForm } from './helpers/Types';
9
+ export { RoleType, MovaAppType } from './helpers/Enums';
@@ -24,5 +24,4 @@ Object.defineProperty(exports, "Address", { enumerable: true, get: function () {
24
24
  // Export des enums
25
25
  var Enums_1 = require("./helpers/Enums");
26
26
  Object.defineProperty(exports, "RoleType", { enumerable: true, get: function () { return Enums_1.RoleType; } });
27
- var Enums_2 = require("./helpers/Enums");
28
- Object.defineProperty(exports, "MovaAppType", { enumerable: true, get: function () { return Enums_2.MovaAppType; } });
27
+ Object.defineProperty(exports, "MovaAppType", { enumerable: true, get: function () { return Enums_1.MovaAppType; } });
@@ -0,0 +1,2 @@
1
+ declare const theme: import("@mui/material/styles").Theme;
2
+ export default theme;
package/dist/theme.js ADDED
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var styles_1 = require("@mui/material/styles");
4
+ var theme = (0, styles_1.createTheme)({
5
+ palette: {
6
+ background: {
7
+ paper: '#F0F0F0',
8
+ },
9
+ primary: {
10
+ main: '#BCD46C',
11
+ light: '#D2EDAB'
12
+ },
13
+ secondary: {
14
+ main: '#FFD25C',
15
+ light: '#FEE08E' //'#F1C0D9'
16
+ },
17
+ success: {
18
+ main: '#A8DB5EFF'
19
+ },
20
+ warning: {
21
+ main: '#FFD25C'
22
+ }
23
+ /* text: {
24
+ //light: '#E4E4E4',
25
+ } */
26
+ },
27
+ typography: {
28
+ fontFamily: 'Outfit, sans-serif', // Police de caractère par défaut
29
+ },
30
+ components: {
31
+ MuiAutocomplete: {
32
+ styleOverrides: {
33
+ noOptions: {
34
+ //display: 'none'
35
+ }
36
+ }
37
+ },
38
+ MuiSelect: {
39
+ styleOverrides: {
40
+ select: {
41
+ display: 'flex',
42
+ alignItems: 'center'
43
+ }
44
+ }
45
+ },
46
+ MuiTooltip: {
47
+ styleOverrides: {
48
+ // Name of the slot
49
+ tooltip: {
50
+ fontSize: 14,
51
+ },
52
+ },
53
+ },
54
+ MuiIconButton: {
55
+ styleOverrides: {
56
+ root: {
57
+ color: '#5f6368',
58
+ },
59
+ },
60
+ },
61
+ MuiDialog: {
62
+ styleOverrides: {
63
+ // Name of the slot
64
+ paper: {
65
+ backgroundColor: 'white',
66
+ margin: '18px'
67
+ },
68
+ },
69
+ },
70
+ MuiDialogActions: {
71
+ styleOverrides: {
72
+ root: {
73
+ margin: '8px'
74
+ }
75
+ }
76
+ },
77
+ MuiCard: {
78
+ styleOverrides: {
79
+ root: {
80
+ backgroundColor: 'white'
81
+ }
82
+ }
83
+ },
84
+ MuiTab: {
85
+ styleOverrides: {
86
+ root: {
87
+ "&.Mui-selected": {
88
+ "backgroundColor": "#BCD46C"
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }
94
+ });
95
+ exports.default = theme;
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@movalib/movalib-commons",
3
- "version": "1.0.14",
3
+ "version": "1.0.16",
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
10
  "build": "rm -rf dist && tsc && npm run copy-assets",
10
11
  "copy-assets": "cp -r src/assets/ dist/assets/",
11
12
  "test": "echo \"Error: no test specified\" && exit 1",
@@ -15,11 +16,11 @@
15
16
  "author": "",
16
17
  "license": "ISC",
17
18
  "dependencies": {
19
+ "@types/node": "^16.18.53",
20
+ "@types/react": "^18.2.22",
18
21
  "react": "^18.2.0",
19
- "react-scripts": "5.0.1",
20
22
  "react-dom": "^18.2.0",
21
- "@types/node": "^16.18.53",
22
- "@types/react": "^18.2.22"
23
+ "react-scripts": "5.0.1"
23
24
  },
24
25
  "eslintConfig": {
25
26
  "extends": [
@@ -27,13 +28,17 @@
27
28
  ]
28
29
  },
29
30
  "devDependencies": {
30
- "@mui/material": "^5.13.5",
31
- "@mui/icons-material": "^5.11.16",
32
- "@mui/lab": "^5.0.0-alpha.134",
33
31
  "@emotion/react": "^11.11.1",
34
32
  "@emotion/styled": "^11.11.0",
33
+ "@mui/icons-material": "^5.11.16",
34
+ "@mui/lab": "^5.0.0-alpha.134",
35
+ "@mui/material": "^5.13.5",
35
36
  "@types/react": "^18.2.22",
36
37
  "@types/react-dom": "^18.2.7",
37
- "typescript": "^4.9.5"
38
+ "file-loader": "^6.2.0",
39
+ "html-webpack-plugin": "^5.5.3",
40
+ "ts-loader": "^9.4.4",
41
+ "typescript": "^4.9.5",
42
+ "webpack-cli": "^5.1.4"
38
43
  }
39
44
  }
Binary file
@@ -0,0 +1,9 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Movalib Commons App</title>
5
+ </head>
6
+ <body>
7
+ <div id="root"></div>
8
+ </body>
9
+ </html>