import React, { useEffect } from 'react'; import { FormattedMessage, useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; import { expandRemoteTimeline } from 'soapbox/actions/timelines'; import { useRemoteStream } from 'soapbox/api/hooks'; import IconButton from 'soapbox/components/icon-button'; import { Column, HStack, Text } from 'soapbox/components/ui'; import { useAppSelector, useAppDispatch, useSettings, useTheme } from 'soapbox/hooks'; import { useIsMobile } from 'soapbox/hooks/useIsMobile'; import Timeline from '../ui/components/timeline'; import PinnedHostsPicker from './components/pinned-hosts-picker'; interface IRemoteTimeline { params?: { instance?: string; }; } /** View statuses from a remote instance. */ const RemoteTimeline: React.FC = ({ params }) => { const history = useHistory(); const dispatch = useAppDispatch(); const intl = useIntl(); const theme = useTheme(); const instance = params?.instance as string; const settings = useSettings(); const timelineId = 'remote'; const onlyMedia = settings.remote.other.onlyMedia; const next = useAppSelector(state => state.timelines.get('remote')?.next); const pinned = settings.remote_timeline.pinnedHosts.includes(instance); const isMobile = useIsMobile(); const handleCloseClick: React.MouseEventHandler = () => { history.push('/timeline/fediverse'); }; const handleLoadMore = (maxId: string) => { dispatch(expandRemoteTimeline(instance, { url: next, maxId, onlyMedia }, intl)); }; useRemoteStream({ instance, onlyMedia }); useEffect(() => { dispatch(expandRemoteTimeline(instance, { onlyMedia, maxId: undefined }, intl)); }, [onlyMedia]); return ( {instance && } {!pinned && ( )} } divideType={(theme === 'black' || isMobile) ? 'border' : 'space'} /> ); }; export { RemoteTimeline as default };