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;