@movalib/movalib-commons 1.59.2 → 1.59.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -1
- package/dist/src/MovaSignUp.js +1 -1
- package/dist/src/ScheduleFields.js +5 -4
- package/dist/src/components/QrCodePLVContainer/QrCodePLVContainer.js +1 -1
- package/dist/src/helpers/DateUtils.d.ts +1 -0
- package/dist/src/helpers/DateUtils.js +5 -1
- package/dist/src/helpers/Enums.d.ts +4 -0
- package/dist/src/helpers/Enums.js +6 -1
- package/dist/src/models/Customer.d.ts +18 -1
- package/dist/src/models/Customer.js +5 -1
- package/index.ts +1 -0
- package/package.json +2 -2
- package/src/MovaSignUp.tsx +1 -1
- package/src/ScheduleFields.tsx +6 -6
- package/src/components/QrCodePLVContainer/QrCodePLVContainer.tsx +1 -1
- package/src/helpers/DateUtils.ts +4 -0
- package/src/helpers/Enums.ts +4 -0
- package/src/models/Customer.ts +29 -1
- package/webpack.config.js +9 -0
package/dist/index.d.ts
CHANGED
|
@@ -51,5 +51,5 @@ export { validateField, formatVehicleTire, formatFrenchVehiclePlate, isEmpty, ge
|
|
|
51
51
|
export { validatePhoneNumber, validateText, validateEmail } from './src/helpers/Validator';
|
|
52
52
|
export { formatDateByCountryCode, getLongFormattedDateTime } from './src/helpers/DateUtils';
|
|
53
53
|
export { request, API_BASE_URL } from './src/helpers/ApiHelper';
|
|
54
|
-
export { RoleType, MovaAppType, DayOfWeek, EventState, EventType, DocumentType, DigitalPassportIndex, DocumentState, Gender, DateFormatTypes, PartsApplicationType, ProductType, OrderPreference, OrderState, SlotAlgorithm, VehiclePlateFormat as VehiclePlateType, SubscriptionPaymentInterval, RegistrationState, PrestationType, PrestationState, CountryCode, SubscriptionState, SubscriptionType, APIMethod, } from './src/helpers/Enums';
|
|
54
|
+
export { CustomerType, RoleType, MovaAppType, DayOfWeek, EventState, EventType, DocumentType, DigitalPassportIndex, DocumentState, Gender, DateFormatTypes, PartsApplicationType, ProductType, OrderPreference, OrderState, SlotAlgorithm, VehiclePlateFormat as VehiclePlateType, SubscriptionPaymentInterval, RegistrationState, PrestationType, PrestationState, CountryCode, SubscriptionState, SubscriptionType, APIMethod, } from './src/helpers/Enums';
|
|
55
55
|
export { openDialogPrint } from './src/utils/DialogPrint';
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
};
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.formatVehicleTire = exports.validateField = exports.deleteCookie = exports.readCookie = exports.CategoryPrestation = exports.VehicleTire = exports.Event = exports.Schedule = exports.Garage = exports.Document = exports.Vehicle = exports.Address = exports.Role = exports.User = exports.Customer = exports.Logger = exports.Operation = exports.Prestation = exports.Product = exports.Supplier = exports.Employee = exports.Absence = exports.Subscription = exports.PrintSize = exports.PLVComponent = exports.QrCodePLVContainer = exports.GenderSelector = exports.ConfirmationDialog = exports.MovaVehicleTireField = exports.MovaCopyright = exports.MovaSignUp = exports.MovaLogin = exports.MovaSnackbar = exports.TestButton = exports.VehiclePlateField = exports.QRCode = exports.MovaDialog = exports.Loader = exports.MovaDigitalPassport = exports.VehicleFullCard = exports.ScheduleFields = exports.AddressFields = exports.AccountValidation = exports.GaragePLV = exports.IbanInput = exports.DialogForgotPassword = exports.UserService = exports.GarageService = exports.AuthenticationService = exports.VehicleService = void 0;
|
|
8
|
-
exports.openDialogPrint = exports.APIMethod = exports.SubscriptionType = exports.SubscriptionState = exports.CountryCode = exports.PrestationState = exports.PrestationType = exports.RegistrationState = exports.SubscriptionPaymentInterval = exports.VehiclePlateType = exports.SlotAlgorithm = exports.OrderState = exports.OrderPreference = exports.ProductType = exports.PartsApplicationType = exports.DateFormatTypes = exports.Gender = exports.DocumentState = exports.DigitalPassportIndex = exports.DocumentType = exports.EventType = exports.EventState = exports.DayOfWeek = exports.MovaAppType = exports.RoleType = exports.API_BASE_URL = exports.request = exports.getLongFormattedDateTime = exports.formatDateByCountryCode = exports.validateEmail = exports.validateText = exports.validatePhoneNumber = exports.getApplicationsShortLabels = exports.isSafariOniOS = exports.getDayOfWeekLabel = exports.findScheduleByDayOfWeek = exports.getFormattedIntervals = exports.getFormattedSchedule = exports.formatPhoneNumber = exports.flexLeftRow = exports.capitalizeFirstLetter = exports.getApplicationShortLabel = exports.isEmpty = exports.formatFrenchVehiclePlate = void 0;
|
|
8
|
+
exports.openDialogPrint = exports.APIMethod = exports.SubscriptionType = exports.SubscriptionState = exports.CountryCode = exports.PrestationState = exports.PrestationType = exports.RegistrationState = exports.SubscriptionPaymentInterval = exports.VehiclePlateType = exports.SlotAlgorithm = exports.OrderState = exports.OrderPreference = exports.ProductType = exports.PartsApplicationType = exports.DateFormatTypes = exports.Gender = exports.DocumentState = exports.DigitalPassportIndex = exports.DocumentType = exports.EventType = exports.EventState = exports.DayOfWeek = exports.MovaAppType = exports.RoleType = exports.CustomerType = exports.API_BASE_URL = exports.request = exports.getLongFormattedDateTime = exports.formatDateByCountryCode = exports.validateEmail = exports.validateText = exports.validatePhoneNumber = exports.getApplicationsShortLabels = exports.isSafariOniOS = exports.getDayOfWeekLabel = exports.findScheduleByDayOfWeek = exports.getFormattedIntervals = exports.getFormattedSchedule = exports.formatPhoneNumber = exports.flexLeftRow = exports.capitalizeFirstLetter = exports.getApplicationShortLabel = exports.isEmpty = exports.formatFrenchVehiclePlate = void 0;
|
|
9
9
|
// Export des services
|
|
10
10
|
var VehicleService_1 = require("./src/services/VehicleService");
|
|
11
11
|
Object.defineProperty(exports, "VehicleService", { enumerable: true, get: function () { return __importDefault(VehicleService_1).default; } });
|
|
@@ -131,6 +131,7 @@ Object.defineProperty(exports, "request", { enumerable: true, get: function () {
|
|
|
131
131
|
Object.defineProperty(exports, "API_BASE_URL", { enumerable: true, get: function () { return ApiHelper_1.API_BASE_URL; } });
|
|
132
132
|
// Export des enums
|
|
133
133
|
var Enums_1 = require("./src/helpers/Enums");
|
|
134
|
+
Object.defineProperty(exports, "CustomerType", { enumerable: true, get: function () { return Enums_1.CustomerType; } });
|
|
134
135
|
Object.defineProperty(exports, "RoleType", { enumerable: true, get: function () { return Enums_1.RoleType; } });
|
|
135
136
|
Object.defineProperty(exports, "MovaAppType", { enumerable: true, get: function () { return Enums_1.MovaAppType; } });
|
|
136
137
|
Object.defineProperty(exports, "DayOfWeek", { enumerable: true, get: function () { return Enums_1.DayOfWeek; } });
|
package/dist/src/MovaSignUp.js
CHANGED
|
@@ -231,7 +231,7 @@ var MovaSignUp = function (_a) {
|
|
|
231
231
|
}
|
|
232
232
|
} }), usePhoneNumber && (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.TextField, { type: "tel", margin: "normal", required: true, fullWidth: true, id: "phoneNumber", label: "N\u00B0 de t\u00E9l\u00E9phone", name: "phoneNumber", autoComplete: "tel", onChange: function (e) { return handleInputChange(e); }, value: userForm.phoneNumber.value, error: Boolean(userForm.phoneNumber.error), helperText: userForm.phoneNumber.error, InputProps: {
|
|
233
233
|
endAdornment: ((0, jsx_runtime_1.jsx)(InputAdornment_1.default, __assign({ position: "end" }, { children: (0, jsx_runtime_1.jsx)(material_1.IconButton, __assign({ edge: "end", onClick: function () { return setOpenPhoneNumberInfo(!openPhoneNumberInfo); } }, { children: (0, jsx_runtime_1.jsx)(Info_1.default, {}) })) }))),
|
|
234
|
-
} }), openPhoneNumberInfo && (0, jsx_runtime_1.jsx)(material_1.Alert, __assign({ severity: "info", variant: 'standard' }, { children: "
|
|
234
|
+
} }), openPhoneNumberInfo && (0, jsx_runtime_1.jsx)(material_1.Alert, __assign({ severity: "info", variant: 'standard' }, { children: "Entrez le num\u00E9ro de t\u00E9l\u00E9phone que vous avez utilis\u00E9 pour r\u00E9server, afin de suivre facilement vos rendez-vous." }))] }), (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, sx: {
|
|
235
235
|
'& .MuiOutlinedInput-notchedOutline': {
|
|
236
236
|
borderColor: darkMode ? 'white' : 'default', // Couleur de la bordure
|
|
237
237
|
}
|
|
@@ -33,6 +33,7 @@ var theme_1 = __importDefault(require("../theme")); // Import du thème personna
|
|
|
33
33
|
var Enums_1 = require("./helpers/Enums");
|
|
34
34
|
var Logger_1 = __importDefault(require("./helpers/Logger"));
|
|
35
35
|
var Tools_1 = require("./helpers/Tools");
|
|
36
|
+
var DateUtils_1 = require("./helpers/DateUtils");
|
|
36
37
|
var ContentCopy_1 = __importDefault(require("@mui/icons-material/ContentCopy"));
|
|
37
38
|
var initialSchedules = [
|
|
38
39
|
{ day: Enums_1.DayOfWeek.MONDAY, checked: false, allDay: false, intervals: [{ startTime: null, endTime: null, countryCode: Enums_1.CountryCode.FR, error: null }] },
|
|
@@ -147,8 +148,8 @@ var ScheduleFields = function (_a) {
|
|
|
147
148
|
newSchedule[dayIndex].intervals[intervalIndex].error = validateIntervals(newSchedule[dayIndex].intervals);
|
|
148
149
|
}
|
|
149
150
|
setSchedule(newSchedule);
|
|
150
|
-
if (type === 'endTime') {
|
|
151
|
-
// On invoque la callback de mise à jour
|
|
151
|
+
if (type === 'endTime' || (type === 'startTime' && (0, DateUtils_1.isValidDate)(newSchedule[dayIndex].intervals[intervalIndex].endTime))) {
|
|
152
|
+
// On invoque la callback de mise à jour sur les deux intervalles, toutefois on contrôle que l'intervalle de fin est alimentée
|
|
152
153
|
onChange(newSchedule);
|
|
153
154
|
}
|
|
154
155
|
};
|
|
@@ -188,7 +189,7 @@ var ScheduleFields = function (_a) {
|
|
|
188
189
|
onChange(newSchedule);
|
|
189
190
|
setSchedule(newSchedule);
|
|
190
191
|
}; };
|
|
191
|
-
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, __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: (0, Tools_1.getDayOfWeekLabel)(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', closeOnSelect: false,
|
|
192
|
+
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, __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: (0, Tools_1.getDayOfWeekLabel)(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', closeOnSelect: false, onChange: handleIntervalChange(dayIndex, intervalIndex, 'startTime'), slotProps: {
|
|
192
193
|
textField: {
|
|
193
194
|
size: 'small',
|
|
194
195
|
sx: {
|
|
@@ -200,7 +201,7 @@ var ScheduleFields = function (_a) {
|
|
|
200
201
|
actionBar: {
|
|
201
202
|
sx: { display: 'none' },
|
|
202
203
|
},
|
|
203
|
-
} }) }), (intervalIndex + 1) * Math.random()), (0, jsx_runtime_1.jsx)(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',
|
|
204
|
+
} }) }), (intervalIndex + 1) * Math.random()), (0, jsx_runtime_1.jsx)(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'), closeOnSelect: false, slotProps: {
|
|
204
205
|
textField: {
|
|
205
206
|
size: 'small',
|
|
206
207
|
sx: {
|
|
@@ -211,7 +211,7 @@ var QrCodePLVContainer = function (_a) {
|
|
|
211
211
|
page = _b.sent();
|
|
212
212
|
canvas = document.createElement('canvas');
|
|
213
213
|
context = canvas.getContext('2d');
|
|
214
|
-
viewport = page.getViewport({ scale:
|
|
214
|
+
viewport = page.getViewport({ scale: 3 });
|
|
215
215
|
canvas.width = viewport.width;
|
|
216
216
|
canvas.height = viewport.height;
|
|
217
217
|
renderContext = {
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getLongFormattedDateTime = exports.formatDateByCountryCode = exports.toUTCToLocaleDate = exports.countryTimeZones = void 0;
|
|
3
|
+
exports.getLongFormattedDateTime = exports.formatDateByCountryCode = exports.toUTCToLocaleDate = exports.countryTimeZones = exports.isValidDate = void 0;
|
|
4
4
|
var date_fns_tz_1 = require("date-fns-tz");
|
|
5
5
|
var locale_1 = require("date-fns/locale");
|
|
6
6
|
var Enums_1 = require("./Enums");
|
|
7
7
|
var Tools_1 = require("./Tools");
|
|
8
|
+
function isValidDate(date) {
|
|
9
|
+
return date instanceof Date && !isNaN(date.getTime());
|
|
10
|
+
}
|
|
11
|
+
exports.isValidDate = isValidDate;
|
|
8
12
|
// Tableau de correspondance entre les codes de pays et les fuseaux horaires
|
|
9
13
|
exports.countryTimeZones = {
|
|
10
14
|
'FR': 'Europe/Paris',
|
|
@@ -1,6 +1,11 @@
|
|
|
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 = exports.APIMethod = exports.PartsApplicationType = exports.ProductType = exports.OrderPreference = exports.OrderState = exports.SlotAlgorithm = exports.VehiclePlateFormat = exports.RegistrationState = exports.SubscriptionPaymentInterval = exports.PrestationType = exports.PrestationState = exports.CountryCode = exports.SubscriptionState = exports.SubscriptionType = 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 = exports.PartsApplicationType = exports.ProductType = exports.OrderPreference = exports.OrderState = exports.SlotAlgorithm = exports.VehiclePlateFormat = exports.RegistrationState = exports.SubscriptionPaymentInterval = exports.PrestationType = exports.PrestationState = exports.CountryCode = exports.SubscriptionState = exports.SubscriptionType = exports.CustomerType = void 0;
|
|
4
|
+
var CustomerType;
|
|
5
|
+
(function (CustomerType) {
|
|
6
|
+
CustomerType["INDIVIDUAL"] = "INDIVIDUAL";
|
|
7
|
+
CustomerType["PROFESSIONAL"] = "PROFESSIONAL";
|
|
8
|
+
})(CustomerType = exports.CustomerType || (exports.CustomerType = {}));
|
|
4
9
|
var SubscriptionType;
|
|
5
10
|
(function (SubscriptionType) {
|
|
6
11
|
SubscriptionType["PRO_FREE"] = "PRO_FREE";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CustomerType } from "../helpers/Enums";
|
|
1
2
|
import Address from "./Address";
|
|
2
3
|
import Role from "./Role";
|
|
3
4
|
import User from "./User";
|
|
@@ -8,8 +9,24 @@ export default class Customer extends User {
|
|
|
8
9
|
key: string;
|
|
9
10
|
value: number;
|
|
10
11
|
}[];
|
|
12
|
+
/**
|
|
13
|
+
* Type de client (professionnel / particulier)
|
|
14
|
+
*/
|
|
15
|
+
type: CustomerType;
|
|
16
|
+
/**
|
|
17
|
+
* Raison sociale si client Professionnel
|
|
18
|
+
*/
|
|
19
|
+
companyName: string;
|
|
20
|
+
/**
|
|
21
|
+
* Téléphone de contact additionnel (souvent un fixe pour les pro)
|
|
22
|
+
*/
|
|
23
|
+
companyPhoneNumber: string;
|
|
24
|
+
/**
|
|
25
|
+
* Notes relatives au client
|
|
26
|
+
*/
|
|
27
|
+
notes: string;
|
|
11
28
|
constructor(id: string, roles: Role[] | undefined, firstname: string | undefined, lastname: string | undefined, avatar: string | undefined, addresses: Address[] | undefined, vehicles: Vehicle[], email: string | undefined, turnover: {
|
|
12
29
|
key: string;
|
|
13
30
|
value: number;
|
|
14
|
-
}[]);
|
|
31
|
+
}[], type: CustomerType, companyName: string, companyPhoneNumber: string, notes: string);
|
|
15
32
|
}
|
|
@@ -21,7 +21,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
21
21
|
var User_1 = __importDefault(require("./User"));
|
|
22
22
|
var Customer = /** @class */ (function (_super) {
|
|
23
23
|
__extends(Customer, _super);
|
|
24
|
-
function Customer(id, roles, firstname, lastname, avatar, addresses, vehicles, email, turnover) {
|
|
24
|
+
function Customer(id, roles, firstname, lastname, avatar, addresses, vehicles, email, turnover, type, companyName, companyPhoneNumber, notes) {
|
|
25
25
|
if (roles === void 0) { roles = []; }
|
|
26
26
|
if (firstname === void 0) { firstname = ''; }
|
|
27
27
|
if (lastname === void 0) { lastname = ''; }
|
|
@@ -31,6 +31,10 @@ var Customer = /** @class */ (function (_super) {
|
|
|
31
31
|
var _this = _super.call(this, id, roles, firstname, lastname, avatar, email) || this;
|
|
32
32
|
_this.vehicles = vehicles;
|
|
33
33
|
_this.turnover = turnover;
|
|
34
|
+
_this.type = type;
|
|
35
|
+
_this.companyName = companyName;
|
|
36
|
+
_this.companyPhoneNumber = companyPhoneNumber;
|
|
37
|
+
_this.notes = notes;
|
|
34
38
|
return _this;
|
|
35
39
|
}
|
|
36
40
|
return Customer;
|
package/index.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@movalib/movalib-commons",
|
|
3
|
-
"version": "1.59.
|
|
3
|
+
"version": "1.59.4",
|
|
4
4
|
"description": "Bibliothèque d'objets communs à l'ensemble des projets React de Movalib",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"private": false,
|
|
8
8
|
"scripts": {
|
|
9
|
-
"start": "webpack-dev-server --entry ./devIndex.tsx --open",
|
|
9
|
+
"start": "webpack-dev-server --entry ./devIndex.tsx --open --https",
|
|
10
10
|
"build": "rm -rf dist && tsc && npm run copy-assets",
|
|
11
11
|
"copy-assets": "cp -r src/assets/ dist/src/assets/ && cp -r src/style/ dist/src/style/",
|
|
12
12
|
"test": "echo \"Error: no test specified\" && exit 1",
|
package/src/MovaSignUp.tsx
CHANGED
|
@@ -302,7 +302,7 @@ const MovaSignUp: FunctionComponent<MovaSignUpProps> = ({ loading, movaAppType,
|
|
|
302
302
|
),
|
|
303
303
|
}}
|
|
304
304
|
/>
|
|
305
|
-
{openPhoneNumberInfo && <Alert severity="info" variant='standard'>
|
|
305
|
+
{openPhoneNumberInfo && <Alert severity="info" variant='standard'>Entrez le numéro de téléphone que vous avez utilisé pour réserver, afin de suivre facilement vos rendez-vous.</Alert>}
|
|
306
306
|
</>
|
|
307
307
|
}
|
|
308
308
|
<TextField
|
package/src/ScheduleFields.tsx
CHANGED
|
@@ -9,7 +9,7 @@ import Schedule from './models/Schedule';
|
|
|
9
9
|
import { CountryCode, DayOfWeek } from './helpers/Enums';
|
|
10
10
|
import Logger from './helpers/Logger';
|
|
11
11
|
import { flexCenter, getDayOfWeekIndex, getDayOfWeekLabel } from './helpers/Tools';
|
|
12
|
-
import { toUTCToLocaleDate } from './helpers/DateUtils';
|
|
12
|
+
import { isValidDate, toUTCToLocaleDate } from './helpers/DateUtils';
|
|
13
13
|
import ContentCopyIcon from '@mui/icons-material/ContentCopy';
|
|
14
14
|
|
|
15
15
|
|
|
@@ -160,7 +160,7 @@ const ScheduleFields: FunctionComponent<ScheduleFieldsProps> = ({ timePickerStep
|
|
|
160
160
|
|
|
161
161
|
const handleIntervalChange = (dayIndex: number, intervalIndex: number, type: 'startTime' | 'endTime') =>
|
|
162
162
|
(newValue: "" | Date | null) => {
|
|
163
|
-
|
|
163
|
+
|
|
164
164
|
const newSchedule = [...schedule];
|
|
165
165
|
|
|
166
166
|
newSchedule[dayIndex].intervals[intervalIndex][type] = newValue!;
|
|
@@ -180,8 +180,8 @@ const ScheduleFields: FunctionComponent<ScheduleFieldsProps> = ({ timePickerStep
|
|
|
180
180
|
|
|
181
181
|
setSchedule(newSchedule);
|
|
182
182
|
|
|
183
|
-
if(type === 'endTime'){
|
|
184
|
-
// On invoque la callback de mise à jour
|
|
183
|
+
if(type === 'endTime' || (type === 'startTime' && isValidDate(newSchedule[dayIndex].intervals[intervalIndex].endTime))){
|
|
184
|
+
// On invoque la callback de mise à jour sur les deux intervalles, toutefois on contrôle que l'intervalle de fin est alimentée
|
|
185
185
|
onChange(newSchedule);
|
|
186
186
|
}
|
|
187
187
|
|
|
@@ -264,7 +264,7 @@ const ScheduleFields: FunctionComponent<ScheduleFieldsProps> = ({ timePickerStep
|
|
|
264
264
|
value={interval.startTime}
|
|
265
265
|
formatDensity='dense'
|
|
266
266
|
closeOnSelect={false}
|
|
267
|
-
|
|
267
|
+
onChange={handleIntervalChange(dayIndex, intervalIndex, 'startTime')}
|
|
268
268
|
slotProps={{
|
|
269
269
|
textField: {
|
|
270
270
|
size: 'small',
|
|
@@ -286,7 +286,7 @@ const ScheduleFields: FunctionComponent<ScheduleFieldsProps> = ({ timePickerStep
|
|
|
286
286
|
disabled={!(interval.startTime instanceof Date)}
|
|
287
287
|
value={interval.endTime}
|
|
288
288
|
formatDensity='dense'
|
|
289
|
-
|
|
289
|
+
onChange={handleIntervalChange(dayIndex, intervalIndex, 'endTime')}
|
|
290
290
|
closeOnSelect={false}
|
|
291
291
|
slotProps={{
|
|
292
292
|
textField: {
|
|
@@ -161,7 +161,7 @@ export const QrCodePLVContainer = ({ data }: { data: string }) => {
|
|
|
161
161
|
const canvas = document.createElement('canvas');
|
|
162
162
|
const context = canvas.getContext('2d');
|
|
163
163
|
|
|
164
|
-
const viewport = page.getViewport({ scale:
|
|
164
|
+
const viewport = page.getViewport({ scale: 3});
|
|
165
165
|
canvas.width = viewport.width;
|
|
166
166
|
canvas.height = viewport.height;
|
|
167
167
|
|
package/src/helpers/DateUtils.ts
CHANGED
|
@@ -3,6 +3,10 @@ import { fr } from 'date-fns/locale';
|
|
|
3
3
|
import { DateFormatTypes } from './Enums';
|
|
4
4
|
import { capitalizeFirstLetter } from './Tools';
|
|
5
5
|
|
|
6
|
+
export function isValidDate(date: unknown): date is Date {
|
|
7
|
+
return date instanceof Date && !isNaN(date.getTime());
|
|
8
|
+
}
|
|
9
|
+
|
|
6
10
|
// Tableau de correspondance entre les codes de pays et les fuseaux horaires
|
|
7
11
|
export const countryTimeZones: { [key: string]: string } = {
|
|
8
12
|
'FR': 'Europe/Paris',
|
package/src/helpers/Enums.ts
CHANGED
package/src/models/Customer.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CustomerType } from "../helpers/Enums";
|
|
1
2
|
import Address from "./Address";
|
|
2
3
|
import Role from "./Role";
|
|
3
4
|
import User from "./User";
|
|
@@ -9,6 +10,25 @@ export default class Customer extends User {
|
|
|
9
10
|
// Properties
|
|
10
11
|
vehicles: Vehicle[];
|
|
11
12
|
turnover: { key: string, value: number }[];
|
|
13
|
+
/**
|
|
14
|
+
* Type de client (professionnel / particulier)
|
|
15
|
+
*/
|
|
16
|
+
type: CustomerType;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Raison sociale si client Professionnel
|
|
20
|
+
*/
|
|
21
|
+
companyName: string;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Téléphone de contact additionnel (souvent un fixe pour les pro)
|
|
25
|
+
*/
|
|
26
|
+
companyPhoneNumber: string;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Notes relatives au client
|
|
30
|
+
*/
|
|
31
|
+
notes: string;
|
|
12
32
|
|
|
13
33
|
constructor(
|
|
14
34
|
id: string,
|
|
@@ -19,11 +39,19 @@ export default class Customer extends User {
|
|
|
19
39
|
addresses : Address[] = [],
|
|
20
40
|
vehicles: Vehicle[],
|
|
21
41
|
email: string = '',
|
|
22
|
-
turnover: { key: string, value: number }[]
|
|
42
|
+
turnover: { key: string, value: number }[],
|
|
43
|
+
type: CustomerType,
|
|
44
|
+
companyName: string,
|
|
45
|
+
companyPhoneNumber: string,
|
|
46
|
+
notes: string) {
|
|
23
47
|
|
|
24
48
|
super(id, roles, firstname, lastname, avatar, email);
|
|
25
49
|
|
|
26
50
|
this.vehicles = vehicles;
|
|
27
51
|
this.turnover = turnover;
|
|
52
|
+
this.type = type;
|
|
53
|
+
this.companyName = companyName;
|
|
54
|
+
this.companyPhoneNumber = companyPhoneNumber;
|
|
55
|
+
this.notes = notes;
|
|
28
56
|
}
|
|
29
57
|
}
|
package/webpack.config.js
CHANGED
|
@@ -41,4 +41,13 @@ module.exports = {
|
|
|
41
41
|
'process.env.REACT_APP_MOVALIB_APP_URL': JSON.stringify(process.env.REACT_APP_MOVALIB_APP_URL)
|
|
42
42
|
}),
|
|
43
43
|
],
|
|
44
|
+
|
|
45
|
+
devServer: {
|
|
46
|
+
https: {
|
|
47
|
+
cert: path.resolve(__dirname, '/Users/Dimitri/localhost.pem'),
|
|
48
|
+
key: path.resolve(__dirname, '/Users/Dimitri/localhost-key.pem'),
|
|
49
|
+
},
|
|
50
|
+
open: true,
|
|
51
|
+
port: 8080, // ou un autre port si nécessaire
|
|
52
|
+
},
|
|
44
53
|
};
|