Skip to content
Snippets Groups Projects
Commit 1c692c0e authored by Mark Kane's avatar Mark Kane
Browse files

add logic to verify and handle wrong versions

parent 4d2a974d
No related branches found
No related tags found
1 merge request!304add version query param to ApiSpec
import React, {useEffect} from "react" import React, {useEffect} from "react"
import useAsync from '@hooks/useAsync'
import getVersionList from "@lib/utils/getVersionList";
import { useHistory } from '@docusaurus/router'; import { useHistory } from '@docusaurus/router';
export default ({ version, setVersion, gitlabId, includePrerelease = false }) => { export default ({ version, versions, setVersion, gitlabId, includePrerelease = false }) => {
const {execute, status, error, value: versions} = useAsync(getVersionList, {
projectId: gitlabId,
includePrerelease,
}, false)
const selectStyle = { const selectStyle = {
border: "1px solid rgba(128, 126, 163, 0.8)", border: "1px solid rgba(128, 126, 163, 0.8)",
...@@ -20,10 +13,6 @@ export default ({ version, setVersion, gitlabId, includePrerelease = false }) => ...@@ -20,10 +13,6 @@ export default ({ version, setVersion, gitlabId, includePrerelease = false }) =>
const history = useHistory() const history = useHistory()
const params = new URLSearchParams() const params = new URLSearchParams()
useEffect(() => {
execute()
}, [])
return <div> return <div>
API Version anzeigen: <select API Version anzeigen: <select
style={selectStyle} style={selectStyle}
......
import React, {useEffect, useState} from 'react' import React, {useEffect, useState} from 'react'
import semver from "semver"; import semver from 'semver'
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment' import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'
import BrowserOnly from '@docusaurus/BrowserOnly' import BrowserOnly from '@docusaurus/BrowserOnly'
import { useLocation } from '@docusaurus/router'; import { useLocation } from '@docusaurus/router'
import useAsync from '@hooks/useAsync' import useAsync from '@hooks/useAsync'
import getLatestVersion from "@lib/utils/getLatestVersion"; import getLatestVersion from '@lib/utils/getLatestVersion'
import DownloadLabel from "@components/DownloadLabel"; import getVersionList from '@lib/utils/getVersionList'
import VersionSelect from "@components/VersionSelect"; import DownloadLabel from '@components/DownloadLabel'
import VersionSelect from '@components/VersionSelect'
const SCHEMA_BASE_URL = 'https://schema.fitko.de/fit-connect' const SCHEMA_BASE_URL = 'https://schema.fitko.de/fit-connect'
...@@ -17,14 +18,16 @@ export default function ApiSpec(props) { ...@@ -17,14 +18,16 @@ export default function ApiSpec(props) {
let { version } = props let { version } = props
const search = useLocation().search; const search = useLocation().search;
const queryVersion = new URLSearchParams(search).get('version'); const queryVersion = new URLSearchParams(search).get('version');
if (queryVersion && semver.valid(queryVersion)) {
version = queryVersion;
}
const [selectedVersion, setSelectedVersion] = useState('') const [selectedVersion, setSelectedVersion] = useState('')
const isInBrowser = ExecutionEnvironment.canUseDOM const isInBrowser = ExecutionEnvironment.canUseDOM
const {execute, status, error, value: latestVersion} = useAsync(getLatestVersion, { const {execute: executeList, status: statusList, value: versions} = useAsync(getVersionList, {
projectId: gitlabProjectId,
includePrerelease,
}, false)
const {execute, status, value: latestVersion} = useAsync(getLatestVersion, {
siteVersion: version === undefined ? '*' : version, siteVersion: version === undefined ? '*' : version,
projectId: gitlabProjectId, projectId: gitlabProjectId,
includePrerelease: !!includePrereleaseVersion includePrerelease: !!includePrereleaseVersion
...@@ -32,12 +35,22 @@ export default function ApiSpec(props) { ...@@ -32,12 +35,22 @@ export default function ApiSpec(props) {
if (isInBrowser) { if (isInBrowser) {
useEffect(() => { useEffect(() => {
execute() executeList()
}, []) }, [])
useEffect(async () => {
if (statusList === 'success') {
execute()
}
}, [statusList])
useEffect(async () => { useEffect(async () => {
if (status === 'success') { if (status === 'success') {
setSelectedVersion(version && version !== '*' ? version : latestVersion) if (semver.valid(queryVersion) && versions.includes(queryVersion)) {
setSelectedVersion(queryVersion)
} else {
setSelectedVersion(version && version !== '*' ? version : latestVersion)
}
} }
}, [status]) }, [status])
} }
...@@ -52,7 +65,15 @@ export default function ApiSpec(props) { ...@@ -52,7 +65,15 @@ export default function ApiSpec(props) {
<p> Diese API-Spezifikation {status === 'success' && <p> Diese API-Spezifikation {status === 'success' &&
<DownloadLabel baseURL={`${SCHEMA_BASE_URL}/${path}`} version={selectedVersion} artifact={artifact} label="OpenAPI"/>}. <DownloadLabel baseURL={`${SCHEMA_BASE_URL}/${path}`} version={selectedVersion} artifact={artifact} label="OpenAPI"/>}.
</p> </p>
<VersionSelect version={selectedVersion} setVersion={setSelectedVersion} gitlabId={gitlabProjectId} includePrerelease={includePrerelease} /><br/>
{statusList === 'success' && selectedVersion && <VersionSelect
versions={versions}
version={selectedVersion}
setVersion={setSelectedVersion}
gitlabId={gitlabProjectId}
includePrerelease={includePrerelease}
/>}
<br />
{status === 'success' && selectedVersion && <rapi-doc {status === 'success' && selectedVersion && <rapi-doc
render-style="view" render-style="view"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment