Add expand library item authors to /items/:id route

This commit is contained in:
advplyr 2022-03-21 05:08:33 -05:00
parent e1e6b46456
commit 28d76d21f1
3 changed files with 28 additions and 5 deletions

View File

@ -1,11 +1,11 @@
<template> <template>
<div @mouseover="mouseover" @mouseout="mouseout"> <div @mouseover="mouseover" @mouseout="mouseout">
<div :style="{ width: width + 'px', height: height + 'px' }" class="bg-primary box-shadow-book rounded-lg relative overflow-hidden"> <div :style="{ width: width + 'px', height: height + 'px' }" class="bg-primary box-shadow-book rounded-md relative overflow-hidden">
<!-- Image or placeholder --> <!-- Image or placeholder -->
<covers-author-image :author="author" /> <covers-author-image :author="author" />
<!-- Author name & num books overlay --> <!-- Author name & num books overlay -->
<div v-show="!searching" class="absolute bottom-0 left-0 w-full py-1 bg-black bg-opacity-60 px-2"> <div v-show="!searching && !nameBelow" class="absolute bottom-0 left-0 w-full py-1 bg-black bg-opacity-60 px-2">
<p class="text-center font-semibold truncate" :style="{ fontSize: sizeMultiplier * 0.75 + 'rem' }">{{ name }}</p> <p class="text-center font-semibold truncate" :style="{ fontSize: sizeMultiplier * 0.75 + 'rem' }">{{ name }}</p>
<p class="text-center text-gray-200" :style="{ fontSize: sizeMultiplier * 0.65 + 'rem' }">{{ numBooks }} Book{{ numBooks === 1 ? '' : 's' }}</p> <p class="text-center text-gray-200" :style="{ fontSize: sizeMultiplier * 0.65 + 'rem' }">{{ numBooks }} Book{{ numBooks === 1 ? '' : 's' }}</p>
</div> </div>
@ -23,6 +23,9 @@
<widgets-loading-spinner size="" /> <widgets-loading-spinner size="" />
</div> </div>
</div> </div>
<div v-show="nameBelow" class="w-full py-1 px-2">
<p class="text-center font-semibold truncate text-gray-200" :style="{ fontSize: sizeMultiplier * 0.75 + 'rem' }">{{ name }}</p>
</div>
</div> </div>
</template> </template>
@ -38,7 +41,8 @@ export default {
sizeMultiplier: { sizeMultiplier: {
type: Number, type: Number,
default: 1 default: 1
} },
nameBelow: Boolean
}, },
data() { data() {
return { return {

View File

@ -158,10 +158,11 @@ export default {
if (!store.state.user.user) { if (!store.state.user.user) {
return redirect(`/login?redirect=${route.path}`) return redirect(`/login?redirect=${route.path}`)
} }
var item = await app.$axios.$get(`/api/items/${params.id}?expanded=1`).catch((error) => { var item = await app.$axios.$get(`/api/items/${params.id}?expanded=1&include=authors`).catch((error) => {
console.error('Failed', error) console.error('Failed', error)
return false return false
}) })
console.log(item)
if (!item) { if (!item) {
console.error('No item...', params.id) console.error('No item...', params.id)
return redirect('/') return redirect('/')

View File

@ -5,8 +5,26 @@ const { ScanResult } = require('../utils/constants')
class LibraryItemController { class LibraryItemController {
constructor() { } constructor() { }
// Example expand with authors: api/items/:id?expanded=1&include=authors
findOne(req, res) { findOne(req, res) {
if (req.query.expanded == 1) return res.json(req.libraryItem.toJSONExpanded()) const includeEntities = (req.query.include || '').split(',')
if (req.query.expanded == 1) {
var item = req.libraryItem.toJSONExpanded()
if (item.mediaType == 'book') {
if (includeEntities.includes('authors')) {
item.media.metadata.authors = item.media.metadata.authors.map(au => {
var author = this.db.authors.find(_au => _au.id === au.id)
if (!author) return null
return {
...author
}
}).filter(au => au)
}
}
return res.json(item)
}
res.json(req.libraryItem) res.json(req.libraryItem)
} }