You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ParticipantsPane.js 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // @flow
  2. import React, { useCallback } from 'react';
  3. import { useTranslation } from 'react-i18next';
  4. import { useDispatch, useSelector } from 'react-redux';
  5. import { ThemeProvider } from 'styled-components';
  6. import { openDialog } from '../../base/dialog';
  7. import { isLocalParticipantModerator } from '../../base/participants';
  8. import { MuteEveryoneDialog } from '../../video-menu/components/';
  9. import { close } from '../actions';
  10. import { classList, getParticipantsPaneOpen } from '../functions';
  11. import theme from '../theme.json';
  12. import { LobbyParticipantList } from './LobbyParticipantList';
  13. import { MeetingParticipantList } from './MeetingParticipantList';
  14. import {
  15. AntiCollapse,
  16. Close,
  17. Container,
  18. Footer,
  19. FooterButton,
  20. Header
  21. } from './styled';
  22. export const ParticipantsPane = () => {
  23. const dispatch = useDispatch();
  24. const paneOpen = useSelector(getParticipantsPaneOpen);
  25. const isLocalModerator = useSelector(isLocalParticipantModerator);
  26. const { t } = useTranslation();
  27. const closePane = useCallback(() => dispatch(close(), [ dispatch ]));
  28. const muteAll = useCallback(() => dispatch(openDialog(MuteEveryoneDialog)), [ dispatch ]);
  29. return (
  30. <ThemeProvider theme = { theme }>
  31. <div
  32. className = { classList(
  33. 'participants_pane',
  34. !paneOpen && 'participants_pane--closed'
  35. ) }>
  36. <div className = 'participants_pane-content'>
  37. <Header>
  38. <Close onClick = { closePane } />
  39. </Header>
  40. <Container>
  41. <LobbyParticipantList />
  42. <AntiCollapse />
  43. <MeetingParticipantList />
  44. </Container>
  45. {isLocalModerator && (
  46. <Footer>
  47. <FooterButton onClick = { muteAll }>
  48. {t('participantsPane.actions.muteAll')}
  49. </FooterButton>
  50. </Footer>
  51. )}
  52. </div>
  53. </div>
  54. </ThemeProvider>
  55. );
  56. };