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;