Contexto
Se ha desarrollado un selector de fechas que muestra una lista de fechas, con tres fechas anteriores, la fecha actual en el medio y tres fechas siguientes. Los botones de "Anterior" y "Siguiente" están destinados a mover esta lista de fechas de manera circular. Sin embargo, la implementación actual no cumple con la funcionalidad deseada, ya que al hacer clic en "Siguiente" se mueve a la próxima disponibilidad más allá de las fechas habilitadas.
Problema
El problema principal es que, al hacer clic en los botones de "Anterior" y "Siguiente", el selector no se desplaza correctamente a través de las fechas habilitadas, sino que se mueve a la siguiente fecha disponible, lo que provoca que no pueda retroceder o avanzar de manera circular como se espera.
Código Actual
La función handleDateButtonClick
, que gestiona el clic en los botones de fecha, establece el nuevo selectedDate
, pero no está ajustando adecuadamente la lógica para que el cambio refleje sólo la adición o sustracción de una fecha.
Solución Propuesta
Para solucionar el problema, se debe modificar la función handleDateButtonClick
para que en lugar de permitir el avance a la próxima fecha, sólo cambie la fecha seleccionada a la fecha siguiente o anterior en la lista de fechas disponible:
- Modificar la función
handleDateButtonClick
: Cambiar la lógica para que siempre se mueva solo una fecha hacia adelante o atrás.
const handleDateButtonClick = (direction) => {
if (isAnimating) return;
setIsAnimating(true);
let newDate;
if (direction === 'next') {
newDate = nextDates[0]; // Solo hacer avanzar a la primera fecha siguiente
} else {
newDate = prevDates[prevDates.length - 1]; // Solo retroceder a la última fecha anterior
}
setTimeout(() => {
setSelectedDate(newDate);
setIsAnimating(false);
}, 200);
};
- Actualizar los botones: Llamar a
handleDateButtonClick
con un argumento que indique la dirección:
<Button onClick={() => handleDateButtonClick('prev')}>
Anterior
</Button>
<Button onClick={() => handleDateButtonClick('next')}>
Siguiente
</Button>
Resumen
El enfoque de solución propuesto asegura que, al hacer clic en los botones de "Anterior" y "Siguiente", solo se cambiará al siguiente o anterior en la lista de fechas habilitadas, manteniendo la lógica circular necesaria. Esta implementación mejorará la experiencia del usuario al seleccionar fechas de manera intuitiva y esperada.