diff --git a/resources/scripts/components/server/files/FileManagerContainer.tsx b/resources/scripts/components/server/files/FileManagerContainer.tsx index 8ff6fe603..520365104 100644 --- a/resources/scripts/components/server/files/FileManagerContainer.tsx +++ b/resources/scripts/components/server/files/FileManagerContainer.tsx @@ -15,7 +15,6 @@ import Button from '@/components/elements/Button'; import useServer from '@/plugins/useServer'; import { ServerContext } from '@/state/server'; import useFileManagerSwr from '@/plugins/useFileManagerSwr'; -import { Form, Formik } from 'formik'; import MassActionsBar from '@/components/server/files/MassActionsBar'; const sortFiles = (files: FileObject[]): FileObject[] => { @@ -28,12 +27,14 @@ export default () => { const { hash } = useLocation(); const { data: files, error, mutate } = useFileManagerSwr(); const setDirectory = ServerContext.useStoreActions(actions => actions.files.setDirectory); + const setSelectedFiles = ServerContext.useStoreActions(actions => actions.files.setSelectedFiles); useEffect(() => { // We won't automatically mutate the store when the component re-mounts, otherwise because of // my (horrible) programming this fires off way more than we intend it to. mutate(); + setSelectedFiles([]); setDirectory(hash.length > 0 ? hash : '/'); }, [ hash ]); @@ -58,27 +59,20 @@ export default () => { :
- undefined} - initialValues={{ selectedFiles: [] }} - > -
- {files.length > 250 && -
-

- This directory is too large to display in the browser, - limiting the output to the first 250 files. -

-
- } - { - sortFiles(files.slice(0, 250)).map(file => ( - - )) - } - - -
+ {files.length > 250 && +
+

+ This directory is too large to display in the browser, + limiting the output to the first 250 files. +

+
+ } + { + sortFiles(files.slice(0, 250)).map(file => ( + + )) + } +
} diff --git a/resources/scripts/components/server/files/FileObjectRow.tsx b/resources/scripts/components/server/files/FileObjectRow.tsx index 13b329d2b..c95698f4f 100644 --- a/resources/scripts/components/server/files/FileObjectRow.tsx +++ b/resources/scripts/components/server/files/FileObjectRow.tsx @@ -10,13 +10,13 @@ import { NavLink, useHistory, useRouteMatch } from 'react-router-dom'; import tw from 'twin.macro'; import isEqual from 'react-fast-compare'; import styled from 'styled-components/macro'; -import FormikCheckbox from '@/components/elements/Checkbox'; +import Input from '@/components/elements/Input'; const Row = styled.div` ${tw`flex bg-neutral-700 rounded-sm mb-px text-sm hover:text-neutral-100 cursor-pointer items-center no-underline hover:bg-neutral-600`}; `; -const Checkbox = styled(FormikCheckbox)` +const Checkbox = styled(Input)` && { ${tw`border-neutral-500`}; @@ -28,7 +28,9 @@ const Checkbox = styled(FormikCheckbox)` const FileObjectRow = ({ file }: { file: FileObject }) => { const directory = ServerContext.useStoreState(state => state.files.directory); + const selectedFiles = ServerContext.useStoreState(state => state.files.selectedFiles); const setDirectory = ServerContext.useStoreActions(actions => actions.files.setDirectory); + const setSelectedFiles = ServerContext.useStoreActions(actions => actions.files.setSelectedFiles); const history = useHistory(); const match = useRouteMatch(); @@ -56,7 +58,19 @@ const FileObjectRow = ({ file }: { file: FileObject }) => { }} > { const { uuid } = useServer(); @@ -21,9 +21,12 @@ const MassActionsBar = () => { const [ loading, setLoading ] = useState(false); const [ loadingMessage, setLoadingMessage ] = useState(''); const [ showConfirm, setShowConfirm ] = useState(false); - const { values, setFieldValue } = useFormikContext<{ selectedFiles: string[] }>(); + const [ showMove, setShowMove ] = useState(false); const directory = ServerContext.useStoreState(state => state.files.directory); + const selectedFiles = ServerContext.useStoreState(state => state.files.selectedFiles); + const setSelectedFiles = ServerContext.useStoreActions(actions => actions.files.setSelectedFiles); + useEffect(() => { if (!loading) setLoadingMessage(''); }, [ loading ]); @@ -33,9 +36,9 @@ const MassActionsBar = () => { clearFlashes('files'); setLoadingMessage('Archiving files...'); - compressFiles(uuid, directory, values.selectedFiles) + compressFiles(uuid, directory, selectedFiles) .then(() => mutate()) - .then(() => setFieldValue('selectedFiles', [])) + .then(() => setSelectedFiles([])) .catch(error => clearAndAddHttpError({ key: 'files', error })) .then(() => setLoading(false)); }; @@ -46,10 +49,10 @@ const MassActionsBar = () => { clearFlashes('files'); setLoadingMessage('Deleting files...'); - deleteFiles(uuid, directory, values.selectedFiles) + deleteFiles(uuid, directory, selectedFiles) .then(() => { - mutate(files => files.filter(f => values.selectedFiles.indexOf(f.name) < 0), false); - setFieldValue('selectedFiles', []); + mutate(files => files.filter(f => selectedFiles.indexOf(f.name) < 0), false); + setSelectedFiles([]); }) .catch(error => { mutate(); @@ -59,7 +62,7 @@ const MassActionsBar = () => { }; return ( - 0} unmountOnExit> + 0} unmountOnExit>
{loadingMessage} @@ -73,15 +76,17 @@ const MassActionsBar = () => { > Deleting files is a permanent operation, you cannot undo this action. + setShowMove(false)} + />
- -