diff --git a/src/features/helm-charts/child-features/preferences/renderer/adding-of-custom-helm-repository/helm-file-input/get-file-paths.injectable.ts b/src/features/helm-charts/child-features/preferences/renderer/adding-of-custom-helm-repository/helm-file-input/get-file-paths.injectable.ts index d68c241239..3a45734e95 100644 --- a/src/features/helm-charts/child-features/preferences/renderer/adding-of-custom-helm-repository/helm-file-input/get-file-paths.injectable.ts +++ b/src/features/helm-charts/child-features/preferences/renderer/adding-of-custom-helm-repository/helm-file-input/get-file-paths.injectable.ts @@ -4,23 +4,29 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { FileFilter } from "electron"; +import type { PathPickOpts } from "../../../../../../../renderer/components/path-picker"; import openPathPickingDialogInjectable from "../../../../../../path-picking-dialog/renderer/pick-paths.injectable"; -const getFilePathsInjectable = getInjectable({ - id: "get-file-paths", +export interface RequestFilePathOptions extends Pick { + filter: FileFilter; +} - instantiate: (di) => { +export type RequestFilePaths = (options: RequestFilePathOptions) => Promise; + +const requestFilePathsInjectable = getInjectable({ + id: "request-file-paths", + + instantiate: (di): RequestFilePaths => { const openPathPickingDialog = di.inject(openPathPickingDialogInjectable); - return async (fileFilter: FileFilter) => await openPathPickingDialog({ + return async ({ filter, ...opts }) => await openPathPickingDialog({ properties: ["openFile", "showHiddenFiles"], message: "Select file", buttonLabel: "Use file", - filters: [fileFilter, { name: "Any", extensions: ["*"] }], + filters: [filter, { name: "Any", extensions: ["*"] }], + ...opts, }); }, - - causesSideEffects: true, }); -export default getFilePathsInjectable; +export default requestFilePathsInjectable; diff --git a/src/features/helm-charts/child-features/preferences/renderer/adding-of-custom-helm-repository/helm-file-input/helm-file-input.tsx b/src/features/helm-charts/child-features/preferences/renderer/adding-of-custom-helm-repository/helm-file-input/helm-file-input.tsx index 6a8a893c1f..64d814685e 100644 --- a/src/features/helm-charts/child-features/preferences/renderer/adding-of-custom-helm-repository/helm-file-input/helm-file-input.tsx +++ b/src/features/helm-charts/child-features/preferences/renderer/adding-of-custom-helm-repository/helm-file-input/helm-file-input.tsx @@ -7,8 +7,8 @@ import { Input } from "../../../../../../../renderer/components/input"; import { Icon } from "../../../../../../../renderer/components/icon"; import { withInjectables } from "@ogre-tools/injectable-react"; import React from "react"; -import getFilePathsInjectable from "./get-file-paths.injectable"; -import type { FileFilter } from "electron"; +import type { RequestFilePaths } from "./get-file-paths.injectable"; +import requestFilePathsInjectable from "./get-file-paths.injectable"; import isPathInjectable from "../../../../../../../renderer/components/input/validators/is-path.injectable"; interface HelmFileInputProps { @@ -20,7 +20,7 @@ interface HelmFileInputProps { } interface Dependencies { - getFilePaths: (fileFilter: FileFilter) => Promise<{ canceled: boolean; filePaths: string[] }>; + requestFilePaths: RequestFilePaths; isPath: InputValidator; } @@ -29,7 +29,7 @@ const NonInjectedHelmFileInput = ({ value, setValue, fileExtensions, - getFilePaths, + requestFilePaths, isPath, "data-testid": testId, }: Dependencies & HelmFileInputProps) => ( @@ -44,31 +44,26 @@ const NonInjectedHelmFileInput = ({ /> { - const { canceled, filePaths } = await getFilePaths({ + onClick={() => void requestFilePaths({ + filter: { name: placeholder, extensions: fileExtensions, - }); - - if (!canceled && filePaths.length) { - setValue(filePaths[0]); - } - }} - + }, + onPick: (filePaths) => { + if (filePaths.length) { + setValue(filePaths[0]); + } + }, + })} tooltip="Browse" /> ); -export const HelmFileInput = withInjectables( - NonInjectedHelmFileInput, - - { - getProps: (di, props) => ({ - getFilePaths: di.inject(getFilePathsInjectable), - isPath: di.inject(isPathInjectable), - ...props, - }), - }, -); +export const HelmFileInput = withInjectables(NonInjectedHelmFileInput, { + getProps: (di, props) => ({ + ...props, + requestFilePaths: di.inject(requestFilePathsInjectable), + isPath: di.inject(isPathInjectable), + }), +}); diff --git a/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-catalog-add-menu.injectable.ts b/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-catalog-add-menu.injectable.ts index a9e8a0d4e1..b422d895c6 100644 --- a/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-catalog-add-menu.injectable.ts +++ b/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-catalog-add-menu.injectable.ts @@ -41,7 +41,7 @@ const setupKubernetesClusterCatalogAddMenuListenerInjectable = getInjectable({ title: "Sync kubeconfig folder(s)", defaultAction: true, onClick: () => openPathPickingDialog({ - label: "Sync folder(s)", + message: "Sync folder(s)", buttonLabel: "Sync", properties: ["showHiddenFiles", "multiSelections", "openDirectory"], onPick: addSyncEntries, @@ -51,7 +51,7 @@ const setupKubernetesClusterCatalogAddMenuListenerInjectable = getInjectable({ icon: "note_add", title: "Sync kubeconfig file(s)", onClick: () => openPathPickingDialog({ - label: "Sync file(s)", + message: "Sync file(s)", buttonLabel: "Sync", properties: ["showHiddenFiles", "multiSelections", "openFile"], onPick: addSyncEntries, @@ -65,7 +65,7 @@ const setupKubernetesClusterCatalogAddMenuListenerInjectable = getInjectable({ title: "Sync kubeconfig(s)", defaultAction: true, onClick: () => openPathPickingDialog({ - label: "Sync file(s)", + message: "Sync file(s)", buttonLabel: "Sync", properties: ["showHiddenFiles", "multiSelections", "openFile", "openDirectory"], onPick: addSyncEntries, diff --git a/src/renderer/getDiForUnitTesting.tsx b/src/renderer/getDiForUnitTesting.tsx index 342b48a79b..ffc531ec77 100644 --- a/src/renderer/getDiForUnitTesting.tsx +++ b/src/renderer/getDiForUnitTesting.tsx @@ -22,7 +22,6 @@ import apiManagerInjectable from "../common/k8s-api/api-manager/manager.injectab import { computed, runInAction } from "mobx"; import requestAnimationFrameInjectable from "./components/animate/request-animation-frame.injectable"; import getRandomIdInjectable from "../common/utils/get-random-id.injectable"; -import getFilePathsInjectable from "../features/helm-charts/child-features/preferences/renderer/adding-of-custom-helm-repository/helm-file-input/get-file-paths.injectable"; import requestPublicHelmRepositoriesInjectable from "../features/helm-charts/child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.injectable"; import platformInjectable from "../common/vars/platform.injectable"; import startTopbarStateSyncInjectable from "./components/layout/top-bar/start-state-sync.injectable"; @@ -132,7 +131,6 @@ export const getDiForUnitTesting = ( overrideFunctionalInjectables(di, [ broadcastMessageInjectable, - getFilePathsInjectable, requestPublicHelmRepositoriesInjectable, ]);