mirror of
https://github.com/mastodon/mastodon.git
synced 2026-07-23 11:21:09 -05:00
Some checks failed
Check i18n / check-i18n (push) Waiting to run
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (ruby) (push) Waiting to run
Check formatting / lint (push) Waiting to run
Ruby Linting / lint (push) Waiting to run
Historical data migration test / test (14-alpine) (push) Waiting to run
Historical data migration test / test (15-alpine) (push) Waiting to run
Historical data migration test / test (16-alpine) (push) Waiting to run
Historical data migration test / test (17-alpine) (push) Waiting to run
Ruby Testing / build (production) (push) Waiting to run
Ruby Testing / build (test) (push) Waiting to run
Ruby Testing / test (.ruby-version) (push) Blocked by required conditions
Ruby Testing / test (3.2) (push) Blocked by required conditions
Ruby Testing / Libvips tests (.ruby-version) (push) Blocked by required conditions
Ruby Testing / Libvips tests (3.2) (push) Blocked by required conditions
Ruby Testing / End to End testing (.ruby-version) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:8.10.2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, opensearchproject/opensearch:2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.2, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Crowdin / Upload translations / upload-translations (push) Has been cancelled
CSS Linting / lint (push) Has been cancelled
JavaScript Linting / lint (push) Has been cancelled
JavaScript Testing / test (push) Has been cancelled
45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import { useCallback } from 'react';
|
|
|
|
import { FormattedMessage } from 'react-intl';
|
|
|
|
import ArrowBackIcon from '@/material-icons/400-24px/arrow_back.svg?react';
|
|
import { Icon } from 'mastodon/components/icon';
|
|
import { ButtonInTabsBar } from 'mastodon/features/ui/util/columns_context';
|
|
|
|
import { useAppHistory } from './router';
|
|
|
|
type OnClickCallback = () => void;
|
|
|
|
function useHandleClick(onClick?: OnClickCallback) {
|
|
const history = useAppHistory();
|
|
|
|
return useCallback(() => {
|
|
if (onClick) {
|
|
onClick();
|
|
} else if (history.location.state?.fromMastodon) {
|
|
history.goBack();
|
|
} else {
|
|
history.push('/');
|
|
}
|
|
}, [history, onClick]);
|
|
}
|
|
|
|
export const ColumnBackButton: React.FC<{ onClick?: OnClickCallback }> = ({
|
|
onClick,
|
|
}) => {
|
|
const handleClick = useHandleClick(onClick);
|
|
|
|
const component = (
|
|
<button onClick={handleClick} className='column-back-button'>
|
|
<Icon
|
|
id='chevron-left'
|
|
icon={ArrowBackIcon}
|
|
className='column-back-button__icon'
|
|
/>
|
|
<FormattedMessage id='column_back_button.label' defaultMessage='Back' />
|
|
</button>
|
|
);
|
|
|
|
return <ButtonInTabsBar>{component}</ButtonInTabsBar>;
|
|
};
|