@movalib/movalib-commons 1.0.67 → 1.0.68

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 (42) hide show
  1. package/.env.development +6 -0
  2. package/.env.production +4 -0
  3. package/devIndex.tsx +119 -10
  4. package/dist/devIndex.js +101 -8
  5. package/dist/index.d.ts +3 -1
  6. package/dist/index.js +5 -1
  7. package/dist/src/MovaLogin.js +2 -2
  8. package/dist/src/MovaSignUp.js +1 -1
  9. package/dist/src/QRCode.d.ts +1 -0
  10. package/dist/src/QRCode.js +13 -12
  11. package/dist/src/ScheduleFields.d.ts +24 -0
  12. package/dist/src/ScheduleFields.js +202 -0
  13. package/dist/src/helpers/ApiHelper.d.ts +20 -0
  14. package/dist/src/helpers/ApiHelper.js +74 -0
  15. package/dist/src/helpers/CookieUtils.d.ts +6 -0
  16. package/dist/src/helpers/CookieUtils.js +28 -0
  17. package/dist/src/helpers/Enums.d.ts +8 -1
  18. package/dist/src/helpers/Enums.js +10 -2
  19. package/dist/src/helpers/Tools.d.ts +6 -2
  20. package/dist/src/helpers/Tools.js +20 -7
  21. package/dist/src/services/AuthenticationService.d.ts +6 -0
  22. package/dist/src/services/AuthenticationService.js +106 -0
  23. package/dist/src/services/GarageService.d.ts +5 -0
  24. package/dist/src/services/GarageService.js +16 -0
  25. package/dist/src/services/UserService.d.ts +10 -0
  26. package/dist/src/services/UserService.js +76 -0
  27. package/index.ts +3 -1
  28. package/package.json +9 -8
  29. package/src/MovaLogin.tsx +2 -2
  30. package/src/MovaSignUp.tsx +1 -1
  31. package/src/QRCode.css +4 -0
  32. package/src/QRCode.tsx +12 -13
  33. package/src/ScheduleFields.tsx +301 -0
  34. package/src/helpers/ApiHelper.ts +95 -0
  35. package/src/helpers/CookieUtils.ts +23 -0
  36. package/src/helpers/Enums.ts +8 -1
  37. package/src/helpers/Tools.ts +20 -2
  38. package/src/services/AuthenticationService.ts +68 -0
  39. package/src/services/GarageService.ts +14 -0
  40. package/src/services/UserService.ts +25 -0
  41. package/tsconfig.json +1 -1
  42. package/webpack.config.js +9 -0
@@ -0,0 +1,202 @@
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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.FR_WEEK_DAYS = void 0;
27
+ var jsx_runtime_1 = require("react/jsx-runtime");
28
+ var react_1 = require("react");
29
+ var material_1 = require("@mui/material");
30
+ var AddRounded_1 = __importDefault(require("@mui/icons-material/AddRounded"));
31
+ var DeleteRounded_1 = __importDefault(require("@mui/icons-material/DeleteRounded"));
32
+ var x_date_pickers_1 = require("@mui/x-date-pickers");
33
+ var theme_1 = __importDefault(require("../theme")); // Import du thème personnalisé
34
+ var Enums_1 = require("./helpers/Enums");
35
+ var Logger_1 = __importDefault(require("./helpers/Logger"));
36
+ exports.FR_WEEK_DAYS = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'];
37
+ var initialSchedules = [
38
+ { day: Enums_1.DayOfWeek.MONDAY, checked: false, allDay: false, intervals: [{ startTime: null, endTime: null, countryCode: 'fr', error: null }] },
39
+ { day: Enums_1.DayOfWeek.TUESDAY, checked: false, allDay: false, intervals: [{ startTime: null, endTime: null, countryCode: 'fr', error: null }] },
40
+ { day: Enums_1.DayOfWeek.WEDNESDAY, checked: false, allDay: false, intervals: [{ startTime: null, endTime: null, countryCode: 'fr', error: null }] },
41
+ { day: Enums_1.DayOfWeek.THURSDAY, checked: false, allDay: false, intervals: [{ startTime: null, endTime: null, countryCode: 'fr', error: null }] },
42
+ { day: Enums_1.DayOfWeek.FRIDAY, checked: false, allDay: false, intervals: [{ startTime: null, endTime: null, countryCode: 'fr', error: null }] },
43
+ { day: Enums_1.DayOfWeek.SATURDAY, checked: false, allDay: false, intervals: [{ startTime: null, endTime: null, countryCode: 'fr', error: null }] },
44
+ { day: Enums_1.DayOfWeek.SUNDAY, checked: false, allDay: false, intervals: [{ startTime: null, endTime: null, countryCode: 'fr', error: null }] },
45
+ ];
46
+ var ScheduleFields = function (_a) {
47
+ var timePickerStep = _a.timePickerStep, schedules = _a.schedules, size = _a.size, onChange = _a.onChange;
48
+ var mergeSchedules = function (apiSchedules) {
49
+ // Créez une copie profonde du tableau initialSchedules pour éviter toute mutation accidentelle
50
+ var mergedSchedules = JSON.parse(JSON.stringify(initialSchedules));
51
+ // Parcourez chaque élément de apiSchedules et mettez à jour updatedSchedules
52
+ var today = new Date().toISOString().substring(0, 10);
53
+ var _loop_1 = function (apiSchedule) {
54
+ var dayIndex = mergedSchedules.findIndex(function (schedule) { return schedule.day === apiSchedule.dayOfWeek; });
55
+ if (dayIndex !== -1) {
56
+ mergedSchedules[dayIndex].checked = apiSchedule.intervals.length > 0;
57
+ mergedSchedules[dayIndex].intervals = apiSchedule.intervals.map(function (interval) { return (__assign(__assign({}, interval), {
58
+ // On injecte une date fictive même si nous n'utilisons que l'heure, le Timepicker attend une Date JS Valide
59
+ startTime: new Date("".concat(today, "T").concat(interval.startTime)), endTime: new Date("".concat(today, "T").concat(interval.endTime)), error: null })); });
60
+ mergedSchedules[dayIndex].allDay = apiSchedule.isAllWorkingDay;
61
+ }
62
+ };
63
+ for (var _i = 0, apiSchedules_1 = apiSchedules; _i < apiSchedules_1.length; _i++) {
64
+ var apiSchedule = apiSchedules_1[_i];
65
+ _loop_1(apiSchedule);
66
+ }
67
+ Logger_1.default.info(mergedSchedules);
68
+ return mergedSchedules;
69
+ };
70
+ /**
71
+ * Cette fonction renvoie une liste de DaySchedule depuis une liste de Schedule
72
+ * @returns
73
+ */
74
+ var initializeFromSchedules = function () {
75
+ if (schedules && schedules.length > 0) {
76
+ return schedules.map(function (s) {
77
+ var iList = s.intervals.map(function (i) { return ({
78
+ startTime: new Date(i.startTime),
79
+ endTime: new Date(i.endTime),
80
+ countryCode: i.countryCode,
81
+ error: null,
82
+ }); });
83
+ return {
84
+ day: s.dayOfWeek,
85
+ checked: iList.length > 0,
86
+ intervals: iList,
87
+ };
88
+ });
89
+ }
90
+ return [];
91
+ };
92
+ // Si des schedules sont transmises on initialise un nouveau tableau de DaySchedule[]
93
+ var _b = (0, react_1.useState)(initialSchedules), schedule = _b[0], setSchedule = _b[1];
94
+ // Chargement initial des données du garage
95
+ (0, react_1.useEffect)(function () {
96
+ if (schedules && schedules.length > 0) {
97
+ setSchedule(mergeSchedules(schedules));
98
+ }
99
+ }, [schedules]); // Exécute le hook à chaque fois que les schedules transmis en props changent
100
+ var handleDayChecked = function (dayIndex) { return function (event) {
101
+ var newSchedule = __spreadArray([], schedule, true);
102
+ newSchedule[dayIndex].checked = event.target.checked;
103
+ // On réinitialise aussi les intervals
104
+ newSchedule[dayIndex].intervals = [{ startTime: null, endTime: null, countryCode: 'fr', error: null }];
105
+ onChange(newSchedule);
106
+ setSchedule(newSchedule);
107
+ }; };
108
+ var handleAllDayChecked = function (e, value, dayIndex) { return function (event) {
109
+ e.preventDefault();
110
+ var newSchedule = __spreadArray([], schedule, true);
111
+ newSchedule[dayIndex].allDay = event.target.checked;
112
+ onChange(newSchedule);
113
+ setSchedule(newSchedule);
114
+ }; };
115
+ var validateInterval = function (start, end) {
116
+ if (start instanceof Date && end instanceof Date && start.getTime() > end.getTime()) {
117
+ return "L'heure de début doit être antérieure à l'heure de fin";
118
+ }
119
+ return null;
120
+ };
121
+ var validateIntervals = function (intervals) {
122
+ var _a, _b, _c, _d;
123
+ // On tri les intervals par date de début
124
+ var sortedIntervals = __spreadArray([], intervals, true).sort(function (a, b) {
125
+ return a.startTime && b.startTime ? a.startTime.toISOString().localeCompare(b.startTime.toISOString()) : 0;
126
+ });
127
+ console.log(sortedIntervals);
128
+ for (var i = 0; i < sortedIntervals.length; i++) {
129
+ if (((_a = sortedIntervals[i].startTime) === null || _a === void 0 ? void 0 : _a.toString().localeCompare((_b = sortedIntervals[i].endTime) === null || _b === void 0 ? void 0 : _b.toString())) >= 0 ||
130
+ (i < sortedIntervals.length - 1 &&
131
+ ((_c = sortedIntervals[i].endTime) === null || _c === void 0 ? void 0 : _c.toString().localeCompare((_d = sortedIntervals[i + 1].startTime) === null || _d === void 0 ? void 0 : _d.toString())) > 0)) {
132
+ return 'Attention vos intervales se chevauchent'; // start time is after or equal to end time, or end time of current interval is after start time of next interval
133
+ }
134
+ }
135
+ return null; // all intervals are valid and there are no overlapping intervals
136
+ };
137
+ var handleIntervalChange = function (dayIndex, intervalIndex, type) {
138
+ return function (newValue) {
139
+ var newSchedule = __spreadArray([], schedule, true);
140
+ newSchedule[dayIndex].intervals[intervalIndex][type] = newValue;
141
+ newSchedule[dayIndex].intervals[intervalIndex].error = validateInterval(newSchedule[dayIndex].intervals[intervalIndex].startTime, newSchedule[dayIndex].intervals[intervalIndex].endTime);
142
+ //Contrôle le chevauchement d'intervales
143
+ if (type === 'endTime' && intervalIndex > 0 && !newSchedule[dayIndex].intervals[intervalIndex].error) {
144
+ console.log(dayIndex);
145
+ console.log(newSchedule[dayIndex].intervals);
146
+ newSchedule[dayIndex].intervals[intervalIndex].error = validateIntervals(newSchedule[dayIndex].intervals);
147
+ }
148
+ setSchedule(newSchedule);
149
+ onChange(newSchedule);
150
+ };
151
+ };
152
+ var addInterval = function (dayIndex) { return function () {
153
+ Logger_1.default.info(dayIndex);
154
+ var newSchedule = __spreadArray([], schedule, true);
155
+ newSchedule[dayIndex].intervals.push({ startTime: null, endTime: null, countryCode: 'fr', error: null });
156
+ Logger_1.default.info(newSchedule);
157
+ setSchedule(newSchedule);
158
+ }; };
159
+ var deleteInterval = function (dayIndex, intervalIndex) { return function () {
160
+ var newSchedule = __spreadArray([], schedule, true);
161
+ newSchedule[dayIndex].intervals.splice(intervalIndex, 1);
162
+ onChange(newSchedule);
163
+ setSchedule(newSchedule);
164
+ }; };
165
+ var getDayOfWeekIndex = function (day) {
166
+ if (day) {
167
+ // Convertir les valeurs de l'énumération en un tableau
168
+ var daysArray = Object.values(Enums_1.DayOfWeek);
169
+ return daysArray.indexOf(day);
170
+ }
171
+ return -1;
172
+ };
173
+ return ((0, jsx_runtime_1.jsx)(material_1.Grid, __assign({ container: true, spacing: 1, sx: { minWidth: '650px', maxWidth: '800px' } }, { children: schedule.map(function (daySchedule, dayIndex) { return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 1 }), (0, jsx_runtime_1.jsx)(material_1.Grid, __assign({ item: true, xs: 2 }, { children: (0, jsx_runtime_1.jsx)(material_1.FormControlLabel, { control: (0, jsx_runtime_1.jsx)(material_1.Checkbox, { checked: daySchedule.checked, onChange: handleDayChecked(dayIndex) }), label: exports.FR_WEEK_DAYS[getDayOfWeekIndex(daySchedule.day)] }) }), dayIndex + 1), (0, jsx_runtime_1.jsx)(material_1.Grid, __assign({ item: true, xs: 7 }, { children: daySchedule.intervals.map(function (interval, intervalIndex) { return ((0, jsx_runtime_1.jsxs)(material_1.Grid, __assign({ container: true, style: { paddingTop: intervalIndex > 0 ? theme_1.default.spacing(1) : 0 } }, { children: [(0, jsx_runtime_1.jsx)(material_1.Grid, __assign({ item: true, xs: 6, sx: { textAlign: 'center' } }, { children: (0, jsx_runtime_1.jsx)(x_date_pickers_1.TimePicker, { views: ['hours', 'minutes'], minutesStep: timePickerStep !== null && timePickerStep !== void 0 ? timePickerStep : 30, disabled: !daySchedule.checked, value: interval.startTime, formatDensity: 'dense', onChange: handleIntervalChange(dayIndex, intervalIndex, 'startTime'), slotProps: {
174
+ textField: {
175
+ size: 'small',
176
+ sx: {
177
+ width: '150px',
178
+ minWidth: '100px',
179
+ padding: 0,
180
+ },
181
+ },
182
+ actionBar: {
183
+ sx: { display: 'none' },
184
+ },
185
+ } }) }), (intervalIndex + 1) * Math.random()), (0, jsx_runtime_1.jsxs)(material_1.Grid, __assign({ item: true, xs: 6, sx: { display: 'contents' } }, { children: [(0, jsx_runtime_1.jsx)(x_date_pickers_1.TimePicker, { minutesStep: timePickerStep !== null && timePickerStep !== void 0 ? timePickerStep : 30, disabled: !(interval.startTime instanceof Date), value: interval.endTime, formatDensity: 'dense', onChange: handleIntervalChange(dayIndex, intervalIndex, 'endTime'),
186
+ //onClose={handleIntervalClose}
187
+ closeOnSelect: false, slotProps: {
188
+ textField: {
189
+ size: 'small',
190
+ sx: {
191
+ width: '150px',
192
+ minWidth: '100px',
193
+ padding: 0,
194
+ },
195
+ },
196
+ actionBar: {
197
+ sx: { display: 'none' },
198
+ },
199
+ } }), intervalIndex > 0 &&
200
+ (0, jsx_runtime_1.jsx)(material_1.IconButton, __assign({ onClick: deleteInterval(dayIndex, intervalIndex), disabled: !daySchedule.checked, sx: { ml: 2 } }, { children: (0, jsx_runtime_1.jsx)(DeleteRounded_1.default, {}) }))] }), (intervalIndex + 1) * Math.random()), (0, jsx_runtime_1.jsx)(material_1.Grid, __assign({ item: true, xs: 12 }, { children: interval.error && (0, jsx_runtime_1.jsx)(material_1.FormHelperText, __assign({ error: true, sx: { mb: 1 } }, { children: interval.error })) }), (intervalIndex + 1) * Math.random())] }), intervalIndex + 1)); }) }), (dayIndex + 1) * Math.random()), (0, jsx_runtime_1.jsx)(material_1.Grid, __assign({ item: true, xs: 1, sx: { pl: 0 } }, { children: (0, jsx_runtime_1.jsx)(material_1.IconButton, __assign({ onClick: addInterval(dayIndex), disabled: !daySchedule.checked }, { children: (0, jsx_runtime_1.jsx)(AddRounded_1.default, {}) })) }), (dayIndex + 1) * Math.random()), (0, jsx_runtime_1.jsx)(material_1.Grid, { item: true, xs: 1 })] })); }) })));
201
+ };
202
+ exports.default = ScheduleFields;
@@ -0,0 +1,20 @@
1
+ import { APIMethod } from "./Enums";
2
+ export declare const API_BASE_URL: string;
3
+ export type APIResponse<T> = {
4
+ success: boolean;
5
+ data?: T;
6
+ error?: string;
7
+ };
8
+ export type APIRequest = {
9
+ url: string;
10
+ method: APIMethod;
11
+ body?: string | FormData;
12
+ };
13
+ /**
14
+ * ATTENTION : cela signifie que toutes les requêtes du Front seront de type "preflight"
15
+ * Il faut penser à configurer l'API pour autoriser les headers
16
+ * @param options
17
+ * @param dispatch
18
+ * @returns
19
+ */
20
+ export declare const request: (options: APIRequest) => Promise<APIResponse<any>>;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ var _a;
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.request = exports.API_BASE_URL = void 0;
8
+ var CookieUtils_1 = require("./CookieUtils");
9
+ var Logger_1 = __importDefault(require("./Logger"));
10
+ exports.API_BASE_URL = (_a = process.env.REACT_APP_API_URL) !== null && _a !== void 0 ? _a : 'https://localhost:8443/api';
11
+ function handleError(error) {
12
+ var msg = error.message.includes('fetch') ? "Connexion impossible" : error.message;
13
+ return {
14
+ success: false,
15
+ error: msg
16
+ };
17
+ }
18
+ function handleResponse(response) {
19
+ var contentType = response.headers.get("content-type");
20
+ var isJson = contentType && contentType.includes("application/json");
21
+ var dataPromise = isJson ? response.json() : response.text();
22
+ return dataPromise.then(function (data) {
23
+ if (!response.ok) {
24
+ Logger_1.default.error(data);
25
+ var errorMsg = void 0;
26
+ switch (response.status) {
27
+ case 403:
28
+ errorMsg = 'Accès non autorisé (403)';
29
+ break;
30
+ case 404:
31
+ errorMsg = 'La ressource demandée est introuvable (404)';
32
+ break;
33
+ case 500:
34
+ errorMsg = 'Une erreur interne du serveur est survenue (500)';
35
+ break;
36
+ default:
37
+ errorMsg = (typeof data === 'string') ? data : "Une erreur est survenue (".concat(response.status, ")");
38
+ break;
39
+ }
40
+ return { success: false, error: errorMsg };
41
+ }
42
+ return { success: true, data: data };
43
+ });
44
+ }
45
+ /**
46
+ * ATTENTION : cela signifie que toutes les requêtes du Front seront de type "preflight"
47
+ * Il faut penser à configurer l'API pour autoriser les headers
48
+ * @param options
49
+ * @param dispatch
50
+ * @returns
51
+ */
52
+ var request = function (options) {
53
+ var headers = new Headers();
54
+ // Si le corps est de type FormData, il ne faut pas définir le content-type manuellement (le navigateur prend le relai est injecte un boundary (délimiteur)
55
+ if (!(options.body instanceof FormData)) {
56
+ headers.append('Content-Type', 'application/json');
57
+ }
58
+ // Récupération du TOKEN depuis les cookies et intégration au header
59
+ if ((0, CookieUtils_1.readCookie)(CookieUtils_1.COOKIE_GARAGE_TOKEN)) {
60
+ headers.append('Authorization', 'Bearer ' + (0, CookieUtils_1.readCookie)(CookieUtils_1.COOKIE_GARAGE_TOKEN));
61
+ }
62
+ // On intègre les headers aux options
63
+ var defaults = { headers: headers };
64
+ options = Object.assign({}, defaults, options);
65
+ Logger_1.default.info(options);
66
+ // Appel API
67
+ return fetch(options.url, options)
68
+ .then(handleResponse)
69
+ .catch(function (error) {
70
+ Logger_1.default.error('There has been a problem with your fetch operation : ', error.message);
71
+ return handleError(error);
72
+ });
73
+ };
74
+ exports.request = request;
@@ -0,0 +1,6 @@
1
+ export declare const COOKIE_GARAGE_TOKEN: string;
2
+ export declare const COOKIE_INDIVIDUAL_TOKEN: string;
3
+ export declare const COOKIE_DEFAULT_EXPIRES: number;
4
+ export declare const createCookie: (name: string, value: string) => void;
5
+ export declare const deleteCookie: (name: string) => void;
6
+ export declare const readCookie: (name: string) => string | undefined;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.readCookie = exports.deleteCookie = exports.createCookie = exports.COOKIE_DEFAULT_EXPIRES = exports.COOKIE_INDIVIDUAL_TOKEN = exports.COOKIE_GARAGE_TOKEN = void 0;
7
+ var js_cookie_1 = __importDefault(require("js-cookie"));
8
+ exports.COOKIE_GARAGE_TOKEN = 'movalibGarageToken';
9
+ exports.COOKIE_INDIVIDUAL_TOKEN = 'movalibIndividualToken';
10
+ exports.COOKIE_DEFAULT_EXPIRES = 7;
11
+ var createCookie = function (name, value) {
12
+ if (name && value) {
13
+ js_cookie_1.default.set(name, value, { expires: exports.COOKIE_DEFAULT_EXPIRES, sameSite: 'None', secure: true });
14
+ }
15
+ };
16
+ exports.createCookie = createCookie;
17
+ var deleteCookie = function (name) {
18
+ if (name) {
19
+ js_cookie_1.default.remove(name);
20
+ }
21
+ };
22
+ exports.deleteCookie = deleteCookie;
23
+ var readCookie = function (name) {
24
+ if (name) {
25
+ return js_cookie_1.default.get(name);
26
+ }
27
+ };
28
+ exports.readCookie = readCookie;
@@ -1,3 +1,10 @@
1
+ export declare enum APIMethod {
2
+ GET = "GET",
3
+ PUT = "PUT",
4
+ PATCH = "PATCH",
5
+ POST = "POST",
6
+ DELETE = "DELETE"
7
+ }
1
8
  export declare enum DateFormatTypes {
2
9
  SHORT_FORMAT_DATE = "dd/MM/yyyy",
3
10
  LONG_FORMAT_DATETIME = "dd/MM/yyyy HH:mm:ss",
@@ -72,7 +79,7 @@ export declare enum MovaAppType {
72
79
  /**
73
80
  * Application Utilisateur (automobiliste)
74
81
  */
75
- USER = "USER",
82
+ INDIVIDUAL = "INDIVIDUAL",
76
83
  /**
77
84
  * Application Administrateur (MovaTeam)
78
85
  */
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RoleType = exports.MovaAppType = exports.DocumentType = exports.DocumentState = exports.DayOfWeek = exports.EventType = exports.EventState = exports.DigitalPassportIndex = exports.Gender = exports.DateFormatTypes = void 0;
3
+ exports.RoleType = exports.MovaAppType = exports.DocumentType = exports.DocumentState = exports.DayOfWeek = exports.EventType = exports.EventState = exports.DigitalPassportIndex = exports.Gender = exports.DateFormatTypes = exports.APIMethod = void 0;
4
+ var APIMethod;
5
+ (function (APIMethod) {
6
+ APIMethod["GET"] = "GET";
7
+ APIMethod["PUT"] = "PUT";
8
+ APIMethod["PATCH"] = "PATCH";
9
+ APIMethod["POST"] = "POST";
10
+ APIMethod["DELETE"] = "DELETE";
11
+ })(APIMethod = exports.APIMethod || (exports.APIMethod = {}));
4
12
  var DateFormatTypes;
5
13
  (function (DateFormatTypes) {
6
14
  DateFormatTypes["SHORT_FORMAT_DATE"] = "dd/MM/yyyy";
@@ -84,7 +92,7 @@ var MovaAppType;
84
92
  /**
85
93
  * Application Utilisateur (automobiliste)
86
94
  */
87
- MovaAppType["USER"] = "USER";
95
+ MovaAppType["INDIVIDUAL"] = "INDIVIDUAL";
88
96
  /**
89
97
  * Application Administrateur (MovaTeam)
90
98
  */
@@ -1,8 +1,12 @@
1
1
  import VehicleTire from "../models/VehicleTire";
2
2
  import { MovaFormField } from "./Types";
3
+ import { CSSProperties } from "react";
4
+ export declare const flexEnd: CSSProperties;
5
+ export declare const flexCenter: CSSProperties;
6
+ export declare const isEmpty: (data: Object) => boolean;
3
7
  export declare const formatFrenchVehiclePlate: (input: string | undefined) => string;
4
- export declare function formatVehicleTire(vehicleTire: VehicleTire): string;
5
- export declare function formatVehicleTireStr(input: string): string;
8
+ export declare const formatVehicleTire: (vehicleTire: VehicleTire) => string;
9
+ export declare const formatVehicleTireStr: (input: string) => string;
6
10
  /**
7
11
  * Valide un champ de formulaire en utilisant une fonction de validation personnalisée.
8
12
  *
@@ -1,6 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateField = exports.formatVehicleTireStr = exports.formatVehicleTire = exports.formatFrenchVehiclePlate = void 0;
3
+ exports.validateField = exports.formatVehicleTireStr = exports.formatVehicleTire = exports.formatFrenchVehiclePlate = exports.isEmpty = exports.flexCenter = exports.flexEnd = void 0;
4
+ exports.flexEnd = {
5
+ display: 'flex',
6
+ justifyContent: 'end',
7
+ alignItems: 'center'
8
+ };
9
+ exports.flexCenter = {
10
+ display: 'flex',
11
+ justifyContent: 'center',
12
+ alignItems: 'center'
13
+ };
14
+ var isEmpty = function (data) {
15
+ return Object.keys(data).length === 0;
16
+ };
17
+ exports.isEmpty = isEmpty;
4
18
  var formatFrenchVehiclePlate = function (input) {
5
19
  if (input) {
6
20
  // Supprimer tous les caractères non alphanumériques
@@ -17,15 +31,15 @@ var formatFrenchVehiclePlate = function (input) {
17
31
  return "";
18
32
  };
19
33
  exports.formatFrenchVehiclePlate = formatFrenchVehiclePlate;
20
- function formatVehicleTire(vehicleTire) {
34
+ var formatVehicleTire = function (vehicleTire) {
21
35
  if (vehicleTire) {
22
36
  var concatened = "".concat(vehicleTire.width).concat(vehicleTire.height).concat(vehicleTire.diameter).concat(vehicleTire.speedIndex);
23
- return formatVehicleTireStr(concatened);
37
+ return (0, exports.formatVehicleTireStr)(concatened);
24
38
  }
25
39
  return '';
26
- }
40
+ };
27
41
  exports.formatVehicleTire = formatVehicleTire;
28
- function formatVehicleTireStr(input) {
42
+ var formatVehicleTireStr = function (input) {
29
43
  var formatted = input.toUpperCase().replace(/[^0-9A-QS-Za-qs-z]/g, '').slice(0, 10);
30
44
  if (formatted.length >= 3) {
31
45
  formatted = "".concat(formatted.substring(0, 3), " / ").concat(formatted.substring(3));
@@ -41,9 +55,8 @@ function formatVehicleTireStr(input) {
41
55
  }
42
56
  console.log(formatted);
43
57
  return formatted;
44
- }
58
+ };
45
59
  exports.formatVehicleTireStr = formatVehicleTireStr;
46
- ;
47
60
  /**
48
61
  * Valide un champ de formulaire en utilisant une fonction de validation personnalisée.
49
62
  *
@@ -0,0 +1,6 @@
1
+ import { APIResponse } from "../helpers/ApiHelper";
2
+ import { MovaAppType } from "../helpers/Enums";
3
+ import User from "../models/User";
4
+ export default class AuthenticationService {
5
+ static login(appType: MovaAppType, email: string, password: string): Promise<APIResponse<User>>;
6
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ var ApiHelper_1 = require("../helpers/ApiHelper");
43
+ var CookieUtils_1 = require("../helpers/CookieUtils");
44
+ var Enums_1 = require("../helpers/Enums");
45
+ var Logger_1 = __importDefault(require("../helpers/Logger"));
46
+ var UserService_1 = __importDefault(require("./UserService"));
47
+ var AuthenticationService = /** @class */ (function () {
48
+ function AuthenticationService() {
49
+ }
50
+ AuthenticationService.login = function (appType, email, password) {
51
+ return __awaiter(this, void 0, void 0, function () {
52
+ var url, tokenCookie, tokenResponse, userResponse, errorMsg, error_1, errorMessage;
53
+ return __generator(this, function (_a) {
54
+ switch (_a.label) {
55
+ case 0:
56
+ _a.trys.push([0, 5, , 6]);
57
+ url = '';
58
+ tokenCookie = '';
59
+ Logger_1.default.info(ApiHelper_1.API_BASE_URL);
60
+ switch (appType) {
61
+ case Enums_1.MovaAppType.GARAGE:
62
+ url = "".concat(ApiHelper_1.API_BASE_URL, "/garage/login");
63
+ tokenCookie = CookieUtils_1.COOKIE_GARAGE_TOKEN;
64
+ break;
65
+ case Enums_1.MovaAppType.INDIVIDUAL:
66
+ url = "".concat(ApiHelper_1.API_BASE_URL, "/login");
67
+ tokenCookie = CookieUtils_1.COOKIE_INDIVIDUAL_TOKEN;
68
+ break;
69
+ }
70
+ return [4 /*yield*/, (0, ApiHelper_1.request)({
71
+ url: url,
72
+ method: Enums_1.APIMethod.POST,
73
+ body: JSON.stringify({
74
+ email: email,
75
+ password: password
76
+ })
77
+ })];
78
+ case 1:
79
+ tokenResponse = _a.sent();
80
+ if (!tokenResponse.success) return [3 /*break*/, 3];
81
+ Logger_1.default.info(tokenResponse);
82
+ (0, CookieUtils_1.createCookie)(tokenCookie, tokenResponse.data.accessToken);
83
+ return [4 /*yield*/, UserService_1.default.getCurrentUser()];
84
+ case 2:
85
+ userResponse = _a.sent();
86
+ if (!userResponse || !userResponse.success) {
87
+ errorMsg = 'Erreur au chargement de votre profil';
88
+ Logger_1.default.error(errorMsg);
89
+ return [2 /*return*/, { success: false, error: errorMsg }];
90
+ }
91
+ return [2 /*return*/, { success: true, data: userResponse.data }];
92
+ case 3: return [2 /*return*/, tokenResponse];
93
+ case 4: return [3 /*break*/, 6];
94
+ case 5:
95
+ error_1 = _a.sent();
96
+ Logger_1.default.error('Error occurred during login:', error_1);
97
+ errorMessage = error_1 instanceof Error ? error_1.message : 'Erreur inconnue';
98
+ return [2 /*return*/, { success: false, error: errorMessage }];
99
+ case 6: return [2 /*return*/];
100
+ }
101
+ });
102
+ });
103
+ };
104
+ return AuthenticationService;
105
+ }());
106
+ exports.default = AuthenticationService;
@@ -0,0 +1,5 @@
1
+ import { APIResponse } from "../helpers/ApiHelper";
2
+ import Garage from "../models/Garage";
3
+ export default class GarageService {
4
+ static getAdministratedGarages(): Promise<APIResponse<Garage[]>>;
5
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var ApiHelper_1 = require("../helpers/ApiHelper");
4
+ var Enums_1 = require("../helpers/Enums");
5
+ var GarageService = /** @class */ (function () {
6
+ function GarageService() {
7
+ }
8
+ GarageService.getAdministratedGarages = function () {
9
+ return (0, ApiHelper_1.request)({
10
+ url: "".concat(ApiHelper_1.API_BASE_URL, "/user/garages"),
11
+ method: Enums_1.APIMethod.GET,
12
+ });
13
+ };
14
+ return GarageService;
15
+ }());
16
+ exports.default = GarageService;
@@ -0,0 +1,10 @@
1
+ import { APIResponse } from "../helpers/ApiHelper";
2
+ import User from "../models/User";
3
+ export default class UserService {
4
+ /**
5
+ * @param email
6
+ * @param password
7
+ * @returns
8
+ */
9
+ static getCurrentUser(): Promise<APIResponse<User>>;
10
+ }