import React, { useEffect, useState } from 'react'; import FlashMessageRender from '@/components/FlashMessageRender'; import { ServerContext } from '@/state/server'; import loadDirectory, { FileObject } from '@/api/server/files/loadDirectory'; import { Actions, useStoreActions } from 'easy-peasy'; import { ApplicationStore } from '@/state'; import { httpErrorToHuman } from '@/api/http'; import { CSSTransition } from 'react-transition-group'; import { Link } from 'react-router-dom'; import Spinner from '@/components/elements/Spinner'; import FileObjectRow from '@/components/server/files/FileObjectRow'; export default () => { const [ loading, setLoading ] = useState(true); const [ files, setFiles ] = useState([]); const server = ServerContext.useStoreState(state => state.server.data!); const { addError, clearFlashes } = useStoreActions((actions: Actions) => actions.flashes); const currentDirectory = window.location.hash.replace(/^#(\/)+/, '/'); const load = () => { setLoading(true); clearFlashes(); loadDirectory(server.uuid, currentDirectory) .then(files => { setFiles(files); setLoading(false); }) .catch(error => { if (error.response && error.response.status === 404) { window.location.hash = '#/'; return; } console.error(error.message, { error }); addError({ message: httpErrorToHuman(error), key: 'files' }); }); }; const breadcrumbs = (): { name: string; path?: string }[] => currentDirectory.split('/') .filter(directory => !!directory) .map((directory, index, dirs) => { if (index === dirs.length - 1) { return { name: directory }; } return { name: directory, path: `/${dirs.slice(0, index + 1).join('/')}` }; }); useEffect(() => { load(); }, [ window.location.hash ]); return (
/home/ container / { breadcrumbs().map((crumb, index) => ( crumb.path ? {crumb.name} / : {crumb.name} )) }
{ loading ? : !files.length ?

This directory seems to be empty.

:
{ files.map(file => ( )) }
}
); };