Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

PollsPane.tsx 2.8KB

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