[ZenFlow Mobile] Questionnaire custom disparaît après prise de photo sur les Issues
Resolved 💬 3 comments Opened Dec 29, 2025 by thb Closed Feb 12, 2026
Description du problème
Lors de la création ou édition d'une Issue (fiche de repérage) sur l'app mobile ZenFlow, le questionnaire custom (formulaire dynamique) disparaît après avoir pris une photo.
Comportement actuel
- L'utilisateur crée une nouvelle Issue ou édite une Issue existante
- L'utilisateur prend une photo via "Appareil photo"
- BUG: Le questionnaire custom disparaît
- Pour le faire réapparaître, il faut cliquer sur "Éditer" puis "Mettre à jour"
Comportement attendu
Le questionnaire custom doit rester visible et conserver ses valeurs après la prise de photo. L'utilisateur doit pouvoir remplir le formulaire et prendre des photos dans n'importe quel ordre.
Analyse technique
Cause racine
Le problème est une chaîne de réactions liée au state management et au comportement de React Query:
- Lancement de la caméra → L'app passe en arrière-plan (sur certains appareils Android notamment)
- Retour au premier plan → React Query déclenche un refetch de l'Issue (comportement par défaut avec
refetchOnWindowFocus: trueetstaleTime: 0) - Cascade de réinitialisation:
IssueDynamicFormreçoit les nouvelles données avec l'anciencustom_data- L'effet
useEffectdansIssueDynamicForm.tsx(lignes 36-40) réinitialisecustomData DynamicForm.tsxreçoit de nouveauxinitialValueset l'effet (lignes 34-36) réinitialiseformValues
- Disparition des champs conditionnels → Les champs qui dépendent d'autres valeurs (conditions) disparaissent car leurs conditions ne sont plus remplies
Fichiers concernés
zenflow/zenflow-mobile/lib/hooks/createResourceQueries.ts- Configuration React Queryzenflow/zenflow-mobile/components/issues/IssueDynamicForm.tsx- Gestion du formulaire customzenflow/zenflow-mobile/components/forms/DynamicForm.tsx- Composant formulaire génériquezenflow/zenflow-mobile/components/attachments/AttachmentGallery.tsx- Gestion des photoszenflow/zenflow-mobile/app/issues/[id].tsx- Écran de détail/édition Issue
Extrait de code problématique
// DynamicForm.tsx - L'effet qui reset les valeurs
useEffect(() => {
setFormValues(initialValues);
}, [initialValues]);
// IssueDynamicForm.tsx - L'effet qui propage le reset
useEffect(() => {
if (issue.custom_data) {
setCustomData(issue.custom_data);
}
}, [issue.custom_data]);
Solution proposée
Option recommandée: Combinaison de plusieurs corrections
- Désactiver
refetchOnWindowFocuspour les queries de ressources individuelles (useOne) - Augmenter le
staleTimepour éviter les refetch inutiles - Améliorer la logique de merge dans DynamicForm pour ne pas écraser les changements locaux
- Ajouter un flag
isDirtypour protéger les données non sauvegardées
Impact utilisateur
- Avant: Workflow forcé (photo d'abord, questionnaire après save)
- Après: Workflow libre (photo et questionnaire dans n'importe quel ordre)
Environnement
- App: ZenFlow Mobile (Expo/React Native)
- Framework: React Query (TanStack Query)
- Platform: iOS et Android (plus visible sur Android)
Retour client
"Il y a un enchaînement un peu bizarre entre les photos et le questionnaire, avant tout était sur une même page. Quand on crée la fiche, on doit prendre la photo, cliquer sur mettre à jour à la fiche, mettre à jour, pour que le cadre du questionnaire apparaisse. Le format d'avant était très bien, puisqu'on pouvait commencer par le questionnaire ou la photo, sur cette version cela « force » à prendre la photo en premier avant d'accéder au questionnaire"
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗