QA fix - msg request accept buttons showing at wrong stage.

pull/2222/head
warrickct 3 years ago
parent e049934510
commit dcd78e85f6

@ -59,7 +59,7 @@ module.exports = {
removeMessage, removeMessage,
getUnreadByConversation, getUnreadByConversation,
getUnreadCountByConversation, getUnreadCountByConversation,
getIncomingMessagesCountByConversation, getMessageCountByType,
getMessageBySenderAndSentAt, getMessageBySenderAndSentAt,
getMessageBySenderAndServerTimestamp, getMessageBySenderAndServerTimestamp,
getMessageBySenderAndTimestamp, getMessageBySenderAndTimestamp,
@ -2311,15 +2311,16 @@ function getUnreadCountByConversation(conversationId) {
return row['count(*)']; return row['count(*)'];
} }
function getIncomingMessagesCountByConversation(conversationId) { function getMessageCountByType(conversationId, type = '%') {
const row = globalInstance const row = globalInstance
.prepare( .prepare(
`SELECT count(*) from ${MESSAGES_TABLE} `SELECT count(*) from ${MESSAGES_TABLE}
WHERE conversationId = $conversationId WHERE conversationId = $conversationId
AND type = "incoming";` AND type = $type;`
) )
.get({ .get({
conversationId, conversationId,
type,
}); });
if (!row) { if (!row) {

@ -1,11 +1,13 @@
import React from 'react'; import React, { useEffect, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import styled from 'styled-components'; import styled from 'styled-components';
import { getMessageCountByType } from '../../data/data';
import { import {
acceptConversation, acceptConversation,
blockConvoById, blockConvoById,
declineConversation, declineConversation,
} from '../../interactions/conversationInteractions'; } from '../../interactions/conversationInteractions';
import { MessageDirection } from '../../models/messageType';
import { forceSyncConfigurationNowIfNeeded } from '../../session/utils/syncUtils'; import { forceSyncConfigurationNowIfNeeded } from '../../session/utils/syncUtils';
import { updateConfirmModal } from '../../state/ducks/modalDialog'; import { updateConfirmModal } from '../../state/ducks/modalDialog';
import { getSelectedConversation } from '../../state/selectors/conversations'; import { getSelectedConversation } from '../../state/selectors/conversations';
@ -14,12 +16,32 @@ import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/S
export const ConversationMessageRequestButtons = () => { export const ConversationMessageRequestButtons = () => {
const selectedConversation = useSelector(getSelectedConversation); const selectedConversation = useSelector(getSelectedConversation);
if (!selectedConversation) { const [hasIncoming, setHasIncomingMsg] = useState(false);
useEffect(() => {
async function getIncomingMessages() {
const id = selectedConversation?.id;
if (id) {
const msgCount = await getMessageCountByType(
selectedConversation?.id,
MessageDirection.incoming
);
if (msgCount > 0) {
setHasIncomingMsg(true);
}
}
}
getIncomingMessages();
});
if (!selectedConversation || !hasIncoming) {
return null; return null;
} }
const showMsgRequestUI = const showMsgRequestUI =
!selectedConversation.isApproved && selectedConversation.type === 'private'; !selectedConversation.isApproved &&
!selectedConversation.isApproved &&
selectedConversation.type === 'private';
const dispatch = useDispatch(); const dispatch = useDispatch();
const handleDeclineConversationRequest = () => { const handleDeclineConversationRequest = () => {

@ -1,6 +1,8 @@
import React from 'react'; import React, { useEffect, useState } from 'react';
import { useSelector } from 'react-redux'; import { useSelector } from 'react-redux';
import styled from 'styled-components'; import styled from 'styled-components';
import { getMessageCountByType } from '../../data/data';
import { MessageDirection } from '../../models/messageType';
import { getSelectedConversation } from '../../state/selectors/conversations'; import { getSelectedConversation } from '../../state/selectors/conversations';
export const ConversationRequestinfo = () => { export const ConversationRequestinfo = () => {
@ -8,7 +10,25 @@ export const ConversationRequestinfo = () => {
const showMsgRequestUI = const showMsgRequestUI =
!selectedConversation?.isApproved && selectedConversation?.type === 'private'; !selectedConversation?.isApproved && selectedConversation?.type === 'private';
if (!showMsgRequestUI) { const [hasIncomingMessages, setHasIncomingMessages] = useState(false);
useEffect(() => {
async function getIncomingMessages() {
const id = selectedConversation?.id;
if (id) {
const msgCount = await getMessageCountByType(
selectedConversation?.id,
MessageDirection.incoming
);
if (msgCount > 0) {
setHasIncomingMessages(true);
}
}
}
getIncomingMessages();
});
if (!showMsgRequestUI || !hasIncomingMessages) {
return null; return null;
} }

@ -11,7 +11,7 @@ import {
ConversationTypeEnum, ConversationTypeEnum,
} from '../models/conversation'; } from '../models/conversation';
import { MessageCollection, MessageModel } from '../models/message'; import { MessageCollection, MessageModel } from '../models/message';
import { MessageAttributes } from '../models/messageType'; import { MessageAttributes, MessageDirection } from '../models/messageType';
import { HexKeyPair } from '../receiver/keypairs'; import { HexKeyPair } from '../receiver/keypairs';
import { getConversationController } from '../session/conversations'; import { getConversationController } from '../session/conversations';
import { getSodium } from '../session/crypto'; import { getSodium } from '../session/crypto';
@ -113,7 +113,7 @@ const channelsToMake = {
_removeMessages, _removeMessages,
getUnreadByConversation, getUnreadByConversation,
getUnreadCountByConversation, getUnreadCountByConversation,
getIncomingMessagesCountByConversation, getMessageCountByType,
removeAllMessagesInConversation, removeAllMessagesInConversation,
@ -762,11 +762,17 @@ export async function getUnreadCountByConversation(conversationId: string): Prom
return channels.getUnreadCountByConversation(conversationId); return channels.getUnreadCountByConversation(conversationId);
} }
export async function getIncomingMessagesCountByConversation( /**
* Gets the count of messages for a direction
* @param conversationId Conversation for messages to retrieve from
* @param type outgoing/incoming
* @returns
*/
export async function getMessageCountByType(
conversationId: string, conversationId: string,
type: string = '%' type?: MessageDirection
): Promise<number> { ): Promise<number> {
return channels.getIncomingMessagesCountByConversation(conversationId, type); return channels.getMessageCountByType(conversationId, type);
} }
export async function getMessagesByConversation( export async function getMessagesByConversation(

@ -12,7 +12,7 @@ import { MessageModel } from './message';
import { MessageAttributesOptionals, MessageDirection } from './messageType'; import { MessageAttributesOptionals, MessageDirection } from './messageType';
import autoBind from 'auto-bind'; import autoBind from 'auto-bind';
import { import {
getIncomingMessagesCountByConversation, getMessageCountByType,
getLastMessagesByConversation, getLastMessagesByConversation,
getUnreadByConversation, getUnreadByConversation,
getUnreadCountByConversation, getUnreadCountByConversation,
@ -626,10 +626,7 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
}; };
const shouldApprove = !this.isApproved() && this.isPrivate(); const shouldApprove = !this.isApproved() && this.isPrivate();
const incomingMessageCount = await getIncomingMessagesCountByConversation( const incomingMessageCount = await getMessageCountByType(this.id, MessageDirection.incoming);
this.id,
MessageDirection.incoming
);
const hasIncomingMessages = incomingMessageCount > 0; const hasIncomingMessages = incomingMessageCount > 0;
if (shouldApprove) { if (shouldApprove) {
await this.setIsApproved(true); await this.setIsApproved(true);
@ -640,6 +637,11 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
} }
} }
if (uploads.body?.includes('unapprove')) {
this.setIsApproved(false);
this.setDidApproveMe(false);
}
if (this.isOpenGroupV2()) { if (this.isOpenGroupV2()) {
const chatMessageOpenGroupV2 = new OpenGroupVisibleMessage(chatMessageParams); const chatMessageOpenGroupV2 = new OpenGroupVisibleMessage(chatMessageParams);
const roomInfos = this.toOpenGroupV2(); const roomInfos = this.toOpenGroupV2();
@ -925,11 +927,15 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
) { ) {
// for handling edge case for syncing/linking devices. // for handling edge case for syncing/linking devices.
// if convo has a message by us, we have replied - which is considered as approved // if convo has a message by us, we have replied - which is considered as approved
// if (!this.isMe()) {
if (!this.isMe()) { if (!this.isMe()) {
if (!this.isApproved() && this.isPrivate()) { if (!this.isApproved() && this.isPrivate()) {
this.setIsApproved(true); this.setIsApproved(true);
} }
} }
// this.setIsApproved(true);
// }
// }
return this.addSingleMessage({ return this.addSingleMessage({
...messageAttributes, ...messageAttributes,

@ -122,6 +122,7 @@ export interface MessageRequestResponseMsg {
export enum MessageDirection { export enum MessageDirection {
outgoing = 'outgoing', outgoing = 'outgoing',
incoming = 'incoming', incoming = 'incoming',
any = '%',
} }
export type PropsForDataExtractionNotification = DataExtractionNotificationMsg & { export type PropsForDataExtractionNotification = DataExtractionNotificationMsg & {

@ -35,7 +35,7 @@ export const persistConfig = {
const persistedReducer = persistReducer(persistConfig, rootReducer); const persistedReducer = persistReducer(persistConfig, rootReducer);
// Exclude logger if we're in production mode // Exclude logger if we're in production mode
const disableLogging = false; //; env === 'production' || true; // ALWAYS TURNED OFF const disableLogging = true; //; env === 'production' || true; // ALWAYS TURNED OFF
const middlewareList = disableLogging ? [promiseMiddleware] : [logger, promiseMiddleware]; const middlewareList = disableLogging ? [promiseMiddleware] : [logger, promiseMiddleware];
export const createStore = (initialState: any) => export const createStore = (initialState: any) =>

Loading…
Cancel
Save