You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/components/conversation/message/OutgoingMessageStatus.tsx

84 lines
2.2 KiB
TypeScript

import React from 'react';
import styled, { DefaultTheme, useTheme } from 'styled-components';
import { MessageDeliveryStatus } from '../../../models/messageType';
import { SessionIcon, SessionIconSize, SessionIconType } from '../../session/icon';
import { OpacityMetadataComponent } from './MessageMetadata';
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: {
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;
}
};