import { Fragment, useCallback, useEffect, useState } from 'react' import { fs, AppConfiguration } from '@janhq/core' import { Button, Input } from '@janhq/uikit' import { useSetAtom } from 'jotai' import { PencilIcon, FolderOpenIcon } from 'lucide-react' import { SUCCESS_SET_NEW_DESTINATION } from '@/hooks/useVaultDirectory' import ModalChangeDirectory, { showDirectoryConfirmModalAtom, } from './ModalChangeDirectory' import ModalErrorSetDestGlobal, { showChangeFolderErrorAtom, } from './ModalErrorSetDestGlobal' import ModalSameDirectory, { showSamePathModalAtom } from './ModalSameDirectory' const DataFolder = () => { const [janDataFolderPath, setJanDataFolderPath] = useState('') const setShowDirectoryConfirm = useSetAtom(showDirectoryConfirmModalAtom) const setShowSameDirectory = useSetAtom(showSamePathModalAtom) const setShowChangeFolderError = useSetAtom(showChangeFolderErrorAtom) const [destinationPath, setDestinationPath] = useState(undefined) useEffect(() => { window.core?.api ?.getAppConfigurations() ?.then((appConfig: AppConfiguration) => { setJanDataFolderPath(appConfig.data_folder) }) }, []) const onChangeFolderClick = useCallback(async () => { const destFolder = await window.core?.api?.selectDirectory() if (!destFolder) return if (destFolder === janDataFolderPath) { setShowSameDirectory(true) return } setDestinationPath(destFolder) setShowDirectoryConfirm(true) }, [janDataFolderPath, setShowSameDirectory, setShowDirectoryConfirm]) const onUserConfirmed = useCallback(async () => { if (!destinationPath) return try { const appConfiguration: AppConfiguration = await window.core?.api?.getAppConfigurations() const currentJanDataFolder = appConfiguration.data_folder appConfiguration.data_folder = destinationPath await fs.syncFile(currentJanDataFolder, destinationPath) await window.core?.api?.updateAppConfiguration(appConfiguration) console.debug( `File sync finished from ${currentJanDataFolder} to ${destinationPath}` ) localStorage.setItem(SUCCESS_SET_NEW_DESTINATION, 'true') await window.core?.api?.relaunch() } catch (e) { console.error(`Error: ${e}`) setShowChangeFolderError(true) } }, [destinationPath, setShowChangeFolderError]) return (
Jan Data Folder

Where messages, model configurations, and other user data are placed.

) } export default DataFolder