import { useEffect } from 'react'; import Link from '@docusaurus/Link'; import type { PropVersionMetadata } from '@docusaurus/plugin-content-docs'; import type { GlobalVersion } from '@docusaurus/plugin-content-docs/client'; import { useDocsPreferredVersion, useDocsVersion } from '@docusaurus/plugin-content-docs/client'; import type { Props as DocItemProps } from '@theme/DocItem'; import Heading from '@theme/Heading'; import type { ApiOptions, PackageReflectionGroup } from '../types'; import { removeScopes } from '../utils/links'; import { Footer } from './Footer'; import { VersionBanner } from './VersionBanner'; export interface ApiIndexProps extends Pick { history: { location: { pathname: string }; replace: (path: string) => void; }; options: ApiOptions; packages: PackageReflectionGroup[]; } function addVersionToUrl( url: string, latestVersion: PropVersionMetadata, preferredVersion: GlobalVersion | null | undefined, ) { if ( !url.match(/api\/([\d.]+)/) && !url.includes('api/next') && preferredVersion && preferredVersion.name !== latestVersion.version ) { const version = preferredVersion.name === 'current' ? 'next' : preferredVersion.name; if (url.endsWith('/api')) { return `${url}/${version}`; } return url.replace('/api/', `/api/${version}/`); } return url; } export default function ApiIndex({ options, packages, history }: ApiIndexProps) { const latestVersion = useDocsVersion(); const { preferredVersion } = useDocsPreferredVersion(latestVersion.pluginId); useEffect(() => { // Redirect to package when only 1 if (packages.length === 1) { history.replace( addVersionToUrl( packages[0].entryPoints[0].reflection.permalink, latestVersion, preferredVersion, ), ); // Redirect to preferred version } else if (preferredVersion) { history.replace(addVersionToUrl(history.location.pathname, latestVersion, preferredVersion)); } }, [packages, history, latestVersion, preferredVersion]); return (
{options.banner && (
{/* eslint-disable-next-line react/no-danger, react-perf/jsx-no-new-object-as-prop */}
)}
API

Packages

    {packages.map((pkg) => (
  • v{pkg.packageVersion}{' '} {removeScopes(pkg.packageName, options.scopes)}
  • ))}
); }