X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fcomponents%2Fprotocol%2FItem.js;h=00da2ef472c27afb8b8be1c55de2c9cd9e361e0a;hb=c8bcea2a3093707b14fd655f3b284b2d245b483f;hp=6127a92958ec1b4769442c5546efe903212a1391;hpb=c30ac282dde3d746d6a7762ee18c70b4416500b5;p=alttp.git
diff --git a/resources/js/components/protocol/Item.js b/resources/js/components/protocol/Item.js
index 6127a92..00da2ef 100644
--- a/resources/js/components/protocol/Item.js
+++ b/resources/js/components/protocol/Item.js
@@ -2,9 +2,12 @@ import moment from 'moment';
import PropTypes from 'prop-types';
import React from 'react';
import { ListGroup } from 'react-bootstrap';
-import { withTranslation } from 'react-i18next';
+import { Trans, withTranslation } from 'react-i18next';
import Icon from '../common/Icon';
+import Spoiler from '../common/Spoiler';
+import { formatTime } from '../../helpers/Result';
+import { getUserName } from '../../helpers/User';
import i18n from '../../i18n';
const getEntryDate = entry => {
@@ -14,9 +17,73 @@ const getEntryDate = entry => {
: dateStr;
};
+const getEntryDetailsUsername = entry => {
+ if (!entry || !entry.details || !entry.details.user) return 'Anonymous';
+ return getUserName(entry.details.user);
+};
+
+const getEntryRoundNumber = entry =>
+ (entry && entry.details && entry.details.round && entry.details.round.number) || '?';
+
+const getEntryResultComment = entry => {
+ if (!entry || !entry.details || !entry.details.result || !entry.details.result.comment) {
+ return '';
+ }
+ return entry.details.result.comment;
+};
+
+const getEntryResultTime = entry => {
+ if (!entry || !entry.details || !entry.details.result) return 'ERROR';
+ const result = entry.details.result;
+ if (result.forfeit) return 'DNF XX';
+ return formatTime(result);
+};
+
const getEntryDescription = entry => {
switch (entry.type) {
+ case 'application.accepted':
+ case 'application.received':
+ case 'application.rejected':
+ return i18n.t(
+ `protocol.description.${entry.type}`,
+ {
+ ...entry,
+ username: getEntryDetailsUsername(entry),
+ },
+ );
+ case 'result.comment': {
+ const comment = getEntryResultComment(entry);
+ const number = getEntryRoundNumber(entry);
+ return
+ {{number}}
+ {{comment}},
+ ;
+ }
+ case 'result.report': {
+ const number = getEntryRoundNumber(entry);
+ const time = getEntryResultTime(entry);
+ return
+ {{number}}
+ {{time}},
+ ;
+ }
case 'round.create':
+ case 'round.edit':
+ case 'round.lock':
+ case 'round.seed':
+ case 'round.unlock':
+ return i18n.t(
+ `protocol.description.${entry.type}`,
+ {
+ ...entry,
+ number: getEntryRoundNumber(entry),
+ },
+ );
+ case 'tournament.close':
+ case 'tournament.discord':
+ case 'tournament.lock':
+ case 'tournament.open':
+ case 'tournament.unlock':
return i18n.t(
`protocol.description.${entry.type}`,
entry,
@@ -28,6 +95,20 @@ const getEntryDescription = entry => {
const getEntryIcon = entry => {
switch (entry.type) {
+ case 'result.report':
+ return ;
+ case 'round.create':
+ return ;
+ case 'round.lock':
+ case 'tournament.close':
+ case 'tournament.lock':
+ return ;
+ case 'round.unlock':
+ case 'tournament.open':
+ case 'tournament.unlock':
+ return ;
+ case 'tournament.discord':
+ return ;
default:
return ;
}