* cleanup FEATURE_NEXTJS * fixing some server tests * updating article a for server tests * update h2 to h4 map topic tests * data off on TOCs * updating dropdown article versions links * Update so markdown renders in intros * updating typo and all server tests are now passing * remove nextjs feature flag * head.js tests pass * updating article-version-picker * remove nextjs feature flag browser test * update header.js tests * fix page-titles.js test * fix deprecated-enterprise versions * adding early access * testing * getting childTocItem * fixing table of contents to show child toc items * updated to 2 because the sidebar article also has the same link * remove comment * updating pick * Update TocLandingContext.tsx * update package.json and change className to h4 for h2 * updating with mikes feedback * remove a.active test * React clean up: Delete unnecessary layouts/includes Part 2 (#20143) * Delete unnecessary layouts * setting back tests failing :( * update layouts * delete unnecessary includes * remove github-ae-release-notes and updating layouts * remove a.active test
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
import { createContext, useContext } from 'react'
|
|
|
|
export type LearningTrack = {
|
|
trackName?: string
|
|
prevGuide?: { href: string; title: string }
|
|
nextGuide?: { href: string; title: string }
|
|
}
|
|
|
|
export type MiniTocItem = {
|
|
indentationLevel: number
|
|
platform: string
|
|
contents: string
|
|
}
|
|
|
|
export type ArticleContextT = {
|
|
title: string
|
|
intro: string
|
|
renderedPage: string
|
|
miniTocItems: Array<MiniTocItem>
|
|
contributor: { name: string; URL: string } | null
|
|
permissions?: string
|
|
includesPlatformSpecificContent: boolean
|
|
defaultPlatform?: string
|
|
product?: string
|
|
currentLearningTrack?: LearningTrack
|
|
}
|
|
|
|
export const ArticleContext = createContext<ArticleContextT | null>(null)
|
|
|
|
export const useArticleContext = (): ArticleContextT => {
|
|
const context = useContext(ArticleContext)
|
|
|
|
if (!context) {
|
|
throw new Error('"useArticleContext" may only be used inside "ArticleContext.Provider"')
|
|
}
|
|
|
|
return context
|
|
}
|
|
|
|
export const getArticleContextFromRequest = (req: any): ArticleContextT => {
|
|
const page = req.context.page
|
|
return {
|
|
title: page.titlePlainText,
|
|
intro: page.intro,
|
|
renderedPage: req.context.renderedPage || '',
|
|
miniTocItems:
|
|
(req.context.miniTocItems || []).map((item: any) => {
|
|
return {
|
|
indentationLevel: item.indentationLevel || 0,
|
|
platform: item.platform || '',
|
|
contents: item.contents || '',
|
|
}
|
|
}) || [],
|
|
contributor: page.contributor || null,
|
|
permissions: page.permissions || '',
|
|
includesPlatformSpecificContent: page.includesPlatformSpecificContent || false,
|
|
defaultPlatform: page.defaultPlatform || '',
|
|
product: page.product || '',
|
|
currentLearningTrack: req.context.currentLearningTrack,
|
|
}
|
|
}
|