60af81c104
Archivos de issue para el trabajo de kanban de las ultimas iteraciones: - 0089: tiempo maximo por columna con borde rojo (incluye followup popover con seleccion de unidad min/h/d/sem/mes). - 0090: seleccion aleatoria por columna con animacion de ruleta. Ya con fix de no mostrar en columnas Done. - 0092: archivo automatico para cards en columnas Done con +30 dias. - 0093: reporte diario al pulsar el numero del dia en el calendario. Los issues 0088 y 0091 ya estaban registrados.
51 lines
2.1 KiB
Markdown
51 lines
2.1 KiB
Markdown
---
|
|
id: "0090"
|
|
title: "kanban: Seleccionar Aleatorio en columna con animacion de ruleta"
|
|
status: open
|
|
created_at: 2026-05-14
|
|
priority: medium
|
|
app: kanban
|
|
---
|
|
|
|
## Problema
|
|
|
|
Cuando hay muchas cards en una columna, elegir cual abordar "al azar" es ruido cognitivo. Necesitamos boton "Seleccionar Aleatorio" que respete los filtros activos y excluya cards bloqueadas.
|
|
|
|
## Solucion
|
|
|
|
### Frontend (puro, sin backend)
|
|
|
|
- `KanbanColumn` menu contextual: nueva entrada "Seleccionar Aleatorio" (`IconDice5`), `data-test="column-random-pick"`. Deshabilitada cuando `cards.filter(c => !c.locked).length === 0`.
|
|
- Prop `onPickRandom(columnId)` propagada desde `KanbanColumn` a `App.tsx`.
|
|
- `App.tsx` handler `handlePickRandom`:
|
|
- Lee cards del column id via `cardsByColumn` (ya respeta los filtros).
|
|
- Excluye `card.locked === true`.
|
|
- Si `length === 0`: notificacion warning.
|
|
- Si `length === 1`: scroll + flash verde directo.
|
|
- Si `length > 1`: ruleta animada.
|
|
- Ruleta:
|
|
- Seleccion criptografica con `crypto.getRandomValues`.
|
|
- Cycle: 2 vueltas completas + offset hasta la ganadora.
|
|
- Decay temporal cubic: 50ms inicial -> 220ms final (efecto desacelerar).
|
|
- CSS class `.kanban-roulette-active` aplicada a la card en curso, `scrollIntoView` automatico para seguirla.
|
|
- Al final: `.kanban-roulette-winner` con pulso verde (~1.6s).
|
|
- CSS en `src/styles/roulette.css`, importado desde `main.tsx`.
|
|
|
|
### Tests
|
|
|
|
- Verificacion manual: probar en columna con varias cards, con y sin filtros activos, con cards bloqueadas. Comportamiento esperado: solo unlocked-and-filtered participan.
|
|
- E2E Playwright queda fuera de scope automatizado por timing visual y por necesitar cards reales en una columna concreta.
|
|
|
|
## Criterios de aceptacion
|
|
|
|
- [ ] Menu contextual "Seleccionar Aleatorio" en cada columna.
|
|
- [ ] Cards bloqueadas excluidas siempre.
|
|
- [ ] Si hay filtro activo, solo cards visibles participan.
|
|
- [ ] Animacion ruleta visible, no se queda colgada.
|
|
- [ ] Ganadora final con flash verde + scroll a su posicion.
|
|
|
|
## Rama / commits
|
|
|
|
- Rama: `issue/0090-kanban-column-random-pick`
|
|
- Merge `--no-ff` a master.
|