column_back_button.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { useCallback } from 'react';
  2. import { FormattedMessage } from 'react-intl';
  3. import ArrowBackIcon from '@/material-icons/400-24px/arrow_back.svg?react';
  4. import { Icon } from 'mastodon/components/icon';
  5. import { ButtonInTabsBar } from 'mastodon/features/ui/util/columns_context';
  6. import { useAppHistory } from './router';
  7. type OnClickCallback = () => void;
  8. function useHandleClick(onClick?: OnClickCallback) {
  9. const history = useAppHistory();
  10. return useCallback(() => {
  11. if (onClick) {
  12. onClick();
  13. } else if (history.location.state?.fromMastodon) {
  14. history.goBack();
  15. } else {
  16. history.push('/');
  17. }
  18. }, [history, onClick]);
  19. }
  20. export const ColumnBackButton: React.FC<{ onClick: OnClickCallback }> = ({
  21. onClick,
  22. }) => {
  23. const handleClick = useHandleClick(onClick);
  24. const component = (
  25. <button onClick={handleClick} className='column-back-button'>
  26. <Icon
  27. id='chevron-left'
  28. icon={ArrowBackIcon}
  29. className='column-back-button__icon'
  30. />
  31. <FormattedMessage id='column_back_button.label' defaultMessage='Back' />
  32. </button>
  33. );
  34. return <ButtonInTabsBar>{component}</ButtonInTabsBar>;
  35. };