Skip to content

Commit 4be789d

Browse files
Merge branch 'develop' into fix/CORE-217/fixing-room-search-filter-persistence
2 parents b5d3250 + 089f869 commit 4be789d

File tree

11 files changed

+61
-39
lines changed

11 files changed

+61
-39
lines changed

.changeset/thin-peaches-own.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@rocket.chat/meteor': patch
3+
---
4+
5+
Fixes an issue where message reactions are vertically misaligned when zooming out

apps/meteor/app/lib/server/functions/addUserToDefaultChannels.ts

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { Subscriptions } from '@rocket.chat/models';
44

55
import { callbacks } from '../../../../lib/callbacks';
66
import { getSubscriptionAutotranslateDefaultConfig } from '../../../../server/lib/getSubscriptionAutotranslateDefaultConfig';
7+
import { getDefaultSubscriptionPref } from '../../../utils/lib/getDefaultSubscriptionPref';
78
import { getDefaultChannels } from './getDefaultChannels';
89

910
export const addUserToDefaultChannels = async function (user: IUser, silenced?: boolean): Promise<void> {
@@ -23,6 +24,7 @@ export const addUserToDefaultChannels = async function (user: IUser, silenced?:
2324
groupMentions: 0,
2425
...(room.favorite && { f: true }),
2526
...autoTranslateConfig,
27+
...getDefaultSubscriptionPref(user),
2628
});
2729

2830
// Insert user joined message

apps/meteor/app/lib/server/functions/addUserToRoom.ts

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { RoomMemberActions } from '../../../../definition/IRoomTypeConfig';
99
import { callbacks } from '../../../../lib/callbacks';
1010
import { getSubscriptionAutotranslateDefaultConfig } from '../../../../server/lib/getSubscriptionAutotranslateDefaultConfig';
1111
import { roomCoordinator } from '../../../../server/lib/rooms/roomCoordinator';
12+
import { getDefaultSubscriptionPref } from '../../../utils/lib/getDefaultSubscriptionPref';
1213

1314
export const addUserToRoom = async function (
1415
rid: string,
@@ -81,6 +82,7 @@ export const addUserToRoom = async function (
8182
userMentions: 1,
8283
groupMentions: 0,
8384
...autoTranslateConfig,
85+
...getDefaultSubscriptionPref(userToBeAdded as IUser),
8486
});
8587

8688
if (!userToBeAdded.username) {

apps/meteor/app/lib/server/functions/createRoom.ts

+9-8
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { Meteor } from 'meteor/meteor';
1010
import { callbacks } from '../../../../lib/callbacks';
1111
import { beforeCreateRoomCallback } from '../../../../lib/callbacks/beforeCreateRoomCallback';
1212
import { getSubscriptionAutotranslateDefaultConfig } from '../../../../server/lib/getSubscriptionAutotranslateDefaultConfig';
13+
import { getDefaultSubscriptionPref } from '../../../utils/lib/getDefaultSubscriptionPref';
1314
import { getValidRoomName } from '../../../utils/server/lib/getValidRoomName';
1415
import { createDirectRoom } from './createDirectRoom';
1516

@@ -36,14 +37,14 @@ async function createUsersSubscriptions({
3637
options?: ICreateRoomParams['options'];
3738
}) {
3839
if (shouldBeHandledByFederation) {
39-
const extra: Partial<ISubscriptionExtraData> = options?.subscriptionExtra || {};
40-
extra.open = true;
41-
extra.ls = now;
42-
extra.roles = ['owner'];
43-
44-
if (room.prid) {
45-
extra.prid = room.prid;
46-
}
40+
const extra: Partial<ISubscriptionExtraData> = {
41+
...options?.subscriptionExtra,
42+
open: true,
43+
ls: now,
44+
roles: ['owner'],
45+
...(room.prid && { prid: room.prid }),
46+
...getDefaultSubscriptionPref(owner),
47+
};
4748

4849
await Subscriptions.createWithRoomAndUser(room, owner, extra);
4950

apps/meteor/client/components/message/content/Reactions.tsx

+16-19
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,22 @@ const Reactions = ({ message, ...props }: ReactionsProps): ReactElement => {
2323
const { toolbarProps } = useToolbar(props, ref);
2424

2525
return (
26-
<MessageReactions>
27-
{message.reactions && (
28-
<div ref={ref} {...toolbarProps} {...props}>
29-
{Object.entries(message.reactions).map(([name, reactions]) => (
30-
<Reaction
31-
key={name}
32-
counter={reactions.usernames.length}
33-
hasReacted={hasReacted}
34-
name={name}
35-
names={reactions.usernames.filter((user) => user !== username).map((username) => `@${username}`)}
36-
messageId={message._id}
37-
onKeyDown={(e: KeyboardEvent) =>
38-
(e.code === 'Space' || e.code === 'Enter') && toggleReactionMutation.mutate({ mid: message._id, reaction: name })
39-
}
40-
onClick={() => toggleReactionMutation.mutate({ mid: message._id, reaction: name })}
41-
/>
42-
))}
43-
</div>
44-
)}
26+
<MessageReactions ref={ref} {...toolbarProps} {...props}>
27+
{message.reactions &&
28+
Object.entries(message.reactions).map(([name, reactions]) => (
29+
<Reaction
30+
key={name}
31+
counter={reactions.usernames.length}
32+
hasReacted={hasReacted}
33+
name={name}
34+
names={reactions.usernames.filter((user) => user !== username).map((username) => `@${username}`)}
35+
messageId={message._id}
36+
onKeyDown={(e: KeyboardEvent) =>
37+
(e.code === 'Space' || e.code === 'Enter') && toggleReactionMutation.mutate({ mid: message._id, reaction: name })
38+
}
39+
onClick={() => toggleReactionMutation.mutate({ mid: message._id, reaction: name })}
40+
/>
41+
))}
4542
<MessageReactionAction
4643
title={t('Add_Reaction')}
4744
onKeyDown={(e: KeyboardEvent) => (e.code === 'Space' || e.code === 'Enter') && openEmojiPicker(e)}

apps/meteor/server/methods/addAllUserToRoom.ts

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Meteor } from 'meteor/meteor';
77

88
import { hasPermissionAsync } from '../../app/authorization/server/functions/hasPermission';
99
import { settings } from '../../app/settings/server';
10+
import { getDefaultSubscriptionPref } from '../../app/utils/lib/getDefaultSubscriptionPref';
1011
import { callbacks } from '../../lib/callbacks';
1112
import { getSubscriptionAutotranslateDefaultConfig } from '../lib/getSubscriptionAutotranslateDefaultConfig';
1213

@@ -65,6 +66,7 @@ Meteor.methods<ServerMethods>({
6566
userMentions: 1,
6667
groupMentions: 0,
6768
...autoTranslateConfig,
69+
...getDefaultSubscriptionPref(user),
6870
});
6971
await Message.saveSystemMessage('uj', rid, user.username || '', user, { ts: now });
7072
await callbacks.run('afterJoinRoom', user, room);

apps/meteor/server/models/raw/Messages.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import type {
3131

3232
import { otrSystemMessages } from '../../../app/otr/lib/constants';
3333
import { readSecondaryPreferred } from '../../database/readSecondaryPreferred';
34-
import { escapeExternalFederationEventId } from '../../services/federation/infrastructure/rocket-chat/adapters/federation-id-escape-helper';
3534
import { BaseRaw } from './BaseRaw';
3635

3736
type DeepWritable<T> = T extends (...args: any) => any
@@ -549,7 +548,7 @@ export class MessagesRaw extends BaseRaw<IMessage> implements IMessagesModel {
549548
{ _id },
550549
{
551550
$set: {
552-
[`reactions.${reaction}.federationReactionEventIds.${escapeExternalFederationEventId(federationEventId)}`]: username,
551+
[`reactions.${reaction}.federationReactionEventIds.${federationEventId}`]: username,
553552
} as any,
554553
},
555554
);
@@ -560,7 +559,7 @@ export class MessagesRaw extends BaseRaw<IMessage> implements IMessagesModel {
560559
{ _id },
561560
{
562561
$unset: {
563-
[`reactions.${reaction}.federationReactionEventIds.${escapeExternalFederationEventId(federationEventId)}`]: 1,
562+
[`reactions.${reaction}.federationReactionEventIds.${federationEventId}`]: 1,
564563
},
565564
},
566565
);
@@ -606,7 +605,7 @@ export class MessagesRaw extends BaseRaw<IMessage> implements IMessagesModel {
606605
$match: {
607606
$and: [
608607
{ 'reactions.v.usernames': { $in: [username] } },
609-
{ [`reactions.v.federationReactionEventIds.${escapeExternalFederationEventId(federationEventId)}`]: username },
608+
{ [`reactions.v.federationReactionEventIds.${federationEventId}`]: username },
610609
],
611610
},
612611
},

apps/meteor/server/models/raw/Subscriptions.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1603,7 +1603,7 @@ export class SubscriptionsRaw extends BaseRaw<ISubscription> implements ISubscri
16031603
}
16041604

16051605
// INSERT
1606-
async createWithRoomAndUser(room: IRoom, user: IUser, extraData: Record<string, any> = {}): Promise<InsertOneResult<ISubscription>> {
1606+
async createWithRoomAndUser(room: IRoom, user: IUser, extraData: Partial<ISubscription> = {}): Promise<InsertOneResult<ISubscription>> {
16071607
const subscription = {
16081608
open: false,
16091609
alert: false,

apps/meteor/server/services/federation/infrastructure/rocket-chat/adapters/Message.ts

+15-5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { roomCoordinator } from '../../../../../lib/rooms/roomCoordinator';
1111
import type { FederatedRoom } from '../../../domain/FederatedRoom';
1212
import type { FederatedUser } from '../../../domain/FederatedUser';
1313
import { toInternalMessageFormat, toInternalQuoteMessageFormat } from '../converters/to-external-parser-formatter';
14+
import { escapeExternalFederationEventId } from './federation-id-escape-helper';
1415

1516
const DEFAULT_EMOJI_TO_REACT_WHEN_RECEIVED_EMOJI_DOES_NOT_EXIST = ':grey_question:';
1617

@@ -316,7 +317,12 @@ export class RocketChatMessageAdapter {
316317
try {
317318
await executeSetReaction(user.getInternalId(), reaction, message._id);
318319
user.getUsername() &&
319-
(await Messages.setFederationReactionEventId(user.getUsername() as string, message._id, reaction, externalEventId));
320+
(await Messages.setFederationReactionEventId(
321+
user.getUsername() as string,
322+
message._id,
323+
reaction,
324+
escapeExternalFederationEventId(externalEventId),
325+
));
320326
} catch (error: any) {
321327
if (error?.message?.includes('Invalid emoji provided.')) {
322328
await executeSetReaction(user.getInternalId(), DEFAULT_EMOJI_TO_REACT_WHEN_RECEIVED_EMOJI_DOES_NOT_EXIST, message._id);
@@ -326,12 +332,16 @@ export class RocketChatMessageAdapter {
326332

327333
public async unreactToMessage(user: FederatedUser, message: IMessage, reaction: string, externalEventId: string): Promise<void> {
328334
await executeSetReaction(user.getInternalId(), reaction, message._id);
329-
await Messages.unsetFederationReactionEventId(externalEventId, message._id, reaction);
335+
await Messages.unsetFederationReactionEventId(escapeExternalFederationEventId(externalEventId), message._id, reaction);
330336
}
331337

332338
public async findOneByFederationIdOnReactions(federationEventId: string, user: FederatedUser): Promise<IMessage | null | undefined> {
333339
return (
334-
(user.getUsername() && Messages.findOneByFederationIdAndUsernameOnReactions(federationEventId, user.getUsername() as string)) ||
340+
(user.getUsername() &&
341+
Messages.findOneByFederationIdAndUsernameOnReactions(
342+
escapeExternalFederationEventId(federationEventId),
343+
user.getUsername() as string,
344+
)) ||
335345
undefined
336346
);
337347
}
@@ -345,7 +355,7 @@ export class RocketChatMessageAdapter {
345355
}
346356

347357
public async unsetExternalFederationEventOnMessageReaction(externalEventId: string, message: IMessage, reaction: string): Promise<void> {
348-
await Messages.unsetFederationReactionEventId(externalEventId, message._id, reaction);
358+
await Messages.unsetFederationReactionEventId(escapeExternalFederationEventId(externalEventId), message._id, reaction);
349359
}
350360

351361
public async getMessageById(internalMessageId: string): Promise<IMessage | null> {
@@ -358,6 +368,6 @@ export class RocketChatMessageAdapter {
358368
reaction: string,
359369
externalEventId: string,
360370
): Promise<void> {
361-
await Messages.setFederationReactionEventId(username, message._id, reaction, externalEventId);
371+
await Messages.setFederationReactionEventId(username, message._id, reaction, escapeExternalFederationEventId(externalEventId));
362372
}
363373
}

apps/meteor/server/services/federation/infrastructure/rocket-chat/adapters/Room.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { addUserToRoom } from '../../../../../../app/lib/server/functions/addUse
88
import { createRoom } from '../../../../../../app/lib/server/functions/createRoom';
99
import { removeUserFromRoom } from '../../../../../../app/lib/server/functions/removeUserFromRoom';
1010
import { settings } from '../../../../../../app/settings/server';
11+
import { getDefaultSubscriptionPref } from '../../../../../../app/utils/lib/getDefaultSubscriptionPref';
1112
import { getValidRoomName } from '../../../../../../app/utils/server/lib/getValidRoomName';
1213
import { DirectMessageFederatedRoom, FederatedRoom } from '../../../domain/FederatedRoom';
1314
import type { FederatedUser } from '../../../domain/FederatedUser';
@@ -157,8 +158,11 @@ export class RocketChatRoomAdapter {
157158
if (subscription) {
158159
return;
159160
}
160-
return Subscriptions.createWithRoomAndUser(room, federatedUser.getInternalReference(), {
161+
162+
const user = federatedUser.getInternalReference();
163+
return Subscriptions.createWithRoomAndUser(room, user, {
161164
ts: new Date(),
165+
...getDefaultSubscriptionPref(user),
162166
});
163167
})
164168
.filter(Boolean),

packages/model-typings/src/models/ISubscriptionsModel.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ export interface ISubscriptionsModel extends IBaseModel<ISubscription> {
227227
notificationOriginField: string,
228228
): Promise<UpdateResult | Document>;
229229
removeByUserId(userId: string): Promise<number>;
230-
createWithRoomAndUser(room: IRoom, user: IUser, extraData?: Record<string, any>): Promise<InsertOneResult<ISubscription>>;
230+
createWithRoomAndUser(room: IRoom, user: IUser, extraData?: Partial<ISubscription>): Promise<InsertOneResult<ISubscription>>;
231231
createWithRoomAndManyUsers(
232232
room: IRoom,
233233
users: { user: AtLeast<IUser, '_id' | 'username' | 'name' | 'settings'>; extraData: Record<string, any> }[],

0 commit comments

Comments
 (0)