mirror of
https://github.com/ThatGuySam/doesitarm.git
synced 2026-05-18 06:44:46 -07:00
70 lines
1.6 KiB
JavaScript
70 lines
1.6 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 => {
|
|
return {
|
|
path: makeKindFilePath({ kindSlug: this.kindSlug, number: kindPage.number }),
|
|
content: {
|
|
items: kindPage.items
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
export const KindListMemoized = memoizeGetters( KindList )
|