import { useEffect, useRef, useCallback } from 'react'; import { FormattedMessage } from 'react-intl'; import { Helmet } from 'react-helmet'; import { useParams } from 'react-router'; import CircleIcon from '@/material-icons/400-24px/account_circle.svg?react'; import { expandCircleStatuses, fetchCircle, fetchCircleStatuses, } from 'mastodon/actions/circles'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { Column } from 'mastodon/components/column'; import type { ColumnRef } from 'mastodon/components/column'; import { ColumnHeader } from 'mastodon/components/column_header'; import StatusList from 'mastodon/components/status_list'; import { getSubStatusList } from 'mastodon/selectors'; import { useAppDispatch, useAppSelector } from 'mastodon/store'; const CircleStatuses: React.FC<{ columnId: string; multiColumn: boolean; }> = ({ columnId, multiColumn }) => { const dispatch = useAppDispatch(); const { id } = useParams<{ id: string }>(); const columnRef = useRef(null); const statusIds = useAppSelector((state) => getSubStatusList(state, 'circle', id), ); const isLoading = useAppSelector( (state) => state.status_lists.getIn( ['circle_statuses', id, 'isLoading'], true, ) as boolean, ); const hasMore = useAppSelector( (state) => !!state.status_lists.getIn(['circle_statuses', id, 'next']), ); const circle = useAppSelector((state) => state.circles.get(id)); useEffect(() => { dispatch(fetchCircle(id)); dispatch(fetchCircleStatuses(id)); }, [dispatch, id]); const handlePin = useCallback(() => { if (columnId) { dispatch(removeColumn(columnId)); } else { dispatch(addColumn('CIRCLE_STATUSES', { id })); } }, [dispatch, columnId, id]); const handleMove = useCallback( (dir: number) => { dispatch(moveColumn(columnId, dir)); }, [dispatch, columnId], ); const handleHeaderClick = useCallback(() => { columnRef.current?.scrollTop(); }, []); const handleLoadMore = useCallback(() => { dispatch(expandCircleStatuses(id)); }, [dispatch, id]); const pinned = !!columnId; const emptyMessage = ( ); return ( {circle?.get('title')} ); }; // eslint-disable-next-line import/no-default-export export default CircleStatuses;