diff --git a/src/actions/notes.js b/src/actions/notes.js index 4737c1f411186ebe3133de36ea78a62f3c2f311e..09e353de39a216cae9a1bd9f279f305573f3bac9 100644 --- a/src/actions/notes.js +++ b/src/actions/notes.js @@ -5,6 +5,8 @@ import { ADD_EVENT_NOTE, CLEAR_WRITE, DELETE_NOTE, + GET_NOTES_BY_PROFILE, + ADD_PROFILE_NOTE, } from './types'; export const getNotesByEvent = id => ( @@ -21,11 +23,25 @@ export const getNotesByEvent = id => ( } ); +export const getNotesByProfile = id => ( + async (dispatch) => { + try { + const response = await axios.get('/api/v1/notes/', { params: { profileID: id } }); + dispatch({ + type: GET_NOTES_BY_PROFILE, + payload: response.data, + }); + } catch (e) { + console.log(e); + } + } +); + export const writeNote = (event) => { return (dispatch => (dispatch({ type: WRITE_NOTE, payload: event.target.value }))); }; -export const postEventNote = ({ eventid, userid, note }) => ( +export const postNote = ({ eventid, userid, note }) => ( async (dispatch) => { try { const response = await axios.post('/api/v1/notes/', { @@ -35,10 +51,18 @@ export const postEventNote = ({ eventid, userid, note }) => ( }); if (response.data.id) { alert('Sikeres mentĂŠs!'); - dispatch({ - type: ADD_EVENT_NOTE, - payload: response.data, - }); + if (eventid) { + dispatch({ + type: ADD_EVENT_NOTE, + payload: response.data, + }); + } + if (userid) { + dispatch({ + type: ADD_PROFILE_NOTE, + payload: response.data, + }); + } } } catch (e) { console.log(e); diff --git a/src/actions/types.js b/src/actions/types.js index b4c41c3e4f04178db0559898df0578f803dd49c1..06fb588e07506d554eaaf0e6bdb872f2a44047ac 100644 --- a/src/actions/types.js +++ b/src/actions/types.js @@ -47,6 +47,8 @@ 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 ADD_PROFILE_NOTE = 'add_profile_note'; +export const GET_NOTES_BY_PROFILE = 'get_notes_by_profile'; export const GET_PROFILES = 'get_profiles'; export const SET_STATUS = 'set_status'; diff --git a/src/components/App.js b/src/components/App.js index bc7b766f3fc7196d97b362148470baa4aff4aa68..cdc6a8ad1efca9d19e7fc5b321b2304ea7b07d9e 100644 --- a/src/components/App.js +++ b/src/components/App.js @@ -5,7 +5,7 @@ import Footer from './Footer'; const App = () => ( <div style={{ minHeight: '100%', position: 'relative' }}> - <Header> + <Header className='header'> <main id='main' style={{ minHeight: '100%', position: 'relative' }}> <Main /> </main> diff --git a/src/components/Header.js b/src/components/Header.js index ecf691a4a52d372c5b42b1fb74d772633f0f331c..d7c0ddc3ac4589b7e1732cedb26e06786d223530 100644 --- a/src/components/Header.js +++ b/src/components/Header.js @@ -1,11 +1,5 @@ import React, { Component } from 'react'; -import { Link } from 'react-router-dom'; import { - Menu, - Container, - Button, - Segment, - Visibility, Image, Responsive, Sidebar, @@ -15,6 +9,10 @@ import { connect } from 'react-redux'; import { getUserData } from '../actions'; import KSZKlogo from './images/kszk_logo.svg'; +import MobileContainer from './menus/MobileContainer'; +import DesktopContainer from './menus/DesktopContainer'; + + const menuItems = [ { text: 'FĹoldal', @@ -60,162 +58,6 @@ const menuItems = [ }, ]; -const FixedMenu = ({ user }) => ( - <Menu fixed='top' size='large' pointing> - <Container> - {menuItems.map((item, i) => - (user.permission >= item.permissionLevel || - (item.permissionLevel === 0) - ? - <Menu.Item key={i} as={Link} to={item.to}>{item.text}</Menu.Item> - : - null))} - - <Menu.Menu position='right'> - <Menu.Item className='item'> - { - user.id ? - <Button.Group> - <Button primary as={Link} to='/profile'>Profilom</Button> - <Button as='a' href='/api/v1/logout/'icon='sign out' /> - </Button.Group> - : - <Button as='a' href='/api/v1/login/authsch/' >BejelentkezĂŠs</Button> - } - </Menu.Item> - </Menu.Menu> - </Container> - </Menu> -); - -class MobileContainer extends Component { - constructor(props) { - super(props); - this.state = { - sidebarVisible: false, - }; - } - componentWillMount() { - this.props.getUserData(); - } - - render() { - const visible = this.state.sidebarVisible; - const { children, user } = this.props; - return( - <Responsive {...Responsive.onlyMobile}> - <Segment inverted textAlign='center' vertical> - <Container> - <Menu inverted secondary> - <Menu.Item onClick={visible ? this.handleHideClick : this.handleShowClick}><Icon name='sidebar'/></Menu.Item> - <Image size='mini' src={KSZKlogo} style={{ marginRight: '1.5em' }} /> - <Menu.Item position='right'> - { - this.props.user.id ? - <Button.Group> - <Button inverted as={Link} to='/profile'>Profilom</Button> - <Button as='a' href='/api/v1/logout/' icon='sign out' /> - </Button.Group> - : - <Button as='a' href='/api/v1/login/authsch/' inverted>BejelentkezĂŠs</Button> - } - </Menu.Item> - </Menu> - </Container> - </Segment> - <Sidebar.Pushable> - <Sidebar - as={Menu} - animation='overlay' - icon='labeled' - inverted - vertical - visible={visible} - width='thin' - > - {menuItems.map((item, i) => - (this.props.user.permission >= item.permissionLevel || - (item.permissionLevel === 0) ? - <Menu.Item key={i} as={Link} to={item.to} onClick={this.handleSidebarHide}>{item.text}</Menu.Item> - : - null))} - </Sidebar> - <Sidebar.Pusher onClick={this.handleSidebarHide}> - {children} - </Sidebar.Pusher> - </Sidebar.Pushable> - </Responsive>); - } - - handleShowClick = () => this.setState({ sidebarVisible: true }) - handleHideClick = () => this.setState({ sidebarVisible: false }) - handleSidebarHide = () => this.setState({ sidebarVisible: false }) -} - - -class DesktopContainer extends Component { - constructor(props) { - super(props); - this.state = { - visible: false, - }; - } - componentWillMount() { - this.props.getUserData(); - } - - hideFixedMenu() { - this.setState({ visible: false }); - } - - showFixedMenu() { - this.setState({ visible: true }); - } - - render() { - const { visible } = this.state.visible; - const { children, user } = this.props; - return ( - <Responsive {...Responsive.onlyComputer}> - {visible ? <FixedMenu user={this.props.user} /> : null} - <Visibility - onBottomPassed={() => this.showFixedMenu()} - onBottomVisible={() => this.hideFixedMenu()} - once={false} - > - <Segment inverted textAlign='center' vertical> - <Container> - <Menu inverted secondary stackable size='large'> - - {menuItems.map((item, i) => - (this.props.user.permission >= item.permissionLevel || - (item.permissionLevel === 0) ? - <Menu.Item key={i} as={Link} to={item.to}>{item.prefix}{item.text}</Menu.Item> - : - null))} - - <Menu.Item position='right'> - { - this.props.user.id ? - <Button.Group> - <Button inverted as={Link} to='/profile'>Profilom</Button> - <Button as='a' href='/api/v1/logout/' icon='sign out' /> - </Button.Group> - : - <Button as='a' href='/api/v1/login/authsch/' inverted>BejelentkezĂŠs</Button> - } - </Menu.Item> - - </Menu> - </Container> - </Segment> - </Visibility> - {children} - </Responsive> - ); - } -} - const Header = ({ children, user, getUserData }) => ( <div> <DesktopContainer user={user} getUserData={getUserData}>{children}</DesktopContainer> diff --git a/src/components/menus/DesktopContainer.js b/src/components/menus/DesktopContainer.js new file mode 100644 index 0000000000000000000000000000000000000000..214d60d916b95f540e403b1eee23be222cec003d --- /dev/null +++ b/src/components/menus/DesktopContainer.js @@ -0,0 +1,103 @@ +import React, { Component } from 'react'; +import { Link } from 'react-router-dom'; +import { + Menu, + Container, + Button, + Segment, + Visibility, + Responsive, +} from 'semantic-ui-react'; + +const FixedMenu = ({ user, menuItems }) => ( + <Menu fixed='top' size='large' pointing> + <Container> + {menuItems.map((item, i) => + (user.permission >= item.permissionLevel || + (item.permissionLevel === 0) + ? + <Menu.Item key={i} as={Link} to={item.to}>{item.text}</Menu.Item> + : + null))} + + <Menu.Menu position='right'> + <Menu.Item className='item'> + { + user.id ? + <Button.Group> + <Button primary as={Link} to='/profile'>Profilom</Button> + <Button as='a' href='/api/v1/logout/'icon='sign out' /> + </Button.Group> + : + <Button as='a' href='/api/v1/login/authsch/' >BejelentkezĂŠs</Button> + } + </Menu.Item> + </Menu.Menu> + </Container> + </Menu> +); + +class DesktopContainer extends Component { + constructor(props) { + super(props); + this.state = { + visible: false, + }; + } + componentWillMount() { + this.props.getUserData(); + } + + hideFixedMenu() { + this.setState({ visible: false }); + } + + showFixedMenu() { + this.setState({ visible: true }); + } + + render() { + const { visible } = this.state; + const { children, user, menuItems } = this.props; + return ( + <Responsive minWidth={768}> + {visible ? <FixedMenu user={this.props.user} menuItems={menuItems} /> : null} + <Visibility + onBottomPassed={() => this.showFixedMenu()} + onBottomVisible={() => this.hideFixedMenu()} + once={false} + > + <Segment inverted textAlign='center' vertical> + <Container> + <Menu inverted secondary stackable size='large'> + + {menuItems.map((item, i) => + (this.props.user.permission >= item.permissionLevel || + (item.permissionLevel === 0) ? + <Menu.Item key={i} as={Link} to={item.to}>{item.prefix}{item.text}</Menu.Item> + : + null))} + + <Menu.Item position='right'> + { + this.props.user.id ? + <Button.Group> + <Button inverted as={Link} to='/profile'>Profilom</Button> + <Button as='a' href='/api/v1/logout/' icon='sign out' /> + </Button.Group> + : + <Button as='a' href='/api/v1/login/authsch/' inverted>BejelentkezĂŠs</Button> + } + </Menu.Item> + + </Menu> + </Container> + </Segment> + </Visibility> + {children} + </Responsive> + ); + } +} + +export default DesktopContainer; diff --git a/src/components/menus/MobileContainer.js b/src/components/menus/MobileContainer.js new file mode 100644 index 0000000000000000000000000000000000000000..51c35953dc960192a89c215727dbfe4231bb2620 --- /dev/null +++ b/src/components/menus/MobileContainer.js @@ -0,0 +1,80 @@ +import React, { Component } from 'react'; +import { Link } from 'react-router-dom'; +import { + Menu, + Container, + Button, + Segment, + Image, + Responsive, + Sidebar, + Icon, +} from 'semantic-ui-react'; +import KSZKlogo from '../images/kszk_logo.svg'; + + +class MobileContainer extends Component { + constructor(props) { + super(props); + this.state = { + sidebarVisible: false, + }; + } + componentWillMount() { + this.props.getUserData(); + } + + render() { + const visible = this.state.sidebarVisible; + const { children, user, menuItems } = this.props; + return( + <Responsive maxWidth={767}> + <Segment inverted textAlign='center' vertical> + <Container> + <Menu inverted secondary> + <Menu.Item onClick={visible ? this.handleHideClick : this.handleShowClick}><Icon name='sidebar'/></Menu.Item> + <Image size='mini' src={KSZKlogo} style={{ marginRight: '1.5em' }} /> + <Menu.Item position='right'> + { + this.props.user.id ? + <Button.Group> + <Button inverted as={Link} to='/profile'>Profilom</Button> + <Button as='a' href='/api/v1/logout/' icon='sign out' /> + </Button.Group> + : + <Button as='a' href='/api/v1/login/authsch/' inverted>BejelentkezĂŠs</Button> + } + </Menu.Item> + </Menu> + </Container> + </Segment> + <Sidebar.Pushable> + <Sidebar + as={Menu} + animation='overlay' + icon='labeled' + inverted + vertical + visible={visible} + width='thin' + > + {menuItems.map((item, i) => + (this.props.user.permission >= item.permissionLevel || + (item.permissionLevel === 0) ? + <Menu.Item key={i} as={Link} to={item.to} onClick={this.handleSidebarHide}>{item.text}</Menu.Item> + : + null))} + </Sidebar> + <Sidebar.Pusher onClick={this.handleSidebarHide}> + {children} + </Sidebar.Pusher> + </Sidebar.Pushable> + </Responsive>); + } + + handleShowClick = () => this.setState({ sidebarVisible: true }) + handleHideClick = () => this.setState({ sidebarVisible: false }) + handleSidebarHide = () => this.setState({ sidebarVisible: false }) +} + +export default MobileContainer; diff --git a/src/components/pages/ApplicantProfile.js b/src/components/pages/ApplicantProfile.js index a8595aa590f64c9fc5b288138d4ddc681f7dec4c..3db7dc4c09b5c12005d88f119c2ba40f133af8ed 100644 --- a/src/components/pages/ApplicantProfile.js +++ b/src/components/pages/ApplicantProfile.js @@ -1,9 +1,21 @@ import React, { Component } from 'react'; -import { Container, Header, Item, Button, Label, List } from 'semantic-ui-react'; +import { + Container, + Header, + Item, + Button, + Label, + List, + Form, + Comment, +} from 'semantic-ui-react'; import { connect } from 'react-redux'; import { getSelectedProfile, setStatus } from '../../actions/statistics'; +import { getNotesByProfile, writeNote, clearWrite, postNote, deleteNote } from '../../actions/notes'; import ConfirmModal from '../forms/ConfirmModal'; +import moment from 'moment'; + const options = [ { key: 'DT', text: 'DevTeam' }, { key: 'NET', text: 'NETeam' }, @@ -15,6 +27,7 @@ const options = [ class ApplicantProfile extends Component { componentWillMount() { this.props.getSelectedProfile(this.props.match.params.id); + this.props.getNotesByProfile(this.props.match.params.id); } renderGroups() { @@ -29,7 +42,45 @@ class ApplicantProfile extends Component { )); } + renderComments() { + const notes = this.props.profileNotes; + return notes.map((note) => { + if (!note.event) { + return ( + <Comment> + <Comment.Content> + <Comment.Author>{note.created_by_name}</Comment.Author> + <Comment.Metadata> + {moment(note.created_at).format('LL')} + </Comment.Metadata> + <Comment.Text> + {note.note} + </Comment.Text> + </Comment.Content> + { this.props.user.fullName === note.created_by_name ? + <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>); + } + return ''; + }); + } + render() { + const note = this.props.actualNote; const { id, signed, groups, role, full_name, nick, motivation_about, motivation_exercise, motivation_profession } = this.props.selectedProfile; return ( @@ -90,25 +141,51 @@ class ApplicantProfile extends Component { </Item.Content> </Item> { signed && role !== 'Staff' ? - <Container textAlign='center'> - <ConfirmModal - button={ - <Button - color='green' - >JelentkezĂŠs elfogadĂĄsa - </Button>} - text='elfogadod a jelentkezĂŠst' - onAccept={() => this.props.setStatus(id, 'Student')} - /> - <ConfirmModal - button={ + <Container> + <Container textAlign='center'> + <ConfirmModal + button={ + <Button + color='green' + >JelentkezĂŠs elfogadĂĄsa + </Button>} + text='elfogadod a jelentkezĂŠst' + onAccept={() => this.props.setStatus(id, 'Student')} + /> + <ConfirmModal + button={ + <Button + color='red' + >JelentkezĂŠs elutasĂtĂĄsa + </Button>} + text='elutasĂtod a jelentkezĂŠst' + onAccept={() => this.props.setStatus(id, 'Denied')} + /> + </Container> + <Comment.Group> + <Header dividing> + MegjegyzĂŠsek + </Header> + {this.renderComments()} + <Form reply> + <Form.TextArea + value={note.note} + onChange={e => this.props.writeNote(e)} + /> <Button - color='red' - >JelentkezĂŠs elutasĂtĂĄsa - </Button>} - text='elutasĂtod a jelentkezĂŠst' - onAccept={() => this.props.setStatus(id, 'Denied')} - /> + onClick={() => { + this.props.postNote({ userid: id, + note: note.note }); + this.props.clearWrite(); + } + } + content='MegjegyzĂŠs hozzĂĄadĂĄsa' + labelPosition='left' + icon='edit' + primary + /> + </Form> + </Comment.Group> </Container> : null @@ -118,6 +195,18 @@ class ApplicantProfile extends Component { } } -const mapStateToProps = ({ trainees: { selectedProfile } }) => ({ selectedProfile }); +const mapStateToProps = ({ + user, + trainees: { selectedProfile }, + notes: { profileNotes, actualNote } +}) => ({ user, selectedProfile, profileNotes, actualNote }); -export default connect(mapStateToProps, { getSelectedProfile, setStatus })(ApplicantProfile); +export default connect(mapStateToProps, { + getSelectedProfile, + setStatus, + postNote, + getNotesByProfile, + writeNote, + deleteNote, + clearWrite, +})(ApplicantProfile); diff --git a/src/components/pages/EventDetail.js b/src/components/pages/EventDetail.js index 3584835e846d6a5467b121c48f4a5962b15d9499..3bb8a36264848f9d6bce65daf86ca7a6511c1dc0 100644 --- a/src/components/pages/EventDetail.js +++ b/src/components/pages/EventDetail.js @@ -11,7 +11,7 @@ import { import { connect } from 'react-redux'; import moment from 'moment'; import { getEventById, getTrainees, visitorChange, submitVisitors } from '../../actions/statistics'; -import { getNotesByEvent, writeNote, clearWrite, postEventNote, deleteNote } from '../../actions/notes'; +import { getNotesByEvent, writeNote, clearWrite, postNote, deleteNote } from '../../actions/notes'; import TraineeTableRow from './TraineeTableRow'; import ConfirmModal from '../forms/ConfirmModal'; @@ -74,19 +74,22 @@ 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)} - /> + { this.props.user.fullName === note.created_by_name ? + <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>); } return ''; @@ -162,7 +165,7 @@ class EventDetail extends Component { /> <Button onClick={() => { - this.props.postEventNote({ eventid: event.id, + this.props.postNote({ eventid: event.id, note: note.note }); this.props.clearWrite(); } @@ -180,10 +183,11 @@ class EventDetail extends Component { } const mapStateToProps = ({ + user, notes: { eventNotes, actualNote }, events: { selectedEvent }, trainees: { trainees } -}) => ({ eventNotes, selectedEvent, trainees, actualNote }); +}) => ({ user, eventNotes, selectedEvent, trainees, actualNote }); export default connect(mapStateToProps, { getEventById, @@ -193,6 +197,6 @@ export default connect(mapStateToProps, { submitVisitors, writeNote, clearWrite, - postEventNote, + postNote, deleteNote, })(EventDetail); diff --git a/src/components/pages/Home.css b/src/components/pages/Home.css index a1a3afc6ef4963312cc6484c211052517d145e0b..62080012d0c7d66ad325213eb6154807f791cba3 100644 --- a/src/components/pages/Home.css +++ b/src/components/pages/Home.css @@ -8,5 +8,6 @@ top: 0px; -webkit-text-fill-color: white; -webkit-text-stroke-color: black; - -webkit-text-stroke-width: 0.1vw; + /*-webkit-text-stroke-width: 0.1vw;*/ + text-shadow: 2px 2px 2px black; } diff --git a/src/components/pages/Home.js b/src/components/pages/Home.js index ed0b4d2e36d87084942db290e6da397756e88ab1..7a791c24428fe9686de56ee3557655c683d6a477 100644 --- a/src/components/pages/Home.js +++ b/src/components/pages/Home.js @@ -58,7 +58,7 @@ class Home extends Component { content='ĂdvĂśzlĂźnk a' inverted style={{ - fontSize: '3vw', + fontSize: '2vw', fontWeight: 'normal', marginBottom: 0, marginTop: '0.5vw', @@ -69,7 +69,7 @@ class Home extends Component { content='KollĂŠgiumi SzĂĄmĂtĂĄstechnikai KĂśr' inverted style={{ - fontSize: '4vw', + fontSize: '3vw', fontWeight: 'bold', marginBottom: '0.5vw', marginTop: '0.5vw', @@ -80,7 +80,7 @@ class Home extends Component { content='ĂşjonckĂŠpzĂŠsĂŠnek weboldalĂĄn!' inverted style={{ - fontSize: '3vw', + fontSize: '2vw', fontWeight: 'normal', marginBottom: 0, marginTop: '0.5vw', @@ -89,14 +89,14 @@ class Home extends Component { <Image verticalAlign='middle' src={KSZKbiglogo} - style={{ marginTop: '4vw', width: '15%' }} + style={{ marginTop: '2vw', width: '12%' }} /> <Header as='h1' content='Szeretettel vĂĄrunk a KSZKĂŠpzĂŠsre!' inverted style={{ - fontSize: '3vw', + fontSize: '2vw', fontWeight: 'normal', marginBottom: 0, marginTop: '1vw', @@ -130,7 +130,7 @@ class Home extends Component { marginBottom: '1vw', }} > - BejelentkezĂŠs + JelentkezĂŠs <Icon name='right arrow' /> </Button> } @@ -174,14 +174,7 @@ class Home extends Component { KeĚpzeĚsĂźnk </Header> <p style={{ fontSize: '1.33em', fontFamily: 'Arial' }}> - Kilenc alkalmas kĂŠpzĂŠsĂźnk vĂŠgĂŠn Te is igazi KSZK-ssĂĄ vĂĄlhatsz, - hiszen rengeteg szakmai tudĂĄst igyekszĂźnk ĂĄtadni nektek. A - kĂŠpzĂŠsalkalmak rendkĂvĂźl jĂł hangulatban telnek, ĂŠs a szociĂĄlis - irĂĄnyultsĂĄgĂş foglalkozĂĄsok alatt egy nagyon jĂł csapat kovĂĄcsolĂłdik - az ĂŠrdeklĹdĹkbĹl. Az elsĹ kĂŠpzĂŠs idĹpontja februĂĄr 19. hĂŠtfĹ - 20:00, ettĹl kezdve pedig minden hĂŠten talĂĄlkozunk ugyanabban az - idĹpontban. A kĂŠpzĂŠs ideje alatt ĂĄprilis 6-8 kĂśzĂśtt rendezĂźnk - tĂĄbort. Az alkalmakon ĂŠs a tĂĄboron kĂśtelezĹ a rĂŠszvĂŠtel. + Kilenc alkalmas kĂŠpzĂŠsĂźnk vĂŠgĂŠn Te is igazi KSZK-ssĂĄ vĂĄlhatsz, hiszen rengeteg szakmai tudĂĄst igyekszĂźnk ĂĄtadni nektek. A kĂŠpzĂŠsalkalmak rendkĂvĂźl jĂł hangulatban telnek, ĂŠs a szociĂĄlis irĂĄnyultsĂĄgĂş foglalkozĂĄsok alatt egy nagyon jĂł csapat kovĂĄcsolĂłdik az ĂŠrdeklĹdĹkbĹl. Az elsĹ kĂŠpzĂŠs idĹpontja februĂĄr 17. vasĂĄrnap 18:50, ettĹl kezdve pedig minden hĂŠten talĂĄlkozunk ugyanabban az idĹpontban. A kĂŠpzĂŠs ideje alatt egy teljes hĂŠtvĂŠgĂŠs tĂĄbort is rendezĂźnk majd (ennek idĹpontjĂĄt az ĂjoncdĂŠlutĂĄnig tisztĂĄzzuk). Az alkalmakon ĂŠs a tĂĄboron kĂśtelezĹ a rĂŠszvĂŠtel. </p> <Divider as='h4' className='header' style={{ margin: '3em 0em' }} /> <Segment inverted color='red' tertiary> diff --git a/src/components/pages/TraineeTableRow.js b/src/components/pages/TraineeTableRow.js index 215ef8eff16bb6f818377810aa5cb923f9ad15fc..18a5b0e0549306d4044816ac72450880d8daf0a9 100644 --- a/src/components/pages/TraineeTableRow.js +++ b/src/components/pages/TraineeTableRow.js @@ -10,7 +10,7 @@ import { } from 'semantic-ui-react'; import { connect } from 'react-redux'; import { visitorChange } from '../../actions/statistics'; -import { writeNote, clearWrite, postEventNote, deleteNote } from '../../actions/notes'; +import { writeNote, clearWrite, postNote, deleteNote } from '../../actions/notes'; import CommentModal from './CommentModal' class TraineeTableRow extends Component { @@ -109,7 +109,7 @@ class TraineeTableRow extends Component { /> <Button onClick={() => { - this.props.postEventNote({ eventid:selectedEvent.id, + this.props.postNote({ eventid:selectedEvent.id, userid: trainee.id, note: this.state.note }); this.clearWrite(); @@ -132,4 +132,4 @@ class TraineeTableRow extends Component { } } -export default connect(() => ({}), { writeNote, clearWrite, postEventNote, visitorChange, deleteNote })(TraineeTableRow) +export default connect(() => ({}), { writeNote, clearWrite, postNote, visitorChange, deleteNote })(TraineeTableRow) diff --git a/src/index.js b/src/index.js index 4731bad925093c606f194eea777e2537f3b127ac..cf5d3e0ccfd2970e1683f92d856038cebb2d5725 100644 --- a/src/index.js +++ b/src/index.js @@ -5,8 +5,9 @@ import { BrowserRouter as Router } from 'react-router-dom'; import 'slick-carousel/slick/slick.css'; import 'slick-carousel/slick/slick-theme.css'; import 'semantic-ui-css/semantic.min.css'; -import moment from 'moment'; import ScrollToTop from './components/ScrollToTop'; +import moment from 'moment'; + import configureStore from './configureStore'; import App from './components/App'; diff --git a/src/reducers/NoteReducer.js b/src/reducers/NoteReducer.js index 37caf2f13db724e0a386e7158fab0b5ae103bded..68730407755e7d8c3a5fce54edb37a7a7f0c563e 100644 --- a/src/reducers/NoteReducer.js +++ b/src/reducers/NoteReducer.js @@ -4,23 +4,30 @@ import { ADD_EVENT_NOTE, CLEAR_WRITE, DELETE_NOTE, + GET_NOTES_BY_PROFILE, + ADD_PROFILE_NOTE, } from '../actions/types'; -const INITIAL_STATE = { eventNotes: [], actualNote: {} }; +const INITIAL_STATE = { eventNotes: [], actualNote: {}, profileNotes: [] }; export default (state = INITIAL_STATE, action) => { switch (action.type) { case GET_NOTES_BY_EVENT: return { ...state, eventNotes: action.payload }; + case GET_NOTES_BY_PROFILE: + return { ...state, profileNotes: action.payload }; case WRITE_NOTE: return { ...state, actualNote: { ...state.actualNote, note: action.payload } }; case ADD_EVENT_NOTE: return { ...state, eventNotes: [...state.eventNotes, action.payload] }; + case ADD_PROFILE_NOTE: + return { ...state, profileNotes: [...state.profileNotes, 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] }; + state.profileNotes.splice(state.profileNotes.indexOf(action.payload), 1); + return { ...state, eventNotes: [...state.eventNotes], profileNotes: [...state.profileNotes] }; default: return state; }