From e0c320618eea3906decf9c49d68821886a53bfa9 Mon Sep 17 00:00:00 2001
From: David Schwarzmann <david.schwarzmann@codecentric.de>
Date: Thu, 7 Oct 2021 14:02:12 +0200
Subject: [PATCH] fix: Fix version loading for metadata and routing api

---
 docs/apis/metadata.mdx                        |  2 +-
 docs/apis/routing-api.mdx                     |  2 +-
 src/components/ApiLink.js                     |  3 +-
 src/components/ApiSpec.js                     |  9 ++---
 src/components/JSONSchema.js                  | 35 ++++++++++---------
 src/utils/getLatestVersion.js                 |  7 ++--
 versioned_docs/version-0.14/apis/metadata.mdx |  2 +-
 .../version-0.14/apis/routing-api.mdx         |  2 +-
 8 files changed, 30 insertions(+), 32 deletions(-)

diff --git a/docs/apis/metadata.mdx b/docs/apis/metadata.mdx
index 336ee6dac..b04ed3111 100644
--- a/docs/apis/metadata.mdx
+++ b/docs/apis/metadata.mdx
@@ -5,4 +5,4 @@ hide_table_of_contents: true
 
 import JSONSchema from '@site/src/components/JSONSchema'
 
-<JSONSchema />
+<JSONSchema enforceLatest={true} />
diff --git a/docs/apis/routing-api.mdx b/docs/apis/routing-api.mdx
index c41155d5d..5dd1b1411 100644
--- a/docs/apis/routing-api.mdx
+++ b/docs/apis/routing-api.mdx
@@ -5,4 +5,4 @@ hide_table_of_contents: true
 
 import ApiSpec from '@site/src/components/ApiSpec'
 
-<ApiSpec gitlabProjectId={"44"} path={"routing-api"} artifact={"routing-api.yaml"} />
+<ApiSpec gitlabProjectId={"44"} path={"routing-api"} artifact={"routing-api.yaml"} enforceLatest={true} />
diff --git a/src/components/ApiLink.js b/src/components/ApiLink.js
index 27286d75b..8428ee400 100644
--- a/src/components/ApiLink.js
+++ b/src/components/ApiLink.js
@@ -1,12 +1,11 @@
 import React from "react"
 import Link from '@docusaurus/Link'
 
-export default ({ to, withMethod='get', children }) => {
+export default ({to, withMethod = 'get', children}) => {
   const url = `/docs/apis/submission-api#${withMethod.toLowerCase()}-${to.replace(/[{}]/g, '-')}`
   if (children) {
     return <Link to={url}>{children}</Link>
   } else {
     return <Link to={url}><code>{withMethod.toUpperCase()} {to}</code></Link>
   }
-
 }
diff --git a/src/components/ApiSpec.js b/src/components/ApiSpec.js
index 92edc8591..19f9a41fd 100644
--- a/src/components/ApiSpec.js
+++ b/src/components/ApiSpec.js
@@ -2,10 +2,7 @@ import React, {useEffect} from 'react'
 import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'
 import BrowserOnly from '@docusaurus/BrowserOnly'
 
-import {
-  useActivePlugin,
-  useActiveVersion,
-} from '@theme/hooks/useDocs'
+import {useActivePlugin, useActiveVersion,} from '@theme/hooks/useDocs'
 
 import useAsync from '@site/src/hooks/useAsync'
 import getLatestVersion from "@site/src/utils/getLatestVersion";
@@ -17,10 +14,10 @@ export default function ApiSpec(props) {
   const isInBrowser = ExecutionEnvironment.canUseDOM
 
   const {pluginId} = useActivePlugin({failfast: true})
-  const { name: siteVersion } = useActiveVersion(pluginId);
+  const { name: siteVersion } = useActiveVersion(pluginId)
 
   const {execute, status, error, value: latestVersion} = useAsync(getLatestVersion, {
-    siteVersion,
+    siteVersion: props.enforceLatest ? '*' : siteVersion,
     projectId: props.gitlabProjectId
   }, false)
 
diff --git a/src/components/JSONSchema.js b/src/components/JSONSchema.js
index 06d16ba10..fd049d6e8 100644
--- a/src/components/JSONSchema.js
+++ b/src/components/JSONSchema.js
@@ -1,9 +1,10 @@
 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 {useActivePlugin, useActiveVersion,} from '@theme/hooks/useDocs'
+
 import CodeBlock from '@theme/CodeBlock'
 
 import useAsync from '@site/src/hooks/useAsync'
@@ -20,41 +21,43 @@ const loadSchema = async (version) => {
   }).then(({data}) => JSON.stringify(data, null, 2))
 }
 
-export default function JSONSchema() {
+export default function JSONSchema(props) {
   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 {pluginId} = useActivePlugin({failfast: true})
+  const {name: siteVersion} = useActiveVersion(pluginId)
+
+  const {execute, status, error, value: latestVersion} = useAsync(getLatestVersion, {
+    siteVersion: props.enforceLatest ? '*' : siteVersion,
+    projectId: GITLAB_PROJECT_ID,
+    includePrerelease: true
+  }, false)
+
   const [metadataSchema, setMetadataSchema] = useState(null)
 
   if (isInBrowser) {
     useEffect(() => {
-      getVersion()
+      execute()
     }, [])
 
     useEffect(async () => {
-      if (versionStatus === 'success') {
+      if (status === 'success') {
+        console.log('vvvvvv', latestVersion, siteVersion, props.enforceLatest)
         setMetadataSchema(await loadSchema(latestVersion))
       }
-    }, [versionStatus])
+    }, [status])
   }
 
   return (
     <BrowserOnly fallback={<div>Lädt...</div>}>
       {() => (
         <div>
-          <p>Die aktuell angezeigte Version des Metadatenschema ist {versionStatus === 'success' &&
-          <code>{latestVersion}</code>} {versionStatus === 'success' &&
+          <p>Die aktuell angezeigte Version des Metadatenschema ist {status === 'success' &&
+          <code>{latestVersion}</code>} {status === '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>}
+          {status === 'error' && <p>Das Metadatenschema konnte leider nicht geladen werden.</p>}
         </div>
       )
       }
diff --git a/src/utils/getLatestVersion.js b/src/utils/getLatestVersion.js
index 6590d2cda..41d910395 100644
--- a/src/utils/getLatestVersion.js
+++ b/src/utils/getLatestVersion.js
@@ -1,8 +1,7 @@
 import axios from "axios";
 import semver from "semver";
 
-export default async function ({siteVersion, projectId}) {
-  console.log('siteVersion', siteVersion)
+export default async function ({siteVersion, projectId, includePrerelease=false}) {
   if (siteVersion === 'current') {
     return 'latest'
   } else {
@@ -13,11 +12,11 @@ export default async function ({siteVersion, projectId}) {
       .then(async ({data}) => {
         const versionRange = `~${siteVersion}`
         const suitableVersions = await data
-          .filter(({name}) => semver.satisfies(name, versionRange))
+          .filter(({name}) => semver.satisfies(name, versionRange, {includePrerelease}))
           .map(({name}) => name)
           .sort()
 
-        return semver.maxSatisfying(suitableVersions, versionRange)
+        return semver.maxSatisfying(suitableVersions, versionRange, {includePrerelease})
       })
   }
 }
diff --git a/versioned_docs/version-0.14/apis/metadata.mdx b/versioned_docs/version-0.14/apis/metadata.mdx
index 336ee6dac..b04ed3111 100644
--- a/versioned_docs/version-0.14/apis/metadata.mdx
+++ b/versioned_docs/version-0.14/apis/metadata.mdx
@@ -5,4 +5,4 @@ hide_table_of_contents: true
 
 import JSONSchema from '@site/src/components/JSONSchema'
 
-<JSONSchema />
+<JSONSchema enforceLatest={true} />
diff --git a/versioned_docs/version-0.14/apis/routing-api.mdx b/versioned_docs/version-0.14/apis/routing-api.mdx
index c41155d5d..5dd1b1411 100644
--- a/versioned_docs/version-0.14/apis/routing-api.mdx
+++ b/versioned_docs/version-0.14/apis/routing-api.mdx
@@ -5,4 +5,4 @@ hide_table_of_contents: true
 
 import ApiSpec from '@site/src/components/ApiSpec'
 
-<ApiSpec gitlabProjectId={"44"} path={"routing-api"} artifact={"routing-api.yaml"} />
+<ApiSpec gitlabProjectId={"44"} path={"routing-api"} artifact={"routing-api.yaml"} enforceLatest={true} />
-- 
GitLab