import React, { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { useHistory } from 'react-router-dom'; import { fetchPublicTimeline } from 'pl-fe/actions/timelines'; import { useRemoteStream } from 'pl-fe/api/hooks'; import IconButton from 'pl-fe/components/icon-button'; import { Column, HStack, Text } from 'pl-fe/components/ui'; import { useAppDispatch, useSettings, useTheme } from 'pl-fe/hooks'; import { useIsMobile } from 'pl-fe/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 theme = useTheme(); const instance = params?.instance as string; const settings = useSettings(); const timelineId = 'remote'; const onlyMedia = settings.remote.other.onlyMedia; const pinned = settings.remote_timeline.pinnedHosts.includes(instance); const isMobile = useIsMobile(); const handleCloseClick: React.MouseEventHandler = () => { history.push('/timeline/fediverse'); }; const handleLoadMore = () => { dispatch(fetchPublicTimeline({ onlyMedia, instance }, true)); }; useRemoteStream({ instance, onlyMedia }); useEffect(() => { dispatch(fetchPublicTimeline({ onlyMedia, instance })); }, [onlyMedia]); return ( {instance && } {!pinned && ( )} } divideType={(theme === 'black' || isMobile) ? 'border' : 'space'} /> ); }; export { RemoteTimeline as default };