~cytrogen/masto-fe

017fbc7a74a744790442d12cd9b58a2fc3a687e0 — たいち ひ 2 years ago 0e74667
[Glitch] Rewrite `<LoadGap />` as FC and TS

Port 7336f3648b7d590c10f77cb5587ebfd6142087d8 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
4 files changed, 38 insertions(+), 39 deletions(-)

D app/javascript/flavours/glitch/components/load_gap.jsx
A app/javascript/flavours/glitch/components/load_gap.tsx
M app/javascript/flavours/glitch/components/status_list.jsx
M app/javascript/flavours/glitch/features/notifications/index.jsx
D app/javascript/flavours/glitch/components/load_gap.jsx => app/javascript/flavours/glitch/components/load_gap.jsx +0 -37
@@ 1,37 0,0 @@
import PropTypes from 'prop-types';
import { PureComponent } from 'react';

import { injectIntl, defineMessages } from 'react-intl';

import { Icon } from 'flavours/glitch/components/icon';

const messages = defineMessages({
  load_more: { id: 'status.load_more', defaultMessage: 'Load more' },
});

class LoadGap extends PureComponent {

  static propTypes = {
    disabled: PropTypes.bool,
    maxId: PropTypes.string,
    onClick: PropTypes.func.isRequired,
    intl: PropTypes.object.isRequired,
  };

  handleClick = () => {
    this.props.onClick(this.props.maxId);
  };

  render () {
    const { disabled, intl } = this.props;

    return (
      <button className='load-more load-gap' disabled={disabled} onClick={this.handleClick} aria-label={intl.formatMessage(messages.load_more)}>
        <Icon id='ellipsis-h' />
      </button>
    );
  }

}

export default injectIntl(LoadGap);

A app/javascript/flavours/glitch/components/load_gap.tsx => app/javascript/flavours/glitch/components/load_gap.tsx +36 -0
@@ 0,0 1,36 @@
import { useCallback } from 'react';

import type { InjectedIntl } from 'react-intl';
import { injectIntl, defineMessages } from 'react-intl';

import { Icon } from 'flavours/glitch/components/icon';

const messages = defineMessages({
  load_more: { id: 'status.load_more', defaultMessage: 'Load more' },
});

interface Props {
  disabled: boolean;
  maxId: string;
  onClick: (maxId: string) => void;
  intl: InjectedIntl;
}

export const LoadGap = injectIntl<Props>(
  ({ disabled, maxId, onClick, intl }) => {
    const handleClick = useCallback(() => {
      onClick(maxId);
    }, [maxId, onClick]);

    return (
      <button
        className='load-more load-gap'
        disabled={disabled}
        onClick={handleClick}
        aria-label={intl.formatMessage(messages.load_more)}
      >
        <Icon id='ellipsis-h' />
      </button>
    );
  }
);

M app/javascript/flavours/glitch/components/status_list.jsx => app/javascript/flavours/glitch/components/status_list.jsx +1 -1
@@ 8,7 8,7 @@ import { debounce } from 'lodash';
import RegenerationIndicator from 'flavours/glitch/components/regeneration_indicator';
import StatusContainer from 'flavours/glitch/containers/status_container';

import LoadGap from './load_gap';
import { LoadGap } from './load_gap';
import ScrollableList from './scrollable_list';

export default class StatusList extends ImmutablePureComponent {

M app/javascript/flavours/glitch/features/notifications/index.jsx => app/javascript/flavours/glitch/features/notifications/index.jsx +1 -1
@@ 28,7 28,7 @@ import { compareId } from 'flavours/glitch/compare_id';
import Column from 'flavours/glitch/components/column';
import ColumnHeader from 'flavours/glitch/components/column_header';
import { Icon } from 'flavours/glitch/components/icon';
import LoadGap from 'flavours/glitch/components/load_gap';
import { LoadGap } from 'flavours/glitch/components/load_gap';
import { NotSignedInIndicator } from 'flavours/glitch/components/not_signed_in_indicator';
import ScrollableList from 'flavours/glitch/components/scrollable_list';
import NotificationPurgeButtonsContainer from 'flavours/glitch/containers/notification_purge_buttons_container';