X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fcomponents%2Frounds%2FItem.js;h=949eeb2f2ec910e99b94ba9bf0a01c67a5549ba3;hb=4c5a82cb876e96c72c50e8bc12bd8a43a9afe847;hp=b227e9334798ffe89dae08775a3098458b47a8b1;hpb=ccaa2cf99468fea81efdf28aaa3fc72a278a95f6;p=alttp.git diff --git a/resources/js/components/rounds/Item.js b/resources/js/components/rounds/Item.js index b227e93..949eeb2 100644 --- a/resources/js/components/rounds/Item.js +++ b/resources/js/components/rounds/Item.js @@ -1,54 +1,111 @@ import PropTypes from 'prop-types'; import React from 'react'; -import { Button } from 'react-bootstrap'; -import { withTranslation } from 'react-i18next'; +import { useTranslation } from 'react-i18next'; +import EditButton from './EditButton'; +import LockButton from './LockButton'; +import SeedButton from './SeedButton'; +import SeedCode from './SeedCode'; +import SeedRolledBy from './SeedRolledBy'; import List from '../results/List'; import ReportButton from '../results/ReportButton'; -import { isParticipant } from '../../helpers/permissions'; -import { findParticipant } from '../../helpers/Tournament'; -import { withUser } from '../../helpers/UserContext'; -import i18n from '../../i18n'; +import { mayEditRound, mayReportResult, isRunner } from '../../helpers/permissions'; +import { isComplete } from '../../helpers/Round'; +import { hasFinishedRound } from '../../helpers/User'; +import { useUser } from '../../hooks/user'; + +const getClassName = (round, tournament, user) => { + const classNames = ['round']; + if (round.locked) { + classNames.push('is-locked'); + } else { + classNames.push('is-unlocked'); + } + if (isComplete(tournament, round)) { + classNames.push('is-complete'); + } else { + classNames.push('is-incomplete'); + } + if (hasFinishedRound(user, round)) { + classNames.push('has-finished'); + } else if (isRunner(user, tournament)) { + classNames.push('has-not-finished'); + } + return classNames.join(' '); +}; const Item = ({ round, tournament, - user, -}) => -
  • -
    -

    {i18n.t('rounds.date', { date: new Date(round.created_at) })}

    - {round.seed ? -

    - -

    - : null} - {isParticipant(user, tournament) ? -

    - -

    +}) => { + const { t } = useTranslation(); + const { user } = useUser(); + +return
  • + {round.title ? +

    {round.title}

    : null} - - -
  • ; +
    +
    +

    + {round.number ? `#${round.number} ` : '#?'} + {t('rounds.date', { date: new Date(round.created_at) })} +

    +

    + {round.code && round.code.length ? + <> + +
    + + : null} + + {' '} + +

    + {mayReportResult(user, tournament) ? +

    + +

    + : null} + {tournament.type === 'open-async' && round.results && round.results.length ? +

    {t('rounds.numberOfResults', { count: round.results.length })}

    + : null} +
    + + {mayEditRound(user, tournament, round) ? + + : null} +
    +
    + +
    + ; +}; Item.propTypes = { round: PropTypes.shape({ + code: PropTypes.arrayOf(PropTypes.string), created_at: PropTypes.string, + game: PropTypes.string, + locked: PropTypes.bool, + number: PropTypes.number, + results: PropTypes.arrayOf(PropTypes.shape({ + })), seed: PropTypes.string, + title: PropTypes.string, }), tournament: PropTypes.shape({ participants: PropTypes.arrayOf(PropTypes.shape({ })), - }), - user: PropTypes.shape({ + type: PropTypes.string, }), }; -export default withTranslation()(withUser(Item)); +export default Item;