Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • kszk/devteam/kszkepzes/old/kszkepzes-frontend
  • kbgergely/kszkepzes-frontend
2 results
Select Git revision
Show changes
Showing
with 1515 additions and 884 deletions
import React, { Component } from 'react';
import { import {
Container,
Item,
Button, Button,
Comment, Comment,
Container,
Divider,
Form, Form,
Header, Header,
Table, Item,
Segment, Segment,
Divider, Table,
} from 'semantic-ui-react'; } from "semantic-ui-react";
import { connect } from 'react-redux'; import React, { Component } from "react";
import moment from 'moment'; import {
import { getEventById, getTrainees, visitorChange, submitVisitors } from '../../actions/statistics'; clearWrite,
import { getNotesByEvent, writeNote, clearWrite, postEventNote } from '../../actions/notes'; getNotesByEvent,
import TraineeTableRow from './EventDetailTableRow'; postEventNote,
writeNote,
} from "../../actions/notes";
import {
getEventById,
getTrainees,
submitVisitors,
visitorChange,
} from "../../actions/statistics";
import TraineeTableRow from "./EventDetailTableRow";
import { connect } from "react-redux";
import moment from "moment";
class EventDetail extends Component { class EventDetail extends Component {
constructor(props) { constructor(props) {
...@@ -31,12 +41,23 @@ class EventDetail extends Component { ...@@ -31,12 +41,23 @@ class EventDetail extends Component {
this.props.getNotesByEvent(this.props.match.params.id); this.props.getNotesByEvent(this.props.match.params.id);
} }
renderTrainees() { renderTrainees() {
const event = this.props.selectedEvent; const event = this.props.selectedEvent;
return this.props.trainees?.map((item) => { return this.props.trainees
const notes = this.props.eventNotes?.filter(note => note.profile === item.id); ?.sort(function (a, b) {
return ( var nameA = a.full_name.toLowerCase(),
nameB = b.full_name.toLowerCase();
if (nameA < nameB)
//sort string ascending
return -1;
if (nameA > nameB) return 1;
return 0; //default return value (no sorting)
})
.map((item) => {
const notes = this.props.eventNotes?.filter(
(note) => note.profile === item.id
);
return item.role === "Student" ? (
<TraineeTableRow <TraineeTableRow
selectedEvent={event} selectedEvent={event}
notes={notes} notes={notes}
...@@ -44,7 +65,7 @@ class EventDetail extends Component { ...@@ -44,7 +65,7 @@ class EventDetail extends Component {
edit={this.state.edit} edit={this.state.edit}
key={item.id} key={item.id}
/> />
); ) : null;
}); });
} }
...@@ -53,16 +74,16 @@ class EventDetail extends Component { ...@@ -53,16 +74,16 @@ class EventDetail extends Component {
return ( return (
<Segment> <Segment>
<Item> <Item>
<Divider style={{ fontSize: '2em'}} horizontal> <Divider style={{ fontSize: "2em" }} horizontal>
<Header as='h1'> <Header as="h1">
{name} {name}
<Item.Header style={{ fontSize: '0.6em'}}> <Item.Header style={{ fontSize: "0.6em" }}>
{moment(date).format('LL')} {moment(date).format("LL")}
</Item.Header> </Item.Header>
</Header> </Header>
</Divider> </Divider>
<Container textAlign='justified'> <Container textAlign="justified">
<Item.Header as='h3'>Leírás</Item.Header> <Item.Header as="h3">Leírás</Item.Header>
<Item.Content>{description}</Item.Content> <Item.Content>{description}</Item.Content>
</Container> </Container>
</Item> </Item>
...@@ -75,19 +96,20 @@ class EventDetail extends Component { ...@@ -75,19 +96,20 @@ class EventDetail extends Component {
return notes.map((note) => { return notes.map((note) => {
if (!note.profile) { if (!note.profile) {
return ( return (
<Segment>
<Comment key={Math.random()}> <Comment key={Math.random()}>
<Comment.Content> <Comment.Content>
<Comment.Author>{note.created_by_name}</Comment.Author> <Comment.Author>{note.created_by_name}</Comment.Author>
<Comment.Metadata> <Comment.Metadata>
{moment(note.created_at).format('LL')} {moment(note.created_at).format("LL")}
</Comment.Metadata> </Comment.Metadata>
<Comment.Text> <Comment.Text>{note.note}</Comment.Text>
{note.note}
</Comment.Text>
</Comment.Content> </Comment.Content>
</Comment>); </Comment>
</Segment>
);
} }
return ''; return "";
}); });
} }
...@@ -95,66 +117,57 @@ class EventDetail extends Component { ...@@ -95,66 +117,57 @@ class EventDetail extends Component {
const event = this.props.selectedEvent; const event = this.props.selectedEvent;
const note = this.props.actualNote; const note = this.props.actualNote;
return ( return (
<Container style={{paddingTop: '1em', paddingBottom: '7em'}}> <Container style={{ paddingTop: "1em", paddingBottom: "7em" }}>
<Container textAlign='center'> <Container textAlign="center">
{ this.props.selectedEvent && this.props.trainees ? {this.props.selectedEvent && this.props.trainees
this.renderEvent() ? this.renderEvent()
: : ""}
''
}
</Container> </Container>
{!this.state.edit ? (
<Button onClick={() => this.setState({ edit: true })}>
Módosítás
</Button>
) : (
<Button
onClick={() => {
this.setState({ edit: false });
}}
>
{" "}
Kész
</Button>
)}
<Table celled unstackable> <Table celled unstackable>
<Table.Header> <Table.Header>
<Table.Row textAlign='center'> <Table.Row textAlign="center">
<Table.HeaderCell>Név</Table.HeaderCell> <Table.HeaderCell>Név</Table.HeaderCell>
<Table.HeaderCell>Jelen volt</Table.HeaderCell> <Table.HeaderCell>Jelen volt</Table.HeaderCell>
<Table.HeaderCell>Megjegyzések</Table.HeaderCell> <Table.HeaderCell>Megjegyzések</Table.HeaderCell>
</Table.Row> </Table.Row>
</Table.Header> </Table.Header>
<Table.Body> <Table.Body>
{ this.props.selectedEvent ? {this.props.selectedEvent ? this.renderTrainees() : null}
this.renderTrainees()
:
null
}
</Table.Body> </Table.Body>
</Table> </Table>
{!this.state.edit ?
<Button onClick={() => this.setState({ edit: true })}>
Módosítás
</Button>
:
<Button onClick={() => {
this.setState({ edit: false });
this.props.submitVisitors(this.props.selectedEvent);
}}
> Kész
</Button>
}
<Comment.Group> <Comment.Group>
<Header dividing> <Header dividing>Megjegyzések</Header>
Megjegyzések {this.props.eventNotes ? this.renderComments() : ""}
</Header>
{this.props.eventNotes ?
this.renderComments()
:
''
}
<Form reply> <Form reply>
<Form.TextArea <Form.TextArea
value={note.note} value={note.note}
onChange={e => this.props.writeNote(e)} onChange={(e) => this.props.writeNote(e)}
/> />
<Button <Button
onClick={() => { onClick={() => {
this.props.postEventNote({ eventid: event.id, this.props.postEventNote({
note: note.note }); eventid: event.id,
note: note.note,
});
this.props.clearWrite(); this.props.clearWrite();
} }}
} content="Megjegyzés hozzáadása"
content='Megjegyzés hozzáadása' labelPosition="left"
labelPosition='left' icon="edit"
icon='edit'
primary primary
/> />
</Form> </Form>
...@@ -167,8 +180,13 @@ class EventDetail extends Component { ...@@ -167,8 +180,13 @@ class EventDetail extends Component {
const mapStateToProps = ({ const mapStateToProps = ({
notes: { eventNotes, actualNote }, notes: { eventNotes, actualNote },
events: { selectedEvent }, events: { selectedEvent },
trainees: { trainees } trainees: { trainees },
}) => ({ eventNotes, selectedEvent, trainees, actualNote }); }) => ({
eventNotes,
selectedEvent,
trainees,
actualNote,
});
export default connect(mapStateToProps, { export default connect(mapStateToProps, {
getEventById, getEventById,
......
import React, { Component } from 'react';
import { import {
Button,
Comment, Comment,
Table, Dropdown,
Form,
Grid,
Icon, Icon,
Popup, Popup,
Grid, Table,
Button,
Form,
Dropdown,
} from 'semantic-ui-react'; } from 'semantic-ui-react';
import React, { Component } from 'react';
import { clearWrite, postEventNote, writeNote } from '../../actions/notes';
import { submitVisitors, visitorChange } from '../../actions/statistics';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { visitorChange, submitVisitors } from '../../actions/statistics';
import { writeNote, clearWrite, postEventNote } from '../../actions/notes';
const visitStates = [ const visitStates = [
{ {
...@@ -25,8 +26,8 @@ const visitStates = [ ...@@ -25,8 +26,8 @@ const visitStates = [
{ {
text: 'Nem', text: 'Nem',
value: 'No', value: 'No',
} },
] ];
class TraineeTableRow extends Component { class TraineeTableRow extends Component {
constructor(props) { constructor(props) {
...@@ -38,123 +39,125 @@ class TraineeTableRow extends Component { ...@@ -38,123 +39,125 @@ class TraineeTableRow extends Component {
} }
// Hides and shows the Add and More popup // Hides and shows the Add and More popup
triggerAdd = () => this.setState({ ...this.state, showAddPopup: !this.state.showAddPopup}) triggerAdd = () =>
triggerMore = () => this.setState({ ...this.state, showMorePopup: !this.state.showMorePopup }) this.setState({ ...this.state, showAddPopup: !this.state.showAddPopup });
triggerMore = () =>
this.setState({ ...this.state, showMorePopup: !this.state.showMorePopup });
render() { render() {
const note = this.props.actualNote; const note = this.props.actualNote;
const { trainee, selectedEvent, notes } = this.props; const { trainee, selectedEvent, notes } = this.props;
const isVisitor = selectedEvent.visitors.includes(trainee.id); const isVisitor = selectedEvent.visitors.includes(trainee.id);
const isAbsent = selectedEvent.absent.includes(trainee.id); const isAbsent = selectedEvent.absent.includes(trainee.id);
let visitorStatusIcon;
let visitorStatusDropdown;
if (isVisitor) {
visitorStatusIcon = <Icon color="green" name="checkmark" />;
visitorStatusDropdown = 'Visitor';
} else if (isAbsent) {
visitorStatusIcon = <Icon color="orange" name="minus" />;
visitorStatusDropdown = 'Absent';
} else {
visitorStatusIcon = <Icon color="red" name="cancel" />;
visitorStatusDropdown = 'No';
}
return ( return (
<Table.Row> <Table.Row>
<Table.Cell textAlign='center'> <Table.Cell textAlign="center">{trainee.full_name}</Table.Cell>
{trainee.full_name}
</Table.Cell>
{/* Show and change Visitors status */} {/* Show and change Visitors status */}
{!this.props.edit ? {!this.props.edit ? (
<Table.Cell textAlign='center'> <Table.Cell textAlign="center">{visitorStatusIcon}</Table.Cell>
{ ) : (
isVisitor ? <Table.Cell textAlign="center">
<Icon color='green' name='checkmark' />
:
isAbsent ?
<Icon color='orange' name='minus' />
:
<Icon color='red' name='cancel' />
}
</Table.Cell>
:
<Table.Cell textAlign='center'>
<Dropdown <Dropdown
defaultValue={isVisitor ? 'Visitor' : isAbsent ? 'Absent' : 'No'} defaultValue={visitorStatusDropdown}
selection selection
options={visitStates} options={visitStates}
onChange={(_, v) => { onChange={(_, v) => {
this.props.visitorChange({ id : trainee.id, value: v.value }) this.props.visitorChange({ id: trainee.id, value: v.value });
// Submit with error check // Submit with error check
this.props.submitVisitors(this.props.selectedEvent) this.props
.then( value => { .submitVisitors(this.props.selectedEvent)
.then((value) => {
if (value === true) { if (value === true) {
console.log('success') console.log('success');
} else { } else {
console.log('error') console.log('error');
} }
}) });
}} }}
/> />
</Table.Cell> </Table.Cell>
} )}
{/* Notes for trainees */} {/* Notes for trainees */}
<Table.Cell> <Table.Cell>
<Grid> <Grid>
<Grid.Row> <Grid.Row>
{/* Note text */} {/* Note text */}
<Grid.Column floated='left' width={8}> <Grid.Column floated="left" width={8}>
{notes.length > 0 ? {notes.length > 0 ? (
<Comment> <Comment>
<Comment.Content> <Comment.Content>
<Comment.Author><b>{notes[0].created_by_name}:</b></Comment.Author> <Comment.Author>
<b>{notes[0].created_by_name}:</b>
</Comment.Author>
<Comment.Text style={{ wordWrap: 'break-word' }}> <Comment.Text style={{ wordWrap: 'break-word' }}>
{notes[0].note.length > 25 ? {notes[0].note.length > 25
notes[0].note.slice(0, 25).concat('...') ? notes[0].note.slice(0, 25).concat('...')
: : notes[0].note}
notes[0].note
}
</Comment.Text> </Comment.Text>
</Comment.Content> </Comment.Content>
</Comment> </Comment>
: ) : null}
null
}
</Grid.Column> </Grid.Column>
{/* Note buttons */} {/* Note buttons */}
<Grid.Column floated='right' width={6} textAlign='right'> <Grid.Column floated="right" width={6} textAlign="right">
{notes.length > 0 ? {notes.length > 0 ? (
<Popup basic <Popup
basic
open={this.state.showMorePopup} open={this.state.showMorePopup}
trigger={ trigger={
<Button icon='comment alternate outline' onClick={this.triggerMore} /> <Button
icon="comment alternate outline"
onClick={this.triggerMore}
/>
} }
content={notes.map((note) => { content={notes.map((oneNote) => (
return (
<Comment.Content> <Comment.Content>
<Comment.Author><b>{note.created_by_name}:</b></Comment.Author> <Comment.Author>
<Comment.Text> <b>{oneNote.created_by_name}:</b>
{note.note} </Comment.Author>
</Comment.Text> <Comment.Text>{oneNote.note}</Comment.Text>
</Comment.Content> </Comment.Content>
); ))}
})}
/> />
: ) : null}
null <Popup
} basic
<Popup basic trigger={<Button icon="plus" onClick={this.triggerAdd} />}
trigger={
<Button icon='plus' onClick={this.triggerAdd}/>
}
open={this.state.showAddPopup} open={this.state.showAddPopup}
content={ content={
<Form reply> <Form reply>
<Form.TextArea <Form.TextArea
value={note.note} value={note.note}
onChange={e => this.props.writeNote(e)} onChange={(e) => this.props.writeNote(e)}
/> />
<Button primary <Button
primary
onClick={() => { onClick={() => {
this.triggerAdd() this.triggerAdd();
this.props.postEventNote({ this.props.postEventNote({
eventid: selectedEvent.id, eventid: selectedEvent.id,
userid: trainee.id, userid: trainee.id,
note: note.note note: note.note,
}) });
this.props.clearWrite() this.props.clearWrite();
}} }}
content='Megjegyzés hozzáadása' content="Megjegyzés hozzáadása"
labelPosition='left' labelPosition="left"
icon='edit' icon="edit"
/> />
</Form> </Form>
} }
...@@ -167,9 +170,12 @@ class TraineeTableRow extends Component { ...@@ -167,9 +170,12 @@ class TraineeTableRow extends Component {
); );
} }
} }
const mapStateToProps = ({ notes: { actualNote } }) => ({ actualNote }) const mapStateToProps = ({ notes: { actualNote } }) => ({ actualNote });
export default connect(mapStateToProps, export default connect(mapStateToProps, {
{ writeNote, clearWrite, postEventNote, writeNote,
visitorChange, submitVisitors}) clearWrite,
(TraineeTableRow) postEventNote,
visitorChange,
submitVisitors,
})(TraineeTableRow);
import { Button, Container, Table } from 'semantic-ui-react';
import React, { Component } from 'react'; import React, { Component } from 'react';
import moment from 'moment'; import { deleteEvent, getStaffEvents } from '../../actions/statistics';
import AddEventForm from '../forms/AddEventForm';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { Container, Table, Button } from 'semantic-ui-react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { getStaffEvents, deleteEvent } from '../../actions/statistics'; import moment from 'moment';
import AddEventForm from '../forms/AddEventForm';
class Events extends Component { class Events extends Component {
UNSAFE_componentWillMount() { UNSAFE_componentWillMount() {
...@@ -12,51 +13,57 @@ class Events extends Component { ...@@ -12,51 +13,57 @@ class Events extends Component {
} }
renderEvents() { renderEvents() {
return this.props.events.map((event) => { return this.props.events.map((event) => (
return ( <Table.Row key={event.id}>
<Table.Row > <Table.Cell textAlign="center">
<Table.Cell textAlign='center'> <Link to={`events/${event.id}`}>{event.name}</Link>
<Link to={`events/${event.id}`}>
{event.name}
</Link>
</Table.Cell> </Table.Cell>
<Table.Cell textAlign='center'> <Table.Cell textAlign="center">
{moment(event.date).format('LL')} {moment(event.date).format('LL')}
</Table.Cell> </Table.Cell>
<Table.Cell textAlign='center'> <Table.Cell textAlign="center">{event.visitor_number}</Table.Cell>
{event.visitor_number} <Table.Cell textAlign="center">
</Table.Cell>
<Table.Cell textAlign='center'>
<Button <Button
onClick={() => this.props.deleteEvent(event)} onClick={() => this.props.deleteEvent(event)}
color='red' color="red"
compact compact
size='small' size="small"
> >
Törlés Törlés
</Button> </Button>
</Table.Cell> </Table.Cell>
</Table.Row> </Table.Row>
); ));
});
} }
render() { render() {
return ( return (
<Container textAlign='center'> <Container textAlign="center">
<div style={{ overflowX: 'scroll' }}> <div style={{ overflowX: 'scroll' }}>
<Table color='blue' unstackable celled selectable compact <Table
size='small'> color="blue"
unstackable
celled
selectable
compact
size="small"
>
<Table.Header> <Table.Header>
<Table.Row> <Table.Row>
<Table.HeaderCell textAlign='center'>Alkalom neve</Table.HeaderCell> <Table.HeaderCell textAlign="center">
<Table.HeaderCell textAlign='center'>Dátum</Table.HeaderCell> Alkalom neve
<Table.HeaderCell textAlign='center'>Jelen voltak</Table.HeaderCell> </Table.HeaderCell>
<Table.HeaderCell textAlign="center">Dátum</Table.HeaderCell>
<Table.HeaderCell textAlign="center">
Jelen voltak
</Table.HeaderCell>
<Table.HeaderCell /> <Table.HeaderCell />
</Table.Row> </Table.Row>
</Table.Header> </Table.Header>
<Table.Body> <Table.Body>
{this.props.events ? this.renderEvents() : 'Nincs még alkalom beírva'} {this.props.events
? this.renderEvents()
: 'Nincs még alkalom beírva'}
</Table.Body> </Table.Body>
</Table> </Table>
</div> </div>
...@@ -69,4 +76,6 @@ class Events extends Component { ...@@ -69,4 +76,6 @@ class Events extends Component {
const mapStateToProps = ({ events: { events }, user }) => ({ events, user }); const mapStateToProps = ({ events: { events }, user }) => ({ events, user });
export default connect(mapStateToProps, { getStaffEvents, deleteEvent })(Events); export default connect(mapStateToProps, { getStaffEvents, deleteEvent })(
Events
);
import React, { Component } from 'react';
import { Container, Header, Segment, Divider } from 'semantic-ui-react';
import './Groups.css'; import './Groups.css';
import GroupCard from '../extra/GroupCard'
import { Container, Header, Segment } from 'semantic-ui-react';
import React, { Component } from 'react';
import GroupCard from '../extra/GroupCard';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { getGroups } from '../../actions/groups'; import { getGroups } from '../../actions/groups';
class Groups extends Component { class Groups extends Component {
UNSAFE_componentWillMount() { UNSAFE_componentWillMount() {
this.props.getGroups() this.props.getGroups();
} }
render() { render() {
return ( return (
<div> <div>
<Segment inverted textAlign='center' vertical> <Segment inverted textAlign="center" vertical>
<Container> <Container>
<Header <Header
as='h1' as="h1"
content='Köreink' content="Köreink"
inverted inverted
style={{ style={{
fontSize: '3em', fontSize: '3em',
...@@ -33,8 +33,16 @@ class Groups extends Component { ...@@ -33,8 +33,16 @@ class Groups extends Component {
<Segment style={{ padding: '1em 0em 5em' }} vertical> <Segment style={{ padding: '1em 0em 5em' }} vertical>
<Container text> <Container text>
{ this.props.groups.map(item => { {this.props.groups
return <GroupCard key={item.id} label={item.name} value={item.description}/> // eslint-disable-next-line arrow-body-style
.map((item) => {
return (
<GroupCard
key={item.id}
label={item.name}
value={item.description}
/>
);
})} })}
</Container> </Container>
</Segment> </Segment>
...@@ -46,4 +54,3 @@ class Groups extends Component { ...@@ -46,4 +54,3 @@ class Groups extends Component {
const mapStateToProps = ({ groups }) => ({ groups }); const mapStateToProps = ({ groups }) => ({ groups });
export default connect(mapStateToProps, { getGroups })(Groups); export default connect(mapStateToProps, { getGroups })(Groups);
...@@ -5,8 +5,33 @@ ...@@ -5,8 +5,33 @@
.car-text-kszk { .car-text-kszk {
position: absolute; position: absolute;
width: 100%; width: 100%;
top: 0px; top: 1vw;
text-shadow: black 0px 0px 10px, black 0px 0px 6px;
-webkit-text-fill-color: white; -webkit-text-fill-color: white;
-webkit-text-stroke-color: black; }
-webkit-text-stroke-width: 0.75px;
.quote {
position: relative;
margin-bottom: 0.5rem;
}
.quote:before {
content: '“';
position: absolute;
left: -0.45em;
}
.quote::after {
content: '”';
margin-right: -1rem;
}
.quote--container {
margin: 2rem auto 0;
padding-bottom: 0.7rem;
}
.quote--author {
text-align: right;
font-weight: 300;
} }
This diff is collapsed.
import React, { Component } from 'react';
import { import {
Button,
Container, Container,
Header, Header,
Segment,
Table,
Icon, Icon,
Message,
Button,
Label, Label,
Message,
Segment,
Table,
} from 'semantic-ui-react'; } from 'semantic-ui-react';
import { connect } from 'react-redux'; /* eslint-disable no-nested-ternary */
import moment from 'moment'; import React, { Component } from 'react';
import { import {
getTasks,
getSolutions,
getDocuments,
addTask, addTask,
setSelectedTask,
deleteTask, deleteTask,
getDocuments,
getProfiles, getProfiles,
getSolutions,
getTasks,
setSelectedTask,
} from '../../actions/homework'; } from '../../actions/homework';
import AddTaskForm from '../forms/AddTaskForm';
import AddSolutionForm from '../forms/AddSolutionForm'; import AddSolutionForm from '../forms/AddSolutionForm';
import SolutionDetailsForm from '../forms/SolutionDetailsForm'; import AddTaskForm from '../forms/AddTaskForm';
import ConfirmModal from '../forms/ConfirmModal';
import EditTaskForm from '../forms/EditTaskForm'; import EditTaskForm from '../forms/EditTaskForm';
import InfoModal from '../forms/InfoModal'; import InfoModal from '../forms/InfoModal';
import ConfirmModal from '../forms/ConfirmModal'; import SolutionDetailsForm from '../forms/SolutionDetailsForm';
import { connect } from 'react-redux';
import moment from 'moment';
// Display type for the Table Semantic UI component // Display type for the Table Semantic UI component
// {icon} {text} - Displayed for the student for each Task // {icon} {text} - Displayed for the student for each Task
...@@ -71,16 +73,17 @@ export const customMessage = (header, text, marginBottom, warning) => ( ...@@ -71,16 +73,17 @@ export const customMessage = (header, text, marginBottom, warning) => (
class Homework extends Component { class Homework extends Component {
componentDidMount() { componentDidMount() {
this.props.getTasks() this.props.getTasks();
this.props.getProfiles() this.props.getProfiles();
this.props.getSolutions() this.props.getSolutions();
this.props.getDocuments() this.props.getDocuments();
} }
// Returns a table style for the given task // Returns a table style for the given task
getTaskDisplayStyle(task) { getTaskDisplayStyle(task) {
const taskSolution = this.props.homeworks.solutions const taskSolution = this.props.homeworks.solutions.filter(
.filter(solution => solution.task === task.id) (solution) => solution.task === task.id
);
if (taskSolution.length === 0) { if (taskSolution.length === 0) {
if (moment().isBefore(task.deadline)) { if (moment().isBefore(task.deadline)) {
...@@ -105,15 +108,15 @@ class Homework extends Component { ...@@ -105,15 +108,15 @@ class Homework extends Component {
// given parameters separates the active/inactive tasks and normal/staff users // given parameters separates the active/inactive tasks and normal/staff users
renderTaskList(active, staff) { renderTaskList(active, staff) {
const { user, homeworks } = this.props; const { user, homeworks } = this.props;
const profileSolutions = homeworks.solutions const profileSolutions = homeworks.solutions.filter(
.filter(solution => solution.created_by === user.id); (solution) => solution.created_by === user.id
);
// Normal user // Normal user
if (!staff) { if (!staff) {
return homeworks.tasks return homeworks.tasks
.filter(task => moment().isBefore(task.deadline) === active) .filter((task) => moment().isBefore(task.deadline) === active)
.map(task => ( .map((task) => (
// Style // Style
<Table.Row <Table.Row
key={task.id} key={task.id}
...@@ -143,11 +146,18 @@ class Homework extends Component { ...@@ -143,11 +146,18 @@ class Homework extends Component {
</Table.Cell> </Table.Cell>
<Table.Cell> <Table.Cell>
<Label color={ <Label
displayTypes[this.getTaskDisplayStyle(task)].rowstyle.positive ? color={
'green' displayTypes[this.getTaskDisplayStyle(task)].rowstyle.positive
: moment().isAfter(task.deadline) ? 'red' ? 'green'
: displayTypes[this.getTaskDisplayStyle(task)].rowstyle.negative ? 'red': null}> : moment().isAfter(task.deadline)
? 'red'
: displayTypes[this.getTaskDisplayStyle(task)].rowstyle
.negative
? 'red'
: null
}
>
{task.bits} bit {task.bits} bit
</Label> </Label>
</Table.Cell> </Table.Cell>
...@@ -155,25 +165,34 @@ class Homework extends Component { ...@@ -155,25 +165,34 @@ class Homework extends Component {
<Table.Cell> <Table.Cell>
<Icon name={displayTypes[this.getTaskDisplayStyle(task)].icon} />{' '} <Icon name={displayTypes[this.getTaskDisplayStyle(task)].icon} />{' '}
{displayTypes[this.getTaskDisplayStyle(task)].text} {displayTypes[this.getTaskDisplayStyle(task)].text}
{profileSolutions.filter(solution => solution.task === task.id) {profileSolutions.filter(
&& profileSolutions.filter(solution => solution.task === task.id).slice(-1)[0] (solution) => solution.task === task.id
&& profileSolutions.filter(solution => solution.task === task.id).slice(-1)[0].note ) &&
? profileSolutions
.filter((solution) => solution.task === task.id)
.slice(-1)[0] &&
profileSolutions
.filter((solution) => solution.task === task.id)
.slice(-1)[0].note ? (
<div> <div>
<InfoModal <InfoModal
button={ button={
<button id='tasknote'> <button type="button" id="tasknote">
(Megjegyzés <Icon name='external' />) (Megjegyzés <Icon name="external" />)
</button> </button>
} }
title='Megjegyzés a feladathoz' title="Megjegyzés a feladathoz"
content={profileSolutions.filter(solution => content={
solution.task === task.id).slice(-1)[0].note} profileSolutions
.filter((solution) => solution.task === task.id)
.slice(-1)[0].note
}
onAccept={() => {}} onAccept={() => {}}
/> />
</div> </div>
: '' ) : (
} ''
)}
</Table.Cell> </Table.Cell>
</Table.Row> </Table.Row>
)); ));
...@@ -182,18 +201,14 @@ class Homework extends Component { ...@@ -182,18 +201,14 @@ class Homework extends Component {
// Staff // Staff
const deleteButton = ( const deleteButton = (
<Button <Button inverted style={{ marginRight: '2em' }} color="red">
inverted <Icon name="x" /> Törlés
style={{ marginRight: '2em' }}
color='red'
>
<Icon name='x' /> Törlés
</Button> </Button>
); );
return this.props.homeworks.tasks return this.props.homeworks.tasks
.filter(task => moment().isBefore(task.deadline) === active) .filter((task) => moment().isBefore(task.deadline) === active)
.map(task => ( .map((task) => (
<Table.Row <Table.Row
key={task.id} key={task.id}
warning={ warning={
...@@ -218,12 +233,16 @@ class Homework extends Component { ...@@ -218,12 +233,16 @@ class Homework extends Component {
<Table.Cell> <Table.Cell>
{moment(task.deadline).format('YYYY. MM. DD. HH:mm')} {moment(task.deadline).format('YYYY. MM. DD. HH:mm')}
</Table.Cell> </Table.Cell>
{/* Bits */}
<Table.Cell>
<Label color={null}>{task.bits} bit</Label>
</Table.Cell>
{/* Admin buttons */} {/* Admin buttons */}
<Table.Cell> <Table.Cell>
<EditTaskForm onClick={() => this.props.setSelectedTask(task)} /> <EditTaskForm onClick={() => this.props.setSelectedTask(task)} />
<ConfirmModal <ConfirmModal
button={deleteButton} button={deleteButton}
text='törlöd a kiválaszott feladatot a már beadott megoldásokkal együtt' text="törlöd a kiválaszott feladatot a már beadott megoldásokkal együtt"
onAccept={() => this.props.deleteTask(task)} onAccept={() => this.props.deleteTask(task)}
/> />
</Table.Cell> </Table.Cell>
...@@ -247,17 +266,16 @@ class Homework extends Component { ...@@ -247,17 +266,16 @@ class Homework extends Component {
<Table.Header> <Table.Header>
<Table.Row> <Table.Row>
<Table.HeaderCell> <Table.HeaderCell>
<Icon circular name='home' /> <Icon circular name="home" />
Feladat megnevezése / beadása Feladat megnevezése / beadása
</Table.HeaderCell> </Table.HeaderCell>
<Table.HeaderCell> <Table.HeaderCell>
<Icon circular name='calendar' /> <Icon circular name="calendar" />
Beadási határidő Beadási határidő
</Table.HeaderCell> </Table.HeaderCell>
<Table.HeaderCell width={2}> <Table.HeaderCell width={2}></Table.HeaderCell>
</Table.HeaderCell>
<Table.HeaderCell> <Table.HeaderCell>
<Icon circular name='tasks' /> <Icon circular name="tasks" />
Állapot Állapot
</Table.HeaderCell> </Table.HeaderCell>
</Table.Row> </Table.Row>
...@@ -271,15 +289,16 @@ class Homework extends Component { ...@@ -271,15 +289,16 @@ class Homework extends Component {
<Table.Header> <Table.Header>
<Table.Row> <Table.Row>
<Table.HeaderCell> <Table.HeaderCell>
<Icon circular name='home' /> <Icon circular name="home" />
Feladat megnevezése / Beadások állapota Feladat megnevezése / Beadások állapota
</Table.HeaderCell> </Table.HeaderCell>
<Table.HeaderCell> <Table.HeaderCell>
<Icon circular name='calendar' /> <Icon circular name="calendar" />
Beadási határidő Beadási határidő
</Table.HeaderCell> </Table.HeaderCell>
<Table.HeaderCell width={2}></Table.HeaderCell>
<Table.HeaderCell> <Table.HeaderCell>
<Icon circular name='edit' /> <Icon circular name="edit" />
Módosítás / Törlés Módosítás / Törlés
</Table.HeaderCell> </Table.HeaderCell>
</Table.Row> </Table.Row>
...@@ -301,15 +320,18 @@ class Homework extends Component { ...@@ -301,15 +320,18 @@ class Homework extends Component {
headerText = 'Aktív feladatok kijavítása, módosítása vagy törlése'; headerText = 'Aktív feladatok kijavítása, módosítása vagy törlése';
} }
if (this.props.homeworks.tasks.filter(task => if (
moment().isBefore(task.deadline) === active).length === 0 this.props.homeworks.tasks.filter(
(task) => moment().isBefore(task.deadline) === active
).length === 0
) { ) {
noTask = true; noTask = true;
} }
if (!active) { if (!active) {
if (staff) { if (staff) {
headerText = 'Lejárt határidejű feladatok kijavítása, módosítása vagy törlése'; headerText =
'Lejárt határidejű feladatok kijavítása, módosítása vagy törlése';
} else { } else {
headerText = 'Lejárt határidejű feladatok'; headerText = 'Lejárt határidejű feladatok';
} }
...@@ -321,11 +343,9 @@ class Homework extends Component { ...@@ -321,11 +343,9 @@ class Homework extends Component {
<Segment style={{ padding: '0 0 2em 0' }} vertical basic> <Segment style={{ padding: '0 0 2em 0' }} vertical basic>
<Container> <Container>
<Header <Header
as='h1' as="h1"
dividing dividing
content={ content={headerText}
headerText
}
style={{ style={{
fontSize: '2em', fontSize: '2em',
fontWeight: 'normal', fontWeight: 'normal',
...@@ -333,18 +353,18 @@ class Homework extends Component { ...@@ -333,18 +353,18 @@ class Homework extends Component {
marginTop: '0.5em', marginTop: '0.5em',
}} }}
/> />
{noTask ? {noTask ? (
customMessage(noTaskHeaderText, noTaskText, marginBottom, false) customMessage(noTaskHeaderText, noTaskText, marginBottom, false)
: ) : (
<div> <div>{this.renderHomeworksTable(active, staff)}</div>
{this.renderHomeworksTable(active, staff)} )}
{!active && !staff ? {!active && !staff ? (
<Header <Header
as='h3' as="h3"
content={ content={
<div> <div>
Jelenlegi bitjeid száma: Jelenlegi bitjeid száma:
<Label color='green' size='large'> <Label color="green" size="large">
{this.props.user.bits} bit {this.props.user.bits} bit
</Label> </Label>
</div> </div>
...@@ -352,14 +372,11 @@ class Homework extends Component { ...@@ -352,14 +372,11 @@ class Homework extends Component {
style={{ style={{
fontWeight: 'normal', fontWeight: 'normal',
marginTop: '0.5em', marginTop: '0.5em',
marginBottom: '1em',
}} }}
textAlign='right' textAlign="right"
/> />
: null ) : null}
}
</div>
}
</Container> </Container>
</Segment> </Segment>
); );
...@@ -375,13 +392,16 @@ class Homework extends Component { ...@@ -375,13 +392,16 @@ class Homework extends Component {
{this.renderHomeworks(false, false)} {this.renderHomeworks(false, false)}
</div> </div>
); );
} else if (user.role === 'Staff') { }
if (user.role === 'Staff') {
return ( return (
<div style={{ paddingBottom: '2em' }}> <div style={{ paddingBottom: '2em' }}>
<Segment style={{ padding: '0 0 2em 0' }} vertical basic> <Segment style={{ padding: '0 0 2em 0' }} vertical basic>
<Container> <Container>
<Header dividing as='h1' <Header
content='Új házi feladat létrehozása' dividing
as="h1"
content="Új házi feladat létrehozása"
style={{ style={{
fontSize: '2em', fontSize: '2em',
fontWeight: 'normal', fontWeight: 'normal',
...@@ -403,11 +423,13 @@ class Homework extends Component { ...@@ -403,11 +423,13 @@ class Homework extends Component {
} }
} }
const mapStateToProps = ({ selectedTask, homeworks, user }) => ({ selectedTask, homeworks, user }); const mapStateToProps = ({ selectedTask, homeworks, user }) => ({
selectedTask,
homeworks,
user,
});
export default connect( export default connect(mapStateToProps, {
mapStateToProps,
{
getTasks, getTasks,
setSelectedTask, setSelectedTask,
getSolutions, getSolutions,
...@@ -415,5 +437,4 @@ export default connect( ...@@ -415,5 +437,4 @@ export default connect(
addTask, addTask,
deleteTask, deleteTask,
getProfiles, getProfiles,
}, })(Homework);
)(Homework);
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
import React, { Component } from 'react';
import { Button, Container, Header, Icon, Segment } from 'semantic-ui-react'; import { Button, Container, Header, Icon, Segment } from 'semantic-ui-react';
import React, { Component } from 'react';
export default class NotFound extends Component { export default class NotFound extends Component {
render() { render() {
return ( return (
<div> <div>
<Segment inverted textAlign='center' vertical> <Segment inverted textAlign="center" vertical>
<Container> <Container>
<Header <Header
as='h1' as="h1"
content='404 - A keresett oldal nem található!' content="404 - A keresett oldal nem található!"
inverted inverted
style={{ style={{
fontSize: '3em', fontSize: '3em',
...@@ -19,9 +19,9 @@ export default class NotFound extends Component { ...@@ -19,9 +19,9 @@ export default class NotFound extends Component {
}} }}
/> />
<Button <Button
href='/' href="/"
primary primary
size='huge' size="huge"
style={{ style={{
fontSize: '2em', fontSize: '2em',
marginTop: '1em', marginTop: '1em',
...@@ -29,7 +29,7 @@ export default class NotFound extends Component { ...@@ -29,7 +29,7 @@ export default class NotFound extends Component {
}} }}
> >
Vissza a Főoldalra Vissza a Főoldalra
<Icon name='right arrow' /> <Icon name="right arrow" />
</Button> </Button>
</Container> </Container>
</Segment> </Segment>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.