import { useEffect } from 'react' import cx from 'classnames' import { DefaultLayout } from 'components/DefaultLayout' import { MarkdownContent } from 'components/ui/MarkdownContent' import { Lead } from 'components/ui/Lead' import { PermissionsStatement } from 'components/ui/PermissionsStatement' import { RestOperation } from './RestOperation' import { useAutomatedPageContext } from 'components/context/AutomatedPageContext' import { Operation } from './types' import { ClientSideHighlight } from 'components/ClientSideHighlight' import { ClientSideRedirects } from 'components/ClientSideRedirects' import { RestRedirect } from 'components/RestRedirect' import styles from './RestOperation.module.scss' export type StructuredContentT = { restOperations: Operation[] } export const RestReferencePage = ({ restOperations }: StructuredContentT) => { const { title, intro, renderedPage, permissions } = useAutomatedPageContext() // Scrollable code blocks in our REST API docs and elsewhere aren't accessible // via keyboard navigation without setting tabindex="0". But we don't want to set // this attribute on every `
` code block, only the ones where there are scroll
// bars because the content isn't all visible.
useEffect(() => {
const codeBlocks = document.querySelectorAll('pre')
codeBlocks.forEach((codeBlock) => {
if (
codeBlock.scrollWidth > codeBlock.clientWidth ||
codeBlock.scrollHeight > codeBlock.clientHeight
) {
codeBlock.setAttribute('tabindex', '0')
}
})
}, [])
return (
{/* Doesn't matter *where* this is included because it will
never render anything. It always just return null. */}
{title}
{intro && (
{intro}
)}
{permissions && }
{renderedPage && {renderedPage} }
{restOperations.length > 0 && (
{restOperations.map((operation) => (
))}
)}
)
}