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.

PollsPane.js 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /* eslint-disable react-native/no-color-literals */
  2. import { useNavigation } from '@react-navigation/native';
  3. import React, { useEffect } from 'react';
  4. import { Platform } from 'react-native';
  5. import { useSelector } from 'react-redux';
  6. import JitsiScreen from '../../../base/modal/components/JitsiScreen';
  7. import Button from '../../../base/ui/components/native/Button';
  8. import { BUTTON_TYPES } from '../../../base/ui/constants.native';
  9. import { TabBarLabelCounter }
  10. from '../../../mobile/navigation/components/TabBarLabelCounter';
  11. import AbstractPollsPane from '../AbstractPollsPane';
  12. import type { AbstractProps } from '../AbstractPollsPane';
  13. import PollCreate from './PollCreate';
  14. import PollsList from './PollsList';
  15. import { chatStyles } from './styles';
  16. const PollsPane = (props: AbstractProps) => {
  17. const { createMode, onCreate, setCreateMode, t } = props;
  18. const navigation = useNavigation();
  19. const { isPollsTabFocused } = useSelector(state => state['features/chat']);
  20. const { nbUnreadPolls } = useSelector(state => state['features/polls']);
  21. useEffect(() => {
  22. const activeUnreadPollsNr = !isPollsTabFocused && nbUnreadPolls > 0;
  23. navigation.setOptions({
  24. // eslint-disable-next-line react/no-multi-comp
  25. tabBarLabel: () => (
  26. <TabBarLabelCounter
  27. activeUnreadNr = { activeUnreadPollsNr }
  28. isFocused = { isPollsTabFocused }
  29. label = { t('chat.tabs.polls') }
  30. nbUnread = { nbUnreadPolls } />
  31. )
  32. });
  33. }, [ isPollsTabFocused, nbUnreadPolls ]);
  34. const createPollButtonStyles = Platform.OS === 'android'
  35. ? chatStyles.createPollButtonAndroid : chatStyles.createPollButtonIos;
  36. return (
  37. <JitsiScreen
  38. contentContainerStyle = { chatStyles.pollPane }
  39. disableForcedKeyboardDismiss = { !createMode }
  40. hasTabNavigator = { true }
  41. style = { chatStyles.pollPaneContainer }>
  42. {
  43. createMode
  44. ? <PollCreate setCreateMode = { setCreateMode } />
  45. : <PollsList />
  46. }
  47. {
  48. !createMode && <Button
  49. accessibilityLabel = 'polls.create.create'
  50. labelKey = 'polls.create.create'
  51. onClick = { onCreate }
  52. style = { createPollButtonStyles }
  53. type = { BUTTON_TYPES.PRIMARY } />
  54. }
  55. </JitsiScreen>
  56. );
  57. };
  58. /*
  59. * We apply AbstractPollsPane to fill in the AbstractProps common
  60. * to both the web and native implementations.
  61. */
  62. // eslint-disable-next-line new-cap
  63. export default AbstractPollsPane(PollsPane);