session-desktop/ts/components/conversation/message/OutgoingMessageStatus.tsx

84 lines
2.2 KiB
TypeScript
Raw Normal View History

import React from 'react';
import styled, { useTheme } from 'styled-components';
2021-06-15 02:12:43 +02:00
import { MessageDeliveryStatus } from '../../../models/messageType';
2021-04-22 10:03:58 +02:00
import { SessionIcon, SessionIconSize, SessionIconType } from '../../session/icon';
import { OpacityMetadataComponent } from './MessageMetadata';
2021-04-22 10:03:58 +02:00
const MessageStatusSendingContainer = styled(props => <OpacityMetadataComponent {...props} />)`
display: inline-block;
margin-bottom: 2px;
margin-inline-start: 5px;
`;
const MessageStatusSending = (props: { iconColor: string }) => {
return (
<MessageStatusSendingContainer>
<SessionIcon
rotateDuration={2}
iconColor={props.iconColor}
iconType={SessionIconType.Sending}
iconSize={SessionIconSize.Tiny}
/>
</MessageStatusSendingContainer>
);
};
const MessageStatusSent = (props: { iconColor: string }) => {
return (
<MessageStatusSendingContainer>
<SessionIcon
iconColor={props.iconColor}
iconType={SessionIconType.CircleCheck}
iconSize={SessionIconSize.Tiny}
/>
</MessageStatusSendingContainer>
);
};
const MessageStatusRead = (props: { iconColor: string }) => {
return (
<MessageStatusSendingContainer>
<SessionIcon
iconColor={props.iconColor}
iconType={SessionIconType.DoubleCheckCircleFilled}
iconSize={SessionIconSize.Tiny}
/>
</MessageStatusSendingContainer>
);
};
const MessageStatusError = () => {
const theme = useTheme();
return (
<MessageStatusSendingContainer>
<SessionIcon
iconColor={theme.colors.destructive}
iconType={SessionIconType.Error}
iconSize={SessionIconSize.Tiny}
/>
</MessageStatusSendingContainer>
);
};
export const OutgoingMessageStatus = (props: {
2021-07-08 08:43:32 +02:00
status?: MessageDeliveryStatus | null;
iconColor: string;
isInMessageView?: boolean;
}) => {
switch (props.status) {
case 'sending':
return <MessageStatusSending {...props} />;
case 'sent':
return <MessageStatusSent {...props} />;
case 'read':
return <MessageStatusRead {...props} />;
case 'error':
if (props.isInMessageView) {
return null;
}
return <MessageStatusError />;
default:
return null;
}
};