fix(views): clear the selection when entering a view without checkboxes

The batch bar survived into vault health, the authenticator grid and the audit log, none of which render checkboxes - it kept offering Delete, Move to folder and Add tag on entries the user could no longer see selected.
This commit is contained in:
r-zakarya
2026-08-01 22:49:42 +01:00
parent fb65f4b7d6
commit 9e5c5945f9
2 changed files with 11 additions and 0 deletions
+2
View File
@@ -356,6 +356,8 @@ l'éditeur slideover : créer + éditer une entrée, ajouter/retirer des tags,
### G2 · *Fix* sur une entrée supprimée entre-temps — **sans objet**
- **ACTION prévue** : ouvrir *Vault health* → mettre à la corbeille une entrée listée → revenir sur health sans *Recompute* → **Fix** sur cette entrée.
- **Pourquoi c'est irréalisable** : G3 a rendu ce cas impossible à mettre en scène — le cache est invalidé à **chaque** mutation, donc revenir sur le tableau de bord recalcule toujours et l'entrée supprimée n'y figure plus. Le garde reste en place dans le code (`openEntryForFix` sort si `openSlideOver` renvoie `false`), il n'est simplement plus atteignable par l'interface.
- **Tentative la plus proche, vérifiée** : cocher une entrée dans la liste (la barre de sélection apparaît) → passer en *Vault health* → *Delete* depuis cette barre. Le tableau de bord se **recalcule tout seul** et l'entrée disparaît de la liste : toujours pas de liste périmée.
- **Défaut trouvé au passage** : la barre de sélection **survivait** au passage en vue santé (comme en authenticator et journal d'audit), qui n'affichent aucune case à cocher. Elle proposait *Delete* / *Move to folder* / *Add tag* sur des entrées qu'on ne voyait plus sélectionnées. La sélection est désormais vidée à l'entrée dans ces trois vues.
### G5 · activer / désactiver HIBP depuis la vue santé ✅
- **ACTION** : dans *Vault health*, activer la vérification HIBP → attendre la fin du scan **sans quitter la vue**.
+9
View File
@@ -2288,12 +2288,21 @@ async function addTagToEntry(id, tag) {
} catch (err) { toast(err.message, 'error'); }
}
// Views that render no checkboxes: audit log, authenticator grid, vault health.
const VIEWS_WITHOUT_SELECTION = ['audit', 'authenticator', 'health'];
function renderGrid() {
$('#contentTitle').textContent = viewTitle();
// Re-apply the keyboard cursor after the grid re-renders. Defer one
// tick so the new cards are in the DOM before we query for them.
setTimeout(applyCursorHighlight, 0);
// A selection made in the list survived into these views, where nothing
// shows what is selected — yet the batch bar still offered Delete, Move to
// folder and Add tag on rows the user could no longer see.
if (state.checked.size && VIEWS_WITHOUT_SELECTION.indexOf(state.view) !== -1)
state.checked.clear();
// Audit log: read-only chronological feed, custom render.
if (state.view === 'audit') {
if (authTickTimer) { clearInterval(authTickTimer); authTickTimer = null; }