/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import React, { useState } from "react"; import { observer } from "mobx-react"; import { Input, InputValidators } from "../input"; import { SubTitle } from "../layout/sub-title"; import type { UserStore } from "../../../common/user-store"; import { Select } from "../select"; import { Switch } from "../switch"; import { defaultPackageMirror, packageMirrors } from "../../../common/user-store/preferences-helpers"; import directoryForBinariesInjectable from "../../../common/app-paths/directory-for-binaries/directory-for-binaries.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import userStoreInjectable from "../../../common/user-store/user-store.injectable"; import directoryForKubectlBinariesInjectable from "../../../common/app-paths/directory-for-kubectl-binaries/directory-for-kubectl-binaries.injectable"; interface Dependencies { defaultPathForGeneralBinaries: string; defaultPathForKubectlBinaries: string; userStore: UserStore; } const downloadMirrorOptions = Array.from(packageMirrors, ([name, mirror]) => ({ value: name, label: mirror.label, isDisabled: !mirror.platforms.has(process.platform), })); const NonInjectedKubectlBinaries= observer(({ defaultPathForGeneralBinaries, defaultPathForKubectlBinaries, userStore, }: Dependencies) => { const [downloadPath, setDownloadPath] = useState(userStore.downloadBinariesPath || ""); const [binariesPath, setBinariesPath] = useState(userStore.kubectlBinariesPath || ""); const pathValidator = downloadPath ? InputValidators.isPath : undefined; const save = () => { userStore.downloadBinariesPath = downloadPath; userStore.kubectlBinariesPath = binariesPath; }; return ( <> userStore.downloadKubectlBinaries = !userStore.downloadKubectlBinaries} > Download kubectl binaries matching the Kubernetes cluster version userStore.downloadMirror = option?.value ?? defaultPackageMirror} isDisabled={!userStore.downloadKubectlBinaries} themeName="lens" /> The directory to download binaries into. > ); }, ); export const KubectlBinaries = withInjectables( NonInjectedKubectlBinaries, { getProps: (di) => ({ defaultPathForGeneralBinaries: di.inject(directoryForBinariesInjectable), defaultPathForKubectlBinaries: di.inject(directoryForKubectlBinariesInjectable), userStore: di.inject(userStoreInjectable), }), }, );