Skip to content

Commit 8e8485d

Browse files
Merge branch 'develop' into fix/CORE-217/fixing-room-search-filter-persistence
2 parents c4749b7 + 249fb78 commit 8e8485d

File tree

98 files changed

+1869
-358
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+1869
-358
lines changed

.changeset/clever-guests-invent.md

-8
This file was deleted.

.changeset/eleven-seas-explain.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 that forces the focus on the last message when interacting by mouse on message list

.changeset/fair-peaches-cough.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@rocket.chat/meteor": patch
3+
"@rocket.chat/livechat": patch
4+
---
5+
6+
Fixes the livechat client ignoring the `livechat_fileuploads_enabled` setting when uploading files

.changeset/lemon-schools-double.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@rocket.chat/meteor": patch
3+
---
4+
5+
fixed an issue where mentioning a team would trigger the bot message warning that the team is not a part of the channel

.changeset/nice-hounds-enjoy.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@rocket.chat/eslint-config': minor
3+
---
4+
5+
Adds eslint-plugin-jsx-a11y plugin to eslint react config

.changeset/shaggy-yaks-train.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@rocket.chat/meteor": patch
3+
---
4+
5+
Fixed an issue where Rocket.Chat would ask admins to confirm fingerprint change (new workspace vs configuration update), even when `AUTO_ACCEPT_FINGERPRINT` environment variable set to `"true"`.

.changeset/sharp-yaks-turn.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@rocket.chat/meteor": patch
3+
---
4+
5+
Fixed supported versions not being updated in airgapped environments

.changeset/soft-shrimps-beg.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@rocket.chat/meteor": patch
3+
---
4+
5+
This PR have made enhancements to the select and multiselect inputs related to Omnichannel Departments, now the options properly display the complete department names, ensuring clarity for users and added text wrapping for long department names, enhancing readability and UX.

.changeset/swift-readers-speak.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@rocket.chat/meteor": minor
3+
"@rocket.chat/i18n": minor
4+
---
5+
6+
Added "Enable Users" option under "Sync User Active State" LDAP setting to allow only re-enabling users found on LDAP background sync

.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/cloud/server/functions/saveRegistrationData.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import { applyLicense } from '@rocket.chat/license';
12
import { Settings } from '@rocket.chat/models';
23

3-
import { applyLicense } from '../../../../ee/app/license/server/applyLicense';
44
import { settings } from '../../../settings/server';
55
import { syncCloudData } from './syncWorkspace/syncCloudData';
66

apps/meteor/app/cloud/server/functions/syncWorkspace/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ import { syncCloudData } from './syncCloudData';
1313
*/
1414
export async function syncWorkspace() {
1515
try {
16+
await getCachedSupportedVersionsToken.reset();
1617
await announcementSync();
1718
await syncCloudData();
18-
await getCachedSupportedVersionsToken.reset();
1919
} catch (err) {
2020
switch (true) {
2121
case err instanceof CloudWorkspaceRegistrationError:
@@ -33,8 +33,8 @@ export async function syncWorkspace() {
3333
function: 'syncCloudData',
3434
});
3535
try {
36-
await legacySyncWorkspace();
3736
await getCachedSupportedVersionsToken.reset();
37+
await legacySyncWorkspace();
3838
} catch (err) {
3939
switch (true) {
4040
case err instanceof CloudWorkspaceRegistrationError:

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/app/lib/server/startup/mentionUserNotInChannel.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ callbacks.add(
6262
return message;
6363
}
6464

65-
const mentions = message.mentions.filter(({ _id }) => _id !== 'all' && _id !== 'here');
65+
const mentions = message.mentions.filter(({ _id, type }) => _id !== 'all' && _id !== 'here' && type !== 'team');
6666
if (!mentions.length) {
6767
return message;
6868
}

apps/meteor/app/livechat/imports/server/rest/upload.ts

+8
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ API.v1.addRoute('livechat/upload/:rid', {
1414
return API.v1.unauthorized();
1515
}
1616

17+
const canUpload = settings.get<boolean>('Livechat_fileupload_enabled') && settings.get<boolean>('FileUpload_Enabled');
18+
19+
if (!canUpload) {
20+
return API.v1.failure({
21+
reason: 'error-file-upload-disabled',
22+
});
23+
}
24+
1725
const visitorToken = this.request.headers['x-visitor-token'];
1826
const visitor = await LivechatVisitors.getVisitorByToken(visitorToken as string, {});
1927

apps/meteor/ee/app/license/server/getStatistics.ts apps/meteor/app/statistics/server/lib/getEEStatistics.ts

+6-21
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,15 @@
11
import { log } from 'console';
22

33
import { Analytics } from '@rocket.chat/core-services';
4+
import type { IStats } from '@rocket.chat/core-typings';
45
import { License } from '@rocket.chat/license';
56
import { CannedResponse, OmnichannelServiceLevelAgreements, LivechatRooms, LivechatTag, LivechatUnit, Users } from '@rocket.chat/models';
67

7-
type ENTERPRISE_STATISTICS = GenericStats & Partial<EEOnlyStats>;
8-
9-
type GenericStats = {
10-
modules: string[];
11-
tags: string[];
12-
seatRequests: number;
13-
};
14-
15-
type EEOnlyStats = {
16-
livechatTags: number;
17-
cannedResponses: number;
18-
priorities: number;
19-
slas: number;
20-
businessUnits: number;
21-
omnichannelPdfTranscriptRequested: number;
22-
omnichannelPdfTranscriptSucceeded: number;
23-
omnichannelRoomsWithSlas: number;
24-
omnichannelRoomsWithPriorities: number;
25-
livechatMonitors: number;
26-
};
8+
type ENTERPRISE_STATISTICS = IStats['enterprise'];
9+
10+
type GenericStats = Pick<ENTERPRISE_STATISTICS, 'modules' | 'tags' | 'seatRequests'>;
11+
12+
type EEOnlyStats = Omit<ENTERPRISE_STATISTICS, keyof GenericStats>;
2713

2814
export async function getStatistics(): Promise<ENTERPRISE_STATISTICS> {
2915
const genericStats: GenericStats = {
@@ -42,7 +28,6 @@ export async function getStatistics(): Promise<ENTERPRISE_STATISTICS> {
4228
return statistics;
4329
}
4430

45-
// These models are only available on EE license so don't import them inside CE license as it will break the build
4631
async function getEEStatistics(): Promise<EEOnlyStats | undefined> {
4732
if (!License.hasModule('livechat-enterprise')) {
4833
return;

apps/meteor/app/statistics/server/lib/statistics.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import {
2929
import { MongoInternals } from 'meteor/mongo';
3030
import moment from 'moment';
3131

32-
import { getStatistics as getEnterpriseStatistics } from '../../../../ee/app/license/server/getStatistics';
3332
import { readSecondaryPreferred } from '../../../../server/database/readSecondaryPreferred';
3433
import { isRunningMs } from '../../../../server/lib/isRunningMs';
3534
import { getControl } from '../../../../server/lib/migrations';
@@ -40,6 +39,7 @@ import { settings } from '../../../settings/server';
4039
import { Info } from '../../../utils/rocketchat.info';
4140
import { getMongoInfo } from '../../../utils/server/functions/getMongoInfo';
4241
import { getAppsStatistics } from './getAppsStatistics';
42+
import { getStatistics as getEnterpriseStatistics } from './getEEStatistics';
4343
import { getImporterStatistics } from './getImporterStatistics';
4444
import { getServicesStatistics } from './getServicesStatistics';
4545

apps/meteor/client/components/AutoCompleteDepartment.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ const AutoCompleteDepartment = ({
5151

5252
return (
5353
<PaginatedSelectFiltered
54-
{...props}
5554
withTitle
55+
{...props}
5656
value={value}
5757
onChange={onChange}
5858
filter={departmentsFilter}

apps/meteor/client/components/AutoCompleteDepartmentMultiple.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { PaginatedMultiSelectFiltered } from '@rocket.chat/fuselage';
1+
import { Option, PaginatedMultiSelectFiltered } from '@rocket.chat/fuselage';
22
import type { PaginatedMultiSelectOption } from '@rocket.chat/fuselage';
33
import { useDebouncedValue } from '@rocket.chat/fuselage-hooks';
44
import { useTranslation } from '@rocket.chat/ui-contexts';
@@ -65,6 +65,7 @@ const AutoCompleteDepartmentMultiple = ({
6565
return loadMoreDepartments(start, Math.min(50, departmentsTotal));
6666
}
6767
}
68+
renderItem={({ label, ...props }) => <Option {...props} label={<span style={{ whiteSpace: 'normal' }}>{label}</span>} />}
6869
/>
6970
);
7071
};

apps/meteor/client/components/FilterByText.tsx

+13-10
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { Box, Icon, TextInput, Button, Margins } from '@rocket.chat/fuselage';
2+
import { useAutoFocus, useMergedRefs } from '@rocket.chat/fuselage-hooks';
23
import { useTranslation } from '@rocket.chat/ui-contexts';
3-
import type { ReactNode, ChangeEvent, FormEvent, ReactElement } from 'react';
4-
import React, { memo, useCallback, useEffect, useState } from 'react';
4+
import type { ReactNode, ChangeEvent, FormEvent } from 'react';
5+
import React, { forwardRef, memo, useCallback, useEffect, useState } from 'react';
56

67
type FilterByTextCommonProps = {
78
children?: ReactNode | undefined;
89
placeholder?: string;
9-
inputRef?: () => void;
1010
onChange: (filter: { text: string }) => void;
11-
autoFocus?: boolean;
11+
shouldAutoFocus?: boolean;
1212
};
1313

1414
type FilterByTextPropsWithButton = FilterByTextCommonProps & {
@@ -22,10 +22,14 @@ type FilterByTextProps = FilterByTextCommonProps | FilterByTextPropsWithButton;
2222
const isFilterByTextPropsWithButton = (props: any): props is FilterByTextPropsWithButton =>
2323
'displayButton' in props && props.displayButton === true;
2424

25-
const FilterByText = ({ placeholder, onChange: setFilter, inputRef, children, autoFocus, ...props }: FilterByTextProps): ReactElement => {
25+
const FilterByText = forwardRef<HTMLInputElement, FilterByTextProps>(function FilterByText(
26+
{ placeholder, onChange: setFilter, shouldAutoFocus, children, ...props },
27+
ref,
28+
) {
2629
const t = useTranslation();
27-
2830
const [text, setText] = useState('');
31+
const autoFocusRef = useAutoFocus(shouldAutoFocus);
32+
const mergedRefs = useMergedRefs(ref, autoFocusRef);
2933

3034
const handleInputChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {
3135
setText(event.currentTarget.value);
@@ -44,11 +48,10 @@ const FilterByText = ({ placeholder, onChange: setFilter, inputRef, children, au
4448
<Box mi={4} display='flex' flexGrow={1}>
4549
<TextInput
4650
placeholder={placeholder ?? t('Search')}
47-
ref={inputRef}
51+
ref={mergedRefs}
4852
addon={<Icon name='magnifier' size='x20' />}
4953
onChange={handleInputChange}
5054
value={text}
51-
autoFocus={autoFocus}
5255
flexGrow={2}
5356
minWidth='x220'
5457
/>
@@ -62,6 +65,6 @@ const FilterByText = ({ placeholder, onChange: setFilter, inputRef, children, au
6265
)}
6366
</Box>
6467
);
65-
};
68+
});
6669

67-
export default memo<FilterByTextProps>(FilterByText);
70+
export default memo(FilterByText);

apps/meteor/client/components/ImageGallery/ImageGallery.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ export const ImageGallery = ({ images, onClose, loadMore }: { images: IUpload[];
128128
return createPortal(
129129
<FocusScope contain autoFocus>
130130
<Box className={swiperStyle}>
131-
<div className='swiper-container' onClick={onClose}>
131+
<div role='presentation' className='swiper-container' onClick={onClose}>
132132
<ButtonGroup className='rcx-swiper-controls' onClick={preventPropagation}>
133133
{zoomScale !== 1 && <IconButton small icon='arrow-collapse' title='Resize' rcx-swiper-zoom-out onClick={handleResize} />}
134134
<IconButton small icon='h-bar' title='Zoom out' rcx-swiper-zoom-out onClick={handleZoomOut} disabled={zoomScale === 1} />
@@ -155,7 +155,10 @@ export const ImageGallery = ({ images, onClose, loadMore }: { images: IUpload[];
155155
{images?.map(({ _id, url }) => (
156156
<SwiperSlide key={_id}>
157157
<div className='swiper-zoom-container'>
158-
<img src={url} loading='lazy' onClick={preventPropagation} />
158+
<span tabIndex={0} role='link' onClick={preventPropagation} onKeyDown={preventPropagation}>
159+
<img src={url} loading='lazy' alt='' />
160+
</span>
161+
159162
<div className='rcx-lazy-preloader'>
160163
<Throbber inheritColor />
161164
</div>

apps/meteor/client/components/Omnichannel/modals/ForwardChatModal.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
Divider,
1111
FieldLabel,
1212
FieldRow,
13+
Option,
1314
} from '@rocket.chat/fuselage';
1415
import { useDebouncedValue } from '@rocket.chat/fuselage-hooks';
1516
import { useEndpoint, useSetting, useTranslation } from '@rocket.chat/ui-contexts';
@@ -106,7 +107,7 @@ const ForwardChatModal = ({
106107
<FieldLabel>{t('Forward_to_department')}</FieldLabel>
107108
<FieldRow>
108109
<PaginatedSelectFiltered
109-
withTitle
110+
withTitle={false}
110111
filter={departmentsFilter as string}
111112
setFilter={setDepartmentsFilter}
112113
options={departments}
@@ -118,6 +119,7 @@ const ForwardChatModal = ({
118119
}}
119120
flexGrow={1}
120121
endReached={endReached}
122+
renderItem={({ label, ...props }) => <Option {...props} label={<span style={{ whiteSpace: 'normal' }}>{label}</span>} />}
121123
/>
122124
</FieldRow>
123125
</Field>

apps/meteor/client/components/message/IgnoredContent.tsx

+8-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,15 @@ const IgnoredContent = ({ onShowMessageIgnored }: IgnoredContentProps): ReactEle
1919
return (
2020
<MessageBody data-qa-type='message-body' dir='auto'>
2121
<Box display='flex' alignItems='center' fontSize='c2' color='hint'>
22-
<p role='button' onClick={showMessageIgnored} style={{ cursor: 'pointer' }}>
22+
<span
23+
tabIndex={0}
24+
role='button'
25+
onClick={showMessageIgnored}
26+
onKeyDown={(e) => e.code === 'Enter' && showMessageIgnored(e)}
27+
style={{ cursor: 'pointer' }}
28+
>
2329
<Icon name='chevron-left' /> {t('Message_Ignored')}
24-
</p>
30+
</span>
2531
</Box>
2632
</MessageBody>
2733
);

0 commit comments

Comments
 (0)