fix: add dialog confirm when move folder and next dest isn't empty

This commit is contained in:
Faisal Amir 2024-01-31 18:23:16 +07:00
parent 509f6cba39
commit 8150f2f7b7
2 changed files with 80 additions and 1 deletions

View File

@ -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<Props> = ({ onUserConfirmed }) => {
const [show, setShow] = useAtom(showDestNotEmptyConfirmAtom)
return (
<Modal open={show} onOpenChange={setShow}>
<ModalPortal />
<ModalContent>
<ModalHeader>
<ModalTitle>
<span className="block pr-8 leading-relaxed">
This folder is not empty. Are you sure you want to relocate Jan
Data Folder here?
</span>
</ModalTitle>
</ModalHeader>
<p className="text-muted-foreground">
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.
</p>
<ModalFooter>
<div className="flex gap-x-2">
<ModalClose asChild onClick={() => setShow(false)}>
<Button themes="ghost">Cancel</Button>
</ModalClose>
<ModalClose asChild>
<Button onClick={onUserConfirmed} autoFocus themes="danger">
Yes, Proceed
</Button>
</ModalClose>
</div>
</ModalFooter>
</ModalContent>
</Modal>
)
}
export default ModalChangeDestNotEmpty

View File

@ -12,6 +12,9 @@ export const SUCCESS_SET_NEW_DESTINATION = 'successSetNewDestination'
import ModalChangeDirectory, { import ModalChangeDirectory, {
showDirectoryConfirmModalAtom, showDirectoryConfirmModalAtom,
} from './ModalChangeDirectory' } from './ModalChangeDirectory'
import ModalChangeDestNotEmpty, {
showDestNotEmptyConfirmAtom,
} from './ModalConfirmDestNotEmpty'
import ModalErrorSetDestGlobal, { import ModalErrorSetDestGlobal, {
showChangeFolderErrorAtom, showChangeFolderErrorAtom,
} from './ModalErrorSetDestGlobal' } from './ModalErrorSetDestGlobal'
@ -24,6 +27,7 @@ const DataFolder = () => {
const setShowDirectoryConfirm = useSetAtom(showDirectoryConfirmModalAtom) const setShowDirectoryConfirm = useSetAtom(showDirectoryConfirmModalAtom)
const setShowSameDirectory = useSetAtom(showSamePathModalAtom) const setShowSameDirectory = useSetAtom(showSamePathModalAtom)
const setShowChangeFolderError = useSetAtom(showChangeFolderErrorAtom) const setShowChangeFolderError = useSetAtom(showChangeFolderErrorAtom)
const showDestNotEmptyConfirm = useSetAtom(showDestNotEmptyConfirmAtom)
const [destinationPath, setDestinationPath] = useState(undefined) const [destinationPath, setDestinationPath] = useState(undefined)
useEffect(() => { useEffect(() => {
@ -52,9 +56,24 @@ const DataFolder = () => {
return 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) setDestinationPath(destFolder)
setShowDirectoryConfirm(true) setShowDirectoryConfirm(true)
}, [janDataFolderPath, setShowSameDirectory, setShowDirectoryConfirm]) }, [
janDataFolderPath,
setShowDirectoryConfirm,
setShowSameDirectory,
showDestNotEmptyConfirm,
])
const onUserConfirmed = useCallback(async () => { const onUserConfirmed = useCallback(async () => {
if (!destinationPath) return if (!destinationPath) return
@ -124,6 +143,7 @@ const DataFolder = () => {
onUserConfirmed={onUserConfirmed} onUserConfirmed={onUserConfirmed}
/> />
<ModalErrorSetDestGlobal /> <ModalErrorSetDestGlobal />
<ModalChangeDestNotEmpty onUserConfirmed={onUserConfirmed} />
{showLoader && <Loader description="Relocating Jan Data Folder..." />} {showLoader && <Loader description="Relocating Jan Data Folder..." />}
</Fragment> </Fragment>
) )