training.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. function calculateRating(ratings) {
  2. const numberOfRatings = ratings.length
  3. const sumOfRatings = ratings.reduce(
  4. (accumulator, rating) => accumulator + rating.value,
  5. 0
  6. )
  7. console.log(ratings, sumOfRatings, numberOfRatings)
  8. return numberOfRatings ? sumOfRatings / numberOfRatings : '-'
  9. }
  10. const TrainingArchive = props => (
  11. <div>
  12. <h2>Training Archive</h2>
  13. {console.log('archive', props)}
  14. <ol>
  15. {props.trainings.map(training => (
  16. <TrainingHint key={training.id} training={training} />
  17. ))}
  18. </ol>
  19. </div>
  20. )
  21. const TrainingHint = props => (
  22. <div>
  23. <div>{props.training.date}</div>
  24. <div>{props.training.title}</div>
  25. </div>
  26. )
  27. const Training = props => (
  28. <article>
  29. <h2>{props.title}</h2>
  30. <section id='info'>
  31. <p>
  32. <span className='caption'>Type: </span>
  33. <span className='data'>{props.type.name}</span>
  34. </p>
  35. <p>
  36. <span className='caption'>Date: </span>
  37. <span className='data'>{(new Date(props.trainingDate)).toLocaleDateString()}</span>
  38. </p>
  39. <p>
  40. <span className='caption'>Location: </span>
  41. <span className='data'>{props.location}</span>
  42. </p>
  43. <p>
  44. <span className='caption'>Registrations: </span>
  45. <span className='data'>{props.registration.length} <a href=''>Register!</a></span>
  46. </p>
  47. <p>
  48. <span className='caption'>Attendance: </span>
  49. <span className='data'>{props.attendance}</span>
  50. </p>
  51. <p>
  52. <span className='caption'>Rating: </span>
  53. <span className='data'>{calculateRating(props.ratings)} [<a href=''>{props.ratings.length}</a>]
  54. Rate it!
  55. <a href=''>*</a>
  56. <a href=''>*</a>
  57. <a href=''>*</a>
  58. <a href=''>*</a>
  59. <a href=''>*</a>
  60. </span>
  61. </p>
  62. </section>
  63. <section id='content'>
  64. <h3>Content</h3>
  65. {props.content.sort(block => block.sequence).map(block => <Block key={block.id} {...block} />)}
  66. </section>
  67. </article>
  68. )
  69. const Block = props => <article>
  70. <h2>{props.title}</h2>
  71. <section id='info'>
  72. <p>
  73. <span className='caption'>Duration: </span>
  74. <span className='data'>{props.duration}</span>
  75. </p>
  76. <p>
  77. <span className='caption'>Variation: </span>
  78. <span className='data'>{props.variation}</span>
  79. </p>
  80. <p>
  81. <span className='caption'>Format: </span>
  82. <span className='data'>{props.format.name}</span>
  83. </p>
  84. <p>
  85. <span className='caption'>Description: </span>
  86. <span className='data'>{props.description}</span>
  87. </p>
  88. </section>
  89. </article>
  90. class TrainingCreateForm extends React.Component {
  91. render() {
  92. return <form>
  93. <label htmlFor="title">Title<input type="text" id="title" /></label>
  94. <label htmlFor="title">Title<input type="text" id="title" /></label>
  95. <label htmlFor="title">Title<input type="text" id="title" /></label>
  96. </form>
  97. }
  98. }
  99. export { TrainingArchive }
  100. export default Training