doesitarm/helpers/api/kind.js
2022-05-20 14:40:08 -05:00

78 lines
1.9 KiB
JavaScript

import memoizeGetters from 'memoize-getters'
import {
apiDirectory
} from '~/helpers/api/config.js'
import {
PaginatedList,
defaultPerPage
} from '~/helpers/api/pagination.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`
}
// This may provide better performance via memoization
export class KindList extends PaginatedList {
constructor({
list,
kindSlug,
perPage = defaultPerPage
}) {
super({ list, perPage })
this.kindSlug = kindSlug
}
get baseRoute () {
return makeKindEndpoint({ kindSlug: this.kindSlug })
}
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: {
nextPage,
items: kindPage.items
}
}
})
}
}
export const KindListMemoized = memoizeGetters( KindList )