import { useCallback, useState } from 'react' import { useParams } from 'react-router-dom' import { Modal, ModalOverlay, ModalContent, ModalHeader, ModalCloseButton, ModalBody, ModalFooter, Button, } from '@chakra-ui/react' import { useSWRConfig } from 'swr' import cx from 'classnames' import FileAPI, { List } from '@/client/api/file' import useFileListSearchParams from '@/hooks/use-file-list-params' import { useAppDispatch, useAppSelector } from '@/store/hook' import { moveModalDidClose, selectionUpdated } from '@/store/ui/files' import FileBrowse from './file-browse' const FileMove = () => { const { mutate } = useSWRConfig() const { fileId } = useParams() const dispatch = useAppDispatch() const selection = useAppSelector((state) => state.ui.files.selection) const isModalOpen = useAppSelector((state) => state.ui.files.isMoveModalOpen) const [loading, setLoading] = useState(false) const [targetId, setTargetId] = useState() const fileListSearchParams = useFileListSearchParams() const handleMove = useCallback(async () => { if (!targetId) { return } try { setLoading(true) await FileAPI.move(targetId, { ids: selection }) await mutate(`/files/${fileId}/list?${fileListSearchParams}`) dispatch(selectionUpdated([])) dispatch(moveModalDidClose()) } finally { setLoading(false) } }, [targetId, fileId, selection, fileListSearchParams, mutate, dispatch]) return ( dispatch(moveModalDidClose())} closeOnOverlayClick={false} > Move {selection.length} Item(s) to… setTargetId(id)} />
) } export default FileMove