import { AvailableVersionsSlider } from "../components/available-versions/available-versions-slider.component"; import { Slideshow } from "renderer/components/slideshow/slideshow.component"; import { createContext, useMemo, useState } from "react"; import { BsmButton } from "renderer/components/shared/bsm-button.component"; import { AnimatePresence, motion } from "framer-motion"; import { useTranslation } from "renderer/hooks/use-translation.hook"; import { BSVersionManagerService } from "renderer/services/bs-version-manager.service"; import { BsmDropdownButton } from "renderer/components/shared/bsm-dropdown-button.component"; import { lastValueFrom, map } from "rxjs"; import { useService } from "renderer/hooks/use-service.hook"; import { BSVersion } from "shared/bs-version.interface"; import { useObservable } from "renderer/hooks/use-observable.hook"; import { BsDownloaderService } from "renderer/services/bs-version-download/bs-downloader.service"; import { logRenderError } from "renderer"; export const AvailableVersionsContext = createContext<{ selectedVersion: BSVersion; setSelectedVersion: (version: BSVersion) => void }>(null); export function AvailableVersionsList() { const bsDownloader = useService(BsDownloaderService); const versionManager = useService(BSVersionManagerService); const [selectedVersion, setSelectedVersion] = useState(null); const contextValue = useMemo(() => ({ selectedVersion, setSelectedVersion }), [selectedVersion]); const downloading = useObservable(() => bsDownloader.downloadingVersion$.pipe(map(v => !!v))); const t = useTranslation(); const startDownload = async () => { return bsDownloader.downloadVersion(selectedVersion) .catch(logRenderError) .finally(() => setSelectedVersion(null)); }; const importVersion = () => { return lastValueFrom(versionManager.importVersion()).catch(() => {}); }; const refreshVersions = () => { return Promise.all([ versionManager.askAvailableVersions(), versionManager.askInstalledVersions() ]).catch(logRenderError); } return (

{t("pages.available-versions.title")}

{selectedVersion && !downloading && ( )}
); }