[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

  1. L'utilisateur crée une nouvelle Issue ou édite une Issue existante
  2. L'utilisateur prend une photo via "Appareil photo"
  3. BUG: Le questionnaire custom disparaît
  4. 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:

  1. Lancement de la caméra → L'app passe en arrière-plan (sur certains appareils Android notamment)
  2. Retour au premier plan → React Query déclenche un refetch de l'Issue (comportement par défaut avec refetchOnWindowFocus: true et staleTime: 0)
  3. Cascade de réinitialisation:
  • IssueDynamicForm reçoit les nouvelles données avec l'ancien custom_data
  • L'effet useEffect dans IssueDynamicForm.tsx (lignes 36-40) réinitialise customData
  • DynamicForm.tsx reçoit de nouveaux initialValues et l'effet (lignes 34-36) réinitialise formValues
  1. 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 Query
  • zenflow/zenflow-mobile/components/issues/IssueDynamicForm.tsx - Gestion du formulaire custom
  • zenflow/zenflow-mobile/components/forms/DynamicForm.tsx - Composant formulaire générique
  • zenflow/zenflow-mobile/components/attachments/AttachmentGallery.tsx - Gestion des photos
  • zenflow/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

  1. Désactiver refetchOnWindowFocus pour les queries de ressources individuelles (useOne)
  2. Augmenter le staleTime pour éviter les refetch inutiles
  3. Améliorer la logique de merge dans DynamicForm pour ne pas écraser les changements locaux
  4. Ajouter un flag isDirty pour 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"

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗