import PropTypes from 'prop-types'; import { useRef, useCallback, useEffect } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { Helmet } from 'react-helmet'; import { useDispatch, useSelector } from 'react-redux'; import MailIcon from '@/material-icons/400-24px/mail.svg?react'; import { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns'; import { mountConversations, unmountConversations, expandConversations } from 'flavours/glitch/actions/conversations'; import { connectDirectStream } from 'flavours/glitch/actions/streaming'; import { expandDirectTimeline } from 'flavours/glitch/actions/timelines'; import Column from 'flavours/glitch/components/column'; import ColumnHeader from 'flavours/glitch/components/column_header'; import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container'; import { ConversationsList } from './components/conversations_list'; import ColumnSettingsContainer from './containers/column_settings_container'; const messages = defineMessages({ title: { id: 'column.direct', defaultMessage: 'Private mentions' }, }); const DirectTimeline = ({ columnId, multiColumn }) => { const columnRef = useRef(); const intl = useIntl(); const dispatch = useDispatch(); const pinned = !!columnId; // glitch-soc additions const hasUnread = useSelector(state => state.getIn(['timelines', 'direct', 'unread']) > 0); const conversationsMode = useSelector(state => state.getIn(['settings', 'direct', 'conversations'])); const handlePin = useCallback(() => { if (columnId) { dispatch(removeColumn(columnId)); } else { dispatch(addColumn('DIRECT', {})); } }, [dispatch, columnId]); const handleMove = useCallback((dir) => { dispatch(moveColumn(columnId, dir)); }, [dispatch, columnId]); const handleHeaderClick = useCallback(() => { columnRef.current.scrollTop(); }, [columnRef]); const handleLoadMoreTimeline = useCallback(maxId => { dispatch(expandDirectTimeline({ maxId })); }, [dispatch]); useEffect(() => { dispatch(mountConversations()); if (conversationsMode) { dispatch(expandConversations()); } else { dispatch(expandDirectTimeline()); } const disconnect = dispatch(connectDirectStream()); return () => { dispatch(unmountConversations()); disconnect(); }; }, [dispatch, conversationsMode]); return ( {conversationsMode ? ( } bindToDocument={!multiColumn} prepend={
} alwaysPrepend /> ) : ( } alwaysPrepend emptyMessage={} /> )} {intl.formatMessage(messages.title)}
); }; DirectTimeline.propTypes = { columnId: PropTypes.string, multiColumn: PropTypes.bool, }; export default DirectTimeline;