{books.length} shown
Columns
Show columns
{#each columns as column (column.key)}
{ if (!column.fixed) column.on = value; }} > {column.label}
{/each}
{ if (allSelected) selectionState.deselectAll(); else selectionState.selectAll(books); }} />
{#each visible as column (column.key)}
{#if column.sort}
bookCollection.updateSort(column.sort!)} > {column.label} {#if bookCollection.orderBy === column.sort} {#if bookCollection.sortOrder === 'asc'}
{:else}
{/if} {/if}
{:else} {column.label} {/if}
{/each}
{#each books as book (book.id)}
handleRowClick(event, book)} class={selectionState.selectionModeActive ? 'cursor-pointer' : ''} >
selectionState.toggleSelection(book)} />
{#each visible as column (column.key)} {#if column.key === 'title'}
{book.title}
{:else if column.key === 'authors'}
{#each book.authors as author (author.id)}
{author.name}
{/each}
{:else if column.key === 'series'}
{book.series ? book.series.title : '—'}
{:else if column.key === 'publisher'}
{book.publisher ? book.publisher.name : '—'}
{:else if column.key === 'published'}
{book.published_date ? new Date(book.published_date).getFullYear() : '—'}
{:else if column.key === 'pages'}
{book.pages ?? '—'}
{:else if column.key === 'format'}
{formats(book)}
{:else if column.key === 'size'}
{formatFileSize(totalSize(book))}
{:else if column.key === 'added'}
{addedOn(book)}
{:else if column.key === 'progress'}
{#if book.progress?.completed}
Finished
{:else if book.progress?.percentage}
{Math.round(book.progress.percentage * 100)}%
{:else}
Unread
{/if}
{:else if column.key === 'missing'}
{#each missing(book) as gap (gap)}
{gap}
{:else}
complete
{/each}
{/if} {/each}
{/each}