feat: add refresh button on web + swipe-to-refresh on mobile #61
Labels
No labels
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/simpl-liste#61
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Ref #59
Actuellement le web se rafraîchit uniquement via WebSocket (
useSync.ts). Il n'y a aucun moyen de forcer un refresh manuel. Sur mobile, le polling 500ms recharge les données, mais il n'y a pas de geste pull-to-refresh.Travail à faire
Web
TaskList.tsx(icôneRefreshCwde lucide)router.refresh()avec un état de loading visuelMobile
RefreshControlsur lesFlatList/DraggableFlatListdansapp/(tabs)/index.tsxetapp/list/[id].tsxloadData()avec indicateur visuelFichiers concernés
web/src/components/TaskList.tsx— bouton refreshapp/(tabs)/index.tsx— RefreshControl mobileapp/list/[id].tsx— RefreshControl mobileCritères d'acceptation
Complexité
Simple
maximus referenced this issue2026-04-09 01:00:23 +00:00
Réouverture — swipe-to-refresh ne fonctionne pas
Le
RefreshControlajouté dans la PR #64 ne déclenche aucun feedback visuel sur mobile. Cause : conflit de gesture entreDraggableFlatListetRefreshControl.Diagnostic
react-native-draggable-flatlistenveloppe leFlatListinterne dans unGestureDetectoravecGesture.Pan()(DraggableFlatList.tsx:376). Même si la proprefreshControlest correctement forwardée vers le FlatList sous-jacent ({...props}ligne 386), leGestureDetectorextérieur intercepte les mouvements verticaux avant que leRefreshControlpuisse les détecter — particulièrement quandactivationDistance={0}(mode drag actif en sortposition, qui est le défaut).Changements à faire
Mobile — remplacer le swipe par un bouton dans la toolbar
RefreshControlet le staterefreshingdeapp/(tabs)/index.tsx(dead code, ne fonctionne pas)RefreshControldansapp/(tabs)/index.tsxRefreshControlet le staterefreshingdeapp/list/[id].tsxRefreshControldansapp/list/[id].tsxRefreshCwdelucide-react-native) dans la toolbar de l'inbox (app/(tabs)/index.tsx), au même endroit que les boutons Search/Download/Sort/Filterapp/list/[id].tsx)loadTasks()/loadData()avec une animationspinpendant le refresh (cohérent avec le bouton refresh web)Pourquoi cette approche
RefreshCw)RefreshControlqui ne marche pas plutôt que de le laisser en placeAlternatives écartées :
position→ incohérentCritères d'acceptation
RefreshControlou staterefreshinglié au swipe (dead code retiré)RefreshCwdelucide-react-nativeavec la couleur cohérente (isDark ? '#A0A0A0' : '#6B6B6B')