-
Notifications
You must be signed in to change notification settings - Fork 92
Mécanisme de lien vers le dossier suivant
ETQ Instructeur, il est pénible actuellement de devoir retourner sur la liste des dossiers, trouver la bonne page de la liste et cliquer sur le dossier, et recommencer à chaque fois.
Exemples à trouver
Sur la liste des dossiers, liens vers les dossiers contiennent en paramètre le contexte de la liste (nom de l'onglet + page). Ces paramètres sont conservés entre les différents onglets du dossier en repassant dans les helpers de lien ces paramètres.
Au final, si ces paramètres sont présents, un bouton supplémentaire 'retour à la liste' est affiché pour retourner au bon endroit dans la liste.
- Contexte clair associé à chaque page
- Absence de comportement magique / absence d'effet de bord
- Il faut propager les params sur tous les liens et bouton d'action
- L'instructeur doit repasser par la liste pour aller au dossier suivant, mais il peut le faire quand meme si on veut, donc ça va
-
Les liens de la liste triée filtrée des dossiers, sont de la forme
procedures/x/dossiers/12[/messagerie|/annotations-privees|...]?search={ filter: [{ table: t, column: c, value: v }], order:{ table: t, column: c, order: o }}
-
Le serveur serialize cette recherche dans la page html pour stockage en session storage (pour que ce contexte ne soit pas partagé entre les onglets)
sessionStorage.setItem('search_context', JSON.stringify({ search: { filter: [...], order: {...} }, current_id: 12));
- coté client, si la clé
search_context
existe en sessionStorage, les boutonsdossier précédent
etdossier suivant
sont ajoutés dynamiquement dans la page ainsi que le contexte de recherche. Le lien du bouton suivant sera
/procedures/x/dossiers/12/next?search={ filter: [...], order: {...} }
- coté controller, pseudo code pour trouver le dossier suivant
current_id = 12
searched_ids = procedure.dossiers.where(...).order(...) # [1, 2, 4, 15, 26]
ordered_ids = procedure.dossiers.order(...) # [1, 3, 12, 13, 15, 26]
bigger_than_current_ids = ordered_ids.slice((ordered_ids.index(current_id) + 1)..-1) # [13, 15, 26]
next_id = (bigger & search_ids)[0] # [15, 26][0] TODO: next == nil
le serveur retourne le dossier next_id
et sérialise dans la page le nouveau contexte de recherche.
- Possibilité d'aller directement au dossier suivant/précédent depuis le dossier en cours
- L'ordre des dossiers suivants et précédents est calculé selon l'ordre de la recherche
- Les dossiers affichés appartiennent toujours au résultat de la recherche
- Le contexte de recherche est uniquement sauvegardé dans l'onglet en cours, ce qui permet d'avoir plusieurs contextes de recherche différents dans différents onglets
- problème potentiel au niveau de la taille des urls transmettant le contexte de recherche ... possibilité de transmettre uniquement un id de contexte qui aura été préalablement sauvegardé en base mais qui rend l'url moins compréhensible