mirror of
https://github.com/immich-app/immich.git
synced 2025-05-24 01:12:58 -04:00
* fix(deps): update typescript-projects * chore: clean up --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jason Rasmussen <jason@rasm.me>
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import { useWindowSize } from '@docusaurus/theme-common';
|
|
import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
|
|
import React, { useEffect, useState } from 'react';
|
|
|
|
export default function VersionSwitcher(): JSX.Element {
|
|
const [versions, setVersions] = useState([]);
|
|
const [label, setLabel] = useState('Versions');
|
|
|
|
const windowSize = useWindowSize();
|
|
|
|
useEffect(() => {
|
|
async function getVersions() {
|
|
try {
|
|
let baseUrl = 'https://immich.app';
|
|
if (window.location.origin === 'http://localhost:3005') {
|
|
baseUrl = window.location.origin;
|
|
}
|
|
|
|
const response = await fetch(`${baseUrl}/archived-versions.json`);
|
|
|
|
const archiveVersions = await response.json();
|
|
|
|
const allVersions = [
|
|
{ label: 'Next', url: 'https://main.preview.immich.app' },
|
|
{ label: 'Latest', url: 'https://immich.app' },
|
|
...archiveVersions,
|
|
];
|
|
setVersions(allVersions);
|
|
|
|
const activeVersion = allVersions.find((version) => new URL(version.url).origin === window.location.origin);
|
|
if (activeVersion) {
|
|
setLabel(activeVersion.label);
|
|
}
|
|
} catch (error) {
|
|
console.error('Failed to fetch versions', error);
|
|
}
|
|
}
|
|
|
|
if (versions.length === 0) {
|
|
getVersions();
|
|
}
|
|
}, []);
|
|
|
|
return (
|
|
versions.length > 0 && (
|
|
<DropdownNavbarItem
|
|
className="navbar__item"
|
|
label={label}
|
|
mobile={windowSize === 'mobile'}
|
|
items={versions.map(({ label, url }) => ({
|
|
label,
|
|
to: url,
|
|
target: '_self',
|
|
}))}
|
|
/>
|
|
)
|
|
);
|
|
}
|