feat: reorder frontmatter keys and add publish/private quick links

This commit is contained in:
2025-10-19 22:19:35 -04:00
parent 0f7610bed1
commit 168fcaf049
9 changed files with 144 additions and 42 deletions
@@ -50,7 +50,7 @@ export class NotesListComponent {
folderFilter = input<string | null>(null); // like "folder/subfolder"
query = input<string>('');
tagFilter = input<string | null>(null);
quickLinkFilter = input<'favoris' | 'template' | 'task' | 'draft' | 'archive' | null>(null);
quickLinkFilter = input<'favoris' | 'publish' | 'draft' | 'template' | 'task' | 'private' | 'archive' | null>(null);
@Output() openNote = new EventEmitter<string>();
@Output() queryChange = new EventEmitter<string>();
@@ -72,7 +72,7 @@ export class NotesListComponent {
// All files anywhere under .trash (including subfolders)
list = list.filter(n => {
const filePath = (n.filePath || n.originalPath || '').toLowerCase().replace(/\\/g, '/');
return filePath.includes('/.trash/');
return filePath.startsWith('.trash/') || filePath.includes('/.trash/');
});
} else {
list = list.filter(n => {
@@ -6,9 +6,11 @@ import { BadgeCountComponent } from '../../shared/ui/badge-count.component';
interface QuickLinkCountsUi {
all: number;
favorites: number;
publish: number;
templates: number;
tasks: number;
drafts: number;
private: number;
archive: number;
}
@@ -21,32 +23,44 @@ interface QuickLinkCountsUi {
<ul class="text-sm space-y-1">
<li>
<button (click)="select('all')" class="flex items-center gap-2 px-3 py-2 rounded-lg cursor-pointer hover:bg-slate-500/10 dark:hover:bg-slate-200/10 transition w-full text-left">
<span class="flex items-center gap-2"><span>🗂️</span> <span>All pages</span></span>
<span class="flex items-center gap-2"><span>🗂️</span> <span>All Pages</span></span>
<app-badge-count class="ml-auto" [count]="counts().all" color="slate"></app-badge-count>
</button>
</li>
<li>
<button (click)="select('favorites')" class="flex items-center gap-2 px-3 py-2 rounded-lg cursor-pointer hover:bg-slate-500/10 dark:hover:bg-slate-200/10 transition w-full text-left">
<span class="flex items-center gap-2"><span>❤️</span> <span>Favorites</span></span>
<span class="flex items-center gap-2"><span>❤️</span> <span>Favoris</span></span>
<app-badge-count class="ml-auto" [count]="counts().favorites" color="rose"></app-badge-count>
</button>
</li>
<li>
<button (click)="select('templates')" class="flex items-center gap-2 px-3 py-2 rounded-lg cursor-pointer hover:bg-slate-500/10 dark:hover:bg-slate-200/10 transition w-full text-left">
<span class="flex items-center gap-2"><span>📑</span> <span>Templates</span></span>
<button (click)="select('publish')" class="flex items-center gap-2 px-3 py-2 rounded-lg cursor-pointer hover:bg-slate-500/10 dark:hover:bg-slate-200/10 transition w-full text-left">
<span class="flex items-center gap-2"><span>🌐</span> <span>Publish</span></span>
<app-badge-count class="ml-auto" [count]="counts().publish" color="green"></app-badge-count>
</button>
</li>
<li>
<button (click)="select('drafts')" class="flex items-center gap-2 px-3 py-2 rounded-lg cursor-pointer hover:bg-slate-500/10 dark:hover:bg-slate-200/10 transition w-full text-left">
<span class="flex items-center gap-2"><span>📝</span> <span>Draft</span></span>
<app-badge-count class="ml-auto" [count]="counts().drafts" color="emerald"></app-badge-count>
</button>
</li>
<li>
<button (click)="select('templates')" class="flex items-center gap-2 px-3 py-2 rounded-lg cursor-pointer hover:bg-slate-500/10 dark:hover:bg-slate-200/10 transition w-full text left">
<span class="flex items-center gap-2"><span>📑</span> <span>Template</span></span>
<app-badge-count class="ml-auto" [count]="counts().templates" color="amber"></app-badge-count>
</button>
</li>
<li>
<button (click)="select('tasks')" class="flex items-center gap-2 px-3 py-2 rounded-lg cursor-pointer hover:bg-slate-500/10 dark:hover:bg-slate-200/10 transition w-full text-left">
<span class="flex items-center gap-2"><span>🗒️</span> <span>Tasks</span></span>
<span class="flex items-center gap-2"><span>🗒️</span> <span>Task</span></span>
<app-badge-count class="ml-auto" [count]="counts().tasks" color="indigo"></app-badge-count>
</button>
</li>
<li>
<button (click)="select('drafts')" class="flex items-center gap-2 px-3 py-2 rounded-lg cursor-pointer hover:bg-slate-500/10 dark:hover:bg-slate-200/10 transition w-full text-left">
<span class="flex items-center gap-2"><span>📝</span> <span>Drafts</span></span>
<app-badge-count class="ml-auto" [count]="counts().drafts" color="emerald"></app-badge-count>
<button (click)="select('private')" class="flex items-center gap-2 px-3 py-2 rounded-lg cursor-pointer hover:bg-slate-500/10 dark:hover:bg-slate-200/10 transition w-full text-left">
<span class="flex items-center gap-2"><span>🔒</span> <span>Private</span></span>
<app-badge-count class="ml-auto" [count]="counts().private" color="purple"></app-badge-count>
</button>
</li>
<li>
@@ -54,7 +54,7 @@ import { VaultService } from '../../../services/vault.service';
<!-- Folders accordion -->
<section class="border-b border-gray-200 dark:border-gray-800">
<button class="w-full flex items-center justify-between px-3 py-2 text-sm font-semibold hover:bg-gray-100 dark:hover:bg-gray-800"
(click)="open.folders = !open.folders">
(click)="toggleFoldersSection()">
<span>Folders</span>
<span class="text-xs text-gray-500">{{ open.folders ? '▾' : '▸' }}</span>
</button>
@@ -92,7 +92,7 @@ import { VaultService } from '../../../services/vault.service';
<!-- Trash accordion -->
<section class="border-b border-gray-200 dark:border-gray-800">
<button class="w-full flex items-center justify-between px-3 py-2 text-sm font-semibold hover:bg-gray-100 dark:hover:bg-gray-800"
(click)="open.trash = !open.trash; folderSelected.emit('.trash')">
(click)="toggleTrashSection()">
<span class="flex items-center gap-2">Trash</span>
<span class="text-xs text-gray-500">{{ open.trash ? '▾' : '▸' }}</span>
</button>
@@ -146,4 +146,20 @@ export class NimbusSidebarComponent {
trashCount = () => this.vault.counts().trash;
trashHasContent = () => (this.vault.trashTree() || []).length > 0;
trackNoteId = (_: number, n: { id: string }) => n.id;
toggleFoldersSection(): void {
const next = !this.open.folders;
this.open.folders = next;
if (next) {
this.quickLinkSelected.emit('all');
}
}
toggleTrashSection(): void {
const next = !this.open.trash;
this.open.trash = next;
if (next) {
this.folderSelected.emit('.trash');
}
}
}
@@ -261,7 +261,7 @@ export class AppShellNimbusLayoutComponent {
hoveredFlyout: 'quick' | 'folders' | 'tags' | 'trash' | null = null;
private flyoutCloseTimer: any = null;
tagFilter: string | null = null;
quickLinkFilter: 'favoris' | 'template' | 'task' | 'draft' | 'archive' | null = null;
quickLinkFilter: 'favoris' | 'publish' | 'draft' | 'template' | 'task' | 'private' | 'archive' | null = null;
toggleNoteFullScreen(): void {
this.noteFullScreen = !this.noteFullScreen;
@@ -324,6 +324,16 @@ export class AppShellNimbusLayoutComponent {
this.mobileNav.setActiveTab('list');
}
this.scheduleCloseFlyout(150);
} else if (_id === 'publish') {
// Filter by publish: true
this.folderFilter = null;
this.tagFilter = null;
this.quickLinkFilter = 'publish';
this.listQuery = '';
if (!this.responsive.isDesktop()) {
this.mobileNav.setActiveTab('list');
}
this.scheduleCloseFlyout(150);
} else if (_id === 'favorites') {
// Filter by favoris: true
this.folderFilter = null;
@@ -364,6 +374,16 @@ export class AppShellNimbusLayoutComponent {
this.mobileNav.setActiveTab('list');
}
this.scheduleCloseFlyout(150);
} else if (_id === 'private') {
// Filter by private: true
this.folderFilter = null;
this.tagFilter = null;
this.quickLinkFilter = 'private';
this.listQuery = '';
if (!this.responsive.isDesktop()) {
this.mobileNav.setActiveTab('list');
}
this.scheduleCloseFlyout(150);
} else if (_id === 'archive') {
// Filter by archive: true
this.folderFilter = null;