Mark as finished
Add/Remove from shelf
Download selected
{#if selectedBooks.length > 1} (mergingBooks = selectedBooks)} class={buttonVariants({ variant: 'ghost', size: 'icon' })} > Merge {selectedBooks.length} books {/if} { bookOps.deleteDialogTitle = `Delete ${selectionState.getSelectedIds().length} books?`; bookOps.deleteFn = async (deleteFiles: boolean) => { await bookOps.deleteBooks(selectionState.getSelectedIds(), deleteFiles); libraryState.activeLibrary!.total! -= selectedBooks.length; bookshelfState.deletedBooks(selectedBooks); selectionState.deselectAll(); }; bookOps.deleteDialogOpen = true; }} class={buttonVariants({ variant: 'ghost', size: 'icon' })} > Delete selected { selectionState.selectAll(collectionState.books); }} class={buttonVariants({ variant: 'ghost', size: 'icon' })} > Select all { selectionState.deselectAll(); }} class={buttonVariants({ variant: 'ghost', size: 'icon' })} > Deselect all { const bookshelf = await bookshelfState.addBookshelf( name, libraryState.activeLibrary!.id, selectionState.getSelectedIds() ); selectedBooks.forEach((book) => book.lists.push(bookshelf)); selectionState.deselectAll(); createShelfDialogOpen = false; }} /> {#if mergingBooks} {#key mergingBooks.map((book) => book.id).join()} { // Only the folded records are gone; the survivor is still in the library. libraryState.activeLibrary!.total! -= folded.length; bookshelfState.deletedBooks(folded); selectionState.deselectAll(); mergingBooks = null; }} /> {/key} {/if}
Merge {selectedBooks.length} books
Delete selected
Select all
Deselect all