Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import React, {useEffect, useState} from 'react'
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'
import useDocusaurusContext from '@docusaurus/useDocusaurusContext'
import BrowserOnly from '@docusaurus/BrowserOnly'
import axios from 'axios'
import CodeBlock from '@theme/CodeBlock'
import useAsync from '@site/src/hooks/useAsync'
import getLatestVersion from "@site/src/utils/getLatestVersion";
import DownloadLabel from "./DownloadLabel";
const SCHEMA_BASE_URL = 'https://schema.fitko.de/fit-connect/metadata'
const SCHEMA_FILE_NAME = 'metadata.schema.json'
const GITLAB_PROJECT_ID = 40
const loadSchema = async (version) => {
return await axios.get(`${SCHEMA_BASE_URL}/${version}/${SCHEMA_FILE_NAME}`).catch((error) => {
throw `Fetching of schema with version ${version} failed with status code ${error.response.status}`
}).then(({data}) => JSON.stringify(data, null, 2))
}
export default function JSONSchema() {
const isInBrowser = ExecutionEnvironment.canUseDOM
const {siteVersion = 'next'} = useDocusaurusContext().siteMetadata
const {
execute: getVersion,
status: versionStatus,
error: versionError,
value: latestVersion
} = useAsync(getLatestVersion, {siteVersion, projectId: GITLAB_PROJECT_ID}, false)
const [metadataSchema, setMetadataSchema] = useState(null)
if (isInBrowser) {
useEffect(() => {
getVersion()
}, [])
useEffect(async () => {
if (versionStatus === 'success') {
setMetadataSchema(await loadSchema(latestVersion))
}
}, [versionStatus])
}
return (
<BrowserOnly fallback={<div>Lädt...</div>}>
{() => (
<div>
<p>Die aktuell angezeigte Version des Metadatenschema ist {versionStatus === 'success' &&
<code>{latestVersion}</code>} {versionStatus === 'success' &&
<DownloadLabel baseURL={SCHEMA_BASE_URL} version={latestVersion} artifact={SCHEMA_FILE_NAME}/>}.</p>
{metadataSchema && <CodeBlock className={'json'}>{metadataSchema}</CodeBlock>}
{versionStatus === 'error' && <p>Das Metadatenschema konnte leider nicht geladen werden.</p>}
</div>
)
}
</BrowserOnly>
)
}