Update:Show RSS feed icon on collection card & update API endpoint for fetching collections

This commit is contained in:
advplyr 2022-12-31 10:33:38 -06:00
parent f806e4cce3
commit 8bbfee334c
4 changed files with 25 additions and 10 deletions

View File

@ -318,7 +318,7 @@ export default {
const entityPath = this.entityName === 'books' || this.entityName === 'series-books' ? 'items' : this.entityName
const sfQueryString = this.currentSFQueryString ? this.currentSFQueryString + '&' : ''
const fullQueryString = `?${sfQueryString}limit=${this.booksPerFetch}&page=${page}&minified=1`
const fullQueryString = `?${sfQueryString}limit=${this.booksPerFetch}&page=${page}&minified=1&include=rssfeed`
const payload = await this.$axios.$get(`/api/libraries/${this.currentLibraryId}/${entityPath}${fullQueryString}`).catch((error) => {
console.error('failed to fetch books', error)
@ -340,7 +340,7 @@ export default {
}
for (let i = 0; i < payload.results.length; i++) {
var index = i + startIndex
const index = i + startIndex
this.entities[index] = payload.results[i]
if (this.entityComponentRefs[index]) {
this.entityComponentRefs[index].setEntity(this.entities[index])

View File

@ -9,6 +9,9 @@
<span class="material-icons text-xl text-white text-opacity-75 hover:text-opacity-100">edit</span>
</div>
</div>
<span v-if="!isHovering && rssFeed" class="absolute z-10 material-icons text-success" :style="{ top: 0.5 * sizeMultiplier + 'rem', left: 0.5 * sizeMultiplier + 'rem', fontSize: 1.5 * sizeMultiplier + 'rem' }">rss_feed</span>
<div v-if="!isAlternativeBookshelfView" class="categoryPlacard absolute z-30 left-0 right-0 mx-auto -bottom-6 h-6 rounded-md font-book text-center" :style="{ width: Math.min(200, width) + 'px' }">
<div class="w-full h-full shinyBlack flex items-center justify-center rounded-sm border" :style="{ padding: `0rem ${0.5 * sizeMultiplier}rem` }">
<p class="truncate" :style="{ fontSize: labelFontSize + 'rem' }">{{ title }}</p>
@ -72,6 +75,9 @@ export default {
},
userCanUpdate() {
return this.store.getters['user/getUserCanUpdate']
},
rssFeed() {
return this.collection ? this.collection.rssFeed : null
}
},
methods: {

View File

@ -124,7 +124,7 @@ export default {
action: 'create-playlist'
}
]
if (this.userIsAdminOrUp) {
if (this.userIsAdminOrUp || this.rssFeed) {
items.push({
text: this.$strings.LabelOpenRSSFeed,
action: 'open-rss-feed'

View File

@ -406,9 +406,11 @@ class LibraryController {
// api/libraries/:id/collections
async getCollectionsForLibrary(req, res) {
var libraryItems = req.libraryItems
const libraryItems = req.libraryItems
var payload = {
const include = (req.query.include || '').split(',').map(v => v.trim().toLowerCase()).filter(v => !!v)
const payload = {
results: [],
total: 0,
limit: req.query.limit && !isNaN(req.query.limit) ? Number(req.query.limit) : 0,
@ -416,20 +418,27 @@ class LibraryController {
sortBy: req.query.sort,
sortDesc: req.query.desc === '1',
filterBy: req.query.filter,
minified: req.query.minified === '1'
minified: req.query.minified === '1',
include: include.join(',')
}
var collections = this.db.collections.filter(c => c.libraryId === req.library.id).map(c => {
var expanded = c.toJSONExpanded(libraryItems, payload.minified)
let collections = this.db.collections.filter(c => c.libraryId === req.library.id).map(c => {
const expanded = c.toJSONExpanded(libraryItems, payload.minified)
// If all books restricted to user in this collection then hide this collection
if (!expanded.books.length && c.books.length) return null
if (include.includes('rssfeed')) {
expanded.rssFeed = this.rssFeedManager.findFeedForEntityId(c.id)
}
return expanded
}).filter(c => !!c)
payload.total = collections.length
if (payload.limit) {
var startIndex = payload.page * payload.limit
const startIndex = payload.page * payload.limit
collections = collections.slice(startIndex, startIndex + payload.limit)
}