import Link from 'next/link' import orderBy from 'lodash.orderby' import ThemePicker from 'shared/components/theme-picker.js' import RssIcon from 'shared/components/icons/rss.js' import TutorialIcon from 'shared/components/icons/tutorial.js' import GuideIcon from 'shared/components/icons/guide.js' import HelpIcon from 'shared/components/icons/help.js' import DocsIcon from 'shared/components/icons/docs.js' // Don't show children for blog and showcase posts const keepClosed = ['blog', 'showcase', ] // TODO: For now we force tailwind to pickup these styles // At some point this should 'just work' though, but let's not worry about it now const force = [

,

] // List of icons matched to top-level slug const icons = { blog: , tutorials: , guides: , howtos: , reference: } /* helper method to order nav entries */ const order = obj => orderBy(obj, ['__order', '__title'], ['asc', 'asc']) // Component for the collapse toggle // Exported for re-use export const Chevron = ({w=8, m=2}) => // Helper method to filter out the real children const currentChildren = current => Object.values(order(current)) .filter(entry => (typeof entry === 'object')) // Shared classes for links // Exported for re-use export const linkClasses = `text-lg lg:text-xl py-1 hover:cursor-pointer text-base-content sm:text-neutral-content hover:text-secondary sm:hover:text-secondary-focus ` // Figure out whether a page is on the path to the active page const isActive = (slug, active) => { if (slug === active) return true let result = true const slugParts = slug.split('/') const activeParts = active.split('/') for (const i in slugParts) { if (slugParts[i] !== activeParts[i]) result = false } return result } // Component that renders a sublevel of navigation const SubLevel = ({ nodes={}, active }) => (

) // Component that renders a toplevel of navigation const TopLevel = ({ icon, title, nav, current, slug, hasChildren=false, active }) => (
{icon} {title} {hasChildren && } {hasChildren && }
) const Navigation = ({ app, active }) => { if (!app.navigation) return null const output = [] for (const page of order(app.navigation)) output.push(°} title={page.__title} slug={page.__slug} hasChildren={keepClosed.indexOf(page.__slug) === -1} nav={app.navigation} current={order(app.navigation[page.__slug])} active={active} />) return
{output}
} const PrimaryMenu = ({ app, active }) => ( ) export default PrimaryMenu