DrawerToggler.jsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import React, { useCallback } 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 DrawerToggler = (props) => {
  7. const { navigationContainer } = props;
  8. const clickHandler = useCallback(() => {
  9. navigationContainer.toggleDrawer();
  10. }, [navigationContainer]);
  11. const iconClass = props.iconClass || 'icon-menu';
  12. return (
  13. <button
  14. className="grw-drawer-toggler btn btn-secondary btn-xl"
  15. type="button"
  16. aria-expanded="false"
  17. aria-label="Toggle navigation"
  18. onClick={clickHandler}
  19. >
  20. <i className={iconClass}></i>
  21. </button>
  22. );
  23. };
  24. /**
  25. * Wrapper component for using unstated
  26. */
  27. const DrawerTogglerWrapper = withUnstatedContainers(DrawerToggler, [NavigationContainer]);
  28. DrawerToggler.propTypes = {
  29. t: PropTypes.func.isRequired, // i18next
  30. navigationContainer: PropTypes.instanceOf(NavigationContainer).isRequired,
  31. iconClass: PropTypes.string,
  32. };
  33. export default withTranslation()(DrawerTogglerWrapper);