feat: dossier perso (#194) — vaults home-* en tête de l'arborescence, icône maison, compose de test
- frontend/js/sidebar.js : tri stable _homeFirst appliqué à la source des deux listes de vaults (loadVaults + soft refresh) → les vaults home-<user> passent en premier, arborescence et sélecteurs cohérents. - frontend/js/viewer.js : getVaultIcon renvoie l'icône lucide "home" pour home-* (même safeCreateIcons / stroke currentColor que les autres). - docker-compose.test-win.yml : montage test_home:/vaults/Home + OBSIGATE_HOME_ROOT=/vaults/Home pour tester la feature en local ; test_home/ ajouté au .gitignore. - Tests : sidebar-filters.test.mjs +2 (icône maison, gemme violette inchangée), vérifié live sur l'instance 2020 (ordre + svg.lucide-home).
This commit is contained in:
@@ -220,8 +220,15 @@ async function loadVaultSettings() {
|
||||
// ---------------------------------------------------------------------------
|
||||
// Sidebar — Vault tree
|
||||
// ---------------------------------------------------------------------------
|
||||
// #194 : le dossier personnel (vault « home-<user> ») s'affiche en premier
|
||||
// dans l'arborescence. Tri stable fait sur place, à la source de toutes les
|
||||
// listes (arborescence, sélecteurs, state.allVaults).
|
||||
const _homeFirst = (a, b) =>
|
||||
(String(b?.name).startsWith("home-") ? 1 : 0) - (String(a?.name).startsWith("home-") ? 1 : 0);
|
||||
|
||||
async function loadVaults() {
|
||||
const vaults = await api("/api/vaults");
|
||||
vaults.sort(_homeFirst);
|
||||
state.allVaults = vaults;
|
||||
const container = document.getElementById("vault-tree");
|
||||
container.innerHTML = "";
|
||||
@@ -426,6 +433,7 @@ export async function refreshSidebarTreePreservingState() {
|
||||
// 2. Soft update: vault names/counts without wiping the tree
|
||||
try {
|
||||
const vaults = await api("/api/vaults");
|
||||
vaults.sort(_homeFirst);
|
||||
state.allVaults = vaults;
|
||||
vaults.forEach((v) => {
|
||||
const vItem = document.querySelector(`.vault-item[data-vault="${CSS.escape(v.name)}"]`);
|
||||
|
||||
@@ -7579,6 +7579,10 @@ export function attachTreeItemLongPress(itemEl, getMenuData) {
|
||||
}
|
||||
|
||||
export function getVaultIcon(vaultName, size = 16) {
|
||||
// Dossier personnel (#194) : icône maison, même style lucide que le reste.
|
||||
if (typeof vaultName === "string" && vaultName.startsWith("home-")) {
|
||||
return icon("home", size);
|
||||
}
|
||||
const v = state.allVaults.find((val) => val.name === vaultName);
|
||||
const type = v ? v.type : "VAULT";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user