import { Button, Col, Row } from 'react-bootstrap';
import { useTranslation } from 'react-i18next';
-import CrewMember from './CrewMember';
+import CrewList from './CrewList';
import Icon from '../common/Icon';
import { compareCrew } from '../../helpers/Crew';
import {
<Icon.MICROPHONE className="ms-3 me-2" title="" />
{t('episodes.commentary')}
</div>
- {commentators.map(c =>
- <CrewMember crew={c} key={c.id} />
- )}
+ <CrewList crews={commentators} episode={episode} />
{onApplyRestream && canApplyForEpisode(user, episode, 'commentary') ?
<div className="button-bar m-2">
<Button
<Icon.MOUSE className="ms-3 me-2" title="" />
{t('episodes.tracking')}
</div>
- {trackers.map(c =>
- <CrewMember crew={c} key={c.id} />
- )}
+ <CrewList crews={trackers} episode={episode} />
{onApplyRestream && canApplyForEpisode(user, episode, 'tracking') ?
<div className="button-bar m-2">
<Button
<Icon.MONITOR className="ms-3 me-2" title="" />
{t('episodes.setup')}
</div>
- {techies.map(c =>
- <CrewMember crew={c} key={c.id} />
- )}
+ <CrewList crews={techies} episode={episode} />
</Col>
: null}
</Row>;
--- /dev/null
+import PropTypes from 'prop-types';
+import React from 'react';
+
+import CrewMember from './CrewMember';
+
+const CrewList = ({ crews, episode }) => {
+ const byChannel = React.useMemo(() => {
+ const bc = {};
+ crews.forEach((crew) => {
+ if (!bc[crew.channel_id]) {
+ bc[crew.channel_id] = {
+ channel: episode.channels.find((c) => c.id === crew.channel_id),
+ crews: [],
+ };
+ }
+ bc[crew.channel_id].crews.push(crew);
+ });
+ return Object.entries(bc).map(([, value]) => value).filter(c => !!c.channel);
+ }, [crews, episode]);
+
+ return <div>
+ {byChannel.map(({ channel, crews }) => (
+ <fieldset className="crew-list" key={channel.id}>
+ {byChannel.length > 1 ?
+ <legend>{channel.title}</legend>
+ : null}
+ {crews.map((crew) => (
+ <CrewMember crew={crew} key={crew.id} />
+ ))}
+ </fieldset>
+ ))}
+ </div>;
+};
+
+CrewList.propTypes = {
+ crews: PropTypes.arrayOf(PropTypes.shape({
+ })),
+ episode: PropTypes.shape({
+ channels: PropTypes.arrayOf(PropTypes.shape({
+ })),
+ }),
+};
+
+export default CrewList;