Skip to content

Commit

Permalink
refactor(www): more refactors for get-prev-and-next (#25627)
Browse files Browse the repository at this point in the history
* more refactors for get-prev-and-next to hopefully make things better

* re-add condition

* fixes
  • Loading branch information
tesseralis committed Jul 9, 2020
1 parent 538f482 commit 1c3ebf7
Showing 1 changed file with 20 additions and 23 deletions.
43 changes: 20 additions & 23 deletions www/src/utils/get-prev-and-next.js
@@ -1,7 +1,10 @@
const _ = require(`lodash`)
const { loadYaml } = require(`./load-yaml`)
const docLinks = loadYaml(`src/data/sidebars/doc-links.yaml`)
const tutorialLinks = loadYaml(`src/data/sidebars/tutorial-links.yaml`)
const contributingLinks = loadYaml(`src/data/sidebars/contributing-links.yaml`)
const navLinks = {
docs: loadYaml(`src/data/sidebars/doc-links.yaml`),
tutorial: loadYaml(`src/data/sidebars/tutorial-links.yaml`),
contributing: loadYaml(`src/data/sidebars/contributing-links.yaml`),
}

// flatten sidebar links trees for easier next/prev link calculation
function flattenList(itemList) {
Expand All @@ -12,36 +15,30 @@ function flattenList(itemList) {
}, [])
}

function flattenFilterList(itemList) {
const flattened = flattenList(itemList)
return flattened.filter(item => item.link && !item.link.includes(`#`))
function normalize(slug) {
return slug.endsWith(`/`) ? slug : `${slug}/`
}

const flattenedNavs = {
docs: flattenFilterList(docLinks[0].items),
tutorial: flattenFilterList(tutorialLinks[0].items),
contributing: flattenFilterList(contributingLinks[0].items),
}
const flattenedNavs = _.mapValues(navLinks, navList => {
const flattened = flattenList(navList[0].items)
return flattened.filter(item => item.link && !item.link.includes(`#`))
})

function findDoc(doc) {
if (!doc.link) return null
return (
doc.link === this.link ||
doc.link === this.link.substring(0, this.link.length - 1) // deal with stubs
const navIndicesBySlug = _.mapValues(flattenedNavs, navList =>
Object.fromEntries(
navList.map((item, index) => [normalize(item.link), index])
)
}
)

function getPrevAndNext(slug) {
const section = slug.split(`/`)[1]
const sectionNav = flattenedNavs[section]
if (!sectionNav) return null
const index = sectionNav.findIndex(findDoc, { link: slug })
if (index < 0) {
return null
}
const index = navIndicesBySlug[section][normalize(slug)]
if (_.isNil(index)) return null
return {
prev: index === 0 ? null : sectionNav[index - 1],
next: index === sectionNav.length - 1 ? null : sectionNav[index + 1],
prev: sectionNav[index - 1] || null,
next: sectionNav[index + 1] || null,
}
}

Expand Down

0 comments on commit 1c3ebf7

Please sign in to comment.