diff --git a/src/components/Assignments/SolutionsTable/SolutionsTableRow.js b/src/components/Assignments/SolutionsTable/SolutionsTableRow.js index 6e382b1ff..f4dd4ffdd 100644 --- a/src/components/Assignments/SolutionsTable/SolutionsTableRow.js +++ b/src/components/Assignments/SolutionsTable/SolutionsTableRow.js @@ -11,7 +11,7 @@ import DeleteSolutionButtonContainer from '../../../containers/DeleteSolutionBut import AcceptSolutionContainer from '../../../containers/AcceptSolutionContainer'; import ReviewSolutionContainer from '../../../containers/ReviewSolutionContainer'; -import { SearchIcon } from '../../icons'; +import { DetailIcon } from '../../icons'; import DateTime from '../../widgets/DateTime'; import OptionalTooltipWrapper from '../../widgets/OptionalTooltipWrapper'; import Button, { TheButtonGroup } from '../../widgets/TheButton'; @@ -130,7 +130,7 @@ const SolutionsTableRow = ({ tooltipId={`detail-${id}`}> diff --git a/src/components/Exercises/ReferenceSolutionsTable/ReferenceSolutionsTable.js b/src/components/Exercises/ReferenceSolutionsTable/ReferenceSolutionsTable.js index f784be8b4..eb1597e84 100644 --- a/src/components/Exercises/ReferenceSolutionsTable/ReferenceSolutionsTable.js +++ b/src/components/Exercises/ReferenceSolutionsTable/ReferenceSolutionsTable.js @@ -19,9 +19,12 @@ const ReferenceSolutionsTable = ({ - + + + + diff --git a/src/components/Exercises/ReferenceSolutionsTable/ReferenceSolutionsTableRow.js b/src/components/Exercises/ReferenceSolutionsTable/ReferenceSolutionsTableRow.js index ad6be78a2..402161a34 100644 --- a/src/components/Exercises/ReferenceSolutionsTable/ReferenceSolutionsTableRow.js +++ b/src/components/Exercises/ReferenceSolutionsTable/ReferenceSolutionsTableRow.js @@ -1,9 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { FormattedMessage } from 'react-intl'; +import { FormattedMessage, FormattedNumber } from 'react-intl'; +import { OverlayTrigger, Tooltip } from 'react-bootstrap'; import EnvironmentsListItem from '../../helpers/EnvironmentsList/EnvironmentsListItem'; -import Icon from '../../icons'; +import Icon, { EvaluationFailedIcon, LoadingIcon } from '../../icons'; import UsersNameContainer from '../../../containers/UsersNameContainer'; import DateTime from '../../widgets/DateTime'; @@ -14,6 +15,7 @@ const ReferenceSolutionsTableRow = ({ permissionHints = null, authorId, createdAt, + lastSubmission, runtimeEnvironments, renderButtons, }) => { @@ -25,7 +27,7 @@ const ReferenceSolutionsTableRow = ({ - + {description || ( @@ -40,7 +42,44 @@ const ReferenceSolutionsTableRow = ({ - {rte ? : '-'} + + {rte ? : '-'} + + + {!lastSubmission || (!lastSubmission.evaluation && !lastSubmission.failure) ? ( + + + + }> + + + ) : lastSubmission.failure ? ( + + {lastSubmission.failure.description || ( + + )} + + }> + + + ) : ( + + + + )} + @@ -55,6 +94,7 @@ ReferenceSolutionsTableRow.propTypes = { runtimeEnvironmentId: PropTypes.string.isRequired, authorId: PropTypes.string.isRequired, createdAt: PropTypes.number.isRequired, + lastSubmission: PropTypes.object, runtimeEnvironments: PropTypes.array.isRequired, permissionHints: PropTypes.object, renderButtons: PropTypes.func.isRequired, diff --git a/src/components/icons/index.js b/src/components/icons/index.js index a64161c09..b4157562d 100644 --- a/src/components/icons/index.js +++ b/src/components/icons/index.js @@ -32,6 +32,7 @@ export const ChatIcon = props => ; export const DashboardIcon = props => ; export const DeadlineIcon = props => ; export const DeleteIcon = props => ; +export const DetailIcon = props => ; export const DownloadIcon = props => ; export const EditIcon = props => ; export const EditAssignmentIcon = EditIcon; diff --git a/src/locales/cs.json b/src/locales/cs.json index 6398f12db..2281d39b5 100644 --- a/src/locales/cs.json +++ b/src/locales/cs.json @@ -1196,6 +1196,7 @@ "app.referenceSolutionDetail.exercise": "Úloha", "app.referenceSolutionDetail.title.details": "Detail referenčního řešení", "app.referenceSolutionTable.noDescription": "popis nebyl uveden", + "app.referenceSolutionTable.stillEvaluating": "Poslední vyhodnocení selhalo", "app.registration.external.gotoSignin": "Stránka přihlášení", "app.registration.external.link": "Navštívit stránky podpory", "app.registration.external.mail": "Kontaktovat podporu", @@ -1621,6 +1622,7 @@ "generic.author": "Autor", "generic.clearAll": "Zrušit vše", "generic.close": "Zavřít", + "generic.correctness": "Správnost", "generic.create": "Vytvořit", "generic.created": "Vytvořeno", "generic.createdAt": "Vytvořeno", diff --git a/src/locales/en.json b/src/locales/en.json index f50d8a7e3..ceb219b1f 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1196,6 +1196,7 @@ "app.referenceSolutionDetail.exercise": "Exercise", "app.referenceSolutionDetail.title.details": "Reference Solution Detail", "app.referenceSolutionTable.noDescription": "no description given", + "app.referenceSolutionTable.stillEvaluating": "Last evaluation failed", "app.registration.external.gotoSignin": "Sign-in Page", "app.registration.external.link": "Visit Help Page", "app.registration.external.mail": "Contact Support", @@ -1621,6 +1622,7 @@ "generic.author": "Author", "generic.clearAll": "Clear All", "generic.close": "Close", + "generic.correctness": "Correctness", "generic.create": "Create", "generic.created": "Created", "generic.createdAt": "Created at", diff --git a/src/pages/AssignmentStats/AssignmentStats.js b/src/pages/AssignmentStats/AssignmentStats.js index 40dd851af..046e88de1 100644 --- a/src/pages/AssignmentStats/AssignmentStats.js +++ b/src/pages/AssignmentStats/AssignmentStats.js @@ -15,7 +15,7 @@ import CommentThreadContainer from '../../containers/CommentThreadContainer'; import Page from '../../components/layout/Page'; import { AssignmentNavigation } from '../../components/layout/Navigation'; -import { ChatIcon, DownloadIcon, SearchIcon, ResultsIcon, UserIcon } from '../../components/icons'; +import { ChatIcon, DownloadIcon, DetailIcon, ResultsIcon, UserIcon } from '../../components/icons'; import SolutionTableRowIcons from '../../components/Assignments/SolutionsTable/SolutionTableRowIcons'; import UsersName from '../../components/Users/UsersName'; import Points from '../../components/Assignments/SolutionsTable/Points'; @@ -164,7 +164,7 @@ const prepareTableColumnDescriptors = defaultMemoize((loggedUserId, assignmentId {solution.permissionHints && solution.permissionHints.viewDetail && ( diff --git a/src/pages/Exercise/Exercise.js b/src/pages/Exercise/Exercise.js index f7404154e..06f8aa87a 100644 --- a/src/pages/Exercise/Exercise.js +++ b/src/pages/Exercise/Exercise.js @@ -16,7 +16,7 @@ import ResourceRenderer from '../../components/helpers/ResourceRenderer'; import ReferenceSolutionsTable from '../../components/Exercises/ReferenceSolutionsTable'; import SubmitSolutionContainer from '../../containers/SubmitSolutionContainer'; import Box from '../../components/widgets/Box'; -import { ExerciseIcon, SendIcon, DeleteIcon } from '../../components/icons'; +import { ExerciseIcon, DetailIcon, DeleteIcon } from '../../components/icons'; import Confirm from '../../components/forms/Confirm'; import ExerciseCallouts, { exerciseCalloutsAreVisible } from '../../components/Exercises/ExerciseCallouts'; import ForkExerciseForm from '../../components/forms/ForkExerciseForm'; @@ -217,7 +217,7 @@ class Exercise extends Component { diff --git a/src/pages/GroupUserSolutions/GroupUserSolutions.js b/src/pages/GroupUserSolutions/GroupUserSolutions.js index 420bb7658..c05aa3bb0 100644 --- a/src/pages/GroupUserSolutions/GroupUserSolutions.js +++ b/src/pages/GroupUserSolutions/GroupUserSolutions.js @@ -13,7 +13,7 @@ import ReviewSolutionContainer from '../../containers/ReviewSolutionContainer'; import Page from '../../components/layout/Page'; import { GroupNavigation } from '../../components/layout/Navigation'; -import { AssignmentIcon, SearchIcon, UserIcon } from '../../components/icons'; +import { AssignmentIcon, DetailIcon, UserIcon } from '../../components/icons'; import SolutionTableRowIcons from '../../components/Assignments/SolutionsTable/SolutionTableRowIcons'; import Points from '../../components/Assignments/SolutionsTable/Points'; import SolutionsTable from '../../components/Assignments/SolutionsTable'; @@ -183,7 +183,7 @@ const prepareTableColumnDescriptors = defaultMemoize((assignments, groupId, loca {solution.permissionHints && solution.permissionHints.viewDetail && (