From 7c0ebd6923d821a4fa364b54deddca9439fbeca5 Mon Sep 17 00:00:00 2001 From: Louis Mazin Date: Sun, 20 Sep 2026 04:44:16 +0200 Subject: [PATCH] test --- frontend/src/pages/TimeClockPage.jsx | 122 +++++++++++++++++++-------- 1 file changed, 89 insertions(+), 33 deletions(-) diff --git a/frontend/src/pages/TimeClockPage.jsx b/frontend/src/pages/TimeClockPage.jsx index 473edb5..35e74e2 100644 --- a/frontend/src/pages/TimeClockPage.jsx +++ b/frontend/src/pages/TimeClockPage.jsx @@ -335,6 +335,7 @@ const TimePicker = ({ placeholder = 'Choisir une heure', }) => { const [open, setOpen] = useState(false); + const touchStartY = useRef(null); const [hours = '', minutes = ''] = value ? value.split(':') @@ -363,12 +364,9 @@ const TimePicker = ({ const changeHour = (direction) => { const currentHour = Number(hours || 0); - const currentMinute = Number( - minutes || 0, - ); + const currentMinute = Number(minutes || 0); - let nextHour = - currentHour + direction; + let nextHour = currentHour + direction; if (nextHour < 0) nextHour = 23; if (nextHour > 23) nextHour = 0; @@ -381,13 +379,9 @@ const TimePicker = ({ const changeMinute = (direction) => { const currentHour = Number(hours || 0); - const currentMinute = Number( - minutes || 0, - ); - - let nextMinute = - currentMinute + direction; + const currentMinute = Number(minutes || 0); + let nextMinute = currentMinute + direction; let nextHour = currentHour; if (nextMinute < 0) { @@ -419,7 +413,7 @@ const TimePicker = ({ event.preventDefault(); event.stopPropagation(); - // Un événement de molette = une seule unité + // Une molette = une seule unité const direction = event.deltaY > 0 ? 1 : -1; @@ -430,6 +424,44 @@ const TimePicker = ({ } }; + const handleTouchStart = (event) => { + touchStartY.current = + event.touches[0].clientY; + }; + + const handleTouchEnd = ( + event, + type, + ) => { + if (touchStartY.current === null) { + return; + } + + const touchEndY = + event.changedTouches[0].clientY; + + const deltaY = + touchStartY.current - touchEndY; + + touchStartY.current = null; + + // Ignore les tout petits mouvements + if (Math.abs(deltaY) < 20) { + return; + } + + // Swipe vers le haut = +1 + // Swipe vers le bas = -1 + const direction = + deltaY > 0 ? 1 : -1; + + if (type === 'hours') { + changeHour(direction); + } else { + changeMinute(direction); + } + }; + const clearTime = () => { onChange(''); setOpen(false); @@ -482,20 +514,30 @@ const TimePicker = ({ {/* HEURES */}
handleWheel( event, 'hours', ) } + onTouchStart={handleTouchStart} + onTouchEnd={(event) => + handleTouchEnd( + event, + 'hours', + ) + } >
- {hourOptions[ - (Number(hours || 0) + 23) % - 24 - ]} + { + hourOptions[ + (Number(hours || 0) + + 23) % + 24 + ] + } @@ -503,10 +545,13 @@ const TimePicker = ({ - {hourOptions[ - (Number(hours || 0) + 1) % - 24 - ]} + { + hourOptions[ + (Number(hours || 0) + + 1) % + 24 + ] + }
@@ -520,21 +565,30 @@ const TimePicker = ({ {/* MINUTES */}
handleWheel( event, 'minutes', ) } + onTouchStart={handleTouchStart} + onTouchEnd={(event) => + handleTouchEnd( + event, + 'minutes', + ) + } >
- {minuteOptions[ - (Number(minutes || 0) + - 59) % - 60 - ]} + { + minuteOptions[ + (Number(minutes || 0) + + 59) % + 60 + ] + } @@ -542,17 +596,20 @@ const TimePicker = ({ - {minuteOptions[ - (Number(minutes || 0) + 1) % - 60 - ]} + { + minuteOptions[ + (Number(minutes || 0) + + 1) % + 60 + ] + }

- Molette pour modifier + Molette ou glissement pour modifier

@@ -572,7 +629,6 @@ const TimePicker = ({ ); }; - /* ========================================================= PAGE ========================================================= */