diff --git a/src/common/app-paths/directory-for-downloads.injectable.ts b/src/common/app-paths/directory-for-downloads.injectable.ts new file mode 100644 index 0000000000..503b77061e --- /dev/null +++ b/src/common/app-paths/directory-for-downloads.injectable.ts @@ -0,0 +1,13 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { createLazyInitializableState } from "../initializable-state/create-lazy"; +import { appPathsInjectionToken } from "./token"; + +const directoryForDownloadsInjectable = createLazyInitializableState({ + id: "directory-for-downloads", + init: (di) => di.inject(appPathsInjectionToken).get().downloads, +}); + +export default directoryForDownloadsInjectable; diff --git a/src/common/app-paths/directory-for-downloads/directory-for-downloads.injectable.ts b/src/common/app-paths/directory-for-downloads/directory-for-downloads.injectable.ts deleted file mode 100644 index 944c8a656a..0000000000 --- a/src/common/app-paths/directory-for-downloads/directory-for-downloads.injectable.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectable } from "@ogre-tools/injectable"; -import { appPathsInjectionToken } from "../app-path-injection-token"; - -const directoryForDownloadsInjectable = getInjectable({ - id: "directory-for-downloads", - instantiate: (di) => di.inject(appPathsInjectionToken).downloads, -}); - -export default directoryForDownloadsInjectable; diff --git a/src/renderer/components/+extensions/__tests__/extensions.test.tsx b/src/renderer/components/+extensions/__tests__/extensions.test.tsx index cde0dd15fc..072ff1a78b 100644 --- a/src/renderer/components/+extensions/__tests__/extensions.test.tsx +++ b/src/renderer/components/+extensions/__tests__/extensions.test.tsx @@ -16,7 +16,7 @@ import type { DiRender } from "../../test-utils/renderFor"; import { renderFor } from "../../test-utils/renderFor"; import extensionDiscoveryInjectable from "../../../../extensions/extension-discovery/extension-discovery.injectable"; import directoryForUserDataInjectable from "../../../../common/app-paths/directory-for-user-data.injectable"; -import directoryForDownloadsInjectable from "../../../../common/app-paths/directory-for-downloads/directory-for-downloads.injectable"; +import directoryForDownloadsInjectable from "../../../../common/app-paths/directory-for-downloads.injectable"; import assert from "assert"; import type { InstallExtensionFromInput } from "../install-extension-from-input.injectable"; import installExtensionFromInputInjectable from "../install-extension-from-input.injectable"; @@ -46,7 +46,9 @@ describe("Extensions", () => { di.override(directoryForUserDataInjectable, () => ({ get: () => "some-directory-for-user-data", })); - di.override(directoryForDownloadsInjectable, () => "some-directory-for-downloads"); + di.override(directoryForDownloadsInjectable, () => ({ + get: () => "some-directory-for-downloads", + })); render = renderFor(di); diff --git a/src/renderer/components/+extensions/install-from-select-file-dialog.injectable.ts b/src/renderer/components/+extensions/install-from-select-file-dialog.injectable.ts index ae9dddc299..e4a44755ef 100644 --- a/src/renderer/components/+extensions/install-from-select-file-dialog.injectable.ts +++ b/src/renderer/components/+extensions/install-from-select-file-dialog.injectable.ts @@ -6,34 +6,29 @@ import { getInjectable } from "@ogre-tools/injectable"; import { requestOpenFilePickingDialog } from "../../ipc"; import { supportedExtensionFormats } from "./supported-extension-formats"; import attemptInstallsInjectable from "./attempt-installs.injectable"; -import directoryForDownloadsInjectable from "../../../common/app-paths/directory-for-downloads/directory-for-downloads.injectable"; - -interface Dependencies { - attemptInstalls: (filePaths: string[]) => Promise; - directoryForDownloads: string; -} - -const installFromSelectFileDialog = ({ attemptInstalls, directoryForDownloads }: Dependencies) => async () => { - const { canceled, filePaths } = await requestOpenFilePickingDialog({ - defaultPath: directoryForDownloads, - properties: ["openFile", "multiSelections"], - message: `Select extensions to install (formats: ${supportedExtensionFormats.join(", ")}), `, - buttonLabel: "Use configuration", - filters: [{ name: "tarball", extensions: supportedExtensionFormats }], - }); - - if (!canceled) { - await attemptInstalls(filePaths); - } -}; +import directoryForDownloadsInjectable from "../../../common/app-paths/directory-for-downloads.injectable"; const installFromSelectFileDialogInjectable = getInjectable({ id: "install-from-select-file-dialog", - instantiate: (di) => installFromSelectFileDialog({ - attemptInstalls: di.inject(attemptInstallsInjectable), - directoryForDownloads: di.inject(directoryForDownloadsInjectable), - }), + instantiate: (di) => { + const attemptInstalls = di.inject(attemptInstallsInjectable); + const directoryForDownloads = di.inject(directoryForDownloadsInjectable); + + return async () => { + const { canceled, filePaths } = await requestOpenFilePickingDialog({ + defaultPath: directoryForDownloads.get(), + properties: ["openFile", "multiSelections"], + message: `Select extensions to install (formats: ${supportedExtensionFormats.join(", ")}), `, + buttonLabel: "Use configuration", + filters: [{ name: "tarball", extensions: supportedExtensionFormats }], + }); + + if (!canceled) { + await attemptInstalls(filePaths); + } + }; + }, }); export default installFromSelectFileDialogInjectable;