FileManager.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { useState, ChangeEvent } from 'react'
  2. import { useFsFilesQuery, useFilesQuery } from '../../gql'
  3. import { danglingFsFiles } from '../utils'
  4. const FileManager = () => {
  5. const [folder, setFolder] = useState('upload_files')
  6. const uploadFiles = useFsFilesQuery({ variables: { directory: folder } })
  7. const files = useFilesQuery()
  8. const error = (uploadFiles.error || files.error) && <p>Fehler beim Laden der Dateien...</p>
  9. const loading = (uploadFiles.loading || files.loading) && <p>Lade Dateien...</p>
  10. const danglingFsFilesFound = danglingFsFiles(uploadFiles.data, files.data)
  11. function handleChange(event: ChangeEvent<HTMLInputElement>) {
  12. setFolder(event.target.value)
  13. }
  14. return (
  15. <form>
  16. <h1>File Manager</h1>
  17. <input type='text' name='folder' id='folder' value={folder} onChange={handleChange} />
  18. {error}
  19. {loading}
  20. {danglingFsFilesFound ? (
  21. <table>
  22. <thead>
  23. <tr>
  24. <th></th>
  25. <th>Datei</th>
  26. </tr>
  27. </thead>
  28. <tbody>
  29. {files.data?.files.map((file, index) =>
  30. file ? (
  31. <tr key={index}>
  32. <td>
  33. <input type='checkbox' />
  34. </td>
  35. <td>
  36. <a href={`/${file.path}`} download={file.filename}>
  37. {file.filename}
  38. </a>
  39. </td>
  40. </tr>
  41. ) : null
  42. )}
  43. </tbody>
  44. </table>
  45. ) : (
  46. <p>no dangeling files found.</p>
  47. )}
  48. </form>
  49. )
  50. }
  51. export default FileManager