Draft
Conversation
arnaudambro
commented
Mar 30, 2026
Collaborator
Author
There was a problem hiding this comment.
pourquoi ce fichier : parce qu'on a sinon des cycles d'import: api > store > sync > api, et ça casse un peu tout
arnaudambro
commented
Mar 30, 2026
Collaborator
Author
There was a problem hiding this comment.
pourquoi ce fichier : idem, parce qu'on a sinon des cycles d'import
be59074 to
b39599e
Compare
arnaudambro
commented
Mar 31, 2026
| } | ||
|
|
||
| // TODO: refactor the loader to simply await it | ||
| async function pullSync(): Promise<void> { |
Collaborator
Author
There was a problem hiding this comment.
hésitation ici : est-ce que je fais une PR séparée pour faire ce refacto du loader ? AVANT cette PR ? ou bien on laisse ça comme ça pour le moment ?
arnaudambro
commented
Mar 31, 2026
expo/src/scenes/Actions/Action.tsx
Outdated
| <ScrollContainer noRadius> | ||
| <DocumentsManager | ||
| defaultParent="root" | ||
| uploadPath={`/person/${person?._id}/document`} |
Collaborator
Author
There was a problem hiding this comment.
(pour faire taire typescript, désolé)
arnaudambro
commented
Apr 1, 2026
| return this.execute({ method, path, body }); | ||
| }; | ||
|
|
||
| _extractEntityType = (path) => { |
Collaborator
Author
There was a problem hiding this comment.
TODO: regarder si ça marche bien avec tout
c33fd69 to
1fdbbe7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Philosophie
quelles philosophies ici ?
il existe plusieurs stratégies pour le mode hors-ligne
je propose donc qu'on parte avec cette option 3 pour le moment, et quand/si on refacto le loader, on peut switcher sur une autre expérience tout en conservant les utils et logiques créées ici (interception, queue, sync)
NOTE: tout est questionnable ici : autant l'interception que le queue et le sync. objectif : le moins de charge cognitive possible !
Mise en place
L'utilisateur active/désactive manuellement le mode hors-ligne via un toggle dans le menu en bas à droite. Pas de détection réseau automatique : c'est plus fiable, plus simple à comprendre, et plus simple à maintenir.
Interception des requêtes
Lorsque le mode hors-ligne est activé, la classe
apiintercepte les POST/PUT/DELETE métier - les autres requêtes, peu nombreuses (login etc.), ont un champofflineEnabled=false. Au lieu d'envoyer la requête au serveur, elle la met en queue (persistée dans MMKV) et retourne une réponse optimiste immédiate pour que l'UI se mette à jour instantanément.Pour les POST, un UUID est généré côté client, ce qui permet de créer dans la foulée des entités liées
(actions, commentaires, etc.).
Fusion des requêtes
Si plusieurs modifications sont faites sur la même entité, elles sont fusionnées intelligemment :
updatedAtd'origine est conservé (pour la détection deconflits)
serveur)
updatedAtd'origine est conservéChiffrement
Les données texte sont stockées déchiffrées dans la queue — c'est ce qui permet la fusion et la détection de conflits champ par champ. Elles sont re-chiffrées au moment du sync. Ça ne pose pas plus de problème que ce qu'on a actuellement : aujourd'hui le cache enregistré dans MMKV est aussi déchiffré.
Les fichiers sont chiffrés avant mise en queue — pas besoin de les déchiffrer pour les fusionner, et ils sont déchiffrés à la volée quand on clique dessus de toutes façons, donc autant les garder chiffrés, c'est une logique plus simple globalement, moins de code.
Synchronisation
Quand le mode hors-ligne est désactivé :
updatedAtcapturé au moment de la mise en queue avec la version serveur actuelleapi. S'il y a conflit, l'utilisateur voit un écran de résolution avec comparaison champ par champ et choisit "garder ma version" ou "garder la version serveur"Nouveauté
Il y a des tests !
updatedAtcritiques au bon fonctionnement du mode hors-ligne)