X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fcomponents%2Fepisodes%2FCrew.js;h=d0698419c35ae2d12dcda568b17d94430b4de900;hb=4c5a82cb876e96c72c50e8bc12bd8a43a9afe847;hp=610454e17a6ae164cf8535c0ac97fa3e04aeb09d;hpb=01c03862db4c9d7da371fb3500aab566d36366ff;p=alttp.git diff --git a/resources/js/components/episodes/Crew.js b/resources/js/components/episodes/Crew.js index 610454e..d069841 100644 --- a/resources/js/components/episodes/Crew.js +++ b/resources/js/components/episodes/Crew.js @@ -1,48 +1,127 @@ import PropTypes from 'prop-types'; import React from 'react'; -import { Col, Row } from 'react-bootstrap'; +import { Button, Col, Row } from 'react-bootstrap'; import { useTranslation } from 'react-i18next'; import CrewMember from './CrewMember'; +import Icon from '../common/Icon'; import { compareCrew } from '../../helpers/Crew'; +import { + getSGLanguages, + getSGSignupLink, + hasPassed, + hasSGRestream, +} from '../../helpers/Episode'; +import { canApplyForEpisode } from '../../helpers/permissions'; +import { useUser } from '../../hooks/user'; -const Crew = ({ crew }) => { +const Crew = ({ episode, onApply }) => { const { t } = useTranslation(); + const { user } = useUser(); const commentators = React.useMemo(() => - crew.filter(c => c.role === 'commentary').sort(compareCrew) - , [crew]); + episode.crew.filter(c => c.role === 'commentary').sort(compareCrew) + , [episode]); const trackers = React.useMemo(() => - crew.filter(c => c.role === 'tracking').sort(compareCrew) - , [crew]); + episode.crew.filter(c => c.role === 'tracking').sort(compareCrew) + , [episode]); const techies = React.useMemo(() => - crew.filter(c => c.role === 'setup').sort(compareCrew) - , [crew]); + episode.crew.filter(c => c.role === 'setup').sort(compareCrew) + , [episode]); + + const sgLanguages = React.useMemo(() => + getSGLanguages(episode) + , [episode]); + + const showCommentators = React.useMemo(() => + commentators.length || (!hasPassed(episode) && ( + canApplyForEpisode(user, episode, 'commentary') || + hasSGRestream(episode) + )) + , [commentators, episode, user]); + + const showTracker = React.useMemo(() => + trackers.length || (!hasPassed(episode) && ( + canApplyForEpisode(user, episode, 'tracking') || + hasSGRestream(episode) + )) + , [episode, trackers, user]); return - {commentators.length ? - -
+ {showCommentators ? + +
+ {t('episodes.commentary')}
{commentators.map(c => )} + {onApply && canApplyForEpisode(user, episode, 'commentary') ? +
+ +
+ : null} + {hasSGRestream(episode) ? +
+ {sgLanguages.map(lang => + + )} +
+ : null} : null} - {trackers.length ? - -
+ {showTracker ? + +
+ {t('episodes.tracking')}
{trackers.map(c => )} + {onApply && canApplyForEpisode(user, episode, 'tracking') ? +
+ +
+ : null} + {hasSGRestream(episode) ? +
+ {sgLanguages.map(lang => + + )} +
+ : null} : null} {techies.length ? - -
+ +
+ {t('episodes.setup')}
{techies.map(c => @@ -54,8 +133,14 @@ const Crew = ({ crew }) => { }; Crew.propTypes = { - crew: PropTypes.arrayOf(PropTypes.shape({ - })), + episode: PropTypes.shape({ + channels: PropTypes.arrayOf(PropTypes.shape({ + id: PropTypes.number, + })), + crew: PropTypes.arrayOf(PropTypes.shape({ + })), + }), + onApply: PropTypes.func, }; export default Crew;