Forked from
KSZK / DevTeam / kszkepzes / old / kszkepzes-frontend
208 commits behind the upstream repository.
To find the state of this project's repository at the time of any of these versions, check out the tags.
News.js 2.95 KiB
import React, { Component } from 'react';
import { Container, Segment, Item, Button, Grid } from 'semantic-ui-react';
import { connect } from 'react-redux';
import moment from 'moment';
import ConfirmModal from '../forms/ConfirmModal';
import AddNewsForm from '../forms/AddNewsForm';
import EditNewsForm from '../forms/EditNewsForm';
import { getNews, deleteNews, setSelectedNews } from '../../actions/news';
import './News.css';
class News extends Component {
componentWillMount() {
this.props.getNews();
}
renderNews() {
return this.props.news.map(item => (
<Item key={item.id}>
<Item.Content>
<Container text textAlign='left'>
<Item.Header
style={{ fontSize: '2em', width: '100%' }}
>
<Grid>
<Grid.Column
floated='left'
width={this.props.user.role === 'Staff' ? 12 : 16}
>
{item.title}
</Grid.Column>
{ this.props.user.role === 'Staff' ?
<Grid.Column floated='right' width={4}>
<EditNewsForm
onClick={() => this.props.setSelectedNews(item)}
/>
<ConfirmModal
text={`törölni akarod a következő hírt: ${item.title}`}
button={
<Button
compact
color='red'
size='mini'
>
Törlés
</Button>
}
onAccept={() => this.props.deleteNews(item)}
/>
</Grid.Column>
: null }
</Grid>
</Item.Header>
<Item.Meta style={{ fontSize: '0.75em', fontStyle: 'italic' }}>Közzétéve: {moment(item.created_at).format('LLLL')}</Item.Meta>
<Item.Description className='news-text' style={{ fontSize: '1em' }}>
{this.renderMultiLine(item.text)}
</Item.Description>
</Container>
</Item.Content>
</Item>
));
}
renderMultiLine(text) {
const strings = text.split('\n');
return strings.map(string => <p>{string}</p>);
}
render() {
return (
<div>
<Segment style={{ padding: '3em 3em' }} vertical>
{/* { this.props.user.is_superuser ? <AddNewsForm /> : ''} */}
<Container text textAlign='center' style={{ marginBottom: '3em' }}>
{this.props.user.role === 'Staff' ?
<AddNewsForm />
:
null}
<Item.Group divided>
{this.renderNews()}
</Item.Group>
</Container>
</Segment>
</div>
);
}
}
const mapStateToProps = ({ news, user }) => ({ news, user });
export default connect(mapStateToProps, { getNews, deleteNews, setSelectedNews })(News);