import { lastValueFrom } from "rxjs"; import { useEffect, useState } from "react"; import { useTranslation } from "renderer/hooks/use-translation.hook"; import { useService } from "renderer/hooks/use-service.hook"; import Tippy from "@tippyjs/react"; import { IpcService } from "renderer/services/ipc.service"; import { ModalComponent, ModalExitCode } from "renderer/services/modale.service"; import { BsmButton } from "renderer/components/shared/bsm-button.component"; export const AskInstallPathModal: ModalComponent<{ installPath: string }, {}> = ({ resolver }) => { const t = useTranslation(); const ipcService = useService(IpcService); const [installPath, setInstallPath] = useState(""); const [installFolder, setInstallFolder] = useState(""); const [defaultInstallPath, setDefaultInstallPath] = useState(""); useEffect(() => { lastValueFrom(ipcService.sendV2("bs-installer.default-install-path")) .then(defaultPath => { setInstallPath(defaultPath); setDefaultInstallPath(defaultPath); setInstallFolder(window.electron.path.basename(defaultPath)); }); }, []); const selectInstallPath = async () => { const response = await lastValueFrom(ipcService.sendV2("choose-folder")); if (response.canceled || !response.filePaths?.length) { return; } const path = response.filePaths[0]; setInstallPath( window.electron.path.basename(path) === installFolder ? path : window.electron.path.join(response.filePaths[0], installFolder) ); } const onDefaultButtonPressed = () => { setInstallPath(defaultInstallPath); } const onConfirmButtonPressed = () => { resolver({ data: { installPath }, exitCode: ModalExitCode.COMPLETED }); } return (
{ event.preventDefault(); onConfirmButtonPressed(); }}>

{t("modals.ask-install-path.title")}

{t("modals.ask-install-path.choose-folder-description")}

{installPath}
) }