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
import { useEffect, useState } from 'react'
import useAsync from '@hooks/useAsync'
import semver from 'semver'
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'
import getLatestVersion from '@lib/utils/getLatestVersion'
import getVersionList from '@lib/utils/getVersionList'
function useVersion(version, queryVersion, gitlabProjectId, includePrerelease, includePrereleaseVersion) {
const [selectedVersion, setSelectedVersion] = useState(version);
const isInBrowser = ExecutionEnvironment.canUseDOM
const {execute: executeList, status: statusList, value: versions} = useAsync(getVersionList, {
projectId: gitlabProjectId,
includePrerelease,
}, false)
const getLatestVersionOptions = {
siteVersion: version === undefined ? '*' : version,
projectId: gitlabProjectId,
includePrerelease: !!includePrereleaseVersion,
versions: versions,
}
const {execute, status, value: latestVersion} = useAsync(() => getLatestVersion(getLatestVersionOptions), {}, false)
if (isInBrowser) {
useEffect(() => {
executeList()
}, [])
useEffect(async () => {
if (statusList === 'success') {
getLatestVersionOptions.versions = versions
execute()
}
}, [statusList])
useEffect(async () => {
if (status === 'success' || latestVersion) {
if (semver.valid(queryVersion) && versions.includes(queryVersion)) {
setSelectedVersion(queryVersion)
} else {
setSelectedVersion(version && !version.includes('*') ? version : latestVersion)
}
}
}, [status])
}
return [versions, selectedVersion, setSelectedVersion];
}
export default useVersion;