feat: save conversation interaction errors to a message history
parent
68a94117a0
commit
027b412fb2
@ -0,0 +1,76 @@
|
||||
import React from 'react';
|
||||
|
||||
import { useIsPrivate, useIsPublic } from '../../../../hooks/useParamSelector';
|
||||
import {
|
||||
ConversationInteractionStatus,
|
||||
ConversationInteractionType,
|
||||
} from '../../../../interactions/conversationInteractions';
|
||||
import styled from 'styled-components';
|
||||
import { assertUnreachable } from '../../../../types/sqlSharedTypes';
|
||||
import { isEmpty } from 'lodash';
|
||||
import { Flex } from '../../../basic/Flex';
|
||||
import { PropsForInteractionNotification } from '../../../../state/ducks/conversations';
|
||||
import { ReadableMessage } from './ReadableMessage';
|
||||
|
||||
const StyledFailText = styled.div`
|
||||
color: var(--danger-color);
|
||||
`;
|
||||
|
||||
export const InteractionNotification = (props: PropsForInteractionNotification) => {
|
||||
const { notificationType, convoId, messageId, receivedAt, isUnread } = props;
|
||||
|
||||
const { interactionStatus, interactionType } = notificationType;
|
||||
|
||||
const isGroup = !useIsPrivate(convoId);
|
||||
const isCommunity = useIsPublic(convoId);
|
||||
|
||||
// NOTE For now we only show interaction errors in the message history
|
||||
if (interactionStatus !== ConversationInteractionStatus.Error) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let text = '';
|
||||
|
||||
switch (interactionType) {
|
||||
case ConversationInteractionType.Hide:
|
||||
text = window.i18n('hideConversationFailed');
|
||||
break;
|
||||
case ConversationInteractionType.Leave:
|
||||
text = isCommunity
|
||||
? window.i18n('leaveCommunityFailed')
|
||||
: isGroup
|
||||
? window.i18n('leaveGroupFailed')
|
||||
: window.i18n('deleteConversationFailed');
|
||||
break;
|
||||
default:
|
||||
assertUnreachable(
|
||||
interactionType,
|
||||
`InteractionErrorMessage: Missing case error "${interactionType}"`
|
||||
);
|
||||
}
|
||||
|
||||
if (isEmpty(text)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<ReadableMessage
|
||||
messageId={messageId}
|
||||
receivedAt={receivedAt}
|
||||
isUnread={isUnread}
|
||||
key={`readable-message-${messageId}`}
|
||||
>
|
||||
<Flex
|
||||
id={`convo-interaction-${convoId}`}
|
||||
container={true}
|
||||
flexDirection="row"
|
||||
alignItems="center"
|
||||
justifyContent="center"
|
||||
margin={'var(--margins-md) var(--margins-sm)'}
|
||||
data-testid="control-message"
|
||||
>
|
||||
<StyledFailText>{text}</StyledFailText>
|
||||
</Flex>
|
||||
</ReadableMessage>
|
||||
);
|
||||
};
|
Loading…
Reference in New Issue