allaw-ui 5.2.6 → 5.2.8
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.
|
@@ -27,6 +27,18 @@ export interface InputProps {
|
|
|
27
27
|
}
|
|
28
28
|
export interface InputRef {
|
|
29
29
|
validate: () => boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Force l'état isTouched du composant.
|
|
32
|
+
* Utile pour synchroniser avec des systèmes de validation externes (ex: React Hook Form).
|
|
33
|
+
* @param isTouched - true pour marquer le champ comme touché, false sinon
|
|
34
|
+
*/
|
|
35
|
+
setTouched: (isTouched: boolean) => void;
|
|
36
|
+
/**
|
|
37
|
+
* Force l'affichage d'une erreur spécifique et marque le champ comme touché.
|
|
38
|
+
* Utile pour afficher des erreurs de validation externe (ex: React Hook Form).
|
|
39
|
+
* @param message - Le message d'erreur à afficher. Passer une chaîne vide pour effacer l'erreur.
|
|
40
|
+
*/
|
|
41
|
+
showError: (message: string) => void;
|
|
30
42
|
}
|
|
31
43
|
declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<InputRef>>;
|
|
32
44
|
export default Input;
|
|
@@ -52,9 +52,18 @@ var Input = forwardRef(function (_a, ref) {
|
|
|
52
52
|
// );
|
|
53
53
|
onError === null || onError === void 0 ? void 0 : onError(errorMessage);
|
|
54
54
|
return !errorMessage;
|
|
55
|
-
}, [isRequired, value, validate, onError
|
|
55
|
+
}, [isRequired, value, validate, onError]);
|
|
56
56
|
useImperativeHandle(ref, function () { return ({
|
|
57
57
|
validate: validateInput,
|
|
58
|
+
setTouched: function (touched) {
|
|
59
|
+
console.log("[Input] setTouched(".concat(touched, ")"));
|
|
60
|
+
setIsTouched(touched);
|
|
61
|
+
},
|
|
62
|
+
showError: function (message) {
|
|
63
|
+
console.log("[Input] showError(\"".concat(message, "\")"));
|
|
64
|
+
setError(message);
|
|
65
|
+
setIsTouched(true);
|
|
66
|
+
},
|
|
58
67
|
}); });
|
|
59
68
|
var handleChange = function (e) {
|
|
60
69
|
var newValue = e.target.value;
|
|
@@ -264,17 +264,10 @@ var FileUploader = function (_a) {
|
|
|
264
264
|
*/
|
|
265
265
|
var cropImageToBlob = function (imageUrl, cropMetadata, outputWidth, outputHeight) { return __awaiter(void 0, void 0, void 0, function () {
|
|
266
266
|
return __generator(this, function (_a) {
|
|
267
|
-
console.log("🔪 [FileUploader] cropImageToBlob appelé");
|
|
268
|
-
console.log(" - imageUrl:", imageUrl);
|
|
269
|
-
console.log(" - cropMetadata:", cropMetadata);
|
|
270
|
-
console.log(" - outputWidth:", outputWidth, "outputHeight:", outputHeight);
|
|
271
|
-
console.log(" - cropArea dimensions:", cropMetadata.cropWidth || "default", "x", cropMetadata.cropHeight || "default");
|
|
272
267
|
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
273
268
|
var img = new window.Image();
|
|
274
269
|
img.crossOrigin = "anonymous";
|
|
275
270
|
img.onload = function () {
|
|
276
|
-
console.log("✅ [FileUploader] Image chargée dans cropImageToBlob");
|
|
277
|
-
console.log(" - img.width:", img.width, "img.height:", img.height);
|
|
278
271
|
try {
|
|
279
272
|
// Créer un canvas aux dimensions de sortie
|
|
280
273
|
var canvas = document.createElement("canvas");
|
|
@@ -376,10 +369,8 @@ var FileUploader = function (_a) {
|
|
|
376
369
|
ctx.putImageData(imageData, 0, 0);
|
|
377
370
|
}
|
|
378
371
|
// Convertir en Blob PNG
|
|
379
|
-
console.log("🖼️ [FileUploader] Conversion canvas vers Blob...");
|
|
380
372
|
canvas.toBlob(function (blob) {
|
|
381
373
|
if (blob) {
|
|
382
|
-
console.log("✅ [FileUploader] Blob créé avec succès, taille:", blob.size);
|
|
383
374
|
resolve(blob);
|
|
384
375
|
}
|
|
385
376
|
else {
|
|
@@ -393,13 +384,10 @@ var FileUploader = function (_a) {
|
|
|
393
384
|
reject(error);
|
|
394
385
|
}
|
|
395
386
|
};
|
|
396
|
-
img.onerror = function (
|
|
387
|
+
img.onerror = function () {
|
|
397
388
|
console.error("❌ [FileUploader] Erreur de chargement de l'image");
|
|
398
|
-
console.error(" - imageUrl:", imageUrl);
|
|
399
|
-
console.error(" - error:", error);
|
|
400
389
|
reject(new Error("Échec du chargement de l'image"));
|
|
401
390
|
};
|
|
402
|
-
console.log("📤 [FileUploader] Définition de img.src:", imageUrl);
|
|
403
391
|
img.src = imageUrl;
|
|
404
392
|
})];
|
|
405
393
|
});
|
|
@@ -409,17 +397,9 @@ var FileUploader = function (_a) {
|
|
|
409
397
|
};
|
|
410
398
|
var handleCropConfirm = function (cropMetadata) { return __awaiter(void 0, void 0, void 0, function () {
|
|
411
399
|
var dimensions, fileToUse, imageToCropUrl, croppedBlob, croppedFile, croppedContent, croppedUrl, error_2;
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
switch (_c.label) {
|
|
400
|
+
return __generator(this, function (_a) {
|
|
401
|
+
switch (_a.label) {
|
|
415
402
|
case 0:
|
|
416
|
-
console.log("✂️ [FileUploader] handleCropConfirm appelé");
|
|
417
|
-
console.log(" - cropMetadata:", cropMetadata);
|
|
418
|
-
console.log(" - clientSideCrop:", clientSideCrop);
|
|
419
|
-
console.log(" - selectedFile:", selectedFile === null || selectedFile === void 0 ? void 0 : selectedFile.name, "size:", selectedFile === null || selectedFile === void 0 ? void 0 : selectedFile.size);
|
|
420
|
-
console.log(" - originalFileRef.current:", (_a = originalFileRef.current) === null || _a === void 0 ? void 0 : _a.name, "size:", (_b = originalFileRef.current) === null || _b === void 0 ? void 0 : _b.size);
|
|
421
|
-
console.log(" - originalImageUrlRef.current:", originalImageUrlRef.current);
|
|
422
|
-
console.log(" - previewUrl:", previewUrl);
|
|
423
403
|
setShowCropper(false);
|
|
424
404
|
setCropMetadata(cropMetadata);
|
|
425
405
|
if (autoManageProgress) {
|
|
@@ -427,36 +407,26 @@ var FileUploader = function (_a) {
|
|
|
427
407
|
}
|
|
428
408
|
if (!(selectedFile && fileContent)) return [3 /*break*/, 10];
|
|
429
409
|
if (!clientSideCrop) return [3 /*break*/, 9];
|
|
430
|
-
|
|
410
|
+
_a.label = 1;
|
|
431
411
|
case 1:
|
|
432
|
-
|
|
412
|
+
_a.trys.push([1, 7, , 8]);
|
|
433
413
|
dimensions = cropOutputDimensions[cropMetadata.shape] ||
|
|
434
414
|
cropOutputDimensions.square || { width: 200, height: 200 };
|
|
435
|
-
console.log("📐 [FileUploader] Dimensions de sortie:", dimensions);
|
|
436
415
|
fileToUse = originalFileRef.current || selectedFile;
|
|
437
|
-
console.log("📁 [FileUploader] Fichier à utiliser pour le crop:", fileToUse.name, "size:", fileToUse.size, "type:", fileToUse.type);
|
|
438
416
|
imageToCropUrl = URL.createObjectURL(fileToUse);
|
|
439
|
-
|
|
440
|
-
_c.label = 2;
|
|
417
|
+
_a.label = 2;
|
|
441
418
|
case 2:
|
|
442
|
-
|
|
443
|
-
// Cropper l'image côté client
|
|
444
|
-
console.log("🔄 [FileUploader] Appel de cropImageToBlob...");
|
|
419
|
+
_a.trys.push([2, , 5, 6]);
|
|
445
420
|
return [4 /*yield*/, cropImageToBlob(imageToCropUrl, cropMetadata, dimensions.width, dimensions.height)];
|
|
446
421
|
case 3:
|
|
447
|
-
croppedBlob =
|
|
448
|
-
console.log("✅ [FileUploader] cropImageToBlob terminé, blob size:", croppedBlob.size);
|
|
422
|
+
croppedBlob = _a.sent();
|
|
449
423
|
croppedFile = new File([croppedBlob], fileToUse.name.replace(/\.[^/.]+$/, ".png"), // Remplacer l'extension par .png
|
|
450
424
|
{ type: "image/png" });
|
|
451
|
-
console.log("📄 [FileUploader] File croppé créé:", croppedFile.name, "size:", croppedFile.size);
|
|
452
425
|
return [4 /*yield*/, croppedFile.arrayBuffer()];
|
|
453
426
|
case 4:
|
|
454
|
-
croppedContent =
|
|
455
|
-
console.log("📦 [FileUploader] Contenu du fichier croppé lu, size:", croppedContent.byteLength);
|
|
427
|
+
croppedContent = _a.sent();
|
|
456
428
|
croppedUrl = URL.createObjectURL(croppedBlob);
|
|
457
|
-
console.log("🖼️ [FileUploader] URL blob créée pour la preview:", croppedUrl);
|
|
458
429
|
if (previewUrl && !initialPreviewUrl) {
|
|
459
|
-
console.log("🗑️ [FileUploader] Révoquement de l'ancienne previewUrl:", previewUrl);
|
|
460
430
|
URL.revokeObjectURL(previewUrl);
|
|
461
431
|
}
|
|
462
432
|
setPreviewUrl(croppedUrl);
|
|
@@ -467,28 +437,24 @@ var FileUploader = function (_a) {
|
|
|
467
437
|
// Plus besoin d'appliquer les transformations CSS
|
|
468
438
|
setCropMetadata(null);
|
|
469
439
|
// Appeler onFileRead avec le fichier croppé (pas de cropMetadata car déjà croppé)
|
|
470
|
-
console.log("📞 [FileUploader] Appel de onFileRead avec le fichier croppé");
|
|
471
440
|
onFileRead === null || onFileRead === void 0 ? void 0 : onFileRead(croppedFile, croppedContent);
|
|
472
441
|
return [3 /*break*/, 6];
|
|
473
442
|
case 5:
|
|
474
443
|
// Toujours nettoyer l'URL blob temporaire créée pour le crop
|
|
475
|
-
console.log("🗑️ [FileUploader] Révoquement de l'URL blob temporaire:", imageToCropUrl);
|
|
476
444
|
URL.revokeObjectURL(imageToCropUrl);
|
|
477
445
|
return [7 /*endfinally*/];
|
|
478
446
|
case 6: return [3 /*break*/, 8];
|
|
479
447
|
case 7:
|
|
480
|
-
error_2 =
|
|
448
|
+
error_2 = _a.sent();
|
|
481
449
|
console.error("❌ [FileUploader] Erreur lors du crop de l'image:", error_2);
|
|
482
|
-
console.error(" - error details:", error_2);
|
|
483
450
|
// En cas d'erreur, fallback sur l'image originale avec métadonnées
|
|
484
|
-
console.log("🔄 [FileUploader] Fallback sur l'image originale");
|
|
485
451
|
onFileRead === null || onFileRead === void 0 ? void 0 : onFileRead(selectedFile, fileContent, cropMetadata);
|
|
486
452
|
return [3 /*break*/, 8];
|
|
487
453
|
case 8: return [3 /*break*/, 10];
|
|
488
454
|
case 9:
|
|
489
455
|
// Passer l'image originale avec les métadonnées au serveur
|
|
490
456
|
onFileRead === null || onFileRead === void 0 ? void 0 : onFileRead(selectedFile, fileContent, cropMetadata);
|
|
491
|
-
|
|
457
|
+
_a.label = 10;
|
|
492
458
|
case 10: return [2 /*return*/];
|
|
493
459
|
}
|
|
494
460
|
});
|