feat: safe deletion, album/asset delete, trash, README update
- volume-aware deletion: read-only volumes remove DB only, writable volumes soft-delete to trash with configurable grace period - trash page with restore, worker purge sweep (TRASH_RETENTION_DAYS) - album delete endpoint + sidebar trash icon - asset delete from timeline selection toolbar - all listing queries exclude trashed assets (deleted_at IS NULL) - timeline ordered by EXIF capture date, date-summary endpoint - README rewritten with features, setup, full env var table
This commit is contained in:
@@ -16,7 +16,7 @@ import { AlbumSidebar } from "@/components/album-sidebar"
|
||||
import { AdminSidebar } from "@/components/admin-sidebar"
|
||||
import { UploadDialog } from "@/components/upload-dialog"
|
||||
import { Spinner } from "@/components/ui/spinner"
|
||||
import { CameraIcon, LogOutIcon } from "lucide-react"
|
||||
import { CameraIcon, LogOutIcon, Trash2Icon } from "lucide-react"
|
||||
import { Button } from "@/components/ui/button"
|
||||
import Link from "next/link"
|
||||
|
||||
@@ -53,13 +53,22 @@ export default function AppLayout({ children }: { children: React.ReactNode }) {
|
||||
<AlbumSidebar />
|
||||
<AdminSidebar />
|
||||
</SidebarContent>
|
||||
<div className="flex items-center justify-between border-t px-4 py-2">
|
||||
<span className="truncate text-xs text-muted-foreground">
|
||||
{user?.username}
|
||||
</span>
|
||||
<Button variant="ghost" size="icon" className="h-7 w-7" onClick={logout}>
|
||||
<LogOutIcon className="h-3.5 w-3.5" />
|
||||
</Button>
|
||||
<div className="flex flex-col border-t">
|
||||
<Link
|
||||
href="/trash"
|
||||
className="flex items-center gap-2 px-4 py-2 text-xs text-muted-foreground hover:text-foreground"
|
||||
>
|
||||
<Trash2Icon className="h-3.5 w-3.5" />
|
||||
Trash
|
||||
</Link>
|
||||
<div className="flex items-center justify-between px-4 py-2">
|
||||
<span className="truncate text-xs text-muted-foreground">
|
||||
{user?.username}
|
||||
</span>
|
||||
<Button variant="ghost" size="icon" className="h-7 w-7" onClick={logout}>
|
||||
<LogOutIcon className="h-3.5 w-3.5" />
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</Sidebar>
|
||||
<SidebarInset>
|
||||
|
||||
Reference in New Issue
Block a user