Skip to content
Snippets Groups Projects
Commit 6288360c authored by Chif Gergő's avatar Chif Gergő
Browse files

Create detail page for events, modify event reducer

parent faf064a1
No related branches found
No related tags found
No related merge requests found
import { axios } from './auth'; import { axios } from './auth';
import { GET_EVENTS } from './types'; import { GET_EVENTS, GET_EVENT_BY_ID } from './types';
export const getEvents = () => ( export const getEvents = () => (
async (dispatch) => { async (dispatch) => {
...@@ -14,3 +14,17 @@ export const getEvents = () => ( ...@@ -14,3 +14,17 @@ export const getEvents = () => (
} }
} }
); );
export const getEventById = id => (
async (dispatch) => {
try {
const response = await axios.get(`/api/v1/events/${id}`);
dispatch({
type: GET_EVENT_BY_ID,
payload: response.data,
});
} catch (e) {
console.log(e);
}
}
);
...@@ -12,3 +12,4 @@ export const EDIT_NEWS = 'edit_news'; ...@@ -12,3 +12,4 @@ export const EDIT_NEWS = 'edit_news';
export const SELECT_NEWS = 'select_news'; export const SELECT_NEWS = 'select_news';
export const GET_EVENTS = 'get_events'; export const GET_EVENTS = 'get_events';
export const GET_EVENT_BY_ID = 'get_event_by_id';
...@@ -9,6 +9,7 @@ import Profile from './pages/Profile'; ...@@ -9,6 +9,7 @@ import Profile from './pages/Profile';
import Statistics from './pages/Statistics'; import Statistics from './pages/Statistics';
import Groups from './pages/Groups'; import Groups from './pages/Groups';
import News from './pages/News'; import News from './pages/News';
import EventDetail from './pages/EventDetail';
const Main = () => ( const Main = () => (
<Switch> <Switch>
...@@ -20,6 +21,7 @@ const Main = () => ( ...@@ -20,6 +21,7 @@ const Main = () => (
<Route path='/profile' component={withRouter(Profile)} /> <Route path='/profile' component={withRouter(Profile)} />
<Route path='/statistics' component={Statistics} /> <Route path='/statistics' component={Statistics} />
<Route path='/groups' component={Groups} /> <Route path='/groups' component={Groups} />
<Route path='/events/:id' component={EventDetail} />
<Route component={NotFound} /> <Route component={NotFound} />
</Switch> </Switch>
); );
......
import React, { Component } from 'react';
import { Container } from 'semantic-ui-react';
import { connect } from 'react-redux';
import { getEventById } from '../../actions/statistics';
class EventDetail extends Component {
componentWillMount() {
this.props.getEventById(this.props.match.params.id);
}
renderEvent() {
const { name, date } = this.props.selectedEvent;
return (
<div>
<p>Alkalom neve: {name}</p>
<p>Dátum: {date}</p>
</div>
);
}
render() {
return (
<Container>
{this.props.selectedEvent ?
this.renderEvent()
:
''
}
</Container>
);
}
}
const mapStateToProps = ({ user, events: { selectedEvent } }) => ({ user, selectedEvent });
export default connect(mapStateToProps, { getEventById })(EventDetail);
import React, { Component } from 'react'; 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 } from 'semantic-ui-react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { getEvents } from '../../actions/statistics'; import { getEvents } from '../../actions/statistics';
...@@ -11,10 +13,15 @@ class Events extends Component { ...@@ -11,10 +13,15 @@ class Events extends Component {
renderEvents() { renderEvents() {
return this.props.events.map((event) => return this.props.events.map((event) =>
{ return ( { return (
<Table.Row> <Table.Row>
<Table.Cell>{event.name}</Table.Cell> <Table.Cell>
<Table.Cell>{event.date}</Table.Cell> <Link to={`events/${event.id}`}>
</Table.Row> {event.name}
</Link>
</Table.Cell>
<Table.Cell>{moment(event.date).format('LL')}</Table.Cell>
<Table.Cell>111</Table.Cell>
</Table.Row>
); );
}); });
} }
...@@ -22,16 +29,17 @@ class Events extends Component { ...@@ -22,16 +29,17 @@ class Events extends Component {
render() { render() {
return ( return (
<Container textAlign='center'> <Container textAlign='center'>
<Table celled selectable> <Table color='blue' celled selectable compact>
<Table.Header> <Table.Header>
<Table.Row> <Table.Row>
<Table.HeaderCell>Alkalom neve</Table.HeaderCell> <Table.HeaderCell>Alkalom neve</Table.HeaderCell>
<Table.HeaderCell>Dátum</Table.HeaderCell> <Table.HeaderCell>Dátum</Table.HeaderCell>
<Table.HeaderCell>Jelen voltak</Table.HeaderCell>
</Table.Row> </Table.Row>
</Table.Header> </Table.Header>
<Table.Body> <Table.Body>
{this.renderEvents()} {this.props.events ? this.renderEvents() : 'Nincs még alaklom beírva'}
</Table.Body> </Table.Body>
</Table> </Table>
</Container> </Container>
...@@ -39,6 +47,6 @@ class Events extends Component { ...@@ -39,6 +47,6 @@ class Events extends Component {
} }
} }
const mapStateToProps = ({ events, user }) => ({ events, user }); const mapStateToProps = ({ events: { events }, user }) => ({ events, user });
export default connect(mapStateToProps, { getEvents })(Events); export default connect(mapStateToProps, { getEvents })(Events);
import React, { Component } from 'react'; import React, { Component } from 'react';
import { Container, Header, Segment, Menu } from 'semantic-ui-react'; import { Container, Menu } from 'semantic-ui-react';
import Events from './Events' import Events from './Events'
export default class Statistics extends Component { export default class Statistics extends Component {
...@@ -13,7 +13,7 @@ export default class Statistics extends Component { ...@@ -13,7 +13,7 @@ export default class Statistics extends Component {
<Container <Container
textAlign="center" textAlign="center"
style={{ style={{
padding: '20px' padding: '60px',
}} }}
> >
<Menu <Menu
......
import { GET_EVENTS } from '../actions/types'; import { GET_EVENTS, GET_EVENT_BY_ID } from '../actions/types';
const INITIAL_STATE = []; const INITIAL_STATE = {};
export default (state = INITIAL_STATE, action) => { export default (state = INITIAL_STATE, action) => {
switch (action.type) { switch (action.type) {
case GET_EVENTS: case GET_EVENTS:
return action.payload; return { ...state, events: [...action.payload] };
case GET_EVENT_BY_ID:
return { ...state, selectedEvent: action.payload };
default: default:
return state; return state;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment