index.tsx 2.3 KB

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