ThreeStrandedButton.jsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import { withUnstatedContainers } from '../UnstatedUtils';
  5. import NavigationContainer from '../../services/NavigationContainer';
  6. const ThreeStrandedButton = (props) => {
  7. const { t, navigationContainer } = props;
  8. function threeStrandedButtonClickedHandler(viewType) {
  9. navigationContainer.setEditorMode(viewType);
  10. }
  11. return (
  12. <div className="btn-group grw-three-stranded-button" role="group " aria-label="three-stranded-button">
  13. <button type="button" className="btn btn-outline-primary view-button" onClick={() => { threeStrandedButtonClickedHandler('view') }}>
  14. <i className="icon-control-play icon-fw" />
  15. { t('view') }
  16. </button>
  17. <button type="button" className="btn btn-outline-primary edit-button" onClick={() => { threeStrandedButtonClickedHandler('edit') }}>
  18. <i className="icon-note icon-fw" />
  19. { t('Edit') }
  20. </button>
  21. <button type="button" className="btn btn-outline-primary hackmd-button" onClick={() => { threeStrandedButtonClickedHandler('hackmd') }}>
  22. <i className="fa fa-fw fa-file-text-o" />
  23. { t('hackmd.hack_md') }
  24. </button>
  25. </div>
  26. );
  27. };
  28. /**
  29. * Wrapper component for using unstated
  30. */
  31. const ThreeStrandedButtonWrapper = withUnstatedContainers(ThreeStrandedButton, [NavigationContainer]);
  32. ThreeStrandedButton.propTypes = {
  33. t: PropTypes.func.isRequired, // i18next
  34. navigationContainer: PropTypes.object.isRequired,
  35. onThreeStrandedButtonClicked: PropTypes.func,
  36. };
  37. export default withTranslation()(ThreeStrandedButtonWrapper);