Skip to content

Commit

Permalink
Showing correctness of last evaluation in the reference solutions table.
Browse files Browse the repository at this point in the history
  • Loading branch information
krulis-martin committed Nov 3, 2021
1 parent ed26378 commit 6031830
Show file tree
Hide file tree
Showing 9 changed files with 61 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -130,7 +130,7 @@ const SolutionsTableRow = ({
tooltipId={`detail-${id}`}>
<Link to={SOLUTION_DETAIL_URI_FACTORY(assignmentId, id)}>
<Button size="xs" variant="secondary" disabled={selected}>
<SearchIcon gapRight={!compact} />
<DetailIcon gapRight={!compact} />
{!compact && <FormattedMessage id="generic.detail" defaultMessage="Detail" />}
</Button>
</Link>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@ const ReferenceSolutionsTable = ({
<th>
<FormattedMessage id="generic.uploadedAt" defaultMessage="Uploaded at" />
</th>
<th>
<th className="text-nowrap text-center shrink-col">
<FormattedMessage id="generic.runtimeShortest" defaultMessage="Runtime" />
</th>
<th className="text-nowrap text-center shrink-col">
<FormattedMessage id="generic.correctness" defaultMessage="Correctness" />
</th>
<th>
<FormattedMessage id="generic.author" defaultMessage="Author" />
</th>
Expand Down
Original file line number Diff line number Diff line change
@@ -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';

Expand All @@ -14,6 +15,7 @@ const ReferenceSolutionsTableRow = ({
permissionHints = null,
authorId,
createdAt,
lastSubmission,
runtimeEnvironments,
renderButtons,
}) => {
Expand All @@ -25,7 +27,7 @@ const ReferenceSolutionsTableRow = ({
<td rowSpan={2} className="valign-middle text-muted">
<Icon icon="book" size="lg" gapLeft gapRight />
</td>
<td colSpan={3}>
<td colSpan={4}>
{description || (
<i className="text-muted small">
<FormattedMessage id="app.referenceSolutionTable.noDescription" defaultMessage="no description given" />
Expand All @@ -40,7 +42,44 @@ const ReferenceSolutionsTableRow = ({
<td className="text-nowrap">
<DateTime unixts={createdAt} showOverlay overlayTooltipId={`datetime-${id}`} />
</td>
<td className="text-nowrap">{rte ? <EnvironmentsListItem runtimeEnvironment={rte} longNames /> : '-'}</td>
<td className="text-nowrap text-center shrink-col">
{rte ? <EnvironmentsListItem runtimeEnvironment={rte} /> : '-'}
</td>
<td className="text-nowrap text-center shrink-col">
{!lastSubmission || (!lastSubmission.evaluation && !lastSubmission.failure) ? (
<OverlayTrigger
placement="bottom"
overlay={
<Tooltip id="evaluating">
<FormattedMessage
id="app.referenceSolutionTable.stillEvaluating"
defaultMessage="Last submission is still evaluating"
/>
</Tooltip>
}>
<LoadingIcon />
</OverlayTrigger>
) : lastSubmission.failure ? (
<OverlayTrigger
placement="bottom"
overlay={
<Tooltip id="failure">
{lastSubmission.failure.description || (
<FormattedMessage
id="app.referenceSolutionTable.stillEvaluating"
defaultMessage="Last evaluation failed"
/>
)}
</Tooltip>
}>
<EvaluationFailedIcon className="text-danger" />
</OverlayTrigger>
) : (
<strong className={lastSubmission.isCorrect ? 'text-success' : 'text-danger'}>
<FormattedNumber style="percent" value={lastSubmission.evaluation.score} />
</strong>
)}
</td>
<td className="text-nowrap">
<UsersNameContainer userId={authorId} isSimple />
</td>
Expand All @@ -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,
Expand Down
1 change: 1 addition & 0 deletions src/components/icons/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export const ChatIcon = props => <Icon {...props} icon={['far', 'comments']} />;
export const DashboardIcon = props => <Icon {...props} icon="tachometer-alt" />;
export const DeadlineIcon = props => <Icon {...props} icon="hourglass-half" />;
export const DeleteIcon = props => <Icon {...props} icon="trash" />;
export const DetailIcon = props => <Icon {...props} icon="search" />;
export const DownloadIcon = props => <Icon {...props} icon="cloud-download-alt" />;
export const EditIcon = props => <Icon {...props} icon={['far', 'edit']} />;
export const EditAssignmentIcon = EditIcon;
Expand Down
2 changes: 2 additions & 0 deletions src/locales/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down
2 changes: 2 additions & 0 deletions src/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down
4 changes: 2 additions & 2 deletions src/pages/AssignmentStats/AssignmentStats.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -164,7 +164,7 @@ const prepareTableColumnDescriptors = defaultMemoize((loggedUserId, assignmentId
{solution.permissionHints && solution.permissionHints.viewDetail && (
<Link to={SOLUTION_DETAIL_URI_FACTORY(assignmentId, solution.id)}>
<Button size="xs" variant="secondary">
<SearchIcon gapRight />
<DetailIcon gapRight />
<FormattedMessage id="generic.detail" defaultMessage="Detail" />
</Button>
</Link>
Expand Down
4 changes: 2 additions & 2 deletions src/pages/Exercise/Exercise.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -217,7 +217,7 @@ class Exercise extends Component {
<TheButtonGroup vertical>
<Link to={EXERCISE_REFERENCE_SOLUTION_URI_FACTORY(exercise.id, solutionId)}>
<Button size="xs" variant="secondary">
<SendIcon gapRight />
<DetailIcon gapRight />
<FormattedMessage id="generic.detail" defaultMessage="Detail" />
</Button>
</Link>
Expand Down
4 changes: 2 additions & 2 deletions src/pages/GroupUserSolutions/GroupUserSolutions.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -183,7 +183,7 @@ const prepareTableColumnDescriptors = defaultMemoize((assignments, groupId, loca
{solution.permissionHints && solution.permissionHints.viewDetail && (
<Link to={SOLUTION_DETAIL_URI_FACTORY(solution.assignmentId, solution.id)}>
<Button size="xs" variant="secondary">
<SearchIcon gapRight />
<DetailIcon gapRight />
<FormattedMessage id="generic.detail" defaultMessage="Detail" />
</Button>
</Link>
Expand Down

0 comments on commit 6031830

Please sign in to comment.