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.

FullscreenButton.ts 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { connect } from 'react-redux';
  2. import { createToolbarEvent } from '../../../analytics/AnalyticsEvents';
  3. import { sendAnalytics } from '../../../analytics/functions';
  4. import { IReduxState } from '../../../app/types';
  5. import { isIosMobileBrowser } from '../../../base/environment/utils';
  6. import { translate } from '../../../base/i18n/functions';
  7. import { IconEnterFullscreen, IconExitFullscreen } from '../../../base/icons/svg';
  8. import AbstractButton, { IProps as AbstractButtonProps } from '../../../base/toolbox/components/AbstractButton';
  9. import { closeOverflowMenuIfOpen, setFullScreen } from '../../actions.web';
  10. interface IProps extends AbstractButtonProps {
  11. /**
  12. * Whether or not the app is currently in full screen.
  13. */
  14. _fullScreen?: boolean;
  15. }
  16. /**
  17. * Implementation of a button for toggling fullscreen state.
  18. */
  19. class FullscreenButton extends AbstractButton<IProps> {
  20. accessibilityLabel = 'toolbar.accessibilityLabel.enterFullScreen';
  21. toggledAccessibilityLabel = 'toolbar.accessibilityLabel.exitFullScreen';
  22. label = 'toolbar.enterFullScreen';
  23. toggledLabel = 'toolbar.exitFullScreen';
  24. tooltip = 'toolbar.enterFullScreen';
  25. toggledTooltip = 'toolbar.exitFullScreen';
  26. toggledIcon = IconExitFullscreen;
  27. icon = IconEnterFullscreen;
  28. /**
  29. * Indicates whether this button is in toggled state or not.
  30. *
  31. * @override
  32. * @protected
  33. * @returns {boolean}
  34. */
  35. _isToggled() {
  36. return this.props._fullScreen;
  37. }
  38. /**
  39. * Handles clicking the button, and toggles fullscreen.
  40. *
  41. * @private
  42. * @returns {void}
  43. */
  44. _handleClick() {
  45. const { dispatch, _fullScreen } = this.props;
  46. sendAnalytics(createToolbarEvent(
  47. 'toggle.fullscreen',
  48. {
  49. enable: !_fullScreen
  50. }));
  51. dispatch(closeOverflowMenuIfOpen());
  52. dispatch(setFullScreen(!_fullScreen));
  53. }
  54. }
  55. /**
  56. * Function that maps parts of Redux state tree into component props.
  57. *
  58. * @param {Object} state - Redux state.
  59. * @returns {Object}
  60. */
  61. const mapStateToProps = (state: IReduxState) => {
  62. return {
  63. _fullScreen: state['features/toolbox'].fullScreen,
  64. visible: !isIosMobileBrowser()
  65. };
  66. };
  67. export default translate(connect(mapStateToProps)(FullscreenButton));