index.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { useFilesQuery, File, useDeleteFileMutation, FilesQuery } from '../../../src/gql'
  2. import { FunctionComponent } from 'react'
  3. import { AdminList } from '../../../src/app'
  4. import theme from '../../../src/styles/theme'
  5. import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
  6. import { faLink } from '@fortawesome/free-solid-svg-icons'
  7. import filesize from 'filesize'
  8. const AdminFile: FunctionComponent<{ item: Partial<File>; className?: string }> = ({
  9. item,
  10. className,
  11. }) => {
  12. return (
  13. <div className={className}>
  14. <div className='admin-file-title'>
  15. <a href={`/${item.path}`} download={item.filename}>
  16. <FontAwesomeIcon icon={faLink} height={14} />
  17. {' ' + item.filename}
  18. </a>
  19. </div>
  20. <div className='admin-file-description'>{item.comment}</div>
  21. <div className='admin-file-size'>{item.size ? filesize(item.size) : '?'}</div>
  22. <div className='admin-file-type'>{item.mimetype}</div>
  23. <div className='admin-file-mdate'>{new Date(item.updatedAt).toLocaleString()}</div>
  24. <style jsx>{`
  25. .${className} {
  26. display: flex;
  27. }
  28. .admin-file-title {
  29. width: 25%;
  30. }
  31. .admin-file-description {
  32. width: 35%;
  33. }
  34. .admin-file-size {
  35. width: 10%;
  36. }
  37. .admin-file-type {
  38. width: 10%;
  39. }
  40. .admin-file-mdate {
  41. width: 20%;
  42. }
  43. button {
  44. margin: 0 0.4em;
  45. padding: 0;
  46. color: ${theme.colors.buttonBackground};
  47. background-color: transparent;
  48. }
  49. button.false {
  50. color: #5557;
  51. }
  52. `}</style>
  53. </div>
  54. )
  55. }
  56. const AdminFiles = () => {
  57. const props = {
  58. name: 'Files',
  59. adminMenu: '/admin/file',
  60. get: useFilesQuery,
  61. remove: useDeleteFileMutation,
  62. dataKey: 'files' as keyof FilesQuery,
  63. Component: AdminFile,
  64. }
  65. return <AdminList {...props} />
  66. }
  67. export default AdminFiles