mirror of
https://github.com/ThatGuySam/doesitarm.git
synced 2026-05-18 06:44:46 -07:00
101 lines
2.5 KiB
JavaScript
101 lines
2.5 KiB
JavaScript
import memoize from 'fast-memoize'
|
|
import memoizeGetters from 'memoize-getters'
|
|
|
|
import getListSummaryNumbers from '~/helpers/get-list-summary-numbers.js'
|
|
|
|
import {
|
|
apiDirectory
|
|
} from '~/helpers/api/config.js'
|
|
import {
|
|
PaginatedList,
|
|
defaultPerPage
|
|
} from '~/helpers/api/pagination.js'
|
|
import {
|
|
makeSummaryOfListings
|
|
} from '~/helpers/categories.js'
|
|
|
|
function makeKindEndpoint ({ kindSlug, number = null }) {
|
|
if ( number ) {
|
|
return `/kind/${ kindSlug }/${ number }`
|
|
}
|
|
|
|
return `/kind/${ kindSlug }`
|
|
}
|
|
|
|
function makeKindDirPath ( kindSlug ) {
|
|
return `${ apiDirectory }${ makeKindEndpoint({ kindSlug }) }`
|
|
}
|
|
|
|
function makeKindFilePath ({ kindSlug, number }) {
|
|
return `${ apiDirectory }${ makeKindEndpoint({ kindSlug, number }) }.json`
|
|
}
|
|
|
|
|
|
// let timeSummaryRun = 0
|
|
|
|
export class KindList extends PaginatedList {
|
|
constructor({
|
|
list,
|
|
kindSlug,
|
|
perPage = defaultPerPage
|
|
}) {
|
|
super({ list, perPage })
|
|
|
|
this.kindSlug = kindSlug
|
|
}
|
|
|
|
baseRoute = makeKindEndpoint({ kindSlug: this.kindSlug })
|
|
|
|
makeSummary () {
|
|
// console.log( `Summary run ${ timeSummaryRun += 1 } times` )
|
|
return {
|
|
...getListSummaryNumbers( this.list ),
|
|
sampleNames: makeSummaryOfListings({ list: this.list }),
|
|
sampleNamesShort: makeSummaryOfListings({
|
|
list: this.list,
|
|
length: 5,
|
|
random: true,
|
|
suffix: ''
|
|
}),
|
|
}
|
|
}
|
|
|
|
summary = this.makeSummary()
|
|
|
|
get routes () {
|
|
return this.pages.map( kindPage => {
|
|
return makeKindEndpoint({
|
|
kindSlug: this.kindSlug,
|
|
number: kindPage.number
|
|
})
|
|
})
|
|
}
|
|
|
|
get basePath () {
|
|
return makeKindDirPath( this.kindSlug )
|
|
}
|
|
|
|
get apiFiles () {
|
|
return this.pages.map( kindPage => {
|
|
|
|
// If we have a number, we need to add it to the file path
|
|
const nextPage = kindPage.hasNextPage ? makeKindEndpoint({
|
|
kindSlug: this.kindSlug,
|
|
number: kindPage.number + 1
|
|
}) : ''
|
|
|
|
return {
|
|
path: makeKindFilePath({ kindSlug: this.kindSlug, number: kindPage.number }),
|
|
content: {
|
|
number: kindPage.number,
|
|
nextPage,
|
|
summary: this.summary,
|
|
items: kindPage.items
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
export const KindListMemoized = memoizeGetters( KindList )
|