import { Button, Comment, Container, Divider, Form, Header, Item, Segment, Table, } from 'semantic-ui-react'; import React, { Component } from 'react'; import { clearWrite, getNotesByEvent, postEventNote, writeNote, } from '../../actions/notes'; import { getEventById, getTrainees, submitVisitors, visitorChange, } from '../../actions/statistics'; import TraineeTableRow from './EventDetailTableRow'; import { connect } from 'react-redux'; import moment from 'moment'; class EventDetail extends Component { constructor(props) { super(props); this.state = { edit: false, }; } UNSAFE_componentWillMount() { this.props.getEventById(this.props.match.params.id); this.props.getTrainees(); this.props.getNotesByEvent(this.props.match.params.id); } renderTrainees() { const event = this.props.selectedEvent; return this.props.trainees?.map((item) => { const notes = this.props.eventNotes?.filter( (note) => note.profile === item.id ); return item.role === 'Student' ? ( <TraineeTableRow selectedEvent={event} notes={notes} trainee={item} edit={this.state.edit} key={item.id} /> ) : null; }); } renderEvent() { const { name, date, description } = this.props.selectedEvent; return ( <Segment> <Item> <Divider style={{ fontSize: '2em' }} horizontal> <Header as="h1"> {name} <Item.Header style={{ fontSize: '0.6em' }}> {moment(date).format('LL')} </Item.Header> </Header> </Divider> <Container textAlign="justified"> <Item.Header as="h3">Leírás</Item.Header> <Item.Content>{description}</Item.Content> </Container> </Item> </Segment> ); } renderComments() { const notes = this.props.eventNotes; return notes.map((note) => { if (!note.profile) { return ( <Segment> <Comment key={Math.random()}> <Comment.Content> <Comment.Author>{note.created_by_name}</Comment.Author> <Comment.Metadata> {moment(note.created_at).format('LL')} </Comment.Metadata> <Comment.Text>{note.note}</Comment.Text> </Comment.Content> </Comment> </Segment> ); } return ''; }); } render() { const event = this.props.selectedEvent; const note = this.props.actualNote; return ( <Container style={{ paddingTop: '1em', paddingBottom: '7em' }}> <Container textAlign="center"> {this.props.selectedEvent && this.props.trainees ? this.renderEvent() : ''} </Container> {!this.state.edit ? ( <Button onClick={() => this.setState({ edit: true })}> Módosítás </Button> ) : ( <Button onClick={() => { this.setState({ edit: false }); }} > {' '} Kész </Button> )} <Table celled unstackable> <Table.Header> <Table.Row textAlign="center"> <Table.HeaderCell>Név</Table.HeaderCell> <Table.HeaderCell>Jelen volt</Table.HeaderCell> <Table.HeaderCell>Megjegyzések</Table.HeaderCell> </Table.Row> </Table.Header> <Table.Body> {this.props.selectedEvent ? this.renderTrainees() : null} </Table.Body> </Table> <Comment.Group> <Header dividing>Megjegyzések</Header> {this.props.eventNotes ? this.renderComments() : ''} <Form reply> <Form.TextArea value={note.note} onChange={(e) => this.props.writeNote(e)} /> <Button onClick={() => { this.props.postEventNote({ eventid: event.id, note: note.note, }); this.props.clearWrite(); }} content="Megjegyzés hozzáadása" labelPosition="left" icon="edit" primary /> </Form> </Comment.Group> </Container> ); } } const mapStateToProps = ({ notes: { eventNotes, actualNote }, events: { selectedEvent }, trainees: { trainees }, }) => ({ eventNotes, selectedEvent, trainees, actualNote, }); export default connect(mapStateToProps, { getEventById, getTrainees, visitorChange, getNotesByEvent, submitVisitors, writeNote, clearWrite, postEventNote, })(EventDetail);