Newer
Older
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'
import BrowserOnly from '@docusaurus/BrowserOnly'

David Schwarzmann
committed
import useAsync from '@hooks/useAsync'
import getLatestVersion from "@lib/utils/getLatestVersion";
import DownloadLabel from "@components/DownloadLabel";
import VersionSelect from "@components/VersionSelect";
const SCHEMA_BASE_URL = 'https://schema.fitko.de/fit-connect'
export default function ApiSpec(props) {
const {artifact, path, version, gitlabProjectId, includePrerelease, includePrereleaseVersion} = props
const [selectedVersion, setSelectedVersion] = useState('')
const isInBrowser = ExecutionEnvironment.canUseDOM
const {execute, status, error, value: latestVersion} = useAsync(getLatestVersion, {
siteVersion: version === undefined ? '*' : version,
projectId: gitlabProjectId,
includePrerelease: !!includePrereleaseVersion
}, false)
if (isInBrowser) {
useEffect(() => {
execute()
}, [])
useEffect(async () => {
if (status === 'success') {
setSelectedVersion(latestVersion)
}
}, [status])
}
return (
<BrowserOnly fallback={<div>Lädt...</div>}>
{() => {
import('rapidoc')
return (
<div>
<p>Die aktuell angezeigte Version der API ist {status === 'success' &&
<code>{latestVersion}</code>} {status === 'success' &&
<DownloadLabel baseURL={`${SCHEMA_BASE_URL}/${path}`} version={selectedVersion} artifact={artifact} label="OpenAPI"/>}.
<VersionSelect version={selectedVersion} setVersion={setSelectedVersion} gitlabId={gitlabProjectId} includePrerelease={includePrerelease} /><br/>
{status === 'success' && selectedVersion && <rapi-doc
render-style="view"
layout="column"
spec-url={`${SCHEMA_BASE_URL}/${path}/${selectedVersion}/${artifact}`}
schema-description-expanded="true"
show-info="false"
show-header="false"
show-components="false"
allow-spec-file-load="false"
allow-authentication={props.allowAuthentication || "true"}
info-description-headings-in-navbar="false"
allow-try={props.allowTry || "false"}
primary-color="#11171a"
allow-server-selection="false"
server-url=""
/>}
{status === 'error' && <p>Die API-Spezifikation konnte leider nicht geladen werden.</p>}
</div>
)
}}
</BrowserOnly>
)
}