Convert <Button> to Typescript (#27492)
				
					
				
			This commit is contained in:
		
							parent
							
								
									ab0fb81479
								
							
						
					
					
						commit
						9d45a444f9
					
				@ -1,7 +1,7 @@
 | 
				
			|||||||
import { render, fireEvent, screen } from '@testing-library/react';
 | 
					import { render, fireEvent, screen } from '@testing-library/react';
 | 
				
			||||||
import renderer from 'react-test-renderer';
 | 
					import renderer from 'react-test-renderer';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Button from '../button';
 | 
					import { Button } from '../button';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('<Button />', () => {
 | 
					describe('<Button />', () => {
 | 
				
			||||||
  it('renders a button element', () => {
 | 
					  it('renders a button element', () => {
 | 
				
			||||||
 | 
				
			|||||||
@ -15,7 +15,7 @@ import { VerifiedBadge } from 'mastodon/components/verified_badge';
 | 
				
			|||||||
import { me } from '../initial_state';
 | 
					import { me } from '../initial_state';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { Avatar } from './avatar';
 | 
					import { Avatar } from './avatar';
 | 
				
			||||||
import Button from './button';
 | 
					import { Button } from './button';
 | 
				
			||||||
import { FollowersCounter } from './counters';
 | 
					import { FollowersCounter } from './counters';
 | 
				
			||||||
import { DisplayName } from './display_name';
 | 
					import { DisplayName } from './display_name';
 | 
				
			||||||
import { IconButton } from './icon_button';
 | 
					import { IconButton } from './icon_button';
 | 
				
			||||||
 | 
				
			|||||||
@ -1,58 +0,0 @@
 | 
				
			|||||||
import PropTypes from 'prop-types';
 | 
					 | 
				
			||||||
import { PureComponent } from 'react';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import classNames from 'classnames';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default class Button extends PureComponent {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  static propTypes = {
 | 
					 | 
				
			||||||
    text: PropTypes.node,
 | 
					 | 
				
			||||||
    type: PropTypes.string,
 | 
					 | 
				
			||||||
    onClick: PropTypes.func,
 | 
					 | 
				
			||||||
    disabled: PropTypes.bool,
 | 
					 | 
				
			||||||
    block: PropTypes.bool,
 | 
					 | 
				
			||||||
    secondary: PropTypes.bool,
 | 
					 | 
				
			||||||
    className: PropTypes.string,
 | 
					 | 
				
			||||||
    title: PropTypes.string,
 | 
					 | 
				
			||||||
    children: PropTypes.node,
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  static defaultProps = {
 | 
					 | 
				
			||||||
    type: 'button',
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  handleClick = (e) => {
 | 
					 | 
				
			||||||
    if (!this.props.disabled && this.props.onClick) {
 | 
					 | 
				
			||||||
      this.props.onClick(e);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  setRef = (c) => {
 | 
					 | 
				
			||||||
    this.node = c;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  focus() {
 | 
					 | 
				
			||||||
    this.node.focus();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  render () {
 | 
					 | 
				
			||||||
    const className = classNames('button', this.props.className, {
 | 
					 | 
				
			||||||
      'button-secondary': this.props.secondary,
 | 
					 | 
				
			||||||
      'button--block': this.props.block,
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return (
 | 
					 | 
				
			||||||
      <button
 | 
					 | 
				
			||||||
        className={className}
 | 
					 | 
				
			||||||
        disabled={this.props.disabled}
 | 
					 | 
				
			||||||
        onClick={this.handleClick}
 | 
					 | 
				
			||||||
        ref={this.setRef}
 | 
					 | 
				
			||||||
        title={this.props.title}
 | 
					 | 
				
			||||||
        type={this.props.type}
 | 
					 | 
				
			||||||
      >
 | 
					 | 
				
			||||||
        {this.props.text || this.props.children}
 | 
					 | 
				
			||||||
      </button>
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										58
									
								
								app/javascript/mastodon/components/button.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								app/javascript/mastodon/components/button.tsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					import { useCallback } from 'react';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import classNames from 'classnames';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface BaseProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
 | 
				
			||||||
 | 
					  block?: boolean;
 | 
				
			||||||
 | 
					  secondary?: boolean;
 | 
				
			||||||
 | 
					  text?: JSX.Element;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface PropsWithChildren extends BaseProps {
 | 
				
			||||||
 | 
					  text?: never;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface PropsWithText extends BaseProps {
 | 
				
			||||||
 | 
					  text: JSX.Element;
 | 
				
			||||||
 | 
					  children: never;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Props = PropsWithText | PropsWithChildren;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const Button: React.FC<Props> = ({
 | 
				
			||||||
 | 
					  text,
 | 
				
			||||||
 | 
					  type = 'button',
 | 
				
			||||||
 | 
					  onClick,
 | 
				
			||||||
 | 
					  disabled,
 | 
				
			||||||
 | 
					  block,
 | 
				
			||||||
 | 
					  secondary,
 | 
				
			||||||
 | 
					  className,
 | 
				
			||||||
 | 
					  title,
 | 
				
			||||||
 | 
					  children,
 | 
				
			||||||
 | 
					  ...props
 | 
				
			||||||
 | 
					}) => {
 | 
				
			||||||
 | 
					  const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(
 | 
				
			||||||
 | 
					    (e) => {
 | 
				
			||||||
 | 
					      if (!disabled && onClick) {
 | 
				
			||||||
 | 
					        onClick(e);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    [disabled, onClick],
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <button
 | 
				
			||||||
 | 
					      className={classNames('button', className, {
 | 
				
			||||||
 | 
					        'button-secondary': secondary,
 | 
				
			||||||
 | 
					        'button--block': block,
 | 
				
			||||||
 | 
					      })}
 | 
				
			||||||
 | 
					      disabled={disabled}
 | 
				
			||||||
 | 
					      onClick={handleClick}
 | 
				
			||||||
 | 
					      title={title}
 | 
				
			||||||
 | 
					      type={type}
 | 
				
			||||||
 | 
					      {...props}
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      {text ?? children}
 | 
				
			||||||
 | 
					    </button>
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -11,7 +11,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { Avatar } from 'mastodon/components/avatar';
 | 
					import { Avatar } from 'mastodon/components/avatar';
 | 
				
			||||||
import { Badge, AutomatedBadge, GroupBadge } from 'mastodon/components/badge';
 | 
					import { Badge, AutomatedBadge, GroupBadge } from 'mastodon/components/badge';
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
import { FollowersCounter, FollowingCounter, StatusesCounter } from 'mastodon/components/counters';
 | 
					import { FollowersCounter, FollowingCounter, StatusesCounter } from 'mastodon/components/counters';
 | 
				
			||||||
import { Icon }  from 'mastodon/components/icon';
 | 
					import { Icon }  from 'mastodon/components/icon';
 | 
				
			||||||
import { IconButton } from 'mastodon/components/icon_button';
 | 
					import { IconButton } from 'mastodon/components/icon_button';
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@ import { FormattedMessage } from 'react-intl';
 | 
				
			|||||||
import { connect } from 'react-redux';
 | 
					import { connect } from 'react-redux';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { revealAccount } from 'mastodon/actions/accounts';
 | 
					import { revealAccount } from 'mastodon/actions/accounts';
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
import { domain } from 'mastodon/initial_state';
 | 
					import { domain } from 'mastodon/initial_state';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mapDispatchToProps = (dispatch, { accountId }) => ({
 | 
					const mapDispatchToProps = (dispatch, { accountId }) => ({
 | 
				
			||||||
 | 
				
			|||||||
@ -14,7 +14,7 @@ import { WithOptionalRouterPropTypes, withOptionalRouter } from 'mastodon/utils/
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import AutosuggestInput from '../../../components/autosuggest_input';
 | 
					import AutosuggestInput from '../../../components/autosuggest_input';
 | 
				
			||||||
import AutosuggestTextarea from '../../../components/autosuggest_textarea';
 | 
					import AutosuggestTextarea from '../../../components/autosuggest_textarea';
 | 
				
			||||||
import Button from '../../../components/button';
 | 
					import { Button } from '../../../components/button';
 | 
				
			||||||
import EmojiPickerDropdown from '../containers/emoji_picker_dropdown_container';
 | 
					import EmojiPickerDropdown from '../containers/emoji_picker_dropdown_container';
 | 
				
			||||||
import LanguageDropdown from '../containers/language_dropdown_container';
 | 
					import LanguageDropdown from '../containers/language_dropdown_container';
 | 
				
			||||||
import PollButtonContainer from '../containers/poll_button_container';
 | 
					import PollButtonContainer from '../containers/poll_button_container';
 | 
				
			||||||
 | 
				
			|||||||
@ -17,7 +17,7 @@ import {
 | 
				
			|||||||
} from 'mastodon/actions/accounts';
 | 
					} from 'mastodon/actions/accounts';
 | 
				
			||||||
import { openModal } from 'mastodon/actions/modal';
 | 
					import { openModal } from 'mastodon/actions/modal';
 | 
				
			||||||
import { Avatar } from 'mastodon/components/avatar';
 | 
					import { Avatar } from 'mastodon/components/avatar';
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
import { DisplayName } from 'mastodon/components/display_name';
 | 
					import { DisplayName } from 'mastodon/components/display_name';
 | 
				
			||||||
import { ShortNumber } from 'mastodon/components/short_number';
 | 
					import { ShortNumber } from 'mastodon/components/short_number';
 | 
				
			||||||
import { autoPlayGif, me, unfollowModal } from 'mastodon/initial_state';
 | 
					import { autoPlayGif, me, unfollowModal } from 'mastodon/initial_state';
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@ import { FormattedMessage } from 'react-intl';
 | 
				
			|||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
					import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
				
			||||||
import { connect } from 'react-redux';
 | 
					import { connect } from 'react-redux';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
import { toServerSideType } from 'mastodon/utils/filters';
 | 
					import { toServerSideType } from 'mastodon/utils/filters';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mapStateToProps = (state, { filterId }) => ({
 | 
					const mapStateToProps = (state, { filterId }) => ({
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
					import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
import { ShortNumber } from 'mastodon/components/short_number';
 | 
					import { ShortNumber } from 'mastodon/components/short_number';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const messages = defineMessages({
 | 
					const messages = defineMessages({
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,7 @@ import { throttle, escapeRegExp } from 'lodash';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { openModal, closeModal } from 'mastodon/actions/modal';
 | 
					import { openModal, closeModal } from 'mastodon/actions/modal';
 | 
				
			||||||
import api from 'mastodon/api';
 | 
					import api from 'mastodon/api';
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
import { Icon }  from 'mastodon/components/icon';
 | 
					import { Icon }  from 'mastodon/components/icon';
 | 
				
			||||||
import { registrationsOpen, sso_redirect } from 'mastodon/initial_state';
 | 
					import { registrationsOpen, sso_redirect } from 'mastodon/initial_state';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@ import { defineMessages, injectIntl } from 'react-intl';
 | 
				
			|||||||
import { connect } from 'react-redux';
 | 
					import { connect } from 'react-redux';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { changeListEditorTitle, submitListEditor } from 'mastodon/actions/lists';
 | 
					import { changeListEditorTitle, submitListEditor } from 'mastodon/actions/lists';
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const messages = defineMessages({
 | 
					const messages = defineMessages({
 | 
				
			||||||
  label: { id: 'lists.new.title_placeholder', defaultMessage: 'New list title' },
 | 
					  label: { id: 'lists.new.title_placeholder', defaultMessage: 'New list title' },
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@ import { connect } from 'react-redux';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { requestBrowserPermission } from 'mastodon/actions/notifications';
 | 
					import { requestBrowserPermission } from 'mastodon/actions/notifications';
 | 
				
			||||||
import { changeSetting } from 'mastodon/actions/settings';
 | 
					import { changeSetting } from 'mastodon/actions/settings';
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
import { Icon }  from 'mastodon/components/icon';
 | 
					import { Icon }  from 'mastodon/components/icon';
 | 
				
			||||||
import { IconButton } from 'mastodon/components/icon_button';
 | 
					import { IconButton } from 'mastodon/components/icon_button';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@ import { List as ImmutableList } from 'immutable';
 | 
				
			|||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
					import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
				
			||||||
import { connect } from 'react-redux';
 | 
					import { connect } from 'react-redux';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Option from './components/option';
 | 
					import Option from './components/option';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,7 @@ import { createSelector } from 'reselect';
 | 
				
			|||||||
import Toggle from 'react-toggle';
 | 
					import Toggle from 'react-toggle';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { fetchAccount } from 'mastodon/actions/accounts';
 | 
					import { fetchAccount } from 'mastodon/actions/accounts';
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
import { useAppDispatch, useAppSelector } from 'mastodon/store';
 | 
					import { useAppDispatch, useAppSelector } from 'mastodon/store';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const messages = defineMessages({
 | 
					const messages = defineMessages({
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@ import { FormattedMessage } from 'react-intl';
 | 
				
			|||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
					import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
				
			||||||
import { connect } from 'react-redux';
 | 
					import { connect } from 'react-redux';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Option from './components/option';
 | 
					import Option from './components/option';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@ import { OrderedSet } from 'immutable';
 | 
				
			|||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
					import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
				
			||||||
import { connect } from 'react-redux';
 | 
					import { connect } from 'react-redux';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
 | 
					import { LoadingIndicator } from 'mastodon/components/loading_indicator';
 | 
				
			||||||
import StatusCheckBox from 'mastodon/features/report/containers/status_check_box_container';
 | 
					import StatusCheckBox from 'mastodon/features/report/containers/status_check_box_container';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,7 @@ import {
 | 
				
			|||||||
  muteAccount,
 | 
					  muteAccount,
 | 
				
			||||||
  blockAccount,
 | 
					  blockAccount,
 | 
				
			||||||
} from 'mastodon/actions/accounts';
 | 
					} from 'mastodon/actions/accounts';
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mapStateToProps = () => ({});
 | 
					const mapStateToProps = () => ({});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,7 @@ import { connect } from 'react-redux';
 | 
				
			|||||||
import { createSelector } from 'reselect';
 | 
					import { createSelector } from 'reselect';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { followAccount } from 'mastodon/actions/accounts';
 | 
					import { followAccount } from 'mastodon/actions/accounts';
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
import { IconButton } from 'mastodon/components/icon_button';
 | 
					import { IconButton } from 'mastodon/components/icon_button';
 | 
				
			||||||
import Option from 'mastodon/features/report/components/option';
 | 
					import Option from 'mastodon/features/report/components/option';
 | 
				
			||||||
import { languages as preloadedLanguages } from 'mastodon/initial_state';
 | 
					import { languages as preloadedLanguages } from 'mastodon/initial_state';
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@ import { connect } from 'react-redux';
 | 
				
			|||||||
import { blockAccount } from '../../../actions/accounts';
 | 
					import { blockAccount } from '../../../actions/accounts';
 | 
				
			||||||
import { closeModal } from '../../../actions/modal';
 | 
					import { closeModal } from '../../../actions/modal';
 | 
				
			||||||
import { initReport } from '../../../actions/reports';
 | 
					import { initReport } from '../../../actions/reports';
 | 
				
			||||||
import Button from '../../../components/button';
 | 
					import { Button } from '../../../components/button';
 | 
				
			||||||
import { makeGetAccount } from '../../../selectors';
 | 
					import { makeGetAccount } from '../../../selectors';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const makeMapStateToProps = () => {
 | 
					const makeMapStateToProps = () => {
 | 
				
			||||||
@ -51,10 +51,6 @@ class BlockModal extends PureComponent {
 | 
				
			|||||||
    intl: PropTypes.object.isRequired,
 | 
					    intl: PropTypes.object.isRequired,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  componentDidMount() {
 | 
					 | 
				
			||||||
    this.button.focus();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  handleClick = () => {
 | 
					  handleClick = () => {
 | 
				
			||||||
    this.props.onClose();
 | 
					    this.props.onClose();
 | 
				
			||||||
    this.props.onConfirm(this.props.account);
 | 
					    this.props.onConfirm(this.props.account);
 | 
				
			||||||
@ -69,10 +65,6 @@ class BlockModal extends PureComponent {
 | 
				
			|||||||
    this.props.onClose();
 | 
					    this.props.onClose();
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setRef = (c) => {
 | 
					 | 
				
			||||||
    this.button = c;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  render () {
 | 
					  render () {
 | 
				
			||||||
    const { account } = this.props;
 | 
					    const { account } = this.props;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -95,7 +87,7 @@ class BlockModal extends PureComponent {
 | 
				
			|||||||
          <Button onClick={this.handleSecondary} className='confirmation-modal__secondary-button'>
 | 
					          <Button onClick={this.handleSecondary} className='confirmation-modal__secondary-button'>
 | 
				
			||||||
            <FormattedMessage id='confirmations.block.block_and_report' defaultMessage='Block & Report' />
 | 
					            <FormattedMessage id='confirmations.block.block_and_report' defaultMessage='Block & Report' />
 | 
				
			||||||
          </Button>
 | 
					          </Button>
 | 
				
			||||||
          <Button onClick={this.handleClick} ref={this.setRef}>
 | 
					          <Button onClick={this.handleClick} autoFocus>
 | 
				
			||||||
            <FormattedMessage id='confirmations.block.confirm' defaultMessage='Block' />
 | 
					            <FormattedMessage id='confirmations.block.confirm' defaultMessage='Block' />
 | 
				
			||||||
          </Button>
 | 
					          </Button>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -16,7 +16,7 @@ import PrivacyDropdown from 'mastodon/features/compose/components/privacy_dropdo
 | 
				
			|||||||
import { WithRouterPropTypes } from 'mastodon/utils/react_router';
 | 
					import { WithRouterPropTypes } from 'mastodon/utils/react_router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { Avatar } from '../../../components/avatar';
 | 
					import { Avatar } from '../../../components/avatar';
 | 
				
			||||||
import Button from '../../../components/button';
 | 
					import { Button } from '../../../components/button';
 | 
				
			||||||
import { DisplayName } from '../../../components/display_name';
 | 
					import { DisplayName } from '../../../components/display_name';
 | 
				
			||||||
import { RelativeTimestamp } from '../../../components/relative_timestamp';
 | 
					import { RelativeTimestamp } from '../../../components/relative_timestamp';
 | 
				
			||||||
import StatusContent from '../../../components/status_content';
 | 
					import StatusContent from '../../../components/status_content';
 | 
				
			||||||
@ -55,10 +55,6 @@ class BoostModal extends ImmutablePureComponent {
 | 
				
			|||||||
    ...WithRouterPropTypes,
 | 
					    ...WithRouterPropTypes,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  componentDidMount() {
 | 
					 | 
				
			||||||
    this.button.focus();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  handleReblog = () => {
 | 
					  handleReblog = () => {
 | 
				
			||||||
    this.props.onReblog(this.props.status, this.props.privacy);
 | 
					    this.props.onReblog(this.props.status, this.props.privacy);
 | 
				
			||||||
    this.props.onClose();
 | 
					    this.props.onClose();
 | 
				
			||||||
@ -76,10 +72,6 @@ class BoostModal extends ImmutablePureComponent {
 | 
				
			|||||||
    return document.getElementsByClassName('modal-root__container')[0];
 | 
					    return document.getElementsByClassName('modal-root__container')[0];
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setRef = (c) => {
 | 
					 | 
				
			||||||
    this.button = c;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  render () {
 | 
					  render () {
 | 
				
			||||||
    const { status, privacy, intl } = this.props;
 | 
					    const { status, privacy, intl } = this.props;
 | 
				
			||||||
    const buttonText = status.get('reblogged') ? messages.cancel_reblog : messages.reblog;
 | 
					    const buttonText = status.get('reblogged') ? messages.cancel_reblog : messages.reblog;
 | 
				
			||||||
@ -133,7 +125,7 @@ class BoostModal extends ImmutablePureComponent {
 | 
				
			|||||||
              onChange={this.props.onChangeBoostPrivacy}
 | 
					              onChange={this.props.onChangeBoostPrivacy}
 | 
				
			||||||
            />
 | 
					            />
 | 
				
			||||||
          )}
 | 
					          )}
 | 
				
			||||||
          <Button text={intl.formatMessage(buttonText)} onClick={this.handleReblog} ref={this.setRef} />
 | 
					          <Button text={intl.formatMessage(buttonText)} onClick={this.handleReblog} autoFocus />
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@ import classNames from 'classnames';
 | 
				
			|||||||
import { Helmet } from 'react-helmet';
 | 
					import { Helmet } from 'react-helmet';
 | 
				
			||||||
import { Link } from 'react-router-dom';
 | 
					import { Link } from 'react-router-dom';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
import Column from 'mastodon/components/column';
 | 
					import Column from 'mastodon/components/column';
 | 
				
			||||||
import { autoPlayGif } from 'mastodon/initial_state';
 | 
					import { autoPlayGif } from 'mastodon/initial_state';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,7 @@ import { PureComponent } from 'react';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { injectIntl, FormattedMessage } from 'react-intl';
 | 
					import { injectIntl, FormattedMessage } from 'react-intl';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Button from '../../../components/button';
 | 
					import { Button } from '../../../components/button';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ConfirmationModal extends PureComponent {
 | 
					class ConfirmationModal extends PureComponent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -22,10 +22,6 @@ class ConfirmationModal extends PureComponent {
 | 
				
			|||||||
    closeWhenConfirm: true,
 | 
					    closeWhenConfirm: true,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  componentDidMount() {
 | 
					 | 
				
			||||||
    this.button.focus();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  handleClick = () => {
 | 
					  handleClick = () => {
 | 
				
			||||||
    if (this.props.closeWhenConfirm) {
 | 
					    if (this.props.closeWhenConfirm) {
 | 
				
			||||||
      this.props.onClose();
 | 
					      this.props.onClose();
 | 
				
			||||||
@ -42,10 +38,6 @@ class ConfirmationModal extends PureComponent {
 | 
				
			|||||||
    this.props.onClose();
 | 
					    this.props.onClose();
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setRef = (c) => {
 | 
					 | 
				
			||||||
    this.button = c;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  render () {
 | 
					  render () {
 | 
				
			||||||
    const { message, confirm, secondary } = this.props;
 | 
					    const { message, confirm, secondary } = this.props;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -62,7 +54,7 @@ class ConfirmationModal extends PureComponent {
 | 
				
			|||||||
          {secondary !== undefined && (
 | 
					          {secondary !== undefined && (
 | 
				
			||||||
            <Button text={secondary} onClick={this.handleSecondary} className='confirmation-modal__secondary-button' />
 | 
					            <Button text={secondary} onClick={this.handleSecondary} className='confirmation-modal__secondary-button' />
 | 
				
			||||||
          )}
 | 
					          )}
 | 
				
			||||||
          <Button text={confirm} onClick={this.handleClick} ref={this.setRef} />
 | 
					          <Button text={confirm} onClick={this.handleClick} autoFocus />
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
				
			|||||||
@ -16,7 +16,7 @@ import tesseractWorkerPath from 'tesseract.js/dist/worker.min.js';
 | 
				
			|||||||
// eslint-disable-next-line import/no-extraneous-dependencies
 | 
					// eslint-disable-next-line import/no-extraneous-dependencies
 | 
				
			||||||
import tesseractCorePath from 'tesseract.js-core/tesseract-core.wasm.js';
 | 
					import tesseractCorePath from 'tesseract.js-core/tesseract-core.wasm.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Button from 'mastodon/components/button';
 | 
					import { Button } from 'mastodon/components/button';
 | 
				
			||||||
import { GIFV } from 'mastodon/components/gifv';
 | 
					import { GIFV } from 'mastodon/components/gifv';
 | 
				
			||||||
import { IconButton } from 'mastodon/components/icon_button';
 | 
					import { IconButton } from 'mastodon/components/icon_button';
 | 
				
			||||||
import Audio from 'mastodon/features/audio';
 | 
					import Audio from 'mastodon/features/audio';
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@ import Toggle from 'react-toggle';
 | 
				
			|||||||
import { muteAccount } from '../../../actions/accounts';
 | 
					import { muteAccount } from '../../../actions/accounts';
 | 
				
			||||||
import { closeModal } from '../../../actions/modal';
 | 
					import { closeModal } from '../../../actions/modal';
 | 
				
			||||||
import { toggleHideNotifications, changeMuteDuration } from '../../../actions/mutes';
 | 
					import { toggleHideNotifications, changeMuteDuration } from '../../../actions/mutes';
 | 
				
			||||||
import Button from '../../../components/button';
 | 
					import { Button } from '../../../components/button';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const messages = defineMessages({
 | 
					const messages = defineMessages({
 | 
				
			||||||
  minutes: { id: 'intervals.full.minutes', defaultMessage: '{number, plural, one {# minute} other {# minutes}}' },
 | 
					  minutes: { id: 'intervals.full.minutes', defaultMessage: '{number, plural, one {# minute} other {# minutes}}' },
 | 
				
			||||||
@ -63,10 +63,6 @@ class MuteModal extends PureComponent {
 | 
				
			|||||||
    onChangeMuteDuration: PropTypes.func.isRequired,
 | 
					    onChangeMuteDuration: PropTypes.func.isRequired,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  componentDidMount() {
 | 
					 | 
				
			||||||
    this.button.focus();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  handleClick = () => {
 | 
					  handleClick = () => {
 | 
				
			||||||
    this.props.onClose();
 | 
					    this.props.onClose();
 | 
				
			||||||
    this.props.onConfirm(this.props.account, this.props.notifications, this.props.muteDuration);
 | 
					    this.props.onConfirm(this.props.account, this.props.notifications, this.props.muteDuration);
 | 
				
			||||||
@ -76,10 +72,6 @@ class MuteModal extends PureComponent {
 | 
				
			|||||||
    this.props.onClose();
 | 
					    this.props.onClose();
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setRef = (c) => {
 | 
					 | 
				
			||||||
    this.button = c;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  toggleNotifications = () => {
 | 
					  toggleNotifications = () => {
 | 
				
			||||||
    this.props.onToggleNotifications();
 | 
					    this.props.onToggleNotifications();
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
@ -134,7 +126,7 @@ class MuteModal extends PureComponent {
 | 
				
			|||||||
          <Button onClick={this.handleCancel} className='mute-modal__cancel-button'>
 | 
					          <Button onClick={this.handleCancel} className='mute-modal__cancel-button'>
 | 
				
			||||||
            <FormattedMessage id='confirmation_modal.cancel' defaultMessage='Cancel' />
 | 
					            <FormattedMessage id='confirmation_modal.cancel' defaultMessage='Cancel' />
 | 
				
			||||||
          </Button>
 | 
					          </Button>
 | 
				
			||||||
          <Button onClick={this.handleClick} ref={this.setRef}>
 | 
					          <Button onClick={this.handleClick} autoFocus>
 | 
				
			||||||
            <FormattedMessage id='confirmations.mute.confirm' defaultMessage='Mute' />
 | 
					            <FormattedMessage id='confirmations.mute.confirm' defaultMessage='Mute' />
 | 
				
			||||||
          </Button>
 | 
					          </Button>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user