From 8150f2f7b74316a66cdfb1f3d22bca1d0c6d09be Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Wed, 31 Jan 2024 18:23:16 +0700 Subject: [PATCH] fix: add dialog confirm when move folder and next dest isn't empty --- .../DataFolder/ModalConfirmDestNotEmpty.tsx | 59 +++++++++++++++++++ .../Settings/Advanced/DataFolder/index.tsx | 22 ++++++- 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 web/screens/Settings/Advanced/DataFolder/ModalConfirmDestNotEmpty.tsx diff --git a/web/screens/Settings/Advanced/DataFolder/ModalConfirmDestNotEmpty.tsx b/web/screens/Settings/Advanced/DataFolder/ModalConfirmDestNotEmpty.tsx new file mode 100644 index 000000000..e4aba41cc --- /dev/null +++ b/web/screens/Settings/Advanced/DataFolder/ModalConfirmDestNotEmpty.tsx @@ -0,0 +1,59 @@ +import React from 'react' + +import { + Modal, + ModalPortal, + ModalContent, + ModalHeader, + ModalTitle, + ModalFooter, + ModalClose, + Button, +} from '@janhq/uikit' + +import { atom, useAtom } from 'jotai' + +export const showDestNotEmptyConfirmAtom = atom(false) + +type Props = { + onUserConfirmed: () => void +} + +const ModalChangeDestNotEmpty: React.FC = ({ onUserConfirmed }) => { + const [show, setShow] = useAtom(showDestNotEmptyConfirmAtom) + + return ( + + + + + + + This folder is not empty. Are you sure you want to relocate Jan + Data Folder here? + + + +

+ You may accidentally delete your other personal data when uninstalling + the app in the future. Are you sure you want to proceed with this + folder? Please review your selection carefully. +

+ +
+ setShow(false)}> + + + + + +
+
+
+
+ ) +} + +export default ModalChangeDestNotEmpty diff --git a/web/screens/Settings/Advanced/DataFolder/index.tsx b/web/screens/Settings/Advanced/DataFolder/index.tsx index 8fa6af505..fe590bfaa 100644 --- a/web/screens/Settings/Advanced/DataFolder/index.tsx +++ b/web/screens/Settings/Advanced/DataFolder/index.tsx @@ -12,6 +12,9 @@ export const SUCCESS_SET_NEW_DESTINATION = 'successSetNewDestination' import ModalChangeDirectory, { showDirectoryConfirmModalAtom, } from './ModalChangeDirectory' +import ModalChangeDestNotEmpty, { + showDestNotEmptyConfirmAtom, +} from './ModalConfirmDestNotEmpty' import ModalErrorSetDestGlobal, { showChangeFolderErrorAtom, } from './ModalErrorSetDestGlobal' @@ -24,6 +27,7 @@ const DataFolder = () => { const setShowDirectoryConfirm = useSetAtom(showDirectoryConfirmModalAtom) const setShowSameDirectory = useSetAtom(showSamePathModalAtom) const setShowChangeFolderError = useSetAtom(showChangeFolderErrorAtom) + const showDestNotEmptyConfirm = useSetAtom(showDestNotEmptyConfirmAtom) const [destinationPath, setDestinationPath] = useState(undefined) useEffect(() => { @@ -52,9 +56,24 @@ const DataFolder = () => { return } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const newDestChildren: any[] = await fs.readdirSync(destFolder) + const isNotEmpty = + newDestChildren.filter((x) => x !== '.DS_Store').length > 0 + + if (isNotEmpty) { + showDestNotEmptyConfirm(true) + return + } + setDestinationPath(destFolder) setShowDirectoryConfirm(true) - }, [janDataFolderPath, setShowSameDirectory, setShowDirectoryConfirm]) + }, [ + janDataFolderPath, + setShowDirectoryConfirm, + setShowSameDirectory, + showDestNotEmptyConfirm, + ]) const onUserConfirmed = useCallback(async () => { if (!destinationPath) return @@ -124,6 +143,7 @@ const DataFolder = () => { onUserConfirmed={onUserConfirmed} /> + {showLoader && } )