From ca9332fbe4cd7bd04d01fc17f902fff6fa117cf1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Chif=20Gerg=C5=91?= <chifgeri97@gmail.com>
Date: Sat, 12 Jan 2019 19:51:24 +0100
Subject: [PATCH] Create delete action for events

---
 src/actions/statistics.js      | 19 +++++++++++++++++++
 src/actions/types.js           |  1 +
 src/components/pages/Events.js | 17 ++++++++++++++---
 src/reducers/EventReducer.js   | 12 +++++++++++-
 4 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/src/actions/statistics.js b/src/actions/statistics.js
index d51de7d..2d8023b 100644
--- a/src/actions/statistics.js
+++ b/src/actions/statistics.js
@@ -6,6 +6,7 @@ import {
   GET_NOTES_BY_EVENT,
   WRITE_EVENT,
   ADD_EVENT,
+  DELETE_EVENT,
 } from './types';
 
 export const getEvents = () => (
@@ -114,3 +115,21 @@ export const addEvent = ({ name, date }) => (
     }
   }
 );
+
+export const deleteEvent = event => (
+  async (dispatch) => {
+    try {
+      const response = await axios.delete(`/api/v1/events/${event.id}/`);
+      if (!response.data.id) {
+        alert('Sikeres tĂśrlĂŠs!');
+        dispatch({
+          type: DELETE_EVENT,
+          payload: event,
+        });
+      } 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 23fc225..f83ddba 100644
--- a/src/actions/types.js
+++ b/src/actions/types.js
@@ -21,3 +21,4 @@ export const VISITOR_CHANGE = 'visitor_change';
 export const GET_NOTES_BY_EVENT = 'get_notes_by_event';
 export const WRITE_EVENT = 'write_event';
 export const ADD_EVENT = 'add_event';
+export const DELETE_EVENT = 'delete_event';
diff --git a/src/components/pages/Events.js b/src/components/pages/Events.js
index 5a33946..50a4d98 100644
--- a/src/components/pages/Events.js
+++ b/src/components/pages/Events.js
@@ -1,9 +1,9 @@
 import React, { Component } from 'react';
 import moment from 'moment';
 import { Link } from 'react-router-dom';
-import { Container, Table } from 'semantic-ui-react';
+import { Container, Table, Button } from 'semantic-ui-react';
 import { connect } from 'react-redux';
-import { getEvents } from '../../actions/statistics';
+import { getEvents, deleteEvent } from '../../actions/statistics';
 import AddEventForm from '../forms/AddEventForm';
 
 class Events extends Component {
@@ -22,6 +22,16 @@ class Events extends Component {
         </Table.Cell>
         <Table.Cell>{moment(event.date).format('LL')}</Table.Cell>
         <Table.Cell>{event.visitor_number}</Table.Cell>
+        <Table.Cell compact>
+          <Button
+            onClick={() => this.props.deleteEvent(event)}
+            color='red'
+            compact
+            size='small'
+          >
+          Delete
+          </Button>
+        </Table.Cell>
       </Table.Row>
     );
     });
@@ -36,6 +46,7 @@ class Events extends Component {
               <Table.HeaderCell>Alkalom neve</Table.HeaderCell>
               <Table.HeaderCell>DĂĄtum</Table.HeaderCell>
               <Table.HeaderCell>Jelen voltak</Table.HeaderCell>
+              <Table.HeaderCell />
             </Table.Row>
           </Table.Header>
 
@@ -51,4 +62,4 @@ class Events extends Component {
 
 const mapStateToProps = ({ events: { events }, user }) => ({ events, user });
 
-export default connect(mapStateToProps, { getEvents })(Events);
+export default connect(mapStateToProps, { getEvents, deleteEvent })(Events);
diff --git a/src/reducers/EventReducer.js b/src/reducers/EventReducer.js
index f6f079d..b082c05 100644
--- a/src/reducers/EventReducer.js
+++ b/src/reducers/EventReducer.js
@@ -1,4 +1,11 @@
-import { GET_EVENTS, GET_EVENT_BY_ID, VISITOR_CHANGE, WRITE_EVENT, ADD_EVENT } from '../actions/types';
+import {
+  GET_EVENTS,
+  GET_EVENT_BY_ID,
+  VISITOR_CHANGE,
+  WRITE_EVENT,
+  ADD_EVENT,
+  DELETE_EVENT,
+} from '../actions/types';
 
 const INITIAL_STATE = { newEvent: {} };
 
@@ -14,6 +21,9 @@ export default (state = INITIAL_STATE, action) => {
       return { ...state, newEvent: { ...state.newEvent, [action.target]: action.payload } };
     case ADD_EVENT:
       return { ...state, events: [...state.events, action.payload] };
+    case DELETE_EVENT:
+      state.events.splice(state.events.indexOf(action.payload), 1);
+      return { ...state, events: [...state.events] };
     default:
       return state;
   }
-- 
GitLab