@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.
- package/PV_README.md +9 -1
- package/devIndex.tsx +33 -0
- package/dist/devIndex.js +34 -0
- package/dist/src/GenderSelector.d.ts +13 -0
- package/dist/src/GenderSelector.js +20 -0
- package/dist/{MovaCopyright.js → src/MovaCopyright.js} +1 -1
- package/dist/{MovaLogin.js → src/MovaLogin.js} +10 -23
- package/dist/src/MovaSignUp.d.ts +21 -0
- package/dist/src/MovaSignUp.js +169 -0
- package/dist/src/helpers/Tools.d.ts +10 -0
- package/dist/src/helpers/Tools.js +18 -0
- package/dist/src/helpers/Types.d.ts +18 -0
- package/dist/{index.d.ts → src/index.d.ts} +2 -4
- package/dist/{index.js → src/index.js} +1 -2
- package/dist/theme.d.ts +2 -0
- package/dist/theme.js +95 -0
- package/package.json +13 -8
- package/public/favicon.ico +0 -0
- package/public/index.html +9 -0
- package/src/GenderSelector.tsx +34 -0
- package/src/MovaCopyright.tsx +1 -1
- package/src/MovaLogin.tsx +17 -30
- package/src/MovaSignUp.tsx +277 -0
- package/src/helpers/Tools.ts +17 -1
- package/src/helpers/Types.ts +9 -0
- package/src/index.ts +3 -4
- package/theme.ts +95 -0
- package/tsconfig.json +1 -1
- package/webpack.config.js +35 -0
- package/dist/helpers/Tools.js +0 -2
- package/dist/helpers/Types.d.ts +0 -9
- /package/dist/{helpers/Tools.d.ts → devIndex.d.ts} +0 -0
- /package/dist/{MovaCopyright.d.ts → src/MovaCopyright.d.ts} +0 -0
- /package/dist/{MovaLogin.d.ts → src/MovaLogin.d.ts} +0 -0
- /package/dist/{MovaSnackbar.d.ts → src/MovaSnackbar.d.ts} +0 -0
- /package/dist/{MovaSnackbar.js → src/MovaSnackbar.js} +0 -0
- /package/dist/{TestButton.d.ts → src/TestButton.d.ts} +0 -0
- /package/dist/{TestButton.js → src/TestButton.js} +0 -0
- /package/dist/{helpers → src/helpers}/Enums.d.ts +0 -0
- /package/dist/{helpers → src/helpers}/Enums.js +0 -0
- /package/dist/{helpers → src/helpers}/Types.js +0 -0
- /package/dist/{helpers → src/helpers}/Validator.d.ts +0 -0
- /package/dist/{helpers → src/helpers}/Validator.js +0 -0
- /package/dist/{models → src/models}/Address.d.ts +0 -0
- /package/dist/{models → src/models}/Address.js +0 -0
- /package/dist/{models → src/models}/Role.d.ts +0 -0
- /package/dist/{models → src/models}/Role.js +0 -0
- /package/dist/{models → src/models}/User.d.ts +0 -0
- /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
|
+
);
|
package/dist/devIndex.js
ADDED
|
@@ -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
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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: "
|
|
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
|
|
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
|
-
|
|
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; } });
|
package/dist/theme.d.ts
ADDED
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.
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|