import React from 'react';
import classNames from 'classnames';
import moment from 'moment';
import { Message } from './Message';
import { useDispatch, useSelector } from 'react-redux';
import { Avatar, AvatarSize } from '../../../avatar/Avatar';
import { deleteMessagesById } from '../../../../interactions/conversations/unsendingInteractions';
import {
closeMessageDetailsView,
ContactPropsMessageDetail,
} from '../../../../state/ducks/conversations';
import {
getMessageDetailsViewProps,
getMessageIsDeletable,
} from '../../../../state/selectors/conversations';
import { ContactName } from '../../ContactName';
// tslint:disable-next-line: no-submodule-imports
import useKey from 'react-use/lib/useKey';
import { SessionButton, SessionButtonColor, SessionButtonType } from '../../../basic/SessionButton';
const AvatarItem = (props: { pubkey: string }) => {
const { pubkey } = props;
return ;
};
const DeleteButtonItem = (props: { messageId: string; convoId: string; isDeletable: boolean }) => {
const { i18n } = window;
return props.isDeletable ? (
{
await deleteMessagesById([props.messageId], props.convoId);
}}
/>
) : null;
};
const ContactsItem = (props: { contacts: Array }) => {
const { contacts } = props;
if (!contacts || !contacts.length) {
return null;
}
return (
{contacts.map(contact => (
))}
);
};
const ContactItem = (props: { contact: ContactPropsMessageDetail }) => {
const { contact } = props;
const errors = contact.errors || [];
const statusComponent = !contact.isOutgoingKeyError ? (
) : null;
return (
{errors.map((error, index) => (
{error.message}
))}
{statusComponent}
);
};
export const MessageDetail = () => {
const { i18n } = window;
const messageDetailProps = useSelector(getMessageDetailsViewProps);
const isDeletable = useSelector(state =>
getMessageIsDeletable(state as any, messageDetailProps?.messageId || '')
);
const dispatch = useDispatch();
useKey('Escape', () => {
dispatch(closeMessageDetailsView());
});
if (!messageDetailProps) {
return null;
}
const { errors, receivedAt, sentAt, convoId, direction, messageId } = messageDetailProps;
return (
{(errors || []).map((error, index) => (
{i18n('error')} |
{' '}
{error.message}{' '}
|
))}
{i18n('sent')} |
{moment(sentAt).format('LLLL')} ({sentAt})
|
{receivedAt ? (
{i18n('received')} |
{moment(receivedAt).format('LLLL')} ({receivedAt})
|
) : null}
{direction === 'incoming' ? i18n('from') : i18n('to')}
|
);
};