index.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import {
  2. useTrainingsQuery,
  3. useDeleteTrainingMutation,
  4. TrainingsDocument,
  5. usePublishMutation,
  6. TrainingsQuery,
  7. } from '../../../src/gql'
  8. import { FunctionComponent } from 'react'
  9. import { TTraining } from '../../../src/training/types'
  10. import { AdminList } from '../../../src/app'
  11. import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
  12. import { faEye, faEyeSlash } from '@fortawesome/free-solid-svg-icons'
  13. import theme from '../../../src/styles/theme'
  14. const AdminTraining: FunctionComponent<{ item: TTraining; className?: string }> = ({
  15. item,
  16. className,
  17. }) => {
  18. const [publish, publishResult] = usePublishMutation({
  19. refetchQueries: [{ query: TrainingsDocument }],
  20. })
  21. return (
  22. <div className={className}>
  23. <div>
  24. <button
  25. type='button'
  26. title='publish'
  27. onClick={(event) =>
  28. publish({ variables: { training: item.id, status: !item.published } })
  29. }
  30. className={item.published ? 'true' : 'false'}
  31. >
  32. <FontAwesomeIcon icon={faEye} height={16} />
  33. </button>
  34. </div>
  35. <div className='admin-training-title'>{item.title}</div>{' '}
  36. <div className='admin-training-blocks'>
  37. {item.blocks?.map((block) => block.block.title).join(' ')}
  38. </div>
  39. <div className='admin-training-date'>{new Date(item.trainingDate).toLocaleString()}</div>
  40. <style jsx>{`
  41. .${className} {
  42. display: flex;
  43. }
  44. .admin-training-title {
  45. width: 15%;
  46. }
  47. .admin-training-blocks {
  48. width: 65%;
  49. }
  50. .admin-training-date {
  51. width: 20%;
  52. text-align: right;
  53. }
  54. button {
  55. margin: 0 0.4em;
  56. padding: 0;
  57. color: ${theme.colors.buttonBackground};
  58. background-color: transparent;
  59. }
  60. button.false {
  61. color: #5557;
  62. }
  63. `}</style>
  64. </div>
  65. )
  66. }
  67. const AdminTrainings = () => {
  68. const props = {
  69. name: 'Trainings',
  70. adminMenu: '/admin/training',
  71. get: useTrainingsQuery,
  72. remove: useDeleteTrainingMutation,
  73. dataKey: 'trainings' as keyof TrainingsQuery,
  74. Component: AdminTraining,
  75. }
  76. return <AdminList {...props} />
  77. }
  78. export default AdminTrainings