import { useEffect } from 'react' import { DefaultLayout } from '@/frame/components/DefaultLayout' import { MarkdownContent } from '@/frame/components/ui/MarkdownContent' import { Lead } from '@/frame/components/ui/Lead' import { PermissionsStatement } from '@/frame/components/ui/PermissionsStatement' import { RestOperation } from './RestOperation' import { useAutomatedPageContext } from '@/automated-pipelines/components/AutomatedPageContext' import { Operation } from './types' import { ClientSideRedirects } from '@/rest/components/ClientSideRedirects' import { RestRedirect } from '@/rest/components/RestRedirect' import { Breadcrumbs } from '@/frame/components/page-header/Breadcrumbs' export type StructuredContentT = { restOperations: Operation[] } export const RestReferencePage = ({ restOperations }: StructuredContentT) => { const { title, intro, renderedPage, permissions, product } = 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')
for (const codeBlock of codeBlocks) {
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}
)}
{renderedPage && {renderedPage} }
{restOperations.length > 0 && (
{restOperations.map((operation) => (
))}
)}
)
}