Checkpoint: Correction du problème d'affichage du canvas de signature : utilisation d'une callback ref (initCanvas) au lieu d'un useEffect conditionnel pour initialiser le fond blanc du canvas dès son montage dans le DOM

This commit is contained in:
Manus
2026-03-14 19:13:45 -04:00
parent 20be9c6060
commit cf886a1adb
2 changed files with 10 additions and 7 deletions

View File

@@ -46,10 +46,9 @@ function SignaturesSection() {
const isDrawingRef = useRef(false); const isDrawingRef = useRef(false);
const lastPosRef = useRef<{ x: number; y: number } | null>(null); const lastPosRef = useRef<{ x: number; y: number } | null>(null);
// Initialize canvas // Initialize canvas via callback ref — fires as soon as the element mounts
useEffect(() => { const initCanvas = useCallback((canvas: HTMLCanvasElement | null) => {
if (mode !== "draw") return; (canvasRef as React.MutableRefObject<HTMLCanvasElement | null>).current = canvas;
const canvas = canvasRef.current;
if (!canvas) return; if (!canvas) return;
const ctx = canvas.getContext("2d"); const ctx = canvas.getContext("2d");
if (!ctx) return; if (!ctx) return;
@@ -59,7 +58,7 @@ function SignaturesSection() {
ctx.lineWidth = 2; ctx.lineWidth = 2;
ctx.lineCap = "round"; ctx.lineCap = "round";
ctx.lineJoin = "round"; ctx.lineJoin = "round";
}, [mode]); }, []);
const getPos = useCallback((e: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>, canvas: HTMLCanvasElement) => { const getPos = useCallback((e: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>, canvas: HTMLCanvasElement) => {
const rect = canvas.getBoundingClientRect(); const rect = canvas.getBoundingClientRect();
@@ -269,7 +268,7 @@ function SignaturesSection() {
<Label className="font-medium">Dessinez votre signature ci-dessous</Label> <Label className="font-medium">Dessinez votre signature ci-dessous</Label>
<div className="relative rounded-lg border-2 border-slate-300 bg-white overflow-hidden" style={{ touchAction: "none" }}> <div className="relative rounded-lg border-2 border-slate-300 bg-white overflow-hidden" style={{ touchAction: "none" }}>
<canvas <canvas
ref={canvasRef} ref={initCanvas}
width={600} width={600}
height={180} height={180}
className="w-full cursor-crosshair block" className="w-full cursor-crosshair block"

View File

@@ -526,4 +526,8 @@
- [x] Gérer les événements souris (mousedown, mousemove, mouseup) et tactile (touch) - [x] Gérer les événements souris (mousedown, mousemove, mouseup) et tactile (touch)
- [x] Ajouter un bouton "Effacer" pour réinitialiser le canvas - [x] Ajouter un bouton "Effacer" pour réinitialiser le canvas
- [x] Exporter le canvas en PNG base64 pour l'upload - [x] Exporter le canvas en PNG base64 pour l'upload
- [ ] Tester le dessin à la souris et l'enregistrement - [x] Tester le dessin à la souris et l'enregistrement
## Correction affichage canvas signature
- [x] Corriger le problème d'initialisation du canvas (fond blanc non affiché)
- [x] S'assurer que le canvas est visible et fonctionnel dans l'onglet Signatures