diff --git a/src/actions/mentors.js b/src/actions/mentors.js new file mode 100644 index 0000000000000000000000000000000000000000..9dcaa5cb3435dfc43ba6ed453295835c2e225059 --- /dev/null +++ b/src/actions/mentors.js @@ -0,0 +1,16 @@ +import axios from './session'; +import { GET_MENTORS } from './types'; + +export const getMentors = () => ( + async (dispatch) => { + try { + const response = await axios.get('/api/v1/mentors'); + dispatch({ + type: GET_MENTORS, + payload: response.data, + }); + } catch (e) { + console.log(e); + } + } +); \ No newline at end of file diff --git a/src/actions/types.js b/src/actions/types.js index 36d04739104a6bc68352579f01bad31b64a84c2b..ab60f1fb95ec24e4e6c0cf8f7b494caaae8ab87a 100644 --- a/src/actions/types.js +++ b/src/actions/types.js @@ -14,6 +14,8 @@ export const DELETE_NEWS = 'delete_news'; export const EDIT_NEWS = 'edit_news'; export const SELECT_NEWS = 'select_news'; +export const GET_MENTORS = 'get_mentors'; + export const GET_TASKS = 'get_homeworks'; export const ADD_TASK = 'add_task'; export const DELETE_TASK = 'delete_task'; diff --git a/src/components/Header.js b/src/components/Header.js index 5cd5c209180b91ab9f794deaf01d6f9f8905e3b9..9d5370e9d6afb78e15d7a9dd16ad3394c094105f 100644 --- a/src/components/Header.js +++ b/src/components/Header.js @@ -41,6 +41,12 @@ const menuItems = [ prefix: '', permissionLevel: 1, }, + { + text: 'Mentorok', + to: '/mentors', + prefix: '', + permissionLevel: 1, + }, { text: 'Statisztika', to: '/statistics', diff --git a/src/components/Main.js b/src/components/Main.js index c9e2b88152578a1ce7022ef87613e96c45049505..8f6e41013eee3d77712d562c6c989d96f7228b71 100644 --- a/src/components/Main.js +++ b/src/components/Main.js @@ -2,7 +2,7 @@ import React from 'react'; import { Switch, Route, Redirect, withRouter } from 'react-router-dom'; import Home from './pages/Home'; -import Trainers from './pages/Trainers'; +import Mentors from './pages/Mentors'; import Schedule from './pages/Schedule'; import NotFound from './pages/NotFound'; import Profile from './pages/Profile'; @@ -19,7 +19,7 @@ const Main = () => ( <Redirect exact from='/' to='/home' /> <Route exact path='/home' component={Home} /> <Route path='/news' component={News} /> - <Route path='/trainers' component={Trainers} /> + <Route path='/mentors' component={Mentors} /> <Route path='/schedule' component={Schedule} /> <Route path='/profile' component={withRouter(Profile)} /> <Route path='/statistics' component={Statistics} /> diff --git a/src/components/pages/Mentors.js b/src/components/pages/Mentors.js new file mode 100644 index 0000000000000000000000000000000000000000..791cce7a3579e4259fba91bf5ee1a013d7129d5e --- /dev/null +++ b/src/components/pages/Mentors.js @@ -0,0 +1,72 @@ +import React, { Component } from 'react' + import { Container, Segment, Item, Divider, Header, Image, Card, Label, Icon } from 'semantic-ui-react' +import { connect } from 'react-redux' +import { getMentors } from '../../actions/mentors' + +class Mentors extends Component { + UNSAFE_componentWillMount() { + this.props.getMentors(); + } + + renderMentors() { + return this.props.mentors.map( (item, index) => ( + <Card style={{maxWidth: '100%', minWidth: '100%'}}> + <Card.Content style={{padding: '0'}}> + <Item.Group> + <Item> + {index%2 === 0 ? + <Item.Image size='medium' src={item.image} /> : null + } + <Item.Content style={{padding: '1rem'}}> + <Item.Header>{item.name}</Item.Header> + <Item.Description> + <p>{item.text}</p> + </Item.Description> + <Item.Extra> + <Label><Icon name='mail'></Icon>{item.email}</Label> + </Item.Extra> + </Item.Content> + {index%2 === 1 ? + <Item.Image size='medium' src={item.image} /> : null + } + </Item> + </Item.Group> + </Card.Content> + </Card> + )); + } + + renderMultiLine(text) { + const strings = text.split('\n'); + return strings.map(string => <p key={Math.random()}>{string}</p>); + } + + render() { + return ( + <div> + <Segment inverted textAlign='center' vertical> + <Container> + <Header + as='h1' + content='Mentorok' + inverted + style={{ + fontSize: '3em', + fontWeight: 'normal', + marginBottom: 0, + marginTop: '0.5em', + }} + /> + </Container> + </Segment> + <Container style={{paddingTop: '2em', paddingBottom: '5em'}}> + {this.renderMentors()} + </Container> + </div> + ); + } +} + +const mapStateToProps = ({ mentors, user }) => ({ mentors, user }); + +export default connect(mapStateToProps, { getMentors })(Mentors); diff --git a/src/components/pages/Profile.js b/src/components/pages/Profile.js index 9fb9e0251166b02e7c49fdb72ed8170e85fd1323..3dccbe9f1ea9752cca0b0904b2694941a51a18bc 100644 --- a/src/components/pages/Profile.js +++ b/src/components/pages/Profile.js @@ -23,10 +23,11 @@ class Profile extends Component { render() { const { - nick, groups, motivationAbout, motivationProfession, motivationExercise, signed, id, deadline, text: deadlineText + nick, groups, motivationAbout, motivationProfession, + motivationExercise, signed, id, deadline, messageBefore, + messageAfter } = this.props; const endDate = new Date(deadline) - const endDateText = deadlineText let canEdit = Date.now()<endDate return ( <Container @@ -36,15 +37,11 @@ class Profile extends Component { > {canEdit ? <Segment inverted color='red' tertiary> - <p style={{ fontSize: '1.33em' }}> - A profilod mentĂŠs utĂĄn is mĂłdosĂthatĂł a kĂŠsĹbbiekben, egĂŠszen {endDateText}-ig. - </p> + <p style={{ fontSize: '1.3em' }} dangerouslySetInnerHTML={{__html: messageBefore}} /> </Segment> : <Segment inverted color='red' tertiary> - <p style={{ fontSize: '1.33em' }}> - A hatĂĄridĹ {endDateText} volt, mĂĄr nem tudsz jelentkezni. - </p> + <p style={{ fontSize: '1.3em' }} dangerouslySetInnerHTML={{__html: messageAfter}} /> </Segment>} <Form> @@ -222,7 +219,9 @@ class Profile extends Component { const mapStateToProps = ({ user: { - nick, groups, motivationAbout, motivationProfession, motivationExercise, signed, id, deadline, text + nick, groups, motivationAbout, motivationProfession, + motivationExercise, signed, id, deadline, messageBefore, + messageAfter } }) => ({ nick, @@ -233,7 +232,8 @@ const mapStateToProps = ({ signed, id, deadline, - text + messageBefore, + messageAfter }); export default connect(mapStateToProps, { textChange, submitRegistration, groupChange, getDeadline })(Profile); diff --git a/src/components/pages/Trainers.js b/src/components/pages/Trainers.js deleted file mode 100644 index ef2ec5c21febd6ad6c8748125fe8ce04d3b6c3b1..0000000000000000000000000000000000000000 --- a/src/components/pages/Trainers.js +++ /dev/null @@ -1,26 +0,0 @@ -import React, { Component } from 'react'; -import { Container, Header, Segment } from 'semantic-ui-react'; - -export default class Trainers extends Component { - render() { - return ( - <div> - <Segment inverted textAlign='center' vertical> - <Container> - <Header - as='h1' - content='KĂŠpzĹk - Hamarosan' - inverted - style={{ - fontSize: '3em', - fontWeight: 'normal', - marginBottom: 0, - marginTop: '0.5em', - }} - /> - </Container> - </Segment> - </div> - ); - } -} diff --git a/src/reducers/MentorsReducer.js b/src/reducers/MentorsReducer.js new file mode 100644 index 0000000000000000000000000000000000000000..43b37783f6a0fec3dde9b2ef21ed3f6ce02c3194 --- /dev/null +++ b/src/reducers/MentorsReducer.js @@ -0,0 +1,12 @@ +import { GET_MENTORS } from '../actions/types'; + +const INITIAL_STATE = []; + +export default (state = INITIAL_STATE, action) => { + switch (action.type) { + case GET_MENTORS: + return action.payload; + default: + return state; + } +}; diff --git a/src/reducers/index.js b/src/reducers/index.js index 985cc63d1555fccec886ad7e8d2deeb2e4d72f31..bc0e1d057673610fe4f737e774bdcf6a438ba9bf 100644 --- a/src/reducers/index.js +++ b/src/reducers/index.js @@ -12,6 +12,7 @@ import NoteReducer from './NoteReducer'; import CorrectSolutionReducer from './CorrectSolutionReducer'; import EditTaskReducer from './EditTaskReducer'; import GroupsReducer from './GroupsReducer'; +import MentorsReducer from './MentorsReducer'; const rootReducer = combineReducers({ user: UserReducer, @@ -27,6 +28,7 @@ const rootReducer = combineReducers({ trainees: TraineeReducer, notes: NoteReducer, groups: GroupsReducer, + mentors: MentorsReducer, }); export default rootReducer;