diff --git a/client/src/features/book/components/BookCoverCard.vue b/client/src/features/book/components/BookCoverCard.vue index 999c39413..ac9fb89db 100644 --- a/client/src/features/book/components/BookCoverCard.vue +++ b/client/src/features/book/components/BookCoverCard.vue @@ -8,6 +8,7 @@ import { useRouter } from 'vue-router' import { BookOpen, Check, + Download, ExternalLink, FolderPlus, Image, @@ -21,12 +22,22 @@ import { Trash2, TriangleAlert, } from 'lucide-vue-next' -import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu' +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu' import { useCoverVersions } from '../composables/useCoverVersions' import { useRefreshMetadata } from '../composables/useRefreshMetadata' import { useRefreshingBooks } from '../composables/useRefreshingBooks' import { usePermissions } from '@/features/auth/composables/usePermissions' import { useDisplaySettings } from '@/composables/useDisplaySettings' +import { useBookDownload } from '@/features/book/composables/useBookDownload' import SendBookDialog from '@/features/email/components/SendBookDialog.vue' const router = useRouter() @@ -54,7 +65,6 @@ const seriesLine = computed(() => { const readableFiles = computed(() => props.book.files.filter((f) => f.format && f.format in FORMAT_TO_GROUP)) const primaryFile = computed(() => readableFiles.value.find((f) => f.role === 'primary') ?? readableFiles.value[0] ?? null) -const extraFiles = computed(() => readableFiles.value.filter((f) => f !== primaryFile.value)) const { coverUrl, bumpVersion } = useCoverVersions() const coverSrc = computed(() => coverUrl(props.book.id)) @@ -129,6 +139,16 @@ function openAuthorBrowse() { if (!authorQuery.value) return void router.push({ name: 'authors', query: { q: authorQuery.value } }) } + +const { downloadFile, exportBooks } = useBookDownload() + +function handleDownloadFile(file: BookFileRef) { + void downloadFile(file.id) +} + +function handleExportAll() { + void exportBooks([props.book.id], true) +}