refactor(sidebar): streamline conversation list with completed filter and expand toggle

Replace flat/grouped view toggle with a show-completed filter dropdown,
add expand/collapse-all control, extract status icon component, and
simplify the sidebar header.
This commit is contained in:
xintaofei
2026-04-21 17:07:40 +08:00
parent 58b48e2bfe
commit f0d530e1cb
15 changed files with 650 additions and 656 deletions

View File

@@ -1,29 +1,7 @@
"use client"
export type SidebarViewMode = "flat" | "grouped"
const VIEW_MODE_KEY = "workspace:sidebar-view-mode"
const FOLDER_EXPANDED_KEY = "workspace:sidebar-folder-expanded"
export function loadSidebarViewMode(): SidebarViewMode {
if (typeof window === "undefined") return "flat"
try {
const raw = localStorage.getItem(VIEW_MODE_KEY)
if (raw === "flat" || raw === "grouped") return raw
} catch {
/* ignore */
}
return "flat"
}
export function saveSidebarViewMode(mode: SidebarViewMode): void {
if (typeof window === "undefined") return
try {
localStorage.setItem(VIEW_MODE_KEY, mode)
} catch {
/* ignore */
}
}
const SHOW_COMPLETED_KEY = "workspace:sidebar-show-completed"
export function loadFolderExpanded(): Record<number, boolean> {
if (typeof window === "undefined") return {}
@@ -53,3 +31,23 @@ export function saveFolderExpanded(state: Record<number, boolean>): void {
/* ignore */
}
}
export function loadShowCompleted(): boolean {
if (typeof window === "undefined") return false
try {
const raw = localStorage.getItem(SHOW_COMPLETED_KEY)
if (raw === "true") return true
} catch {
/* ignore */
}
return false
}
export function saveShowCompleted(value: boolean): void {
if (typeof window === "undefined") return
try {
localStorage.setItem(SHOW_COMPLETED_KEY, String(value))
} catch {
/* ignore */
}
}