1 import moment from 'moment';
2 import PropTypes from 'prop-types';
3 import React from 'react';
4 import { ListGroup } from 'react-bootstrap';
5 import { Trans, withTranslation } from 'react-i18next';
7 import Icon from '../common/Icon';
8 import Spoiler from '../common/Spoiler';
9 import { formatTime } from '../../helpers/Result';
10 import i18n from '../../i18n';
12 const getEntryDate = entry => {
13 const dateStr = moment(entry.created_at).fromNow();
15 ? `${entry.user.username} ${dateStr}`
19 const getEntryResultTime = entry => {
20 if (!entry || !entry.details || !entry.details.result) return 'ERROR';
21 const result = entry.details.result;
22 if (result.forfeit) return 'DNF XX';
23 return formatTime(result);
26 const getEntryDescription = entry => {
28 case 'result.report': {
29 const time = getEntryResultTime(entry);
30 return <Trans i18nKey={`protocol.description.${entry.type}`}>
31 <Spoiler>{{time}}</Spoiler>,
36 case 'tournament.lock':
38 `protocol.description.${entry.type}`,
42 return i18n.t('protocol.description.unknown', entry);
46 const getEntryIcon = entry => {
49 return <Icon.PROTOCOL />;
53 const Item = ({ entry }) =>
54 <ListGroup.Item className="d-flex align-items-center">
55 <div className="pe-3 text-muted">
60 {getEntryDescription(entry)}
63 className="text-muted"
64 title={moment(entry.created_at).format('LLLL')}
72 entry: PropTypes.shape({
73 created_at: PropTypes.string,
81 export default withTranslation()(Item);