diff --git a/src/actions/auth.js b/src/actions/auth.js index ac0e9e51764333deae7eacf7741ad0510b9bc3f9..a480dba7a94dc0b614d822fb046b9d84a2f2ca3e 100644 --- a/src/actions/auth.js +++ b/src/actions/auth.js @@ -9,6 +9,7 @@ export const getUserData = () => ( const { id, join_date: joinDate, + full_name: fullName, nick, motivation_about: motivationAbout, motivation_profession: motivationProfession, @@ -36,7 +37,7 @@ export const getUserData = () => ( dispatch({ type: GET_USERDATA, payload: { - id, joinDate, nick, motivationAbout, motivationProfession, motivationExercise, signed, groups, role, permission + id, fullName, joinDate, nick, motivationAbout, motivationProfession, motivationExercise, signed, groups, role, permission }, }); } catch (e) { diff --git a/src/actions/notes.js b/src/actions/notes.js index 52074a95d7895acef46e4a0d9ffa8aa783c943b5..4737c1f411186ebe3133de36ea78a62f3c2f311e 100644 --- a/src/actions/notes.js +++ b/src/actions/notes.js @@ -4,6 +4,7 @@ import { WRITE_NOTE, ADD_EVENT_NOTE, CLEAR_WRITE, + DELETE_NOTE, } from './types'; export const getNotesByEvent = id => ( @@ -49,3 +50,21 @@ export const clearWrite = () => ( dispatch({ type: CLEAR_WRITE }); } ); + +export const deleteNote = note => ( + async (dispatch) => { + try { + const response = await axios.delete(`/api/v1/notes/${note.id}/`); + if (!response.data.id) { + alert('Sikeres tĂśrlĂŠs!'); + dispatch({ + type: DELETE_NOTE, + payload: note, + }); + } else { + alert('A tĂśrlĂŠs nem sikerĂźlt!'); + } + } catch (e) { + console.log(e); + } + }); diff --git a/src/actions/types.js b/src/actions/types.js index 71b72261ef174861f0c17c949eae701efa1655c3..7624ef90f8ddf00a15ffd6bccffc7f2b9e3fc423 100644 --- a/src/actions/types.js +++ b/src/actions/types.js @@ -27,6 +27,7 @@ export const DELETE_EVENT = 'delete_event'; export const WRITE_NOTE = 'write_note'; export const CLEAR_NOTE = 'clear_note'; export const ADD_EVENT_NOTE = 'add_note'; +export const DELETE_NOTE = 'delete_note'; export const GET_PROFILES = 'get_profiles'; export const SET_STATUS = 'set_status'; diff --git a/src/components/pages/CommentModal.js b/src/components/pages/CommentModal.js new file mode 100644 index 0000000000000000000000000000000000000000..eeba0feeb2628c848cdb518bd7b6ad3a07c37978 --- /dev/null +++ b/src/components/pages/CommentModal.js @@ -0,0 +1,58 @@ +import React, { Component } from 'react'; +import { connect } from 'react-redux'; +import { Button, Comment, Modal } from 'semantic-ui-react'; +import { deleteNote } from '../../actions/notes'; +import ConfirmModal from '../forms/ConfirmModal'; + +class CommentModal extends Component { + renderComments() { + const { notes, user } = this.props; + return notes.map((note) => { + return ( + <Comment key={note.id}> + <Comment.Content> + <Comment.Author>{note.created_by_name}</Comment.Author> + <Comment.Text> + {note.note} + </Comment.Text> + { note.created_by_name === user.fullName ? + <ConfirmModal + text='tĂśrĂślni akarod a megjegyzĂŠst' + button={ + <Button + compact + color='red' + size='mini' + > + Delete + </Button> + } + onAccept={() => this.props.deleteNote(note)} + /> + : + null } + </Comment.Content> + </Comment> + ); + }); + } + render() { + return ( + <Modal + closeIcon + trigger={ + <Button icon='comment alternate outline' /> + } + > + <Modal.Header>MegjegyzĂŠsek:</Modal.Header> + <Modal.Content> + {this.renderComments()} + </Modal.Content> + </Modal> + ); + } +} + +const mapStateToProps = ({ user }) => ({ user }); + +export default connect(mapStateToProps, { deleteNote })(CommentModal); diff --git a/src/components/pages/EventDetail.js b/src/components/pages/EventDetail.js index 41b2b7ce4b1c6e7c92c38981951c6b9b6b65d03f..e058b6f6e6865f3f468d48272f29a5f06c065f6b 100644 --- a/src/components/pages/EventDetail.js +++ b/src/components/pages/EventDetail.js @@ -11,9 +11,9 @@ import { import { connect } from 'react-redux'; import moment from 'moment'; import { getEventById, getTrainees, visitorChange, submitVisitors } from '../../actions/statistics'; -import { getNotesByEvent, writeNote, clearWrite, postEventNote } from '../../actions/notes'; +import { getNotesByEvent, writeNote, clearWrite, postEventNote, deleteNote } from '../../actions/notes'; import TraineeTableRow from './TraineeTableRow'; - +import ConfirmModal from '../forms/ConfirmModal'; class EventDetail extends Component { constructor(props) { @@ -74,6 +74,19 @@ class EventDetail extends Component { {note.note} </Comment.Text> </Comment.Content> + <ConfirmModal + text='tĂśrĂślni akarod a megjegyzĂŠst' + button={ + <Button + compact + color='red' + size='mini' + > + Delete + </Button> + } + onAccept={() => this.props.deleteNote(note)} + /> </Comment>); } return ''; @@ -177,4 +190,5 @@ export default connect(mapStateToProps, { writeNote, clearWrite, postEventNote, + deleteNote, })(EventDetail); diff --git a/src/components/pages/TraineeTableRow.js b/src/components/pages/TraineeTableRow.js index 4e7f2b78901a23826e541a369aa2c5fcb308b52a..34e58c3c4ac541fded95a5663c55875f3047e0d2 100644 --- a/src/components/pages/TraineeTableRow.js +++ b/src/components/pages/TraineeTableRow.js @@ -10,8 +10,8 @@ import { } from 'semantic-ui-react'; import { connect } from 'react-redux'; import { visitorChange } from '../../actions/statistics'; -import { writeNote, clearWrite, postEventNote } from '../../actions/notes'; - +import { writeNote, clearWrite, postEventNote, deleteNote } from '../../actions/notes'; +import CommentModal from './CommentModal' class TraineeTableRow extends Component { constructor(props) { @@ -94,21 +94,7 @@ class TraineeTableRow extends Component { </Grid.Column> <Grid.Column floated='right' width={4} textAlign='right'> {notes.length > 0 ? - <Popup - on='click' - position='bottom left' - trigger={<Button icon='comment alternate outline' onClick={this.triggerMore} />} - content={notes.map((note) => { - return ( - <Comment.Content> - <Comment.Author>{note.created_by_name}</Comment.Author> - <Comment.Text> - {note.note} - </Comment.Text> - </Comment.Content> - ); - })} - /> + <CommentModal notes={notes} /> : null} <Popup @@ -146,4 +132,4 @@ class TraineeTableRow extends Component { } } -export default connect(() => {}, { writeNote, clearWrite, postEventNote, visitorChange})(TraineeTableRow) +export default connect(() => ({}), { writeNote, clearWrite, postEventNote, visitorChange, deleteNote })(TraineeTableRow) diff --git a/src/reducers/NoteReducer.js b/src/reducers/NoteReducer.js index 90e4c8db7dba6f73a721b4eec4bbb8d51d3b5101..37caf2f13db724e0a386e7158fab0b5ae103bded 100644 --- a/src/reducers/NoteReducer.js +++ b/src/reducers/NoteReducer.js @@ -3,6 +3,7 @@ import { WRITE_NOTE, ADD_EVENT_NOTE, CLEAR_WRITE, + DELETE_NOTE, } from '../actions/types'; const INITIAL_STATE = { eventNotes: [], actualNote: {} }; @@ -17,6 +18,9 @@ export default (state = INITIAL_STATE, action) => { return { ...state, eventNotes: [...state.eventNotes, action.payload] }; case CLEAR_WRITE: return { ...state, actualNote: { note: '' } }; + case DELETE_NOTE: + state.eventNotes.splice(state.eventNotes.indexOf(action.payload), 1); + return { ...state, eventNotes: [...state.eventNotes] }; default: return state; }