feat(chat): fixed chat counter (#12385)
* feat(chat): fixed chat counter and updated new messages button web styles
This commit is contained in:
parent
36c344ee9f
commit
454ac10d62
|
@ -96,7 +96,7 @@
|
||||||
"messageAccessibleTitleMe": "me says:",
|
"messageAccessibleTitleMe": "me says:",
|
||||||
"messageTo": "Private message to {{recipient}}",
|
"messageTo": "Private message to {{recipient}}",
|
||||||
"messagebox": "Type a message",
|
"messagebox": "Type a message",
|
||||||
"newMessages": "new messages",
|
"newMessages": "New messages",
|
||||||
"nickname": {
|
"nickname": {
|
||||||
"popover": "Choose a nickname",
|
"popover": "Choose a nickname",
|
||||||
"title": "Enter a nickname to use chat",
|
"title": "Enter a nickname to use chat",
|
||||||
|
|
|
@ -7,6 +7,7 @@ import { translate } from '../../../base/i18n/functions';
|
||||||
import Icon from '../../../base/icons/components/Icon';
|
import Icon from '../../../base/icons/components/Icon';
|
||||||
import { IconArrowDown } from '../../../base/icons/svg';
|
import { IconArrowDown } from '../../../base/icons/svg';
|
||||||
import { withPixelLineHeight } from '../../../base/styles/functions.web';
|
import { withPixelLineHeight } from '../../../base/styles/functions.web';
|
||||||
|
import BaseTheme from '../../../base/ui/components/BaseTheme.web';
|
||||||
|
|
||||||
export interface INewMessagesButtonProps extends WithTranslation {
|
export interface INewMessagesButtonProps extends WithTranslation {
|
||||||
|
|
||||||
|
@ -29,7 +30,7 @@ const useStyles = makeStyles()((theme: Theme) => {
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
justifyContent: 'space-between',
|
justifyContent: 'space-between',
|
||||||
height: '32px',
|
height: '32px',
|
||||||
padding: '6px 8px',
|
padding: '8px',
|
||||||
border: 'none',
|
border: 'none',
|
||||||
borderRadius: theme.shape.borderRadius,
|
borderRadius: theme.shape.borderRadius,
|
||||||
backgroundColor: theme.palette.action02,
|
backgroundColor: theme.palette.action02,
|
||||||
|
@ -49,12 +50,7 @@ const useStyles = makeStyles()((theme: Theme) => {
|
||||||
width: '20px',
|
width: '20px',
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
justifyContent: 'center',
|
justifyContent: 'center'
|
||||||
paddingLeft: '5px',
|
|
||||||
|
|
||||||
'& svg': {
|
|
||||||
fill: theme.palette.uiBackground
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
textContainer: {
|
textContainer: {
|
||||||
|
@ -83,9 +79,9 @@ function NewMessagesButton({ onGoToFirstUnreadMessage, t }: INewMessagesButtonPr
|
||||||
type = 'button'>
|
type = 'button'>
|
||||||
<Icon
|
<Icon
|
||||||
className = { styles.arrowDownIconContainer }
|
className = { styles.arrowDownIconContainer }
|
||||||
|
color = { BaseTheme.palette.icon04 }
|
||||||
size = { 14 }
|
size = { 14 }
|
||||||
src = { IconArrowDown } />
|
src = { IconArrowDown } />
|
||||||
|
|
||||||
<div className = { styles.textContainer }> { t('chat.newMessages') }</div>
|
<div className = { styles.textContainer }> { t('chat.newMessages') }</div>
|
||||||
</button>
|
</button>
|
||||||
</div>);
|
</div>);
|
||||||
|
|
|
@ -7,6 +7,8 @@ import emojiAsciiAliases from 'react-emoji-render/data/asciiAliases';
|
||||||
import { IState } from '../app/types';
|
import { IState } from '../app/types';
|
||||||
import { escapeRegexp } from '../base/util/helpers';
|
import { escapeRegexp } from '../base/util/helpers';
|
||||||
|
|
||||||
|
import { IMessage } from './reducer';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An ASCII emoticon regexp array to find and replace old-style ASCII
|
* An ASCII emoticon regexp array to find and replace old-style ASCII
|
||||||
* emoticons (such as :O) with the new Unicode representation, so that
|
* emoticons (such as :O) with the new Unicode representation, so that
|
||||||
|
@ -93,14 +95,11 @@ export function getUnreadCount(state: IState) {
|
||||||
}
|
}
|
||||||
|
|
||||||
let reactionMessages = 0;
|
let reactionMessages = 0;
|
||||||
|
let lastReadIndex;
|
||||||
if (!lastReadMessage) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (navigator.product === 'ReactNative') {
|
if (navigator.product === 'ReactNative') {
|
||||||
// React native stores the messages in a reversed order.
|
// React native stores the messages in a reversed order.
|
||||||
const lastReadIndex = messages.indexOf(lastReadMessage);
|
lastReadIndex = messages.indexOf(<IMessage>lastReadMessage);
|
||||||
|
|
||||||
for (let i = 0; i < lastReadIndex; i++) {
|
for (let i = 0; i < lastReadIndex; i++) {
|
||||||
if (messages[i].isReaction) {
|
if (messages[i].isReaction) {
|
||||||
|
@ -111,7 +110,7 @@ export function getUnreadCount(state: IState) {
|
||||||
return lastReadIndex - reactionMessages;
|
return lastReadIndex - reactionMessages;
|
||||||
}
|
}
|
||||||
|
|
||||||
const lastReadIndex = messages.lastIndexOf(lastReadMessage);
|
lastReadIndex = messages.lastIndexOf(<IMessage>lastReadMessage);
|
||||||
|
|
||||||
for (let i = lastReadIndex + 1; i < messagesCount; i++) {
|
for (let i = lastReadIndex + 1; i < messagesCount; i++) {
|
||||||
if (messages[i].isReaction) {
|
if (messages[i].isReaction) {
|
||||||
|
@ -122,18 +121,6 @@ export function getUnreadCount(state: IState) {
|
||||||
return messagesCount - (lastReadIndex + 1) - reactionMessages;
|
return messagesCount - (lastReadIndex + 1) - reactionMessages;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Selector for calculating the number of unread chat messages.
|
|
||||||
*
|
|
||||||
* @param {IState} state - The redux state.
|
|
||||||
* @returns {number} The number of unread messages.
|
|
||||||
*/
|
|
||||||
export function getUnreadMessagesCount(state: IState) {
|
|
||||||
const { nbUnreadMessages } = state['features/chat'];
|
|
||||||
|
|
||||||
return nbUnreadMessages;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get whether the chat smileys are disabled or not.
|
* Get whether the chat smileys are disabled or not.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue