From aad0b7041f012c3249de9ef531db207cda66f6cb Mon Sep 17 00:00:00 2001 From: albuquerquefabio Date: Thu, 2 Jun 2022 13:52:01 -0300 Subject: [PATCH] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 0179e1b54557aea885e7c89b8dcb868fc3e9a65f Author: albuquerquefabio Date: Thu Jun 2 13:32:52 2022 -0300 Squashed commit of the following: commit 19a996aceadd2321f80c5b3a9bc76556d951ff36 Author: Douglas Fabris Date: Thu Jun 2 11:58:46 2022 -0300 [FIX] Unnecessary padding on teams channels footer (#25712) commit 8274ba3f1a01150b3bf308b5e7cbebaf5a3e3343 Author: Hugo Costa Date: Thu Jun 2 11:00:52 2022 -0300 [FIX] Messages spacing (#25631) * fix(fuselage): adding sequential param to Message Component * chore: updating fuselage version * fix: updating yarn.lock * fix yarn.lock * Update fuselage * remove dev deps Co-authored-by: gabriellsh commit d24789abbc152cd0bcbe341c95d3260d19bcb63a Author: Guilherme Gazzo Date: Wed Jun 1 17:09:34 2022 -0300 Chore: Custom Sounds Endpoints (#25633) commit db257d3290924b77640ceae97a39774bacb650ed Author: Murtaza Patrawala <34130764+murtaza98@users.noreply.github.com> Date: Wed Jun 1 22:11:12 2022 +0530 [FIX] User's with non-agent role shown on voip agent association model (#25682) commit c8fba6fb1ae93ebcf0b39f66cd9e5fe19561756b Author: Guilherme Gazzo Date: Wed Jun 1 13:37:58 2022 -0300 Fix CI commit afbb7082b451b7f1e39ac14d8dc6251c133cc4b3 Author: Guilherme Gazzo Date: Wed Jun 1 13:09:17 2022 -0300 fix CI commit c5def5796db40284067831c43eccd67f1e6712dc Author: Júlia Jaeger Foresti <60678893+juliajforesti@users.noreply.github.com> Date: Wed Jun 1 12:27:08 2022 -0300 Chore: Convert CreateChannelWithData (#25667) commit bcd4b1b97f142f880658f2f4bc6f0c29fc7a5339 Author: Júlia Jaeger Foresti <60678893+juliajforesti@users.noreply.github.com> Date: Wed Jun 1 12:25:58 2022 -0300 Chore: Convert UserAutoCompleteMultiple (#25587) Co-authored-by: julia foresti commit 08656e3f5daca4a5706692555b30d014c5c51030 Author: amolghode1981 <86001342+amolghode1981@users.noreply.github.com> Date: Wed Jun 1 20:55:32 2022 +0530 Chore: Converting files from app/livechat folder from JS to TS (#25658) commit c2c1bf4234795b2ad1110973c66e93bed0006b6d Author: Jean Brito Date: Wed Jun 1 11:36:08 2022 -0300 Chore: Convert sidebar/header/actions (#25581) Co-authored-by: Guilherme Gazzo commit 44d6798258c3eaf11028be6d77209a8dff2d563e Author: Aleksander Nicacio da Silva Date: Tue May 31 23:00:14 2022 -0300 Chore: Converting omnichannel installation files to ts (#25665) commit cd32f0918bac711922c60f6a83f52ac52a8aa689 Author: Jean Brito Date: Tue May 31 22:55:02 2022 -0300 Chore: Convert to TS omnichannel/agent (#25511) Co-authored-by: Guilherme Gazzo commit 6b41aa62071323d91e75c111777ba1a677d4739a Author: Jean Brito Date: Tue May 31 22:52:51 2022 -0300 Chore: Convert components/sidebar to TS (#25429) Co-authored-by: Guilherme Gazzo commit 6c1a7b1a54b0d604ab8686151d9d26270d767980 Author: Júlia Jaeger Foresti <60678893+juliajforesti@users.noreply.github.com> Date: Tue May 31 22:52:04 2022 -0300 Chore: Convert apps/meteor/client/sidebar/header/index (#25671) commit 5b81dbad63e56e981588e22bc569e4d9a127ba9e Author: Tasso Evangelista Date: Tue May 31 22:51:27 2022 -0300 Chore: Migrate some small helper functions to TypeScript (#25666) commit ad67cd3ff554804ea2291f84f39edb2dc8dfa729 Author: Douglas Gubert Date: Tue May 31 22:50:13 2022 -0300 Merge master into develop & Set version to 5.0.0 (#25702) commit 80fc5b7e9b010004472b16d4e48b9abe4274626d Author: Douglas Gubert Date: Tue May 31 17:05:29 2022 -0300 Chore: Update Apps-Engine and Fuselage (#25700) commit 88a8e8e13cf98b24c2010678caa60741d3bc7f28 Author: Douglas Gubert Date: Tue May 31 11:06:52 2022 -0300 Regression: App event listeners broke Slackbridge integration and importers (#25689) commit bf3483d72e0faaffee379c89b135ac8c88321b9f Author: Guilherme Gazzo Date: Mon May 30 23:44:01 2022 -0300 [FIX] Fix max-width message block (#25686) commit b1d855e4ef816ee6320dc0db0033af4ee829c989 Author: Sinyoung "Divinespear" Kang Date: Tue May 31 10:27:14 2022 +0900 [FIX] Change form body parameter charset to UTF-8 to fix issue #25456 (#25673) commit 51845b14331ce7b68bfc6b803e0efce9309182e2 Author: Guilherme Gazzo Date: Mon May 30 22:26:55 2022 -0300 Regression: Fix sort field files.list (#25687) Co-authored-by: Fábio Albuquerque commit 713120eb1d6a15613867028eadd03f5e49b8e05f Author: Carlos Rodrigues Date: Mon May 30 17:59:57 2022 -0300 fix git conflict (#25684) commit 62405c60078e59393a143f6649ebb15b58d78e5f Author: Marcos Spessatto Defendi Date: Mon May 30 12:47:44 2022 -0300 [FIX] Prevent federation crash on invite users as a non-owner user (#25683) * fix: prevent crashing when inviting someone as non-owner * chore: fix lint commit d364be43e83eade47b78a8fa6c6fb7605b2b283a Author: Tasso Evangelista Date: Mon May 30 11:21:16 2022 -0300 Regression: Broken components on Federation and Engagement dashboards (#25653) * Fix odd typechecking issues with JSON modules * Avoid `data` as directory for modules * rename other `data` folder Co-authored-by: gabriellsh commit 4894fc2d6fa5c1c252ffa37c28582ee5d7837713 Author: Douglas Fabris Date: Fri May 27 16:23:07 2022 -0300 Regression: Update settings groups description (#25663) commit 5a0d29f59ba119238b3ff7c87562e5e992de99a9 Author: Hugo Costa Date: Fri May 27 13:45:51 2022 -0300 [FIX] Click to join button Jitsi Call (#25569) * fix: Click to join button Jitsi Call * Fix `yarn` references * fix: Old message Jitsi Button * Fix yarn references (again) * Update apps/meteor/app/action-links/client/lib/actionLinks.ts Co-authored-by: Tasso Evangelista * fix: changing instance type Co-authored-by: Tasso Evangelista commit 78e57f5aa0e1baee0d2e654a1800d5b70dfab598 Author: Fábio Albuquerque Date: Fri May 27 12:54:04 2022 -0300 Regression: Endpoint types with Ajv Coercing data types (#25644) commit 7dd89fc01c88bc9a3bda780086ff7a1110310e59 Author: Kevin Aleman Date: Fri May 27 02:20:57 2022 -0600 Regression: Change logic to check if connection is online on unstable networks (#25618) * Change .race for .allsettled so rejections are handled better * improve to unstable check logic * CR suggestions commit 195f90a81b7dc532bd7fbcceb2a5828ab71402a9 Author: Douglas Fabris Date: Thu May 26 23:37:56 2022 -0300 Regression: Missing settings group descriptions (#25639) commit 31ae30f30ad71d9e5a1b0cad494b3471a7dd8807 Author: Guilherme Gazzo Date: Thu May 26 19:11:41 2022 -0300 Chore: Rest API query parameters handling (#25648) commit 052858d5c97a84cc41aef2f001a728af329abfd8 Author: Aleksander Nicacio da Silva Date: Thu May 26 18:36:07 2022 -0300 Regression: VoIp wrap up modal not opening after call disconnect (#25651) commit 3cd0cabe7c6ab7b2630adb77d09211d433041f4e Author: Guilherme Jun Grillo <48109548+guijun13@users.noreply.github.com> Date: Thu May 26 15:39:15 2022 -0300 [FIX] Remove 'total' text in admin info page (#25638) * fix: rm intial 'total' from rooms & total groups * fix: change key of 'total messages' title * feat: cr8 'total_rooms'='Total Rooms' in en.i18n replace it from 'rooms' title in rooms group * fix: change pt-BR.i18n to remove initial 'total' commit 6f3133f451b288adbf0c19f7f3fcff5144f8ace8 Author: Rodrigo Nascimento Date: Thu May 26 13:28:48 2022 -0300 Chore: Increase performance and security of integrations’ scripts (#25641) commit cbb0844cb4460f0456209687e89640c7aa1ebf26 Author: Hugo Costa Date: Thu May 26 12:12:32 2022 -0300 [FIX] Quote message spacing (#25613) * fix: default margins for outer quote * fix: Removing condition to style differently the inner quote * fix: updating yarn.lock commit 2452448e6c0bc413609eeabc0ac8830b7b4f89d6 Author: Douglas Fabris Date: Wed May 25 15:10:07 2022 -0300 Regression: Assets & Slack Bridge Setting Page not rendering (#25629) * fix: RoomPickSettingInput * fix: assets page broken commit ca4c020ed3c8c2b8f9ec9cc989e5eec1c5bb9e77 Author: Henrique Guimarães Ribeiro Date: Tue May 24 22:39:11 2022 -0300 Regression: Subscription menu not appearing for non installed but subscribed apps (#25627) * fix: :bug: Fix subscribe menu option not appearing Fixed a problem on which the AppMenu component did not appear for apps that had an active subscription but weren't installed, now the rendering of the component is also based on the isSubscribed flag, and the appearance of the uninstall and enable/disable options are based on the app.installed flag. * fix: :bug: Fix AppMenu overflow error on Marketplace/AppRow Fixed a visual error on which the AppMenu component would overflow the right side of its container and have part of itself hidden. * fix: :bug: FIx isSubscribed wrongful typing Fixed an oversight where I've typed isSubscribed as string instead of boolean --- .github/history-manual.json | 42 + .github/history.json | 11647 +++++++++++++++- .yarnrc.yml | 10 +- HISTORY.md | 4147 ++++-- apps/meteor/.docker/Dockerfile.rhel | 2 +- apps/meteor/.mocharc.api.js | 2 +- .../.snapcraft/resources/prepareRocketChat | 2 +- apps/meteor/.snapcraft/snap/snapcraft.yaml | 2 +- .../action-links/client/lib/actionLinks.ts | 2 +- apps/meteor/app/api/server/api.d.ts | 2 +- apps/meteor/app/api/server/api.js | 3 + .../api/server/helpers/insertUserObject.ts | 7 +- .../app/api/server/helpers/parseJsonQuery.js | 119 - .../app/api/server/helpers/parseJsonQuery.ts | 142 + apps/meteor/app/api/server/lib/cleanQuery.ts | 4 +- .../app/api/server/lib/custom-sounds.js | 20 - .../app/api/server/lib/custom-user-status.js | 20 - .../app/api/server/lib/getUploadFormData.js | 2 +- .../meteor/app/api/server/lib/isValidQuery.ts | 58 + .../meteor/app/api/server/v1/custom-sounds.js | 26 - .../meteor/app/api/server/v1/custom-sounds.ts | 29 + ...m-user-status.js => custom-user-status.ts} | 66 +- apps/meteor/app/api/server/v1/im.ts | 38 +- apps/meteor/app/api/server/v1/users.js | 23 +- .../app/api/server/v1/voip/omnichannel.ts | 2 +- .../authentication/server/startup/index.js | 3 +- .../autotranslate/client/lib/actionButton.ts | 2 +- .../client/custom_oauth_client.js | 2 +- .../server/custom_oauth_server.js | 2 +- .../client/createDiscussionMessageAction.ts | 2 +- .../server/matrix-client/user.ts | 16 +- .../app/federation-v2/server/settings.ts | 2 + .../meteor/app/integrations/server/api/api.js | 41 +- .../integrations/server/lib/triggerHandler.js | 41 +- .../app/lib/server/functions/saveUser.js | 3 +- .../app/lib/server/functions/sendMessage.js | 3 +- apps/meteor/app/livechat/lib/Assets.js | 2 - apps/meteor/app/livechat/lib/Assets.ts | 4 + .../lib/{messageTypes.js => messageTypes.ts} | 56 +- .../lib/stream/{constants.js => constants.ts} | 0 .../mentions-flextab/client/actionButton.ts | 2 +- .../client/actionButton.ts | 2 +- .../app/message-pin/client/actionButton.ts | 2 +- .../app/message-star/client/actionButton.ts | 2 +- .../app/models/server/raw/CustomUserStatus.ts | 7 +- apps/meteor/app/models/server/raw/Users.js | 2 +- apps/meteor/app/oembed/server/server.js | 2 +- apps/meteor/app/reactions/client/init.js | 2 +- .../app/reactions/server/setReaction.js | 2 +- .../app/search/client/provider/result.js | 2 +- .../client/messageAction/replyInThread.ts | 2 +- .../client/actionButtons/messageAction.ts | 3 +- apps/meteor/app/ui-utils/client/index.js | 1 - .../app/ui-utils/client/lib/RoomManager.js | 3 +- apps/meteor/app/ui-utils/client/lib/menu.js | 4 +- .../client/lib/messageActionDefault.ts | 2 +- .../app/ui-utils/client/lib/messageContext.js | 4 +- .../meteor/app/ui-utils/client/lib/popover.js | 5 +- .../views/app/lib/getCommonRoomEvents.js | 4 +- apps/meteor/app/ui/client/views/app/room.js | 2 +- apps/meteor/app/utils/client/index.js | 4 +- apps/meteor/app/utils/lib/getURL.js | 2 +- apps/meteor/app/utils/lib/isURL.js | 2 - apps/meteor/app/utils/lib/tapi18n.js | 6 - apps/meteor/app/utils/lib/timeConverter.js | 30 - apps/meteor/app/utils/rocketchat.info | 2 +- .../server/functions/safeGetMeteorUser.ts | 29 + apps/meteor/app/utils/server/index.js | 4 +- apps/meteor/app/utils/stream/constants.js | 1 - .../app/videobridge/client/actionLink.js | 13 +- apps/meteor/app/webdav/client/actionButton.ts | 2 +- .../meteor/client/components/GenericModal.tsx | 2 +- .../Message/Attachments/QuoteAttachment.tsx | 2 +- .../client/components/Omnichannel/Tags.tsx | 2 +- .../RoomAutoComplete/RoomAutoComplete.tsx | 10 +- .../Sidebar/{Content.js => Content.tsx} | 4 +- .../Sidebar/{Header.js => Header.tsx} | 9 +- .../components/Sidebar/ItemsAssembler.js | 22 - .../components/Sidebar/NavigationItem.js | 24 - .../Sidebar/{Sidebar.js => Sidebar.tsx} | 4 +- ...GenericItem.tsx => SidebarGenericItem.tsx} | 17 +- .../Sidebar/SidebarItemsAssembler.tsx | 33 + .../Sidebar/SidebarNavigationItem.tsx | 42 + .../meteor/client/components/Sidebar/index.ts | 8 +- .../UserAutoComplete/UserAutoComplete.tsx | 16 +- ...ltiple.js => UserAutoCompleteMultiple.tsx} | 30 +- .../client/components/avatar/UserAvatar.tsx | 1 + .../{data => dataView}/Counter.stories.tsx | 0 .../components/{data => dataView}/Counter.tsx | 0 .../{data => dataView}/CounterSet.stories.tsx | 0 .../{data => dataView}/CounterSet.tsx | 0 .../{data => dataView}/Growth.stories.tsx | 0 .../components/{data => dataView}/Growth.tsx | 0 .../NegativeGrowthSymbol.stories.tsx | 0 .../NegativeGrowthSymbol.tsx | 0 .../PositiveGrowthSymbol.stories.tsx | 0 .../PositiveGrowthSymbol.tsx | 0 apps/meteor/client/lib/createSidebarItems.ts | 8 +- .../client/lib/utils/isRTLScriptLanguage.ts | 10 + .../lib => client/lib/utils}/messageArgs.ts | 0 apps/meteor/client/lib/voip/VoIPUser.ts | 30 +- .../providers/CallProvider/CallProvider.tsx | 18 +- .../footer/voip/VoipFooter.stories.tsx | 2 - .../client/sidebar/footer/voip/VoipFooter.tsx | 5 - .../client/sidebar/footer/voip/index.tsx | 3 - .../client/sidebar/header/CreateChannel.tsx | 17 +- ...lWithData.js => CreateChannelWithData.tsx} | 44 +- .../sidebar/header/CreateDirectMessage.tsx | 2 +- .../actions/{CreateRoom.js => CreateRoom.tsx} | 8 +- .../{CreateRoomList.js => CreateRoomList.tsx} | 24 +- .../actions/{Directory.js => Directory.tsx} | 4 +- .../header/actions/{Home.js => Home.tsx} | 6 +- .../header/actions/{Login.js => Login.tsx} | 6 +- .../client/sidebar/header/actions/Search.tsx | 6 +- .../header/actions/{Sort.js => Sort.tsx} | 6 +- .../sidebar/header/{index.js => index.tsx} | 6 +- apps/meteor/client/startup/i18n.ts | 6 +- apps/meteor/client/startup/readReceipt.ts | 3 +- .../{sidebarItems.js => sidebarItems.ts} | 8 +- .../views/admin/apps/AppDetailsHeader.tsx | 4 +- .../meteor/client/views/admin/apps/AppMenu.js | 58 +- .../meteor/client/views/admin/apps/AppRow.tsx | 4 +- .../views/admin/apps/MarketplaceRow.tsx | 5 +- .../federationDashboard/OverviewSection.tsx | 2 +- .../client/views/admin/info/UsageCard.tsx | 4 +- .../UsersInRole/UsersInRolePage.tsx | 8 +- .../admin/settings/SettingsGroupCard.tsx | 7 +- ...Input.css => AssetSettingInput.styles.css} | 0 .../settings/inputs/AssetSettingInput.tsx | 2 +- .../settings/inputs/RoomPickSettingInput.tsx | 4 +- .../views/admin/sidebar/AdminSidebarPages.tsx | 4 +- .../agents/{AddAgent.js => AddAgent.tsx} | 17 +- .../views/omnichannel/agents/AgentEdit.tsx | 11 +- ...tEditWithData.js => AgentEditWithData.tsx} | 17 +- .../agents/{AgentInfo.js => AgentInfo.tsx} | 30 +- .../omnichannel/agents/AgentInfoAction.js | 11 - .../omnichannel/agents/AgentInfoAction.tsx | 17 + ...entInfoActions.js => AgentInfoActions.tsx} | 26 +- .../views/omnichannel/agents/AgentsPage.js | 31 - .../views/omnichannel/agents/AgentsPage.tsx | 39 + .../{AgentsRoute.js => AgentsRoute.tsx} | 84 +- ...veAgentButton.js => RemoveAgentButton.tsx} | 17 +- .../analytics/InterchangeableChart.js | 2 +- .../{Installation.js => Installation.tsx} | 8 +- .../installation/{Wrapper.js => Wrapper.tsx} | 4 +- .../managers/RemoveManagerButton.tsx | 6 +- .../charts/ChatDurationChart.js | 2 +- .../charts/ResponseTimesChart.js | 2 +- .../sidebar/OmnichannelSidebar.tsx | 3 +- .../{sidebarItems.js => sidebarItems.ts} | 26 +- .../room/MessageList/components/Message.tsx | 9 +- .../MessageList/components/MessageContent.tsx | 10 +- .../MessageList/components/MessageHeader.tsx | 2 +- .../providers/MessageListProvider.tsx | 15 +- .../views/room/providers/MessageProvider.tsx | 6 +- .../channels/BaseTeamsChannels.js | 30 +- apps/meteor/definition/methods/omnichannel.ts | 2 - .../channels/ChannelsTab.tsx | 8 +- .../channels/useChannelsList.ts | 2 +- .../{data => dataView}/DownloadDataButton.tsx | 3 +- .../LegendSymbol.stories.tsx | 0 .../{data => dataView}/LegendSymbol.tsx | 0 .../{data => dataView}/PeriodSelector.tsx | 2 +- .../{data => dataView}/colors.ts | 0 .../{data => dataView}/periods.ts | 3 +- .../{data => dataView}/usePeriodLabel.ts | 2 +- .../usePeriodSelectorState.ts | 0 .../messages/MessagesPerChannelSection.tsx | 8 +- .../messages/MessagesSentSection.tsx | 10 +- .../messages/useMessageOrigins.ts | 2 +- .../messages/useMessagesSent.ts | 2 +- .../messages/useTopFivePopularChannels.ts | 2 +- .../users/ActiveUsersSection.tsx | 6 +- .../users/NewUsersSection.tsx | 10 +- .../users/UsersByTimeOfTheDaySection.tsx | 6 +- .../users/useActiveUsers.ts | 2 +- .../engagementDashboard/users/useNewUsers.ts | 2 +- .../users/useUsersByTimeOfTheDay.ts | 2 +- apps/meteor/lib/getUserEmailAddress.ts | 2 +- apps/meteor/lib/utils/isRelativeURL.ts | 1 + apps/meteor/lib/utils/isURL.ts | 4 + apps/meteor/lib/utils/secondsToHHMMSS.ts | 14 + apps/meteor/package.json | 7 +- .../rocketchat-i18n/i18n/en.i18n.json | 10152 +++++++------- .../rocketchat-i18n/i18n/pt-BR.i18n.json | 25 +- apps/meteor/server/methods/saveUserProfile.js | 7 +- .../api/server/v1/lib/isValidQuery.spec.ts | 216 + .../lib/utils/isRTLScriptLanguage.spec.ts | 30 + .../unit/lib/utils/isRelativeURL.spec.ts | 22 + .../meteor/tests/unit/lib/utils/isURL.spec.ts | 22 + .../unit/lib/utils/secondsToHHMMSS.spec.ts | 28 + .../unit}/lib/utils/stringUtils.tests.ts | 2 +- package.json | 2 +- packages/core-typings/src/Apps.ts | 1 + .../core-typings/src/IMessage/IMessage.ts | 50 +- packages/core-typings/src/IRoom.ts | 2 + ...hannelsGetAllUserMentionsByChannelProps.ts | 2 +- .../src/v1/channels/ChannelsHistoryProps.ts | 2 +- .../src/v1/channels/ChannelsMessagesProps.ts | 2 +- packages/rest-typings/src/v1/customSounds.ts | 7 +- .../rest-typings/src/v1/customUserStatus.ts | 15 +- .../rest-typings/src/v1/dm/DmFileProps.ts | 6 +- .../rest-typings/src/v1/dm/DmMembersProps.ts | 6 +- .../rest-typings/src/v1/dm/DmMessagesProps.ts | 6 +- .../integrations/IntegrationsHistoryProps.ts | 2 +- packages/rest-typings/src/v1/omnichannel.ts | 41 +- .../ui-contexts/src/ServerContext/methods.ts | 2 + packages/ui-contexts/tsconfig.json | 4 +- yarn.lock | 107 +- 209 files changed, 21205 insertions(+), 7379 deletions(-) delete mode 100644 apps/meteor/app/api/server/helpers/parseJsonQuery.js create mode 100644 apps/meteor/app/api/server/helpers/parseJsonQuery.ts delete mode 100644 apps/meteor/app/api/server/lib/custom-sounds.js delete mode 100644 apps/meteor/app/api/server/lib/custom-user-status.js create mode 100644 apps/meteor/app/api/server/lib/isValidQuery.ts delete mode 100644 apps/meteor/app/api/server/v1/custom-sounds.js create mode 100644 apps/meteor/app/api/server/v1/custom-sounds.ts rename apps/meteor/app/api/server/v1/{custom-user-status.js => custom-user-status.ts} (55%) delete mode 100644 apps/meteor/app/livechat/lib/Assets.js create mode 100644 apps/meteor/app/livechat/lib/Assets.ts rename apps/meteor/app/livechat/lib/{messageTypes.js => messageTypes.ts} (65%) rename apps/meteor/app/livechat/lib/stream/{constants.js => constants.ts} (100%) delete mode 100644 apps/meteor/app/utils/lib/isURL.js delete mode 100644 apps/meteor/app/utils/lib/timeConverter.js create mode 100644 apps/meteor/app/utils/server/functions/safeGetMeteorUser.ts delete mode 100644 apps/meteor/app/utils/stream/constants.js rename apps/meteor/client/components/Sidebar/{Content.js => Content.tsx} (82%) rename apps/meteor/client/components/Sidebar/{Header.js => Header.tsx} (73%) delete mode 100644 apps/meteor/client/components/Sidebar/ItemsAssembler.js delete mode 100644 apps/meteor/client/components/Sidebar/NavigationItem.js rename apps/meteor/client/components/Sidebar/{Sidebar.js => Sidebar.tsx} (68%) rename apps/meteor/client/components/Sidebar/{GenericItem.tsx => SidebarGenericItem.tsx} (80%) create mode 100644 apps/meteor/client/components/Sidebar/SidebarItemsAssembler.tsx create mode 100644 apps/meteor/client/components/Sidebar/SidebarNavigationItem.tsx rename apps/meteor/client/components/UserAutoCompleteMultiple/{UserAutoCompleteMultiple.js => UserAutoCompleteMultiple.tsx} (57%) rename apps/meteor/client/components/{data => dataView}/Counter.stories.tsx (100%) rename apps/meteor/client/components/{data => dataView}/Counter.tsx (100%) rename apps/meteor/client/components/{data => dataView}/CounterSet.stories.tsx (100%) rename apps/meteor/client/components/{data => dataView}/CounterSet.tsx (100%) rename apps/meteor/client/components/{data => dataView}/Growth.stories.tsx (100%) rename apps/meteor/client/components/{data => dataView}/Growth.tsx (100%) rename apps/meteor/client/components/{data => dataView}/NegativeGrowthSymbol.stories.tsx (100%) rename apps/meteor/client/components/{data => dataView}/NegativeGrowthSymbol.tsx (100%) rename apps/meteor/client/components/{data => dataView}/PositiveGrowthSymbol.stories.tsx (100%) rename apps/meteor/client/components/{data => dataView}/PositiveGrowthSymbol.tsx (100%) create mode 100644 apps/meteor/client/lib/utils/isRTLScriptLanguage.ts rename apps/meteor/{app/ui-utils/client/lib => client/lib/utils}/messageArgs.ts (100%) rename apps/meteor/client/sidebar/header/{CreateChannelWithData.js => CreateChannelWithData.tsx} (71%) rename apps/meteor/client/sidebar/header/actions/{CreateRoom.js => CreateRoom.tsx} (80%) rename apps/meteor/client/sidebar/header/actions/{CreateRoomList.js => CreateRoomList.tsx} (81%) rename apps/meteor/client/sidebar/header/actions/{Directory.js => Directory.tsx} (78%) rename apps/meteor/client/sidebar/header/actions/{Home.js => Home.tsx} (73%) rename apps/meteor/client/sidebar/header/actions/{Login.js => Login.tsx} (69%) rename apps/meteor/client/sidebar/header/actions/{Sort.js => Sort.tsx} (73%) rename apps/meteor/client/sidebar/header/{index.js => index.tsx} (90%) rename apps/meteor/client/views/account/{sidebarItems.js => sidebarItems.ts} (69%) rename apps/meteor/client/views/admin/settings/inputs/{AssetSettingInput.css => AssetSettingInput.styles.css} (100%) rename apps/meteor/client/views/omnichannel/agents/{AddAgent.js => AddAgent.tsx} (72%) rename apps/meteor/client/views/omnichannel/agents/{AgentEditWithData.js => AgentEditWithData.tsx} (76%) rename apps/meteor/client/views/omnichannel/agents/{AgentInfo.js => AgentInfo.tsx} (63%) delete mode 100644 apps/meteor/client/views/omnichannel/agents/AgentInfoAction.js create mode 100644 apps/meteor/client/views/omnichannel/agents/AgentInfoAction.tsx rename apps/meteor/client/views/omnichannel/agents/{AgentInfoActions.js => AgentInfoActions.tsx} (68%) delete mode 100644 apps/meteor/client/views/omnichannel/agents/AgentsPage.js create mode 100644 apps/meteor/client/views/omnichannel/agents/AgentsPage.tsx rename apps/meteor/client/views/omnichannel/agents/{AgentsRoute.js => AgentsRoute.tsx} (71%) rename apps/meteor/client/views/omnichannel/agents/{RemoveAgentButton.js => RemoveAgentButton.tsx} (77%) rename apps/meteor/client/views/omnichannel/installation/{Installation.js => Installation.tsx} (87%) rename apps/meteor/client/views/omnichannel/installation/{Wrapper.js => Wrapper.tsx} (72%) rename apps/meteor/client/views/omnichannel/{sidebarItems.js => sidebarItems.ts} (53%) rename apps/meteor/ee/client/views/admin/engagementDashboard/{data => dataView}/DownloadDataButton.tsx (91%) rename apps/meteor/ee/client/views/admin/engagementDashboard/{data => dataView}/LegendSymbol.stories.tsx (100%) rename apps/meteor/ee/client/views/admin/engagementDashboard/{data => dataView}/LegendSymbol.tsx (100%) rename apps/meteor/ee/client/views/admin/engagementDashboard/{data => dataView}/PeriodSelector.tsx (92%) rename apps/meteor/ee/client/views/admin/engagementDashboard/{data => dataView}/colors.ts (100%) rename apps/meteor/ee/client/views/admin/engagementDashboard/{data => dataView}/periods.ts (96%) rename apps/meteor/ee/client/views/admin/engagementDashboard/{data => dataView}/usePeriodLabel.ts (80%) rename apps/meteor/ee/client/views/admin/engagementDashboard/{data => dataView}/usePeriodSelectorState.ts (100%) create mode 100644 apps/meteor/lib/utils/isRelativeURL.ts create mode 100644 apps/meteor/lib/utils/isURL.ts create mode 100644 apps/meteor/lib/utils/secondsToHHMMSS.ts create mode 100644 apps/meteor/tests/unit/app/api/server/v1/lib/isValidQuery.spec.ts create mode 100644 apps/meteor/tests/unit/client/lib/utils/isRTLScriptLanguage.spec.ts create mode 100644 apps/meteor/tests/unit/lib/utils/isRelativeURL.spec.ts create mode 100644 apps/meteor/tests/unit/lib/utils/isURL.spec.ts create mode 100644 apps/meteor/tests/unit/lib/utils/secondsToHHMMSS.spec.ts rename apps/meteor/{ => tests/unit}/lib/utils/stringUtils.tests.ts (90%) diff --git a/.github/history-manual.json b/.github/history-manual.json index 36e399bf4ab5d..b89cc95d0f637 100644 --- a/.github/history-manual.json +++ b/.github/history-manual.json @@ -124,6 +124,20 @@ "pierre-lehnen-rc" ] }], + "3.18.6": [{ + "title": "[FIX] Security Hotfix (https://docs.rocket.chat/guides/security/security-updates)", + "userLogin": "d-gubert", + "contributors": [ + "ggazzo" + ] + }], + "3.18.7": [{ + "title": "[FIX] Security Hotfix (https://docs.rocket.chat/guides/security/security-updates)", + "userLogin": "d-gubert", + "contributors": [ + "ggazzo" + ] + }], "4.1.1": [{ "title": "[FIX] Security Hotfix (https://docs.rocket.chat/guides/security/security-updates)", "userLogin": "sampaiodiego", @@ -147,5 +161,33 @@ "contributors": [ "gronke" ] + }], + "4.4.4": [{ + "title": "[FIX] Security Hotfix (https://docs.rocket.chat/guides/security/security-updates)", + "userLogin": "d-gubert", + "contributors": [ + "ggazzo" + ] + }], + "4.4.5": [{ + "title": "[FIX] Security Hotfix (https://docs.rocket.chat/guides/security/security-updates)", + "userLogin": "d-gubert", + "contributors": [ + "ggazzo" + ] + }], + "4.7.3": [{ + "title": "[FIX] Security Hotfix (https://docs.rocket.chat/guides/security/security-updates)", + "userLogin": "d-gubert", + "contributors": [ + "ggazzo" + ] + }], + "4.7.4": [{ + "title": "[FIX] Security Hotfix (https://docs.rocket.chat/guides/security/security-updates)", + "userLogin": "d-gubert", + "contributors": [ + "ggazzo" + ] }] } diff --git a/.github/history.json b/.github/history.json index 22a00de43d9bf..4999aea0a0f92 100644 --- a/.github/history.json +++ b/.github/history.json @@ -74398,6 +74398,11651 @@ "5.0" ], "pull_requests": [] + }, + "4.8.0-rc.0": { + "node_version": "14.18.3", + "npm_version": "6.14.15", + "mongo_versions": [ + "3.6", + "4.0", + "4.2", + "4.4", + "5.0" + ], + "pull_requests": [ + { + "pr": "25617", + "title": "Chore: Update Apps-Engine version", + "userLogin": "d-gubert", + "milestone": "4.8.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "25616", + "title": "[FIX] Message menu dropdown not working on Mobile Web", + "userLogin": "gabriellsh", + "milestone": "4.8.0", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25615", + "title": "[FIX] Fixing app contextual bar functionality", + "userLogin": "AllanPazRibeiro", + "milestone": "4.8.0", + "contributors": [ + "AllanPazRibeiro" + ] + }, + { + "pr": "25499", + "title": "[NEW] New button for network outage", + "userLogin": "amolghode1981", + "description": "When network outage happens it should be conveyed to the user with special icon. This icon should not be clickable.\r\nNetwork outage handling is handled in https://app.clickup.com/t/245c0d8 task.", + "contributors": [ + "amolghode1981" + ] + }, + { + "pr": "24711", + "title": "[NEW] Marketplace new app details page", + "userLogin": "rique223", + "description": "Change the app details page layout for the new marketplace UI. General Task: [MKP12 - New UI - App Detail Page](https://app.clickup.com/t/1na769h)\r\n\r\n## [MKP12 - Tab Navigation](https://app.clickup.com/t/2452f5u)\r\nNew tab navigation layout for the app details page. Now the app details page is divided into three sections, details, logs, and settings, that can each be accessed through a Tabs fuselage component.\r\n\r\nDemo gif:\r\n![tab_navigation_demo_gif](https://user-images.githubusercontent.com/43561537/157276436-3dab34c5-20da-4f5d-99d0-54c1c718ac1f.gif)\r\n\r\n## [MKP12 - Header](https://app.clickup.com/t/25rhm0x)\r\nImplemented a new header for the marketplaces app details page.\r\n-Changed the size of the app name;\r\n-Implemented the app description field on the header;\r\n-Changed the \"metadata\" section of the header(The part with the version and author information) now it also shows the last time the app was updated;\r\n-Created a chip that will show when an app is part of one or more bundles and inform which are the bundles;\r\n-Implemented a tooltip for the bundle chips;\r\n-Created a new button + data badge component to substitute the current App Status;\r\n-Changed the title of the \"purchase button\". Now it shows different text based on the \"purchase type\" of the app;\r\n-Created a new Pricing & Status display which shows the price when the app is not bought/installed and shows the app status(Enabled/Disabled) when it is bought/installed;\r\n-Changed the way the tabs are rendered, now if the app is not installed(and consequently doesn't have logs and settings tab) it will not render these tabs;\r\n\r\nDemo gif:\r\n![new-header-gif](https://user-images.githubusercontent.com/43561537/159064599-fd64dfe2-86a3-47da-81ba-1e83f1b87432.gif)\r\n\r\n## [MKP12 - Configuration Tab](https://app.clickup.com/t/2452gh4)\r\nDelivered together with the tab-navigation task. Changed the app settings from the details of the app to the new settings tab.\r\nDemo image:\r\n![New configuration tab](https://user-images.githubusercontent.com/43561537/160211324-95db0566-85bf-4dde-a814-3c6f23dcee4d.png)\r\n\r\n## [MKP12 - Log Tab](https://app.clickup.com/t/2452gg1)\r\nChanged the place of the app logs from the page to the new logs tab. Also changed some styles of the logs accordions to fit better with the new container.\r\n\r\nBefore:\r\n![Before](https://user-images.githubusercontent.com/43561537/160210302-148ce584-604f-40ff-8209-141667016163.png)\r\n\r\nAfter\r\n![After](https://user-images.githubusercontent.com/43561537/160210984-d4060c5a-f912-4ef9-87e3-fa459080e2d4.png)\r\n\r\n## [MKP12 - Page Header](https://app.clickup.com/t/29b0b12)\r\nChanged the design for the page header of the app details page from a title on the left with a save and back button on the right to a back arrow icon on the left side of the title with the save button still on the right. Also changed the title of the page from App details to Back.\r\nEdit: After some design reconsideration, the page title was changed to App Info.\r\nDemo gif:\r\n![new_page_header_app_details](https://user-images.githubusercontent.com/43561537/160937741-f5514f70-f43b-4400-8b2f-a5a26f95de9d.gif)\r\n\r\n## [MKP12 - Detail Tab](https://app.clickup.com/t/2452gf7)\r\nImplemented markdown on the description section of the app details page, now the description will show the detailedDescription.rendered (as rendered JSX) information in case it exists and show the description (a.k.a. short description) information in case it doesn't. Unfortunately, as of right now no app has a visual example of a markdown description and because of that, I will not be able to provide a demo image/gif for this PR.\r\n\r\n## [MKP12 - Slider Component](https://app.clickup.com/t/2452h26)\r\nCreated an image carousel component on the app details page. This component receives images from the apps/appId/screenshots endpoint and shows them on the content section of the app details of any apps that have screenshots registered, if the app has no screenshots it simply shows nothing where the carousel should be. This component is complete with keyboard arrow navigation on the \"open\" carousel, hover highlight on the carousel preview and close on esc press.\r\nDemo gif:\r\n![new_carousel_component](https://user-images.githubusercontent.com/43561537/167415212-9d8359c7-4132-4afa-a698-8be4ab1e1393.gif)", + "milestone": "4.8.0", + "contributors": [ + "rique223", + "web-flow", + "ggazzo", + "dougfabris" + ] + }, + { + "pr": "25108", + "title": "[IMPROVE] Unify voip streams into single stream", + "userLogin": "KevLehman", + "milestone": "4.8.0", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "25444", + "title": "[FIX] Removing user also removes them from Omni collections", + "userLogin": "cauefcr", + "contributors": [ + "cauefcr", + "web-flow", + "KevLehman" + ] + }, + { + "pr": "25398", + "title": "[FIX] Upgrade tab loader in incorrect position", + "userLogin": "guijun13", + "description": "- Add invisible prop to iframe when loading state is active.", + "milestone": "4.8.0", + "contributors": [ + "guijun13", + "tassoevan" + ] + }, + { + "pr": "25436", + "title": "[NEW] Ability for RC server to check the business hour for a specific department", + "userLogin": "murtaza98", + "milestone": "4.8.0", + "contributors": [ + "murtaza98", + "tiagoevanp" + ] + }, + { + "pr": "25606", + "title": "Chore: Code Improvements for #25391", + "userLogin": "MartinSchoeler", + "milestone": "4.8.0", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "25604", + "title": "[FIX] useCurrentChatTags is not a function", + "userLogin": "MartinSchoeler", + "milestone": "4.8.0", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "25535", + "title": "[FIX] Pinned Message display cutting off information", + "userLogin": "hugocostadev", + "milestone": "4.8.0", + "contributors": [ + "hugocostadev", + "gabriellsh" + ] + }, + { + "pr": "25290", + "title": "Chore: Dependencies upgrade", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25605", + "title": "Chore: bump fuselage", + "userLogin": "dougfabris", + "milestone": "4.8.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25457", + "title": "[NEW] Federation (Alpha Stabilization)", + "userLogin": "alansikora", + "milestone": "4.8.0", + "contributors": [ + "alansikora", + "MarcosSpessatto", + "web-flow", + "geekgonecrazy" + ] + }, + { + "pr": "24519", + "title": "Chore: Convert to typescript some functions from app/lib/server/functions", + "userLogin": "eduardofcabrera", + "description": "Convert to typescript some functions from app/lib/server/functions and transfered theses files to server/lib", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "25329", + "title": "[NEW] Add option to show mentions badge when show counter is disabled", + "userLogin": "marceloschmidt", + "contributors": [ + "marceloschmidt", + "web-flow", + "ggazzo" + ] + }, + { + "pr": "25391", + "title": "[FIX] Fixing Network connectivity issues with SIP client.", + "userLogin": "amolghode1981", + "description": "The previous PR https://github.com/RocketChat/Rocket.Chat/pull/25170 did not handle the issues completely.\r\nThis PR is expected to handle\r\n1. Clearing call related UI when the network is disconnected or switched.\r\n2. Do clean connectivity. There were few issues discovered in earlier implementation. e.g endpoint would randomly\r\nget disconnected after a while. This was due to the fact that the earlier socket disconnection caused the\r\nremoval of contact on asterisk. This should be fixed in this PR.\r\n3. This PR contains a lot of logs. This will be removed before the final merge.", + "milestone": "4.8.0", + "contributors": [ + "amolghode1981" + ] + }, + { + "pr": "25494", + "title": "[FIX] Ordered and unordered list styles, Line breaks.", + "userLogin": "gabriellsh", + "description": "Also removed the message.md cache from server, since changes in the parser might break messages in the future (and will in this specific case).", + "milestone": "4.8.0", + "contributors": [ + "gabriellsh", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "25592", + "title": "Chore: Convert slashCommands to typescript", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "eduardofcabrera", + "ostjen", + "web-flow" + ] + }, + { + "pr": "25514", + "title": "[NEW] Get user's preferred language via apps", + "userLogin": "murtaza98", + "contributors": [ + "murtaza98", + "d-gubert" + ] + }, + { + "pr": "25383", + "title": "[NEW] Star message, report and delete message events", + "userLogin": "tapiarafael", + "contributors": [ + "tapiarafael", + "d-gubert" + ] + }, + { + "pr": "25234", + "title": "[NEW] Add new events after user login, logout and change his status", + "userLogin": "tapiarafael", + "contributors": [ + "tapiarafael", + "d-gubert" + ] + }, + { + "pr": "25337", + "title": "[NEW] Add new app events for pin, react and follow message", + "userLogin": "tapiarafael", + "contributors": [ + "tapiarafael", + "d-gubert" + ] + }, + { + "pr": "25591", + "title": "Chore: Convert AutoTranslate", + "userLogin": "PedroRorato", + "contributors": [ + "PedroRorato" + ] + }, + { + "pr": "25582", + "title": "Chore: Migrate retention-policy to ts", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24307", + "title": "Chore: Convert to typescript the slash commands help files", + "userLogin": "eduardofcabrera", + "description": "Convert to typescript the slash commands help files", + "contributors": [ + "eduardofcabrera", + "web-flow", + "pierre-lehnen-rc" + ] + }, + { + "pr": "25589", + "title": "Chore: Convert Create Channel", + "userLogin": "juliajforesti", + "contributors": [ + null + ] + }, + { + "pr": "25586", + "title": "Chore: Convert additionalForms", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "MartinSchoeler" + ] + }, + { + "pr": "25425", + "title": "Chore: Rewrite autotranslate to ts", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "25165", + "title": "[NEW] Add user events for apps", + "userLogin": "tapiarafael", + "contributors": [ + "tapiarafael", + "d-gubert" + ] + }, + { + "pr": "25283", + "title": "[FIX] Integrations avatar attribute misuse", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "25367", + "title": "Chore: Converting orchestrator.js to ts", + "userLogin": "AllanPazRibeiro", + "contributors": [ + "AllanPazRibeiro" + ] + }, + { + "pr": "25504", + "title": "Chore: convert marketplace price display component to use typescript", + "userLogin": "matheuslc", + "description": "**Marketplace apps listing page**\r\n![Screen Shot 2022-05-13 at 12 57 43](https://user-images.githubusercontent.com/4161171/168322189-67990fdf-a447-46dc-8f88-08b16c2a5416.png)\r\n\r\n**Apps detail page**\r\n![Screen Shot 2022-05-13 at 12 58 56](https://user-images.githubusercontent.com/4161171/168322241-505ee5bb-d3d8-4b0e-8757-873a1a65a6a6.png)", + "contributors": [ + "matheuslc" + ] + }, + { + "pr": "25554", + "title": "Chore: Convert apps/meteor/client/components/UserAutoComplete", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti", + "ggazzo" + ] + }, + { + "pr": "25544", + "title": "[FIX] Initial User not added to default channel", + "userLogin": "geekgonecrazy", + "description": "If injecting initial user. The user wasn’t added to the default General channel", + "milestone": "4.7.2", + "contributors": [ + "geekgonecrazy", + "web-flow" + ] + }, + { + "pr": "25078", + "title": "[NEW] New stats rewrite", + "userLogin": "ostjen", + "description": "Add the following new statistics (**metrics**):\r\n\r\n- Total users with TOTP enabled;\r\n- Total users with 2FA enabled;\r\n- Total pinned messages;\r\n- Total starred messages;\r\n- Total email messages;\r\n- Total rooms with at least one starred message;\r\n- Total rooms with at least one pinned message;\r\n- Total encrypted rooms;\r\n- Total link invitations;\r\n- Total email invitations;\r\n- Logo change;\r\n- Number of custom script lines;\r\n- Number of custom CSS lines;\r\n- Number of rooms inside teams;\r\n- Number of default (auto-join) rooms inside teams;\r\n- Number of users created through link invitation;\r\n- Number of users created through manual entry;\r\n- Number of imported users (by import type);", + "contributors": [ + "ostjen", + "matheusbsilva137", + "sampaiodiego" + ] + }, + { + "pr": "25565", + "title": "Chore: Convert apps/meteor/client/views/admin/settings", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti" + ] + }, + { + "pr": "25520", + "title": "[FIX] User abandonment setting was not working doe to failing event hook", + "userLogin": "cauefcr", + "description": "A setting watcher and the query for grabbing abandoned chats were broken, now they're not.", + "milestone": "4.7.2", + "contributors": [ + "cauefcr", + "tiagoevanp" + ] + }, + { + "pr": "25558", + "title": "Test: Migrate 13-permissions from cypress to playwright", + "userLogin": "souzaramon", + "contributors": [ + "souzaramon" + ] + }, + { + "pr": "25445", + "title": "[FIX] Add open user card to user avatar", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins" + ] + }, + { + "pr": "25495", + "title": "[FIX] Dynamic load matrix is enabled and handle failure ", + "userLogin": "ggazzo", + "milestone": "4.7.2", + "contributors": [ + "ggazzo", + "geekgonecrazy" + ] + }, + { + "pr": "25409", + "title": "[FIX] One of the triggers was not working correctly", + "userLogin": "MartinSchoeler", + "milestone": "4.7.2", + "contributors": [ + "MartinSchoeler", + "tiagoevanp" + ] + }, + { + "pr": "25555", + "title": "Regression: CI services build", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25381", + "title": "Chore: User set UTC offset", + "userLogin": "albuquerquefabio", + "contributors": [ + "albuquerquefabio", + "web-flow" + ] + }, + { + "pr": "24612", + "title": "[FIX] Rooms' names turn lower case on CSV import", + "userLogin": "guijun13", + "description": "* Change 'Settings' import to not get cached configs\r\n* Remove update `UI_Allow_room_names_with_special_chars` value", + "contributors": [ + "guijun13" + ] + }, + { + "pr": "25542", + "title": "Chore: migrate-to-pw-adjust-in-intermitences", + "userLogin": "weslley543", + "contributors": [ + "weslley543" + ] + }, + { + "pr": "23849", + "title": "[IMPROVE][ENTERPRISE] Allow mapping LDAP groups to multiple RC roles", + "userLogin": "matheusbsilva137", + "description": "- Add support to mapping LDAP groups to multiple roles (by specifying arrays in the \"User Data Group Map\" enterprise setting.", + "contributors": [ + "matheusbsilva137", + "pierre-lehnen-rc" + ] + }, + { + "pr": "25522", + "title": "Chore: Livechat change output level", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25326", + "title": "[NEW] Adding app button on user dropdown", + "userLogin": "AllanPazRibeiro", + "contributors": [ + "AllanPazRibeiro", + "d-gubert", + "web-flow" + ] + }, + { + "pr": "25523", + "title": "Chore: migrate from cypress to pw 14-setting-permission", + "userLogin": "weslley543", + "contributors": [ + "weslley543" + ] + }, + { + "pr": "25253", + "title": "Chore: Tests with Playwright (task: ROC-31, 12-settings)", + "userLogin": "souzaramon", + "contributors": [ + "souzaramon", + "web-flow" + ] + }, + { + "pr": "25462", + "title": "Chore: Migrate 15-message-popup from cypress to playwright", + "userLogin": "souzaramon", + "contributors": [ + "souzaramon" + ] + }, + { + "pr": "25427", + "title": "Chore: Convert apps/meteor/client/views/admin/settings/inputs folder", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti" + ] + }, + { + "pr": "25407", + "title": "[FIX] UI/UX issues on Live Chat widget", + "userLogin": "MartinSchoeler", + "milestone": "4.7.2", + "contributors": [ + "MartinSchoeler", + "dougfabris" + ] + }, + { + "pr": "25348", + "title": "Chore: Convert Admin -> Rooms to TS", + "userLogin": "yash-rajpal", + "contributors": [ + "yash-rajpal", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "25509", + "title": "Chore: Migrate NotFoundPage to TS", + "userLogin": "hugocostadev", + "contributors": [ + "hugocostadev" + ] + }, + { + "pr": "25412", + "title": "[FIX] Unable to see channel member list by authorized channel roles", + "userLogin": "hugocostadev", + "contributors": [ + "hugocostadev" + ] + }, + { + "pr": "25519", + "title": "Regression: Fix services-image-build-check", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "25507", + "title": "Chore: Migrate spotify to ts", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "25508", + "title": "Chore: Reorder unreleased migrations", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "25471", + "title": "[FIX] Spotlight results showing usernames instead of real names", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.7.1", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "25434", + "title": "[FIX] LDAP sync removing users from channels when multiple groups are mapped to it", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.7.1", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "25413", + "title": "Chore: Move markdown message parser to a `callback`", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25448", + "title": "[FIX] Settings listeners not receiving overwritten values from env vars", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "25246", + "title": "Chore: Move ddp-streamer micro service to its own sub-repo", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25441", + "title": "[NEW] Use setting to determine if initial general channel is needed", + "userLogin": "felipe-menelau", + "description": "- Adds flag responsible for overwriting #general channel creation", + "milestone": "4.7.1", + "contributors": [ + "felipe-menelau", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "25439", + "title": "[IMPROVE] New admin settings Page", + "userLogin": "dougfabris", + "description": "![Screen Shot 2022-05-09 at 11 31 58](https://user-images.githubusercontent.com/27704687/167432811-f4970f23-5dae-48a0-a427-92269d08a859.png)", + "milestone": "4.8.0", + "contributors": [ + "dougfabris", + "ggazzo" + ] + }, + { + "pr": "25473", + "title": "[FIX] Failure to update Integration History index", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "25285", + "title": "Chore: Rewrite 2fa to typescript", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "25468", + "title": "Chore: solve yarn issues from env var", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25446", + "title": "Chore: REST query and body params validation", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25416", + "title": "Chore: Tests with Playwright (task: ROC-66, Intermittent resolution in tests)", + "userLogin": "weslley543", + "contributors": [ + "weslley543", + "souzaramon" + ] + }, + { + "pr": "25298", + "title": "Chore: Convert email inbox feature to TypeScript", + "userLogin": "ujorgeleite", + "contributors": [ + "ujorgeleite", + "albuquerquefabio", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "25442", + "title": "Chore: Move admin sidebarItems registration to the main file", + "userLogin": "dougfabris", + "milestone": "4.8.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25449", + "title": "[FIX] Sanitize customUserStatus and fix infinite loop", + "userLogin": "dougfabris", + "description": "### Additional improves:\r\n- usage of RHF to avoid unnecessary Add and Edit components separately and form validation\r\n- usage of `GenericTableV2` and some hooks to avoid unnecessary code\r\n- fix `IUserStatus` type\r\n- improves in UI design\r\n- improves **empty** and **loading** state\r\n- improves files structure\r\n\r\n[LOOP ERROR ATTACHMENT]\r\n![Screen Shot 2022-05-09 at 19 42 53](https://user-images.githubusercontent.com/27704687/167510439-1980461c-a885-46d2-9a49-79da432c7521.png)", + "milestone": "4.8.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25318", + "title": "[IMPROVE] Fix multiple bugs with Matrix bridge", + "userLogin": "MarcosSpessatto", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "25265", + "title": "Chore: Convert `UserStatusMenu` to TS", + "userLogin": "debdutdeb", + "contributors": [ + "debdutdeb", + "tassoevan" + ] + }, + { + "pr": "25443", + "title": "Chore: Chore add validation option to rest endpoints", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25279", + "title": "Chore: Add channel endpoints (rest-typings)", + "userLogin": "debdutdeb", + "contributors": [ + "debdutdeb", + "ggazzo" + ] + }, + { + "pr": "25432", + "title": "Chore: Dedicated package for UI contexts", + "userLogin": "tassoevan", + "description": "Moving our React contexts to a different package on the monorepo enable us to deliver components from another packages, because they work as a loose connection to the core APIs.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "25424", + "title": "Chore: Convert RoomForeword, TextCopy and RoomAvatarEditor to TS", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25418", + "title": "Chore: Rewrite action-links to ts", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "25421", + "title": "Chore: Rewrite mail-messages to ts", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "25430", + "title": "Chore: Convert useUpdateAvatar to TS and type avatar endpoints", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25423", + "title": "[FIX] Change NPS Vote identifier + nps index to unique", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "22374", + "title": "[IMPROVE] Pass allowDiskUse to channel aggregations on engagement dashboard", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "25431", + "title": "Chore: Manager Page Rewrite", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler", + "ggazzo" + ] + }, + { + "pr": "25426", + "title": "Chore: Convert useFileInput to TS", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25420", + "title": "Chore: convert info to typescript", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins" + ] + }, + { + "pr": "25395", + "title": "Chore: Enable marketplace screenshots endpoint", + "userLogin": "matheuslc", + "contributors": [ + "matheuslc", + "web-flow" + ] + }, + { + "pr": "25312", + "title": "Chore: Add Livechat repo into Monorepo packages", + "userLogin": "tiagoevanp", + "milestone": "4.7.2", + "contributors": [ + "tiagoevanp", + "ggazzo", + "web-flow", + "MartinSchoeler" + ] + }, + { + "pr": "25303", + "title": "Chore: Rewrite Jitsi Contextualbar to TS", + "userLogin": "dougfabris", + "milestone": "4.8.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25372", + "title": "Chore: Convert AdminSideBar to ts", + "userLogin": "jeanfbrito", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25347", + "title": "Chore: Convert push endpoints to TS", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25397", + "title": "Chore: Add client folder to CODEOWNERS ", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25394", + "title": "Chore: Update Volta configuration", + "userLogin": "tassoevan", + "description": "[Volta](https://volta.sh/) need some extra configuration to work on monorepos.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "25359", + "title": "Chore: Rewrite some Omnichannel files to TypeScript", + "userLogin": "tiagoevanp", + "description": "apps/meteor/client/components/Omnichannel/modals/*\r\napps/meteor/client/components/Omnichannel/Tags.js", + "contributors": [ + "tiagoevanp", + "ggazzo" + ] + }, + { + "pr": "25288", + "title": "Chore: Convert customUserStatus folder to ts", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti" + ] + }, + { + "pr": "25343", + "title": "Chore: Convert federationDashboard folder to ts", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti" + ] + }, + { + "pr": "25252", + "title": "Chore: Tests with Playwright (task: ROC-25, 06-message)", + "userLogin": "weslley543", + "contributors": [ + "weslley543", + "web-flow", + "ggazzo" + ] + }, + { + "pr": "25345", + "title": "Chore: Convert client/views/admin/settings/groups folder to ts", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti" + ] + }, + { + "pr": "25342", + "title": "Chore: Convert getStatistics", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25276", + "title": "Chore: Add typings for /v1/webdav.getMyAccounts", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "25274", + "title": "Chore: Convert customSounds folder to ts", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti", + "dougfabris", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "25277", + "title": "Chore: Convert Admin/OAuthApps to TS", + "userLogin": "yash-rajpal", + "description": "- Converts Admin/OAuthApps to TS.\r\n- migrated forms to react-hook-form", + "contributors": [ + "yash-rajpal", + "felipe-rod123", + "ggazzo" + ] + }, + { + "pr": "25278", + "title": "Chore: Add /v1/video-conference endpoint types", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "pierre-lehnen-rc", + "ggazzo" + ] + }, + { + "pr": "25380", + "title": "Regression: Fix clicking on visitor's chat in the sidebar does not display the chat window", + "userLogin": "filipemarins", + "description": "Fix: livechat room not opening.", + "milestone": "4.7.0", + "contributors": [ + "filipemarins" + ] + }, + { + "pr": "25314", + "title": "Regression: Fix size of custom emoji and render emoji on thread message preview", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins", + "gabriellsh" + ] + }, + { + "pr": "25371", + "title": "Chore: Bump fuselage", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25336", + "title": "Chore: Add options to debug stdout and rate limiter", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25368", + "title": "Regression: Fix English i18n react text", + "userLogin": "d-gubert", + "description": "Incorrect text in reaction tooltip has been fixed", + "milestone": "4.7.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "25349", + "title": "Regression: Rocket.Chat Webapp not loading.", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc", + "gabriellsh" + ] + }, + { + "pr": "25317", + "title": "Regression: Fix multi line is not showing an empty line between lines", + "userLogin": "filipemarins", + "milestone": "4.7.0", + "contributors": [ + "filipemarins", + "gabriellsh" + ] + }, + { + "pr": "25320", + "title": "Regression: bump onboarding-ui version", + "userLogin": "guijun13", + "description": "- Bump to 'next' the onboarding-ui package from fuselage.\r\n- Update from 'companyEmail' to 'email' adminData usage types", + "contributors": [ + "guijun13" + ] + }, + { + "pr": "25335", + "title": "Chore: Create README.md for Rest Typings", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "web-flow" + ] + }, + { + "pr": "25327", + "title": "Regression: Messages in new message template Crashing.", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25323", + "title": "Regression: Better MongoDB connection management for micro services", + "userLogin": "sampaiodiego", + "milestone": "4.7.0", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25250", + "title": "Regression: Validate empty fields for Message template", + "userLogin": "gabriellsh", + "milestone": "4.8.0", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25319", + "title": "Regression: Fix the alpine image and dev UX installing matrix-rust-sdk-bindings", + "userLogin": "geekgonecrazy", + "description": "The package only included a few pre-built which caused all macs to have to compile every time they installed and also caused our alpine not to work.\r\n\r\nThis temporarily switches to a fork of the matrix-appservice-bridge package.\r\n\r\nMade changes to one of its child dependencies `matrix-rust-sdk-bindings` that adds pre-built binaries for mac and musl (for alpine).", + "milestone": "4.7.0", + "contributors": [ + "geekgonecrazy", + "web-flow", + "d-gubert" + ] + }, + { + "pr": "25255", + "title": "Regression: Change preference to be default legacy messages", + "userLogin": "gabriellsh", + "milestone": "4.8.0", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25306", + "title": "Regression: Fix reply button not working when hideFlexTab is enabled", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins", + "gabriellsh" + ] + }, + { + "pr": "25311", + "title": "Regression: Add eslint package to micro services Dockerfile", + "userLogin": "sampaiodiego", + "milestone": "4.7.0", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25218", + "title": "Chore: ensure scripts use cross-env and ignore some dirs (ROC-54)", + "userLogin": "souzaramon", + "description": "- data and test-failure should be ignored\r\n- ensure scripts use cross-env", + "contributors": [ + "souzaramon" + ] + }, + { + "pr": "25313", + "title": "Regression: Revert Bugsnag version", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25305", + "title": "Regression: eslint not running on packages", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc", + "ggazzo" + ] + }, + { + "pr": "25299", + "title": "Regression: Add `isPending` status to message", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins" + ] + }, + { + "pr": "25301", + "title": "Regression: Shows error if micro service cannot connect to Mongo", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25287", + "title": "Regression: Use exact Node version on micro services Docker images", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25286", + "title": "Chore: Add root package.json to houston files", + "userLogin": "d-gubert", + "description": "See title", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "25284", + "title": "Chore: Sync with master", + "userLogin": "d-gubert", + "contributors": [ + "sampaiodiego", + "d-gubert", + "web-flow" + ] + }, + { + "pr": "25269", + "title": "Chore: Minor dependency updates", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "25224", + "title": "Chore: Add yarn plugin to check node and yarn version", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "web-flow" + ] + }, + { + "pr": "25280", + "title": "Chore: Remove package-lock.json from houston files", + "userLogin": "d-gubert", + "description": "Houston config in the `package.json` file still mentioned `package-lock.json`, but it doesn't exist anymore", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "25260", + "title": "[FIX] Adjust email label in Setup Wizard i18n files", + "userLogin": "guijun13", + "description": "- remove 'Company' label on onboarding email keys in certain languages", + "contributors": [ + "guijun13" + ] + }, + { + "pr": "25275", + "title": "Chore: Fix return type warnings", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23870", + "title": "[NEW] Expand Apps Engine's environment variable allowed list", + "userLogin": "cuonghuunguyen", + "milestone": "4.7.0", + "contributors": [ + null, + "debdutdeb", + "web-flow", + "cuonghuunguyen", + "dougfabris" + ] + }, + { + "pr": "25273", + "title": "Regression: Fix federation Matrix bridge startup", + "userLogin": "sampaiodiego", + "milestone": "4.7.0", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25092", + "title": "[FIX] Message preview not available for queued chats", + "userLogin": "murtaza98", + "milestone": "4.7.0", + "contributors": [ + "murtaza98", + "KevLehman" + ] + }, + { + "pr": "23688", + "title": "[NEW] Alpha Matrix Federation", + "userLogin": "alansikora", + "description": "Experimental support for Matrix Federation with a Bridge\r\n\r\nhttps://user-images.githubusercontent.com/51996/164530391-e8b17ecd-a4d0-4ef8-a8b7-81230c1773d3.mp4", + "milestone": "4.7.0", + "contributors": [ + "alansikora", + "geekgonecrazy", + "MarcosSpessatto", + "rodrigok" + ] + }, + { + "pr": "25259", + "title": "Chore: Bump Fuselage packages", + "userLogin": "dougfabris", + "milestone": "4.7.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25261", + "title": "[FIX] Incorrect websocket url in livechat widget", + "userLogin": "debdutdeb", + "milestone": "4.7.0", + "contributors": [ + "debdutdeb" + ] + }, + { + "pr": "25007", + "title": "[FIX] Showing Blank Message Inside Report", + "userLogin": "nishant23122000", + "description": "https://user-images.githubusercontent.com/53515714/161038085-4a86c7ae-6751-4996-9767-b1c9e0331a6c.mp4", + "contributors": [ + "nishant23122000" + ] + }, + { + "pr": "25251", + "title": "Regression: Add select message to system message and thread preview and allow select on legacy template", + "userLogin": "filipemarins", + "milestone": "4.7.0", + "contributors": [ + "filipemarins", + "ggazzo", + "web-flow", + "gabriellsh", + "dougfabris" + ] + }, + { + "pr": "25239", + "title": "[FIX] Add katex render to new message react template", + "userLogin": "filipemarins", + "milestone": "4.7.0", + "contributors": [ + "filipemarins", + "ggazzo", + "dougfabris" + ] + }, + { + "pr": "25257", + "title": "Chore: Update Livechat to the last version", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "24515", + "title": "[FIX] Custom sound error toast messages", + "userLogin": "Himanshu664", + "milestone": "4.7.0", + "contributors": [ + "Himanshu664", + "dougfabris" + ] + }, + { + "pr": "25211", + "title": "Regression: Avatar not loading on first direct message", + "userLogin": "filipemarins", + "description": "fix avatar not loading on a first direct message", + "milestone": "4.7.0", + "contributors": [ + "filipemarins", + "ggazzo" + ] + }, + { + "pr": "25254", + "title": "Regression: Show username and real name on the message system", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins" + ] + }, + { + "pr": "25217", + "title": "[IMPROVE] Performance for some Omnichannel features", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "25200", + "title": "[FIX] room creation fails if app framework is disabled", + "userLogin": "debdutdeb", + "milestone": "4.7.0", + "contributors": [ + "debdutdeb" + ] + }, + { + "pr": "24565", + "title": "[IMPROVE] Add OTR Room States", + "userLogin": "yash-rajpal", + "description": "Earlier OTR room uses only 2 states, we need more states to support future features. \r\nThis adds more states for the OTR contextualBar.\r\n\r\n- Expired\r\n\"Screen\r\n\r\n- Declined\r\nScreen Shot 2022-04-20 at 13 49 28\r\n\r\n- Error\r\n\"Screen", + "milestone": "4.7.0", + "contributors": [ + "yash-rajpal", + "dougfabris" + ] + }, + { + "pr": "25170", + "title": "[FIX] Client disconnection on network loss", + "userLogin": "amolghode1981", + "description": "Agent gets disconnected (or Unregistered) from asterisk in multiple ways. The goal is that agent should remain online\r\nunless agent explicitly logs off.\r\nAgent can stop receiving calls in multiple ways due to network loss. Network loss can happen in following ways.\r\n1. User tries to switch the network. User experiences a glitch of disconnectivity. This can be simulated by turning the network off\r\nin the network tab of chrome's dev tool. This can disconnect the UA if the disconnection happens just before the registration refresh.\r\n2. Second reason is when computer goes in sleep mode.\r\n3. Third reason is that when asterisk is crashed/in maintenance mode/explicitly stopped.\r\n\r\nSolution:\r\nThe idea is to detect the network disconnection and start the start the attempts to reconnect.\r\nThe detection of the disconnection does not happen in case#1. The SIPUA's UserAgent transport does not\r\ncall onDisconnected when network loss of such kind happens. To tackle this problem, window's online and offline event handlers are\r\nused.\r\n\r\nThe number of retries is configurable but ideally it is to be kept at -1. Whenever disconnection happens, it should keep on trying to\r\nreconnect with increasing backoff time. This behaviour is useful when the asterisk is stopped.\r\n\r\nWhen the server is disconnected, it should be indicated on the phone button.", + "contributors": [ + "amolghode1981", + "KevLehman" + ] + }, + { + "pr": "25244", + "title": "[FIX] Read receipts show with color gray when not read yet", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins", + "gabriellsh" + ] + }, + { + "pr": "25230", + "title": "[FIX] VoIP disabled/enabled sequence puts voip agent in error state", + "userLogin": "amolghode1981", + "description": "Initially it was thought that the issue occurs because of the race condition while changing the client settings vs those settings reflected on server side. So a natural solution to solve this is to wait for setting change event 'private-settings-changed'. Then if 'VoIP_Enabled' is updated and it is true, set voipEnabled to true in useVoipClient.ts (on client side)\r\n\r\nIt was realised that the race does not happen because of the database or server noticing the changes late. But because of the time taken to establish the AMI connection with Asterisk.\r\n\r\nSolution:\r\n\r\n1. Change apps/meteor/app/voip/server/startup.ts. When VoIP_Enabled is changed, await for Voip.init() to complete and then broadcast connector.statuschanged with changed value.\r\n2. From apps/meteor/server/modules/listeners/listeners.module.ts use notifyLoggedInThisInstance to notify all logged in users on current instance.\r\n3. in apps/meteor/client/providers/CallProvider/hooks/useVoipClient.ts add the event handler that receives this event. Change voipEnabled from constant to state. Change this state based on the 'value' that is received by the handler.", + "contributors": [ + "amolghode1981", + "KevLehman" + ] + }, + { + "pr": "25087", + "title": "[NEW] Add expire index to integration history", + "userLogin": "geekgonecrazy", + "milestone": "4.7.0", + "contributors": [ + "geekgonecrazy" + ] + }, + { + "pr": "24521", + "title": "Chore: update OTR icon", + "userLogin": "kibonusp", + "description": "I changed the shredder icon in OTR contextual bar to the stopwatch icon, recently added to the fuselage.", + "milestone": "4.7.0", + "contributors": [ + "kibonusp", + "yash-rajpal", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "25237", + "title": "[FIX] Toolbox hiding under contextual bar", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25231", + "title": "[IMPROVE] Added MaxNickNameLength and MaxBioLength constants", + "userLogin": "aakash-gitdev", + "contributors": [ + "aakash-gitdev", + "web-flow", + "gabriellsh" + ] + }, + { + "pr": "25220", + "title": "[FIX] Desktop notification on multi-instance environments", + "userLogin": "sampaiodiego", + "milestone": "4.6.3", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25175", + "title": "[FIX] Reply button behavior on broadcast channel", + "userLogin": "filipemarins", + "description": "Hide reply button for the user that sent the message", + "contributors": [ + "filipemarins", + "web-flow" + ] + }, + { + "pr": "25216", + "title": "[FIX] Read receipts showing before message read", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins" + ] + }, + { + "pr": "25222", + "title": "[FIX] Add reaction not working in legacy messages", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25223", + "title": "Chore: Add error boundary to message component", + "userLogin": "gabriellsh", + "description": "Not crash the whole application if something goes wrong in the MessageList component.\r\n\r\n![image](https://user-images.githubusercontent.com/40830821/162269915-931c5c3c-c979-4234-b74c-371f67467ce0.png)", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25130", + "title": "Chore: Update Livechat version", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "25073", + "title": "[FIX] AgentOverview analytics wrong departmentId parameter", + "userLogin": "paulobernardoaf", + "description": "When filtering the analytics charts by department, data would not appear because the object:\r\n```js\r\n{\r\n value: \"department-id\",\r\n label: \"department-name\"\r\n}\r\n```\r\nwas being used in the `departmentId` parameter.\r\n\r\n- Before:\r\n![image](https://user-images.githubusercontent.com/30026625/161832057-d96ffd21-a7dd-421e-bfaa-3b9f4a9127b2.png)\r\n\r\n- After:\r\n![image](https://user-images.githubusercontent.com/30026625/161831092-9ee77b51-b083-4f45-9c48-ab2e0511c4d6.png)", + "milestone": "4.7.0", + "contributors": [ + "paulobernardoaf" + ] + }, + { + "pr": "25056", + "title": "[FIX] Close room when dismiss wrap up call modal", + "userLogin": "tiagoevanp", + "milestone": "4.7.0", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "25208", + "title": "Regression: yarn dev triggers build dependencies", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "web-flow" + ] + }, + { + "pr": "24714", + "title": "[FIX] Added invalid password error message", + "userLogin": "Himanshu664", + "milestone": "4.7.0", + "contributors": [ + "Himanshu664", + "dougfabris" + ] + }, + { + "pr": "25196", + "title": "Chore: Tests with Playwright (task: ROC-28, 09-channels)", + "userLogin": "tmontini", + "contributors": [ + "tmontini" + ] + }, + { + "pr": "25174", + "title": "Chore: Template to generate packages", + "userLogin": "ggazzo", + "description": "```\r\nnpx hygen package new test\r\n```", + "contributors": [ + "ggazzo", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "25193", + "title": "Regression: Fix micro services Docker build", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "25180", + "title": "Chore: Remove duplicated useUserRoom", + "userLogin": "dougfabris", + "milestone": "4.7.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25167", + "title": "Chore: TS migration SortList", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "24933", + "title": "[FIX] Deactivating user breaks if user is the only room owner", + "userLogin": "sidmohanty11", + "description": "## Before\r\n\r\nhttps://user-images.githubusercontent.com/73601258/160000871-cfc2f2a5-2a59-4d27-8049-7754d003dd48.mp4\r\n\r\n\r\n\r\n## After\r\nhttps://user-images.githubusercontent.com/73601258/159998287-681ab475-ff33-4282-82ff-db751c59a392.mp4", + "milestone": "4.6.2", + "contributors": [ + "sidmohanty11", + "sampaiodiego" + ] + }, + { + "pr": "25181", + "title": "Regression: Fix services Docker build on CI", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25089", + "title": "[FIX] UserCard sanitization", + "userLogin": "dougfabris", + "description": "- Rewrites the component to TS\r\n- Fixes some visual issues\r\n\r\n### before\r\n![Screen Shot 2022-04-07 at 00 23 11](https://user-images.githubusercontent.com/27704687/162113925-5c9484d1-23e9-4623-8b86-3fbc71b461a1.png)\r\n\r\n### after\r\n![Screen Shot 2022-04-07 at 00 07 13](https://user-images.githubusercontent.com/27704687/162112353-afd6aac6-b27c-4470-a642-631b8080d59e.png)", + "milestone": "4.7.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25085", + "title": "Chore: move definitions to packages", + "userLogin": "ggazzo", + "milestone": "3.7.0", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25168", + "title": "Regression: CI playwright", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25125", + "title": "Chore: Convert NotificationStatus to TS", + "userLogin": "jeanfbrito", + "contributors": [ + "jeanfbrito", + "ggazzo" + ] + }, + { + "pr": "25148", + "title": "[FIX] Message menu action not working on legacy messages.", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25122", + "title": "Chore: Tests with Playwright (task: All works)", + "userLogin": "weslley543", + "contributors": [ + "weslley543" + ] + }, + { + "pr": "25129", + "title": "Chore: Remove old files from removed Omnichannel feature", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25128", + "title": "Chore: Convert admin custom sound to tsx", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25126", + "title": "Chore: Migrate oauth2server to typescript", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "25123", + "title": "Chore: Convert LivechatAgentActivity to raw model and TS", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25124", + "title": "Chore: Remove unused Drone CI files", + "userLogin": "geekgonecrazy", + "contributors": [ + "geekgonecrazy", + "web-flow" + ] + }, + { + "pr": "25121", + "title": "Chore: Convert Mailer to TS", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti", + "sampaiodiego" + ] + }, + { + "pr": "25107", + "title": "Regression: Fix CI monorepo build", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25074", + "title": "Chore: Monorepo ", + "userLogin": "ggazzo", + "milestone": "3.7.0", + "contributors": [ + "sampaiodiego", + "ggazzo" + ] + }, + { + "pr": "25097", + "title": "[IMPROVE] Rename upgrade tab routes", + "userLogin": "guijun13", + "description": "Change 'upgrade tab' routes names from camelCase ('goFullyFeatured') to kebab-case ('go-fully-featured') due to URL naming consistency. Changed types, main function and test.", + "contributors": [ + "guijun13" + ] + }, + { + "pr": "25076", + "title": "Bump eslint-plugin-anti-trojan-source from 1.0.6 to 1.1.0", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24936", + "title": "[FIX] End call button disappearing when on-hold", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "24932", + "title": "[FIX] Use correct room property for call ended at", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "25022", + "title": "[FIX] Proxy settings being ignored", + "userLogin": "pierre-lehnen-rc", + "description": "Modify Meteor's `HTTP.call` to add back proxy support", + "milestone": "4.6.1", + "contributors": [ + "pierre-lehnen-rc", + "sampaiodiego" + ] + }, + { + "pr": "25082", + "title": "[FIX] Invitation links don't redirect to the registration form", + "userLogin": "yash-rajpal", + "milestone": "4.6.1", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "23971", + "title": "[NEW] Message Template React Component", + "userLogin": "ggazzo", + "description": "Complete rewrite of the messages component in react. Visual changes should be minimal as well as user impact, with no break changes (unless you've customized the blaze template).\r\n\r\n\r\n\r\n![Screen Shot 2022-04-05 at 11 14 18](https://user-images.githubusercontent.com/27704687/161774027-38dd9c7b-eeeb-45e2-b9d8-ea2a9be8486d.png)\r\nIn case you encounter any problems, or want to compare, temporarily it is possible to use the old version\r\n\r\n\"image\"", + "contributors": [ + "ggazzo", + "sampaiodiego" + ] + }, + { + "pr": "25069", + "title": "[FIX] FormData uploads not working", + "userLogin": "gabriellsh", + "milestone": "4.6.1", + "contributors": [ + "gabriellsh", + "dougfabris" + ] + }, + { + "pr": "19866", + "title": "[FIX] Video and Audio not skipping forward", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler", + "tassoevan", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "25067", + "title": "[FIX] NPS never finishing sending results", + "userLogin": "sampaiodiego", + "milestone": "4.6.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24405", + "title": "[IMPROVE] Add tooltip to sidebar room menu", + "userLogin": "Himanshu664", + "milestone": "4.7.0", + "contributors": [ + "Himanshu664", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "24431", + "title": "[IMPROVE] Added tooltip options for message menu", + "userLogin": "Himanshu664", + "milestone": "4.7.0", + "contributors": [ + "Himanshu664", + "dougfabris" + ] + }, + { + "pr": "24166", + "title": "[FIX] Replace encrypted text to Encrypted Message Placeholder", + "userLogin": "yash-rajpal", + "description": "### before \r\n![image](https://user-images.githubusercontent.com/27704687/150807900-154a9cdb-ee13-4333-8628-f287ab914b40.png)\r\n\r\n### after\r\n\"Screenshot", + "milestone": "4.7.0", + "contributors": [ + "yash-rajpal", + "albuquerquefabio", + "web-flow" + ] + }, + { + "pr": "24984", + "title": "[FIX] Prevent sequential messages edited icon to hide on hover", + "userLogin": "dougfabris", + "description": "### before\r\n\"Screen\r\n\r\n### after\r\n\"Screen", + "milestone": "4.7.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25024", + "title": "[IMPROVE] Improve active/hover colors in account sidebar", + "userLogin": "Himanshu664", + "milestone": "4.7.0", + "contributors": [ + "Himanshu664" + ] + }, + { + "pr": "24856", + "title": "[FIX] Full error message is visible", + "userLogin": "Himanshu664", + "milestone": "4.7.0", + "contributors": [ + "Himanshu664", + "tassoevan" + ] + }, + { + "pr": "24708", + "title": "Chore: Cancel running jobs if PR is updated", + "userLogin": "debdutdeb", + "contributors": [ + "debdutdeb", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24900", + "title": "Chore: organize test files and fix code coverage", + "userLogin": "tmontini", + "contributors": [ + null, + "tmontini", + "rodrigok" + ] + }, + { + "pr": "24464", + "title": "Chore: Missing keys in APIsDisplay", + "userLogin": "dougfabris", + "milestone": "4.7.0", + "contributors": [ + "dougfabris", + "tassoevan" + ] + }, + { + "pr": "25057", + "title": "Bump ejson from 2.2.1 to 2.2.2", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "25053", + "title": "Chore: Remove Alpine image deps after using them", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25052", + "title": "Bump pino and pino-pretty", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25050", + "title": "[FIX] Upgrade Tab showing for a split second", + "userLogin": "gabriellsh", + "milestone": "4.6.1", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25055", + "title": "[FIX] UserAutoComplete not rendering UserAvatar correctly", + "userLogin": "dougfabris", + "description": "### before\r\n![Screen Shot 2022-04-04 at 16 50 21](https://user-images.githubusercontent.com/27704687/161620921-800bf66a-806d-4f83-b2e1-073c34215001.png)\r\n\r\n### after\r\n![Screen Shot 2022-04-04 at 16 49 00](https://user-images.githubusercontent.com/27704687/161620720-3e27774d-c241-46ca-b764-932a9295d709.png)", + "milestone": "4.6.1", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25031", + "title": "Chore: TS conversion folder client", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "web-flow" + ] + }, + { + "pr": "24991", + "title": "Bump minimist from 1.2.5 to 1.2.6 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "25002", + "title": "Bump template-file from 6.0.0 to 6.0.1", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "25042", + "title": "Bump body-parser from 1.19.2 to 1.20.0 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "25043", + "title": "i18n: Language update from LingoHub 🤖 on 2022-04-04Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "25028", + "title": "Merge master into develop & Set version to 4.7.0-develop", + "userLogin": "sampaiodiego", + "contributors": [ + "AllanPazRibeiro", + "sampaiodiego", + "web-flow" + ] + } + ] + }, + "4.7.1": { + "node_version": "14.18.3", + "npm_version": "6.14.15", + "mongo_versions": [ + "3.6", + "4.0", + "4.2", + "4.4", + "5.0" + ], + "pull_requests": [ + { + "pr": "25510", + "title": "Release 4.7.1", + "userLogin": "d-gubert", + "contributors": [ + "felipe-menelau", + "d-gubert", + "pierre-lehnen-rc" + ] + }, + { + "pr": "25471", + "title": "[FIX] Spotlight results showing usernames instead of real names", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.7.1", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "25434", + "title": "[FIX] LDAP sync removing users from channels when multiple groups are mapped to it", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.7.1", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "25441", + "title": "[NEW] Use setting to determine if initial general channel is needed", + "userLogin": "felipe-menelau", + "description": "- Adds flag responsible for overwriting #general channel creation", + "milestone": "4.7.1", + "contributors": [ + "felipe-menelau", + "sampaiodiego", + "web-flow" + ] + } + ] + }, + "4.7.2": { + "node_version": "14.18.3", + "npm_version": "6.14.15", + "mongo_versions": [ + "3.6", + "4.0", + "4.2", + "4.4", + "5.0" + ], + "pull_requests": [ + { + "pr": "25580", + "title": "Release 4.7.2", + "userLogin": "d-gubert", + "contributors": [ + "tiagoevanp", + "d-gubert", + "MartinSchoeler", + "ggazzo", + "cauefcr", + "geekgonecrazy" + ] + }, + { + "pr": "25544", + "title": "[FIX] Initial User not added to default channel", + "userLogin": "geekgonecrazy", + "description": "If injecting initial user. The user wasn’t added to the default General channel", + "milestone": "4.7.2", + "contributors": [ + "geekgonecrazy", + "web-flow" + ] + }, + { + "pr": "25520", + "title": "[FIX] User abandonment setting was not working doe to failing event hook", + "userLogin": "cauefcr", + "description": "A setting watcher and the query for grabbing abandoned chats were broken, now they're not.", + "milestone": "4.7.2", + "contributors": [ + "cauefcr", + "tiagoevanp" + ] + }, + { + "pr": "25495", + "title": "[FIX] Dynamic load matrix is enabled and handle failure ", + "userLogin": "ggazzo", + "milestone": "4.7.2", + "contributors": [ + "ggazzo", + "geekgonecrazy" + ] + }, + { + "pr": "25409", + "title": "[FIX] One of the triggers was not working correctly", + "userLogin": "MartinSchoeler", + "milestone": "4.7.2", + "contributors": [ + "MartinSchoeler", + "tiagoevanp" + ] + }, + { + "pr": "25407", + "title": "[FIX] UI/UX issues on Live Chat widget", + "userLogin": "MartinSchoeler", + "milestone": "4.7.2", + "contributors": [ + "MartinSchoeler", + "dougfabris" + ] + }, + { + "pr": "25312", + "title": "Chore: Add Livechat repo into Monorepo packages", + "userLogin": "tiagoevanp", + "milestone": "4.7.2", + "contributors": [ + "tiagoevanp", + "ggazzo", + "web-flow", + "MartinSchoeler" + ] + } + ] + }, + "4.8.0-rc.1": { + "node_version": "14.18.3", + "npm_version": "6.14.15", + "mongo_versions": [ + "3.6", + "4.0", + "4.2", + "4.4", + "5.0" + ], + "pull_requests": [ + { + "pr": "25629", + "title": "Regression: Assets & Slack Bridge Setting Page not rendering", + "userLogin": "dougfabris", + "milestone": "4.8.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25627", + "title": "Regression: Subscription menu not appearing for non installed but subscribed apps", + "userLogin": "rique223", + "description": "Fixed a problem on which the AppMenu component did not appear for apps that had an active subscription but weren't installed, now the rendering of the component is also based on the isSubscribed flag, and the appearance of the uninstall and enable/disable options are based on the app.installed flag so that the correct options appear on all the edge cases.\r\nDemo gif:\r\n![subscription-manager-fix](https://user-images.githubusercontent.com/43561537/170132040-dc8535c0-8056-4fb2-b008-afaece744868.gif)", + "milestone": "4.8.0", + "contributors": [ + "rique223" + ] + }, + { + "pr": "25521", + "title": "Chore: Rewrite im and dm endpoints to ts", + "userLogin": "albuquerquefabio", + "description": "- Endpoints rewritten to TS\r\n - dm.create\r\n - dm.delete\r\n - dm.close\r\n - dm.counters\r\n - dm.files\r\n - dm.history\r\n - dm.members\r\n - dm.messages\r\n - dm.messages.others\r\n - dm.list\r\n - dm.list.everyone\r\n - dm.open\r\n - dm.setTopic\r\n - im.create\r\n - im.delete\r\n - im.close\r\n - im.counters\r\n - im.files\r\n - im.history\r\n - im.members\r\n - im.messages\r\n - im.messages.others\r\n - im.list\r\n - im.list.everyone\r\n - im.open\r\n - im.setTopic\r\n- Some lines of code was refactored on `apps/meteor/app/api/server/v1/im.ts`\r\n- Unnecessary functions were deleted on `apps/meteor/app/lib/server/functions/getDirectMessageByNameOrIdWithOptionToJoin.ts`\r\n- New types was added on `apps/meteor/app/api/server/api.d.ts`", + "contributors": [ + "albuquerquefabio", + "ggazzo", + "web-flow" + ] + } + ] + }, + "4.8.0-rc.2": { + "node_version": "14.18.3", + "npm_version": "6.14.15", + "mongo_versions": [ + "3.6", + "4.0", + "4.2", + "4.4", + "5.0" + ], + "pull_requests": [ + { + "pr": "25618", + "title": "Regression: Change logic to check if connection is online on unstable networks", + "userLogin": "KevLehman", + "milestone": "4.8.0", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "25639", + "title": "Regression: Missing settings group descriptions", + "userLogin": "dougfabris", + "description": "", + "milestone": "4.8.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25648", + "title": "Chore: Rest API query parameters handling", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "web-flow" + ] + }, + { + "pr": "25651", + "title": "Regression: VoIp wrap up modal not opening after call disconnect", + "userLogin": "aleksandernsilva", + "description": "This PR fixes a bug preventing the wrap up call modal from being displayed after caller or agent ends the call.", + "contributors": [ + "aleksandernsilva" + ] + }, + { + "pr": "25638", + "title": "[FIX] Remove 'total' text in admin info page", + "userLogin": "guijun13", + "description": "- Remove initial 'total' text from rooms and messages groups in the admin info page\r\n- Add 'total' before 'rooms' and 'messages' title on the same section. To use the new 'Total Rooms', was created a new key in the en.i18n.json file.", + "contributors": [ + "guijun13" + ] + }, + { + "pr": "25641", + "title": "Chore: Increase performance and security of integrations’ scripts", + "userLogin": "rodrigok", + "description": "Replace internal VM implementation with VM2 which implements many more mechanisms to ensure timeout, security and allow easier configuration for future improvements on the integrations' feature.", + "contributors": [ + "rodrigok", + "ggazzo" + ] + }, + { + "pr": "25613", + "title": "[FIX] Quote message spacing", + "userLogin": "hugocostadev", + "contributors": [ + "hugocostadev" + ] + } + ] + }, + "4.8.0-rc.3": { + "node_version": "14.18.3", + "npm_version": "6.14.15", + "mongo_versions": [ + "3.6", + "4.0", + "4.2", + "4.4", + "5.0" + ], + "pull_requests": [ + { + "pr": "25663", + "title": "Regression: Update settings groups description", + "userLogin": "dougfabris", + "milestone": "4.8.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25569", + "title": "[FIX] Click to join button Jitsi Call", + "userLogin": "hugocostadev", + "description": "Added `ToolboxProvider` to `MessageListProvider` and fixed actionLink.js open function exec", + "milestone": "4.8.0", + "contributors": [ + "hugocostadev", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "25644", + "title": "Regression: Endpoint types with Ajv Coercing data types", + "userLogin": "albuquerquefabio", + "description": "Ajv Coercing data types should be `true` to accept all kinds of data requested.", + "contributors": [ + "albuquerquefabio" + ] + } + ] + }, + "3.18.7": { + "mongo_versions": [ + "3.4", + "3.6", + "4.0", + "4.2" + ], + "pull_requests": [ + { + "pr": "25580", + "title": "Release 4.7.2", + "userLogin": "d-gubert", + "contributors": [ + "tiagoevanp", + "d-gubert", + "MartinSchoeler", + "ggazzo", + "cauefcr", + "geekgonecrazy" + ] + }, + { + "pr": "25544", + "title": "[FIX] Initial User not added to default channel", + "userLogin": "geekgonecrazy", + "description": "If injecting initial user. The user wasn’t added to the default General channel", + "milestone": "4.7.2", + "contributors": [ + "geekgonecrazy", + "web-flow" + ] + }, + { + "pr": "25520", + "title": "[FIX] User abandonment setting was not working doe to failing event hook", + "userLogin": "cauefcr", + "description": "A setting watcher and the query for grabbing abandoned chats were broken, now they're not.", + "milestone": "4.7.2", + "contributors": [ + "cauefcr", + "tiagoevanp" + ] + }, + { + "pr": "25495", + "title": "[FIX] Dynamic load matrix is enabled and handle failure ", + "userLogin": "ggazzo", + "milestone": "4.7.2", + "contributors": [ + "ggazzo", + "geekgonecrazy" + ] + }, + { + "pr": "25409", + "title": "[FIX] One of the triggers was not working correctly", + "userLogin": "MartinSchoeler", + "milestone": "4.7.2", + "contributors": [ + "MartinSchoeler", + "tiagoevanp" + ] + }, + { + "pr": "25407", + "title": "[FIX] UI/UX issues on Live Chat widget", + "userLogin": "MartinSchoeler", + "milestone": "4.7.2", + "contributors": [ + "MartinSchoeler", + "dougfabris" + ] + }, + { + "pr": "25312", + "title": "Chore: Add Livechat repo into Monorepo packages", + "userLogin": "tiagoevanp", + "milestone": "4.7.2", + "contributors": [ + "tiagoevanp", + "ggazzo", + "web-flow", + "MartinSchoeler" + ] + }, + { + "pr": "25510", + "title": "Release 4.7.1", + "userLogin": "d-gubert", + "contributors": [ + "felipe-menelau", + "d-gubert", + "pierre-lehnen-rc" + ] + }, + { + "pr": "25471", + "title": "[FIX] Spotlight results showing usernames instead of real names", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.7.1", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "25434", + "title": "[FIX] LDAP sync removing users from channels when multiple groups are mapped to it", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.7.1", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "25441", + "title": "[NEW] Use setting to determine if initial general channel is needed", + "userLogin": "felipe-menelau", + "description": "- Adds flag responsible for overwriting #general channel creation", + "milestone": "4.7.1", + "contributors": [ + "felipe-menelau", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "25390", + "title": "Release 4.7.0", + "userLogin": "d-gubert", + "contributors": [ + "sampaiodiego", + "web-flow", + "lingohub[bot]", + "dependabot[bot]", + "ggazzo", + "dougfabris", + "gabriellsh", + "tmontini", + "debdutdeb", + "Himanshu664", + "yash-rajpal", + "MartinSchoeler" + ] + }, + { + "pr": "25380", + "title": "Regression: Fix clicking on visitor's chat in the sidebar does not display the chat window", + "userLogin": "filipemarins", + "description": "Fix: livechat room not opening.", + "milestone": "4.7.0", + "contributors": [ + "filipemarins" + ] + }, + { + "pr": "25314", + "title": "Regression: Fix size of custom emoji and render emoji on thread message preview", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins", + "gabriellsh" + ] + }, + { + "pr": "25371", + "title": "Chore: Bump fuselage", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25336", + "title": "Chore: Add options to debug stdout and rate limiter", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25368", + "title": "Regression: Fix English i18n react text", + "userLogin": "d-gubert", + "description": "Incorrect text in reaction tooltip has been fixed", + "milestone": "4.7.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "25349", + "title": "Regression: Rocket.Chat Webapp not loading.", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc", + "gabriellsh" + ] + }, + { + "pr": "25317", + "title": "Regression: Fix multi line is not showing an empty line between lines", + "userLogin": "filipemarins", + "milestone": "4.7.0", + "contributors": [ + "filipemarins", + "gabriellsh" + ] + }, + { + "pr": "25320", + "title": "Regression: bump onboarding-ui version", + "userLogin": "guijun13", + "description": "- Bump to 'next' the onboarding-ui package from fuselage.\r\n- Update from 'companyEmail' to 'email' adminData usage types", + "contributors": [ + "guijun13" + ] + }, + { + "pr": "25335", + "title": "Chore: Create README.md for Rest Typings", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "web-flow" + ] + }, + { + "pr": "25327", + "title": "Regression: Messages in new message template Crashing.", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25323", + "title": "Regression: Better MongoDB connection management for micro services", + "userLogin": "sampaiodiego", + "milestone": "4.7.0", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25250", + "title": "Regression: Validate empty fields for Message template", + "userLogin": "gabriellsh", + "milestone": "4.8.0", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25319", + "title": "Regression: Fix the alpine image and dev UX installing matrix-rust-sdk-bindings", + "userLogin": "geekgonecrazy", + "description": "The package only included a few pre-built which caused all macs to have to compile every time they installed and also caused our alpine not to work.\r\n\r\nThis temporarily switches to a fork of the matrix-appservice-bridge package.\r\n\r\nMade changes to one of its child dependencies `matrix-rust-sdk-bindings` that adds pre-built binaries for mac and musl (for alpine).", + "milestone": "4.7.0", + "contributors": [ + "geekgonecrazy", + "web-flow", + "d-gubert" + ] + }, + { + "pr": "25255", + "title": "Regression: Change preference to be default legacy messages", + "userLogin": "gabriellsh", + "milestone": "4.8.0", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25306", + "title": "Regression: Fix reply button not working when hideFlexTab is enabled", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins", + "gabriellsh" + ] + }, + { + "pr": "25311", + "title": "Regression: Add eslint package to micro services Dockerfile", + "userLogin": "sampaiodiego", + "milestone": "4.7.0", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25218", + "title": "Chore: ensure scripts use cross-env and ignore some dirs (ROC-54)", + "userLogin": "souzaramon", + "description": "- data and test-failure should be ignored\r\n- ensure scripts use cross-env", + "contributors": [ + "souzaramon" + ] + }, + { + "pr": "25313", + "title": "Regression: Revert Bugsnag version", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25305", + "title": "Regression: eslint not running on packages", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc", + "ggazzo" + ] + }, + { + "pr": "25299", + "title": "Regression: Add `isPending` status to message", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins" + ] + }, + { + "pr": "25301", + "title": "Regression: Shows error if micro service cannot connect to Mongo", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25287", + "title": "Regression: Use exact Node version on micro services Docker images", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25286", + "title": "Chore: Add root package.json to houston files", + "userLogin": "d-gubert", + "description": "See title", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "25284", + "title": "Chore: Sync with master", + "userLogin": "d-gubert", + "contributors": [ + "sampaiodiego", + "d-gubert", + "web-flow" + ] + }, + { + "pr": "25269", + "title": "Chore: Minor dependency updates", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "25224", + "title": "Chore: Add yarn plugin to check node and yarn version", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "web-flow" + ] + }, + { + "pr": "25235", + "title": "Release 4.6.3", + "userLogin": "d-gubert", + "contributors": [ + "sampaiodiego", + "d-gubert" + ] + }, + { + "pr": "25220", + "title": "[FIX] Desktop notification on multi-instance environments", + "userLogin": "sampaiodiego", + "milestone": "4.6.3", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25280", + "title": "Chore: Remove package-lock.json from houston files", + "userLogin": "d-gubert", + "description": "Houston config in the `package.json` file still mentioned `package-lock.json`, but it doesn't exist anymore", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "25260", + "title": "[FIX] Adjust email label in Setup Wizard i18n files", + "userLogin": "guijun13", + "description": "- remove 'Company' label on onboarding email keys in certain languages", + "contributors": [ + "guijun13" + ] + }, + { + "pr": "25275", + "title": "Chore: Fix return type warnings", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23870", + "title": "[NEW] Expand Apps Engine's environment variable allowed list", + "userLogin": "cuonghuunguyen", + "milestone": "4.7.0", + "contributors": [ + null, + "debdutdeb", + "web-flow", + "cuonghuunguyen", + "dougfabris" + ] + }, + { + "pr": "25273", + "title": "Regression: Fix federation Matrix bridge startup", + "userLogin": "sampaiodiego", + "milestone": "4.7.0", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25092", + "title": "[FIX] Message preview not available for queued chats", + "userLogin": "murtaza98", + "milestone": "4.7.0", + "contributors": [ + "murtaza98", + "KevLehman" + ] + }, + { + "pr": "23688", + "title": "[NEW] Alpha Matrix Federation", + "userLogin": "alansikora", + "description": "Experimental support for Matrix Federation with a Bridge\r\n\r\nhttps://user-images.githubusercontent.com/51996/164530391-e8b17ecd-a4d0-4ef8-a8b7-81230c1773d3.mp4", + "milestone": "4.7.0", + "contributors": [ + "alansikora", + "geekgonecrazy", + "MarcosSpessatto", + "rodrigok" + ] + }, + { + "pr": "25259", + "title": "Chore: Bump Fuselage packages", + "userLogin": "dougfabris", + "milestone": "4.7.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25261", + "title": "[FIX] Incorrect websocket url in livechat widget", + "userLogin": "debdutdeb", + "milestone": "4.7.0", + "contributors": [ + "debdutdeb" + ] + }, + { + "pr": "25007", + "title": "[FIX] Showing Blank Message Inside Report", + "userLogin": "nishant23122000", + "description": "https://user-images.githubusercontent.com/53515714/161038085-4a86c7ae-6751-4996-9767-b1c9e0331a6c.mp4", + "contributors": [ + "nishant23122000" + ] + }, + { + "pr": "25251", + "title": "Regression: Add select message to system message and thread preview and allow select on legacy template", + "userLogin": "filipemarins", + "milestone": "4.7.0", + "contributors": [ + "filipemarins", + "ggazzo", + "web-flow", + "gabriellsh", + "dougfabris" + ] + }, + { + "pr": "25239", + "title": "[FIX] Add katex render to new message react template", + "userLogin": "filipemarins", + "milestone": "4.7.0", + "contributors": [ + "filipemarins", + "ggazzo", + "dougfabris" + ] + }, + { + "pr": "25257", + "title": "Chore: Update Livechat to the last version", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "24515", + "title": "[FIX] Custom sound error toast messages", + "userLogin": "Himanshu664", + "milestone": "4.7.0", + "contributors": [ + "Himanshu664", + "dougfabris" + ] + }, + { + "pr": "25211", + "title": "Regression: Avatar not loading on first direct message", + "userLogin": "filipemarins", + "description": "fix avatar not loading on a first direct message", + "milestone": "4.7.0", + "contributors": [ + "filipemarins", + "ggazzo" + ] + }, + { + "pr": "25254", + "title": "Regression: Show username and real name on the message system", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins" + ] + }, + { + "pr": "25217", + "title": "[IMPROVE] Performance for some Omnichannel features", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "25200", + "title": "[FIX] room creation fails if app framework is disabled", + "userLogin": "debdutdeb", + "milestone": "4.7.0", + "contributors": [ + "debdutdeb" + ] + }, + { + "pr": "24565", + "title": "[IMPROVE] Add OTR Room States", + "userLogin": "yash-rajpal", + "description": "Earlier OTR room uses only 2 states, we need more states to support future features. \r\nThis adds more states for the OTR contextualBar.\r\n\r\n- Expired\r\n\"Screen\r\n\r\n- Declined\r\nScreen Shot 2022-04-20 at 13 49 28\r\n\r\n- Error\r\n\"Screen", + "milestone": "4.7.0", + "contributors": [ + "yash-rajpal", + "dougfabris" + ] + }, + { + "pr": "25170", + "title": "[FIX] Client disconnection on network loss", + "userLogin": "amolghode1981", + "description": "Agent gets disconnected (or Unregistered) from asterisk in multiple ways. The goal is that agent should remain online\r\nunless agent explicitly logs off.\r\nAgent can stop receiving calls in multiple ways due to network loss. Network loss can happen in following ways.\r\n1. User tries to switch the network. User experiences a glitch of disconnectivity. This can be simulated by turning the network off\r\nin the network tab of chrome's dev tool. This can disconnect the UA if the disconnection happens just before the registration refresh.\r\n2. Second reason is when computer goes in sleep mode.\r\n3. Third reason is that when asterisk is crashed/in maintenance mode/explicitly stopped.\r\n\r\nSolution:\r\nThe idea is to detect the network disconnection and start the start the attempts to reconnect.\r\nThe detection of the disconnection does not happen in case#1. The SIPUA's UserAgent transport does not\r\ncall onDisconnected when network loss of such kind happens. To tackle this problem, window's online and offline event handlers are\r\nused.\r\n\r\nThe number of retries is configurable but ideally it is to be kept at -1. Whenever disconnection happens, it should keep on trying to\r\nreconnect with increasing backoff time. This behaviour is useful when the asterisk is stopped.\r\n\r\nWhen the server is disconnected, it should be indicated on the phone button.", + "contributors": [ + "amolghode1981", + "KevLehman" + ] + }, + { + "pr": "25244", + "title": "[FIX] Read receipts show with color gray when not read yet", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins", + "gabriellsh" + ] + }, + { + "pr": "25230", + "title": "[FIX] VoIP disabled/enabled sequence puts voip agent in error state", + "userLogin": "amolghode1981", + "description": "Initially it was thought that the issue occurs because of the race condition while changing the client settings vs those settings reflected on server side. So a natural solution to solve this is to wait for setting change event 'private-settings-changed'. Then if 'VoIP_Enabled' is updated and it is true, set voipEnabled to true in useVoipClient.ts (on client side)\r\n\r\nIt was realised that the race does not happen because of the database or server noticing the changes late. But because of the time taken to establish the AMI connection with Asterisk.\r\n\r\nSolution:\r\n\r\n1. Change apps/meteor/app/voip/server/startup.ts. When VoIP_Enabled is changed, await for Voip.init() to complete and then broadcast connector.statuschanged with changed value.\r\n2. From apps/meteor/server/modules/listeners/listeners.module.ts use notifyLoggedInThisInstance to notify all logged in users on current instance.\r\n3. in apps/meteor/client/providers/CallProvider/hooks/useVoipClient.ts add the event handler that receives this event. Change voipEnabled from constant to state. Change this state based on the 'value' that is received by the handler.", + "contributors": [ + "amolghode1981", + "KevLehman" + ] + }, + { + "pr": "25087", + "title": "[NEW] Add expire index to integration history", + "userLogin": "geekgonecrazy", + "milestone": "4.7.0", + "contributors": [ + "geekgonecrazy" + ] + }, + { + "pr": "24521", + "title": "Chore: update OTR icon", + "userLogin": "kibonusp", + "description": "I changed the shredder icon in OTR contextual bar to the stopwatch icon, recently added to the fuselage.", + "milestone": "4.7.0", + "contributors": [ + "kibonusp", + "yash-rajpal", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "25237", + "title": "[FIX] Toolbox hiding under contextual bar", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25231", + "title": "[IMPROVE] Added MaxNickNameLength and MaxBioLength constants", + "userLogin": "aakash-gitdev", + "contributors": [ + "aakash-gitdev", + "web-flow", + "gabriellsh" + ] + }, + { + "pr": "25220", + "title": "[FIX] Desktop notification on multi-instance environments", + "userLogin": "sampaiodiego", + "milestone": "4.6.3", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25175", + "title": "[FIX] Reply button behavior on broadcast channel", + "userLogin": "filipemarins", + "description": "Hide reply button for the user that sent the message", + "contributors": [ + "filipemarins", + "web-flow" + ] + }, + { + "pr": "25216", + "title": "[FIX] Read receipts showing before message read", + "userLogin": "filipemarins", + "contributors": [ + "filipemarins" + ] + }, + { + "pr": "25222", + "title": "[FIX] Add reaction not working in legacy messages", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25223", + "title": "Chore: Add error boundary to message component", + "userLogin": "gabriellsh", + "description": "Not crash the whole application if something goes wrong in the MessageList component.\r\n\r\n![image](https://user-images.githubusercontent.com/40830821/162269915-931c5c3c-c979-4234-b74c-371f67467ce0.png)", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25130", + "title": "Chore: Update Livechat version", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "25073", + "title": "[FIX] AgentOverview analytics wrong departmentId parameter", + "userLogin": "paulobernardoaf", + "description": "When filtering the analytics charts by department, data would not appear because the object:\r\n```js\r\n{\r\n value: \"department-id\",\r\n label: \"department-name\"\r\n}\r\n```\r\nwas being used in the `departmentId` parameter.\r\n\r\n- Before:\r\n![image](https://user-images.githubusercontent.com/30026625/161832057-d96ffd21-a7dd-421e-bfaa-3b9f4a9127b2.png)\r\n\r\n- After:\r\n![image](https://user-images.githubusercontent.com/30026625/161831092-9ee77b51-b083-4f45-9c48-ab2e0511c4d6.png)", + "milestone": "4.7.0", + "contributors": [ + "paulobernardoaf" + ] + }, + { + "pr": "25056", + "title": "[FIX] Close room when dismiss wrap up call modal", + "userLogin": "tiagoevanp", + "milestone": "4.7.0", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "25208", + "title": "Regression: yarn dev triggers build dependencies", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "web-flow" + ] + }, + { + "pr": "24714", + "title": "[FIX] Added invalid password error message", + "userLogin": "Himanshu664", + "milestone": "4.7.0", + "contributors": [ + "Himanshu664", + "dougfabris" + ] + }, + { + "pr": "25196", + "title": "Chore: Tests with Playwright (task: ROC-28, 09-channels)", + "userLogin": "tmontini", + "contributors": [ + "tmontini" + ] + }, + { + "pr": "25174", + "title": "Chore: Template to generate packages", + "userLogin": "ggazzo", + "description": "```\r\nnpx hygen package new test\r\n```", + "contributors": [ + "ggazzo", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "25193", + "title": "Regression: Fix micro services Docker build", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "25191", + "title": "Release 4.6.2", + "userLogin": "sampaiodiego", + "contributors": [ + "sidmohanty11", + "sampaiodiego" + ] + }, + { + "pr": "25101", + "title": "[FIX] Database indexes not being created", + "userLogin": "sampaiodiego", + "milestone": "4.6.2", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24933", + "title": "[FIX] Deactivating user breaks if user is the only room owner", + "userLogin": "sidmohanty11", + "description": "## Before\r\n\r\nhttps://user-images.githubusercontent.com/73601258/160000871-cfc2f2a5-2a59-4d27-8049-7754d003dd48.mp4\r\n\r\n\r\n\r\n## After\r\nhttps://user-images.githubusercontent.com/73601258/159998287-681ab475-ff33-4282-82ff-db751c59a392.mp4", + "milestone": "4.6.2", + "contributors": [ + "sidmohanty11", + "sampaiodiego" + ] + }, + { + "pr": "25095", + "title": "Release 4.6.1", + "userLogin": "sampaiodiego", + "contributors": [ + "dougfabris", + "sampaiodiego", + "gabriellsh", + "yash-rajpal", + "pierre-lehnen-rc" + ] + }, + { + "pr": "25022", + "title": "[FIX] Proxy settings being ignored", + "userLogin": "pierre-lehnen-rc", + "description": "Modify Meteor's `HTTP.call` to add back proxy support", + "milestone": "4.6.1", + "contributors": [ + "pierre-lehnen-rc", + "sampaiodiego" + ] + }, + { + "pr": "25082", + "title": "[FIX] Invitation links don't redirect to the registration form", + "userLogin": "yash-rajpal", + "milestone": "4.6.1", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "25069", + "title": "[FIX] FormData uploads not working", + "userLogin": "gabriellsh", + "milestone": "4.6.1", + "contributors": [ + "gabriellsh", + "dougfabris" + ] + }, + { + "pr": "25067", + "title": "[FIX] NPS never finishing sending results", + "userLogin": "sampaiodiego", + "milestone": "4.6.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25050", + "title": "[FIX] Upgrade Tab showing for a split second", + "userLogin": "gabriellsh", + "milestone": "4.6.1", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25055", + "title": "[FIX] UserAutoComplete not rendering UserAvatar correctly", + "userLogin": "dougfabris", + "description": "### before\r\n![Screen Shot 2022-04-04 at 16 50 21](https://user-images.githubusercontent.com/27704687/161620921-800bf66a-806d-4f83-b2e1-073c34215001.png)\r\n\r\n### after\r\n![Screen Shot 2022-04-04 at 16 49 00](https://user-images.githubusercontent.com/27704687/161620720-3e27774d-c241-46ca-b764-932a9295d709.png)", + "milestone": "4.6.1", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25180", + "title": "Chore: Remove duplicated useUserRoom", + "userLogin": "dougfabris", + "milestone": "4.7.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25167", + "title": "Chore: TS migration SortList", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "24933", + "title": "[FIX] Deactivating user breaks if user is the only room owner", + "userLogin": "sidmohanty11", + "description": "## Before\r\n\r\nhttps://user-images.githubusercontent.com/73601258/160000871-cfc2f2a5-2a59-4d27-8049-7754d003dd48.mp4\r\n\r\n\r\n\r\n## After\r\nhttps://user-images.githubusercontent.com/73601258/159998287-681ab475-ff33-4282-82ff-db751c59a392.mp4", + "milestone": "4.6.2", + "contributors": [ + "sidmohanty11", + "sampaiodiego" + ] + }, + { + "pr": "25181", + "title": "Regression: Fix services Docker build on CI", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25089", + "title": "[FIX] UserCard sanitization", + "userLogin": "dougfabris", + "description": "- Rewrites the component to TS\r\n- Fixes some visual issues\r\n\r\n### before\r\n![Screen Shot 2022-04-07 at 00 23 11](https://user-images.githubusercontent.com/27704687/162113925-5c9484d1-23e9-4623-8b86-3fbc71b461a1.png)\r\n\r\n### after\r\n![Screen Shot 2022-04-07 at 00 07 13](https://user-images.githubusercontent.com/27704687/162112353-afd6aac6-b27c-4470-a642-631b8080d59e.png)", + "milestone": "4.7.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25085", + "title": "Chore: move definitions to packages", + "userLogin": "ggazzo", + "milestone": "3.7.0", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25168", + "title": "Regression: CI playwright", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25125", + "title": "Chore: Convert NotificationStatus to TS", + "userLogin": "jeanfbrito", + "contributors": [ + "jeanfbrito", + "ggazzo" + ] + }, + { + "pr": "25148", + "title": "[FIX] Message menu action not working on legacy messages.", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25122", + "title": "Chore: Tests with Playwright (task: All works)", + "userLogin": "weslley543", + "contributors": [ + "weslley543" + ] + }, + { + "pr": "25129", + "title": "Chore: Remove old files from removed Omnichannel feature", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25128", + "title": "Chore: Convert admin custom sound to tsx", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25126", + "title": "Chore: Migrate oauth2server to typescript", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "25123", + "title": "Chore: Convert LivechatAgentActivity to raw model and TS", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25124", + "title": "Chore: Remove unused Drone CI files", + "userLogin": "geekgonecrazy", + "contributors": [ + "geekgonecrazy", + "web-flow" + ] + }, + { + "pr": "25121", + "title": "Chore: Convert Mailer to TS", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti", + "sampaiodiego" + ] + }, + { + "pr": "25107", + "title": "Regression: Fix CI monorepo build", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25074", + "title": "Chore: Monorepo ", + "userLogin": "ggazzo", + "milestone": "3.7.0", + "contributors": [ + "sampaiodiego", + "ggazzo" + ] + }, + { + "pr": "25097", + "title": "[IMPROVE] Rename upgrade tab routes", + "userLogin": "guijun13", + "description": "Change 'upgrade tab' routes names from camelCase ('goFullyFeatured') to kebab-case ('go-fully-featured') due to URL naming consistency. Changed types, main function and test.", + "contributors": [ + "guijun13" + ] + }, + { + "pr": "25076", + "title": "Bump eslint-plugin-anti-trojan-source from 1.0.6 to 1.1.0", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24936", + "title": "[FIX] End call button disappearing when on-hold", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "24932", + "title": "[FIX] Use correct room property for call ended at", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "25022", + "title": "[FIX] Proxy settings being ignored", + "userLogin": "pierre-lehnen-rc", + "description": "Modify Meteor's `HTTP.call` to add back proxy support", + "milestone": "4.6.1", + "contributors": [ + "pierre-lehnen-rc", + "sampaiodiego" + ] + }, + { + "pr": "25082", + "title": "[FIX] Invitation links don't redirect to the registration form", + "userLogin": "yash-rajpal", + "milestone": "4.6.1", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "23971", + "title": "[NEW] Message Template React Component", + "userLogin": "ggazzo", + "description": "Complete rewrite of the messages component in react. Visual changes should be minimal as well as user impact, with no break changes (unless you've customized the blaze template).\r\n\r\n\r\n\r\n![Screen Shot 2022-04-05 at 11 14 18](https://user-images.githubusercontent.com/27704687/161774027-38dd9c7b-eeeb-45e2-b9d8-ea2a9be8486d.png)\r\nIn case you encounter any problems, or want to compare, temporarily it is possible to use the old version\r\n\r\n\"image\"", + "contributors": [ + "ggazzo", + "sampaiodiego" + ] + }, + { + "pr": "25069", + "title": "[FIX] FormData uploads not working", + "userLogin": "gabriellsh", + "milestone": "4.6.1", + "contributors": [ + "gabriellsh", + "dougfabris" + ] + }, + { + "pr": "19866", + "title": "[FIX] Video and Audio not skipping forward", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler", + "tassoevan", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "25067", + "title": "[FIX] NPS never finishing sending results", + "userLogin": "sampaiodiego", + "milestone": "4.6.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24405", + "title": "[IMPROVE] Add tooltip to sidebar room menu", + "userLogin": "Himanshu664", + "milestone": "4.7.0", + "contributors": [ + "Himanshu664", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "24431", + "title": "[IMPROVE] Added tooltip options for message menu", + "userLogin": "Himanshu664", + "milestone": "4.7.0", + "contributors": [ + "Himanshu664", + "dougfabris" + ] + }, + { + "pr": "24166", + "title": "[FIX] Replace encrypted text to Encrypted Message Placeholder", + "userLogin": "yash-rajpal", + "description": "### before \r\n![image](https://user-images.githubusercontent.com/27704687/150807900-154a9cdb-ee13-4333-8628-f287ab914b40.png)\r\n\r\n### after\r\n\"Screenshot", + "milestone": "4.7.0", + "contributors": [ + "yash-rajpal", + "albuquerquefabio", + "web-flow" + ] + }, + { + "pr": "24984", + "title": "[FIX] Prevent sequential messages edited icon to hide on hover", + "userLogin": "dougfabris", + "description": "### before\r\n\"Screen\r\n\r\n### after\r\n\"Screen", + "milestone": "4.7.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25024", + "title": "[IMPROVE] Improve active/hover colors in account sidebar", + "userLogin": "Himanshu664", + "milestone": "4.7.0", + "contributors": [ + "Himanshu664" + ] + }, + { + "pr": "24856", + "title": "[FIX] Full error message is visible", + "userLogin": "Himanshu664", + "milestone": "4.7.0", + "contributors": [ + "Himanshu664", + "tassoevan" + ] + }, + { + "pr": "24708", + "title": "Chore: Cancel running jobs if PR is updated", + "userLogin": "debdutdeb", + "contributors": [ + "debdutdeb", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24900", + "title": "Chore: organize test files and fix code coverage", + "userLogin": "tmontini", + "contributors": [ + null, + "tmontini", + "rodrigok" + ] + }, + { + "pr": "24464", + "title": "Chore: Missing keys in APIsDisplay", + "userLogin": "dougfabris", + "milestone": "4.7.0", + "contributors": [ + "dougfabris", + "tassoevan" + ] + }, + { + "pr": "25057", + "title": "Bump ejson from 2.2.1 to 2.2.2", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "25053", + "title": "Chore: Remove Alpine image deps after using them", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25052", + "title": "Bump pino and pino-pretty", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "25050", + "title": "[FIX] Upgrade Tab showing for a split second", + "userLogin": "gabriellsh", + "milestone": "4.6.1", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "25055", + "title": "[FIX] UserAutoComplete not rendering UserAvatar correctly", + "userLogin": "dougfabris", + "description": "### before\r\n![Screen Shot 2022-04-04 at 16 50 21](https://user-images.githubusercontent.com/27704687/161620921-800bf66a-806d-4f83-b2e1-073c34215001.png)\r\n\r\n### after\r\n![Screen Shot 2022-04-04 at 16 49 00](https://user-images.githubusercontent.com/27704687/161620720-3e27774d-c241-46ca-b764-932a9295d709.png)", + "milestone": "4.6.1", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "25031", + "title": "Chore: TS conversion folder client", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "web-flow" + ] + }, + { + "pr": "24991", + "title": "Bump minimist from 1.2.5 to 1.2.6 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "25002", + "title": "Bump template-file from 6.0.0 to 6.0.1", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "25042", + "title": "Bump body-parser from 1.19.2 to 1.20.0 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "25043", + "title": "i18n: Language update from LingoHub 🤖 on 2022-04-04Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "25028", + "title": "Merge master into develop & Set version to 4.7.0-develop", + "userLogin": "sampaiodiego", + "contributors": [ + "AllanPazRibeiro", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "25027", + "title": "Release 4.6.0", + "userLogin": "sampaiodiego", + "contributors": [ + "pierre-lehnen-rc", + "aswinidev", + "web-flow", + "renatobecker", + "sampaiodiego", + "dependabot[bot]", + "lingohub[bot]", + "matheusbsilva137", + "amolghode1981", + "debdutdeb", + "eduardofcabrera", + "juliajforesti", + "tiagoevanp", + "KevLehman" + ] + }, + { + "pr": "25021", + "title": "Bump @rocket.chat/emitter from 0.31.4 to 0.31.9 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "25020", + "title": "Bump @rocket.chat/ui-kit from 0.31.4 to 0.31.9 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "25019", + "title": "Bump @rocket.chat/message-parser from 0.31.4 to 0.31.9 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "25018", + "title": "Bump @rocket.chat/string-helpers from 0.31.4 to 0.31.9 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "25017", + "title": "Regression: Add createdOTR index", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24998", + "title": "Release 4.5.5", + "userLogin": "sampaiodiego", + "contributors": [ + "MartinSchoeler", + "sampaiodiego", + "filipemarins", + "tiagoevanp" + ] + }, + { + "pr": "24994", + "title": "[FIX] High CPU usage caused by CallProvider", + "userLogin": "tiagoevanp", + "description": "Remove infinity loop inside useVoipClient hook.\r\n\r\n#closes #24970", + "milestone": "4.5.5", + "contributors": [ + "ggazzo", + "tiagoevanp" + ] + }, + { + "pr": "24955", + "title": "[FIX] Multiple issues starting a new DM", + "userLogin": "filipemarins", + "description": "When the room object is searched for the first time, it does not exist on the front object yet (subscription), adding a fallback search for room list will guarantee to search the room details.\r\n\r\nbefore:\r\nhttps://user-images.githubusercontent.com/9275105/160223241-d2319f3e-82c5-47d6-867f-695ab2361a17.mp4\r\n\r\nafter:\r\nhttps://user-images.githubusercontent.com/9275105/160223244-84d0d2a1-3d95-464d-8b8a-e264b0d4d690.mp4", + "milestone": "4.5.5", + "contributors": [ + "filipemarins", + "pierre-lehnen-rc" + ] + }, + { + "pr": "24990", + "title": "Chore: Update Livechat", + "userLogin": "MartinSchoeler", + "milestone": "4.5.5", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24938", + "title": "Release 4.5.4", + "userLogin": "AllanPazRibeiro", + "contributors": [ + "geekgonecrazy", + "AllanPazRibeiro" + ] + }, + { + "pr": "24930", + "title": "[FIX] SAML Force name to string", + "userLogin": "geekgonecrazy", + "milestone": "4.5.4", + "contributors": [ + "geekgonecrazy", + "web-flow", + "pierre-lehnen-rc" + ] + }, + { + "pr": "25015", + "title": "Chore: Bump Fuselage packages", + "userLogin": "dougfabris", + "description": "It uses the last stable version of Fuselage packages.", + "milestone": "4.6.0", + "contributors": [ + "dougfabris", + "tassoevan" + ] + }, + { + "pr": "24999", + "title": "Regression: Custom roles displaying ID instead of name on some admin screens", + "userLogin": "pierre-lehnen-rc", + "description": "![image](https://user-images.githubusercontent.com/55164754/160981416-555bcaa1-c075-4260-937c-64523472da43.png)\r\n![image](https://user-images.githubusercontent.com/55164754/160981452-6eae4e74-8425-4073-8256-472aba72b9db.png)", + "milestone": "4.6.0", + "contributors": [ + "pierre-lehnen-rc", + "dougfabris", + "web-flow" + ] + }, + { + "pr": "24835", + "title": "[NEW] Upgrade Tab", + "userLogin": "gabriellsh", + "description": "![image](https://user-images.githubusercontent.com/27704687/160172260-c656282e-a487-4092-948d-d11c9bacb598.png)", + "milestone": "4.6.0", + "contributors": [ + "gabriellsh", + "dougfabris", + "web-flow", + "tassoevan", + "pierre-lehnen-rc" + ] + }, + { + "pr": "24980", + "title": "Regression: Error is raised when there's no Asterisk queue available yet", + "userLogin": "amolghode1981", + "milestone": "4.6.0", + "contributors": [ + "amolghode1981" + ] + }, + { + "pr": "24994", + "title": "[FIX] High CPU usage caused by CallProvider", + "userLogin": "tiagoevanp", + "description": "Remove infinity loop inside useVoipClient hook.\r\n\r\n#closes #24970", + "milestone": "4.5.5", + "contributors": [ + "ggazzo", + "tiagoevanp" + ] + }, + { + "pr": "24955", + "title": "[FIX] Multiple issues starting a new DM", + "userLogin": "filipemarins", + "description": "When the room object is searched for the first time, it does not exist on the front object yet (subscription), adding a fallback search for room list will guarantee to search the room details.\r\n\r\nbefore:\r\nhttps://user-images.githubusercontent.com/9275105/160223241-d2319f3e-82c5-47d6-867f-695ab2361a17.mp4\r\n\r\nafter:\r\nhttps://user-images.githubusercontent.com/9275105/160223244-84d0d2a1-3d95-464d-8b8a-e264b0d4d690.mp4", + "milestone": "4.5.5", + "contributors": [ + "filipemarins", + "pierre-lehnen-rc" + ] + }, + { + "pr": "24969", + "title": "Chore: Storybook mocking and examples improved", + "userLogin": "tassoevan", + "description": "- Stories from `ee/` included;\r\n- Differentiate root story kinds;\r\n- Mocking of `ServerContext` via Storybook parameters.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "24990", + "title": "Chore: Update Livechat", + "userLogin": "MartinSchoeler", + "milestone": "4.5.5", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24989", + "title": "Revert: [NEW] Engagement Statistics", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24897", + "title": "[FIX] Room archived/unarchived system messages aren't sent when editing room settings", + "userLogin": "matheusbsilva137", + "description": "- Send the \"Room archived\" and \"Room unarchived\" system messages when editing room settings (and not only when rooms are archived/unarchived with the slash-command);\r\n- Fix the \"Hide System Messages\" option for the \"Room archived\" and \"Room unarchived\" system messages;", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "24925", + "title": "Chore: add some missing REST definitions", + "userLogin": "gerzonc", + "description": "On the [mobile client](https://github.com/RocketChat/Rocket.Chat.ReactNative), we made an effort to collect more `REST API` definitions that are missing on the server side during our migration to TypeScript. Since we're both migrating to TypeScript, we thought it would be a good idea to share those so you guys can benefit from our initiative.", + "contributors": [ + "gerzonc" + ] + }, + { + "pr": "24971", + "title": "i18n: Language update from LingoHub 🤖 on 2022-03-28Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "24921", + "title": "[FIX] Register with Secret URL", + "userLogin": "yash-rajpal", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "24948", + "title": "Regression: Fix unexpected errors breaking ddp-streamer", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24320", + "title": "[FIX] LDAP avatars being rotated according to metadata even if the setting to rotate uploads is off", + "userLogin": "matheusbsilva137", + "description": "- Use the `FileUpload_RotateImages` setting (**Administration > File Upload > Rotate images on upload**) to control whether avatars should be rotated automatically based on their data (XEIF);\r\n- Display the avatar image preview (orientation) according to the `FileUpload_RotateImages` setting.", + "milestone": "4.6.0", + "contributors": [ + "matheusbsilva137", + "web-flow", + "pierre-lehnen-rc" + ] + }, + { + "pr": "24930", + "title": "[FIX] SAML Force name to string", + "userLogin": "geekgonecrazy", + "milestone": "4.5.4", + "contributors": [ + "geekgonecrazy", + "web-flow", + "pierre-lehnen-rc" + ] + }, + { + "pr": "24908", + "title": "Regression: Call doesn't stop ringing after agent unregistration", + "userLogin": "MartinSchoeler", + "milestone": "4.6.0", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24777", + "title": "[NEW] Engagement Statistics", + "userLogin": "eduardofcabrera", + "contributors": [ + "eduardofcabrera", + "ostjen", + "web-flow" + ] + }, + { + "pr": "24920", + "title": "Regression: Fix account service login expiration", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24867", + "title": "[FIX] Duplicated \"jump to message\" button on starred messages", + "userLogin": "Himanshu664", + "contributors": [ + "Himanshu664" + ] + }, + { + "pr": "24860", + "title": "[FIX] External search providers not working", + "userLogin": "tkurz", + "contributors": [ + "tkurz" + ] + }, + { + "pr": "24052", + "title": "[FIX] Several issues related to custom roles", + "userLogin": "pierre-lehnen-rc", + "description": "- Throw an error when trying to delete a role (User or Subscription role) that are still being used;\r\n- Fix \"Invalid Role\" error for custom roles in Role Editing sidebar;\r\n- Fix \"Users in Role\" screen for custom roles.", + "milestone": "4.6.0", + "contributors": [ + "pierre-lehnen-rc", + "matheusbsilva137", + "web-flow" + ] + }, + { + "pr": "24781", + "title": "[NEW] Telemetry Events", + "userLogin": "eduardofcabrera", + "contributors": [ + "eduardofcabrera", + "ostjen", + "web-flow" + ] + }, + { + "pr": "24887", + "title": "[IMPROVE] Adding new statistics related to voip and omnichannel", + "userLogin": "cauefcr", + "description": "- Total of Canned response messages sent\r\n- Total of tags used\r\n- Last-Chatted Agent Preferred (enabled/disabled)\r\n- Assign new conversations to the contact manager (enabled/disabled)\r\n- How to handle Visitor Abandonment setting\r\n- Amount of chats placed on hold\r\n- VoIP Enabled\r\n- Amount of VoIP Calls\r\n- Amount of VoIP Extensions connected\r\n- Amount of Calls placed on hold (1x per call)\r\n- Fixed Session Aggregation type definitions", + "milestone": "4.6.0", + "contributors": [ + "cauefcr", + "KevLehman" + ] + }, + { + "pr": "24911", + "title": "Chore: Remove old scripts", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24898", + "title": "[FIX] DDP Rate Limiter Translation key", + "userLogin": "gabriellsh", + "description": "Before:\r\n\"image\"\r\n\r\n\r\nNow:\r\n\"image\"", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "24831", + "title": "[FIX][ENTERPRISE] Notifications not being sent by ddp-streamer", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24884", + "title": "Release 4.5.3", + "userLogin": "AllanPazRibeiro", + "contributors": [ + "tiagoevanp", + "sampaiodiego", + "KevLehman", + "amolghode1981", + "ggazzo" + ] + }, + { + "pr": "24901", + "title": "[FIX] Custom script not being fired", + "userLogin": "ggazzo", + "milestone": "4.5.3", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "24877", + "title": "Chore: Fix MongoDB versions on release notes", + "userLogin": "sampaiodiego", + "milestone": "4.5.3", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24864", + "title": "[FIX] Disable voip button when call is in progress", + "userLogin": "KevLehman", + "milestone": "4.5.3", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24863", + "title": "[FIX] Broken build caused by PRs modifying same file differently", + "userLogin": "KevLehman", + "milestone": "4.5.3", + "contributors": [ + "KevLehman", + "tiagoevanp" + ] + }, + { + "pr": "24838", + "title": "[FIX] [VOIP] SidebarFooter component ", + "userLogin": "tiagoevanp", + "description": "- Improve the CallProvider code;\r\n- Adjust the text case of the VoIP component on the FooterSidebar;\r\n- Fix the bad behavior with the changes in queue's name.", + "milestone": "4.5.3", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "24837", + "title": "[IMPROVE] Standarize queue behavior for managers and agents when subscribing", + "userLogin": "KevLehman", + "milestone": "4.5.3", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24829", + "title": "[FIX] Show only enabled departments on forward", + "userLogin": "KevLehman", + "milestone": "4.5.3", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24799", + "title": "[FIX] Wrong param usage on queue summary call", + "userLogin": "KevLehman", + "milestone": "4.5.3", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24789", + "title": "[FIX] VoIP button gets disabled whenever user status changes", + "userLogin": "amolghode1981", + "milestone": "4.5.3", + "contributors": [ + "amolghode1981" + ] + }, + { + "pr": "24752", + "title": "[FIX] Show call icon only when user has extension associated", + "userLogin": "KevLehman", + "milestone": "4.5.3", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24748", + "title": "[IMPROVE] UX - VoIP Call Component", + "userLogin": "tiagoevanp", + "milestone": "4.5.3", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "24814", + "title": "Release 4.5.2", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "MartinSchoeler", + "pierre-lehnen-rc", + "tassoevan", + "debdutdeb", + "KevLehman", + "murtaza98", + "sampaiodiego", + "juliajforesti" + ] + }, + { + "pr": "24812", + "title": "[FIX] Revert AutoComplete", + "userLogin": "juliajforesti", + "milestone": "4.5.2", + "contributors": [ + "juliajforesti", + "ggazzo" + ] + }, + { + "pr": "24809", + "title": "Regression: Fix ParentRoomWithEndpointData in loop", + "userLogin": "sampaiodiego", + "milestone": "4.5.2", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24732", + "title": "[FIX] `PaginatedSelectFiltered` not handling changes", + "userLogin": "tassoevan", + "milestone": "4.5.2", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "24805", + "title": "[FIX] Critical: Incorrect visitor getting assigned to a chat from apps", + "userLogin": "murtaza98", + "milestone": "4.5.2", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24804", + "title": "[FIX] \"livechat/webrtc.call\" endpoint not working", + "userLogin": "murtaza98", + "milestone": "4.5.2", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24792", + "title": "[FIX] VoipExtensionsPage component call", + "userLogin": "KevLehman", + "milestone": "4.5.2", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24705", + "title": "[FIX] Broken multiple OAuth integrations", + "userLogin": "debdutdeb", + "milestone": "4.5.2", + "contributors": [ + "debdutdeb" + ] + }, + { + "pr": "24623", + "title": "[FIX] Opening a new DM from user card", + "userLogin": "tassoevan", + "description": "A race condition on `useRoomIcon` -- delayed merge of rooms and subscriptions -- was causing a UI crash whenever someone tried to open a DM from the user card component.", + "milestone": "4.5.2", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "24750", + "title": "[IMPROVE] Voip Extensions disabled state", + "userLogin": "MartinSchoeler", + "milestone": "4.5.2", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24782", + "title": "Release 4.5.1", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "renatobecker", + "pierre-lehnen-rc", + "sampaiodiego", + "matheusbsilva137", + "amolghode1981", + "juliajforesti", + "tiagoevanp", + "KevLehman", + "MartinSchoeler", + "Aman-Maheshwari", + "cuonghuunguyen" + ] + }, + { + "pr": "24760", + "title": "[FIX] Apple login script being loaded even when Apple Login is disabled.", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.5.1", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "24754", + "title": "Chore: Update Livechat", + "userLogin": "MartinSchoeler", + "milestone": "4.5.1", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24683", + "title": "[FIX] no id of room closer in livechat-close message", + "userLogin": "cuonghuunguyen", + "milestone": "4.5.1", + "contributors": [ + null + ] + }, + { + "pr": "23795", + "title": "[FIX] Reload roomslist after successful deletion of a room from admin panel.", + "userLogin": "Aman-Maheshwari", + "description": "Removed the logic for calling the `rooms.adminRooms` endPoint from the `RoomsTable` Component and moved it to its parent component `RoomsPage`.\r\nThis allows to call the endPoint `rooms.adminRooms` from `EditRoomContextBar` Component which is also has `RoomPage` Component as its parent.\r\n\r\nAlso added a succes toast message after the successful deletion of room.", + "milestone": "4.5.1", + "contributors": [ + "Aman-Maheshwari", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "24743", + "title": "[FIX] System messages are sent when adding or removing a group from a team", + "userLogin": "matheusbsilva137", + "description": "- Do not send system messages when adding or removing a new or existing _group_ from a team.", + "milestone": "4.5.1", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "24737", + "title": "[FIX] Typo and placeholder on wrap up call modal", + "userLogin": "MartinSchoeler", + "milestone": "4.5.1", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24680", + "title": "[FIX] Show only available agents on extension association modal", + "userLogin": "KevLehman", + "milestone": "4.5.1", + "contributors": [ + "KevLehman", + "tiagoevanp" + ] + }, + { + "pr": "24607", + "title": "[FIX] VoIP Enable/Disable setting on CallContext/CallProvider Notifications", + "userLogin": "tiagoevanp", + "milestone": "4.5.1", + "contributors": [ + "tiagoevanp", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "24677", + "title": "[FIX] Components for user search", + "userLogin": "juliajforesti", + "milestone": "4.5.1", + "contributors": [ + "juliajforesti", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "24657", + "title": "[FIX] Voip Stream Reinitialization Error", + "userLogin": "amolghode1981", + "milestone": "4.5.1", + "contributors": [ + "amolghode1981" + ] + }, + { + "pr": "24696", + "title": "[FIX] Room's message count not being incremented on import", + "userLogin": "matheusbsilva137", + "description": "- Fix rooms' message counter not being incremented on message import.", + "milestone": "4.5.1", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "24674", + "title": "[FIX] Missing username on messages imported from Slack", + "userLogin": "matheusbsilva137", + "description": "- Fix missing sender's username on messages imported from Slack.", + "milestone": "4.5.1", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "24590", + "title": "[FIX] Duplicated 'name' log key", + "userLogin": "sampaiodiego", + "milestone": "4.5.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24661", + "title": "[FIX] Typo in wrap-up term", + "userLogin": "renatobecker", + "milestone": "4.5.1", + "contributors": [ + "renatobecker" + ] + }, + { + "pr": "24606", + "title": "[FIX] Push privacy config to not show username not being respected", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24901", + "title": "[FIX] Custom script not being fired", + "userLogin": "ggazzo", + "milestone": "4.5.3", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "24896", + "title": "[FIX] Wrong business hour behavior", + "userLogin": "murtaza98", + "milestone": "4.6.0", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24845", + "title": "[FIX] Ignore customClass on messages", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24879", + "title": "[FIX] Apple OAuth", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24895", + "title": "i18n: Language update from LingoHub 🤖 on 2022-03-21Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "24749", + "title": "[IMPROVE] New omnichannel statistics and async statistics processing.", + "userLogin": "cauefcr", + "description": "https://app.clickup.com/t/1z4zg4e", + "contributors": [ + "cauefcr" + ] + }, + { + "pr": "24882", + "title": "[FIX] Missing dependency on useEffect at CallProvider", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24877", + "title": "Chore: Fix MongoDB versions on release notes", + "userLogin": "sampaiodiego", + "milestone": "4.5.3", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24779", + "title": "[FIX] auto-join team channels not honoring user preferences", + "userLogin": "ostjen", + "contributors": [ + "ostjen" + ] + }, + { + "pr": "24869", + "title": "Bump pino from 7.8.1 to 7.9.1 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24870", + "title": "Bump pino-pretty from 7.5.3 to 7.5.4 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24864", + "title": "[FIX] Disable voip button when call is in progress", + "userLogin": "KevLehman", + "milestone": "4.5.3", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24863", + "title": "[FIX] Broken build caused by PRs modifying same file differently", + "userLogin": "KevLehman", + "milestone": "4.5.3", + "contributors": [ + "KevLehman", + "tiagoevanp" + ] + }, + { + "pr": "24850", + "title": "Regression: Role Sync not always working", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "24838", + "title": "[FIX] [VOIP] SidebarFooter component ", + "userLogin": "tiagoevanp", + "description": "- Improve the CallProvider code;\r\n- Adjust the text case of the VoIP component on the FooterSidebar;\r\n- Fix the bad behavior with the changes in queue's name.", + "milestone": "4.5.3", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "24837", + "title": "[IMPROVE] Standarize queue behavior for managers and agents when subscribing", + "userLogin": "KevLehman", + "milestone": "4.5.3", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24789", + "title": "[FIX] VoIP button gets disabled whenever user status changes", + "userLogin": "amolghode1981", + "milestone": "4.5.3", + "contributors": [ + "amolghode1981" + ] + }, + { + "pr": "24799", + "title": "[FIX] Wrong param usage on queue summary call", + "userLogin": "KevLehman", + "milestone": "4.5.3", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24829", + "title": "[FIX] Show only enabled departments on forward", + "userLogin": "KevLehman", + "milestone": "4.5.3", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24823", + "title": "i18n: Language update from LingoHub 🤖 on 2022-03-14Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null, + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24833", + "title": "Bump @types/mailparser from 3.0.2 to 3.4.0", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24832", + "title": "Bump @types/clipboard from 2.0.1 to 2.0.7", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24822", + "title": "Bump @types/nodemailer from 6.4.2 to 6.4.4", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24821", + "title": "Bump body-parser from 1.19.0 to 1.19.2", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24820", + "title": "Bump @types/ws from 8.5.2 to 8.5.3 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24764", + "title": "Chore: Add E2E tests for livechat/visitor", + "userLogin": "Muramatsu2602", + "description": "- Create a new test suite file under tests/end-to-end/api/livechat\r\n- Create tests for the following endpoints:\r\n + livechat/visitor (create visitor, update visitor, add custom fields to visitors)", + "contributors": [ + "Muramatsu2602", + "KevLehman" + ] + }, + { + "pr": "24729", + "title": "Chore: Add E2E tests for livechat/room.close", + "userLogin": "Muramatsu2602", + "description": "* Create a new test suite file under tests/end-to-end/api/livechat\r\n * Create tests for the following endpoint:\r\n\t + ivechat/room.close", + "contributors": [ + "Muramatsu2602", + "web-flow", + "KevLehman" + ] + }, + { + "pr": "24785", + "title": "[FIX] German translation for Monitore", + "userLogin": "JMoVS", + "contributors": [ + "JMoVS", + "web-flow" + ] + }, + { + "pr": "24812", + "title": "[FIX] Revert AutoComplete", + "userLogin": "juliajforesti", + "milestone": "4.5.2", + "contributors": [ + "juliajforesti", + "ggazzo" + ] + }, + { + "pr": "24747", + "title": "Chore: APIClass types", + "userLogin": "felipe-rod123", + "description": "This pull request creates a new `restivus` module (.d.ts) for the `api.js` file.", + "contributors": [ + "felipe-rod123", + "ggazzo" + ] + }, + { + "pr": "24801", + "title": "Bump is-svg from 4.3.1 to 4.3.2", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24803", + "title": "Bump prometheus-gc-stats from 0.6.2 to 0.6.3", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24810", + "title": "Chore: Skip local services changes when shutting down duplicated services", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24629", + "title": "[FIX] \"Match error\" when converting a team to a channel", + "userLogin": "matheusbsilva137", + "description": "- Fix \"Match error\" when trying to convert a channel to a team;", + "milestone": "4.6.0", + "contributors": [ + "matheusbsilva137", + "web-flow" + ] + }, + { + "pr": "24809", + "title": "Regression: Fix ParentRoomWithEndpointData in loop", + "userLogin": "sampaiodiego", + "milestone": "4.5.2", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24397", + "title": "Chore: Get Settings Statistics", + "userLogin": "albuquerquefabio", + "contributors": [ + "albuquerquefabio" + ] + }, + { + "pr": "24732", + "title": "[FIX] `PaginatedSelectFiltered` not handling changes", + "userLogin": "tassoevan", + "milestone": "4.5.2", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "24628", + "title": "Chore: converted more hooks to typescript", + "userLogin": "felipe-rod123", + "description": "Converted some functions on `client/hooks/` from JavaScript to Typescript.", + "contributors": [ + "felipe-rod123", + "ggazzo" + ] + }, + { + "pr": "24506", + "title": "Chore: added settings endpoint types", + "userLogin": "felipe-rod123", + "description": "Created typing for endpoint definitions on `settings.ts`.", + "contributors": [ + "felipe-rod123", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "24226", + "title": "[FIX] Handle Other Formats inside Upload Avatar", + "userLogin": "nishant23122000", + "description": "After resolving issue #24213 : \r\n\r\n\r\nhttps://user-images.githubusercontent.com/53515714/150325012-91413025-786e-4ce0-ae75-629f6b05b024.mp4", + "milestone": "4.6.0", + "contributors": [ + "nishant23122000", + "debdutdeb", + "web-flow", + "murtaza98" + ] + }, + { + "pr": "24424", + "title": "[FIX] Prune Message issue", + "userLogin": "nishant23122000", + "milestone": "4.6.0", + "contributors": [ + "nishant23122000", + "debdutdeb", + "web-flow" + ] + }, + { + "pr": "24805", + "title": "[FIX] Critical: Incorrect visitor getting assigned to a chat from apps", + "userLogin": "murtaza98", + "milestone": "4.5.2", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24804", + "title": "[FIX] \"livechat/webrtc.call\" endpoint not working", + "userLogin": "murtaza98", + "milestone": "4.5.2", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24507", + "title": "Chore: added Server Instances endpoint types", + "userLogin": "felipe-rod123", + "description": "Created typing for endpoint definitions on `instances.ts`.", + "contributors": [ + "felipe-rod123" + ] + }, + { + "pr": "24758", + "title": "[FIX] Prevent call button toggle when user is on call", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24800", + "title": "Regression: Register services right away", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24792", + "title": "[FIX] VoipExtensionsPage component call", + "userLogin": "KevLehman", + "milestone": "4.5.2", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24384", + "title": "Chore: Convert server functions from javascript to typescript", + "userLogin": "felipe-rod123", + "description": "This pull request will be used to rewrite some functions on the Chat Engine to Typescript, in order to increase security and specify variable types on the code.", + "contributors": [ + "felipe-rod123", + "ggazzo" + ] + }, + { + "pr": "24705", + "title": "[FIX] Broken multiple OAuth integrations", + "userLogin": "debdutdeb", + "milestone": "4.5.2", + "contributors": [ + "debdutdeb" + ] + }, + { + "pr": "24793", + "title": "[FIX][ENTERPRISE] Auto reload feature of ddp-streamer micro service", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24783", + "title": "Bump pino from 7.8.0 to 7.8.1 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23121", + "title": "Bump jschardet from 1.6.0 to 3.0.0", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24752", + "title": "[FIX] Show call icon only when user has extension associated", + "userLogin": "KevLehman", + "milestone": "4.5.3", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24623", + "title": "[FIX] Opening a new DM from user card", + "userLogin": "tassoevan", + "description": "A race condition on `useRoomIcon` -- delayed merge of rooms and subscriptions -- was causing a UI crash whenever someone tried to open a DM from the user card component.", + "milestone": "4.5.2", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "24750", + "title": "[IMPROVE] Voip Extensions disabled state", + "userLogin": "MartinSchoeler", + "milestone": "4.5.2", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24748", + "title": "[IMPROVE] UX - VoIP Call Component", + "userLogin": "tiagoevanp", + "milestone": "4.5.3", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "24753", + "title": "Chore: Micro services fixes and cleanup", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24756", + "title": "Regression: Improve Sidenav open/close handling and fixed codeql configs and E2E tests", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "24760", + "title": "[FIX] Apple login script being loaded even when Apple Login is disabled.", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.5.1", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "24754", + "title": "Chore: Update Livechat", + "userLogin": "MartinSchoeler", + "milestone": "4.5.1", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24683", + "title": "[FIX] no id of room closer in livechat-close message", + "userLogin": "cuonghuunguyen", + "milestone": "4.5.1", + "contributors": [ + null + ] + }, + { + "pr": "24771", + "title": "Chore: fix grammatical errors in Features", + "userLogin": "aadishJ01", + "contributors": [ + "aadishJ01", + "web-flow" + ] + }, + { + "pr": "24759", + "title": "Chore: Fix grammatical errors in Code of Conduct", + "userLogin": "aadishJ01", + "contributors": [ + "aadishJ01", + "web-flow" + ] + }, + { + "pr": "23795", + "title": "[FIX] Reload roomslist after successful deletion of a room from admin panel.", + "userLogin": "Aman-Maheshwari", + "description": "Removed the logic for calling the `rooms.adminRooms` endPoint from the `RoomsTable` Component and moved it to its parent component `RoomsPage`.\r\nThis allows to call the endPoint `rooms.adminRooms` from `EditRoomContextBar` Component which is also has `RoomPage` Component as its parent.\r\n\r\nAlso added a succes toast message after the successful deletion of room.", + "milestone": "4.5.1", + "contributors": [ + "Aman-Maheshwari", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "24743", + "title": "[FIX] System messages are sent when adding or removing a group from a team", + "userLogin": "matheusbsilva137", + "description": "- Do not send system messages when adding or removing a new or existing _group_ from a team.", + "milestone": "4.5.1", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "24544", + "title": "Chore: Fix Cypress tests", + "userLogin": "rodrigok", + "contributors": [ + "rodrigok", + "tassoevan", + "dougfabris" + ] + }, + { + "pr": "24737", + "title": "[FIX] Typo and placeholder on wrap up call modal", + "userLogin": "MartinSchoeler", + "milestone": "4.5.1", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24739", + "title": "[IMPROVE][ENTERPRISE] Don't start presence monitor when running micro services", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24738", + "title": "[FIX][ENTERPRISE] DDP streamer not sending data to all clients", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24680", + "title": "[FIX] Show only available agents on extension association modal", + "userLogin": "KevLehman", + "milestone": "4.5.1", + "contributors": [ + "KevLehman", + "tiagoevanp" + ] + }, + { + "pr": "24710", + "title": "[FIX] DDP streamer errors", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24724", + "title": "[FIX][ENTERPRISE] Presence micro service logic", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24717", + "title": "i18n: Language update from LingoHub 🤖 on 2022-03-07Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null, + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24607", + "title": "[FIX] VoIP Enable/Disable setting on CallContext/CallProvider Notifications", + "userLogin": "tiagoevanp", + "milestone": "4.5.1", + "contributors": [ + "tiagoevanp", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "24726", + "title": "Chore: Improve logger to allow log of `unknown` values", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24677", + "title": "[FIX] Components for user search", + "userLogin": "juliajforesti", + "milestone": "4.5.1", + "contributors": [ + "juliajforesti", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "24542", + "title": "[FIX] Date Message Export Filter Fix", + "userLogin": "eduardofcabrera", + "description": "Fix message export filter to get all messages between \"from date\" and \"to date\", including \"to date\".", + "contributors": [ + "eduardofcabrera", + "web-flow" + ] + }, + { + "pr": "24709", + "title": "[FIX] API Error preventing adding an email to users without one (like bot/app users)", + "userLogin": "debdutdeb", + "contributors": [ + "debdutdeb" + ] + }, + { + "pr": "24716", + "title": "Bump ts-node from 10.6.0 to 10.7.0 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24476", + "title": "[FIX] Nextcloud OAuth for incomplete token URL", + "userLogin": "debdutdeb", + "milestone": "4.6.0", + "contributors": [ + "debdutdeb" + ] + }, + { + "pr": "24657", + "title": "[FIX] Voip Stream Reinitialization Error", + "userLogin": "amolghode1981", + "milestone": "4.5.1", + "contributors": [ + "amolghode1981" + ] + }, + { + "pr": "24698", + "title": "Bump pino-pretty from 7.5.2 to 7.5.3 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24696", + "title": "[FIX] Room's message count not being incremented on import", + "userLogin": "matheusbsilva137", + "description": "- Fix rooms' message counter not being incremented on message import.", + "milestone": "4.5.1", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "23824", + "title": "Chore: Improvements on role syncing (ldap, oauth and saml)", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc", + "tassoevan" + ] + }, + { + "pr": "24689", + "title": "Bump pino-pretty from 7.5.1 to 7.5.2 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24674", + "title": "[FIX] Missing username on messages imported from Slack", + "userLogin": "matheusbsilva137", + "description": "- Fix missing sender's username on messages imported from Slack.", + "milestone": "4.5.1", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "24642", + "title": "Bump actions/setup-node from 2 to 3", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24644", + "title": "i18n: Language update from LingoHub 🤖 on 2022-02-28Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null, + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24590", + "title": "[FIX] Duplicated 'name' log key", + "userLogin": "sampaiodiego", + "milestone": "4.5.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24668", + "title": "Bump actions/checkout from 2 to 3", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24574", + "title": "Chore(deps-dev): Bump @types/mock-require from 2.0.0 to 2.0.1", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24667", + "title": "Bump ts-node from 10.5.0 to 10.6.0 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24666", + "title": "Bump @types/ws from 8.2.3 to 8.5.2 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24640", + "title": "Bump url-parse from 1.5.7 to 1.5.10", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24653", + "title": "Merge master into develop & Set version to 4.6.0-develop", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc", + "web-flow" + ] + }, + { + "pr": "24652", + "title": "Release 4.5.0", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "sampaiodiego", + "web-flow", + "aswinidev", + "debdutdeb", + "dependabot[bot]", + "lingohub[bot]", + "ostjen", + "KevLehman", + "dougfabris", + "LucasFASouza", + "felipe-rod123", + "guijun13", + "pierre-lehnen-rc", + "filipemarins", + "matheusbsilva137", + "gabriellsh" + ] + }, + { + "pr": "24661", + "title": "[FIX] Typo in wrap-up term", + "userLogin": "renatobecker", + "milestone": "4.5.1", + "contributors": [ + "renatobecker" + ] + }, + { + "pr": "24028", + "title": "[IMPROVE] Updated links in readme", + "userLogin": "aswinidev", + "contributors": [ + "aswinidev", + "web-flow", + "debdutdeb" + ] + }, + { + "pr": "24459", + "title": "Release 4.4.2", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "dougfabris", + "pierre-lehnen-rc", + "sampaiodiego" + ] + }, + { + "pr": "24450", + "title": "[FIX] OAuth mismatch redirect_uri error", + "userLogin": "sampaiodiego", + "milestone": "4.4.2", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24453", + "title": "Chore: bump fuselage version", + "userLogin": "dougfabris", + "milestone": "4.4.2", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "24432", + "title": "Release 4.4.1", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "sampaiodiego", + "pierre-lehnen-rc", + "dougfabris", + "ostjen" + ] + }, + { + "pr": "24387", + "title": "[FIX] Slash commands previews not working", + "userLogin": "ostjen", + "milestone": "4.4.1", + "contributors": [ + "ostjen" + ] + }, + { + "pr": "24381", + "title": "[FIX] Add ?close to OAuth callback url", + "userLogin": "sampaiodiego", + "milestone": "4.4.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24409", + "title": "[FIX] Startup errors creating indexes", + "userLogin": "sampaiodiego", + "description": "Fix `bio` and `prid` startup index creation errors.", + "milestone": "4.4.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24401", + "title": "[FIX] Outgoing webhook without scripts not saving messages", + "userLogin": "sampaiodiego", + "milestone": "4.4.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24407", + "title": "[FIX] Skip cloud steps for registered servers on setup wizard", + "userLogin": "dougfabris", + "milestone": "4.4.1", + "contributors": [ + "dougfabris", + "tassoevan", + "gabriellsh", + "web-flow" + ] + }, + { + "pr": "24418", + "title": "[FIX] Oembed request not respecting payload limit", + "userLogin": "sampaiodiego", + "milestone": "4.4.1", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24651", + "title": "Chore: Update Apps-Engine", + "userLogin": "d-gubert", + "milestone": "4.5.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "24649", + "title": "Regression: Refresh server connection when MI server settings change", + "userLogin": "KevLehman", + "milestone": "4.5.0", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24648", + "title": "Regression: Prevent button from losing state when rerendering", + "userLogin": "KevLehman", + "milestone": "4.5.0", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24585", + "title": "Regression: Error setting user avatars and mentioning rooms on Slack Import", + "userLogin": "matheusbsilva137", + "description": "- Fix `Mentioned room not found` error when importing rooms from Slack;\r\n- Fix `Forbidden` error when setting avatars for users imported from Slack (on user import/creation);\r\n- Fix incorrect message count on imported rooms;\r\n- Fix missing username on messages imported from Slack;", + "contributors": [ + "matheusbsilva137", + "pierre-lehnen-rc" + ] + }, + { + "pr": "24647", + "title": "Regression: Fix wrong tab name for VoIP settings", + "userLogin": "renatobecker", + "milestone": "4.5.0", + "contributors": [ + "renatobecker" + ] + }, + { + "pr": "24646", + "title": "Regression: Server crashing if Voip credentials are invalid", + "userLogin": "murtaza98", + "milestone": "4.5.0", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24645", + "title": "Regression: Extension List panel UI not aligned with designs", + "userLogin": "murtaza98", + "milestone": "4.5.0", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24635", + "title": "Regression: Queue counter aggregator for incoming/hanged calls", + "userLogin": "amolghode1981", + "milestone": "4.5.0", + "contributors": [ + "amolghode1981" + ] + }, + { + "pr": "24630", + "title": "Regression: Fix double value on holdTime and empty msg on last message", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler", + "web-flow" + ] + }, + { + "pr": "24624", + "title": "Regression: If Asterisk suddenly goes down, server has no way to know. Causes server to get stuck. Needs restart", + "userLogin": "amolghode1981", + "milestone": "4.5.0", + "contributors": [ + "amolghode1981", + "KevLehman" + ] + }, + { + "pr": "24601", + "title": "Regression: Prevent connect to asterisk when VoIP is disabled", + "userLogin": "murtaza98", + "milestone": "4.5.0", + "contributors": [ + "murtaza98", + "web-flow", + "KevLehman" + ] + }, + { + "pr": "24626", + "title": "Regression: Encode registration info as JWT when signing key is provided", + "userLogin": "KevLehman", + "milestone": "4.5.0", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24625", + "title": "Regression: Fix time fields and wrap up in Voip Room Contexual bar", + "userLogin": "MartinSchoeler", + "milestone": "4.5.0", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24592", + "title": "Regression: Fix in-correct room status shown to agents", + "userLogin": "murtaza98", + "milestone": "4.5.0", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24619", + "title": "Regression: Do not show toast on incoming voip calls", + "userLogin": "murtaza98", + "milestone": "4.5.0", + "contributors": [ + "murtaza98", + "web-flow" + ] + }, + { + "pr": "24616", + "title": "Regression: Fix incoming voip call ringtone is not ringing", + "userLogin": "murtaza98", + "contributors": [ + "murtaza98", + "web-flow" + ] + }, + { + "pr": "24610", + "title": "Regression: Mark all rooms as read modal closing instantly.", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "24615", + "title": "Regression: Fix translation for call started message", + "userLogin": "murtaza98", + "milestone": "4.5.0", + "contributors": [ + "murtaza98", + "web-flow" + ] + }, + { + "pr": "24594", + "title": "Regression: Bunch of settings fixes for VoIP", + "userLogin": "MartinSchoeler", + "milestone": "4.5.0", + "contributors": [ + "MartinSchoeler", + "web-flow" + ] + }, + { + "pr": "24609", + "title": "Regression: Admin Sidebar colors inverted.", + "userLogin": "gabriellsh", + "milestone": "4.5.0", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "24602", + "title": "Regression: No audio when call comes from Skype/IP phone", + "userLogin": "amolghode1981", + "description": "The audio was not rendered because of re-rendering of react element based on\r\nqueueCounter and roomInfo. queueCounter and roomInfo cause the dom to re-render when call gets accepted\r\nbecause after accepting call, queueCounter changes or a room gets created.\r\nThe audio element gets recreated. But VoIP user probably holds the old one.\r\nThe behaviour is not predictable when such case happens. If everything gets cleanly setup,\r\neven if the audio element goes headless, it still continues to play the remote audio.\r\nBut in other cases, it is unreferenced the one on dom has its srcObject as null.\r\nThis causes no audio.\r\n\r\nThis fix provides a way to re-initialise the rendering elements in VoIP user\r\nand calls this function on useEffect() if the re-render has happen.", + "milestone": "4.5.0", + "contributors": [ + "amolghode1981" + ] + }, + { + "pr": "24596", + "title": "Regression: Fixes in Voice Contextual Bar and Directory", + "userLogin": "MartinSchoeler", + "milestone": "4.5.0", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24603", + "title": "Regression: Fix time format on Voip system messages", + "userLogin": "murtaza98", + "milestone": "4.5.0", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24598", + "title": "Regression: VoIP service button displayed when VoIP is disabled", + "userLogin": "murtaza98", + "milestone": "4.5.0", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24581", + "title": "Regression: Add support to namespace within micro services", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24583", + "title": "Regression: Error when trying to load name of dm rooms for avatars and notifications", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "24567", + "title": "[NEW] Marketplace sort filter", + "userLogin": "ujorgeleite", + "description": "Implemented a sort filter for the marketplace screen. This component sorts the marketplace apps list in 4 ways, alphabetical order(A-Z), inverse alphabetical order(Z-A), most recently updated(MRU), and least recent updated(LRU). Besides that, I've generalized some components and types to increase code reusability, renamed some helpers as well as deleted some useless ones, and inserted the necessary new translations on the English i18n dictionary.\r\nDemo gif:\r\n![Marketplace sort filter](https://user-images.githubusercontent.com/43561537/155033709-e07a6306-a85a-4f7f-9624-b53ba5dd7fa9.gif)", + "milestone": "4.5.0", + "contributors": [ + "rique223", + "ujorgeleite" + ] + }, + { + "pr": "23102", + "title": "[NEW] VoIP Support for Omnichannel", + "userLogin": "KevLehman", + "description": "- Created VoipService to manage VoIP connections and PBX connection\r\n- Created LivechatVoipService that will handle custom cases for livechat (creating rooms, assigning chats to queue, actions when call is finished, etc)\r\n- Created Basic interfaces to support new services and new model\r\n- Created Endpoints for management interfaces\r\n- Implemented asterisk connector on VoIP service\r\n- Created UI components to show calls incoming and to allow answering/rejecting calls\r\n- Added new settings to control call server/management server connection values\r\n- Added endpoints to associate Omnichannel Agents with PBX Extensions\r\n- Added support for event listening on server side, to get metadata about calls being received/ongoing\r\n- Created new pages to update settings & to see user-extension association\r\n- Created new page to see ongoing calls (and past calls)\r\n- Added support for remote hangup/hold on calls\r\n- Implemented call metrics calculation (hold time, waiting time, talk time)\r\n- Show a notificaiton when call is received", + "milestone": "4.5.0", + "contributors": [ + "KevLehman", + "amolghode1981", + "web-flow", + "tiagoevanp", + "murtaza98", + "MartinSchoeler" + ] + }, + { + "pr": "24562", + "title": "Regression: Fix room not getting created due to null visitor status", + "userLogin": "murtaza98", + "milestone": "4.5.0", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24573", + "title": "Chore: Bump Fuselage packages", + "userLogin": "tassoevan", + "description": "It uses the last stable version of Fuselage packages.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "24558", + "title": "i18n: Language update from LingoHub 🤖 on 2022-02-21Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null, + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24572", + "title": "[FIX] 2FA via email when logging in using OAuth", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24568", + "title": "Chore: Update Apps-Engine", + "userLogin": "d-gubert", + "milestone": "4.5.0", + "contributors": [ + "d-gubert", + "web-flow" + ] + }, + { + "pr": "24536", + "title": "Chore: roomTypes: Stop mixing client and server code together", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.5.0", + "contributors": [ + "pierre-lehnen-rc", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "24529", + "title": "[IMPROVE] Replace AutoComplete in UserAutoComplete & UserAutoCompleteMultiple components", + "userLogin": "juliajforesti", + "description": "This PR replaces a deprecated fuselage's component `AutoComplete` in favor of `Select` and `MultiSelect` which fixes some of UX/UI issues in selecting users\r\n\r\n### before\r\n![Screen Shot 2022-02-19 at 13 33 28](https://user-images.githubusercontent.com/27704687/154809737-8181a06c-4f20-48ea-90f7-01e828b9a452.png)\r\n\r\n### after\r\n![Screen Shot 2022-02-19 at 13 30 58](https://user-images.githubusercontent.com/27704687/154809653-a8ec9a80-c0dd-4a25-9c00-0f96147d79e9.png)", + "contributors": [ + "juliajforesti", + "dougfabris", + "tassoevan" + ] + }, + { + "pr": "24513", + "title": "Chore: Run tests using microservices deployment on CI", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow", + "rodrigok" + ] + }, + { + "pr": "24556", + "title": "Bump @types/ws from 8.2.2 to 8.2.3 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24501", + "title": "Chore: Update fuselage deps to match monolith versions", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24538", + "title": "Bump adm-zip from 0.4.14 to 0.5.9", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24454", + "title": "[IMPROVE] Purchase Type Filter for marketplace apps and Categories filter anchor refactoring", + "userLogin": "rique223", + "description": "Implemented a filter by purchase type(free or paid) component for the apps screen of the marketplace. Besides that, new entries on the dictionary, fixed some parts of the App type (purchaseType was typed as unknown and price as string), and created some helpers to work alongside the filter. Will be refactoring the categories filter anchor and then will open this PR for reviews.\r\n\r\nDemo gif:\r\n![purchaseTypeFIlter](https://user-images.githubusercontent.com/43561537/153101228-7b7ebdc3-2d34-420f-aa9d-f7cbc8d4b53f.gif)\r\n\r\nRefactored the categories filter anchor from a plain fuselage select to a select button with dynamic colors.\r\nDemo gif:\r\n![New categories filter anchor(PR)](https://user-images.githubusercontent.com/43561537/153422427-28012b7d-e0ec-45f4-861d-c9368c57ad04.gif)", + "contributors": [ + "rique223", + "dougfabris", + "web-flow" + ] + }, + { + "pr": "24475", + "title": "[IMPROVE] Skip encryption for slash commands in E2E rooms", + "userLogin": "yash-rajpal", + "description": "Currently Slash Commands don't work in an E2EE room, as we encrypt the message before slash command is detected by the server, So removed encryption for slash commands in e2e rooms.", + "contributors": [ + "yash-rajpal", + "albuquerquefabio", + "web-flow" + ] + }, + { + "pr": "24304", + "title": "Chore: Js to ts slash commands archive", + "userLogin": "eduardofcabrera", + "description": "Convert Slash Commands archive files to typescript", + "contributors": [ + "eduardofcabrera", + "web-flow" + ] + }, + { + "pr": "24114", + "title": "[NEW] E2E password generator", + "userLogin": "ostjen", + "contributors": [ + "ostjen", + "web-flow", + "eduardofcabrera", + "tassoevan" + ] + }, + { + "pr": "24553", + "title": "[FIX] Omnichannel managers can't join chats in progress", + "userLogin": "renatobecker", + "milestone": "4.5.0", + "contributors": [ + "renatobecker", + "murtaza98", + "web-flow" + ] + }, + { + "pr": "24559", + "title": "[FIX] Room context tabs not working in Omnichannel current chats page", + "userLogin": "murtaza98", + "milestone": "4.5.0", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24173", + "title": "[FIX] respect `Accounts_Registration_Users_Default_Roles` setting", + "userLogin": "debdutdeb", + "description": "- Fix `user` role being added as default regardless of the `Accounts_Registration_Users_Default_Roles` setting.", + "milestone": "4.5.0", + "contributors": [ + "debdutdeb", + "web-flow", + "matheusbsilva137" + ] + }, + { + "pr": "24485", + "title": "[FIX] Skip admin info in setup wizard for servers with admin registered", + "userLogin": "dougfabris", + "contributors": [ + "dougfabris", + "tassoevan" + ] + }, + { + "pr": "24537", + "title": "Bump pm2 from 5.1.2 to 5.2.0 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24209", + "title": "[IMPROVE] Team system messages feedback", + "userLogin": "ostjen", + "description": "- Delete some keys that aren't being used (eg: User_left_female).\r\n- Add new Teams' system messages:\r\n - `added-user-to-team`: **added** @\\user to this Team;\r\n - `removed-user-from-team`: **removed** @\\user from this Team;\r\n - `user-converted-to-team`: **converted** #\\room to a Team;\r\n - `user-converted-to-channel`: **converted** #\\room to a Channel;\r\n - `user-removed-room-from-team`: **removed** @\\user from this Team;\r\n - `user-deleted-room-from-team`: **deleted** #\\room from this Team;\r\n - `user-added-room-to-team`: **deleted** #\\room to this Team;\r\n- Add the corresponding options to hide each new system message and the missing `ujt` and `ult` hide options.", + "milestone": "4.5.0", + "contributors": [ + "ostjen", + "tassoevan", + "web-flow", + "dougfabris", + "matheusbsilva137" + ] + }, + { + "pr": "24467", + "title": "Chore: Improve PR title validation regex", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow", + "debdutdeb" + ] + }, + { + "pr": "24058", + "title": "Bump date-fns from 2.24.0 to 2.28.0", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24508", + "title": "[FIX] Read receipts showing first messages of the room as read even if not read by everyone", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "24530", + "title": "Chore: Remove storybook build job from CI", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24528", + "title": "Bump url-parse from 1.5.3 to 1.5.7", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24333", + "title": "Chore: Add description to global OTR setting", + "userLogin": "pedrogssouza", + "contributors": [ + "pedrogssouza", + "yash-rajpal", + "web-flow" + ] + }, + { + "pr": "24382", + "title": "[IMPROVE] OTR system messages", + "userLogin": "yash-rajpal", + "description": "OTR system messages to indicate key refresh and joining chat to users.", + "contributors": [ + "yash-rajpal", + "web-flow" + ] + }, + { + "pr": "24121", + "title": "[IMPROVE] Descriptive tooltip for Encrypted Key on Room Header", + "userLogin": "yash-rajpal", + "milestone": "4.5.0", + "contributors": [ + "yash-rajpal", + "web-flow" + ] + }, + { + "pr": "24522", + "title": "Bump express from 4.17.2 to 4.17.3 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24518", + "title": "Chore: `twoFactorRequired` signature", + "userLogin": "tassoevan", + "description": "Improved type checking for decorator `twoFactorRequired`.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "24517", + "title": "Bump body-parser from 1.19.1 to 1.19.2 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24441", + "title": "[FIX] GDPR action to forget visitor data on request", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman", + "murtaza98", + "web-flow" + ] + }, + { + "pr": "24306", + "title": "Chore: Convert to typescript the slash commands create files", + "userLogin": "eduardofcabrera", + "description": "Convert Slash Commands create files to typescript.", + "contributors": [ + "eduardofcabrera", + "ostjen", + "web-flow" + ] + }, + { + "pr": "24325", + "title": "Chore: Convert to typescript the mute and unmute slash commands files", + "userLogin": "eduardofcabrera", + "description": "Convert to typescript the mute and unmute slash commands files", + "contributors": [ + "eduardofcabrera", + "ostjen", + "web-flow" + ] + }, + { + "pr": "24321", + "title": "Chore: Convert to typescript the me slashCommands files", + "userLogin": "eduardofcabrera", + "description": "Convert to typescript the me slashCommands files", + "contributors": [ + "eduardofcabrera", + "ostjen", + "web-flow" + ] + }, + { + "pr": "23512", + "title": "Bump sodium-native from 3.2.1 to 3.3.0 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24311", + "title": "Chore: Convert to typescript the slash commands invite files", + "userLogin": "eduardofcabrera", + "description": "Convert to typescript the slash commands invite files", + "contributors": [ + "eduardofcabrera", + "ostjen", + "web-flow" + ] + }, + { + "pr": "24509", + "title": "Bump vm2 from 3.9.5 to 3.9.7 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24451", + "title": "[IMPROVE] ChatBox Text to File Description", + "userLogin": "eduardofcabrera", + "description": "The text content from chatbox goes to the file description when drag and drop a file.", + "contributors": [ + "eduardofcabrera", + "ostjen", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "24461", + "title": "Chore: Update Meteor to 2.5.6", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "rodrigok", + "web-flow" + ] + }, + { + "pr": "24477", + "title": "Chore: Update ws package", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24498", + "title": "Bump underscore.string from 3.3.5 to 3.3.6 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24491", + "title": "Bump follow-redirects from 1.14.7 to 1.14.8 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24493", + "title": "i18n: Language update from LingoHub 🤖 on 2022-02-14Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "24331", + "title": "Chore: Convert to typescript the unarchive slash commands files", + "userLogin": "eduardofcabrera", + "description": "Convert to typescript the unarchive slash commands files", + "contributors": [ + "eduardofcabrera", + "ostjen", + "web-flow" + ] + }, + { + "pr": "24483", + "title": "[IMPROVE] Add tooltips on action buttons of Canned Response message composer", + "userLogin": "LucasFASouza", + "description": "The tooltips were missing on the action buttons of CR message composer.\r\n\r\n![image](https://user-images.githubusercontent.com/32396925/153620327-91107245-4b47-4d39-a99a-6da6d1cf5734.png)\r\n\r\nUsers can now feel more encouraged to use these actions knowing what they are supposed to do.", + "contributors": [ + "LucasFASouza", + "tiagoevanp", + "web-flow" + ] + }, + { + "pr": "24196", + "title": "Chore: Delete unused file (NewAdminInfoPage.js)", + "userLogin": "gabriellsh", + "description": "Just removing a duplicated/unused file.", + "milestone": "4.5.0", + "contributors": [ + "gabriellsh", + "web-flow" + ] + }, + { + "pr": "24388", + "title": "[IMPROVE][ENTERPRISE] Improve how micro services are loaded", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "sampaiodiego" + ] + }, + { + "pr": "24458", + "title": "[IMPROVE] Add return button in chats opened from the list of current chats", + "userLogin": "LucasFASouza", + "description": "The new return button for Omnichannel chats came out with release 3.15 but the feature was only available for chats that were opened from Omnichannel Contact Center.\r\nNow, the same UI/UX is supported for chats opened from Current Chats list.\r\n\r\n![image](https://user-images.githubusercontent.com/32396925/153283190-bd5c9748-c36b-4874-a704-6043afc7e3a1.png)\r\n\r\nThe chat now opens in the Omnichannel settings and has the return button so the user can go back to the Current Chats list.\r\n\r\n![image](https://user-images.githubusercontent.com/32396925/153285591-fad8e4a0-d2ea-4a02-8b2a-15e383b3c876.png)", + "contributors": [ + "LucasFASouza", + "tiagoevanp", + "web-flow" + ] + }, + { + "pr": "24469", + "title": "Bump express from 4.17.1 to 4.17.2 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24472", + "title": "Bump cookie from 0.4.1 to 0.4.2 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24275", + "title": "[IMPROVE] Close modal on esc and outside click", + "userLogin": "gabriellsh", + "description": "This is a QUICK change in order to close modals pressing Esc button and clicking outside of it **intentionally**.", + "milestone": "4.5.0", + "contributors": [ + "gabriellsh", + "dougfabris", + "tassoevan" + ] + }, + { + "pr": "24435", + "title": "Chore(deps-dev): Bump ts-node from 10.0.0 to 10.5.0 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24041", + "title": "[IMPROVE] Add user to room on \"Click to Join!\" button press", + "userLogin": "matheusbsilva137", + "description": "- Add user to room on \"Click to Join!\" button press;\r\n- Display the \"Join\" button in discussions inside channels (keeping the behavior consistent with discussions inside groups).", + "contributors": [ + "matheusbsilva137", + "web-flow", + "tassoevan", + "pierre-lehnen-rc", + "ostjen" + ] + }, + { + "pr": "24310", + "title": "[FIX] Implement client errors on ddp-streamer", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "23963", + "title": "Bump body-parser from 1.19.0 to 1.19.1 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23961", + "title": "Bump jaeger-client from 3.18.1 to 3.19.0 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24466", + "title": "[FIX] typo on register server tooltip of setup wizard", + "userLogin": "filipemarins", + "milestone": "4.5.0", + "contributors": [ + "filipemarins" + ] + }, + { + "pr": "24037", + "title": "[FIX] Inconsistent validation of user's access to rooms", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc", + "ostjen", + "web-flow" + ] + }, + { + "pr": "24450", + "title": "[FIX] OAuth mismatch redirect_uri error", + "userLogin": "sampaiodiego", + "milestone": "4.4.2", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24305", + "title": "[FIX] Prevent Apps Bridge to remove visitor status from room", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman", + "d-gubert" + ] + }, + { + "pr": "24453", + "title": "Chore: bump fuselage version", + "userLogin": "dougfabris", + "milestone": "4.4.2", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "24253", + "title": "[FIX] Issues on selecting users when importing CSV", + "userLogin": "guijun13", + "description": "* Fix users selecting by fixing their _id\r\n* Add condition to disable 'Start importing' button if `usersCount`, `channelsCount` and `messageCount` equals 0, or if messageCount is alone\r\n* Remove `disabled={usersCount === 0}` on user Tab", + "contributors": [ + "guijun13", + "tassoevan", + "web-flow", + "pierre-lehnen-rc" + ] + }, + { + "pr": "24299", + "title": "Chore(deps): Bump node-fetch from 2.6.1 to 2.6.7 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24418", + "title": "[FIX] Oembed request not respecting payload limit", + "userLogin": "sampaiodiego", + "milestone": "4.4.1", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24429", + "title": "i18n: Language update from LingoHub 🤖 on 2022-02-07Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null, + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24407", + "title": "[FIX] Skip cloud steps for registered servers on setup wizard", + "userLogin": "dougfabris", + "milestone": "4.4.1", + "contributors": [ + "dougfabris", + "tassoevan", + "gabriellsh", + "web-flow" + ] + }, + { + "pr": "24410", + "title": "Chore: Convert JS files to Typescript", + "userLogin": "felipe-rod123", + "description": "This pull request converts 26 more files from Javascript to Typescript, to check variable types and increase validation on the code.", + "contributors": [ + "felipe-rod123", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "24369", + "title": "[IMPROVE] Convert tag edit with department data to tsx", + "userLogin": "LucasFASouza", + "contributors": [ + "LucasFASouza", + "tiagoevanp", + "web-flow" + ] + }, + { + "pr": "24401", + "title": "[FIX] Outgoing webhook without scripts not saving messages", + "userLogin": "sampaiodiego", + "milestone": "4.4.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24334", + "title": "[IMPROVE] CloudLoginModal visual consistency", + "userLogin": "dougfabris", + "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/151585064-dc6a1e29-9903-4241-8fbd-dfbe6c55fbef.png)\r\n\r\n### after\r\n![Screen Shot 2022-01-28 at 13 32 02](https://user-images.githubusercontent.com/27704687/151585101-75b98502-9aae-4198-bc3e-4956750e5d8b.png)", + "milestone": "4.5.0", + "contributors": [ + "dougfabris", + "gabriellsh", + "web-flow" + ] + }, + { + "pr": "24409", + "title": "[FIX] Startup errors creating indexes", + "userLogin": "sampaiodiego", + "description": "Fix `bio` and `prid` startup index creation errors.", + "milestone": "4.4.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24406", + "title": "Chore: Unify ILivechatAgent with ILivechatAgentRecord", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24381", + "title": "[FIX] Add ?close to OAuth callback url", + "userLogin": "sampaiodiego", + "milestone": "4.4.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24387", + "title": "[FIX] Slash commands previews not working", + "userLogin": "ostjen", + "milestone": "4.4.1", + "contributors": [ + "ostjen" + ] + }, + { + "pr": "24357", + "title": "i18n: Language update from LingoHub 🤖 on 2022-01-31Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "24341", + "title": "Bump simple-get from 4.0.0 to 4.0.1", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24366", + "title": "Chore: Set Docker image tag to latest only when really latest", + "userLogin": "debdutdeb", + "contributors": [ + "debdutdeb", + "web-flow" + ] + }, + { + "pr": "24109", + "title": "[IMPROVE] Added a new \"All\" tab which shows all integrations in Integrations", + "userLogin": "aswinidev", + "milestone": "4.5.0", + "contributors": [ + "aswinidev", + "dougfabris", + "web-flow" + ] + }, + { + "pr": "24363", + "title": "Merge master into develop & Set version to 4.5.0-develop", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24342", + "title": "Release 4.4.0", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow", + "KevLehman", + "murtaza98", + "arshxyz", + "sidmohanty11", + "matheusbsilva137", + "Aman-Maheshwari", + "MartinSchoeler", + "ostjen", + "tassoevan", + "d-gubert", + "debdutdeb", + "yash-rajpal", + "dougfabris", + "aswinidev" + ] + }, + { + "pr": "24340", + "title": "Release 4.3.3", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24335", + "title": "Chore: Update Apps-Engine version", + "userLogin": "d-gubert", + "milestone": "4.4.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "24322", + "title": "Regression: Fix OmnichannelAppSourceRoomIcon sizes", + "userLogin": "tiagoevanp", + "milestone": "4.4.0", + "contributors": [ + "tiagoevanp", + "web-flow" + ] + }, + { + "pr": "24324", + "title": "Regression: Standalone register path failing when saving data", + "userLogin": "dougfabris", + "milestone": "4.4.0", + "contributors": [ + "dougfabris", + "web-flow" + ] + }, + { + "pr": "24316", + "title": "[FIX] Discussions not loading message history if not joined", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "24289", + "title": "Regression: Create migration to fix index issue at boot", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24272", + "title": "Regression: Discussion room crashing", + "userLogin": "gabriellsh", + "milestone": "4.4.0", + "contributors": [ + "gabriellsh", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "24298", + "title": "Regression: Update tap-i18n package", + "userLogin": "sampaiodiego", + "description": "Fix the issue breaking IE11.", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24302", + "title": "Regression: Fix pino child log levels", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24259", + "title": "Regression: Fix Alpine release tag", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow", + "debdutdeb" + ] + }, + { + "pr": "23676", + "title": "[IMPROVE] Setup Wizard Registration Flow", + "userLogin": "dougfabris", + "description": "This pull request brings a few improvements in our setup wizard flow, the very first contact with a Rocket.Chat. Some of them: \r\n- A brand new visual design;\r\n- Form validation improves;\r\n- Allow users to navigate back to all steps;\r\n- Optimized steps to register your workspace or keep standalone. And many more!\r\n\r\n\r\n![Kapture 2022-01-20 at 11 19 47](https://user-images.githubusercontent.com/27704687/150356868-425666b4-511f-4690-9ce5-e61b839b1d19.gif)", + "milestone": "4.4.0", + "contributors": [ + "dougfabris", + "gabriellsh", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "24254", + "title": "Chore: Slash Commands Join to Typescript", + "userLogin": "eduardofcabrera", + "description": "Convert the slash commands .js files to .ts files.", + "contributors": [ + "eduardofcabrera", + "ostjen", + "web-flow" + ] + }, + { + "pr": "24288", + "title": "Regression: Fix Default Business hour overriding other Business Hours", + "userLogin": "murtaza98", + "contributors": [ + "murtaza98", + "web-flow", + "KevLehman" + ] + }, + { + "pr": "24268", + "title": "i18n: Language update from LingoHub 🤖 on 2022-01-24Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "24276", + "title": "Regression: Fix incompatibility of apps http requests", + "userLogin": "d-gubert", + "description": "HTTP GET and HEAD requests made with an empty object as `data` were breaking, as the bridge converted this to the request's body as `'{}'` but meteor's new lib doesn't allow for body content on either of this request methods.\n\nTo maintain compatibility, we forced an empty body whenever we have a GET or HEAD request. This was probably the case previously, with the body of requests made with this methods being ignored either before being sent or in the third party server receiving the request", + "milestone": "4.4.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "24177", + "title": "[IMPROVE] lib/Statistics improved and metrics collector", + "userLogin": "albuquerquefabio", + "description": "- On `statistics` object the property `get` is an async function now.\r\n- We need to collect additional data of feature activation through the statistics collector.\r\n - Some codes were splitted into another file just to organize.", + "contributors": [ + "albuquerquefabio", + "ostjen", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "24218", + "title": "[FIX] Fixing the changing custom status behavior", + "userLogin": "AllanPazRibeiro", + "milestone": "4.4.0", + "contributors": [ + "AllanPazRibeiro", + "web-flow", + "d-gubert" + ] + }, + { + "pr": "24269", + "title": "Regression: Align Omni-Source icon sizes with designs", + "userLogin": "murtaza98", + "contributors": [ + "murtaza98", + "KevLehman", + "web-flow" + ] + }, + { + "pr": "24267", + "title": "Regression: Fix Inactive Departments still visible on Livechat", + "userLogin": "murtaza98", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24262", + "title": "[FIX] Solved Report Message Blank ", + "userLogin": "nishant23122000", + "description": "After resolving issue #24261 :\r\n\r\nhttps://user-images.githubusercontent.com/53515714/150629459-5f0a9cf6-9b0e-417f-8fc1-44c810bd5428.mp4", + "contributors": [ + "nishant23122000" + ] + }, + { + "pr": "23958", + "title": "[FIX] Errors on advanced sync prevent LDAP users from logging in", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc", + "ostjen", + "web-flow" + ] + }, + { + "pr": "24187", + "title": "Chore: Convert model LoginServiceConfiguration to raw", + "userLogin": "rodrigok", + "contributors": [ + "rodrigok", + "albuquerquefabio" + ] + }, + { + "pr": "23804", + "title": "[FIX] Make canned responses popup dependent on Canned_responses_enabled setting", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24126", + "title": "[FIX] Wrong german translation for 2FA-Promt", + "userLogin": "mbreslein-thd", + "milestone": "4.4.0", + "contributors": [ + "mbreslein-thd", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "24182", + "title": "Bump follow-redirects from 1.14.5 to 1.14.7 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "24242", + "title": "Chore: Update pino and pino-pretty", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24252", + "title": "[FIX] Avoid updating all rooms with visitor abandonment queries", + "userLogin": "KevLehman", + "milestone": "4.4.0", + "contributors": [ + "KevLehman", + "web-flow" + ] + }, + { + "pr": "12548", + "title": "Add: Alpine image as option for build", + "userLogin": "geekgonecrazy", + "milestone": "4.0.0", + "contributors": [ + "geekgonecrazy", + "web-flow", + "LuluGO", + "ggazzo", + "rodrigok", + "sampaiodiego" + ] + }, + { + "pr": "24248", + "title": "[FIX] Fixed broken links in setup wizard", + "userLogin": "Himanshu664", + "milestone": "4.4.0", + "contributors": [ + "Himanshu664", + "dougfabris", + "web-flow" + ] + }, + { + "pr": "24241", + "title": "[FIX] Apps Contextual Bar not carrying title and room information ", + "userLogin": "thassiov", + "description": "Fixes:\r\n\r\n- the app's name being rendered instead of the view's title,\r\n- the room's information (`IRoom`) wasn't being sent to the app when a `block action` happened\r\n\r\nFixed behavior with correct view title and room information included in the block action event:\r\n\r\nhttps://user-images.githubusercontent.com/733282/150420847-59bfcf8a-24a9-4dc5-8609-0d92dba38b70.mp4", + "milestone": "4.4.0", + "contributors": [ + "thassiov", + "web-flow" + ] + }, + { + "pr": "24233", + "title": "Chore: Bump fuselage hooks", + "userLogin": "dougfabris", + "milestone": "4.4.0", + "contributors": [ + "dougfabris", + "gabriellsh", + "web-flow" + ] + }, + { + "pr": "24243", + "title": "Regression: Remove extra call to `useOutsideClick` hook not following the function signature", + "userLogin": "tassoevan", + "description": "It migrates `client/sidebar/header/actions/Search` component to TypeScript and mitigates a invalid call to `Array.prototype.every`:\r\n\r\n![image](https://user-images.githubusercontent.com/2263066/150441397-3ff403b2-10c1-4a29-b37f-892d7d4a9252.png)", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "24235", + "title": "[FIX] Change canned response model index to match other definition", + "userLogin": "KevLehman", + "milestone": "4.4.0", + "contributors": [ + "KevLehman", + "web-flow" + ] + }, + { + "pr": "24239", + "title": "[IMPROVE] Show Channel Icons on Room Header & Info panels", + "userLogin": "murtaza98", + "description": "Updates Omnichannel Header & room Info component to render the source info\r\nBuilt on top of https://github.com/RocketChat/Rocket.Chat/pull/24237", + "milestone": "4.4.0", + "contributors": [ + "d-gubert", + "murtaza98", + "KevLehman", + "web-flow" + ] + }, + { + "pr": "24098", + "title": "[FIX] openUserInfo not working after changing room types", + "userLogin": "grahhnt", + "milestone": "4.4.0", + "contributors": [ + "grahhnt", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "24232", + "title": "Chore: Bump Livechat package version to 1.12.0", + "userLogin": "tiagoevanp", + "milestone": "4.4.0", + "contributors": [ + "tiagoevanp", + "KevLehman", + "web-flow" + ] + }, + { + "pr": "23818", + "title": "[NEW] App empty states component, category filter and empty states error variation implementations", + "userLogin": "rique223", + "description": "Created and implemented the category filters component:\r\nDemo gif:\r\n![categories_filter_demo](https://user-images.githubusercontent.com/43561537/148579731-1de83bf8-91ce-47e7-b6e5-7781384fdef9.gif)\r\n\r\nCreated and implemented the empty states(States on fuselage) component:\r\nDemo gif:\r\n![empty_states_demo](https://user-images.githubusercontent.com/43561537/148579930-49c2ff69-88f4-4a57-a24a-060868d76209.gif)\r\n\r\nImplemented a variations system for the empty states component and created a error message for network outage:\r\nDemo gif:\r\n![empty_states_variation_demo](https://user-images.githubusercontent.com/43561537/148580047-39adf8ef-2ee0-4c3e-8709-5faea4a5e335.gif)", + "milestone": "4.4.0", + "contributors": [ + "rique223", + "ggazzo" + ] + }, + { + "pr": "24176", + "title": "[IMPROVE] Rewrite Omnichannel Queue Page to React", + "userLogin": "tiagoevanp", + "description": "![image](https://user-images.githubusercontent.com/17487063/149458880-03c201ab-11cd-4c71-82aa-51bd557d3b6e.png)", + "milestone": "4.4.0", + "contributors": [ + "tiagoevanp", + "KevLehman" + ] + }, + { + "pr": "24162", + "title": "[NEW][EE] Allow to filter departments by Business Units on Livechat", + "userLogin": "murtaza98", + "milestone": "4.4.0", + "contributors": [ + "murtaza98", + "web-flow", + "renatobecker" + ] + }, + { + "pr": "24112", + "title": "[FIX][EE] Agent cannot change status to Available despite being within open business hours", + "userLogin": "murtaza98", + "contributors": [ + "murtaza98", + "KevLehman", + "web-flow" + ] + }, + { + "pr": "24211", + "title": "Regression: Fix handling of http requests in apps bridge", + "userLogin": "d-gubert", + "description": "Changes made during Meteor upgrade broke HTTP requests made in Rocket.Chat Apps", + "contributors": [ + "d-gubert", + "web-flow" + ] + }, + { + "pr": "24217", + "title": "Release 4.3.2", + "userLogin": "sampaiodiego", + "contributors": [ + "matheusbsilva137", + "sampaiodiego", + "pierre-lehnen-rc", + "geekgonecrazy", + "d-gubert", + "dougfabris" + ] + }, + { + "pr": "24068", + "title": "[FIX] Integration section crashing opening in My Account", + "userLogin": "dougfabris", + "milestone": "4.3.2", + "contributors": [ + "dougfabris", + "tassoevan", + "web-flow", + "gabriellsh" + ] + }, + { + "pr": "24171", + "title": "Chore: Update Apps-Engine to 1.29.2", + "userLogin": "d-gubert", + "milestone": "4.3.2", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "24158", + "title": "[FIX] App Framework Enable hanging indefinitely", + "userLogin": "geekgonecrazy", + "milestone": "4.3.2", + "contributors": [ + "geekgonecrazy", + "d-gubert", + "web-flow" + ] + }, + { + "pr": "24090", + "title": "[FIX] CSV Importer failing to import users", + "userLogin": "pierre-lehnen-rc", + "description": "- Update use of `setRealName` function to `_setRealName`.", + "milestone": "4.3.2", + "contributors": [ + "pierre-lehnen-rc", + "matheusbsilva137", + "web-flow" + ] + }, + { + "pr": "24142", + "title": "[FIX][ENTERPRISE] Leading slashes in Engagement Dashboard API requests", + "userLogin": "matheusbsilva137", + "description": "- Remove trailing slashes from Engagement Dashboard API requests;", + "milestone": "4.3.2", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "24108", + "title": "Release 4.3.1", + "userLogin": "sampaiodiego", + "contributors": [ + "murtaza98", + "sampaiodiego", + "MartinSchoeler", + "tassoevan", + "d-gubert" + ] + }, + { + "pr": "24107", + "title": "[FIX][APPS] Action buttons not removed when app is disabled or uninstalled", + "userLogin": "d-gubert", + "description": "Fixes a problem where action buttons registered by any app would not be removed if the app was disabled or uninstalled", + "milestone": "4.3.1", + "contributors": [ + "d-gubert", + "web-flow" + ] + }, + { + "pr": "24105", + "title": "[FIX][APPS] Prevents emails from being sent when apps framework is disabled", + "userLogin": "d-gubert", + "description": "Introduction of new event `IPreEmailSent` was breaking the email function when the Apps-Engine framework was disabled in the administration", + "milestone": "4.3.1", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "24096", + "title": "[FIX] Ensure Firefox 91 ESR support", + "userLogin": "tassoevan", + "description": "It:\r\n- Adds `Firefox ESR` to `browserslist`;\r\n- Upgrades `@rocket.chat/fuselage-hooks` to overcome a bug related to Firefox implementation of `ResizeObserver` API.", + "milestone": "4.3.1", + "contributors": [ + "tassoevan", + "web-flow" + ] + }, + { + "pr": "24091", + "title": "Chore: Update Livechat to 1.11.1", + "userLogin": "MartinSchoeler", + "milestone": "4.3.1", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24067", + "title": "[FIX] Omnichannel enabled setting not working when creating rooms", + "userLogin": "murtaza98", + "milestone": "4.3.1", + "contributors": [ + "murtaza98", + "web-flow" + ] + }, + { + "pr": "23981", + "title": "[FIX] Enter not working on modal's multi-line input", + "userLogin": "murtaza98", + "description": "Right now, if we try to press enter for a new line on multi-line modal input... it auto triggers the submit event. This PR fixes this behaviour by not submitting the modal in case the enter was pressed within an input text with multiline expected", + "milestone": "4.3.1", + "contributors": [ + "murtaza98", + "web-flow", + "tiagoevanp" + ] + }, + { + "pr": "24039", + "title": "[FIX] Omnichannel Current chats pagination not working", + "userLogin": "murtaza98", + "milestone": "4.3.1", + "contributors": [ + "murtaza98", + "KevLehman", + "web-flow" + ] + }, + { + "pr": "24204", + "title": "[FIX] MAU when using micro services", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24210", + "title": "[IMPROVE] Limit recent emojis to 27", + "userLogin": "sampaiodiego", + "description": "Limits the recent emoji list to a maximum of 3 rows instead of listing every emoji you've used so far.\r\n\r\n![image](https://user-images.githubusercontent.com/8591547/150033087-92721b76-9203-42fe-ac2e-5b9eca50edab.png)", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24169", + "title": "Chore: Update Omnichannel widget version to 1.11.2", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp", + "web-flow" + ] + }, + { + "pr": "24165", + "title": "Chore: Replace Blaze templates", + "userLogin": "tassoevan", + "description": "It replaces some templates used by login and invitation flows with React components. It also drops `main` template, allowing `appLayout` to just handle components now.", + "contributors": [ + "tassoevan", + "ggazzo" + ] + }, + { + "pr": "23591", + "title": "Chore: Removing hubot from docker-compose", + "userLogin": "geekgonecrazy", + "description": "Remove hubot from docker-compose. This is forcing everyone to spin up Hubot every time they deploy Rocket.Chat and not that many people are using it. So we are wasting resources on peoples machines by forcing it", + "contributors": [ + "geekgonecrazy", + "debdutdeb", + "web-flow" + ] + }, + { + "pr": "24168", + "title": "[IMPROVE] Admin page header buttons consistency", + "userLogin": "dougfabris", + "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/149371746-66e5e6e4-5c8e-46d7-b230-ecbc4502b665.png)\r\n![image](https://user-images.githubusercontent.com/27704687/149371759-c3d948af-d877-486c-a263-da12c0b70185.png)\r\n![image](https://user-images.githubusercontent.com/27704687/149371769-09b0623d-a5c5-43e0-a4ef-73ba0bcf1730.png)\r\n![image](https://user-images.githubusercontent.com/27704687/149371782-b1b898c7-3aad-47ee-8c5c-cf9cb816d72b.png)\r\n![image](https://user-images.githubusercontent.com/27704687/149371796-b88514d2-3c8d-4d9d-a45b-24f48783e95c.png)\r\n\r\n\r\n### after\r\n![Screen Shot 2022-01-13 at 13 38 00](https://user-images.githubusercontent.com/27704687/149371084-668d5f14-e03e-4cdd-8763-058db9c2f16c.png)\r\n![Screen Shot 2022-01-13 at 13 38 18](https://user-images.githubusercontent.com/27704687/149371126-23a059cb-efa7-4ffb-970b-da23d8742bb1.png)\r\n![Screen Shot 2022-01-13 at 13 38 38](https://user-images.githubusercontent.com/27704687/149371181-c8bbbbbd-ed6d-48b4-844f-09fdce0080b6.png)\r\n![Screen Shot 2022-01-13 at 13 38 59](https://user-images.githubusercontent.com/27704687/149371232-3d292f5e-e8b0-41e1-b065-90a80a5f08ce.png)\r\n![Screen Shot 2022-01-13 at 13 39 08](https://user-images.githubusercontent.com/27704687/149371263-64fd09e4-456e-48ee-9976-83f42b90e4d9.png)", + "milestone": "4.4.0", + "contributors": [ + "dougfabris", + "web-flow" + ] + }, + { + "pr": "24193", + "title": "i18n: Language update from LingoHub 🤖 on 2022-01-17Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null, + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24068", + "title": "[FIX] Integration section crashing opening in My Account", + "userLogin": "dougfabris", + "milestone": "4.3.2", + "contributors": [ + "dougfabris", + "tassoevan", + "web-flow", + "gabriellsh" + ] + }, + { + "pr": "24044", + "title": "[IMPROVE] Rewrite roomNotFound to React Component", + "userLogin": "dougfabris", + "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/147608307-468e6955-5db4-40c5-86a7-91448ac03427.png)\r\n![image](https://user-images.githubusercontent.com/27704687/147608377-d979adf5-615f-4180-8587-449369bf87f8.png)\r\n\r\n### after\r\n![image](https://user-images.githubusercontent.com/27704687/149158027-e39bc0a0-4c33-465b-83e0-873e558a037b.png)\r\n![image](https://user-images.githubusercontent.com/27704687/149157692-3e73c0b4-1759-430c-b1c4-b521e47d774d.png)", + "milestone": "4.4.0", + "contributors": [ + "dougfabris", + "tassoevan", + "web-flow", + "gabriellsh" + ] + }, + { + "pr": "24186", + "title": "Regression: Enable custom emoji on admin custom status page", + "userLogin": "AllanPazRibeiro", + "contributors": [ + "AllanPazRibeiro", + "web-flow" + ] + }, + { + "pr": "24075", + "title": "Chore: Update Meteor to 2.5.3", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow", + "ggazzo" + ] + }, + { + "pr": "24060", + "title": "[NEW] Apple Login", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24171", + "title": "Chore: Update Apps-Engine to 1.29.2", + "userLogin": "d-gubert", + "milestone": "4.3.2", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "24170", + "title": "[NEW] Enabling emoji on custom status", + "userLogin": "AllanPazRibeiro", + "contributors": [ + "AllanPazRibeiro" + ] + }, + { + "pr": "24158", + "title": "[FIX] App Framework Enable hanging indefinitely", + "userLogin": "geekgonecrazy", + "milestone": "4.3.2", + "contributors": [ + "geekgonecrazy", + "d-gubert", + "web-flow" + ] + }, + { + "pr": "24090", + "title": "[FIX] CSV Importer failing to import users", + "userLogin": "pierre-lehnen-rc", + "description": "- Update use of `setRealName` function to `_setRealName`.", + "milestone": "4.3.2", + "contributors": [ + "pierre-lehnen-rc", + "matheusbsilva137", + "web-flow" + ] + }, + { + "pr": "24142", + "title": "[FIX][ENTERPRISE] Leading slashes in Engagement Dashboard API requests", + "userLogin": "matheusbsilva137", + "description": "- Remove trailing slashes from Engagement Dashboard API requests;", + "milestone": "4.3.2", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "24127", + "title": "i18n: Language update from LingoHub 🤖 on 2022-01-10Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "24133", + "title": "Chore: Migrate useOutsideClick to fuselage-hooks", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti", + "ggazzo" + ] + }, + { + "pr": "24123", + "title": "Chore: Include REG_TOKEN in docker-compose", + "userLogin": "geekgonecrazy", + "contributors": [ + "geekgonecrazy", + "web-flow" + ] + }, + { + "pr": "24117", + "title": "[FIX] Custom Emoji Image preview", + "userLogin": "sidmohanty11", + "description": "Before,\r\n\r\n![custom-img-preview-rc3](https://user-images.githubusercontent.com/73601258/148431936-c82d4200-69b1-484b-8be2-d72f5c28202b.png)\r\n\r\nAfter,\r\n\r\n![custom-img-preview-rc1](https://user-images.githubusercontent.com/73601258/148431955-8842a2e3-b9f3-4d68-b0d8-c5444419f767.png)\r\n\r\nalso if any error, (for example - if we upload a video mp4 file) \r\n\r\n![custom-img-preview-rc2](https://user-images.githubusercontent.com/73601258/148431998-64bc1fbb-9958-495c-89c1-61df06adec75.png)", + "contributors": [ + "sidmohanty11", + "dougfabris", + "web-flow" + ] + }, + { + "pr": "24078", + "title": "[IMPROVE] Added a Reset Button in the Account Profile Page", + "userLogin": "aswinidev", + "contributors": [ + "aswinidev", + "web-flow", + "murtaza98" + ] + }, + { + "pr": "24118", + "title": "Revert: \"[IMPROVE] Throw 404 error in invalid endpoints\"", + "userLogin": "matheusbsilva137", + "contributors": [ + "matheusbsilva137", + "web-flow" + ] + }, + { + "pr": "24070", + "title": "[IMPROVE] Rewrite AddWebdavAccountModal to React Component ", + "userLogin": "dougfabris", + "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/147777054-bf2f84e4-5226-4ebc-ab6e-287b83889b85.png)\r\n\r\n### after\r\n![image](https://user-images.githubusercontent.com/27704687/147769132-2b938ae8-aba3-4230-876d-572e46268b9a.png)", + "contributors": [ + "dougfabris", + "gabriellsh", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "21181", + "title": "[FIX] Password error should not be shown when selecting set random password", + "userLogin": "yash-rajpal", + "description": "We should not keep `password` as required field when we check set random password field. In this password should not be required", + "milestone": "4.4.0", + "contributors": [ + "yash-rajpal", + "pierre-lehnen-rc", + "dougfabris", + "web-flow" + ] + }, + { + "pr": "22400", + "title": "Chore: Apply generics to infer types of useForm hook", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan", + "web-flow" + ] + }, + { + "pr": "24023", + "title": "Chore: Remove unused assets", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24020", + "title": "Chore: Replace `isEmail` with `validateEmail`", + "userLogin": "tassoevan", + "description": "Follows #23816.", + "contributors": [ + "tassoevan", + "web-flow" + ] + }, + { + "pr": "24111", + "title": "Chore: Fix Houston `getNodeNpmVersions` regex to correctly get Node and Npm complete versions", + "userLogin": "debdutdeb", + "contributors": [ + "debdutdeb" + ] + }, + { + "pr": "23456", + "title": "Chore: Move `callbacks` to /lib", + "userLogin": "tassoevan", + "description": "It moves to `/lib`, migrates to TypeScript, and deprecates the `callbacks` API.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "24107", + "title": "[FIX][APPS] Action buttons not removed when app is disabled or uninstalled", + "userLogin": "d-gubert", + "description": "Fixes a problem where action buttons registered by any app would not be removed if the app was disabled or uninstalled", + "milestone": "4.3.1", + "contributors": [ + "d-gubert", + "web-flow" + ] + }, + { + "pr": "24105", + "title": "[FIX][APPS] Prevents emails from being sent when apps framework is disabled", + "userLogin": "d-gubert", + "description": "Introduction of new event `IPreEmailSent` was breaking the email function when the Apps-Engine framework was disabled in the administration", + "milestone": "4.3.1", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "24096", + "title": "[FIX] Ensure Firefox 91 ESR support", + "userLogin": "tassoevan", + "description": "It:\r\n- Adds `Firefox ESR` to `browserslist`;\r\n- Upgrades `@rocket.chat/fuselage-hooks` to overcome a bug related to Firefox implementation of `ResizeObserver` API.", + "milestone": "4.3.1", + "contributors": [ + "tassoevan", + "web-flow" + ] + }, + { + "pr": "24022", + "title": "Chore: Update copyright notices", + "userLogin": "tassoevan", + "description": "Update date range in copyright notices to `2015-2022`.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23817", + "title": "[IMPROVE] Importer text for CSV upload file format", + "userLogin": "ostjen", + "contributors": [ + "ostjen", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "24091", + "title": "Chore: Update Livechat to 1.11.1", + "userLogin": "MartinSchoeler", + "milestone": "4.3.1", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "24067", + "title": "[FIX] Omnichannel enabled setting not working when creating rooms", + "userLogin": "murtaza98", + "milestone": "4.3.1", + "contributors": [ + "murtaza98", + "web-flow" + ] + }, + { + "pr": "23981", + "title": "[FIX] Enter not working on modal's multi-line input", + "userLogin": "murtaza98", + "description": "Right now, if we try to press enter for a new line on multi-line modal input... it auto triggers the submit event. This PR fixes this behaviour by not submitting the modal in case the enter was pressed within an input text with multiline expected", + "milestone": "4.3.1", + "contributors": [ + "murtaza98", + "web-flow", + "tiagoevanp" + ] + }, + { + "pr": "23605", + "title": "[IMPROVE] Add Rocket.Chat version to User-Agent header for oembed requests", + "userLogin": "sidmohanty11", + "contributors": [ + "sidmohanty11" + ] + }, + { + "pr": "24051", + "title": "[FIX] wrong new userInfo during user creation", + "userLogin": "Aman-Maheshwari", + "contributors": [ + "Aman-Maheshwari", + "web-flow", + "murtaza98" + ] + }, + { + "pr": "24053", + "title": "[IMPROVE] Throw 404 error in invalid endpoints", + "userLogin": "matheusbsilva137", + "description": "- Throw 404 error when trying to call invalid endpoints.", + "contributors": [ + "matheusbsilva137", + "web-flow" + ] + }, + { + "pr": "23970", + "title": "[FIX] Filter ability for admin room checkboxes", + "userLogin": "sidmohanty11", + "description": "Now,\r\n\r\nhttps://user-images.githubusercontent.com/73601258/146380812-d3aa5561-64e1-4515-a639-3b6d87432ae4.mp4\r\n\r\nBefore,\r\n\r\nhttps://user-images.githubusercontent.com/73601258/146385538-85a70fce-9974-40e0-8757-eda1a5d411b7.mp4", + "milestone": "4.4.0", + "contributors": [ + "sidmohanty11", + "yash-rajpal", + "web-flow", + "matheusbsilva137" + ] + }, + { + "pr": "24024", + "title": "[FIX] Message Erasure Type \"Keep\" Messages not working", + "userLogin": "arshxyz", + "contributors": [ + "arshxyz", + "murtaza98", + "web-flow" + ] + }, + { + "pr": "24039", + "title": "[FIX] Omnichannel Current chats pagination not working", + "userLogin": "murtaza98", + "milestone": "4.3.1", + "contributors": [ + "murtaza98", + "KevLehman", + "web-flow" + ] + }, + { + "pr": "23954", + "title": "Chore: Update mem to 8.1.1", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24015", + "title": "[FIX] MongoError during startup saying \"ns not found\"", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24054", + "title": "Chore: add script to fix code with prettier", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24000", + "title": "Chore: Prettier for us all", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "24049", + "title": "Merge master into develop & Set version to 4.4.0-develop", + "userLogin": "sampaiodiego", + "contributors": [ + "ggazzo", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24047", + "title": "Release 4.3.0", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow", + "Aman-Maheshwari", + "juliajforesti", + "ggazzo", + "dougfabris", + "goyome", + "tiagoevanp", + "KevLehman", + "matheusbsilva137", + "rique223", + "lingohub[bot]", + "gabriellsh", + "cuonghuunguyen", + "tassoevan", + "murtaza98", + "MartinSchoeler", + "dependabot[bot]" + ] + }, + { + "pr": "24046", + "title": "Chore: Bump fuselage 0.31.0", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "tassoevan" + ] + }, + { + "pr": "24045", + "title": "Chore: Update Apps-Engine to latest", + "userLogin": "d-gubert", + "milestone": "4.3.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "24021", + "title": "Chore: Replace typography", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti", + "ggazzo" + ] + }, + { + "pr": "23940", + "title": "Release 4.2.2", + "userLogin": "ggazzo", + "contributors": [ + "qwertiko", + "ggazzo" + ] + }, + { + "pr": "23347", + "title": "[FIX] creating room with federated member", + "userLogin": "qwertiko", + "milestone": "4.2.2", + "contributors": [ + "qwertiko", + "web-flow" + ] + }, + { + "pr": "23917", + "title": "Release 4.2.1", + "userLogin": "sampaiodiego", + "contributors": [ + "tiagoevanp", + "sampaiodiego", + "matheusbsilva137", + "rique223", + "dougfabris", + "tassoevan", + "MartinSchoeler" + ] + }, + { + "pr": "23913", + "title": "Chore: Update Livechat", + "userLogin": "MartinSchoeler", + "milestone": "4.2.1", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "23796", + "title": "[FIX] Segmentation fault on CentOS 7 due to outdated `sharp`", + "userLogin": "tassoevan", + "description": "Upgrades `sharp` to avoid a segmentation fault on CentOS 7 during startup related to `sharp.node` being loaded via `process.dlopen()`.\r\n\r\nSuggested as a fix for versions `4.0.x` and `4.1.x`.", + "milestone": "4.2.1", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23857", + "title": "[FIX] teams.removeMembers client usage", + "userLogin": "dougfabris", + "milestone": "4.2.1", + "contributors": [ + "ggazzo", + "dougfabris" + ] + }, + { + "pr": "23861", + "title": "[FIX] Wrong button for non trial apps", + "userLogin": "rique223", + "description": "This PR solves a bug on the marketplace that was happening with WhatsApp where it was displaying a trial button even though it didn't have a free trial period. The new verification I've added checks if the app is subscription-based and then checks if it has 0 trial days in all of its tiers. If it does, it shows a subscribe button. If it doesn't, it displays a trial button. Also, I've exposed the itsEnterpriseOnly flag as an extra measure in the case of apps like Facebook Messenger that are enterprise-only and consequently should show the subscribe button. \r\nBefore:\r\n![image](https://user-images.githubusercontent.com/43561537/144687716-baef06ce-7a80-42fc-8393-b0283c0f349a.png) \r\nAfter:\r\n![image](https://user-images.githubusercontent.com/43561537/144687924-1a3eb3a7-783f-4450-abd2-1efa0de64658.png)", + "milestone": "4.2.1", + "contributors": [ + "rique223" + ] + }, + { + "pr": "23859", + "title": "[FIX] Error when creating an inactive user in admin panel", + "userLogin": "matheusbsilva137", + "description": "- Fix `usersInRole` array used to send email to activate a user.", + "milestone": "4.2.1", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "23821", + "title": "[NEW] Create new setting to clean local storage at end of chats", + "userLogin": "tiagoevanp", + "description": "Include setting to handle with and clear the localStorage on Livechat widget. \r\n\r\n![image](https://user-images.githubusercontent.com/17487063/144171179-95f7cf41-0192-4532-bedf-99e0b01f2c61.png)\r\n\r\nThis behavior is only possible to happen when https://github.com/RocketChat/Rocket.Chat.Livechat/pull/666 merged and released.", + "milestone": "4.2.1", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "24035", + "title": "Regression: Ensure room action buttons only appear inside menu", + "userLogin": "d-gubert", + "description": "Currently, action buttons registered by apps to appear in the ROOM_ACTION context show in the first position of the list, but since they don't have an icon they are effectively invisible in the tab bar.\r\n\r\nHere we change the order configuration of the button so we make sure it only shows inside the room menu", + "milestone": "4.3.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "24030", + "title": "i18n: Language update from LingoHub 🤖 on 2021-12-27Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null, + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24033", + "title": "Regression: Add optional chaining to possibly undefined fields", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "24034", + "title": "Regression: Remove dangling console.log", + "userLogin": "tassoevan", + "description": "A empty array have been printed to console due to a promise chained to `console.log` and `console.error` calls, probably for debugging purposes.", + "milestone": "4.3.0", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "24018", + "title": "Regression: Remove self from fallback departments dropdown", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman", + "tiagoevanp", + "web-flow" + ] + }, + { + "pr": "24019", + "title": "Regression: addAction verification breaking rooms", + "userLogin": "dougfabris", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "24009", + "title": "Regression: Let Meteor.absoluteUrl.defaultOptions.rootUrl as baseURI", + "userLogin": "tassoevan", + "milestone": "4.3.0", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "24012", + "title": "Regression: Add migration for omni rooms with no source", + "userLogin": "murtaza98", + "description": "Add a migration to add source property to all the omnichannel rooms which don't have it yet. All these rooms will have source type as `other`", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "24008", + "title": "Regression: Fix omnichannel empty source usage", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "23924", + "title": "[IMPROVE] Webdav methods sanitization", + "userLogin": "dougfabris", + "description": "The improvement modify `server_url` and `user_id` params into `serverURL` and `userId` more suitable to our camelCase pattern. Also converts the webdav methods into .ts helping us to prevent issues in the next modal rewrites efforts.", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23875", + "title": "Chore: update docker image base to latest node 12 patch", + "userLogin": "debdutdeb", + "contributors": [ + "debdutdeb", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "24007", + "title": "[IMPROVE] Replace SortListItem and CreateListItem with ListItem", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti", + "ggazzo" + ] + }, + { + "pr": "23912", + "title": "[NEW] Show Omnichannel room icon based on source definition", + "userLogin": "AllanPazRibeiro", + "milestone": "4.3.0", + "contributors": [ + "AllanPazRibeiro", + "ggazzo", + "d-gubert", + "web-flow" + ] + }, + { + "pr": "23925", + "title": "[NEW][APPS] Add new email event for apps", + "userLogin": "d-gubert", + "description": "Introduces a new event called before an email is sent by the Mailer. Apps can intercept and modify the email that will be sent, or even prevent it from being sent altogether. For more details, check https://github.com/RocketChat/Rocket.Chat.Apps-engine/pull/461/files#diff-301e8a58164edbf315da2a43c4923f153dbc909573de1e60aa9f730f7488ac82", + "milestone": "4.3.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "19640", + "title": "[FIX] Changes on department agents should mark form as dirty", + "userLogin": "rafaelblink", + "milestone": "4.3.0", + "contributors": [ + "rafaelblink", + "web-flow", + "gabriellsh", + "renatobecker", + "dougfabris" + ] + }, + { + "pr": "23904", + "title": "[FIX] Jitsi call already ended", + "userLogin": "Aman-Maheshwari", + "description": "- Fix Jitsi timeout update -- which caused the \"Jitsi call already ended\" error when trying to join a call some time after its creation;", + "contributors": [ + "Aman-Maheshwari", + "yash-rajpal" + ] + }, + { + "pr": "23939", + "title": "[NEW][EE] Introduce fallback department support", + "userLogin": "KevLehman", + "milestone": "4.3.0", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23959", + "title": "[FIX] teams.leave client usage", + "userLogin": "dougfabris", + "milestone": "4.3.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23679", + "title": "[NEW][APPS] Allow Rocket.Chat Apps to register custom action buttons", + "userLogin": "d-gubert", + "description": "Add an action button manager that allows apps to register custom action buttons that trigger interaction callbacks in them", + "milestone": "4.3.0", + "contributors": [ + "d-gubert", + "web-flow" + ] + }, + { + "pr": "23995", + "title": "[FIX] Prevent the app from crashing when you look at the notification preferences of a room in which you are not a member", + "userLogin": "dougfabris", + "description": "Before, when you look at the notification rules of a room in which you are not a member the app crashed, i corrected this problem.\r\nIndeed, there was a not check if the subscription was undefined", + "milestone": "4.3.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23843", + "title": "[NEW][APPS] Allow apps to open contextual bar", + "userLogin": "thassiov", + "description": "Opens a contextual bar using app ui interactions (`CONTEXTUAL_BAR_OPEN`)\r\n\r\nhttps://user-images.githubusercontent.com/733282/146704076-d2d115f2-6ca6-4ed0-b450-81be580889a4.mp4", + "milestone": "4.3.0", + "contributors": [ + "thassiov" + ] + }, + { + "pr": "23786", + "title": "Chore: Enable prefer-optional-chain ESLint rule for TypeScript files", + "userLogin": "tassoevan", + "description": "> Code is bad. It rots. It requires periodic maintenance. It has bugs that need to be found. New features mean old code has to be adapted.\r\n> The more code you have, the more places there are for bugs to hide. The longer checkouts or compiles take. The longer it takes a new employee to make sense of your system. If you have to refactor there's more stuff to move around.\r\n> Furthermore, more code often means less flexibility and functionality. This is counter-intuitive, but a lot of times a simple, elegant solution is faster and more general than the plodding mess of code produced by a programmer of lesser talent.\r\n> Code is produced by engineers. To make more code requires more engineers. Engineers have n^2 communication costs, and all that code they add to the system, while expanding its capability, also increases a whole basket of costs.\r\n> You should do whatever possible to increase the productivity of individual programmers in terms of the expressive power of the code they write. Less code to do the same thing (and possibly better). Less programmers to hire. Less organizational communication costs.\r\n\r\n— [Rich Skrenta][1]\r\n\r\nMixing two problem domains in code is prone to errors. In this small example\r\n\r\n```ts\r\ndeclare const y: { z: unknown } | undefined;\r\n\r\nconst x = y && y.z;\r\n```\r\n\r\nwe're (1) checking the nullity of `y` and (2) attributing `y.z` to `x`, where (2) is _clearly_ the main problem we're solving with code. The optional chaining is a good technique to handle nullity as a mere implementation detail:\r\n\r\n```ts\r\ndeclare const y: { z: unknown } | undefined;\r\n\r\nconst x = y?.z;\r\n```\r\n\r\nAttributing `y.z` to `x` is more easily readable than the nullity check of `y`.\r\n\r\nThis PR aims to add `@typescript-eslint/prefer-optional-chain` rule to ESlint configuration at warning level.", + "contributors": [ + "tassoevan", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "23996", + "title": "Chore: Remove the `mobile-download-file` permission", + "userLogin": "matheusbsilva137", + "description": "- Remove the `mobile-download-file` permission and its descriptions.", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "23823", + "title": "[FIX] LDAP Sync doing nothing when set to only import new users.", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.3.0", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "23816", + "title": "Chore: Centralize email validation functionality", + "userLogin": "KevLehman", + "description": "- Create lib for validating emails\r\n- Modify places that validate emails to use the new central function", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23972", + "title": "[NEW][APPS] getUserUnreadMessageCount Bridge", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "d-gubert" + ] + }, + { + "pr": "23993", + "title": "Chore: Deleted LivechatPageVisited", + "userLogin": "ostjen", + "contributors": [ + "ostjen" + ] + }, + { + "pr": "23987", + "title": "[FIX] Broken links present in some languages", + "userLogin": "aswinidev", + "contributors": [ + "aswinidev" + ] + }, + { + "pr": "23846", + "title": "Chore: added last login to users.list", + "userLogin": "ostjen", + "contributors": [ + "ostjen" + ] + }, + { + "pr": "23574", + "title": "[FIX] Email notifications settings not being honored on new DMs", + "userLogin": "ostjen", + "contributors": [ + "ostjen", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "23805", + "title": "[FIX] Headers already sent error when user data download is disabled", + "userLogin": "sampaiodiego", + "description": "When using the export message tool when trying to download the file using the link sent via email if the feature \"Export User Data\" is disabled an error was being thrown causing the request to halt.\r\n\r\nThis is the error shown in the logs:\r\n```\r\n=== UnHandledPromiseRejection ===\r\nError [ERR_HTTP_HEADERS_SENT] [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client\r\n at ServerResponse.setHeader (_http_outgoing.js:530:11)\r\n at ServerResponse.res.setHeader (/app/bundle/programs/server/npm/node_modules/meteor/simple_json-routes/node_modules/connect/lib/patch.js:134:22)\r\n at app/user-data-download/server/exportDownload.js:14:7\r\n at /app/bundle/programs/server/npm/node_modules/meteor/promise/node_modules/meteor-promise/fiber_pool.js:43:40 {\r\n code: 'ERR_HTTP_HEADERS_SENT'\r\n}\r\n---------------------------------\r\nErrors like this can cause oplog processing errors.\r\nSetting EXIT_UNHANDLEDPROMISEREJECTION will cause the process to exit allowing your service to automatically restart the process\r\nFuture node.js versions will automatically exit the process\r\n=================================\r\n```", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23991", + "title": "i18n: Language update from LingoHub 🤖 on 2021-12-20Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "23901", + "title": "[FIX] broken `Word Placement Anywhere` and `Run on edits` toggles in integration page", + "userLogin": "aswinidev", + "milestone": "4.3.0", + "contributors": [ + "aswinidev" + ] + }, + { + "pr": "23973", + "title": "[FIX] OTR not working", + "userLogin": "gabriellsh", + "description": "A rule on the user notification streamer was changed recently, and the check for writing on the streamer was wrong. Changed it to allow all logged users.", + "milestone": "4.3.0", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "23833", + "title": "[FIX] Add missing .png to clipboard uploaded file name", + "userLogin": "dougfabris", + "milestone": "4.3.0", + "contributors": [ + "dougfabris", + "gabriellsh" + ] + }, + { + "pr": "23974", + "title": "Chore: Use only LivechatTriggerRaw model", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23948", + "title": "[FIX] Missing edit icon in sequential thread messages", + "userLogin": "dougfabris", + "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/146083450-ca6d7197-dc55-4058-8212-943b42c82473.png)\r\n\r\n### after\r\n![image](https://user-images.githubusercontent.com/27704687/146083055-36c9731a-33c6-483a-93a5-1355d8689e3a.png)", + "milestone": "4.3.0", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23910", + "title": "[FIX] Removing Edit message from messageBox on room changed", + "userLogin": "yash-rajpal", + "description": "Removing edit message from messageBox and local storage on messageBox destroyed.", + "milestone": "4.3.0", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "23945", + "title": "[IMPROVE] Allow e-mail channel to be used without default department.", + "userLogin": "cauefcr", + "description": "Due to a missing condition in the e-mail input processing, Rocket.Chat was unable to receive e-mails from e-mail channels that did not have a default department.", + "contributors": [ + "cauefcr", + "murtaza98", + "web-flow" + ] + }, + { + "pr": "23466", + "title": "Bump mailparser from 3.2.0 to 3.4.0", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23853", + "title": "Bump thehanimo/pr-title-checker from 1.2 to 1.3.4", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "23882", + "title": "[FIX] Custom emoji route in admin", + "userLogin": "sidmohanty11", + "description": "https://user-images.githubusercontent.com/73601258/144975689-912cfd73-da16-433c-899a-4d4ffac8e146.mp4", + "milestone": "4.3.0", + "contributors": [ + "sidmohanty11", + "dougfabris" + ] + }, + { + "pr": "23888", + "title": "[FIX] Popover position for arabic languages", + "userLogin": "yash-rajpal", + "milestone": "4.3.0", + "contributors": [ + "yash-rajpal" + ] + }, + { + "pr": "23347", + "title": "[FIX] creating room with federated member", + "userLogin": "qwertiko", + "milestone": "4.2.2", + "contributors": [ + "qwertiko", + "web-flow" + ] + }, + { + "pr": "23930", + "title": "i18n: Language update from LingoHub 🤖 on 2021-12-13Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "21025", + "title": "[NEW][APPS] Possibility to set room closer via Apps LivechatBridge.closeRoom", + "userLogin": "cuonghuunguyen", + "description": "Add an optional param named `closer` into `LivechatBridge.closeRoom` so that it will be possible to close the room and send a close room message with the correct room closer.\r\nIf the param is not passed, use the room visitor as the room closer.", + "contributors": [ + null, + "d-gubert" + ] + }, + { + "pr": "23860", + "title": "[FIX] Custom status doesn't update properly", + "userLogin": "dougfabris", + "contributors": [ + "dougfabris", + "gabriellsh" + ] + }, + { + "pr": "23921", + "title": "Bump cookie-parser from 1.4.5 to 1.4.6 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23914", + "title": "Chore: Fix hasRole warning", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23922", + "title": "Chore: Update pino deps", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23689", + "title": "Bump path-parse from 1.0.6 to 1.0.7", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23526", + "title": "Bump @rocket.chat/string-helpers from 0.29.0 to 0.30.1 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23289", + "title": "Bump pm2 from 5.1.1 to 5.1.2 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23913", + "title": "Chore: Update Livechat", + "userLogin": "MartinSchoeler", + "milestone": "4.2.1", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "23908", + "title": "[FIX] Translations for App Select Settings not working", + "userLogin": "murtaza98", + "description": "Derived from PR https://github.com/RocketChat/Rocket.Chat/pull/19238", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "23848", + "title": "[FIX] DMs being created with username instead of user's name", + "userLogin": "gabriellsh", + "milestone": "4.3.0", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "23879", + "title": "[IMPROVE] Update \"Message Erasure Type\" setting's description", + "userLogin": "matheusbsilva137", + "description": "- Improves the \"Message Erasure Type\" setting's description by providing more details regarding the expected behavior of each option (\"Keep Messages and User Name\", \"Delete All Messages\" and \"Remove link between user and messages\");\r\n- Remove outdated translations (for this setting's description).", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "23796", + "title": "[FIX] Segmentation fault on CentOS 7 due to outdated `sharp`", + "userLogin": "tassoevan", + "description": "Upgrades `sharp` to avoid a segmentation fault on CentOS 7 during startup related to `sharp.node` being loaded via `process.dlopen()`.\r\n\r\nSuggested as a fix for versions `4.0.x` and `4.1.x`.", + "milestone": "4.2.1", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23819", + "title": "[IMPROVE] Omnichannel Visitor Endpoints error handling", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman", + "web-flow" + ] + }, + { + "pr": "23857", + "title": "[FIX] teams.removeMembers client usage", + "userLogin": "dougfabris", + "milestone": "4.2.1", + "contributors": [ + "ggazzo", + "dougfabris" + ] + }, + { + "pr": "23862", + "title": "Regression: Toolbox render item", + "userLogin": "dougfabris", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23558", + "title": "[FIX] Fix no message size limit for method sendMessageLivechat", + "userLogin": "cuonghuunguyen", + "contributors": [ + null + ] + }, + { + "pr": "23791", + "title": "[FIX] Modal keeps state if reset too fast.", + "userLogin": "gabriellsh", + "description": "~Queued updates so the Modal has a chance to close.~\r\nUsed a random key to ensure modal doesn't keep it's state.", + "milestone": "4.3.0", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "23877", + "title": "Regression: Missing padding in popover with custom template", + "userLogin": "dougfabris", + "description": "![Screen Shot 2021-12-06 at 14 16 40](https://user-images.githubusercontent.com/27704687/144891474-a5bf982e-56af-46df-b472-adf9d999ce02.png)", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23873", + "title": "i18n: Language update from LingoHub 🤖 on 2021-12-06Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null, + "sampaiodiego" + ] + }, + { + "pr": "23861", + "title": "[FIX] Wrong button for non trial apps", + "userLogin": "rique223", + "description": "This PR solves a bug on the marketplace that was happening with WhatsApp where it was displaying a trial button even though it didn't have a free trial period. The new verification I've added checks if the app is subscription-based and then checks if it has 0 trial days in all of its tiers. If it does, it shows a subscribe button. If it doesn't, it displays a trial button. Also, I've exposed the itsEnterpriseOnly flag as an extra measure in the case of apps like Facebook Messenger that are enterprise-only and consequently should show the subscribe button. \r\nBefore:\r\n![image](https://user-images.githubusercontent.com/43561537/144687716-baef06ce-7a80-42fc-8393-b0283c0f349a.png) \r\nAfter:\r\n![image](https://user-images.githubusercontent.com/43561537/144687924-1a3eb3a7-783f-4450-abd2-1efa0de64658.png)", + "milestone": "4.2.1", + "contributors": [ + "rique223" + ] + }, + { + "pr": "23859", + "title": "[FIX] Error when creating an inactive user in admin panel", + "userLogin": "matheusbsilva137", + "description": "- Fix `usersInRole` array used to send email to activate a user.", + "milestone": "4.2.1", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "23822", + "title": "Chore: Create script to add new migrations", + "userLogin": "KevLehman", + "description": "- Create NPM script to add new migrations\r\n- TODO: Infer next migration number from file list", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23712", + "title": "[FIX] No hover effect for items in kebab menu.", + "userLogin": "Aman-Maheshwari", + "milestone": "4.3.0", + "contributors": [ + "Aman-Maheshwari", + "dougfabris" + ] + }, + { + "pr": "23821", + "title": "[NEW] Create new setting to clean local storage at end of chats", + "userLogin": "tiagoevanp", + "description": "Include setting to handle with and clear the localStorage on Livechat widget. \r\n\r\n![image](https://user-images.githubusercontent.com/17487063/144171179-95f7cf41-0192-4532-bedf-99e0b01f2c61.png)\r\n\r\nThis behavior is only possible to happen when https://github.com/RocketChat/Rocket.Chat.Livechat/pull/666 merged and released.", + "milestone": "4.2.1", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "23215", + "title": "[FIX] Add CSP to authorize auto-close of CAS login window", + "userLogin": "goyome", + "description": "Add the hash of the JS inside the page that won't close ( window.close(); )", + "milestone": "4.1.0", + "contributors": [ + "goyome", + "pierre-lehnen-rc", + "web-flow" + ] + }, + { + "pr": "23831", + "title": "[FIX] Missing custom user status ellipsis", + "userLogin": "dougfabris", + "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/144270229-baca14f5-e168-42b7-86d1-e7217be561a9.png)\r\n\r\n### after\r\n![image](https://user-images.githubusercontent.com/27704687/144274255-39216e69-8283-45c5-8a77-b835d284f655.png)", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23781", + "title": "[IMPROVE] Rewrite remove room invite modal", + "userLogin": "dougfabris", + "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/143086855-1904dbf3-fb32-4318-b744-95390d68ada2.png)\r\n\r\n### after\r\n![image](https://user-images.githubusercontent.com/27704687/143086365-d96fc9d2-12c6-4123-96a6-d8fd91cdf93a.png)", + "milestone": "4.3.0", + "contributors": [ + "dougfabris", + "gabriellsh" + ] + }, + { + "pr": "23839", + "title": "Chore: Change Menu props to accept next fuselage version", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "23756", + "title": "Chore: Replace new typography", + "userLogin": "juliajforesti", + "contributors": [ + "juliajforesti", + "ggazzo" + ] + }, + { + "pr": "23690", + "title": "[FIX] error after properly deleting user from admin panel", + "userLogin": "Aman-Maheshwari", + "milestone": "4.3.0", + "contributors": [ + "Aman-Maheshwari", + "dougfabris" + ] + }, + { + "pr": "23827", + "title": "Merge master into develop & Set version to 4.3.0-develop", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "23825", + "title": "Release 4.2.0", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow", + "rique223", + "matheusbsilva137", + "tassoevan", + "KevLehman", + "lingohub[bot]", + "d-gubert", + "dudanogueira", + "ostjen", + "pierre-lehnen-rc", + "renatobecker", + "cauefcr", + "ggazzo", + "rodrigok", + "tiagoevanp", + "bhardwajaditya", + "Aman-Maheshwari", + "dougfabris" + ] + }, + { + "pr": "23774", + "title": "Regression: Add trash to raw models", + "userLogin": "sampaiodiego", + "milestone": "4.2.0", + "contributors": [ + "sampaiodiego", + "ggazzo" + ] + }, + { + "pr": "23820", + "title": "[FIX] LDAP users being disabled when an AD security policy is enabled", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.2.0", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "23815", + "title": "Regression: \"When is the chat busier\" and \"Users by time of day\" charts are not working", + "userLogin": "matheusbsilva137", + "description": "- Fix \"When is the chat busier\" (Hours) and \"Users by time of day\" charts, which weren't displaying any data;", + "milestone": "4.2.0", + "contributors": [ + "murtaza98", + "matheusbsilva137", + "web-flow" + ] + }, + { + "pr": "23812", + "title": "i18n: Language update from LingoHub 🤖 on 2021-11-29Z", + "userLogin": "lingohub[bot]", + "milestone": "4.2.0", + "contributors": [ + null, + "sampaiodiego" + ] + }, + { + "pr": "23813", + "title": "Regression: Mark Livechat WebRTC video calling as alpha", + "userLogin": "murtaza98", + "description": "![image](https://user-images.githubusercontent.com/34130764/143832378-82b99a72-23e8-4115-8b28-a0d210de598b.png)", + "milestone": "4.2.0", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "23803", + "title": "Regression: Current Chats not Filtering", + "userLogin": "MartinSchoeler", + "milestone": "4.2.0", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "23802", + "title": "Regression: Add @rocket.chat/emitter to EE services", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23793", + "title": "Regression: Include files on EE services build", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23789", + "title": "Regression: Fix sort param on omnichannel endpoints", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23778", + "title": "Regression: Fix incorrect API path for livechat calls", + "userLogin": "murtaza98", + "milestone": "4.2.0", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "23775", + "title": "Regression: Fix LDAP sync route", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "sampaiodiego" + ] + }, + { + "pr": "23769", + "title": "Chore: Update settings.ts", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "23565", + "title": "[FIX] Registration not possible when any user is blocked for multiple failed logins", + "userLogin": "ostjen", + "contributors": [ + "ostjen" + ] + }, + { + "pr": "23770", + "title": "Regression: Fix sendMessagesToAdmins not in Fiber", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23771", + "title": "Chore: Remove duplicated 'name' key from rate limiter logs", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23761", + "title": "[NEW] Enable LDAP manual sync to deployments without EE license", + "userLogin": "rodrigok", + "description": "Open the Enterprise LDAP API that executes background sync to be used without any Enterprise License and enforce 2FA requirements.", + "milestone": "4.2.0", + "contributors": [ + "rodrigok", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "23732", + "title": "[NEW] Rate limiting for user registering", + "userLogin": "ostjen", + "milestone": "4.2.0", + "contributors": [ + "ostjen" + ] + }, + { + "pr": "23675", + "title": "Chore: add index on appId + associations for apps_persistence collection", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23768", + "title": "Chore: Bump Rocket.Chat@livechat to 1.10", + "userLogin": "KevLehman", + "milestone": "4.2.0", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23766", + "title": "[IMPROVE] Improve the add user drop down for add a user in create channel modal for UserAutoCompleteMultiple", + "userLogin": "dougfabris", + "description": "Seeing only the name of the person you are not adding is not practical in my opinion because two people can have the same name. Moreover, you can't see the username of the person you want to add in the dropdown. So I changed that and created another selection of users to show the username as well. I made this change so that it would appear in the key place for creating a room and adding a user.\r\n\r\nBefore:\r\n\r\nhttps://user-images.githubusercontent.com/45966964/115287805-faac8d00-a150-11eb-871f-147ab011ced0.mp4\r\n\r\n\r\nAfter:\r\n\r\nhttps://user-images.githubusercontent.com/45966964/115287664-d2249300-a150-11eb-8cf6-0e04730b425d.mp4", + "milestone": "4.2.0", + "contributors": [ + "Jeanstaquet", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "23533", + "title": "[FIX] New specific endpoint for contactChatHistoryMessages with right permissions", + "userLogin": "tiagoevanp", + "description": "Anyone with 'View Omnichannel Rooms' permission can see the History Messages.", + "milestone": "4.2.0", + "contributors": [ + "tiagoevanp", + "web-flow", + "KevLehman", + "ggazzo" + ] + }, + { + "pr": "23588", + "title": "[FIX][ENTERPRISE] OAuth \"Merge Roles\" removes roles from users", + "userLogin": "matheusbsilva137", + "description": "- Fix OAuth \"Merge Roles\": the \"Merge Roles\" option now synchronize only the roles described in the \"**Roles to Sync**\" setting available in each Custom OAuth settings' group (instead of replacing users' roles by their OAuth roles);\r\n- Fix \"Merge Roles\" and \"Channel Mapping\" not being performed/updated on OAuth login.", + "contributors": [ + "matheusbsilva137", + "web-flow" + ] + }, + { + "pr": "23547", + "title": "[IMPROVE] Engagement Dashboard", + "userLogin": "tassoevan", + "description": "- Adds helpers `onToggledFeature` for server and client code to handle license activation/deactivation without server restart;\r\n- Replaces usage of `useEndpointData` with `useQuery` (from [React Query](https://react-query.tanstack.com/));\r\n- Introduces `view-engagement-dashboard` permission.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23004", + "title": "[NEW] Audio and Video calling in Livechat", + "userLogin": "murtaza98", + "contributors": [ + "dhruvjain99", + "murtaza98", + "Deepak-learner" + ] + }, + { + "pr": "23758", + "title": "Chore: Type omnichannel models", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman", + "ggazzo" + ] + }, + { + "pr": "23737", + "title": "[NEW] Allow registering by REG_TOKEN environment variable", + "userLogin": "geekgonecrazy", + "description": "You can provide the REG_TOKEN environment variable containing a registration token and it will automatically register to your cloud account. This simplifies the registration flow", + "contributors": [ + "geekgonecrazy" + ] + }, + { + "pr": "23686", + "title": "[NEW] Permission for download/uploading files on mobile", + "userLogin": "ostjen", + "contributors": [ + "ostjen" + ] + }, + { + "pr": "23735", + "title": "[IMPROVE] Stricter API types", + "userLogin": "tassoevan", + "description": "It:\r\n- Adds stricter types for `API`;\r\n- Enables types for `urlParams`;\r\n- Removes mandatory passage of `undefined` payload on client;\r\n- Corrects some regressions;\r\n- Reassures my belief in TypeScript supremacy.", + "contributors": [ + "tassoevan", + "ggazzo" + ] + }, + { + "pr": "23757", + "title": "Regression: Units endpoint to TS", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "23750", + "title": "[NEW] REST endpoints to manage Omnichannel Business Units", + "userLogin": "KevLehman", + "description": "Basic documentation about endpoints can be found at https://www.postman.com/kaleman960/workspace/rocketchat-public-api/request/3865466-71502450-8c8f-42b4-8954-1cd3d01fcb0c", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23738", + "title": "[FIX] Autofocus on search input in admin", + "userLogin": "gabriellsh", + "description": "Removed \"generic\" autofocus on sidenav template.", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "23745", + "title": "Chore: Generic Table ", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "21314", + "title": "[FIX] User logout after reset E2E key", + "userLogin": "siva2204", + "description": "user Is logged out after they Reset E2E key ,so that they can sign in again to generate new key.", + "contributors": [ + "siva2204", + "tassoevan" + ] + }, + { + "pr": "23739", + "title": "[FIX] Await promise to handle error when attempting to transfer a room", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23673", + "title": "[FIX][ENTERPRISE] Private rooms and discussions can't be audited", + "userLogin": "matheusbsilva137", + "description": "- Add Private rooms (groups) and Discussions to the Message Auditing (Channels) autocomplete;\r\n- Update \"Channels\" tab name to \"Rooms\".", + "contributors": [ + "matheusbsilva137", + "gabriellsh" + ] + }, + { + "pr": "23734", + "title": "[FIX] Missing user roles in edit user tab", + "userLogin": "dougfabris", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23733", + "title": "[FIX] Discussions created inside discussions", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "23694", + "title": "[NEW] Allow Omnichannel statistics to be collected.", + "userLogin": "cauefcr", + "description": "This PR adds the possibility for business stakeholders to see what is actually being used of the Omnichannel integrations.", + "contributors": [ + "cauefcr", + "web-flow" + ] + }, + { + "pr": "23725", + "title": "[IMPROVE] Re-naming department query param for Twilio", + "userLogin": "murtaza98", + "description": "Since the endpoint supports both, department ID and department Name, so we're renaming it to reflect the same. `departmentName` -> `department`", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "23468", + "title": "[FIX] Fixed E2E default room settings not being honoured", + "userLogin": "ostjen", + "contributors": [ + "ostjen", + "TheDigitalEagle", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "23659", + "title": "[FIX] broken avatar preview when changing avatar", + "userLogin": "Aman-Maheshwari", + "contributors": [ + "Aman-Maheshwari" + ] + }, + { + "pr": "23705", + "title": "[FIX] Prevent UserAction.addStream without Subscription", + "userLogin": "tiagoevanp", + "description": "When you take an Omnichannel chat from queue, the guest's typing information will appear.", + "contributors": [ + "ggazzo", + "tiagoevanp" + ] + }, + { + "pr": "23499", + "title": "[FIX] PhotoSwipe crashing on show", + "userLogin": "tassoevan", + "description": "Waits for initial content to load before showing it.", + "contributors": [ + "tassoevan", + "dougfabris" + ] + }, + { + "pr": "23695", + "title": "Chore: add `no-bidi` rule", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23711", + "title": "[FIX] Fix typo in FR translation", + "userLogin": "Cormoran96", + "contributors": [ + "Cormoran96" + ] + }, + { + "pr": "23706", + "title": "Chore: Mocha testing configuration", + "userLogin": "tassoevan", + "description": "We've been writing integration tests for the REST API quite regularly, but we can't say the same for UI-related modules. This PR is based on the assumption that _improving the developer experience on writing tests_ would increase our coverage and promote the adoption even for newcomers.\r\n\r\nHere as summary of the proposal:\r\n\r\n- Change Mocha configuration files:\r\n - Add a base configuration (`.mocharc.base.json`);\r\n - Rename the configuration for REST API tests (`mocha_end_to_end.opts.js -> .mocharc.api.js`);\r\n - Add a configuration for client modules (`.mocharc.client.js`);\r\n - Enable ESLint for them.\r\n- Add a Mocha test command exclusive for client modules (`npm run testunit-client`);\r\n- Enable fast watch mode:\r\n - Configure `ts-node` to only transpile code (skip type checking);\r\n - Define a list of files to be watched.\r\n- Configure `mocha` environment on ESLint only for test files (required when using Mocha's globals);\r\n- Adopt Chai as our assertion library:\r\n - Unify the setup of Chai plugins (`chai-spies`, `chai-datetime`, `chai-dom`);\r\n - Replace `assert` with `chai`;\r\n - Replace `chai.expect` with `expect`.\r\n- Enable integration tests with React components:\r\n - Enable JSX support on our default Babel configuration;\r\n - Adopt [testing library](https://testing-library.com/).", + "contributors": [ + "tassoevan", + "KevLehman", + "ggazzo" + ] + }, + { + "pr": "23701", + "title": "Chore: Api definitions", + "userLogin": "ggazzo", + "contributors": [ + "tassoevan", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "23703", + "title": "[FIX][ENTERPRISE] Replace all occurrences of a placeholder on string instead of just first one", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23380", + "title": "[FIX] Horizontal rule render for inline marked options", + "userLogin": "dougfabris", + "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/140845391-f84863de-34c5-40c9-86e9-5661fc8d6305.png)\r\n\r\n### after\r\n![image](https://user-images.githubusercontent.com/27704687/140845062-8ffd297b-5430-4aa8-82a1-ec2bdaa5e265.png)", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23641", + "title": "[FIX] Omnichannel webhooks can't be saved", + "userLogin": "Aman-Maheshwari", + "contributors": [ + "Aman-Maheshwari" + ] + }, + { + "pr": "23595", + "title": "[FIX] Omnichannel business hours page breaking navigation", + "userLogin": "Aman-Maheshwari", + "contributors": [ + "Aman-Maheshwari", + "tiagoevanp", + "web-flow" + ] + }, + { + "pr": "23626", + "title": "[IMPROVE] Allow override of default department for SMS Livechat sessions", + "userLogin": "bhardwajaditya", + "contributors": [ + "bhardwajaditya" + ] + }, + { + "pr": "23691", + "title": "[FIX] Omnichannel contact center navigation", + "userLogin": "tiagoevanp", + "description": "Derives from: https://github.com/RocketChat/Rocket.Chat/pull/23656\r\n\r\nThis PR includes a different approach to solving navigation problems following the same code structure and UI definitions of other \"ActionButtons\" components in Sidebar.", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "23692", + "title": "Regression: Improve AggregationCursor types", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "23696", + "title": "Chore: Remove useCallbacks", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23387", + "title": "[IMPROVE] Reduce complexity in some functions", + "userLogin": "tassoevan", + "description": "Overhauls all places where eslint's `complexity` rule is disabled.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23633", + "title": "Chore: Convert Fiber models to async Step 1", + "userLogin": "rodrigok", + "contributors": [ + "rodrigok", + "sampaiodiego" + ] + }, + { + "pr": "23671", + "title": "Release 4.1.2", + "userLogin": "ggazzo", + "contributors": [ + "KevLehman", + "ggazzo", + "renatobecker", + "matheusbsilva137" + ] + }, + { + "pr": "23487", + "title": "[FIX] Notifications are not being filtered", + "userLogin": "matheusbsilva137", + "description": "- Add a migration to update the `Accounts_Default_User_Preferences_pushNotifications` setting's value to the `Accounts_Default_User_Preferences_mobileNotifications` setting's value;\r\n - Remove the `Accounts_Default_User_Preferences_mobileNotifications` setting (replaced by `Accounts_Default_User_Preferences_pushNotifications`);\r\n - Rename 'mobileNotifications' user's preference to 'pushNotifications'.", + "milestone": "4.1.2", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "23661", + "title": "[FIX] Performance issues when running Omnichannel job queue dispatcher", + "userLogin": "renatobecker", + "milestone": "4.1.2", + "contributors": [ + "renatobecker" + ] + }, + { + "pr": "23587", + "title": "[FIX] Omnichannel status being changed on page refresh", + "userLogin": "KevLehman", + "milestone": "4.1.2", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23389", + "title": "[NEW] Permissions for interacting with Omnichannel Contact Center", + "userLogin": "cauefcr", + "description": "Adds a new permission, one that allows for control over user access to Omnichannel Contact Center,", + "contributors": [ + "cauefcr", + "web-flow" + ] + }, + { + "pr": "23587", + "title": "[FIX] Omnichannel status being changed on page refresh", + "userLogin": "KevLehman", + "milestone": "4.1.2", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23661", + "title": "[FIX] Performance issues when running Omnichannel job queue dispatcher", + "userLogin": "renatobecker", + "milestone": "4.1.2", + "contributors": [ + "renatobecker" + ] + }, + { + "pr": "23645", + "title": "Release 4.1.1", + "userLogin": "sampaiodiego", + "contributors": [ + "pierre-lehnen-rc", + "sampaiodiego", + "dudanogueira", + "d-gubert" + ] + }, + { + "pr": "23607", + "title": "[FIX] App update flow failing in HA setups", + "userLogin": "d-gubert", + "description": "The flow for app updates is broken in specific scenarios with HA setups. Here we change the method calls in the Apps-Engine to avoid race conditions", + "milestone": "4.1.1", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "23627", + "title": "[FIX] LDAP users not being re-activated on login", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.1.1", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "23608", + "title": "[FIX] Advanced LDAP Sync Features", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.1.1", + "contributors": [ + "pierre-lehnen-rc", + "web-flow" + ] + }, + { + "pr": "23608", + "title": "[FIX] Advanced LDAP Sync Features", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.1.1", + "contributors": [ + "pierre-lehnen-rc", + "web-flow" + ] + }, + { + "pr": "23627", + "title": "[FIX] LDAP users not being re-activated on login", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.1.1", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "23576", + "title": "[FIX] \"to users\" not working in export message", + "userLogin": "ostjen", + "contributors": [ + "ostjen", + "web-flow" + ] + }, + { + "pr": "23607", + "title": "[FIX] App update flow failing in HA setups", + "userLogin": "d-gubert", + "description": "The flow for app updates is broken in specific scenarios with HA setups. Here we change the method calls in the Apps-Engine to avoid race conditions", + "milestone": "4.1.1", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "23566", + "title": "[FIX] Apps scheduler \"losing\" jobs after server restart", + "userLogin": "d-gubert", + "description": "If a job is scheduled and the server restarted, said job won't be executed, giving the impression it's been lost.\r\n\r\nWhat happens is that the scheduler is only started when some app tries to schedule an app - if that happens, all jobs that are \"late\" will be executed; if that doesn't happen, no job will run.\r\n\r\nThis PR starts the apps scheduler right after all apps have been loaded", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "23603", + "title": "i18n: Language update from LingoHub 🤖 on 2021-11-01Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null, + "sampaiodiego" + ] + }, + { + "pr": "23498", + "title": "[NEW] Show on-hold metrics on analytics pages and current chats", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23452", + "title": "Chore: Rearrange module typings", + "userLogin": "tassoevan", + "description": "- Move all external module declarations (definitions and augmentations) to `/definition/externals`;\r\n- ~Symlink some modules on `/definition/externals` to `/ee/server/services/definition/externals`~ Share types with `/ee/server/services`;\r\n- Use TypeScript as server code entrypoint.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23487", + "title": "[FIX] Notifications are not being filtered", + "userLogin": "matheusbsilva137", + "description": "- Add a migration to update the `Accounts_Default_User_Preferences_pushNotifications` setting's value to the `Accounts_Default_User_Preferences_mobileNotifications` setting's value;\r\n - Remove the `Accounts_Default_User_Preferences_mobileNotifications` setting (replaced by `Accounts_Default_User_Preferences_pushNotifications`);\r\n - Rename 'mobileNotifications' user's preference to 'pushNotifications'.", + "milestone": "4.1.2", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "23542", + "title": "[IMPROVE] MKP12 - New UI - Merge Apps and Marketplace Tabs and Content", + "userLogin": "rique223", + "description": "Merged the Marketplace and Apps page into a single page with a tabs component that changes between Markeplace and installed apps.\r\n![page merging](https://user-images.githubusercontent.com/43561537/138516558-f86d62e6-1a5c-4817-a229-a1b876323960.gif)", + "contributors": [ + "ggazzo", + "dougfabris" + ] + }, + { + "pr": "23586", + "title": "Merge master into develop & Set version to 4.2.0-develop", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "23581", + "title": "Release 4.1.0", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow", + "tassoevan", + "dougfabris", + "Darshilp326", + "ostjen", + "d-gubert", + "wolbernd", + "rodrigok", + "matheusbsilva137", + "Aman-Maheshwari", + "Sing-Li", + "murtaza98", + "yash-rajpal", + "badbart", + "AbhJ", + "dragoneena12" + ] + }, + { + "pr": "23554", + "title": "Release 4.0.5", + "userLogin": "sampaiodiego", + "contributors": [ + "pierre-lehnen-rc", + "sampaiodiego" + ] + }, + { + "pr": "23541", + "title": "[FIX] OAuth login not working on mobile app", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.0.5", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "23532", + "title": "Release 4.0.4", + "userLogin": "sampaiodiego", + "contributors": [ + "KevLehman", + "sampaiodiego", + "matheusbsilva137" + ] + }, + { + "pr": "23411", + "title": "[FIX] SAML Users' roles being reset to default on login", + "userLogin": "matheusbsilva137", + "description": "- Remove `roles` field update on `insertOrUpdateSAMLUser` function;\r\n- Add SAML `syncRoles` event;", + "milestone": "4.0.4", + "contributors": [ + "matheusbsilva137", + "pierre-lehnen-rc" + ] + }, + { + "pr": "23522", + "title": "[FIX] Queue error handling and unlocking behavior", + "userLogin": "KevLehman", + "milestone": "4.0.4", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23496", + "title": "Release 4.0.3", + "userLogin": "sampaiodiego", + "contributors": [ + "KevLehman", + "sampaiodiego", + "thassiov" + ] + }, + { + "pr": "23418", + "title": "[FIX][APPS] Communication problem when updating and uninstalling apps in cluster", + "userLogin": "thassiov", + "description": "- Make the hook responsible for receiving app update events inside a cluster fetch the app's package (zip file) in the correct place.\r\n- Also shows a warning message on uninstalls inside a cluster. As there are many servers writing to the same place, some race conditions may occur. This prevents problems related to terminating the process in the middle due to errors being thrown and leaving the server in a faulty state.", + "milestone": "4.0.3", + "contributors": [ + "thassiov" + ] + }, + { + "pr": "23473", + "title": "[FIX] Server crashing when Routing method is not available at start", + "userLogin": "KevLehman", + "milestone": "4.0.3", + "contributors": [ + "KevLehman", + "web-flow" + ] + }, + { + "pr": "23460", + "title": "Release 4.0.2", + "userLogin": "sampaiodiego", + "contributors": [ + "murtaza98", + "sampaiodiego", + "Aman-Maheshwari" + ] + }, + { + "pr": "23377", + "title": "[FIX] Attachment buttons overlap in mobile view", + "userLogin": "Aman-Maheshwari", + "milestone": "4.0.2", + "contributors": [ + "Aman-Maheshwari" + ] + }, + { + "pr": "23393", + "title": "[FIX] user/agent upload not working via Apps Engine after 3.16.0", + "userLogin": "murtaza98", + "description": "Fixes #22974", + "milestone": "4.0.2", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "23404", + "title": "[FIX][ENTERPRISE] Omnichannel agent is not leaving the room when a forwarded chat is queued", + "userLogin": "murtaza98", + "milestone": "4.0.2", + "contributors": [ + "murtaza98", + "web-flow" + ] + }, + { + "pr": "23396", + "title": "[FIX] Prevent starting Omni-Queue if Omnichannel is disabled", + "userLogin": "murtaza98", + "description": "Whenever the Routing system setting changes, and omnichannel is disabled, then we shouldn't start the queue.", + "milestone": "4.0.2", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "23386", + "title": "Release 4.0.1", + "userLogin": "sampaiodiego", + "contributors": [ + "rodrigok", + "sampaiodiego", + "ostjen", + "wolbernd", + "d-gubert", + "matheusbsilva137" + ] + }, + { + "pr": "23378", + "title": "[FIX] Users' `roles` and `type` being reset to default on LDAP DataSync", + "userLogin": "matheusbsilva137", + "description": "- Update `roles` and `type` fields only if they are specified in the data imported from LDAP (otherwise, no changes are applied).", + "milestone": "4.0.1", + "contributors": [ + "matheusbsilva137", + "sampaiodiego" + ] + }, + { + "pr": "23374", + "title": "[FIX] imported migration v240", + "userLogin": "ostjen", + "milestone": "4.0.1", + "contributors": [ + "ostjen" + ] + }, + { + "pr": "23375", + "title": "Chore: Update Apps-Engine version", + "userLogin": "d-gubert", + "milestone": "4.0.1", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "23366", + "title": "[FIX] BigBlueButton integration error due to missing file import", + "userLogin": "wolbernd", + "description": "Fixes BigBlueButton integration", + "milestone": "4.0.1", + "contributors": [ + "wolbernd", + "web-flow" + ] + }, + { + "pr": "23372", + "title": "[FIX] unwanted toastr error message when deleting user", + "userLogin": "ostjen", + "milestone": "4.0.1", + "contributors": [ + "ostjen", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "23379", + "title": "[FIX] resumeToken not working", + "userLogin": "sampaiodiego", + "milestone": "4.0.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23381", + "title": "[FIX] MongoDB deprecation link", + "userLogin": "sampaiodiego", + "milestone": "4.0.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23382", + "title": "[FIX] LDAP not stoping after wrong password", + "userLogin": "rodrigok", + "milestone": "4.0.1", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "23577", + "title": "Regression: Debounce call based on params on omnichannel queue dispatch", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23556", + "title": "Regression: Prevent settings from getting updated", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23568", + "title": "Regression: Routing method not available when called from listeners at startup", + "userLogin": "KevLehman", + "milestone": "4.1.0", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23391", + "title": "Bump: fuselage 0.30.1", + "userLogin": "ggazzo", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23564", + "title": "Revert: \"[FIX] Apps scheduler \"losing\" jobs after server restart\"", + "userLogin": "d-gubert", + "contributors": [ + "d-gubert", + "web-flow" + ] + }, + { + "pr": "23539", + "title": "[FIX] Apps scheduler \"losing\" jobs after server restart", + "userLogin": "d-gubert", + "description": "If a job is scheduled and the server restarted, said job won't be executed, giving the impression it's been lost.\r\n\r\nWhat happens is that the scheduler is only started when some app tries to schedule an app - if that happens, all jobs that are \"late\" will be executed; if that doesn't happen, no job will run.\r\n\r\nThis PR starts the apps scheduler right after all apps have been loaded", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "23552", + "title": "Regression: Mail body contains `undefined` text", + "userLogin": "tassoevan", + "description": "### Before\r\n![image](https://user-images.githubusercontent.com/2263066/138733018-10449892-5c2d-46fb-9355-00e98e0d6c9f.png)\r\n\r\n### After\r\n![image](https://user-images.githubusercontent.com/2263066/138733074-a1b88a77-bf64-41c3-a6c3-ac9e1cb63de1.png)", + "contributors": [ + "tassoevan", + "sampaiodiego" + ] + }, + { + "pr": "23541", + "title": "[FIX] OAuth login not working on mobile app", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.0.5", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "23531", + "title": "Regression: Waiting_queue setting not being applied due to missing module key", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23528", + "title": "Regression: Settings order", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "23529", + "title": "Regression: watchByRegex without Fibers", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "23524", + "title": "Chore: Fix some TS warnings", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23521", + "title": "[FIX] Delay start of email inbox", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23495", + "title": "Chore: Make omnichannel settings dependent on omnichannel being enabled", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "23523", + "title": "Chore: Update Livechat Package", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler" + ] + }, + { + "pr": "23411", + "title": "[FIX] SAML Users' roles being reset to default on login", + "userLogin": "matheusbsilva137", + "description": "- Remove `roles` field update on `insertOrUpdateSAMLUser` function;\r\n- Add SAML `syncRoles` event;", + "milestone": "4.0.4", + "contributors": [ + "matheusbsilva137", + "pierre-lehnen-rc" + ] + }, + { + "pr": "23522", + "title": "[FIX] Queue error handling and unlocking behavior", + "userLogin": "KevLehman", + "milestone": "4.0.4", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23314", + "title": "[FIX] MONGO_OPTIONS being ignored for oplog connection", + "userLogin": "cuonghuunguyen", + "contributors": [ + "cuonghuunguyen", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "23392", + "title": "[IMPROVE] Allow Omnichannel to handle huge queues ", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman", + "web-flow" + ] + }, + { + "pr": "23515", + "title": "[IMPROVE] Make Livechat Instructions setting multi-line", + "userLogin": "murtaza98", + "description": "Since now we're supporting markdown text on this field (via this PR - https://github.com/RocketChat/Rocket.Chat.Livechat/pull/648), it would be nice to make this setting multiline so users can have more space to edit the text\r\n![image](https://user-images.githubusercontent.com/34130764/138146712-13e4968b-5312-4d53-b44c-b5699c5e49c1.png)", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "23505", + "title": "Chore: Improve watch OAuth settings logic", + "userLogin": "ggazzo", + "description": "Just prevent to perform 200 deletions for registers that not even exist", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "23518", + "title": "Regression: Incorrect behavior in jump to recent message button", + "userLogin": "dougfabris", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23519", + "title": "Regression: Fix enterprise setting validation", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "23514", + "title": "Chore: Ensure all permissions are created up to this point", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23469", + "title": "[FIX] useEndpointAction replace by useEndpointActionExperimental", + "userLogin": "tiagoevanp", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "23394", + "title": "[FIX] Omni-Webhook's retry mechanism going in infinite loop", + "userLogin": "murtaza98", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "23511", + "title": "Regression: Fix user typings style", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "23510", + "title": "Chore: Update pino and pino-pretty", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23506", + "title": "Regression: Prevent Settings Unit Test Error ", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "23486", + "title": "i18n: Language update from LingoHub 🤖 on 2021-10-18Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null, + "KevLehman" + ] + }, + { + "pr": "23376", + "title": "Bump url-parse from 1.4.7 to 1.5.3", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23172", + "title": "[FIX] Rewrite missing webRTC feature", + "userLogin": "dougfabris", + "contributors": [ + "dougfabris", + "tassoevan" + ] + }, + { + "pr": "23488", + "title": "Chore: Replace `promises` helper", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23210", + "title": "Chore: Startup Time", + "userLogin": "ggazzo", + "description": "The settings logic has been improved as a whole.\r\n\r\nAll the logic to get the data from the env var was confusing.\r\n\r\nSetting default values was tricky to understand.\r\n\r\nEvery time the server booted, all settings were updated and callbacks were called 2x or more (horrible for environments with multiple instances and generating a turbulent startup).\r\n\r\n`Settings.get(......, callback);` was deprecated. We now have better methods for each case.", + "milestone": "4.1.0", + "contributors": [ + "ggazzo", + "sampaiodiego" + ] + }, + { + "pr": "23494", + "title": "[FIX] Missing avatarETag in Room Avatars", + "userLogin": "dougfabris", + "description": "### before\r\n![before](https://user-images.githubusercontent.com/27704687/137982103-1f4c8d0c-b4e1-4604-ba0f-6e3881813577.gif)\r\n\r\n### after\r\n![Peek 2021-10-19 16-59](https://user-images.githubusercontent.com/27704687/137981755-61dad9c0-4c50-4af3-9337-4e7a2633023a.gif)", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23491", + "title": "Chore: Move `isJSON` helper", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23497", + "title": "Update the community open call link in README", + "userLogin": "Sing-Li", + "contributors": [ + "Sing-Li", + "web-flow", + "geekgonecrazy" + ] + }, + { + "pr": "23490", + "title": "Chore: Move `addMinutesToADate` helper", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23489", + "title": "Chore: Move `isEmail` helper", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23228", + "title": "[FIX] Admins can't update or reset user avatars when the \"Allow User Avatar Change\" setting is off", + "userLogin": "matheusbsilva137", + "description": "- Allow admins (or any other user with the `edit-other-user-avatar` permission) to update or reset user avatars even when the \"Allow User Avatar Change\" setting is off.", + "contributors": [ + "matheusbsilva137", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "23473", + "title": "[FIX] Server crashing when Routing method is not available at start", + "userLogin": "KevLehman", + "milestone": "4.0.3", + "contributors": [ + "KevLehman", + "web-flow" + ] + }, + { + "pr": "22949", + "title": "[FIX] Avoid last admin deactivate itself", + "userLogin": "ostjen", + "description": "Co-authored-by: @Kartik18g", + "contributors": [ + "ostjen", + "web-flow", + null + ] + }, + { + "pr": "23418", + "title": "[FIX][APPS] Communication problem when updating and uninstalling apps in cluster", + "userLogin": "thassiov", + "description": "- Make the hook responsible for receiving app update events inside a cluster fetch the app's package (zip file) in the correct place.\r\n- Also shows a warning message on uninstalls inside a cluster. As there are many servers writing to the same place, some race conditions may occur. This prevents problems related to terminating the process in the middle due to errors being thrown and leaving the server in a faulty state.", + "milestone": "4.0.3", + "contributors": [ + "thassiov" + ] + }, + { + "pr": "23474", + "title": "[FIX] Allow files with no/unknown extension to be uploaded", + "userLogin": "gabriellsh", + "description": "Let the server block uploads based on mime type if the browser can't recognize the extension.", + "contributors": [ + "gabriellsh", + "dougfabris" + ] + }, + { + "pr": "23455", + "title": "[IMPROVE] Rewrite read receipts to react.", + "userLogin": "gabriellsh", + "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/137547164-95089054-7639-4484-98b1-dad858d5e3a7.png)\r\n\r\n### after\r\n![image](https://user-images.githubusercontent.com/40830821/137206897-f31b75c5-d962-4595-844a-d7842dfe33a5.png)", + "contributors": [ + "gabriellsh", + "dougfabris" + ] + }, + { + "pr": "23471", + "title": "[FIX] Team's tag inaccessible for members", + "userLogin": "dougfabris", + "description": "### before\r\n![before_video](https://user-images.githubusercontent.com/27704687/137529529-d30b4f0b-af2b-4d81-ba38-e81b48e77519.gif)\r\n\r\n### after\r\n![after_video](https://user-images.githubusercontent.com/27704687/137529526-cf0bc6db-fa08-4bf9-8599-af647a0e3307.gif)", + "contributors": [ + "dougfabris", + "matheusbsilva137" + ] + }, + { + "pr": "23417", + "title": "[IMPROVE] Rewrite Edit Status Modal", + "userLogin": "dougfabris", + "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/136571489-76d9e218-440b-4e52-a802-508fc8a03d15.png)\r\n\r\n### after\r\n![image](https://user-images.githubusercontent.com/27704687/136571431-3b1a41c0-d419-437c-93c0-39c2e297dab5.png)", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23472", + "title": "[IMPROVE] Rewrite \"Message too long\" modal to react", + "userLogin": "gabriellsh", + "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/137536256-95ba71d2-4185-40b2-b13d-08138499c44b.png)\r\n\r\n### after\r\n![image](https://user-images.githubusercontent.com/40830821/137533488-e6c74a55-23c8-457e-a00b-f907767a3fe3.png)", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "23462", + "title": "[FIX] Markdown quote message style", + "userLogin": "tiagoevanp", + "description": "Before:\r\n![image](https://user-images.githubusercontent.com/17487063/137496669-3abecab4-cf90-45cb-8b1b-d9411a5682dd.png)\r\n\r\nAfter:\r\n![image](https://user-images.githubusercontent.com/17487063/137496905-fd727f90-f707-4ec6-8139-ba2eb1a2146e.png)", + "contributors": [ + "tiagoevanp" + ] + }, + { + "pr": "22950", + "title": "[NEW] Stream to get individual presence updates", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow", + "ggazzo" + ] + }, + { + "pr": "23396", + "title": "[FIX] Prevent starting Omni-Queue if Omnichannel is disabled", + "userLogin": "murtaza98", + "description": "Whenever the Routing system setting changes, and omnichannel is disabled, then we shouldn't start the queue.", + "milestone": "4.0.2", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "23373", + "title": "[FIX] Merge teams as conversation when group by type is disabled", + "userLogin": "dougfabris", + "description": "### before\r\n![image](https://user-images.githubusercontent.com/27704687/136074414-b23dfc49-7c6a-4fd3-b344-9973d4afe1ca.png)\r\n\r\n### after\r\n![image](https://user-images.githubusercontent.com/27704687/136074065-6f7483db-a506-4a94-ad9b-baf744b6b574.png)", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23404", + "title": "[FIX][ENTERPRISE] Omnichannel agent is not leaving the room when a forwarded chat is queued", + "userLogin": "murtaza98", + "milestone": "4.0.2", + "contributors": [ + "murtaza98", + "web-flow" + ] + }, + { + "pr": "23419", + "title": "Chore: Partially migrate 2FA client code to TypeScript", + "userLogin": "tassoevan", + "description": "Additionally, hides `toastr` behind an module to handle UI's toast notifications.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "19457", + "title": "[FIX] Show jump to recent messages button", + "userLogin": "dragoneena12", + "description": "Show the button to scroll to the last message when you just moved up from last message.\r\n\r\n![image](https://user-images.githubusercontent.com/27704687/136297875-f07f07d2-945b-4365-ad4a-85138305cf50.png)", + "contributors": [ + "dragoneena12", + "web-flow", + "dougfabris" + ] + }, + { + "pr": "23342", + "title": "Chore: clean README", + "userLogin": "AbhJ", + "contributors": [ + "AbhJ", + "web-flow" + ] + }, + { + "pr": "23355", + "title": "Chore: Fixed a Typo in 11-admin.js test", + "userLogin": "badbart", + "contributors": [ + "badbart", + "web-flow" + ] + }, + { + "pr": "23405", + "title": "Chore: Document REST API endpoints (DNS)", + "userLogin": "tassoevan", + "description": "Describes endpoints for DNS on REST API using a JSDoc annotation compatible with OpenAPI spec.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23430", + "title": "Chore: Document REST API endpoints (E2E)", + "userLogin": "tassoevan", + "description": "Describes endpoints for end-to-end encryption on REST API using a JSDoc annotation compatible with OpenAPI spec.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23428", + "title": "Chore: Document REST API endpoints (Misc)", + "userLogin": "tassoevan", + "description": "Describes miscellaneous endpoints on REST API using a JSDoc annotation compatible with OpenAPI spec.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "20947", + "title": "[IMPROVE] Add markdown to custom fields in user Info", + "userLogin": "yash-rajpal", + "description": "Added markdown to custom fields to render links", + "contributors": [ + "yash-rajpal", + "dougfabris" + ] + }, + { + "pr": "23393", + "title": "[FIX] user/agent upload not working via Apps Engine after 3.16.0", + "userLogin": "murtaza98", + "description": "Fixes #22974", + "milestone": "4.0.2", + "contributors": [ + "murtaza98" + ] + }, + { + "pr": "23377", + "title": "[FIX] Attachment buttons overlap in mobile view", + "userLogin": "Aman-Maheshwari", + "milestone": "4.0.2", + "contributors": [ + "Aman-Maheshwari" + ] + }, + { + "pr": "23378", + "title": "[FIX] Users' `roles` and `type` being reset to default on LDAP DataSync", + "userLogin": "matheusbsilva137", + "description": "- Update `roles` and `type` fields only if they are specified in the data imported from LDAP (otherwise, no changes are applied).", + "milestone": "4.0.1", + "contributors": [ + "matheusbsilva137", + "sampaiodiego" + ] + }, + { + "pr": "23382", + "title": "[FIX] LDAP not stoping after wrong password", + "userLogin": "rodrigok", + "milestone": "4.0.1", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "23381", + "title": "[FIX] MongoDB deprecation link", + "userLogin": "sampaiodiego", + "milestone": "4.0.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23385", + "title": "Chore: Remove dangling README file", + "userLogin": "tassoevan", + "description": "Removes the elderly `server/restapi/README.md`.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23379", + "title": "[FIX] resumeToken not working", + "userLogin": "sampaiodiego", + "milestone": "4.0.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23372", + "title": "[FIX] unwanted toastr error message when deleting user", + "userLogin": "ostjen", + "milestone": "4.0.1", + "contributors": [ + "ostjen", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "23370", + "title": "Chore: Migrate some React components/hooks to TypeScript", + "userLogin": "tassoevan", + "description": "Just low-hanging fruits.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23366", + "title": "[FIX] BigBlueButton integration error due to missing file import", + "userLogin": "wolbernd", + "description": "Fixes BigBlueButton integration", + "milestone": "4.0.1", + "contributors": [ + "wolbernd", + "web-flow" + ] + }, + { + "pr": "23375", + "title": "Chore: Update Apps-Engine version", + "userLogin": "d-gubert", + "milestone": "4.0.1", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "23374", + "title": "[FIX] imported migration v240", + "userLogin": "ostjen", + "milestone": "4.0.1", + "contributors": [ + "ostjen" + ] + }, + { + "pr": "22941", + "title": "[IMPROVE] optimized groups.listAll response time", + "userLogin": "ostjen", + "description": "groups.listAll endpoint was having performance issues, specially when the total number of groups was high. This happened because the endpoint was loading all objects in memory then using splice to paginate, instead of paginating beforehand.\r\n\r\nConsidering 70k groups, this was the performance improvement:\r\n\r\nbefore\r\n![image](https://user-images.githubusercontent.com/28611993/129601314-bdf89337-79fa-4446-9f44-95264af4adb3.png)\r\n\r\nafter\r\n![image](https://user-images.githubusercontent.com/28611993/129601358-5872e166-f923-4c1c-b21d-eb9507365ecf.png)", + "contributors": [ + "ostjen", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "21673", + "title": "[IMPROVE] Update toast message for remove and delete rooms from teams", + "userLogin": "Darshilp326", + "description": "Added success messages to remove and delete room actions.\r\n\r\nBEFORE\r\n\r\nhttps://user-images.githubusercontent.com/55157259/115400805-520d3480-a207-11eb-9be9-8db9b6cda590.mp4\r\n\r\nAFTER\r\n\r\nhttps://user-images.githubusercontent.com/55157259/115400846-5afe0600-a207-11eb-9479-1d8e92fdc787.mp4", + "contributors": [ + "Darshilp326", + "dougfabris" + ] + }, + { + "pr": "23213", + "title": "[FIX] Read only description in team creation", + "userLogin": "dougfabris", + "description": "![image](https://user-images.githubusercontent.com/27704687/133608433-8ca788a3-71a8-4d40-8c40-8156ab03c606.png)\r\n\r\n![image](https://user-images.githubusercontent.com/27704687/133608400-4cdc7a67-95e5-46c6-8c65-29ab107cd314.png)", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23364", + "title": "Chore: Upgrade Storybook", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23360", + "title": "Chore: Move components away from /app/", + "userLogin": "tassoevan", + "description": "We currently do NOT recommend placing React components under `/app`.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23361", + "title": "Chore: Document REST API endpoints (banners)", + "userLogin": "tassoevan", + "description": "Describes endpoints for banners on REST API using a JSDoc annotation compatible with OpenAPI spec.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23339", + "title": "Release 4.0.0", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow", + "lingohub[bot]", + "dependabot[bot]", + "graywolf336", + "MarcosSpessatto", + "murtaza98", + "KevLehman" + ] + }, + { + "pr": "23362", + "title": "Merge master into develop & Set version to 4.1.0-develop", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "23328", + "title": "Regression: invalid `call` import", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23331", + "title": "Regression: LDAP: Handle base authentication and prevent crash", + "userLogin": "rodrigok", + "description": "When AD requires TLS the auth crashes the server if StartTLS is not set, the error shows at the end because the code was not waiting on this operation.", + "milestone": "4.0.0", + "contributors": [ + "rodrigok", + "pierre-lehnen-rc", + "web-flow" + ] + }, + { + "pr": "23334", + "title": "Regression: invalid `call` import", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan", + "web-flow" + ] + }, + { + "pr": "23321", + "title": "Regression: LDAP User Data Sync not always working", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "23333", + "title": "Regression: Removed exclusive tests statement", + "userLogin": "ostjen", + "contributors": [ + "ostjen" + ] + }, + { + "pr": "23322", + "title": "Regression: Blank screen in Jitsi video calls", + "userLogin": "matheusbsilva137", + "description": "- Fix Jitsi calls being disposed even when \"Open in new window\" setting is disabled;\r\n - Fix misspelling on `CallJitsWithData.js` file name.", + "contributors": [ + "matheusbsilva137" + ] + }, + { + "pr": "23330", + "title": "Regression: SAML identifier mapping", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "23319", + "title": "[BREAK] Moved SAML custom field map to EE", + "userLogin": "ostjen", + "contributors": [ + "ostjen", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "23320", + "title": "Regression: \"Join\" button not working", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23318", + "title": "Regression: Add default value when no cookies are present", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23317", + "title": "Regression: Request seats url", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "23310", + "title": "[BREAK] Webhook will fail if user is not part of the channel", + "userLogin": "sampaiodiego", + "description": "Remove deprecated behavior added by https://github.com/RocketChat/Rocket.Chat/pull/18024 that accepts webhook integrations sending messages even if the user is not part of the channel.\r\n\r\nStarting from 4.0.0 the webhook request will fail with `error-not-allowed` error:\r\n\r\n```\r\n{\"success\":false,\"error\":\"error-not-allowed\"}\r\n```", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23311", + "title": "Regression: LDAP Channel/Role Sync not working", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "23312", + "title": "Regression: Request seats link", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "23306", + "title": "Regression: LDAP Issues", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "23302", + "title": "[BREAK] Remove cordova compatibility setting", + "userLogin": "ostjen", + "contributors": [ + "ostjen" + ] + }, + { + "pr": "23308", + "title": "Regression: Fix Bugsnag not started error", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23307", + "title": "Regression: Change some logs to new format", + "userLogin": "KevLehman", + "milestone": "3.18.2", + "contributors": [ + "KevLehman" + ] + }, + { + "pr": "23297", + "title": "Regression: Create new loggers based on server log level", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23304", + "title": "Regression: Fix channel icons on queue", + "userLogin": "MartinSchoeler", + "milestone": "4.0.0", + "contributors": [ + "KevLehman", + "MartinSchoeler" + ] + }, + { + "pr": "23280", + "title": "[FIX] Update visitor info on email reception based on current inbox settings", + "userLogin": "KevLehman", + "milestone": "3.18.2", + "contributors": [ + "KevLehman", + "murtaza98", + "web-flow" + ] + }, + { + "pr": "23286", + "title": "Regression: Fix app storage migration", + "userLogin": "thassiov", + "description": "The previous version of this migration didn't take into consideration apps that were installed prior to [Rocket.Chat@3.8.0](https://github.com/RocketChat/Rocket.Chat/releases/tag/3.8.0), which [removed the typescript compiler from the server](https://github.com/RocketChat/Rocket.Chat/pull/18687) and into the CLI. As a result, the zip files inside each installed app's document in the database had typescript files in them instead of the now required javascript files.\r\n\r\nAs the new strategy of source code storage for apps changes the way the app is loaded, those zip files containing the source code are read everytime the app is started (or [in this particular case, updated](https://github.com/RocketChat/Rocket.Chat/pull/23286/files#diff-caf9f7a22478639e58d6514be039140a42ce1ab2d999c3efe5678c38ee36d0ccR43)), and as the zips' contents were wrong, the operation was failing.\r\n\r\nThe fix extract the data from old apps and creates new zip files with the compiled `js` already present.", + "contributors": [ + "thassiov" + ] + }, + { + "pr": "23278", + "title": "Regression: Seats Cap banner not being disabled if not enterprise", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "23218", + "title": "[FIX] Sidebar not closing when clicking in Home or Directory on mobile view", + "userLogin": "dougfabris", + "description": "### Additional fixed\r\n- Merge Burger menu components into a single component\r\n- Show a badge with no-read messages in the Burger Button:\r\n![image](https://user-images.githubusercontent.com/27704687/133679378-20fea2c0-4ac1-4b4e-886e-45154cc6afea.png)\r\n- remove useSidebarClose hook", + "contributors": [ + "dougfabris", + "ggazzo", + "web-flow" + ] + }, + { + "pr": "23281", + "title": "Regression: wrong settings order", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "22407", + "title": "[FIX] Prevent users to edit an existing role when adding a new one with the same name used before.", + "userLogin": "dougfabris", + "description": "### before\r\n![Peek 2021-07-13 16-31](https://user-images.githubusercontent.com/27704687/125513721-953d84f4-1c95-45ca-80e1-b00992b874f6.gif)\r\n\r\n### after\r\n![Peek 2021-07-13 16-34](https://user-images.githubusercontent.com/27704687/125514098-91ee8014-51e5-4c62-9027-5538acf57d08.gif)", + "contributors": [ + null, + "lucassartor", + "dougfabris", + "ggazzo", + "web-flow", + "pierre-lehnen-rc", + "tassoevan" + ] + }, + { + "pr": "23282", + "title": "Regression: Missing i18n key", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "23201", + "title": "[BREAK] Moved advanced oAuth features to EE", + "userLogin": "ostjen", + "contributors": [ + "ostjen", + "web-flow", + "pierre-lehnen-rc" + ] + }, + { + "pr": "23256", + "title": "[IMPROVE] Better text for auth banner", + "userLogin": "g-thome", + "description": "Change the text in the banner warning for auth changes", + "contributors": [ + "g-thome", + "tassoevan", + "web-flow", + "pierre-lehnen-rc" + ] + }, + { + "pr": "23090", + "title": "[NEW] Omnichannel source identification fields", + "userLogin": "d-gubert", + "description": "This PR adds new fields to the room schema that aids in the identification of the source that created an Omnichannel room, which can be either via livechat widget, SMS, app, etc.", + "milestone": "4.0.0", + "contributors": [ + "d-gubert", + "KevLehman", + "web-flow", + "tiagoevanp", + "MartinSchoeler" + ] + }, + { + "pr": "23231", + "title": "Regression: LDAP Refactoring", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc", + "web-flow", + "ggazzo" + ] + }, + { + "pr": "22657", + "title": "[IMPROVE][APPS] New storage strategy for Apps-Engine file packages", + "userLogin": "d-gubert", + "description": "This is an enabler for our initiative to support NPM packages in the Apps-Engine. \r\n\r\nCurrently, the packages (zip files) for Rocket.Chat Apps are stored as a base64 encoded string in a document in the database, which constrains us due to the size limit of a document in MongoDB (16Mb).\r\n\r\nWhen we allow apps to include NPM packages, the size of the App package itself will be potentially _very large_ (I'm looking at you `node_modules`). Thus we'll be changing the strategy to store apps either with GridFS or the host's File System itself.", + "milestone": "4.0.0", + "contributors": [ + "d-gubert", + "web-flow", + "thassiov" + ] + }, + { + "pr": "23243", + "title": "[FIX] Modals is cutting pixels of the content", + "userLogin": "dougfabris", + "description": "Fuselage Dependency: [543](https://github.com/RocketChat/Rocket.Chat.Fuselage/pull/543)\r\n![image](https://user-images.githubusercontent.com/27704687/134049227-3cd1deed-34ba-454f-a95e-e99b79a7a7b9.png)", + "contributors": [ + "dougfabris" + ] + }, + { + "pr": "23232", + "title": "[IMPROVE] Load code highlighting languages on demand and fixes on new message parser", + "userLogin": "ggazzo", + "description": "Now we have this setting called 'Code highlighting languages list' where you can define the languages that you want to be loaded by default.", + "contributors": [ + "ggazzo", + "sampaiodiego" + ] + }, + { + "pr": "23223", + "title": "[BREAK][ENTERPRISE] Missing headers in CSV files downloaded from the Engagement Dashboard", + "userLogin": "matheusbsilva137", + "description": "- Add headers to all CSV files downloaded from the \"Messages\" and \"Channels\" tabs from the Engagement Dashboard;\r\n - Add headers to the CSV file downloaded from the \"Users by time of day\" section (in the \"Users\" tab).", + "contributors": [ + "matheusbsilva137", + "casalsgh", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "23074", + "title": "[FIX] transfer message when tranferring room by Apps Engine", + "userLogin": "cuonghuunguyen", + "milestone": "4.0.0", + "contributors": [ + "cuonghuunguyen", + "KevLehman", + "web-flow" + ] + }, + { + "pr": "22392", + "title": "[NEW] Add activity indicators for Uploading and Recording using new API; Support thread context; Deprecate the old typing API", + "userLogin": "sumukhah", + "milestone": "4.0.0", + "contributors": [ + "sumukhah", + "rodrigok" + ] + }, + { + "pr": "23236", + "title": "Bump ejson from 2.2.1 to 2.2.2 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23056", + "title": "[FIX] Remove doubled \"Canned Responses\" strings", + "userLogin": "matheusbsilva137", + "description": "- Remove doubled canned response setting introduced in #22703 (by setting id change);\r\n - Update \"Canned Responses\" keys to \"Canned_Responses\".", + "contributors": [ + "matheusbsilva137", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "23110", + "title": "[FIX] Can't edit profile information if any field update setting is disabled", + "userLogin": "matheusbsilva137", + "description": "- Check which fields have been updated before throwing errors in `validateUserEditing`.", + "contributors": [ + "matheusbsilva137", + "web-flow", + "casalsgh" + ] + }, + { + "pr": "23037", + "title": "[FIX] \"Read Only\" and \"Allow Reacting\" system messages are missing in rooms", + "userLogin": "matheusbsilva137", + "description": "- Add system message to notify changes on the **\"Read Only\"** setting;\r\n - Add system message to notify changes on the **\"Allow Reacting\"** setting;\r\n - Fix \"Allow Reacting\" setting's description (updated from \"Only authorized users can write new messages\" to \"Only authorized users can react to messages\").\r\n![system-messages](https://user-images.githubusercontent.com/36537004/130883527-9eb47fcd-c8e5-41fb-af34-5d99bd0a6780.PNG)", + "contributors": [ + "matheusbsilva137", + "web-flow", + "ostjen", + "casalsgh" + ] + }, + { + "pr": "23277", + "title": "[BREAK] Remove old migrations up to version 2.4.14", + "userLogin": "sampaiodiego", + "description": "To update to version 4.0.0 you'll need to be running at least version 3.0.0, otherwise you might loose some database migrations which might have unexpected effects.\r\n\r\nThis aims to clean up the code, since upgrades jumping 2 major versions are too risky and hard to maintain, we'll keep only migration from that last major (in this case 3.x).", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23276", + "title": "[FIX] Logging out from other clients", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "pierre-lehnen-rc", + "web-flow" + ] + }, + { + "pr": "23262", + "title": "[FIX] Avoid bots to be marked as unavailable when log off/login", + "userLogin": "KevLehman", + "milestone": "4.0.0", + "contributors": [ + "KevLehman", + "murtaza98", + "web-flow" + ] + }, + { + "pr": "23261", + "title": "[FIX] Stop queue when Omnichannel is disabled or the routing method does not support it", + "userLogin": "KevLehman", + "description": "- Add missing key logs\r\n- Stop queue (and logs) when livechat is disabled or when routing method does not support queue\r\n- Stop ignoring offline bot agents from delegation (previously, if a bot was offline, even with \"Assign new conversations to bot agent\" enabled, bot will be ignored and chat will be left in limbo (since bot was assigned, but offline).", + "milestone": "4.0.0", + "contributors": [ + "KevLehman", + "murtaza98", + "web-flow" + ] + }, + { + "pr": "23017", + "title": "[NEW] Seats Cap", + "userLogin": "tassoevan", + "description": "- Adding New Members\r\n - Awareness of seats usage while adding new members\r\n - Seats Cap about to be reached\r\n - Seats Cap reached\r\n - Request more seats\r\n- Warning Admins\r\n - System telling admins max seats are about to exceed\r\n - System telling admins max seats were exceed\r\n - Metric on Info Page\r\n - Request more seats\r\n- Warning Members\r\n - Invite link\r\n - Block creating new invite links\r\n - Block existing invite links (feedback on register process) \r\n - Register to Workspaces\r\n- Emails\r\n - System telling admins max seats are about to exceed\r\n - System telling admins max seats were exceed", + "contributors": [ + "tassoevan", + "pierre-lehnen-rc", + "web-flow", + "ggazzo", + "gabriellsh", + "g-thome" + ] + }, + { + "pr": "23269", + "title": "Chore: Update pino and pino-pretty", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23255", + "title": "Chore: Make SMTP empty on docker-compose so registration won't hang out of the box", + "userLogin": "geekgonecrazy", + "contributors": [ + "geekgonecrazy", + "web-flow" + ] + }, + { + "pr": "23204", + "title": "[FIX] Wrap canned-responses endpoints with ee license", + "userLogin": "tiagoevanp", + "milestone": "4.0.0", + "contributors": [ + "tiagoevanp", + "web-flow", + "KevLehman" + ] + }, + { + "pr": "23150", + "title": "[FIX] Omnichannel transcript button without user's email", + "userLogin": "tiagoevanp", + "milestone": "4.0.0", + "contributors": [ + "tiagoevanp", + "web-flow", + "KevLehman" + ] + }, + { + "pr": "23263", + "title": "Chore: Re-enable session tests on local after removal of mongo-unit", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman", + "sampaiodiego" + ] + }, + { + "pr": "23107", + "title": "[BREAK] Moved role-sync and advanced SAML settings to EE", + "userLogin": "ostjen", + "contributors": [ + "ostjen", + "web-flow", + "pierre-lehnen-rc" + ] + }, + { + "pr": "23199", + "title": "[IMPROVE] Change occurences of Livechat to Omnichannel in ES translations were applicable", + "userLogin": "KevLehman", + "milestone": "4.0.0", + "contributors": [ + "KevLehman", + "web-flow" + ] + }, + { + "pr": "23230", + "title": "Regression: Log Sections not respecting Log Level setting", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "22907", + "title": "[BREAK] Removed support of MongoDB 3.4; Deprecated MongoDB 3.6 and 4.0", + "userLogin": "ostjen", + "milestone": "4.0.0", + "contributors": [ + "ostjen", + "web-flow", + "rodrigok" + ] + }, + { + "pr": "23254", + "title": "Regression: Fix user registration stuck", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "23219", + "title": "[FIX] Mark agents as unavailable when they logout", + "userLogin": "KevLehman", + "milestone": "4.0.0", + "contributors": [ + "KevLehman", + "renatobecker", + "web-flow", + "murtaza98" + ] + }, + { + "pr": "23244", + "title": "[FIX] Toolbox click not working on Safari(iOS)", + "userLogin": "dougfabris", + "contributors": [ + "ggazzo", + "dougfabris" + ] + }, + { + "pr": "23185", + "title": "[FIX] Omnichannel On hold chats being forwarded to offline agents", + "userLogin": "murtaza98", + "milestone": "4.0.0", + "contributors": [ + "murtaza98", + "web-flow" + ] + }, + { + "pr": "23171", + "title": "[BREAK] LDAP Refactoring", + "userLogin": "pierre-lehnen-rc", + "contributors": [ + "pierre-lehnen-rc", + "web-flow" + ] + }, + { + "pr": "23190", + "title": "[IMPROVE] Canned response admin settings", + "userLogin": "tiagoevanp", + "milestone": "4.0.0", + "contributors": [ + "tiagoevanp", + "web-flow", + "KevLehman" + ] + }, + { + "pr": "23198", + "title": "Chore: Update Livechat widget to 1.9.4", + "userLogin": "MartinSchoeler", + "contributors": [ + "MartinSchoeler", + "KevLehman", + "web-flow" + ] + }, + { + "pr": "23209", + "title": "[FIX] Save department agents ", + "userLogin": "tiagoevanp", + "milestone": "4.0.0", + "contributors": [ + "tiagoevanp", + "web-flow", + "KevLehman", + "casalsgh" + ] + }, + { + "pr": "23117", + "title": "[FIX] Wrong docs link on Omni-Webhook page", + "userLogin": "murtaza98", + "contributors": [ + "murtaza98", + "web-flow", + "KevLehman" + ] + }, + { + "pr": "23221", + "title": "[IMPROVE] Throw error if no appId is provided to useUIKitHandleAction", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "22957", + "title": "[IMPROVE] Do not re-create General room on every server start", + "userLogin": "matheusbsilva137", + "description": "- Check the `Show_Setup_Wizard` Setting's value to control whether the general room should be created. This channel will only be created if the `Show_Setup_Wizard` Setting is 'pending'.", + "contributors": [ + "matheusbsilva137", + "web-flow", + "casalsgh" + ] + }, + { + "pr": "22985", + "title": "[NEW][APPS] Get livechat's room transcript via bridge method", + "userLogin": "thassiov", + "description": "Adds a new method for retrieving a room's transcript via a new method in the Livechat bridge", + "milestone": "4.0.0", + "contributors": [ + "thassiov", + "web-flow", + "d-gubert" + ] + }, + { + "pr": "23212", + "title": "Regression: `renderEmoji` helper referred as a template", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "22542", + "title": "Chore: Convert VerticalBar component to typescript", + "userLogin": "dougfabris", + "contributors": [ + "dougfabris", + "gabriellsh", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "21176", + "title": "[FIX] Add missing custom fields to apps' users converter", + "userLogin": "cuonghuunguyen", + "milestone": "4.0.0", + "contributors": [ + "cuonghuunguyen", + "web-flow", + "d-gubert", + "thassiov", + "casalsgh" + ] + }, + { + "pr": "23194", + "title": "Regression: Fix view logs admin screen", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "23162", + "title": "[BREAK] Remove deprecated endpoints", + "userLogin": "sampaiodiego", + "description": "The following REST endpoints were removed:\r\n\r\n- `/api/v1/emoji-custom`\r\n- `/api/v1/info`\r\n- `/api/v1/permissions`\r\n- `/api/v1/permissions.list`\r\n\r\nThe following Real time API Methods were removed:\r\n\r\n- `getFullUserData`\r\n- `getServerInfo`\r\n- `livechat:saveOfficeHours`", + "contributors": [ + "sampaiodiego", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "23205", + "title": "Regression: View Logs administration page crashing", + "userLogin": "tassoevan", + "description": "Fixes the `stdout.queue` endpoint; makes the components type-safe.", + "contributors": [ + "tassoevan", + "web-flow" + ] + }, + { + "pr": "23178", + "title": "Chore: Move client helpers", + "userLogin": "tassoevan", + "description": "Moves helper modules under `app/` to `client/lib/utils/`.", + "contributors": [ + "tassoevan", + "web-flow" + ] + }, + { + "pr": "23200", + "title": "Chore: Change Ubuntu version to 20.04 on all GitHub Actions", + "userLogin": "KevLehman", + "contributors": [ + "KevLehman", + "sampaiodiego" + ] + }, + { + "pr": "23196", + "title": "Regression: Properly trickle-down state from UsersPage to UsersTable", + "userLogin": "tassoevan", + "description": "Spotted by @gabriellsh.", + "contributors": [ + "tassoevan", + "web-flow" + ] + }, + { + "pr": "23176", + "title": "[IMPROVE] Add missing pt-BR translations, fix typos and unify language", + "userLogin": "gabrieloliverio", + "contributors": [ + "gabrieloliverio", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "23032", + "title": "[FIX] User list not being updated after creation/deletion of user", + "userLogin": "ostjen", + "contributors": [ + "ostjen", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "23187", + "title": "Chore: Upgrade limax", + "userLogin": "tassoevan", + "description": "Upgrades `limax` for faster slugify algorithm.", + "contributors": [ + "tassoevan" + ] + }, + { + "pr": "23076", + "title": "[FIX] \"Parent channel or group\" search in discussions' creation throws \"Unexpected end of JSON input\" error", + "userLogin": "matheusbsilva137", + "description": "- Use `encodeURIComponent()` to encode values received by `_generateQueryFromParams()`.", + "contributors": [ + "matheusbsilva137", + "tassoevan", + "web-flow" + ] + }, + { + "pr": "23108", + "title": "[BREAK] Stop sending audio notifications via stream", + "userLogin": "sampaiodiego", + "description": "Remove audio preferences and make them tied to desktop notification preferences.\r\n\r\nTL;DR: new message sounds will play only if you receive a desktop notification. you'll still be able to chose to not play any sound though", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23184", + "title": "i18n: Language update from LingoHub 🤖 on 2021-09-13Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "21779", + "title": "[FIX] Remove margin from quote inside quote", + "userLogin": "tiagoevanp", + "description": "![image](https://user-images.githubusercontent.com/17487063/116253926-4a89e600-a747-11eb-9172-f2ed1245fa1b.png)", + "contributors": [ + "tiagoevanp", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "23160", + "title": "[BREAK] Remove Google Vision features", + "userLogin": "sampaiodiego", + "description": "Google Vision features like \"block adult images\" or label detection were not being maintained and totally broken. So we decided to remove its feature and maybe in the future release the same features as an app.", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23165", + "title": "Bump @storybook/react from 6.3.6 to 6.3.8", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23163", + "title": "Bump jsrsasign from 10.3.0 to 10.4.0", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23013", + "title": "[BREAK][ENTERPRISE] \"Download CSV\" button doesn't work in the Engagement Dashboard's Active Users section", + "userLogin": "tassoevan", + "description": "- Fix \"Download CSV\" button in the Engagement Dashboard's Active Users section;\r\n- Add column headers to the CSV file downloaded from the Engagement Dashboard's Active Users section;\r\n- Split the data in multiple CSV files.", + "contributors": [ + "matheusbsilva137", + "dougfabris", + "gabriellsh", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "23014", + "title": "[BREAK][ENTERPRISE] CSV file downloaded in the Engagement Dashboard's New Users section contains undefined data", + "userLogin": "tassoevan", + "description": "- Fix CSV file downloaded in the Engagement Dashboard's New Users section;\r\n - Add column headers to the CSV file downloaded from the Engagement Dashboard's New Users section.", + "contributors": [ + "matheusbsilva137", + "gabriellsh", + "web-flow", + "tassoevan" + ] + }, + { + "pr": "23139", + "title": "Bump supertest from 6.1.3 to 6.1.6", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23152", + "title": "Chore: client endpoints typings", + "userLogin": "tassoevan", + "contributors": [ + "tassoevan", + "web-flow", + "ggazzo" + ] + }, + { + "pr": "23157", + "title": "Chore: Update pino and pino-pretty", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23138", + "title": "Bump @rocket.chat/string-helpers from 0.27.0 to 0.29.0 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "22978", + "title": "[FIX] Inaccurate use of 'Mobile notifications' instead of 'Push notifications' in i18n strings", + "userLogin": "matheusbsilva137", + "description": "- Fix inaccurate use of 'Mobile notifications' (which is misleading in German) by 'Push notifications';\r\n - Update `'Notification_Mobile_Default_For'` key to `'Notification_Push_Default_For'` (and text to 'Send Push Notifications For' for English Language);\r\n - Update `'Accounts_Default_User_Preferences_mobileNotifications'` key to `'Accounts_Default_User_Preferences_pushNotifications'`;\r\n - Update `'Mobile_Notifications_Default_Alert'` key to `'Mobile_Push_Notifications_Default_Alert'`;", + "contributors": [ + "matheusbsilva137", + "web-flow", + "ostjen" + ] + }, + { + "pr": "23141", + "title": "Bump xml-crypto from 2.1.2 to 2.1.3", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "22975", + "title": "[IMPROVE] Change log format to JSON", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "23091", + "title": "Regression: Auth banner for EE", + "userLogin": "g-thome", + "description": "Dimisses auth banners assigned to EE admins and prevents new ones from appearing.", + "milestone": "3.18.1", + "contributors": [ + "g-thome", + "casalsgh", + "web-flow" + ] + }, + { + "pr": "23023", + "title": "[IMPROVE][APPS] Return task ids when using the scheduler api", + "userLogin": "thassiov", + "description": "In the methods that create tasks (`scheduleRecurring` and `scheduleOnce`) return the `id` of the document created in the database so the user can cancel each task individually.", + "milestone": "4.0.0", + "contributors": [ + "thassiov", + "d-gubert", + "web-flow" + ] + }, + { + "pr": "23104", + "title": "[FIX] Update bugsnag package", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23128", + "title": "Bump pm2 from 5.1.0 to 5.1.1 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23126", + "title": "Bump @types/ejson from 2.1.2 to 2.1.3 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23109", + "title": "Chore: Remove non-used dependencies", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "23095", + "title": "Bump @types/ws from 7.4.6 to 7.4.7 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23068", + "title": "Bump tar from 6.1.0 to 6.1.11 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23122", + "title": "Bump @types/imap from 0.8.34 to 0.8.35", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23120", + "title": "Bump csv-parse from 4.16.0 to 4.16.3", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23123", + "title": "i18n: Language update from LingoHub 🤖 on 2021-09-06Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "22177", + "title": "Bump juice from 5.2.0 to 8.0.0", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23089", + "title": "[FIX] Change way emails are validated on livechat registerGuest method", + "userLogin": "KevLehman", + "milestone": "3.18.1", + "contributors": [ + "KevLehman", + "web-flow" + ] + }, + { + "pr": "23054", + "title": "[IMPROVE] Use PaginatedSelectFiltered in department edition", + "userLogin": "murtaza98", + "contributors": [ + "murtaza98", + "tiagoevanp", + "web-flow", + "KevLehman" + ] + }, + { + "pr": "23053", + "title": "[FIX] Add check before placing chat on-hold to confirm that contact sent last message", + "userLogin": "murtaza98", + "contributors": [ + "murtaza98", + "web-flow", + "KevLehman" + ] + }, + { + "pr": "22036", + "title": "Bump stylelint-order from 2.2.1 to 4.1.0", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "22527", + "title": "Bump iconv-lite from 0.4.24 to 0.6.3", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "22528", + "title": "Bump image-size from 0.6.3 to 1.0.0", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "22532", + "title": "Bump ip-range-check from 0.0.2 to 0.2.0", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23100", + "title": "[IMPROVE] Change HTTP and Method logs to level INFO", + "userLogin": "sampaiodiego", + "milestone": "3.18.1", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "16050", + "title": "[BREAK] Remove patch info from endpoint /api/info for non-logged in users", + "userLogin": "MarcosSpessatto", + "milestone": "4.0.0", + "contributors": [ + "MarcosSpessatto", + "tassoevan", + "web-flow", + "sampaiodiego" + ] + }, + { + "pr": "23088", + "title": "Bump object-path from 0.11.5 to 0.11.6", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "22922", + "title": "Chore: Environmental variable for marketplace url", + "userLogin": "graywolf336", + "contributors": [ + "graywolf336" + ] + }, + { + "pr": "22600", + "title": "Bump @types/cookie from 0.4.0 to 0.4.1 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "22598", + "title": "Bump @types/express from 4.17.12 to 4.17.13 in /ee/server/services", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "22673", + "title": "Bump actions/stale from 3.0.19 to 4", + "userLogin": "dependabot[bot]", + "contributors": [ + "dependabot[bot]", + "web-flow" + ] + }, + { + "pr": "23061", + "title": "i18n: Language update from LingoHub 🤖 on 2021-08-30Z", + "userLogin": "lingohub[bot]", + "contributors": [ + null + ] + }, + { + "pr": "23086", + "title": "Merge master into develop & Set version to 4.0.0", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "23079", + "title": "Chore: Remove wrong usages of `Meteor.wrapAsync`", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + } + ] + }, + "4.8.0-rc.4": { + "node_version": "14.18.3", + "npm_version": "6.14.15", + "mongo_versions": [ + "3.6", + "4.0", + "4.2", + "4.4", + "5.0" + ], + "pull_requests": [ + { + "pr": "25689", + "title": "Regression: App event listeners broke Slackbridge integration and importers", + "userLogin": "d-gubert", + "description": "Some event listeners triggered by Apps were calling `Meteor.user()` in functions that could run outside of Meteor environment", + "milestone": "4.8.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "25686", + "title": "[FIX] Fix max-width message block", + "userLogin": "ggazzo", + "milestone": "4.8.0", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "25673", + "title": "[FIX] Change form body parameter charset to UTF-8 to fix issue #25456", + "userLogin": "divinespear", + "description": "since [mscdex/busboy](https://github.com/mscdex/busboy) 1.5.0, new option named `defParamCharset` for form body parameter encoding is added with default value `latin1`, so unicode filenames are broken since 4.7.0.\r\n\r\n![Screenshot from 2022-05-28 16-26-06](https://user-images.githubusercontent.com/126630/170815447-1f3bd579-243a-42d3-86f6-814aeaa30ce9.png)", + "milestone": "4.8.0", + "contributors": [ + "divinespear" + ] + }, + { + "pr": "25687", + "title": "Regression: Fix sort field files.list", + "userLogin": "ggazzo", + "milestone": "4.8.0", + "contributors": [ + "ggazzo", + "albuquerquefabio", + "web-flow" + ] + }, + { + "pr": "25684", + "title": "[IMPROVE] add warnings for federation setup", + "userLogin": "carlosrodrigues94", + "contributors": [ + "carlosrodrigues94" + ] + }, + { + "pr": "25683", + "title": "[FIX] Prevent federation crash on invite users as a non-owner user", + "userLogin": "MarcosSpessatto", + "contributors": [ + "MarcosSpessatto" + ] + }, + { + "pr": "25653", + "title": "Regression: Broken components on Federation and Engagement dashboards", + "userLogin": "tassoevan", + "description": "For reasons I've no clue, any client import path matching `**/data/**` will not be included in the final bundle, failing silently on transpiling/bundling.", + "milestone": "4.8.0", + "contributors": [ + "tassoevan", + "gabriellsh" + ] + } + ] + }, + "4.8.0-rc.5": { + "node_version": "14.18.3", + "npm_version": "6.14.15", + "mongo_versions": [ + "3.6", + "4.0", + "4.2", + "4.4", + "5.0" + ], + "pull_requests": [ + { + "pr": "25700", + "title": "Chore: Update Apps-Engine and Fuselage", + "userLogin": "d-gubert", + "milestone": "4.8.0", + "contributors": [ + "d-gubert" + ] + } + ] + }, + "4.8.0": { + "node_version": "14.18.3", + "npm_version": "6.14.15", + "mongo_versions": [ + "3.6", + "4.0", + "4.2", + "4.4", + "5.0" + ], + "pull_requests": [ + { + "pr": "25580", + "title": "Release 4.7.2", + "userLogin": "d-gubert", + "contributors": [ + "tiagoevanp", + "d-gubert", + "MartinSchoeler", + "ggazzo", + "cauefcr", + "geekgonecrazy" + ] + }, + { + "pr": "25544", + "title": "[FIX] Initial User not added to default channel", + "userLogin": "geekgonecrazy", + "description": "If injecting initial user. The user wasn’t added to the default General channel", + "milestone": "4.7.2", + "contributors": [ + "geekgonecrazy", + "web-flow" + ] + }, + { + "pr": "25520", + "title": "[FIX] User abandonment setting was not working doe to failing event hook", + "userLogin": "cauefcr", + "description": "A setting watcher and the query for grabbing abandoned chats were broken, now they're not.", + "milestone": "4.7.2", + "contributors": [ + "cauefcr", + "tiagoevanp" + ] + }, + { + "pr": "25495", + "title": "[FIX] Dynamic load matrix is enabled and handle failure ", + "userLogin": "ggazzo", + "milestone": "4.7.2", + "contributors": [ + "ggazzo", + "geekgonecrazy" + ] + }, + { + "pr": "25409", + "title": "[FIX] One of the triggers was not working correctly", + "userLogin": "MartinSchoeler", + "milestone": "4.7.2", + "contributors": [ + "MartinSchoeler", + "tiagoevanp" + ] + }, + { + "pr": "25407", + "title": "[FIX] UI/UX issues on Live Chat widget", + "userLogin": "MartinSchoeler", + "milestone": "4.7.2", + "contributors": [ + "MartinSchoeler", + "dougfabris" + ] + }, + { + "pr": "25312", + "title": "Chore: Add Livechat repo into Monorepo packages", + "userLogin": "tiagoevanp", + "milestone": "4.7.2", + "contributors": [ + "tiagoevanp", + "ggazzo", + "web-flow", + "MartinSchoeler" + ] + }, + { + "pr": "25510", + "title": "Release 4.7.1", + "userLogin": "d-gubert", + "contributors": [ + "felipe-menelau", + "d-gubert", + "pierre-lehnen-rc" + ] + }, + { + "pr": "25471", + "title": "[FIX] Spotlight results showing usernames instead of real names", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.7.1", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "25434", + "title": "[FIX] LDAP sync removing users from channels when multiple groups are mapped to it", + "userLogin": "pierre-lehnen-rc", + "milestone": "4.7.1", + "contributors": [ + "pierre-lehnen-rc" + ] + }, + { + "pr": "25441", + "title": "[NEW] Use setting to determine if initial general channel is needed", + "userLogin": "felipe-menelau", + "description": "- Adds flag responsible for overwriting #general channel creation", + "milestone": "4.7.1", + "contributors": [ + "felipe-menelau", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "25390", + "title": "Release 4.7.0", + "userLogin": "d-gubert", + "contributors": [ + "sampaiodiego", + "web-flow", + "lingohub[bot]", + "dependabot[bot]", + "ggazzo", + "dougfabris", + "gabriellsh", + "tmontini", + "debdutdeb", + "Himanshu664", + "yash-rajpal", + "MartinSchoeler" + ] + } + ] } } -} \ No newline at end of file +} diff --git a/.yarnrc.yml b/.yarnrc.yml index d4854ebe92126..8abafc3d6310a 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -2,12 +2,14 @@ nodeLinker: node-modules plugins: - path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs - spec: "@yarnpkg/plugin-workspace-tools" + spec: '@yarnpkg/plugin-workspace-tools' - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs - spec: "@yarnpkg/plugin-interactive-tools" + spec: '@yarnpkg/plugin-interactive-tools' - path: .yarn/plugins/@yarnpkg/plugin-engines.cjs - spec: "https://raw.githubusercontent.com/devoto13/yarn-plugin-engines/main/bundles/%40yarnpkg/plugin-engines.js" + spec: 'https://raw.githubusercontent.com/devoto13/yarn-plugin-engines/main/bundles/%40yarnpkg/plugin-engines.js' - path: .yarn/plugins/@yarnpkg/plugin-typescript.cjs - spec: "@yarnpkg/plugin-typescript" + spec: '@yarnpkg/plugin-typescript' yarnPath: .yarn/releases/yarn-3.2.0.cjs + +checksumBehavior: 'update' diff --git a/HISTORY.md b/HISTORY.md index 34be25edb2615..a0e244868ff35 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,12 +1,1050 @@ +# 4.8.0 +`2022-05-31 · 16 🎉 · 13 🚀 · 55 🐛 · 151 🔍 · 52 👩‍💻👨‍💻` + +### Engine versions +- Node: `14.18.3` +- NPM: `6.14.15` +- MongoDB: `3.6, 4.0, 4.2, 4.4, 5.0` + +### 🎉 New features + + +- Ability for RC server to check the business hour for a specific department ([#25436](https://github.com/RocketChat/Rocket.Chat/pull/25436)) + +- Add expire index to integration history ([#25087](https://github.com/RocketChat/Rocket.Chat/pull/25087)) + +- Add new app events for pin, react and follow message ([#25337](https://github.com/RocketChat/Rocket.Chat/pull/25337)) + +- Add new events after user login, logout and change his status ([#25234](https://github.com/RocketChat/Rocket.Chat/pull/25234)) + +- Add option to show mentions badge when show counter is disabled ([#25329](https://github.com/RocketChat/Rocket.Chat/pull/25329)) + +- Add user events for apps ([#25165](https://github.com/RocketChat/Rocket.Chat/pull/25165)) + +- Adding app button on user dropdown ([#25326](https://github.com/RocketChat/Rocket.Chat/pull/25326)) + +- Alpha Matrix Federation ([#23688](https://github.com/RocketChat/Rocket.Chat/pull/23688)) + + Experimental support for Matrix Federation with a Bridge + + https://user-images.githubusercontent.com/51996/164530391-e8b17ecd-a4d0-4ef8-a8b7-81230c1773d3.mp4 + +- Expand Apps Engine's environment variable allowed list ([#23870](https://github.com/RocketChat/Rocket.Chat/pull/23870) by [@cuonghuunguyen](https://github.com/cuonghuunguyen)) + +- Federation (Alpha Stabilization) ([#25457](https://github.com/RocketChat/Rocket.Chat/pull/25457)) + +- Get user's preferred language via apps ([#25514](https://github.com/RocketChat/Rocket.Chat/pull/25514)) + +- Marketplace new app details page ([#24711](https://github.com/RocketChat/Rocket.Chat/pull/24711)) + + Change the app details page layout for the new marketplace UI. General Task: [MKP12 - New UI - App Detail Page](https://app.clickup.com/t/1na769h) + + ## [MKP12 - Tab Navigation](https://app.clickup.com/t/2452f5u) + New tab navigation layout for the app details page. Now the app details page is divided into three sections, details, logs, and settings, that can each be accessed through a Tabs fuselage component. + + Demo gif: + ![tab_navigation_demo_gif](https://user-images.githubusercontent.com/43561537/157276436-3dab34c5-20da-4f5d-99d0-54c1c718ac1f.gif) + + ## [MKP12 - Header](https://app.clickup.com/t/25rhm0x) + Implemented a new header for the marketplaces app details page. + -Changed the size of the app name; + -Implemented the app description field on the header; + -Changed the "metadata" section of the header(The part with the version and author information) now it also shows the last time the app was updated; + -Created a chip that will show when an app is part of one or more bundles and inform which are the bundles; + -Implemented a tooltip for the bundle chips; + -Created a new button + data badge component to substitute the current App Status; + -Changed the title of the "purchase button". Now it shows different text based on the "purchase type" of the app; + -Created a new Pricing & Status display which shows the price when the app is not bought/installed and shows the app status(Enabled/Disabled) when it is bought/installed; + -Changed the way the tabs are rendered, now if the app is not installed(and consequently doesn't have logs and settings tab) it will not render these tabs; + + Demo gif: + ![new-header-gif](https://user-images.githubusercontent.com/43561537/159064599-fd64dfe2-86a3-47da-81ba-1e83f1b87432.gif) + + ## [MKP12 - Configuration Tab](https://app.clickup.com/t/2452gh4) + Delivered together with the tab-navigation task. Changed the app settings from the details of the app to the new settings tab. + Demo image: + ![New configuration tab](https://user-images.githubusercontent.com/43561537/160211324-95db0566-85bf-4dde-a814-3c6f23dcee4d.png) + + ## [MKP12 - Log Tab](https://app.clickup.com/t/2452gg1) + Changed the place of the app logs from the page to the new logs tab. Also changed some styles of the logs accordions to fit better with the new container. + + Before: + ![Before](https://user-images.githubusercontent.com/43561537/160210302-148ce584-604f-40ff-8209-141667016163.png) + + After + ![After](https://user-images.githubusercontent.com/43561537/160210984-d4060c5a-f912-4ef9-87e3-fa459080e2d4.png) + + ## [MKP12 - Page Header](https://app.clickup.com/t/29b0b12) + Changed the design for the page header of the app details page from a title on the left with a save and back button on the right to a back arrow icon on the left side of the title with the save button still on the right. Also changed the title of the page from App details to Back. + Edit: After some design reconsideration, the page title was changed to App Info. + Demo gif: + ![new_page_header_app_details](https://user-images.githubusercontent.com/43561537/160937741-f5514f70-f43b-4400-8b2f-a5a26f95de9d.gif) + + ## [MKP12 - Detail Tab](https://app.clickup.com/t/2452gf7) + Implemented markdown on the description section of the app details page, now the description will show the detailedDescription.rendered (as rendered JSX) information in case it exists and show the description (a.k.a. short description) information in case it doesn't. Unfortunately, as of right now no app has a visual example of a markdown description and because of that, I will not be able to provide a demo image/gif for this PR. + + ## [MKP12 - Slider Component](https://app.clickup.com/t/2452h26) + Created an image carousel component on the app details page. This component receives images from the apps/appId/screenshots endpoint and shows them on the content section of the app details of any apps that have screenshots registered, if the app has no screenshots it simply shows nothing where the carousel should be. This component is complete with keyboard arrow navigation on the "open" carousel, hover highlight on the carousel preview and close on esc press. + Demo gif: + ![new_carousel_component](https://user-images.githubusercontent.com/43561537/167415212-9d8359c7-4132-4afa-a698-8be4ab1e1393.gif) + +- Message Template React Component ([#23971](https://github.com/RocketChat/Rocket.Chat/pull/23971)) + + Complete rewrite of the messages component in react. Visual changes should be minimal as well as user impact, with no break changes (unless you've customized the blaze template). + + + + ![Screen Shot 2022-04-05 at 11 14 18](https://user-images.githubusercontent.com/27704687/161774027-38dd9c7b-eeeb-45e2-b9d8-ea2a9be8486d.png) + In case you encounter any problems, or want to compare, temporarily it is possible to use the old version + + image + +- New button for network outage ([#25499](https://github.com/RocketChat/Rocket.Chat/pull/25499)) + + When network outage happens it should be conveyed to the user with special icon. This icon should not be clickable. + Network outage handling is handled in https://app.clickup.com/t/245c0d8 task. + +- New stats rewrite ([#25078](https://github.com/RocketChat/Rocket.Chat/pull/25078) by [@ostjen](https://github.com/ostjen)) + + Add the following new statistics (**metrics**): + + + - Total users with TOTP enabled; + + - Total users with 2FA enabled; + + - Total pinned messages; + + - Total starred messages; + + - Total email messages; + + - Total rooms with at least one starred message; + + - Total rooms with at least one pinned message; + + - Total encrypted rooms; + + - Total link invitations; + + - Total email invitations; + + - Logo change; + + - Number of custom script lines; + + - Number of custom CSS lines; + + - Number of rooms inside teams; + + - Number of default (auto-join) rooms inside teams; + + - Number of users created through link invitation; + + - Number of users created through manual entry; + + - Number of imported users (by import type); + +- Star message, report and delete message events ([#25383](https://github.com/RocketChat/Rocket.Chat/pull/25383)) + +### 🚀 Improvements + + +- **ENTERPRISE:** Allow mapping LDAP groups to multiple RC roles ([#23849](https://github.com/RocketChat/Rocket.Chat/pull/23849)) + + - Add support to mapping LDAP groups to multiple roles (by specifying arrays in the "User Data Group Map" enterprise setting. + +- Add OTR Room States ([#24565](https://github.com/RocketChat/Rocket.Chat/pull/24565)) + + Earlier OTR room uses only 2 states, we need more states to support future features. + This adds more states for the OTR contextualBar. + + + - Expired + Screen Shot 2022-04-20 at 13 55 52 + + + - Declined + Screen Shot 2022-04-20 at 13 49 28 + + + - Error + Screen Shot 2022-04-20 at 13 55 26 + +- Add tooltip to sidebar room menu ([#24405](https://github.com/RocketChat/Rocket.Chat/pull/24405) by [@Himanshu664](https://github.com/Himanshu664)) + +- add warnings for federation setup ([#25684](https://github.com/RocketChat/Rocket.Chat/pull/25684)) + +- Added MaxNickNameLength and MaxBioLength constants ([#25231](https://github.com/RocketChat/Rocket.Chat/pull/25231) by [@aakash-gitdev](https://github.com/aakash-gitdev)) + +- Added tooltip options for message menu ([#24431](https://github.com/RocketChat/Rocket.Chat/pull/24431) by [@Himanshu664](https://github.com/Himanshu664)) + +- Fix multiple bugs with Matrix bridge ([#25318](https://github.com/RocketChat/Rocket.Chat/pull/25318)) + +- Improve active/hover colors in account sidebar ([#25024](https://github.com/RocketChat/Rocket.Chat/pull/25024) by [@Himanshu664](https://github.com/Himanshu664)) + +- New admin settings Page ([#25439](https://github.com/RocketChat/Rocket.Chat/pull/25439)) + + ![Screen Shot 2022-05-09 at 11 31 58](https://user-images.githubusercontent.com/27704687/167432811-f4970f23-5dae-48a0-a427-92269d08a859.png) + +- Pass allowDiskUse to channel aggregations on engagement dashboard ([#22374](https://github.com/RocketChat/Rocket.Chat/pull/22374)) + +- Performance for some Omnichannel features ([#25217](https://github.com/RocketChat/Rocket.Chat/pull/25217)) + +- Rename upgrade tab routes ([#25097](https://github.com/RocketChat/Rocket.Chat/pull/25097)) + + Change 'upgrade tab' routes names from camelCase ('goFullyFeatured') to kebab-case ('go-fully-featured') due to URL naming consistency. Changed types, main function and test. + +- Unify voip streams into single stream ([#25108](https://github.com/RocketChat/Rocket.Chat/pull/25108)) + +### 🐛 Bug fixes + + +- Add katex render to new message react template ([#25239](https://github.com/RocketChat/Rocket.Chat/pull/25239)) + +- Add open user card to user avatar ([#25445](https://github.com/RocketChat/Rocket.Chat/pull/25445)) + +- Add reaction not working in legacy messages ([#25222](https://github.com/RocketChat/Rocket.Chat/pull/25222)) + +- Added invalid password error message ([#24714](https://github.com/RocketChat/Rocket.Chat/pull/24714) by [@Himanshu664](https://github.com/Himanshu664)) + +- Adjust email label in Setup Wizard i18n files ([#25260](https://github.com/RocketChat/Rocket.Chat/pull/25260)) + + - remove 'Company' label on onboarding email keys in certain languages + +- AgentOverview analytics wrong departmentId parameter ([#25073](https://github.com/RocketChat/Rocket.Chat/pull/25073) by [@paulobernardoaf](https://github.com/paulobernardoaf)) + + When filtering the analytics charts by department, data would not appear because the object: + ```js + { + value: "department-id", + label: "department-name" + } + ``` + was being used in the `departmentId` parameter. + + + - Before: + ![image](https://user-images.githubusercontent.com/30026625/161832057-d96ffd21-a7dd-421e-bfaa-3b9f4a9127b2.png) + + + - After: + ![image](https://user-images.githubusercontent.com/30026625/161831092-9ee77b51-b083-4f45-9c48-ab2e0511c4d6.png) + +- Change form body parameter charset to UTF-8 to fix issue #25456 ([#25673](https://github.com/RocketChat/Rocket.Chat/pull/25673) by [@divinespear](https://github.com/divinespear)) + + since [mscdex/busboy](https://github.com/mscdex/busboy) 1.5.0, new option named `defParamCharset` for form body parameter encoding is added with default value `latin1`, so unicode filenames are broken since 4.7.0. + + ![Screenshot from 2022-05-28 16-26-06](https://user-images.githubusercontent.com/126630/170815447-1f3bd579-243a-42d3-86f6-814aeaa30ce9.png) + +- Change NPS Vote identifier + nps index to unique ([#25423](https://github.com/RocketChat/Rocket.Chat/pull/25423)) + +- Click to join button Jitsi Call ([#25569](https://github.com/RocketChat/Rocket.Chat/pull/25569)) + + Added `ToolboxProvider` to `MessageListProvider` and fixed actionLink.js open function exec + +- Client disconnection on network loss ([#25170](https://github.com/RocketChat/Rocket.Chat/pull/25170)) + + Agent gets disconnected (or Unregistered) from asterisk in multiple ways. The goal is that agent should remain online + unless agent explicitly logs off. + Agent can stop receiving calls in multiple ways due to network loss. Network loss can happen in following ways. + + 1. User tries to switch the network. User experiences a glitch of disconnectivity. This can be simulated by turning the network off + in the network tab of chrome's dev tool. This can disconnect the UA if the disconnection happens just before the registration refresh. + + 2. Second reason is when computer goes in sleep mode. + + 3. Third reason is that when asterisk is crashed/in maintenance mode/explicitly stopped. + + Solution: + The idea is to detect the network disconnection and start the start the attempts to reconnect. + The detection of the disconnection does not happen in case#1. The SIPUA's UserAgent transport does not + call onDisconnected when network loss of such kind happens. To tackle this problem, window's online and offline event handlers are + used. + + The number of retries is configurable but ideally it is to be kept at -1. Whenever disconnection happens, it should keep on trying to + reconnect with increasing backoff time. This behaviour is useful when the asterisk is stopped. + + When the server is disconnected, it should be indicated on the phone button. + +- Close room when dismiss wrap up call modal ([#25056](https://github.com/RocketChat/Rocket.Chat/pull/25056)) + +- Custom sound error toast messages ([#24515](https://github.com/RocketChat/Rocket.Chat/pull/24515) by [@Himanshu664](https://github.com/Himanshu664)) + +- Deactivating user breaks if user is the only room owner ([#24933](https://github.com/RocketChat/Rocket.Chat/pull/24933) by [@sidmohanty11](https://github.com/sidmohanty11)) + + ## Before + + https://user-images.githubusercontent.com/73601258/160000871-cfc2f2a5-2a59-4d27-8049-7754d003dd48.mp4 + + + + ## After + https://user-images.githubusercontent.com/73601258/159998287-681ab475-ff33-4282-82ff-db751c59a392.mp4 + +- Desktop notification on multi-instance environments ([#25220](https://github.com/RocketChat/Rocket.Chat/pull/25220)) + +- End call button disappearing when on-hold ([#24936](https://github.com/RocketChat/Rocket.Chat/pull/24936)) + +- Failure to update Integration History index ([#25473](https://github.com/RocketChat/Rocket.Chat/pull/25473)) + +- Fix max-width message block ([#25686](https://github.com/RocketChat/Rocket.Chat/pull/25686)) + +- Fixing app contextual bar functionality ([#25615](https://github.com/RocketChat/Rocket.Chat/pull/25615)) + +- Fixing Network connectivity issues with SIP client. ([#25391](https://github.com/RocketChat/Rocket.Chat/pull/25391)) + + The previous PR https://github.com/RocketChat/Rocket.Chat/pull/25170 did not handle the issues completely. + This PR is expected to handle + + 1. Clearing call related UI when the network is disconnected or switched. + + 2. Do clean connectivity. There were few issues discovered in earlier implementation. e.g endpoint would randomly + get disconnected after a while. This was due to the fact that the earlier socket disconnection caused the + removal of contact on asterisk. This should be fixed in this PR. + + 3. This PR contains a lot of logs. This will be removed before the final merge. + +- FormData uploads not working ([#25069](https://github.com/RocketChat/Rocket.Chat/pull/25069)) + +- Full error message is visible ([#24856](https://github.com/RocketChat/Rocket.Chat/pull/24856) by [@Himanshu664](https://github.com/Himanshu664)) + +- Incorrect websocket url in livechat widget ([#25261](https://github.com/RocketChat/Rocket.Chat/pull/25261)) + +- Integrations avatar attribute misuse ([#25283](https://github.com/RocketChat/Rocket.Chat/pull/25283)) + +- Invitation links don't redirect to the registration form ([#25082](https://github.com/RocketChat/Rocket.Chat/pull/25082)) + +- Message menu action not working on legacy messages. ([#25148](https://github.com/RocketChat/Rocket.Chat/pull/25148)) + +- Message menu dropdown not working on Mobile Web ([#25616](https://github.com/RocketChat/Rocket.Chat/pull/25616)) + +- Message preview not available for queued chats ([#25092](https://github.com/RocketChat/Rocket.Chat/pull/25092)) + +- NPS never finishing sending results ([#25067](https://github.com/RocketChat/Rocket.Chat/pull/25067)) + +- Ordered and unordered list styles, Line breaks. ([#25494](https://github.com/RocketChat/Rocket.Chat/pull/25494)) + + Also removed the message.md cache from server, since changes in the parser might break messages in the future (and will in this specific case). + +- Pinned Message display cutting off information ([#25535](https://github.com/RocketChat/Rocket.Chat/pull/25535)) + +- Prevent federation crash on invite users as a non-owner user ([#25683](https://github.com/RocketChat/Rocket.Chat/pull/25683)) + +- Prevent sequential messages edited icon to hide on hover ([#24984](https://github.com/RocketChat/Rocket.Chat/pull/24984)) + + ### before + Screen Shot 2022-03-29 at 13 35 56 + + ### after + Screen Shot 2022-03-29 at 11 48 05 + +- Proxy settings being ignored ([#25022](https://github.com/RocketChat/Rocket.Chat/pull/25022)) + + Modify Meteor's `HTTP.call` to add back proxy support + +- Quote message spacing ([#25613](https://github.com/RocketChat/Rocket.Chat/pull/25613)) + +- Read receipts show with color gray when not read yet ([#25244](https://github.com/RocketChat/Rocket.Chat/pull/25244)) + +- Read receipts showing before message read ([#25216](https://github.com/RocketChat/Rocket.Chat/pull/25216)) + +- Remove 'total' text in admin info page ([#25638](https://github.com/RocketChat/Rocket.Chat/pull/25638)) + + - Remove initial 'total' text from rooms and messages groups in the admin info page + + - Add 'total' before 'rooms' and 'messages' title on the same section. To use the new 'Total Rooms', was created a new key in the en.i18n.json file. + +- Removing user also removes them from Omni collections ([#25444](https://github.com/RocketChat/Rocket.Chat/pull/25444)) + +- Replace encrypted text to Encrypted Message Placeholder ([#24166](https://github.com/RocketChat/Rocket.Chat/pull/24166)) + + ### before + ![image](https://user-images.githubusercontent.com/27704687/150807900-154a9cdb-ee13-4333-8628-f287ab914b40.png) + + ### after + Screenshot 2022-01-13 at 8 57 47 PM + +- Reply button behavior on broadcast channel ([#25175](https://github.com/RocketChat/Rocket.Chat/pull/25175)) + + Hide reply button for the user that sent the message + +- room creation fails if app framework is disabled ([#25200](https://github.com/RocketChat/Rocket.Chat/pull/25200)) + +- Rooms' names turn lower case on CSV import ([#24612](https://github.com/RocketChat/Rocket.Chat/pull/24612)) + + * Change 'Settings' import to not get cached configs + + * Remove update `UI_Allow_room_names_with_special_chars` value + +- Sanitize customUserStatus and fix infinite loop ([#25449](https://github.com/RocketChat/Rocket.Chat/pull/25449)) + + ### Additional improves: + + - usage of RHF to avoid unnecessary Add and Edit components separately and form validation + + - usage of `GenericTableV2` and some hooks to avoid unnecessary code + + - fix `IUserStatus` type + + - improves in UI design + + - improves **empty** and **loading** state + + - improves files structure + + [LOOP ERROR ATTACHMENT] + ![Screen Shot 2022-05-09 at 19 42 53](https://user-images.githubusercontent.com/27704687/167510439-1980461c-a885-46d2-9a49-79da432c7521.png) + +- Settings listeners not receiving overwritten values from env vars ([#25448](https://github.com/RocketChat/Rocket.Chat/pull/25448)) + +- Showing Blank Message Inside Report ([#25007](https://github.com/RocketChat/Rocket.Chat/pull/25007) by [@nishant23122000](https://github.com/nishant23122000)) + + https://user-images.githubusercontent.com/53515714/161038085-4a86c7ae-6751-4996-9767-b1c9e0331a6c.mp4 + +- Toolbox hiding under contextual bar ([#25237](https://github.com/RocketChat/Rocket.Chat/pull/25237)) + +- Unable to see channel member list by authorized channel roles ([#25412](https://github.com/RocketChat/Rocket.Chat/pull/25412)) + +- Upgrade tab loader in incorrect position ([#25398](https://github.com/RocketChat/Rocket.Chat/pull/25398)) + + - Add invisible prop to iframe when loading state is active. + +- Upgrade Tab showing for a split second ([#25050](https://github.com/RocketChat/Rocket.Chat/pull/25050)) + +- Use correct room property for call ended at ([#24932](https://github.com/RocketChat/Rocket.Chat/pull/24932)) + +- useCurrentChatTags is not a function ([#25604](https://github.com/RocketChat/Rocket.Chat/pull/25604)) + +- UserAutoComplete not rendering UserAvatar correctly ([#25055](https://github.com/RocketChat/Rocket.Chat/pull/25055)) + + ### before + ![Screen Shot 2022-04-04 at 16 50 21](https://user-images.githubusercontent.com/27704687/161620921-800bf66a-806d-4f83-b2e1-073c34215001.png) + + ### after + ![Screen Shot 2022-04-04 at 16 49 00](https://user-images.githubusercontent.com/27704687/161620720-3e27774d-c241-46ca-b764-932a9295d709.png) + +- UserCard sanitization ([#25089](https://github.com/RocketChat/Rocket.Chat/pull/25089)) + + - Rewrites the component to TS + + - Fixes some visual issues + + ### before + ![Screen Shot 2022-04-07 at 00 23 11](https://user-images.githubusercontent.com/27704687/162113925-5c9484d1-23e9-4623-8b86-3fbc71b461a1.png) + + ### after + ![Screen Shot 2022-04-07 at 00 07 13](https://user-images.githubusercontent.com/27704687/162112353-afd6aac6-b27c-4470-a642-631b8080d59e.png) + +- Video and Audio not skipping forward ([#19866](https://github.com/RocketChat/Rocket.Chat/pull/19866)) + +- VoIP disabled/enabled sequence puts voip agent in error state ([#25230](https://github.com/RocketChat/Rocket.Chat/pull/25230)) + + Initially it was thought that the issue occurs because of the race condition while changing the client settings vs those settings reflected on server side. So a natural solution to solve this is to wait for setting change event 'private-settings-changed'. Then if 'VoIP_Enabled' is updated and it is true, set voipEnabled to true in useVoipClient.ts (on client side) + + It was realised that the race does not happen because of the database or server noticing the changes late. But because of the time taken to establish the AMI connection with Asterisk. + + Solution: + + + 1. Change apps/meteor/app/voip/server/startup.ts. When VoIP_Enabled is changed, await for Voip.init() to complete and then broadcast connector.statuschanged with changed value. + + 2. From apps/meteor/server/modules/listeners/listeners.module.ts use notifyLoggedInThisInstance to notify all logged in users on current instance. + + 3. in apps/meteor/client/providers/CallProvider/hooks/useVoipClient.ts add the event handler that receives this event. Change voipEnabled from constant to state. Change this state based on the 'value' that is received by the handler. + +
+🔍 Minor changes + + +- Bump body-parser from 1.19.2 to 1.20.0 in /ee/server/services ([#25042](https://github.com/RocketChat/Rocket.Chat/pull/25042) by [@dependabot[bot]](https://github.com/dependabot[bot])) + +- Bump ejson from 2.2.1 to 2.2.2 ([#25057](https://github.com/RocketChat/Rocket.Chat/pull/25057) by [@dependabot[bot]](https://github.com/dependabot[bot])) + +- Bump eslint-plugin-anti-trojan-source from 1.0.6 to 1.1.0 ([#25076](https://github.com/RocketChat/Rocket.Chat/pull/25076) by [@dependabot[bot]](https://github.com/dependabot[bot])) + +- Bump minimist from 1.2.5 to 1.2.6 in /ee/server/services ([#24991](https://github.com/RocketChat/Rocket.Chat/pull/24991) by [@dependabot[bot]](https://github.com/dependabot[bot])) + +- Bump pino and pino-pretty ([#25052](https://github.com/RocketChat/Rocket.Chat/pull/25052)) + +- Bump template-file from 6.0.0 to 6.0.1 ([#25002](https://github.com/RocketChat/Rocket.Chat/pull/25002) by [@dependabot[bot]](https://github.com/dependabot[bot])) + +- Chore: Add /v1/video-conference endpoint types ([#25278](https://github.com/RocketChat/Rocket.Chat/pull/25278)) + +- Chore: Add channel endpoints (rest-typings) ([#25279](https://github.com/RocketChat/Rocket.Chat/pull/25279)) + +- Chore: Add client folder to CODEOWNERS ([#25397](https://github.com/RocketChat/Rocket.Chat/pull/25397)) + +- Chore: Add error boundary to message component ([#25223](https://github.com/RocketChat/Rocket.Chat/pull/25223)) + + Not crash the whole application if something goes wrong in the MessageList component. + + ![image](https://user-images.githubusercontent.com/40830821/162269915-931c5c3c-c979-4234-b74c-371f67467ce0.png) + +- Chore: Add options to debug stdout and rate limiter ([#25336](https://github.com/RocketChat/Rocket.Chat/pull/25336)) + +- Chore: Add root package.json to houston files ([#25286](https://github.com/RocketChat/Rocket.Chat/pull/25286)) + + See title + +- Chore: Add typings for /v1/webdav.getMyAccounts ([#25276](https://github.com/RocketChat/Rocket.Chat/pull/25276)) + +- Chore: Add yarn plugin to check node and yarn version ([#25224](https://github.com/RocketChat/Rocket.Chat/pull/25224)) + +- Chore: bump fuselage ([#25605](https://github.com/RocketChat/Rocket.Chat/pull/25605)) + +- Chore: Bump fuselage ([#25371](https://github.com/RocketChat/Rocket.Chat/pull/25371)) + +- Chore: Bump Fuselage packages ([#25259](https://github.com/RocketChat/Rocket.Chat/pull/25259)) + +- Chore: Cancel running jobs if PR is updated ([#24708](https://github.com/RocketChat/Rocket.Chat/pull/24708)) + +- Chore: Chore add validation option to rest endpoints ([#25443](https://github.com/RocketChat/Rocket.Chat/pull/25443)) + +- Chore: Code Improvements for #25391 ([#25606](https://github.com/RocketChat/Rocket.Chat/pull/25606)) + +- Chore: Convert `UserStatusMenu` to TS ([#25265](https://github.com/RocketChat/Rocket.Chat/pull/25265)) + +- Chore: Convert additionalForms ([#25586](https://github.com/RocketChat/Rocket.Chat/pull/25586)) + +- Chore: Convert Admin -> Rooms to TS ([#25348](https://github.com/RocketChat/Rocket.Chat/pull/25348)) + +- Chore: Convert admin custom sound to tsx ([#25128](https://github.com/RocketChat/Rocket.Chat/pull/25128)) + +- Chore: Convert Admin/OAuthApps to TS ([#25277](https://github.com/RocketChat/Rocket.Chat/pull/25277)) + + - Converts Admin/OAuthApps to TS. + + - migrated forms to react-hook-form + +- Chore: Convert AdminSideBar to ts ([#25372](https://github.com/RocketChat/Rocket.Chat/pull/25372)) + +- Chore: Convert apps/meteor/client/components/UserAutoComplete ([#25554](https://github.com/RocketChat/Rocket.Chat/pull/25554)) + +- Chore: Convert apps/meteor/client/views/admin/settings ([#25565](https://github.com/RocketChat/Rocket.Chat/pull/25565)) + +- Chore: Convert apps/meteor/client/views/admin/settings/inputs folder ([#25427](https://github.com/RocketChat/Rocket.Chat/pull/25427)) + +- Chore: Convert AutoTranslate ([#25591](https://github.com/RocketChat/Rocket.Chat/pull/25591)) + +- Chore: Convert client/views/admin/settings/groups folder to ts ([#25345](https://github.com/RocketChat/Rocket.Chat/pull/25345)) + +- Chore: Convert Create Channel ([#25589](https://github.com/RocketChat/Rocket.Chat/pull/25589)) + +- Chore: Convert customSounds folder to ts ([#25274](https://github.com/RocketChat/Rocket.Chat/pull/25274)) + +- Chore: Convert customUserStatus folder to ts ([#25288](https://github.com/RocketChat/Rocket.Chat/pull/25288)) + +- Chore: Convert email inbox feature to TypeScript ([#25298](https://github.com/RocketChat/Rocket.Chat/pull/25298)) + +- Chore: Convert federationDashboard folder to ts ([#25343](https://github.com/RocketChat/Rocket.Chat/pull/25343)) + +- Chore: Convert getStatistics ([#25342](https://github.com/RocketChat/Rocket.Chat/pull/25342)) + +- Chore: convert info to typescript ([#25420](https://github.com/RocketChat/Rocket.Chat/pull/25420)) + +- Chore: Convert LivechatAgentActivity to raw model and TS ([#25123](https://github.com/RocketChat/Rocket.Chat/pull/25123)) + +- Chore: Convert Mailer to TS ([#25121](https://github.com/RocketChat/Rocket.Chat/pull/25121)) + +- Chore: convert marketplace price display component to use typescript ([#25504](https://github.com/RocketChat/Rocket.Chat/pull/25504)) + + **Marketplace apps listing page** + ![Screen Shot 2022-05-13 at 12 57 43](https://user-images.githubusercontent.com/4161171/168322189-67990fdf-a447-46dc-8f88-08b16c2a5416.png) + + **Apps detail page** + ![Screen Shot 2022-05-13 at 12 58 56](https://user-images.githubusercontent.com/4161171/168322241-505ee5bb-d3d8-4b0e-8757-873a1a65a6a6.png) + +- Chore: Convert NotificationStatus to TS ([#25125](https://github.com/RocketChat/Rocket.Chat/pull/25125)) + +- Chore: Convert push endpoints to TS ([#25347](https://github.com/RocketChat/Rocket.Chat/pull/25347)) + +- Chore: Convert RoomForeword, TextCopy and RoomAvatarEditor to TS ([#25424](https://github.com/RocketChat/Rocket.Chat/pull/25424)) + +- Chore: Convert slashCommands to typescript ([#25592](https://github.com/RocketChat/Rocket.Chat/pull/25592) by [@eduardofcabrera](https://github.com/eduardofcabrera) & [@ostjen](https://github.com/ostjen)) + +- Chore: Convert to typescript some functions from app/lib/server/functions ([#24519](https://github.com/RocketChat/Rocket.Chat/pull/24519)) + + Convert to typescript some functions from app/lib/server/functions and transfered theses files to server/lib + +- Chore: Convert to typescript the slash commands help files ([#24307](https://github.com/RocketChat/Rocket.Chat/pull/24307) by [@eduardofcabrera](https://github.com/eduardofcabrera)) + + Convert to typescript the slash commands help files + +- Chore: Convert useFileInput to TS ([#25426](https://github.com/RocketChat/Rocket.Chat/pull/25426)) + +- Chore: Convert useUpdateAvatar to TS and type avatar endpoints ([#25430](https://github.com/RocketChat/Rocket.Chat/pull/25430)) + +- Chore: Converting orchestrator.js to ts ([#25367](https://github.com/RocketChat/Rocket.Chat/pull/25367)) + +- Chore: Create README.md for Rest Typings ([#25335](https://github.com/RocketChat/Rocket.Chat/pull/25335)) + +- Chore: Dedicated package for UI contexts ([#25432](https://github.com/RocketChat/Rocket.Chat/pull/25432)) + + Moving our React contexts to a different package on the monorepo enable us to deliver components from another packages, because they work as a loose connection to the core APIs. + +- Chore: Dependencies upgrade ([#25290](https://github.com/RocketChat/Rocket.Chat/pull/25290)) + +- Chore: Enable marketplace screenshots endpoint ([#25395](https://github.com/RocketChat/Rocket.Chat/pull/25395)) + +- Chore: ensure scripts use cross-env and ignore some dirs (ROC-54) ([#25218](https://github.com/RocketChat/Rocket.Chat/pull/25218)) + + - data and test-failure should be ignored + + - ensure scripts use cross-env + +- Chore: Fix return type warnings ([#25275](https://github.com/RocketChat/Rocket.Chat/pull/25275)) + +- Chore: Increase performance and security of integrations’ scripts ([#25641](https://github.com/RocketChat/Rocket.Chat/pull/25641)) + + Replace internal VM implementation with VM2 which implements many more mechanisms to ensure timeout, security and allow easier configuration for future improvements on the integrations' feature. + +- Chore: Livechat change output level ([#25522](https://github.com/RocketChat/Rocket.Chat/pull/25522)) + +- Chore: Manager Page Rewrite ([#25431](https://github.com/RocketChat/Rocket.Chat/pull/25431)) + +- Chore: Migrate 15-message-popup from cypress to playwright ([#25462](https://github.com/RocketChat/Rocket.Chat/pull/25462)) + +- Chore: migrate from cypress to pw 14-setting-permission ([#25523](https://github.com/RocketChat/Rocket.Chat/pull/25523)) + +- Chore: Migrate NotFoundPage to TS ([#25509](https://github.com/RocketChat/Rocket.Chat/pull/25509)) + +- Chore: Migrate oauth2server to typescript ([#25126](https://github.com/RocketChat/Rocket.Chat/pull/25126)) + +- Chore: Migrate retention-policy to ts ([#25582](https://github.com/RocketChat/Rocket.Chat/pull/25582)) + +- Chore: Migrate spotify to ts ([#25507](https://github.com/RocketChat/Rocket.Chat/pull/25507)) + +- Chore: migrate-to-pw-adjust-in-intermitences ([#25542](https://github.com/RocketChat/Rocket.Chat/pull/25542)) + +- Chore: Minor dependency updates ([#25269](https://github.com/RocketChat/Rocket.Chat/pull/25269)) + +- Chore: Missing keys in APIsDisplay ([#24464](https://github.com/RocketChat/Rocket.Chat/pull/24464)) + +- Chore: Monorepo ([#25074](https://github.com/RocketChat/Rocket.Chat/pull/25074)) + +- Chore: Move admin sidebarItems registration to the main file ([#25442](https://github.com/RocketChat/Rocket.Chat/pull/25442)) + +- Chore: Move ddp-streamer micro service to its own sub-repo ([#25246](https://github.com/RocketChat/Rocket.Chat/pull/25246)) + +- Chore: move definitions to packages ([#25085](https://github.com/RocketChat/Rocket.Chat/pull/25085)) + +- Chore: Move markdown message parser to a `callback` ([#25413](https://github.com/RocketChat/Rocket.Chat/pull/25413)) + +- Chore: organize test files and fix code coverage ([#24900](https://github.com/RocketChat/Rocket.Chat/pull/24900)) + +- Chore: Remove Alpine image deps after using them ([#25053](https://github.com/RocketChat/Rocket.Chat/pull/25053)) + +- Chore: Remove duplicated useUserRoom ([#25180](https://github.com/RocketChat/Rocket.Chat/pull/25180)) + +- Chore: Remove old files from removed Omnichannel feature ([#25129](https://github.com/RocketChat/Rocket.Chat/pull/25129)) + +- Chore: Remove package-lock.json from houston files ([#25280](https://github.com/RocketChat/Rocket.Chat/pull/25280)) + + Houston config in the `package.json` file still mentioned `package-lock.json`, but it doesn't exist anymore + +- Chore: Remove unused Drone CI files ([#25124](https://github.com/RocketChat/Rocket.Chat/pull/25124)) + +- Chore: Reorder unreleased migrations ([#25508](https://github.com/RocketChat/Rocket.Chat/pull/25508)) + +- Chore: Rest API query parameters handling ([#25648](https://github.com/RocketChat/Rocket.Chat/pull/25648)) + +- Chore: REST query and body params validation ([#25446](https://github.com/RocketChat/Rocket.Chat/pull/25446)) + +- Chore: Rewrite 2fa to typescript ([#25285](https://github.com/RocketChat/Rocket.Chat/pull/25285)) + +- Chore: Rewrite action-links to ts ([#25418](https://github.com/RocketChat/Rocket.Chat/pull/25418)) + +- Chore: Rewrite autotranslate to ts ([#25425](https://github.com/RocketChat/Rocket.Chat/pull/25425)) + +- Chore: Rewrite im and dm endpoints to ts ([#25521](https://github.com/RocketChat/Rocket.Chat/pull/25521)) + + - Endpoints rewritten to TS + - dm.create + - dm.delete + - dm.close + - dm.counters + - dm.files + - dm.history + - dm.members + - dm.messages + - dm.messages.others + - dm.list + - dm.list.everyone + - dm.open + - dm.setTopic + - im.create + - im.delete + - im.close + - im.counters + - im.files + - im.history + - im.members + - im.messages + - im.messages.others + - im.list + - im.list.everyone + - im.open + - im.setTopic + + - Some lines of code was refactored on `apps/meteor/app/api/server/v1/im.ts` + + - Unnecessary functions were deleted on `apps/meteor/app/lib/server/functions/getDirectMessageByNameOrIdWithOptionToJoin.ts` + + - New types was added on `apps/meteor/app/api/server/api.d.ts` + +- Chore: Rewrite Jitsi Contextualbar to TS ([#25303](https://github.com/RocketChat/Rocket.Chat/pull/25303)) + +- Chore: Rewrite mail-messages to ts ([#25421](https://github.com/RocketChat/Rocket.Chat/pull/25421)) + +- Chore: Rewrite some Omnichannel files to TypeScript ([#25359](https://github.com/RocketChat/Rocket.Chat/pull/25359)) + + apps/meteor/client/components/Omnichannel/modals/* + apps/meteor/client/components/Omnichannel/Tags.js + +- Chore: solve yarn issues from env var ([#25468](https://github.com/RocketChat/Rocket.Chat/pull/25468)) + +- Chore: Sync with master ([#25284](https://github.com/RocketChat/Rocket.Chat/pull/25284)) + +- Chore: Template to generate packages ([#25174](https://github.com/RocketChat/Rocket.Chat/pull/25174)) + + ``` + npx hygen package new test + ``` + +- Chore: Tests with Playwright (task: All works) ([#25122](https://github.com/RocketChat/Rocket.Chat/pull/25122)) + +- Chore: Tests with Playwright (task: ROC-25, 06-message) ([#25252](https://github.com/RocketChat/Rocket.Chat/pull/25252)) + +- Chore: Tests with Playwright (task: ROC-28, 09-channels) ([#25196](https://github.com/RocketChat/Rocket.Chat/pull/25196)) + +- Chore: Tests with Playwright (task: ROC-31, 12-settings) ([#25253](https://github.com/RocketChat/Rocket.Chat/pull/25253)) + +- Chore: Tests with Playwright (task: ROC-66, Intermittent resolution in tests) ([#25416](https://github.com/RocketChat/Rocket.Chat/pull/25416)) + +- Chore: TS conversion folder client ([#25031](https://github.com/RocketChat/Rocket.Chat/pull/25031)) + +- Chore: TS migration SortList ([#25167](https://github.com/RocketChat/Rocket.Chat/pull/25167)) + +- Chore: Update Apps-Engine and Fuselage ([#25700](https://github.com/RocketChat/Rocket.Chat/pull/25700)) + +- Chore: Update Apps-Engine version ([#25617](https://github.com/RocketChat/Rocket.Chat/pull/25617)) + +- Chore: Update Livechat to the last version ([#25257](https://github.com/RocketChat/Rocket.Chat/pull/25257)) + +- Chore: Update Livechat version ([#25130](https://github.com/RocketChat/Rocket.Chat/pull/25130)) + +- Chore: update OTR icon ([#24521](https://github.com/RocketChat/Rocket.Chat/pull/24521) by [@kibonusp](https://github.com/kibonusp)) + + I changed the shredder icon in OTR contextual bar to the stopwatch icon, recently added to the fuselage. + +- Chore: Update Volta configuration ([#25394](https://github.com/RocketChat/Rocket.Chat/pull/25394)) + + [Volta](https://volta.sh/) need some extra configuration to work on monorepos. + +- Chore: User set UTC offset ([#25381](https://github.com/RocketChat/Rocket.Chat/pull/25381)) + +- i18n: Language update from LingoHub 🤖 on 2022-04-04Z ([#25043](https://github.com/RocketChat/Rocket.Chat/pull/25043)) + +- Merge master into develop & Set version to 4.7.0-develop ([#25028](https://github.com/RocketChat/Rocket.Chat/pull/25028)) + +- Regression: Add `isPending` status to message ([#25299](https://github.com/RocketChat/Rocket.Chat/pull/25299)) + +- Regression: Add eslint package to micro services Dockerfile ([#25311](https://github.com/RocketChat/Rocket.Chat/pull/25311)) + +- Regression: Add select message to system message and thread preview and allow select on legacy template ([#25251](https://github.com/RocketChat/Rocket.Chat/pull/25251)) + +- Regression: App event listeners broke Slackbridge integration and importers ([#25689](https://github.com/RocketChat/Rocket.Chat/pull/25689)) + + Some event listeners triggered by Apps were calling `Meteor.user()` in functions that could run outside of Meteor environment + +- Regression: Assets & Slack Bridge Setting Page not rendering ([#25629](https://github.com/RocketChat/Rocket.Chat/pull/25629)) + +- Regression: Avatar not loading on first direct message ([#25211](https://github.com/RocketChat/Rocket.Chat/pull/25211)) + + fix avatar not loading on a first direct message + +- Regression: Better MongoDB connection management for micro services ([#25323](https://github.com/RocketChat/Rocket.Chat/pull/25323)) + +- Regression: Broken components on Federation and Engagement dashboards ([#25653](https://github.com/RocketChat/Rocket.Chat/pull/25653)) + + For reasons I've no clue, any client import path matching `**/data/**` will not be included in the final bundle, failing silently on transpiling/bundling. + +- Regression: bump onboarding-ui version ([#25320](https://github.com/RocketChat/Rocket.Chat/pull/25320)) + + - Bump to 'next' the onboarding-ui package from fuselage. + + - Update from 'companyEmail' to 'email' adminData usage types + +- Regression: Change logic to check if connection is online on unstable networks ([#25618](https://github.com/RocketChat/Rocket.Chat/pull/25618)) + +- Regression: Change preference to be default legacy messages ([#25255](https://github.com/RocketChat/Rocket.Chat/pull/25255)) + +- Regression: CI playwright ([#25168](https://github.com/RocketChat/Rocket.Chat/pull/25168)) + +- Regression: CI services build ([#25555](https://github.com/RocketChat/Rocket.Chat/pull/25555)) + +- Regression: Endpoint types with Ajv Coercing data types ([#25644](https://github.com/RocketChat/Rocket.Chat/pull/25644)) + + Ajv Coercing data types should be `true` to accept all kinds of data requested. + +- Regression: eslint not running on packages ([#25305](https://github.com/RocketChat/Rocket.Chat/pull/25305)) + +- Regression: Fix CI monorepo build ([#25107](https://github.com/RocketChat/Rocket.Chat/pull/25107)) + +- Regression: Fix clicking on visitor's chat in the sidebar does not display the chat window ([#25380](https://github.com/RocketChat/Rocket.Chat/pull/25380)) + + Fix: livechat room not opening. + +- Regression: Fix English i18n react text ([#25368](https://github.com/RocketChat/Rocket.Chat/pull/25368)) + + Incorrect text in reaction tooltip has been fixed + +- Regression: Fix federation Matrix bridge startup ([#25273](https://github.com/RocketChat/Rocket.Chat/pull/25273)) + +- Regression: Fix micro services Docker build ([#25193](https://github.com/RocketChat/Rocket.Chat/pull/25193)) + +- Regression: Fix multi line is not showing an empty line between lines ([#25317](https://github.com/RocketChat/Rocket.Chat/pull/25317)) + +- Regression: Fix reply button not working when hideFlexTab is enabled ([#25306](https://github.com/RocketChat/Rocket.Chat/pull/25306)) + +- Regression: Fix services Docker build on CI ([#25181](https://github.com/RocketChat/Rocket.Chat/pull/25181)) + +- Regression: Fix services-image-build-check ([#25519](https://github.com/RocketChat/Rocket.Chat/pull/25519)) + +- Regression: Fix size of custom emoji and render emoji on thread message preview ([#25314](https://github.com/RocketChat/Rocket.Chat/pull/25314)) + +- Regression: Fix sort field files.list ([#25687](https://github.com/RocketChat/Rocket.Chat/pull/25687)) + +- Regression: Fix the alpine image and dev UX installing matrix-rust-sdk-bindings ([#25319](https://github.com/RocketChat/Rocket.Chat/pull/25319)) + + The package only included a few pre-built which caused all macs to have to compile every time they installed and also caused our alpine not to work. + + This temporarily switches to a fork of the matrix-appservice-bridge package. + + Made changes to one of its child dependencies `matrix-rust-sdk-bindings` that adds pre-built binaries for mac and musl (for alpine). + +- Regression: Messages in new message template Crashing. ([#25327](https://github.com/RocketChat/Rocket.Chat/pull/25327)) + +- Regression: Missing settings group descriptions ([#25639](https://github.com/RocketChat/Rocket.Chat/pull/25639)) + + + +- Regression: Revert Bugsnag version ([#25313](https://github.com/RocketChat/Rocket.Chat/pull/25313)) + +- Regression: Rocket.Chat Webapp not loading. ([#25349](https://github.com/RocketChat/Rocket.Chat/pull/25349)) + +- Regression: Show username and real name on the message system ([#25254](https://github.com/RocketChat/Rocket.Chat/pull/25254)) + +- Regression: Shows error if micro service cannot connect to Mongo ([#25301](https://github.com/RocketChat/Rocket.Chat/pull/25301)) + +- Regression: Subscription menu not appearing for non installed but subscribed apps ([#25627](https://github.com/RocketChat/Rocket.Chat/pull/25627)) + + Fixed a problem on which the AppMenu component did not appear for apps that had an active subscription but weren't installed, now the rendering of the component is also based on the isSubscribed flag, and the appearance of the uninstall and enable/disable options are based on the app.installed flag so that the correct options appear on all the edge cases. + Demo gif: + ![subscription-manager-fix](https://user-images.githubusercontent.com/43561537/170132040-dc8535c0-8056-4fb2-b008-afaece744868.gif) + +- Regression: Update settings groups description ([#25663](https://github.com/RocketChat/Rocket.Chat/pull/25663)) + +- Regression: Use exact Node version on micro services Docker images ([#25287](https://github.com/RocketChat/Rocket.Chat/pull/25287)) + +- Regression: Validate empty fields for Message template ([#25250](https://github.com/RocketChat/Rocket.Chat/pull/25250)) + +- Regression: VoIp wrap up modal not opening after call disconnect ([#25651](https://github.com/RocketChat/Rocket.Chat/pull/25651)) + + This PR fixes a bug preventing the wrap up call modal from being displayed after caller or agent ends the call. + +- Regression: yarn dev triggers build dependencies ([#25208](https://github.com/RocketChat/Rocket.Chat/pull/25208)) + +- Release 4.7.0 ([#25390](https://github.com/RocketChat/Rocket.Chat/pull/25390) + +- Release 4.7.1 ([#25510](https://github.com/RocketChat/Rocket.Chat/pull/25510)) + +- Release 4.7.2 ([#25580](https://github.com/RocketChat/Rocket.Chat/pull/25580)) + +- Test: Migrate 13-permissions from cypress to playwright ([#25558](https://github.com/RocketChat/Rocket.Chat/pull/25558)) + +
+ +### 👩‍💻👨‍💻 Contributors 😍 + +- [@Himanshu664](https://github.com/Himanshu664) +- [@aakash-gitdev](https://github.com/aakash-gitdev) +- [@cuonghuunguyen](https://github.com/cuonghuunguyen) +- [@dependabot[bot]](https://github.com/dependabot[bot]) +- [@divinespear](https://github.com/divinespear) +- [@eduardofcabrera](https://github.com/eduardofcabrera) +- [@kibonusp](https://github.com/kibonusp) +- [@lingohub[bot]](https://github.com/lingohub[bot]) +- [@nishant23122000](https://github.com/nishant23122000) +- [@ostjen](https://github.com/ostjen) +- [@paulobernardoaf](https://github.com/paulobernardoaf) +- [@sidmohanty11](https://github.com/sidmohanty11) + +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@AllanPazRibeiro](https://github.com/AllanPazRibeiro) +- [@KevLehman](https://github.com/KevLehman) +- [@MarcosSpessatto](https://github.com/MarcosSpessatto) +- [@MartinSchoeler](https://github.com/MartinSchoeler) +- [@PedroRorato](https://github.com/PedroRorato) +- [@alansikora](https://github.com/alansikora) +- [@albuquerquefabio](https://github.com/albuquerquefabio) +- [@aleksandernsilva](https://github.com/aleksandernsilva) +- [@amolghode1981](https://github.com/amolghode1981) +- [@carlosrodrigues94](https://github.com/carlosrodrigues94) +- [@cauefcr](https://github.com/cauefcr) +- [@d-gubert](https://github.com/d-gubert) +- [@debdutdeb](https://github.com/debdutdeb) +- [@dougfabris](https://github.com/dougfabris) +- [@felipe-menelau](https://github.com/felipe-menelau) +- [@felipe-rod123](https://github.com/felipe-rod123) +- [@filipemarins](https://github.com/filipemarins) +- [@gabriellsh](https://github.com/gabriellsh) +- [@geekgonecrazy](https://github.com/geekgonecrazy) +- [@ggazzo](https://github.com/ggazzo) +- [@guijun13](https://github.com/guijun13) +- [@hugocostadev](https://github.com/hugocostadev) +- [@jeanfbrito](https://github.com/jeanfbrito) +- [@juliajforesti](https://github.com/juliajforesti) +- [@marceloschmidt](https://github.com/marceloschmidt) +- [@matheusbsilva137](https://github.com/matheusbsilva137) +- [@matheuslc](https://github.com/matheuslc) +- [@murtaza98](https://github.com/murtaza98) +- [@pierre-lehnen-rc](https://github.com/pierre-lehnen-rc) +- [@rique223](https://github.com/rique223) +- [@rodrigok](https://github.com/rodrigok) +- [@sampaiodiego](https://github.com/sampaiodiego) +- [@souzaramon](https://github.com/souzaramon) +- [@tapiarafael](https://github.com/tapiarafael) +- [@tassoevan](https://github.com/tassoevan) +- [@tiagoevanp](https://github.com/tiagoevanp) +- [@tmontini](https://github.com/tmontini) +- [@ujorgeleite](https://github.com/ujorgeleite) +- [@weslley543](https://github.com/weslley543) +- [@yash-rajpal](https://github.com/yash-rajpal) + +# 4.7.4 +`2022-05-30 · 1 🐛 · 1 🔍 · 2 👩‍💻👨‍💻` + +### Engine versions +- Node: `14.18.3` +- NPM: `6.14.15` +- MongoDB: `3.6, 4.0, 4.2, 4.4, 5.0` + +### 🐛 Bug fixes + + +- Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) + +
+🔍 Minor changes + + +- Load missed messages from opened rooms when reconnect ([#553](https://github.com/RocketChat/Rocket.Chat/pull/553)) + +
+ +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@ggazzo](https://github.com/ggazzo) +- [@rodrigok](https://github.com/rodrigok) + +# 4.7.3 +`2022-05-20 · 1 🐛 · 1 👩‍💻👨‍💻` + +### Engine versions +- Node: `14.18.3` +- NPM: `6.14.15` +- MongoDB: `3.6, 4.0, 4.2, 4.4, 5.0` + +### 🐛 Bug fixes + + +- Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) + +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@ggazzo](https://github.com/ggazzo) + +# 4.7.2 +`2022-05-20 · 5 🐛 · 1 🔍 · 6 👩‍💻👨‍💻` + +### Engine versions +- Node: `14.18.3` +- NPM: `6.14.15` +- MongoDB: `3.6, 4.0, 4.2, 4.4, 5.0` + +### 🐛 Bug fixes + + +- Dynamic load matrix is enabled and handle failure ([#25495](https://github.com/RocketChat/Rocket.Chat/pull/25495)) + +- Initial User not added to default channel ([#25544](https://github.com/RocketChat/Rocket.Chat/pull/25544)) + + If injecting initial user. The user wasn’t added to the default General channel + +- One of the triggers was not working correctly ([#25409](https://github.com/RocketChat/Rocket.Chat/pull/25409)) + +- UI/UX issues on Live Chat widget ([#25407](https://github.com/RocketChat/Rocket.Chat/pull/25407)) + +- User abandonment setting was not working doe to failing event hook ([#25520](https://github.com/RocketChat/Rocket.Chat/pull/25520)) + + A setting watcher and the query for grabbing abandoned chats were broken, now they're not. + +
+🔍 Minor changes + + +- Chore: Add Livechat repo into Monorepo packages ([#25312](https://github.com/RocketChat/Rocket.Chat/pull/25312)) + +
+ +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@MartinSchoeler](https://github.com/MartinSchoeler) +- [@cauefcr](https://github.com/cauefcr) +- [@dougfabris](https://github.com/dougfabris) +- [@geekgonecrazy](https://github.com/geekgonecrazy) +- [@ggazzo](https://github.com/ggazzo) +- [@tiagoevanp](https://github.com/tiagoevanp) + +# 4.7.1 +`2022-05-13 · 1 🎉 · 2 🐛 · 3 👩‍💻👨‍💻` + +### Engine versions +- Node: `14.18.3` +- NPM: `6.14.15` +- MongoDB: `3.6, 4.0, 4.2, 4.4, 5.0` + +### 🎉 New features + + +- Use setting to determine if initial general channel is needed ([#25441](https://github.com/RocketChat/Rocket.Chat/pull/25441)) + + - Adds flag responsible for overwriting #general channel creation + +### 🐛 Bug fixes + + +- LDAP sync removing users from channels when multiple groups are mapped to it ([#25434](https://github.com/RocketChat/Rocket.Chat/pull/25434)) + +- Spotlight results showing usernames instead of real names ([#25471](https://github.com/RocketChat/Rocket.Chat/pull/25471)) + +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@felipe-menelau](https://github.com/felipe-menelau) +- [@pierre-lehnen-rc](https://github.com/pierre-lehnen-rc) +- [@sampaiodiego](https://github.com/sampaiodiego) + # 4.7.0 -`2022-05-03 · 4 🎉 · 7 🚀 · 33 🐛 · 69 🔍 · 35 👩‍💻👨‍💻` +`2022-05-04 · 4 🎉 · 7 🚀 · 33 🐛 · 69 🔍 · 35 👩‍💻👨‍💻` ### Engine versions - Node: `14.18.3` - NPM: `6.14.15` - MongoDB: `3.6, 4.0, 4.2, 4.4, 5.0` -- Apps-Engine: `1.31.0` ### 🎉 New features @@ -15,21 +1053,21 @@ - Alpha Matrix Federation ([#23688](https://github.com/RocketChat/Rocket.Chat/pull/23688)) - Experimental support for Matrix Federation with a Bridge - + Experimental support for Matrix Federation with a Bridge + https://user-images.githubusercontent.com/51996/164530391-e8b17ecd-a4d0-4ef8-a8b7-81230c1773d3.mp4 - Expand Apps Engine's environment variable allowed list ([#23870](https://github.com/RocketChat/Rocket.Chat/pull/23870) by [@cuonghuunguyen](https://github.com/cuonghuunguyen)) - Message Template React Component ([#23971](https://github.com/RocketChat/Rocket.Chat/pull/23971)) - Complete rewrite of the messages component in react. Visual changes should be minimal as well as user impact, with no break changes (unless you've customized the blaze template). - - - - ![Screen Shot 2022-04-05 at 11 14 18](https://user-images.githubusercontent.com/27704687/161774027-38dd9c7b-eeeb-45e2-b9d8-ea2a9be8486d.png) - In case you encounter any problems, or want to compare, temporarily it is possible to use the old version - + Complete rewrite of the messages component in react. Visual changes should be minimal as well as user impact, with no break changes (unless you've customized the blaze template). + + + + ![Screen Shot 2022-04-05 at 11 14 18](https://user-images.githubusercontent.com/27704687/161774027-38dd9c7b-eeeb-45e2-b9d8-ea2a9be8486d.png) + In case you encounter any problems, or want to compare, temporarily it is possible to use the old version + image ### 🚀 Improvements @@ -37,16 +1075,19 @@ - Add OTR Room States ([#24565](https://github.com/RocketChat/Rocket.Chat/pull/24565)) - Earlier OTR room uses only 2 states, we need more states to support future features. - This adds more states for the OTR contextualBar. - - - Expired - Screen Shot 2022-04-20 at 13 55 52 - - - Declined - Screen Shot 2022-04-20 at 13 49 28 - - - Error + Earlier OTR room uses only 2 states, we need more states to support future features. + This adds more states for the OTR contextualBar. + + + - Expired + Screen Shot 2022-04-20 at 13 55 52 + + + - Declined + Screen Shot 2022-04-20 at 13 49 28 + + + - Error Screen Shot 2022-04-20 at 13 55 26 - Add tooltip to sidebar room menu ([#24405](https://github.com/RocketChat/Rocket.Chat/pull/24405) by [@Himanshu664](https://github.com/Himanshu664)) @@ -78,40 +1119,45 @@ - AgentOverview analytics wrong departmentId parameter ([#25073](https://github.com/RocketChat/Rocket.Chat/pull/25073) by [@paulobernardoaf](https://github.com/paulobernardoaf)) - When filtering the analytics charts by department, data would not appear because the object: - ```js - { - value: "department-id", - label: "department-name" - } - ``` - was being used in the `departmentId` parameter. - - - Before: - ![image](https://user-images.githubusercontent.com/30026625/161832057-d96ffd21-a7dd-421e-bfaa-3b9f4a9127b2.png) - - - After: + When filtering the analytics charts by department, data would not appear because the object: + ```js + { + value: "department-id", + label: "department-name" + } + ``` + was being used in the `departmentId` parameter. + + + - Before: + ![image](https://user-images.githubusercontent.com/30026625/161832057-d96ffd21-a7dd-421e-bfaa-3b9f4a9127b2.png) + + + - After: ![image](https://user-images.githubusercontent.com/30026625/161831092-9ee77b51-b083-4f45-9c48-ab2e0511c4d6.png) - Client disconnection on network loss ([#25170](https://github.com/RocketChat/Rocket.Chat/pull/25170)) - Agent gets disconnected (or Unregistered) from asterisk in multiple ways. The goal is that agent should remain online - unless agent explicitly logs off. - Agent can stop receiving calls in multiple ways due to network loss. Network loss can happen in following ways. - 1. User tries to switch the network. User experiences a glitch of disconnectivity. This can be simulated by turning the network off - in the network tab of chrome's dev tool. This can disconnect the UA if the disconnection happens just before the registration refresh. - 2. Second reason is when computer goes in sleep mode. - 3. Third reason is that when asterisk is crashed/in maintenance mode/explicitly stopped. - - Solution: - The idea is to detect the network disconnection and start the start the attempts to reconnect. - The detection of the disconnection does not happen in case#1. The SIPUA's UserAgent transport does not - call onDisconnected when network loss of such kind happens. To tackle this problem, window's online and offline event handlers are - used. - - The number of retries is configurable but ideally it is to be kept at -1. Whenever disconnection happens, it should keep on trying to - reconnect with increasing backoff time. This behaviour is useful when the asterisk is stopped. - + Agent gets disconnected (or Unregistered) from asterisk in multiple ways. The goal is that agent should remain online + unless agent explicitly logs off. + Agent can stop receiving calls in multiple ways due to network loss. Network loss can happen in following ways. + + 1. User tries to switch the network. User experiences a glitch of disconnectivity. This can be simulated by turning the network off + in the network tab of chrome's dev tool. This can disconnect the UA if the disconnection happens just before the registration refresh. + + 2. Second reason is when computer goes in sleep mode. + + 3. Third reason is that when asterisk is crashed/in maintenance mode/explicitly stopped. + + Solution: + The idea is to detect the network disconnection and start the start the attempts to reconnect. + The detection of the disconnection does not happen in case#1. The SIPUA's UserAgent transport does not + call onDisconnected when network loss of such kind happens. To tackle this problem, window's online and offline event handlers are + used. + + The number of retries is configurable but ideally it is to be kept at -1. Whenever disconnection happens, it should keep on trying to + reconnect with increasing backoff time. This behaviour is useful when the asterisk is stopped. + When the server is disconnected, it should be indicated on the phone button. - Close room when dismiss wrap up call modal ([#25056](https://github.com/RocketChat/Rocket.Chat/pull/25056)) @@ -120,13 +1166,13 @@ - Deactivating user breaks if user is the only room owner ([#24933](https://github.com/RocketChat/Rocket.Chat/pull/24933) by [@sidmohanty11](https://github.com/sidmohanty11)) - ## Before - - https://user-images.githubusercontent.com/73601258/160000871-cfc2f2a5-2a59-4d27-8049-7754d003dd48.mp4 - - - - ## After + ## Before + + https://user-images.githubusercontent.com/73601258/160000871-cfc2f2a5-2a59-4d27-8049-7754d003dd48.mp4 + + + + ## After https://user-images.githubusercontent.com/73601258/159998287-681ab475-ff33-4282-82ff-db751c59a392.mp4 - Desktop notification on multi-instance environments ([#25220](https://github.com/RocketChat/Rocket.Chat/pull/25220)) @@ -149,10 +1195,10 @@ - Prevent sequential messages edited icon to hide on hover ([#24984](https://github.com/RocketChat/Rocket.Chat/pull/24984)) - ### before - Screen Shot 2022-03-29 at 13 35 56 - - ### after + ### before + Screen Shot 2022-03-29 at 13 35 56 + + ### after Screen Shot 2022-03-29 at 11 48 05 - Proxy settings being ignored ([#25022](https://github.com/RocketChat/Rocket.Chat/pull/25022)) @@ -165,10 +1211,10 @@ - Replace encrypted text to Encrypted Message Placeholder ([#24166](https://github.com/RocketChat/Rocket.Chat/pull/24166)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/150807900-154a9cdb-ee13-4333-8628-f287ab914b40.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/150807900-154a9cdb-ee13-4333-8628-f287ab914b40.png) + + ### after Screenshot 2022-01-13 at 8 57 47 PM - Reply button behavior on broadcast channel ([#25175](https://github.com/RocketChat/Rocket.Chat/pull/25175)) @@ -189,35 +1235,39 @@ - UserAutoComplete not rendering UserAvatar correctly ([#25055](https://github.com/RocketChat/Rocket.Chat/pull/25055)) - ### before - ![Screen Shot 2022-04-04 at 16 50 21](https://user-images.githubusercontent.com/27704687/161620921-800bf66a-806d-4f83-b2e1-073c34215001.png) - - ### after + ### before + ![Screen Shot 2022-04-04 at 16 50 21](https://user-images.githubusercontent.com/27704687/161620921-800bf66a-806d-4f83-b2e1-073c34215001.png) + + ### after ![Screen Shot 2022-04-04 at 16 49 00](https://user-images.githubusercontent.com/27704687/161620720-3e27774d-c241-46ca-b764-932a9295d709.png) - UserCard sanitization ([#25089](https://github.com/RocketChat/Rocket.Chat/pull/25089)) - - Rewrites the component to TS - - Fixes some visual issues - - ### before - ![Screen Shot 2022-04-07 at 00 23 11](https://user-images.githubusercontent.com/27704687/162113925-5c9484d1-23e9-4623-8b86-3fbc71b461a1.png) - - ### after + - Rewrites the component to TS + + - Fixes some visual issues + + ### before + ![Screen Shot 2022-04-07 at 00 23 11](https://user-images.githubusercontent.com/27704687/162113925-5c9484d1-23e9-4623-8b86-3fbc71b461a1.png) + + ### after ![Screen Shot 2022-04-07 at 00 07 13](https://user-images.githubusercontent.com/27704687/162112353-afd6aac6-b27c-4470-a642-631b8080d59e.png) - Video and Audio not skipping forward ([#19866](https://github.com/RocketChat/Rocket.Chat/pull/19866)) - VoIP disabled/enabled sequence puts voip agent in error state ([#25230](https://github.com/RocketChat/Rocket.Chat/pull/25230)) - Initially it was thought that the issue occurs because of the race condition while changing the client settings vs those settings reflected on server side. So a natural solution to solve this is to wait for setting change event 'private-settings-changed'. Then if 'VoIP_Enabled' is updated and it is true, set voipEnabled to true in useVoipClient.ts (on client side) - - It was realised that the race does not happen because of the database or server noticing the changes late. But because of the time taken to establish the AMI connection with Asterisk. - - Solution: - - 1. Change apps/meteor/app/voip/server/startup.ts. When VoIP_Enabled is changed, await for Voip.init() to complete and then broadcast connector.statuschanged with changed value. - 2. From apps/meteor/server/modules/listeners/listeners.module.ts use notifyLoggedInThisInstance to notify all logged in users on current instance. + Initially it was thought that the issue occurs because of the race condition while changing the client settings vs those settings reflected on server side. So a natural solution to solve this is to wait for setting change event 'private-settings-changed'. Then if 'VoIP_Enabled' is updated and it is true, set voipEnabled to true in useVoipClient.ts (on client side) + + It was realised that the race does not happen because of the database or server noticing the changes late. But because of the time taken to establish the AMI connection with Asterisk. + + Solution: + + + 1. Change apps/meteor/app/voip/server/startup.ts. When VoIP_Enabled is changed, await for Voip.init() to complete and then broadcast connector.statuschanged with changed value. + + 2. From apps/meteor/server/modules/listeners/listeners.module.ts use notifyLoggedInThisInstance to notify all logged in users on current instance. + 3. in apps/meteor/client/providers/CallProvider/hooks/useVoipClient.ts add the event handler that receives this event. Change voipEnabled from constant to state. Change this state based on the 'value' that is received by the handler.
@@ -238,8 +1288,8 @@ - Chore: Add error boundary to message component ([#25223](https://github.com/RocketChat/Rocket.Chat/pull/25223)) - Not crash the whole application if something goes wrong in the MessageList component. - + Not crash the whole application if something goes wrong in the MessageList component. + ![image](https://user-images.githubusercontent.com/40830821/162269915-931c5c3c-c979-4234-b74c-371f67467ce0.png) - Chore: Add options to debug stdout and rate limiter ([#25336](https://github.com/RocketChat/Rocket.Chat/pull/25336)) @@ -268,7 +1318,8 @@ - Chore: ensure scripts use cross-env and ignore some dirs (ROC-54) ([#25218](https://github.com/RocketChat/Rocket.Chat/pull/25218)) - - data and test-failure should be ignored + - data and test-failure should be ignored + - ensure scripts use cross-env - Chore: Fix return type warnings ([#25275](https://github.com/RocketChat/Rocket.Chat/pull/25275)) @@ -301,8 +1352,8 @@ - Chore: Template to generate packages ([#25174](https://github.com/RocketChat/Rocket.Chat/pull/25174)) - ``` - npx hygen package new test + ``` + npx hygen package new test ``` - Chore: Tests with Playwright (task: All works) ([#25122](https://github.com/RocketChat/Rocket.Chat/pull/25122)) @@ -339,7 +1390,8 @@ - Regression: bump onboarding-ui version ([#25320](https://github.com/RocketChat/Rocket.Chat/pull/25320)) - - Bump to 'next' the onboarding-ui package from fuselage. + - Bump to 'next' the onboarding-ui package from fuselage. + - Update from 'companyEmail' to 'email' adminData usage types - Regression: Change preference to be default legacy messages ([#25255](https://github.com/RocketChat/Rocket.Chat/pull/25255)) @@ -372,10 +1424,10 @@ - Regression: Fix the alpine image and dev UX installing matrix-rust-sdk-bindings ([#25319](https://github.com/RocketChat/Rocket.Chat/pull/25319)) - The package only included a few pre-built which caused all macs to have to compile every time they installed and also caused our alpine not to work. - - This temporarily switches to a fork of the matrix-appservice-bridge package. - + The package only included a few pre-built which caused all macs to have to compile every time they installed and also caused our alpine not to work. + + This temporarily switches to a fork of the matrix-appservice-bridge package. + Made changes to one of its child dependencies `matrix-rust-sdk-bindings` that adds pre-built binaries for mac and musl (for alpine). - Regression: Messages in new message template Crashing. ([#25327](https://github.com/RocketChat/Rocket.Chat/pull/25327)) @@ -471,13 +1523,13 @@ - Deactivating user breaks if user is the only room owner ([#24933](https://github.com/RocketChat/Rocket.Chat/pull/24933) by [@sidmohanty11](https://github.com/sidmohanty11)) - ## Before - - https://user-images.githubusercontent.com/73601258/160000871-cfc2f2a5-2a59-4d27-8049-7754d003dd48.mp4 - - - - ## After + ## Before + + https://user-images.githubusercontent.com/73601258/160000871-cfc2f2a5-2a59-4d27-8049-7754d003dd48.mp4 + + + + ## After https://user-images.githubusercontent.com/73601258/159998287-681ab475-ff33-4282-82ff-db751c59a392.mp4 ### 👩‍💻👨‍💻 Contributors 😍 @@ -514,10 +1566,10 @@ - UserAutoComplete not rendering UserAvatar correctly ([#25055](https://github.com/RocketChat/Rocket.Chat/pull/25055)) - ### before - ![Screen Shot 2022-04-04 at 16 50 21](https://user-images.githubusercontent.com/27704687/161620921-800bf66a-806d-4f83-b2e1-073c34215001.png) - - ### after + ### before + ![Screen Shot 2022-04-04 at 16 50 21](https://user-images.githubusercontent.com/27704687/161620921-800bf66a-806d-4f83-b2e1-073c34215001.png) + + ### after ![Screen Shot 2022-04-04 at 16 49 00](https://user-images.githubusercontent.com/27704687/161620720-3e27774d-c241-46ca-b764-932a9295d709.png) ### 👩‍💻👨‍💻 Core Team 🤓 @@ -553,16 +1605,26 @@ - Adding new statistics related to voip and omnichannel ([#24887](https://github.com/RocketChat/Rocket.Chat/pull/24887)) - - Total of Canned response messages sent - - Total of tags used - - Last-Chatted Agent Preferred (enabled/disabled) - - Assign new conversations to the contact manager (enabled/disabled) - - How to handle Visitor Abandonment setting - - Amount of chats placed on hold - - VoIP Enabled - - Amount of VoIP Calls - - Amount of VoIP Extensions connected - - Amount of Calls placed on hold (1x per call) + - Total of Canned response messages sent + + - Total of tags used + + - Last-Chatted Agent Preferred (enabled/disabled) + + - Assign new conversations to the contact manager (enabled/disabled) + + - How to handle Visitor Abandonment setting + + - Amount of chats placed on hold + + - VoIP Enabled + + - Amount of VoIP Calls + + - Amount of VoIP Extensions connected + + - Amount of Calls placed on hold (1x per call) + - Fixed Session Aggregation type definitions - New omnichannel statistics and async statistics processing. ([#24749](https://github.com/RocketChat/Rocket.Chat/pull/24749)) @@ -596,8 +1658,10 @@ - **VOIP:** SidebarFooter component ([#24838](https://github.com/RocketChat/Rocket.Chat/pull/24838)) - - Improve the CallProvider code; - - Adjust the text case of the VoIP component on the FooterSidebar; + - Improve the CallProvider code; + + - Adjust the text case of the VoIP component on the FooterSidebar; + - Fix the bad behavior with the changes in queue's name. - `PaginatedSelectFiltered` not handling changes ([#24732](https://github.com/RocketChat/Rocket.Chat/pull/24732)) @@ -626,11 +1690,11 @@ - DDP Rate Limiter Translation key ([#24898](https://github.com/RocketChat/Rocket.Chat/pull/24898)) - Before: - image - - - Now: + Before: + image + + + Now: image - DDP streamer errors ([#24710](https://github.com/RocketChat/Rocket.Chat/pull/24710)) @@ -647,22 +1711,23 @@ - Handle Other Formats inside Upload Avatar ([#24226](https://github.com/RocketChat/Rocket.Chat/pull/24226) by [@nishant23122000](https://github.com/nishant23122000)) - After resolving issue #24213 : - - + After resolving issue #24213 : + + https://user-images.githubusercontent.com/53515714/150325012-91413025-786e-4ce0-ae75-629f6b05b024.mp4 - High CPU usage caused by CallProvider ([#24994](https://github.com/RocketChat/Rocket.Chat/pull/24994)) - Remove infinity loop inside useVoipClient hook. - + Remove infinity loop inside useVoipClient hook. + #closes #24970 - Ignore customClass on messages ([#24845](https://github.com/RocketChat/Rocket.Chat/pull/24845)) - LDAP avatars being rotated according to metadata even if the setting to rotate uploads is off ([#24320](https://github.com/RocketChat/Rocket.Chat/pull/24320)) - - Use the `FileUpload_RotateImages` setting (**Administration > File Upload > Rotate images on upload**) to control whether avatars should be rotated automatically based on their data (XEIF); + - Use the `FileUpload_RotateImages` setting (**Administration > File Upload > Rotate images on upload**) to control whether avatars should be rotated automatically based on their data (XEIF); + - Display the avatar image preview (orientation) according to the `FileUpload_RotateImages` setting. - Missing dependency on useEffect at CallProvider ([#24882](https://github.com/RocketChat/Rocket.Chat/pull/24882)) @@ -689,26 +1754,27 @@ - Reload roomslist after successful deletion of a room from admin panel. ([#23795](https://github.com/RocketChat/Rocket.Chat/pull/23795) by [@Aman-Maheshwari](https://github.com/Aman-Maheshwari)) - Removed the logic for calling the `rooms.adminRooms` endPoint from the `RoomsTable` Component and moved it to its parent component `RoomsPage`. - This allows to call the endPoint `rooms.adminRooms` from `EditRoomContextBar` Component which is also has `RoomPage` Component as its parent. - + Removed the logic for calling the `rooms.adminRooms` endPoint from the `RoomsTable` Component and moved it to its parent component `RoomsPage`. + This allows to call the endPoint `rooms.adminRooms` from `EditRoomContextBar` Component which is also has `RoomPage` Component as its parent. + Also added a succes toast message after the successful deletion of room. - Revert AutoComplete ([#24812](https://github.com/RocketChat/Rocket.Chat/pull/24812)) - Room archived/unarchived system messages aren't sent when editing room settings ([#24897](https://github.com/RocketChat/Rocket.Chat/pull/24897)) - - Send the "Room archived" and "Room unarchived" system messages when editing room settings (and not only when rooms are archived/unarchived with the slash-command); + - Send the "Room archived" and "Room unarchived" system messages when editing room settings (and not only when rooms are archived/unarchived with the slash-command); + - Fix the "Hide System Messages" option for the "Room archived" and "Room unarchived" system messages; - room message not load when is a new message ([#24955](https://github.com/RocketChat/Rocket.Chat/pull/24955)) - When the room object is searched for the first time, it does not exist on the front object yet (subscription), adding a fallback search for room list will guarantee to search the room details. - - before: - https://user-images.githubusercontent.com/9275105/160223241-d2319f3e-82c5-47d6-867f-695ab2361a17.mp4 - - after: + When the room object is searched for the first time, it does not exist on the front object yet (subscription), adding a fallback search for room list will guarantee to search the room details. + + before: + https://user-images.githubusercontent.com/9275105/160223241-d2319f3e-82c5-47d6-867f-695ab2361a17.mp4 + + after: https://user-images.githubusercontent.com/9275105/160223244-84d0d2a1-3d95-464d-8b8a-e264b0d4d690.mp4 - Room's message count not being incremented on import ([#24696](https://github.com/RocketChat/Rocket.Chat/pull/24696)) @@ -719,8 +1785,10 @@ - Several issues related to custom roles ([#24052](https://github.com/RocketChat/Rocket.Chat/pull/24052)) - - Throw an error when trying to delete a role (User or Subscription role) that are still being used; - - Fix "Invalid Role" error for custom roles in Role Editing sidebar; + - Throw an error when trying to delete a role (User or Subscription role) that are still being used; + + - Fix "Invalid Role" error for custom roles in Role Editing sidebar; + - Fix "Users in Role" screen for custom roles. - Show call icon only when user has extension associated ([#24752](https://github.com/RocketChat/Rocket.Chat/pull/24752)) @@ -801,17 +1869,18 @@ - Chore: Add E2E tests for livechat/room.close ([#24729](https://github.com/RocketChat/Rocket.Chat/pull/24729) by [@Muramatsu2602](https://github.com/Muramatsu2602)) - * Create a new test suite file under tests/end-to-end/api/livechat - * Create tests for the following endpoint: + * Create a new test suite file under tests/end-to-end/api/livechat + * Create tests for the following endpoint: + ivechat/room.close - Chore: Add E2E tests for livechat/visitor ([#24764](https://github.com/RocketChat/Rocket.Chat/pull/24764) by [@Muramatsu2602](https://github.com/Muramatsu2602)) - - Create a new test suite file under tests/end-to-end/api/livechat - - Create tests for the following endpoints: + - Create a new test suite file under tests/end-to-end/api/livechat + + - Create tests for the following endpoints: + livechat/visitor (create visitor, update visitor, add custom fields to visitors) -- Chore: add some missing REST definitions ([#24925](https://github.com/RocketChat/Rocket.Chat/pull/24925)) +- Chore: add some missing REST definitions ([#24925](https://github.com/RocketChat/Rocket.Chat/pull/24925) by [@gerzonc](https://github.com/gerzonc)) On the [mobile client](https://github.com/RocketChat/Rocket.Chat.ReactNative), we made an effort to collect more `REST API` definitions that are missing on the server side during our migration to TypeScript. Since we're both migrating to TypeScript, we thought it would be a good idea to share those so you guys can benefit from our initiative. @@ -861,8 +1930,10 @@ - Chore: Storybook mocking and examples improved ([#24969](https://github.com/RocketChat/Rocket.Chat/pull/24969)) - - Stories from `ee/` included; - - Differentiate root story kinds; + - Stories from `ee/` included; + + - Differentiate root story kinds; + - Mocking of `ServerContext` via Storybook parameters. - Chore: Update Livechat ([#24754](https://github.com/RocketChat/Rocket.Chat/pull/24754)) @@ -889,7 +1960,7 @@ - Regression: Custom roles displaying ID instead of name on some admin screens ([#24999](https://github.com/RocketChat/Rocket.Chat/pull/24999)) - ![image](https://user-images.githubusercontent.com/55164754/160981416-555bcaa1-c075-4260-937c-64523472da43.png) + ![image](https://user-images.githubusercontent.com/55164754/160981416-555bcaa1-c075-4260-937c-64523472da43.png) ![image](https://user-images.githubusercontent.com/55164754/160981452-6eae4e74-8425-4073-8256-472aba72b9db.png) - Regression: Error is raised when there's no Asterisk queue available yet ([#24980](https://github.com/RocketChat/Rocket.Chat/pull/24980)) @@ -918,6 +1989,7 @@ - [@aswinidev](https://github.com/aswinidev) - [@dependabot[bot]](https://github.com/dependabot[bot]) - [@eduardofcabrera](https://github.com/eduardofcabrera) +- [@gerzonc](https://github.com/gerzonc) - [@nishant23122000](https://github.com/nishant23122000) - [@ostjen](https://github.com/ostjen) - [@tkurz](https://github.com/tkurz) @@ -935,7 +2007,6 @@ - [@filipemarins](https://github.com/filipemarins) - [@gabriellsh](https://github.com/gabriellsh) - [@geekgonecrazy](https://github.com/geekgonecrazy) -- [@gerzonc](https://github.com/gerzonc) - [@ggazzo](https://github.com/ggazzo) - [@juliajforesti](https://github.com/juliajforesti) - [@matheusbsilva137](https://github.com/matheusbsilva137) @@ -985,18 +2056,18 @@ - High CPU usage caused by CallProvider ([#24994](https://github.com/RocketChat/Rocket.Chat/pull/24994)) - Remove infinity loop inside useVoipClient hook. - + Remove infinity loop inside useVoipClient hook. + #closes #24970 - Multiple issues starting a new DM ([#24955](https://github.com/RocketChat/Rocket.Chat/pull/24955)) - When the room object is searched for the first time, it does not exist on the front object yet (subscription), adding a fallback search for room list will guarantee to search the room details. - - before: - https://user-images.githubusercontent.com/9275105/160223241-d2319f3e-82c5-47d6-867f-695ab2361a17.mp4 - - after: + When the room object is searched for the first time, it does not exist on the front object yet (subscription), adding a fallback search for room list will guarantee to search the room details. + + before: + https://user-images.githubusercontent.com/9275105/160223241-d2319f3e-82c5-47d6-867f-695ab2361a17.mp4 + + after: https://user-images.githubusercontent.com/9275105/160223244-84d0d2a1-3d95-464d-8b8a-e264b0d4d690.mp4
@@ -1067,8 +2138,10 @@ - **VOIP:** SidebarFooter component ([#24838](https://github.com/RocketChat/Rocket.Chat/pull/24838)) - - Improve the CallProvider code; - - Adjust the text case of the VoIP component on the FooterSidebar; + - Improve the CallProvider code; + + - Adjust the text case of the VoIP component on the FooterSidebar; + - Fix the bad behavior with the changes in queue's name. - Broken build caused by PRs modifying same file differently ([#24863](https://github.com/RocketChat/Rocket.Chat/pull/24863)) @@ -1179,9 +2252,9 @@ - Reload roomslist after successful deletion of a room from admin panel. ([#23795](https://github.com/RocketChat/Rocket.Chat/pull/23795) by [@Aman-Maheshwari](https://github.com/Aman-Maheshwari)) - Removed the logic for calling the `rooms.adminRooms` endPoint from the `RoomsTable` Component and moved it to its parent component `RoomsPage`. - This allows to call the endPoint `rooms.adminRooms` from `EditRoomContextBar` Component which is also has `RoomPage` Component as its parent. - + Removed the logic for calling the `rooms.adminRooms` endPoint from the `RoomsTable` Component and moved it to its parent component `RoomsPage`. + This allows to call the endPoint `rooms.adminRooms` from `EditRoomContextBar` Component which is also has `RoomPage` Component as its parent. + Also added a succes toast message after the successful deletion of room. - Room's message count not being incremented on import ([#24696](https://github.com/RocketChat/Rocket.Chat/pull/24696)) @@ -1246,25 +2319,38 @@ - Marketplace sort filter ([#24567](https://github.com/RocketChat/Rocket.Chat/pull/24567)) - Implemented a sort filter for the marketplace screen. This component sorts the marketplace apps list in 4 ways, alphabetical order(A-Z), inverse alphabetical order(Z-A), most recently updated(MRU), and least recent updated(LRU). Besides that, I've generalized some components and types to increase code reusability, renamed some helpers as well as deleted some useless ones, and inserted the necessary new translations on the English i18n dictionary. - Demo gif: + Implemented a sort filter for the marketplace screen. This component sorts the marketplace apps list in 4 ways, alphabetical order(A-Z), inverse alphabetical order(Z-A), most recently updated(MRU), and least recent updated(LRU). Besides that, I've generalized some components and types to increase code reusability, renamed some helpers as well as deleted some useless ones, and inserted the necessary new translations on the English i18n dictionary. + Demo gif: ![Marketplace sort filter](https://user-images.githubusercontent.com/43561537/155033709-e07a6306-a85a-4f7f-9624-b53ba5dd7fa9.gif) - VoIP Support for Omnichannel ([#23102](https://github.com/RocketChat/Rocket.Chat/pull/23102)) - - Created VoipService to manage VoIP connections and PBX connection - - Created LivechatVoipService that will handle custom cases for livechat (creating rooms, assigning chats to queue, actions when call is finished, etc) - - Created Basic interfaces to support new services and new model - - Created Endpoints for management interfaces - - Implemented asterisk connector on VoIP service - - Created UI components to show calls incoming and to allow answering/rejecting calls - - Added new settings to control call server/management server connection values - - Added endpoints to associate Omnichannel Agents with PBX Extensions - - Added support for event listening on server side, to get metadata about calls being received/ongoing - - Created new pages to update settings & to see user-extension association - - Created new page to see ongoing calls (and past calls) - - Added support for remote hangup/hold on calls - - Implemented call metrics calculation (hold time, waiting time, talk time) + - Created VoipService to manage VoIP connections and PBX connection + + - Created LivechatVoipService that will handle custom cases for livechat (creating rooms, assigning chats to queue, actions when call is finished, etc) + + - Created Basic interfaces to support new services and new model + + - Created Endpoints for management interfaces + + - Implemented asterisk connector on VoIP service + + - Created UI components to show calls incoming and to allow answering/rejecting calls + + - Added new settings to control call server/management server connection values + + - Added endpoints to associate Omnichannel Agents with PBX Extensions + + - Added support for event listening on server side, to get metadata about calls being received/ongoing + + - Created new pages to update settings & to see user-extension association + + - Created new page to see ongoing calls (and past calls) + + - Added support for remote hangup/hold on calls + + - Implemented call metrics calculation (hold time, waiting time, talk time) + - Show a notificaiton when call is received ### 🚀 Improvements @@ -1274,26 +2360,27 @@ - Add return button in chats opened from the list of current chats ([#24458](https://github.com/RocketChat/Rocket.Chat/pull/24458) by [@LucasFASouza](https://github.com/LucasFASouza)) - The new return button for Omnichannel chats came out with release 3.15 but the feature was only available for chats that were opened from Omnichannel Contact Center. - Now, the same UI/UX is supported for chats opened from Current Chats list. - - ![image](https://user-images.githubusercontent.com/32396925/153283190-bd5c9748-c36b-4874-a704-6043afc7e3a1.png) - - The chat now opens in the Omnichannel settings and has the return button so the user can go back to the Current Chats list. - + The new return button for Omnichannel chats came out with release 3.15 but the feature was only available for chats that were opened from Omnichannel Contact Center. + Now, the same UI/UX is supported for chats opened from Current Chats list. + + ![image](https://user-images.githubusercontent.com/32396925/153283190-bd5c9748-c36b-4874-a704-6043afc7e3a1.png) + + The chat now opens in the Omnichannel settings and has the return button so the user can go back to the Current Chats list. + ![image](https://user-images.githubusercontent.com/32396925/153285591-fad8e4a0-d2ea-4a02-8b2a-15e383b3c876.png) - Add tooltips on action buttons of Canned Response message composer ([#24483](https://github.com/RocketChat/Rocket.Chat/pull/24483) by [@LucasFASouza](https://github.com/LucasFASouza)) - The tooltips were missing on the action buttons of CR message composer. - - ![image](https://user-images.githubusercontent.com/32396925/153620327-91107245-4b47-4d39-a99a-6da6d1cf5734.png) - + The tooltips were missing on the action buttons of CR message composer. + + ![image](https://user-images.githubusercontent.com/32396925/153620327-91107245-4b47-4d39-a99a-6da6d1cf5734.png) + Users can now feel more encouraged to use these actions knowing what they are supposed to do. - Add user to room on "Click to Join!" button press ([#24041](https://github.com/RocketChat/Rocket.Chat/pull/24041) by [@ostjen](https://github.com/ostjen)) - - Add user to room on "Click to Join!" button press; + - Add user to room on "Click to Join!" button press; + - Display the "Join" button in discussions inside channels (keeping the behavior consistent with discussions inside groups). - Added a new "All" tab which shows all integrations in Integrations ([#24109](https://github.com/RocketChat/Rocket.Chat/pull/24109) by [@aswinidev](https://github.com/aswinidev)) @@ -1308,10 +2395,10 @@ - CloudLoginModal visual consistency ([#24334](https://github.com/RocketChat/Rocket.Chat/pull/24334)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/151585064-dc6a1e29-9903-4241-8fbd-dfbe6c55fbef.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/151585064-dc6a1e29-9903-4241-8fbd-dfbe6c55fbef.png) + + ### after ![Screen Shot 2022-01-28 at 13 32 02](https://user-images.githubusercontent.com/27704687/151585101-75b98502-9aae-4198-bc3e-4956750e5d8b.png) - Convert tag edit with department data to tsx ([#24369](https://github.com/RocketChat/Rocket.Chat/pull/24369) by [@LucasFASouza](https://github.com/LucasFASouza)) @@ -1324,23 +2411,23 @@ - Purchase Type Filter for marketplace apps and Categories filter anchor refactoring ([#24454](https://github.com/RocketChat/Rocket.Chat/pull/24454)) - Implemented a filter by purchase type(free or paid) component for the apps screen of the marketplace. Besides that, new entries on the dictionary, fixed some parts of the App type (purchaseType was typed as unknown and price as string), and created some helpers to work alongside the filter. Will be refactoring the categories filter anchor and then will open this PR for reviews. - - Demo gif: - ![purchaseTypeFIlter](https://user-images.githubusercontent.com/43561537/153101228-7b7ebdc3-2d34-420f-aa9d-f7cbc8d4b53f.gif) - - Refactored the categories filter anchor from a plain fuselage select to a select button with dynamic colors. - Demo gif: + Implemented a filter by purchase type(free or paid) component for the apps screen of the marketplace. Besides that, new entries on the dictionary, fixed some parts of the App type (purchaseType was typed as unknown and price as string), and created some helpers to work alongside the filter. Will be refactoring the categories filter anchor and then will open this PR for reviews. + + Demo gif: + ![purchaseTypeFIlter](https://user-images.githubusercontent.com/43561537/153101228-7b7ebdc3-2d34-420f-aa9d-f7cbc8d4b53f.gif) + + Refactored the categories filter anchor from a plain fuselage select to a select button with dynamic colors. + Demo gif: ![New categories filter anchor(PR)](https://user-images.githubusercontent.com/43561537/153422427-28012b7d-e0ec-45f4-861d-c9368c57ad04.gif) - Replace AutoComplete in UserAutoComplete & UserAutoCompleteMultiple components ([#24529](https://github.com/RocketChat/Rocket.Chat/pull/24529)) - This PR replaces a deprecated fuselage's component `AutoComplete` in favor of `Select` and `MultiSelect` which fixes some of UX/UI issues in selecting users - - ### before - ![Screen Shot 2022-02-19 at 13 33 28](https://user-images.githubusercontent.com/27704687/154809737-8181a06c-4f20-48ea-90f7-01e828b9a452.png) - - ### after + This PR replaces a deprecated fuselage's component `AutoComplete` in favor of `Select` and `MultiSelect` which fixes some of UX/UI issues in selecting users + + ### before + ![Screen Shot 2022-02-19 at 13 33 28](https://user-images.githubusercontent.com/27704687/154809737-8181a06c-4f20-48ea-90f7-01e828b9a452.png) + + ### after ![Screen Shot 2022-02-19 at 13 30 58](https://user-images.githubusercontent.com/27704687/154809653-a8ec9a80-c0dd-4a25-9c00-0f96147d79e9.png) - Skip encryption for slash commands in E2E rooms ([#24475](https://github.com/RocketChat/Rocket.Chat/pull/24475)) @@ -1349,15 +2436,17 @@ - Team system messages feedback ([#24209](https://github.com/RocketChat/Rocket.Chat/pull/24209) by [@ostjen](https://github.com/ostjen)) - - Delete some keys that aren't being used (eg: User_left_female). - - Add new Teams' system messages: - - `added-user-to-team`: **added** @\user to this Team; - - `removed-user-from-team`: **removed** @\user from this Team; - - `user-converted-to-team`: **converted** #\room to a Team; - - `user-converted-to-channel`: **converted** #\room to a Channel; - - `user-removed-room-from-team`: **removed** @\user from this Team; - - `user-deleted-room-from-team`: **deleted** #\room from this Team; - - `user-added-room-to-team`: **deleted** #\room to this Team; + - Delete some keys that aren't being used (eg: User_left_female). + + - Add new Teams' system messages: + - `added-user-to-team`: **added** @\user to this Team; + - `removed-user-from-team`: **removed** @\user from this Team; + - `user-converted-to-team`: **converted** #\room to a Team; + - `user-converted-to-channel`: **converted** #\room to a Channel; + - `user-removed-room-from-team`: **removed** @\user from this Team; + - `user-deleted-room-from-team`: **deleted** #\room from this Team; + - `user-added-room-to-team`: **deleted** #\room to this Team; + - Add the corresponding options to hide each new system message and the missing `ujt` and `ult` hide options. ### 🐛 Bug fixes @@ -1375,8 +2464,10 @@ - Issues on selecting users when importing CSV ([#24253](https://github.com/RocketChat/Rocket.Chat/pull/24253)) - * Fix users selecting by fixing their _id - * Add condition to disable 'Start importing' button if `usersCount`, `channelsCount` and `messageCount` equals 0, or if messageCount is alone + * Fix users selecting by fixing their _id + + * Add condition to disable 'Start importing' button if `usersCount`, `channelsCount` and `messageCount` equals 0, or if messageCount is alone + * Remove `disabled={usersCount === 0}` on user Tab - OAuth mismatch redirect_uri error ([#24450](https://github.com/RocketChat/Rocket.Chat/pull/24450)) @@ -1537,9 +2628,12 @@ - Regression: Error setting user avatars and mentioning rooms on Slack Import ([#24585](https://github.com/RocketChat/Rocket.Chat/pull/24585)) - - Fix `Mentioned room not found` error when importing rooms from Slack; - - Fix `Forbidden` error when setting avatars for users imported from Slack (on user import/creation); - - Fix incorrect message count on imported rooms; + - Fix `Mentioned room not found` error when importing rooms from Slack; + + - Fix `Forbidden` error when setting avatars for users imported from Slack (on user import/creation); + + - Fix incorrect message count on imported rooms; + - Fix missing username on messages imported from Slack; - Regression: Error when trying to load name of dm rooms for avatars and notifications ([#24583](https://github.com/RocketChat/Rocket.Chat/pull/24583)) @@ -1570,16 +2664,16 @@ - Regression: No audio when call comes from Skype/IP phone ([#24602](https://github.com/RocketChat/Rocket.Chat/pull/24602)) - The audio was not rendered because of re-rendering of react element based on - queueCounter and roomInfo. queueCounter and roomInfo cause the dom to re-render when call gets accepted - because after accepting call, queueCounter changes or a room gets created. - The audio element gets recreated. But VoIP user probably holds the old one. - The behaviour is not predictable when such case happens. If everything gets cleanly setup, - even if the audio element goes headless, it still continues to play the remote audio. - But in other cases, it is unreferenced the one on dom has its srcObject as null. - This causes no audio. - - This fix provides a way to re-initialise the rendering elements in VoIP user + The audio was not rendered because of re-rendering of react element based on + queueCounter and roomInfo. queueCounter and roomInfo cause the dom to re-render when call gets accepted + because after accepting call, queueCounter changes or a room gets created. + The audio element gets recreated. But VoIP user probably holds the old one. + The behaviour is not predictable when such case happens. If everything gets cleanly setup, + even if the audio element goes headless, it still continues to play the remote audio. + But in other cases, it is unreferenced the one on dom has its srcObject as null. + This causes no audio. + + This fix provides a way to re-initialise the rendering elements in VoIP user and calls this function on useEffect() if the re-render has happen. - Regression: Prevent button from losing state when rerendering ([#24648](https://github.com/RocketChat/Rocket.Chat/pull/24648)) @@ -1632,6 +2726,43 @@ - [@ujorgeleite](https://github.com/ujorgeleite) - [@yash-rajpal](https://github.com/yash-rajpal) +# 4.4.5 + +`2022-05-30 · 1 🐛 · 1 👩‍💻👨‍💻` + +### Engine versions +- Node: `14.18.2` +- NPM: `6.14.15` +- MongoDB: `3.6, 4.0, 4.2, 4.4, 5.0` +- Apps-Engine: `1.30.0` + +### 🐛 Bug fixes + + +- Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) + +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@ggazzo](https://github.com/ggazzo) + +# 4.4.4 +`2022-05-20 · 1 🐛 · 1 👩‍💻👨‍💻` + +### Engine versions +- Node: `14.18.3` +- NPM: `6.14.15` +- MongoDB: `3.6, 4.0, 4.2, 4.4, 5.0` +- Apps-Engine: `1.30.0` + +### 🐛 Bug fixes + + +- Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) + +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@ggazzo](https://github.com/ggazzo) + # 4.4.3 `2022-04-07 · 2 🐛 · 2 👩‍💻👨‍💻` @@ -1747,16 +2878,16 @@ - App empty states component, category filter and empty states error variation implementations ([#23818](https://github.com/RocketChat/Rocket.Chat/pull/23818)) - Created and implemented the category filters component: - Demo gif: - ![categories_filter_demo](https://user-images.githubusercontent.com/43561537/148579731-1de83bf8-91ce-47e7-b6e5-7781384fdef9.gif) - - Created and implemented the empty states(States on fuselage) component: - Demo gif: - ![empty_states_demo](https://user-images.githubusercontent.com/43561537/148579930-49c2ff69-88f4-4a57-a24a-060868d76209.gif) - - Implemented a variations system for the empty states component and created a error message for network outage: - Demo gif: + Created and implemented the category filters component: + Demo gif: + ![categories_filter_demo](https://user-images.githubusercontent.com/43561537/148579731-1de83bf8-91ce-47e7-b6e5-7781384fdef9.gif) + + Created and implemented the empty states(States on fuselage) component: + Demo gif: + ![empty_states_demo](https://user-images.githubusercontent.com/43561537/148579930-49c2ff69-88f4-4a57-a24a-060868d76209.gif) + + Implemented a variations system for the empty states component and created a error message for network outage: + Demo gif: ![empty_states_variation_demo](https://user-images.githubusercontent.com/43561537/148580047-39adf8ef-2ee0-4c3e-8709-5faea4a5e335.gif) - Apple Login ([#24060](https://github.com/RocketChat/Rocket.Chat/pull/24060)) @@ -1772,41 +2903,42 @@ - Admin page header buttons consistency ([#24168](https://github.com/RocketChat/Rocket.Chat/pull/24168)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/149371746-66e5e6e4-5c8e-46d7-b230-ecbc4502b665.png) - ![image](https://user-images.githubusercontent.com/27704687/149371759-c3d948af-d877-486c-a263-da12c0b70185.png) - ![image](https://user-images.githubusercontent.com/27704687/149371769-09b0623d-a5c5-43e0-a4ef-73ba0bcf1730.png) - ![image](https://user-images.githubusercontent.com/27704687/149371782-b1b898c7-3aad-47ee-8c5c-cf9cb816d72b.png) - ![image](https://user-images.githubusercontent.com/27704687/149371796-b88514d2-3c8d-4d9d-a45b-24f48783e95c.png) - - - ### after - ![Screen Shot 2022-01-13 at 13 38 00](https://user-images.githubusercontent.com/27704687/149371084-668d5f14-e03e-4cdd-8763-058db9c2f16c.png) - ![Screen Shot 2022-01-13 at 13 38 18](https://user-images.githubusercontent.com/27704687/149371126-23a059cb-efa7-4ffb-970b-da23d8742bb1.png) - ![Screen Shot 2022-01-13 at 13 38 38](https://user-images.githubusercontent.com/27704687/149371181-c8bbbbbd-ed6d-48b4-844f-09fdce0080b6.png) - ![Screen Shot 2022-01-13 at 13 38 59](https://user-images.githubusercontent.com/27704687/149371232-3d292f5e-e8b0-41e1-b065-90a80a5f08ce.png) + ### before + ![image](https://user-images.githubusercontent.com/27704687/149371746-66e5e6e4-5c8e-46d7-b230-ecbc4502b665.png) + ![image](https://user-images.githubusercontent.com/27704687/149371759-c3d948af-d877-486c-a263-da12c0b70185.png) + ![image](https://user-images.githubusercontent.com/27704687/149371769-09b0623d-a5c5-43e0-a4ef-73ba0bcf1730.png) + ![image](https://user-images.githubusercontent.com/27704687/149371782-b1b898c7-3aad-47ee-8c5c-cf9cb816d72b.png) + ![image](https://user-images.githubusercontent.com/27704687/149371796-b88514d2-3c8d-4d9d-a45b-24f48783e95c.png) + + + ### after + ![Screen Shot 2022-01-13 at 13 38 00](https://user-images.githubusercontent.com/27704687/149371084-668d5f14-e03e-4cdd-8763-058db9c2f16c.png) + ![Screen Shot 2022-01-13 at 13 38 18](https://user-images.githubusercontent.com/27704687/149371126-23a059cb-efa7-4ffb-970b-da23d8742bb1.png) + ![Screen Shot 2022-01-13 at 13 38 38](https://user-images.githubusercontent.com/27704687/149371181-c8bbbbbd-ed6d-48b4-844f-09fdce0080b6.png) + ![Screen Shot 2022-01-13 at 13 38 59](https://user-images.githubusercontent.com/27704687/149371232-3d292f5e-e8b0-41e1-b065-90a80a5f08ce.png) ![Screen Shot 2022-01-13 at 13 39 08](https://user-images.githubusercontent.com/27704687/149371263-64fd09e4-456e-48ee-9976-83f42b90e4d9.png) - Importer text for CSV upload file format ([#23817](https://github.com/RocketChat/Rocket.Chat/pull/23817) by [@ostjen](https://github.com/ostjen)) - lib/Statistics improved and metrics collector ([#24177](https://github.com/RocketChat/Rocket.Chat/pull/24177) by [@ostjen](https://github.com/ostjen)) - - On `statistics` object the property `get` is an async function now. - - We need to collect additional data of feature activation through the statistics collector. + - On `statistics` object the property `get` is an async function now. + + - We need to collect additional data of feature activation through the statistics collector. - Some codes were splitted into another file just to organize. - Limit recent emojis to 27 ([#24210](https://github.com/RocketChat/Rocket.Chat/pull/24210)) - Limits the recent emoji list to a maximum of 3 rows instead of listing every emoji you've used so far. - + Limits the recent emoji list to a maximum of 3 rows instead of listing every emoji you've used so far. + ![image](https://user-images.githubusercontent.com/8591547/150033087-92721b76-9203-42fe-ac2e-5b9eca50edab.png) - Rewrite AddWebdavAccountModal to React Component ([#24070](https://github.com/RocketChat/Rocket.Chat/pull/24070)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/147777054-bf2f84e4-5226-4ebc-ab6e-287b83889b85.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/147777054-bf2f84e4-5226-4ebc-ab6e-287b83889b85.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/147769132-2b938ae8-aba3-4230-876d-572e46268b9a.png) - Rewrite Omnichannel Queue Page to React ([#24176](https://github.com/RocketChat/Rocket.Chat/pull/24176)) @@ -1815,28 +2947,32 @@ - Rewrite roomNotFound to React Component ([#24044](https://github.com/RocketChat/Rocket.Chat/pull/24044)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/147608307-468e6955-5db4-40c5-86a7-91448ac03427.png) - ![image](https://user-images.githubusercontent.com/27704687/147608377-d979adf5-615f-4180-8587-449369bf87f8.png) - - ### after - ![image](https://user-images.githubusercontent.com/27704687/149158027-e39bc0a0-4c33-465b-83e0-873e558a037b.png) + ### before + ![image](https://user-images.githubusercontent.com/27704687/147608307-468e6955-5db4-40c5-86a7-91448ac03427.png) + ![image](https://user-images.githubusercontent.com/27704687/147608377-d979adf5-615f-4180-8587-449369bf87f8.png) + + ### after + ![image](https://user-images.githubusercontent.com/27704687/149158027-e39bc0a0-4c33-465b-83e0-873e558a037b.png) ![image](https://user-images.githubusercontent.com/27704687/149157692-3e73c0b4-1759-430c-b1c4-b521e47d774d.png) - Setup Wizard Registration Flow ([#23676](https://github.com/RocketChat/Rocket.Chat/pull/23676)) - This pull request brings a few improvements in our setup wizard flow, the very first contact with a Rocket.Chat. Some of them: - - A brand new visual design; - - Form validation improves; - - Allow users to navigate back to all steps; - - Optimized steps to register your workspace or keep standalone. And many more! - - + This pull request brings a few improvements in our setup wizard flow, the very first contact with a Rocket.Chat. Some of them: + + - A brand new visual design; + + - Form validation improves; + + - Allow users to navigate back to all steps; + + - Optimized steps to register your workspace or keep standalone. And many more! + + ![Kapture 2022-01-20 at 11 19 47](https://user-images.githubusercontent.com/27704687/150356868-425666b4-511f-4690-9ce5-e61b839b1d19.gif) - Show Channel Icons on Room Header & Info panels ([#24239](https://github.com/RocketChat/Rocket.Chat/pull/24239)) - Updates Omnichannel Header & room Info component to render the source info + Updates Omnichannel Header & room Info component to render the source info Built on top of https://github.com/RocketChat/Rocket.Chat/pull/24237 - Throw 404 error in invalid endpoints ([#24053](https://github.com/RocketChat/Rocket.Chat/pull/24053)) @@ -1866,13 +3002,15 @@ - Apps Contextual Bar not carrying title and room information ([#24241](https://github.com/RocketChat/Rocket.Chat/pull/24241)) - Fixes: - - - the app's name being rendered instead of the view's title, - - the room's information (`IRoom`) wasn't being sent to the app when a `block action` happened - - Fixed behavior with correct view title and room information included in the block action event: - + Fixes: + + + - the app's name being rendered instead of the view's title, + + - the room's information (`IRoom`) wasn't being sent to the app when a `block action` happened + + Fixed behavior with correct view title and room information included in the block action event: + https://user-images.githubusercontent.com/733282/150420847-59bfcf8a-24a9-4dc5-8609-0d92dba38b70.mp4 - Avoid updating all rooms with visitor abandonment queries ([#24252](https://github.com/RocketChat/Rocket.Chat/pull/24252)) @@ -1885,24 +3023,26 @@ - Custom Emoji Image preview ([#24117](https://github.com/RocketChat/Rocket.Chat/pull/24117) by [@sidmohanty11](https://github.com/sidmohanty11)) - Before, - - ![custom-img-preview-rc3](https://user-images.githubusercontent.com/73601258/148431936-c82d4200-69b1-484b-8be2-d72f5c28202b.png) - - After, - - ![custom-img-preview-rc1](https://user-images.githubusercontent.com/73601258/148431955-8842a2e3-b9f3-4d68-b0d8-c5444419f767.png) - - also if any error, (for example - if we upload a video mp4 file) - + Before, + + ![custom-img-preview-rc3](https://user-images.githubusercontent.com/73601258/148431936-c82d4200-69b1-484b-8be2-d72f5c28202b.png) + + After, + + ![custom-img-preview-rc1](https://user-images.githubusercontent.com/73601258/148431955-8842a2e3-b9f3-4d68-b0d8-c5444419f767.png) + + also if any error, (for example - if we upload a video mp4 file) + ![custom-img-preview-rc2](https://user-images.githubusercontent.com/73601258/148431998-64bc1fbb-9958-495c-89c1-61df06adec75.png) - Discussions not loading message history if not joined ([#24316](https://github.com/RocketChat/Rocket.Chat/pull/24316)) - Ensure Firefox 91 ESR support ([#24096](https://github.com/RocketChat/Rocket.Chat/pull/24096)) - It: - - Adds `Firefox ESR` to `browserslist`; + It: + + - Adds `Firefox ESR` to `browserslist`; + - Upgrades `@rocket.chat/fuselage-hooks` to overcome a bug related to Firefox implementation of `ResizeObserver` API. - Enter not working on modal's multi-line input ([#23981](https://github.com/RocketChat/Rocket.Chat/pull/23981)) @@ -1913,12 +3053,12 @@ - Filter ability for admin room checkboxes ([#23970](https://github.com/RocketChat/Rocket.Chat/pull/23970) by [@sidmohanty11](https://github.com/sidmohanty11)) - Now, - - https://user-images.githubusercontent.com/73601258/146380812-d3aa5561-64e1-4515-a639-3b6d87432ae4.mp4 - - Before, - + Now, + + https://user-images.githubusercontent.com/73601258/146380812-d3aa5561-64e1-4515-a639-3b6d87432ae4.mp4 + + Before, + https://user-images.githubusercontent.com/73601258/146385538-85a70fce-9974-40e0-8757-eda1a5d411b7.mp4 - Fixed broken links in setup wizard ([#24248](https://github.com/RocketChat/Rocket.Chat/pull/24248) by [@Himanshu664](https://github.com/Himanshu664)) @@ -1947,8 +3087,8 @@ - Solved Report Message Blank ([#24262](https://github.com/RocketChat/Rocket.Chat/pull/24262) by [@nishant23122000](https://github.com/nishant23122000)) - After resolving issue #24261 : - + After resolving issue #24261 : + https://user-images.githubusercontent.com/53515714/150629459-5f0a9cf6-9b0e-417f-8fc1-44c810bd5428.mp4 - Wrong german translation for 2FA-Promt ([#24126](https://github.com/RocketChat/Rocket.Chat/pull/24126) by [@mbreslein-thd](https://github.com/mbreslein-thd)) @@ -2059,8 +3199,8 @@ - Regression: Remove extra call to `useOutsideClick` hook not following the function signature ([#24243](https://github.com/RocketChat/Rocket.Chat/pull/24243)) - It migrates `client/sidebar/header/actions/Search` component to TypeScript and mitigates a invalid call to `Array.prototype.every`: - + It migrates `client/sidebar/header/actions/Search` component to TypeScript and mitigates a invalid call to `Array.prototype.every`: + ![image](https://user-images.githubusercontent.com/2263066/150441397-3ff403b2-10c1-4a29-b37f-892d7d4a9252.png) - Regression: Standalone register path failing when saving data ([#24324](https://github.com/RocketChat/Rocket.Chat/pull/24324)) @@ -2215,8 +3355,10 @@ - Ensure Firefox 91 ESR support ([#24096](https://github.com/RocketChat/Rocket.Chat/pull/24096)) - It: - - Adds `Firefox ESR` to `browserslist`; + It: + + - Adds `Firefox ESR` to `browserslist`; + - Upgrades `@rocket.chat/fuselage-hooks` to overcome a bug related to Firefox implementation of `ResizeObserver` API. - Enter not working on modal's multi-line input ([#23981](https://github.com/RocketChat/Rocket.Chat/pull/23981)) @@ -2262,8 +3404,8 @@ - **APPS:** Allow apps to open contextual bar ([#23843](https://github.com/RocketChat/Rocket.Chat/pull/23843)) - Opens a contextual bar using app ui interactions (`CONTEXTUAL_BAR_OPEN`) - + Opens a contextual bar using app ui interactions (`CONTEXTUAL_BAR_OPEN`) + https://user-images.githubusercontent.com/733282/146704076-d2d115f2-6ca6-4ed0-b450-81be580889a4.mp4 - **APPS:** Allow Rocket.Chat Apps to register custom action buttons ([#23679](https://github.com/RocketChat/Rocket.Chat/pull/23679)) @@ -2274,7 +3416,7 @@ - **APPS:** Possibility to set room closer via Apps LivechatBridge.closeRoom ([#21025](https://github.com/RocketChat/Rocket.Chat/pull/21025)) - Add an optional param named `closer` into `LivechatBridge.closeRoom` so that it will be possible to close the room and send a close room message with the correct room closer. + Add an optional param named `closer` into `LivechatBridge.closeRoom` so that it will be possible to close the room and send a close room message with the correct room closer. If the param is not passed, use the room visitor as the room closer. - **EE:** Introduce fallback department support ([#23939](https://github.com/RocketChat/Rocket.Chat/pull/23939)) @@ -2294,7 +3436,8 @@ - Update "Message Erasure Type" setting's description ([#23879](https://github.com/RocketChat/Rocket.Chat/pull/23879)) - - Improves the "Message Erasure Type" setting's description by providing more details regarding the expected behavior of each option ("Keep Messages and User Name", "Delete All Messages" and "Remove link between user and messages"); + - Improves the "Message Erasure Type" setting's description by providing more details regarding the expected behavior of each option ("Keep Messages and User Name", "Delete All Messages" and "Remove link between user and messages"); + - Remove outdated translations (for this setting's description). - Webdav methods sanitization ([#23924](https://github.com/RocketChat/Rocket.Chat/pull/23924)) @@ -2336,23 +3479,23 @@ - Headers already sent error when user data download is disabled ([#23805](https://github.com/RocketChat/Rocket.Chat/pull/23805)) - When using the export message tool when trying to download the file using the link sent via email if the feature "Export User Data" is disabled an error was being thrown causing the request to halt. - - This is the error shown in the logs: - ``` - === UnHandledPromiseRejection === - Error [ERR_HTTP_HEADERS_SENT] [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client - at ServerResponse.setHeader (_http_outgoing.js:530:11) - at ServerResponse.res.setHeader (/app/bundle/programs/server/npm/node_modules/meteor/simple_json-routes/node_modules/connect/lib/patch.js:134:22) - at app/user-data-download/server/exportDownload.js:14:7 - at /app/bundle/programs/server/npm/node_modules/meteor/promise/node_modules/meteor-promise/fiber_pool.js:43:40 { - code: 'ERR_HTTP_HEADERS_SENT' - } - --------------------------------- - Errors like this can cause oplog processing errors. - Setting EXIT_UNHANDLEDPROMISEREJECTION will cause the process to exit allowing your service to automatically restart the process - Future node.js versions will automatically exit the process - ================================= + When using the export message tool when trying to download the file using the link sent via email if the feature "Export User Data" is disabled an error was being thrown causing the request to halt. + + This is the error shown in the logs: + ``` + === UnHandledPromiseRejection === + Error [ERR_HTTP_HEADERS_SENT] [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client + at ServerResponse.setHeader (_http_outgoing.js:530:11) + at ServerResponse.res.setHeader (/app/bundle/programs/server/npm/node_modules/meteor/simple_json-routes/node_modules/connect/lib/patch.js:134:22) + at app/user-data-download/server/exportDownload.js:14:7 + at /app/bundle/programs/server/npm/node_modules/meteor/promise/node_modules/meteor-promise/fiber_pool.js:43:40 { + code: 'ERR_HTTP_HEADERS_SENT' + } + --------------------------------- + Errors like this can cause oplog processing errors. + Setting EXIT_UNHANDLEDPROMISEREJECTION will cause the process to exit allowing your service to automatically restart the process + Future node.js versions will automatically exit the process + ================================= ``` - Jitsi call already ended ([#23904](https://github.com/RocketChat/Rocket.Chat/pull/23904) by [@Aman-Maheshwari](https://github.com/Aman-Maheshwari)) @@ -2363,23 +3506,23 @@ - Missing custom user status ellipsis ([#23831](https://github.com/RocketChat/Rocket.Chat/pull/23831)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/144270229-baca14f5-e168-42b7-86d1-e7217be561a9.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/144270229-baca14f5-e168-42b7-86d1-e7217be561a9.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/144274255-39216e69-8283-45c5-8a77-b835d284f655.png) - Missing edit icon in sequential thread messages ([#23948](https://github.com/RocketChat/Rocket.Chat/pull/23948)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/146083450-ca6d7197-dc55-4058-8212-943b42c82473.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/146083450-ca6d7197-dc55-4058-8212-943b42c82473.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/146083055-36c9731a-33c6-483a-93a5-1355d8689e3a.png) - Modal keeps state if reset too fast. ([#23791](https://github.com/RocketChat/Rocket.Chat/pull/23791)) - ~Queued updates so the Modal has a chance to close.~ + ~Queued updates so the Modal has a chance to close.~ Used a random key to ensure modal doesn't keep it's state. - OTR not working ([#23973](https://github.com/RocketChat/Rocket.Chat/pull/23973)) @@ -2394,8 +3537,8 @@ - Segmentation fault on CentOS 7 due to outdated `sharp` ([#23796](https://github.com/RocketChat/Rocket.Chat/pull/23796)) - Upgrades `sharp` to avoid a segmentation fault on CentOS 7 during startup related to `sharp.node` being loaded via `process.dlopen()`. - + Upgrades `sharp` to avoid a segmentation fault on CentOS 7 during startup related to `sharp.node` being loaded via `process.dlopen()`. + Suggested as a fix for versions `4.0.x` and `4.1.x`. - teams.leave client usage ([#23959](https://github.com/RocketChat/Rocket.Chat/pull/23959)) @@ -2408,10 +3551,10 @@ - Wrong button for non trial apps ([#23861](https://github.com/RocketChat/Rocket.Chat/pull/23861)) - This PR solves a bug on the marketplace that was happening with WhatsApp where it was displaying a trial button even though it didn't have a free trial period. The new verification I've added checks if the app is subscription-based and then checks if it has 0 trial days in all of its tiers. If it does, it shows a subscribe button. If it doesn't, it displays a trial button. Also, I've exposed the itsEnterpriseOnly flag as an extra measure in the case of apps like Facebook Messenger that are enterprise-only and consequently should show the subscribe button. - Before: - ![image](https://user-images.githubusercontent.com/43561537/144687716-baef06ce-7a80-42fc-8393-b0283c0f349a.png) - After: + This PR solves a bug on the marketplace that was happening with WhatsApp where it was displaying a trial button even though it didn't have a free trial period. The new verification I've added checks if the app is subscription-based and then checks if it has 0 trial days in all of its tiers. If it does, it shows a subscribe button. If it doesn't, it displays a trial button. Also, I've exposed the itsEnterpriseOnly flag as an extra measure in the case of apps like Facebook Messenger that are enterprise-only and consequently should show the subscribe button. + Before: + ![image](https://user-images.githubusercontent.com/43561537/144687716-baef06ce-7a80-42fc-8393-b0283c0f349a.png) + After: ![image](https://user-images.githubusercontent.com/43561537/144687924-1a3eb3a7-783f-4450-abd2-1efa0de64658.png)
@@ -2436,46 +3579,48 @@ - Chore: Centralize email validation functionality ([#23816](https://github.com/RocketChat/Rocket.Chat/pull/23816)) - - Create lib for validating emails + - Create lib for validating emails + - Modify places that validate emails to use the new central function - Chore: Change Menu props to accept next fuselage version ([#23839](https://github.com/RocketChat/Rocket.Chat/pull/23839)) - Chore: Create script to add new migrations ([#23822](https://github.com/RocketChat/Rocket.Chat/pull/23822)) - - Create NPM script to add new migrations + - Create NPM script to add new migrations + - TODO: Infer next migration number from file list - Chore: Deleted LivechatPageVisited ([#23993](https://github.com/RocketChat/Rocket.Chat/pull/23993) by [@ostjen](https://github.com/ostjen)) - Chore: Enable prefer-optional-chain ESLint rule for TypeScript files ([#23786](https://github.com/RocketChat/Rocket.Chat/pull/23786)) - > Code is bad. It rots. It requires periodic maintenance. It has bugs that need to be found. New features mean old code has to be adapted. - > The more code you have, the more places there are for bugs to hide. The longer checkouts or compiles take. The longer it takes a new employee to make sense of your system. If you have to refactor there's more stuff to move around. - > Furthermore, more code often means less flexibility and functionality. This is counter-intuitive, but a lot of times a simple, elegant solution is faster and more general than the plodding mess of code produced by a programmer of lesser talent. - > Code is produced by engineers. To make more code requires more engineers. Engineers have n^2 communication costs, and all that code they add to the system, while expanding its capability, also increases a whole basket of costs. - > You should do whatever possible to increase the productivity of individual programmers in terms of the expressive power of the code they write. Less code to do the same thing (and possibly better). Less programmers to hire. Less organizational communication costs. - - — [Rich Skrenta][1] - - Mixing two problem domains in code is prone to errors. In this small example - - ```ts - declare const y: { z: unknown } | undefined; - - const x = y && y.z; - ``` - - we're (1) checking the nullity of `y` and (2) attributing `y.z` to `x`, where (2) is _clearly_ the main problem we're solving with code. The optional chaining is a good technique to handle nullity as a mere implementation detail: - - ```ts - declare const y: { z: unknown } | undefined; - - const x = y?.z; - ``` - - Attributing `y.z` to `x` is more easily readable than the nullity check of `y`. - + > Code is bad. It rots. It requires periodic maintenance. It has bugs that need to be found. New features mean old code has to be adapted. + > The more code you have, the more places there are for bugs to hide. The longer checkouts or compiles take. The longer it takes a new employee to make sense of your system. If you have to refactor there's more stuff to move around. + > Furthermore, more code often means less flexibility and functionality. This is counter-intuitive, but a lot of times a simple, elegant solution is faster and more general than the plodding mess of code produced by a programmer of lesser talent. + > Code is produced by engineers. To make more code requires more engineers. Engineers have n^2 communication costs, and all that code they add to the system, while expanding its capability, also increases a whole basket of costs. + > You should do whatever possible to increase the productivity of individual programmers in terms of the expressive power of the code they write. Less code to do the same thing (and possibly better). Less programmers to hire. Less organizational communication costs. + + — [Rich Skrenta][1] + + Mixing two problem domains in code is prone to errors. In this small example + + ```ts + declare const y: { z: unknown } | undefined; + + const x = y && y.z; + ``` + + we're (1) checking the nullity of `y` and (2) attributing `y.z` to `x`, where (2) is _clearly_ the main problem we're solving with code. The optional chaining is a good technique to handle nullity as a mere implementation detail: + + ```ts + declare const y: { z: unknown } | undefined; + + const x = y?.z; + ``` + + Attributing `y.z` to `x` is more easily readable than the nullity check of `y`. + This PR aims to add `@typescript-eslint/prefer-optional-chain` rule to ESlint configuration at warning level. - Chore: Fix hasRole warning ([#23914](https://github.com/RocketChat/Rocket.Chat/pull/23914)) @@ -2518,8 +3663,8 @@ - Regression: Ensure room action buttons only appear inside menu ([#24035](https://github.com/RocketChat/Rocket.Chat/pull/24035)) - Currently, action buttons registered by apps to appear in the ROOM_ACTION context show in the first position of the list, but since they don't have an icon they are effectively invisible in the tab bar. - + Currently, action buttons registered by apps to appear in the ROOM_ACTION context show in the first position of the list, but since they don't have an icon they are effectively invisible in the tab bar. + Here we change the order configuration of the button so we make sure it only shows inside the room menu - Regression: Fix omnichannel empty source usage ([#24008](https://github.com/RocketChat/Rocket.Chat/pull/24008)) @@ -2622,18 +3767,18 @@ - Segmentation fault on CentOS 7 due to outdated `sharp` ([#23796](https://github.com/RocketChat/Rocket.Chat/pull/23796)) - Upgrades `sharp` to avoid a segmentation fault on CentOS 7 during startup related to `sharp.node` being loaded via `process.dlopen()`. - + Upgrades `sharp` to avoid a segmentation fault on CentOS 7 during startup related to `sharp.node` being loaded via `process.dlopen()`. + Suggested as a fix for versions `4.0.x` and `4.1.x`. - teams.removeMembers client usage ([#23857](https://github.com/RocketChat/Rocket.Chat/pull/23857)) - Wrong button for non trial apps ([#23861](https://github.com/RocketChat/Rocket.Chat/pull/23861)) - This PR solves a bug on the marketplace that was happening with WhatsApp where it was displaying a trial button even though it didn't have a free trial period. The new verification I've added checks if the app is subscription-based and then checks if it has 0 trial days in all of its tiers. If it does, it shows a subscribe button. If it doesn't, it displays a trial button. Also, I've exposed the itsEnterpriseOnly flag as an extra measure in the case of apps like Facebook Messenger that are enterprise-only and consequently should show the subscribe button. - Before: - ![image](https://user-images.githubusercontent.com/43561537/144687716-baef06ce-7a80-42fc-8393-b0283c0f349a.png) - After: + This PR solves a bug on the marketplace that was happening with WhatsApp where it was displaying a trial button even though it didn't have a free trial period. The new verification I've added checks if the app is subscription-based and then checks if it has 0 trial days in all of its tiers. If it does, it shows a subscribe button. If it doesn't, it displays a trial button. Also, I've exposed the itsEnterpriseOnly flag as an extra measure in the case of apps like Facebook Messenger that are enterprise-only and consequently should show the subscribe button. + Before: + ![image](https://user-images.githubusercontent.com/43561537/144687716-baef06ce-7a80-42fc-8393-b0283c0f349a.png) + After: ![image](https://user-images.githubusercontent.com/43561537/144687924-1a3eb3a7-783f-4450-abd2-1efa0de64658.png)
@@ -2704,26 +3849,28 @@ - Engagement Dashboard ([#23547](https://github.com/RocketChat/Rocket.Chat/pull/23547)) - - Adds helpers `onToggledFeature` for server and client code to handle license activation/deactivation without server restart; - - Replaces usage of `useEndpointData` with `useQuery` (from [React Query](https://react-query.tanstack.com/)); + - Adds helpers `onToggledFeature` for server and client code to handle license activation/deactivation without server restart; + + - Replaces usage of `useEndpointData` with `useQuery` (from [React Query](https://react-query.tanstack.com/)); + - Introduces `view-engagement-dashboard` permission. - Improve the add user drop down for add a user in create channel modal for UserAutoCompleteMultiple ([#23766](https://github.com/RocketChat/Rocket.Chat/pull/23766) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - Seeing only the name of the person you are not adding is not practical in my opinion because two people can have the same name. Moreover, you can't see the username of the person you want to add in the dropdown. So I changed that and created another selection of users to show the username as well. I made this change so that it would appear in the key place for creating a room and adding a user. - - Before: - - https://user-images.githubusercontent.com/45966964/115287805-faac8d00-a150-11eb-871f-147ab011ced0.mp4 - - - After: - + Seeing only the name of the person you are not adding is not practical in my opinion because two people can have the same name. Moreover, you can't see the username of the person you want to add in the dropdown. So I changed that and created another selection of users to show the username as well. I made this change so that it would appear in the key place for creating a room and adding a user. + + Before: + + https://user-images.githubusercontent.com/45966964/115287805-faac8d00-a150-11eb-871f-147ab011ced0.mp4 + + + After: + https://user-images.githubusercontent.com/45966964/115287664-d2249300-a150-11eb-8cf6-0e04730b425d.mp4 - MKP12 - New UI - Merge Apps and Marketplace Tabs and Content ([#23542](https://github.com/RocketChat/Rocket.Chat/pull/23542)) - Merged the Marketplace and Apps page into a single page with a tabs component that changes between Markeplace and installed apps. + Merged the Marketplace and Apps page into a single page with a tabs component that changes between Markeplace and installed apps. ![page merging](https://user-images.githubusercontent.com/43561537/138516558-f86d62e6-1a5c-4817-a229-a1b876323960.gif) - Re-naming department query param for Twilio ([#23725](https://github.com/RocketChat/Rocket.Chat/pull/23725)) @@ -2736,11 +3883,16 @@ - Stricter API types ([#23735](https://github.com/RocketChat/Rocket.Chat/pull/23735)) - It: - - Adds stricter types for `API`; - - Enables types for `urlParams`; - - Removes mandatory passage of `undefined` payload on client; - - Corrects some regressions; + It: + + - Adds stricter types for `API`; + + - Enables types for `urlParams`; + + - Removes mandatory passage of `undefined` payload on client; + + - Corrects some regressions; + - Reassures my belief in TypeScript supremacy. ### 🐛 Bug fixes @@ -2750,12 +3902,14 @@ - **ENTERPRISE:** OAuth "Merge Roles" removes roles from users ([#23588](https://github.com/RocketChat/Rocket.Chat/pull/23588)) - - Fix OAuth "Merge Roles": the "Merge Roles" option now synchronize only the roles described in the "**Roles to Sync**" setting available in each Custom OAuth settings' group (instead of replacing users' roles by their OAuth roles); + - Fix OAuth "Merge Roles": the "Merge Roles" option now synchronize only the roles described in the "**Roles to Sync**" setting available in each Custom OAuth settings' group (instead of replacing users' roles by their OAuth roles); + - Fix "Merge Roles" and "Channel Mapping" not being performed/updated on OAuth login. - **ENTERPRISE:** Private rooms and discussions can't be audited ([#23673](https://github.com/RocketChat/Rocket.Chat/pull/23673)) - - Add Private rooms (groups) and Discussions to the Message Auditing (Channels) autocomplete; + - Add Private rooms (groups) and Discussions to the Message Auditing (Channels) autocomplete; + - Update "Channels" tab name to "Rooms". - **ENTERPRISE:** Replace all occurrences of a placeholder on string instead of just first one ([#23703](https://github.com/RocketChat/Rocket.Chat/pull/23703)) @@ -2768,10 +3922,10 @@ - Apps scheduler "losing" jobs after server restart ([#23566](https://github.com/RocketChat/Rocket.Chat/pull/23566)) - If a job is scheduled and the server restarted, said job won't be executed, giving the impression it's been lost. - - What happens is that the scheduler is only started when some app tries to schedule an app - if that happens, all jobs that are "late" will be executed; if that doesn't happen, no job will run. - + If a job is scheduled and the server restarted, said job won't be executed, giving the impression it's been lost. + + What happens is that the scheduler is only started when some app tries to schedule an app - if that happens, all jobs that are "late" will be executed; if that doesn't happen, no job will run. + This PR starts the apps scheduler right after all apps have been loaded - Autofocus on search input in admin ([#23738](https://github.com/RocketChat/Rocket.Chat/pull/23738)) @@ -2800,16 +3954,16 @@ - Notifications are not being filtered ([#23487](https://github.com/RocketChat/Rocket.Chat/pull/23487)) - - Add a migration to update the `Accounts_Default_User_Preferences_pushNotifications` setting's value to the `Accounts_Default_User_Preferences_mobileNotifications` setting's value; - - Remove the `Accounts_Default_User_Preferences_mobileNotifications` setting (replaced by `Accounts_Default_User_Preferences_pushNotifications`); + - Add a migration to update the `Accounts_Default_User_Preferences_pushNotifications` setting's value to the `Accounts_Default_User_Preferences_mobileNotifications` setting's value; + - Remove the `Accounts_Default_User_Preferences_mobileNotifications` setting (replaced by `Accounts_Default_User_Preferences_pushNotifications`); - Rename 'mobileNotifications' user's preference to 'pushNotifications'. - Omnichannel business hours page breaking navigation ([#23595](https://github.com/RocketChat/Rocket.Chat/pull/23595) by [@Aman-Maheshwari](https://github.com/Aman-Maheshwari)) - Omnichannel contact center navigation ([#23691](https://github.com/RocketChat/Rocket.Chat/pull/23691)) - Derives from: https://github.com/RocketChat/Rocket.Chat/pull/23656 - + Derives from: https://github.com/RocketChat/Rocket.Chat/pull/23656 + This PR includes a different approach to solving navigation problems following the same code structure and UI definitions of other "ActionButtons" components in Sidebar. - Omnichannel status being changed on page refresh ([#23587](https://github.com/RocketChat/Rocket.Chat/pull/23587)) @@ -2846,32 +4000,40 @@ - Chore: Mocha testing configuration ([#23706](https://github.com/RocketChat/Rocket.Chat/pull/23706)) - We've been writing integration tests for the REST API quite regularly, but we can't say the same for UI-related modules. This PR is based on the assumption that _improving the developer experience on writing tests_ would increase our coverage and promote the adoption even for newcomers. - - Here as summary of the proposal: - - - Change Mocha configuration files: - - Add a base configuration (`.mocharc.base.json`); - - Rename the configuration for REST API tests (`mocha_end_to_end.opts.js -> .mocharc.api.js`); - - Add a configuration for client modules (`.mocharc.client.js`); - - Enable ESLint for them. - - Add a Mocha test command exclusive for client modules (`npm run testunit-client`); - - Enable fast watch mode: - - Configure `ts-node` to only transpile code (skip type checking); - - Define a list of files to be watched. - - Configure `mocha` environment on ESLint only for test files (required when using Mocha's globals); - - Adopt Chai as our assertion library: - - Unify the setup of Chai plugins (`chai-spies`, `chai-datetime`, `chai-dom`); - - Replace `assert` with `chai`; - - Replace `chai.expect` with `expect`. - - Enable integration tests with React components: - - Enable JSX support on our default Babel configuration; + We've been writing integration tests for the REST API quite regularly, but we can't say the same for UI-related modules. This PR is based on the assumption that _improving the developer experience on writing tests_ would increase our coverage and promote the adoption even for newcomers. + + Here as summary of the proposal: + + + - Change Mocha configuration files: + - Add a base configuration (`.mocharc.base.json`); + - Rename the configuration for REST API tests (`mocha_end_to_end.opts.js -> .mocharc.api.js`); + - Add a configuration for client modules (`.mocharc.client.js`); + - Enable ESLint for them. + + - Add a Mocha test command exclusive for client modules (`npm run testunit-client`); + + - Enable fast watch mode: + - Configure `ts-node` to only transpile code (skip type checking); + - Define a list of files to be watched. + + - Configure `mocha` environment on ESLint only for test files (required when using Mocha's globals); + + - Adopt Chai as our assertion library: + - Unify the setup of Chai plugins (`chai-spies`, `chai-datetime`, `chai-dom`); + - Replace `assert` with `chai`; + - Replace `chai.expect` with `expect`. + + - Enable integration tests with React components: + - Enable JSX support on our default Babel configuration; - Adopt [testing library](https://testing-library.com/). - Chore: Rearrange module typings ([#23452](https://github.com/RocketChat/Rocket.Chat/pull/23452)) - - Move all external module declarations (definitions and augmentations) to `/definition/externals`; - - ~Symlink some modules on `/definition/externals` to `/ee/server/services/definition/externals`~ Share types with `/ee/server/services`; + - Move all external module declarations (definitions and augmentations) to `/definition/externals`; + + - ~Symlink some modules on `/definition/externals` to `/ee/server/services/definition/externals`~ Share types with `/ee/server/services`; + - Use TypeScript as server code entrypoint. - Chore: Remove duplicated 'name' key from rate limiter logs ([#23771](https://github.com/RocketChat/Rocket.Chat/pull/23771)) @@ -2962,8 +4124,8 @@ - Notifications are not being filtered ([#23487](https://github.com/RocketChat/Rocket.Chat/pull/23487)) - - Add a migration to update the `Accounts_Default_User_Preferences_pushNotifications` setting's value to the `Accounts_Default_User_Preferences_mobileNotifications` setting's value; - - Remove the `Accounts_Default_User_Preferences_mobileNotifications` setting (replaced by `Accounts_Default_User_Preferences_pushNotifications`); + - Add a migration to update the `Accounts_Default_User_Preferences_pushNotifications` setting's value to the `Accounts_Default_User_Preferences_mobileNotifications` setting's value; + - Remove the `Accounts_Default_User_Preferences_mobileNotifications` setting (replaced by `Accounts_Default_User_Preferences_pushNotifications`); - Rename 'mobileNotifications' user's preference to 'pushNotifications'. - Omnichannel status being changed on page refresh ([#23587](https://github.com/RocketChat/Rocket.Chat/pull/23587)) @@ -3029,19 +4191,19 @@ - Make Livechat Instructions setting multi-line ([#23515](https://github.com/RocketChat/Rocket.Chat/pull/23515)) - Since now we're supporting markdown text on this field (via this PR - https://github.com/RocketChat/Rocket.Chat.Livechat/pull/648), it would be nice to make this setting multiline so users can have more space to edit the text + Since now we're supporting markdown text on this field (via this PR - https://github.com/RocketChat/Rocket.Chat.Livechat/pull/648), it would be nice to make this setting multiline so users can have more space to edit the text ![image](https://user-images.githubusercontent.com/34130764/138146712-13e4968b-5312-4d53-b44c-b5699c5e49c1.png) - optimized groups.listAll response time ([#22941](https://github.com/RocketChat/Rocket.Chat/pull/22941) by [@ostjen](https://github.com/ostjen)) - groups.listAll endpoint was having performance issues, specially when the total number of groups was high. This happened because the endpoint was loading all objects in memory then using splice to paginate, instead of paginating beforehand. - - Considering 70k groups, this was the performance improvement: - - before - ![image](https://user-images.githubusercontent.com/28611993/129601314-bdf89337-79fa-4446-9f44-95264af4adb3.png) - - after + groups.listAll endpoint was having performance issues, specially when the total number of groups was high. This happened because the endpoint was loading all objects in memory then using splice to paginate, instead of paginating beforehand. + + Considering 70k groups, this was the performance improvement: + + before + ![image](https://user-images.githubusercontent.com/28611993/129601314-bdf89337-79fa-4446-9f44-95264af4adb3.png) + + after ![image](https://user-images.githubusercontent.com/28611993/129601358-5872e166-f923-4c1c-b21d-eb9507365ecf.png) ### 🐛 Bug fixes @@ -3049,7 +4211,8 @@ - **APPS:** Communication problem when updating and uninstalling apps in cluster ([#23418](https://github.com/RocketChat/Rocket.Chat/pull/23418)) - - Make the hook responsible for receiving app update events inside a cluster fetch the app's package (zip file) in the correct place. + - Make the hook responsible for receiving app update events inside a cluster fetch the app's package (zip file) in the correct place. + - Also shows a warning message on uninstalls inside a cluster. As there are many servers writing to the same place, some race conditions may occur. This prevents problems related to terminating the process in the middle due to errors being thrown and leaving the server in a faulty state. - **ENTERPRISE:** Omnichannel agent is not leaving the room when a forwarded chat is queued ([#23404](https://github.com/RocketChat/Rocket.Chat/pull/23404)) @@ -3076,10 +4239,10 @@ - Markdown quote message style ([#23462](https://github.com/RocketChat/Rocket.Chat/pull/23462)) - Before: - ![image](https://user-images.githubusercontent.com/17487063/137496669-3abecab4-cf90-45cb-8b1b-d9411a5682dd.png) - - After: + Before: + ![image](https://user-images.githubusercontent.com/17487063/137496669-3abecab4-cf90-45cb-8b1b-d9411a5682dd.png) + + After: ![image](https://user-images.githubusercontent.com/17487063/137496905-fd727f90-f707-4ec6-8139-ba2eb1a2146e.png) - MONGO_OPTIONS being ignored for oplog connection ([#23314](https://github.com/RocketChat/Rocket.Chat/pull/23314) by [@cuonghuunguyen](https://github.com/cuonghuunguyen)) @@ -3098,8 +4261,8 @@ - Read only description in team creation ([#23213](https://github.com/RocketChat/Rocket.Chat/pull/23213)) - ![image](https://user-images.githubusercontent.com/27704687/133608433-8ca788a3-71a8-4d40-8c40-8156ab03c606.png) - + ![image](https://user-images.githubusercontent.com/27704687/133608433-8ca788a3-71a8-4d40-8c40-8156ab03c606.png) + ![image](https://user-images.githubusercontent.com/27704687/133608400-4cdc7a67-95e5-46c6-8c65-29ab107cd314.png) - resumeToken not working ([#23379](https://github.com/RocketChat/Rocket.Chat/pull/23379)) @@ -3108,7 +4271,8 @@ - SAML Users' roles being reset to default on login ([#23411](https://github.com/RocketChat/Rocket.Chat/pull/23411)) - - Remove `roles` field update on `insertOrUpdateSAMLUser` function; + - Remove `roles` field update on `insertOrUpdateSAMLUser` function; + - Add SAML `syncRoles` event; - Server crashing when Routing method is not available at start ([#23473](https://github.com/RocketChat/Rocket.Chat/pull/23473)) @@ -3189,14 +4353,14 @@ - Chore: Startup Time ([#23210](https://github.com/RocketChat/Rocket.Chat/pull/23210)) - The settings logic has been improved as a whole. - - All the logic to get the data from the env var was confusing. - - Setting default values was tricky to understand. - - Every time the server booted, all settings were updated and callbacks were called 2x or more (horrible for environments with multiple instances and generating a turbulent startup). - + The settings logic has been improved as a whole. + + All the logic to get the data from the env var was confusing. + + Setting default values was tricky to understand. + + Every time the server booted, all settings were updated and callbacks were called 2x or more (horrible for environments with multiple instances and generating a turbulent startup). + `Settings.get(......, callback);` was deprecated. We now have better methods for each case. - Chore: Update Apps-Engine version ([#23375](https://github.com/RocketChat/Rocket.Chat/pull/23375)) @@ -3219,10 +4383,10 @@ - Regression: Mail body contains `undefined` text ([#23552](https://github.com/RocketChat/Rocket.Chat/pull/23552)) - ### Before - ![image](https://user-images.githubusercontent.com/2263066/138733018-10449892-5c2d-46fb-9355-00e98e0d6c9f.png) - - ### After + ### Before + ![image](https://user-images.githubusercontent.com/2263066/138733018-10449892-5c2d-46fb-9355-00e98e0d6c9f.png) + + ### After ![image](https://user-images.githubusercontent.com/2263066/138733074-a1b88a77-bf64-41c3-a6c3-ac9e1cb63de1.png) - Regression: Prevent settings from getting updated ([#23556](https://github.com/RocketChat/Rocket.Chat/pull/23556)) @@ -3313,7 +4477,8 @@ - SAML Users' roles being reset to default on login ([#23411](https://github.com/RocketChat/Rocket.Chat/pull/23411)) - - Remove `roles` field update on `insertOrUpdateSAMLUser` function; + - Remove `roles` field update on `insertOrUpdateSAMLUser` function; + - Add SAML `syncRoles` event;
@@ -3345,7 +4510,8 @@ - **APPS:** Communication problem when updating and uninstalling apps in cluster ([#23418](https://github.com/RocketChat/Rocket.Chat/pull/23418)) - - Make the hook responsible for receiving app update events inside a cluster fetch the app's package (zip file) in the correct place. + - Make the hook responsible for receiving app update events inside a cluster fetch the app's package (zip file) in the correct place. + - Also shows a warning message on uninstalls inside a cluster. As there are many servers writing to the same place, some race conditions may occur. This prevents problems related to terminating the process in the middle due to errors being thrown and leaving the server in a faulty state. - Server crashing when Routing method is not available at start ([#23473](https://github.com/RocketChat/Rocket.Chat/pull/23473)) @@ -3472,18 +4638,20 @@ - **ENTERPRISE:** "Download CSV" button doesn't work in the Engagement Dashboard's Active Users section ([#23013](https://github.com/RocketChat/Rocket.Chat/pull/23013)) - - Fix "Download CSV" button in the Engagement Dashboard's Active Users section; - - Add column headers to the CSV file downloaded from the Engagement Dashboard's Active Users section; + - Fix "Download CSV" button in the Engagement Dashboard's Active Users section; + + - Add column headers to the CSV file downloaded from the Engagement Dashboard's Active Users section; + - Split the data in multiple CSV files. - **ENTERPRISE:** CSV file downloaded in the Engagement Dashboard's New Users section contains undefined data ([#23014](https://github.com/RocketChat/Rocket.Chat/pull/23014)) - - Fix CSV file downloaded in the Engagement Dashboard's New Users section; + - Fix CSV file downloaded in the Engagement Dashboard's New Users section; - Add column headers to the CSV file downloaded from the Engagement Dashboard's New Users section. - **ENTERPRISE:** Missing headers in CSV files downloaded from the Engagement Dashboard ([#23223](https://github.com/RocketChat/Rocket.Chat/pull/23223)) - - Add headers to all CSV files downloaded from the "Messages" and "Channels" tabs from the Engagement Dashboard; + - Add headers to all CSV files downloaded from the "Messages" and "Channels" tabs from the Engagement Dashboard; - Add headers to the CSV file downloaded from the "Users by time of day" section (in the "Users" tab). - LDAP Refactoring ([#23171](https://github.com/RocketChat/Rocket.Chat/pull/23171)) @@ -3498,17 +4666,24 @@ - Remove deprecated endpoints ([#23162](https://github.com/RocketChat/Rocket.Chat/pull/23162)) - The following REST endpoints were removed: - - - `/api/v1/emoji-custom` - - `/api/v1/info` - - `/api/v1/permissions` - - `/api/v1/permissions.list` - - The following Real time API Methods were removed: - - - `getFullUserData` - - `getServerInfo` + The following REST endpoints were removed: + + + - `/api/v1/emoji-custom` + + - `/api/v1/info` + + - `/api/v1/permissions` + + - `/api/v1/permissions.list` + + The following Real time API Methods were removed: + + + - `getFullUserData` + + - `getServerInfo` + - `livechat:saveOfficeHours` - Remove Google Vision features ([#23160](https://github.com/RocketChat/Rocket.Chat/pull/23160)) @@ -3517,8 +4692,8 @@ - Remove old migrations up to version 2.4.14 ([#23277](https://github.com/RocketChat/Rocket.Chat/pull/23277)) - To update to version 4.0.0 you'll need to be running at least version 3.0.0, otherwise you might loose some database migrations which might have unexpected effects. - + To update to version 4.0.0 you'll need to be running at least version 3.0.0, otherwise you might loose some database migrations which might have unexpected effects. + This aims to clean up the code, since upgrades jumping 2 major versions are too risky and hard to maintain, we'll keep only migration from that last major (in this case 3.x). - Remove patch info from endpoint /api/info for non-logged in users ([#16050](https://github.com/RocketChat/Rocket.Chat/pull/16050)) @@ -3527,18 +4702,18 @@ - Stop sending audio notifications via stream ([#23108](https://github.com/RocketChat/Rocket.Chat/pull/23108)) - Remove audio preferences and make them tied to desktop notification preferences. - + Remove audio preferences and make them tied to desktop notification preferences. + TL;DR: new message sounds will play only if you receive a desktop notification. you'll still be able to chose to not play any sound though - Webhook will fail if user is not part of the channel ([#23310](https://github.com/RocketChat/Rocket.Chat/pull/23310)) - Remove deprecated behavior added by https://github.com/RocketChat/Rocket.Chat/pull/18024 that accepts webhook integrations sending messages even if the user is not part of the channel. - - Starting from 4.0.0 the webhook request will fail with `error-not-allowed` error: - - ``` - {"success":false,"error":"error-not-allowed"} + Remove deprecated behavior added by https://github.com/RocketChat/Rocket.Chat/pull/18024 that accepts webhook integrations sending messages even if the user is not part of the channel. + + Starting from 4.0.0 the webhook request will fail with `error-not-allowed` error: + + ``` + {"success":false,"error":"error-not-allowed"} ``` ### 🎉 New features @@ -3556,23 +4731,26 @@ - Seats Cap ([#23017](https://github.com/RocketChat/Rocket.Chat/pull/23017) by [@g-thome](https://github.com/g-thome)) - - Adding New Members - - Awareness of seats usage while adding new members - - Seats Cap about to be reached - - Seats Cap reached - - Request more seats - - Warning Admins - - System telling admins max seats are about to exceed - - System telling admins max seats were exceed - - Metric on Info Page - - Request more seats - - Warning Members - - Invite link - - Block creating new invite links - - Block existing invite links (feedback on register process) - - Register to Workspaces - - Emails - - System telling admins max seats are about to exceed + - Adding New Members + - Awareness of seats usage while adding new members + - Seats Cap about to be reached + - Seats Cap reached + - Request more seats + + - Warning Admins + - System telling admins max seats are about to exceed + - System telling admins max seats were exceed + - Metric on Info Page + - Request more seats + + - Warning Members + - Invite link + - Block creating new invite links + - Block existing invite links (feedback on register process) + - Register to Workspaces + + - Emails + - System telling admins max seats are about to exceed - System telling admins max seats were exceed ### 🚀 Improvements @@ -3580,10 +4758,10 @@ - **APPS:** New storage strategy for Apps-Engine file packages ([#22657](https://github.com/RocketChat/Rocket.Chat/pull/22657)) - This is an enabler for our initiative to support NPM packages in the Apps-Engine. - - Currently, the packages (zip files) for Rocket.Chat Apps are stored as a base64 encoded string in a document in the database, which constrains us due to the size limit of a document in MongoDB (16Mb). - + This is an enabler for our initiative to support NPM packages in the Apps-Engine. + + Currently, the packages (zip files) for Rocket.Chat Apps are stored as a base64 encoded string in a document in the database, which constrains us due to the size limit of a document in MongoDB (16Mb). + When we allow apps to include NPM packages, the size of the App package itself will be potentially _very large_ (I'm looking at you `node_modules`). Thus we'll be changing the strategy to store apps either with GridFS or the host's File System itself. - **APPS:** Return task ids when using the scheduler api ([#23023](https://github.com/RocketChat/Rocket.Chat/pull/23023)) @@ -3623,9 +4801,9 @@ - "Read Only" and "Allow Reacting" system messages are missing in rooms ([#23037](https://github.com/RocketChat/Rocket.Chat/pull/23037) by [@ostjen](https://github.com/ostjen)) - - Add system message to notify changes on the **"Read Only"** setting; - - Add system message to notify changes on the **"Allow Reacting"** setting; - - Fix "Allow Reacting" setting's description (updated from "Only authorized users can write new messages" to "Only authorized users can react to messages"). + - Add system message to notify changes on the **"Read Only"** setting; + - Add system message to notify changes on the **"Allow Reacting"** setting; + - Fix "Allow Reacting" setting's description (updated from "Only authorized users can write new messages" to "Only authorized users can react to messages"). ![system-messages](https://user-images.githubusercontent.com/36537004/130883527-9eb47fcd-c8e5-41fb-af34-5d99bd0a6780.PNG) - Add check before placing chat on-hold to confirm that contact sent last message ([#23053](https://github.com/RocketChat/Rocket.Chat/pull/23053)) @@ -3640,9 +4818,9 @@ - Inaccurate use of 'Mobile notifications' instead of 'Push notifications' in i18n strings ([#22978](https://github.com/RocketChat/Rocket.Chat/pull/22978) by [@ostjen](https://github.com/ostjen)) - - Fix inaccurate use of 'Mobile notifications' (which is misleading in German) by 'Push notifications'; - - Update `'Notification_Mobile_Default_For'` key to `'Notification_Push_Default_For'` (and text to 'Send Push Notifications For' for English Language); - - Update `'Accounts_Default_User_Preferences_mobileNotifications'` key to `'Accounts_Default_User_Preferences_pushNotifications'`; + - Fix inaccurate use of 'Mobile notifications' (which is misleading in German) by 'Push notifications'; + - Update `'Notification_Mobile_Default_For'` key to `'Notification_Push_Default_For'` (and text to 'Send Push Notifications For' for English Language); + - Update `'Accounts_Default_User_Preferences_mobileNotifications'` key to `'Accounts_Default_User_Preferences_pushNotifications'`; - Update `'Mobile_Notifications_Default_Alert'` key to `'Mobile_Push_Notifications_Default_Alert'`; - Logging out from other clients ([#23276](https://github.com/RocketChat/Rocket.Chat/pull/23276)) @@ -3651,7 +4829,7 @@ - Modals is cutting pixels of the content ([#23243](https://github.com/RocketChat/Rocket.Chat/pull/23243)) - Fuselage Dependency: [543](https://github.com/RocketChat/Rocket.Chat.Fuselage/pull/543) + Fuselage Dependency: [543](https://github.com/RocketChat/Rocket.Chat.Fuselage/pull/543) ![image](https://user-images.githubusercontent.com/27704687/134049227-3cd1deed-34ba-454f-a95e-e99b79a7a7b9.png) - Omnichannel On hold chats being forwarded to offline agents ([#23185](https://github.com/RocketChat/Rocket.Chat/pull/23185)) @@ -3660,15 +4838,15 @@ - Prevent users to edit an existing role when adding a new one with the same name used before. ([#22407](https://github.com/RocketChat/Rocket.Chat/pull/22407) by [@lucassartor](https://github.com/lucassartor)) - ### before - ![Peek 2021-07-13 16-31](https://user-images.githubusercontent.com/27704687/125513721-953d84f4-1c95-45ca-80e1-b00992b874f6.gif) - - ### after + ### before + ![Peek 2021-07-13 16-31](https://user-images.githubusercontent.com/27704687/125513721-953d84f4-1c95-45ca-80e1-b00992b874f6.gif) + + ### after ![Peek 2021-07-13 16-34](https://user-images.githubusercontent.com/27704687/125514098-91ee8014-51e5-4c62-9027-5538acf57d08.gif) - Remove doubled "Canned Responses" strings ([#23056](https://github.com/RocketChat/Rocket.Chat/pull/23056)) - - Remove doubled canned response setting introduced in #22703 (by setting id change); + - Remove doubled canned response setting introduced in #22703 (by setting id change); - Update "Canned Responses" keys to "Canned_Responses". - Remove margin from quote inside quote ([#21779](https://github.com/RocketChat/Rocket.Chat/pull/21779)) @@ -3679,16 +4857,21 @@ - Sidebar not closing when clicking in Home or Directory on mobile view ([#23218](https://github.com/RocketChat/Rocket.Chat/pull/23218)) - ### Additional fixed - - Merge Burger menu components into a single component - - Show a badge with no-read messages in the Burger Button: - ![image](https://user-images.githubusercontent.com/27704687/133679378-20fea2c0-4ac1-4b4e-886e-45154cc6afea.png) + ### Additional fixed + + - Merge Burger menu components into a single component + + - Show a badge with no-read messages in the Burger Button: + ![image](https://user-images.githubusercontent.com/27704687/133679378-20fea2c0-4ac1-4b4e-886e-45154cc6afea.png) + - remove useSidebarClose hook - Stop queue when Omnichannel is disabled or the routing method does not support it ([#23261](https://github.com/RocketChat/Rocket.Chat/pull/23261)) - - Add missing key logs - - Stop queue (and logs) when livechat is disabled or when routing method does not support queue + - Add missing key logs + + - Stop queue (and logs) when livechat is disabled or when routing method does not support queue + - Stop ignoring offline bot agents from delegation (previously, if a bot was offline, even with "Assign new conversations to bot agent" enabled, bot will be ignored and chat will be left in limbo (since bot was assigned, but offline). - Toolbox click not working on Safari(iOS) ([#23244](https://github.com/RocketChat/Rocket.Chat/pull/23244)) @@ -3795,17 +4978,17 @@ - Regression: Blank screen in Jitsi video calls ([#23322](https://github.com/RocketChat/Rocket.Chat/pull/23322)) - - Fix Jitsi calls being disposed even when "Open in new window" setting is disabled; + - Fix Jitsi calls being disposed even when "Open in new window" setting is disabled; - Fix misspelling on `CallJitsWithData.js` file name. - Regression: Create new loggers based on server log level ([#23297](https://github.com/RocketChat/Rocket.Chat/pull/23297)) - Regression: Fix app storage migration ([#23286](https://github.com/RocketChat/Rocket.Chat/pull/23286)) - The previous version of this migration didn't take into consideration apps that were installed prior to [Rocket.Chat@3.8.0](https://github.com/RocketChat/Rocket.Chat/releases/tag/3.8.0), which [removed the typescript compiler from the server](https://github.com/RocketChat/Rocket.Chat/pull/18687) and into the CLI. As a result, the zip files inside each installed app's document in the database had typescript files in them instead of the now required javascript files. - - As the new strategy of source code storage for apps changes the way the app is loaded, those zip files containing the source code are read everytime the app is started (or [in this particular case, updated](https://github.com/RocketChat/Rocket.Chat/pull/23286/files#diff-caf9f7a22478639e58d6514be039140a42ce1ab2d999c3efe5678c38ee36d0ccR43)), and as the zips' contents were wrong, the operation was failing. - + The previous version of this migration didn't take into consideration apps that were installed prior to [Rocket.Chat@3.8.0](https://github.com/RocketChat/Rocket.Chat/releases/tag/3.8.0), which [removed the typescript compiler from the server](https://github.com/RocketChat/Rocket.Chat/pull/18687) and into the CLI. As a result, the zip files inside each installed app's document in the database had typescript files in them instead of the now required javascript files. + + As the new strategy of source code storage for apps changes the way the app is loaded, those zip files containing the source code are read everytime the app is started (or [in this particular case, updated](https://github.com/RocketChat/Rocket.Chat/pull/23286/files#diff-caf9f7a22478639e58d6514be039140a42ce1ab2d999c3efe5678c38ee36d0ccR43)), and as the zips' contents were wrong, the operation was failing. + The fix extract the data from old apps and creates new zip files with the compiled `js` already present. - Regression: Fix Bugsnag not started error ([#23308](https://github.com/RocketChat/Rocket.Chat/pull/23308)) @@ -3894,6 +5077,41 @@ - [@thassiov](https://github.com/thassiov) - [@tiagoevanp](https://github.com/tiagoevanp) +# 3.18.7 +`2022-05-30 · 1 🐛 · 1 👩‍💻👨‍💻` + +### Engine versions +- Node: `12.22.1` +- NPM: `6.14.1` +- MongoDB: `3.4, 3.6, 4.0, 4.2` +- Apps-Engine: `1.27.1` + +### 🐛 Bug fixes + + +- Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) + +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@ggazzo](https://github.com/ggazzo) + +# 3.18.6 +`2022-05-26 · 1 🐛 · 1 👩‍💻👨‍💻` + +### Engine versions +- Node: `14.18.3` +- NPM: `6.14.15` +- MongoDB: `3.6, 4.0, 4.2, 4.4, 5.0` + +### 🐛 Bug fixes + + +- Security Hotfix (https://docs.rocket.chat/guides/security/security-updates) + +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@ggazzo](https://github.com/ggazzo) + # 3.18.2 `2021-10-01 · 2 🐛 · 2 🔍 · 4 👩‍💻👨‍💻` @@ -3982,8 +5200,10 @@ - **ENTERPRISE:** Maximum waiting time for chats in Omnichannel queue ([#22955](https://github.com/RocketChat/Rocket.Chat/pull/22955)) - - Add new settings to support closing chats that have been too long on waiting queue - - Moved old settings to new "Queue Management" section + - Add new settings to support closing chats that have been too long on waiting queue + + - Moved old settings to new "Queue Management" section + - Fix issue when closing a livechat room that caused client to not to know if room was open or not - Banner for the updates regarding authentication services ([#23055](https://github.com/RocketChat/Rocket.Chat/pull/23055) by [@g-thome](https://github.com/g-thome)) @@ -3998,10 +5218,10 @@ - Separate RegEx Settings for Channels and Usernames validation ([#21937](https://github.com/RocketChat/Rocket.Chat/pull/21937) by [@aditya-mitra](https://github.com/aditya-mitra)) - Now, there are 2 separate settings for validating names - One for **channels** and another for **usernames**. - - This change also removes the old `UTF8_Names_Validation` setting and adds 2 new settings `UTF8_User_Names_Validation` and `UTF8_Channel_Names_Validation`. - + Now, there are 2 separate settings for validating names - One for **channels** and another for **usernames**. + + This change also removes the old `UTF8_Names_Validation` setting and adds 2 new settings `UTF8_User_Names_Validation` and `UTF8_Channel_Names_Validation`. + https://user-images.githubusercontent.com/55396651/116969904-af5bb800-acd4-11eb-9fc4-dacac60cb08f.mp4 ### 🚀 Improvements @@ -4017,13 +5237,13 @@ - Rewrite File Upload Modal ([#22750](https://github.com/RocketChat/Rocket.Chat/pull/22750)) - Image preview: - ![image](https://user-images.githubusercontent.com/40830821/127223432-dccd2182-aec0-430f-8d70-03ac88aec791.png) - - Video preview: - ![image](https://user-images.githubusercontent.com/40830821/127225982-f8b21840-0d9c-4aff-a354-16188c7ed66e.png) - - Files larger than 10mb: + Image preview: + ![image](https://user-images.githubusercontent.com/40830821/127223432-dccd2182-aec0-430f-8d70-03ac88aec791.png) + + Video preview: + ![image](https://user-images.githubusercontent.com/40830821/127225982-f8b21840-0d9c-4aff-a354-16188c7ed66e.png) + + Files larger than 10mb: ![image](https://user-images.githubusercontent.com/40830821/127222611-5265040f-a06b-4ec5-b528-89b40e6a9072.png) - Types from currentChatsPage.tsx ([#22967](https://github.com/RocketChat/Rocket.Chat/pull/22967)) @@ -4039,14 +5259,14 @@ - "Users By Time of the Day" chart displays incorrect data for Local Timezone ([#22836](https://github.com/RocketChat/Rocket.Chat/pull/22836)) - - Add local timezone conversion to the "Users By Time of the Day" chart in the Engagement Dashboard; + - Add local timezone conversion to the "Users By Time of the Day" chart in the Engagement Dashboard; - Simplify date creations by using `endOf` and `startOf` methods. - Atlassian Crowd connection not working ([#22996](https://github.com/RocketChat/Rocket.Chat/pull/22996) by [@piotrkochan](https://github.com/piotrkochan)) - Audio recording doesn't stop in direct messages on channel switch ([#22880](https://github.com/RocketChat/Rocket.Chat/pull/22880)) - - Cancel audio recordings on message bar destroy event. + - Cancel audio recordings on message bar destroy event. ![test-22372](https://user-images.githubusercontent.com/36537004/128569780-d83747b0-fb9c-4dc6-9bc5-7ae573e720c8.gif) - Bad words falling if message is empty ([#22930](https://github.com/RocketChat/Rocket.Chat/pull/22930)) @@ -4071,21 +5291,23 @@ - Return transcript/dashboards based on timezone settings ([#22850](https://github.com/RocketChat/Rocket.Chat/pull/22850)) - - Added new setting to manage timezones - - Applied new setting to omnichannel dashboards (realtime, analytics) [NOTE: Other dashboards aren't using this setting actually) + - Added new setting to manage timezones + + - Applied new setting to omnichannel dashboards (realtime, analytics) [NOTE: Other dashboards aren't using this setting actually) + - Change getAnalyticsBetweenDate query to filter out system messages instead of substracting them - Tab margin style ([#22851](https://github.com/RocketChat/Rocket.Chat/pull/22851)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/128103848-2a25ba7e-0e59-4502-9bcd-2569cad9379a.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/128103848-2a25ba7e-0e59-4502-9bcd-2569cad9379a.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/128103633-ec7b93fc-4667-4dc9-bad3-bfffaff3974e.png) - Threads and discussions searches don't display proper results ([#22914](https://github.com/RocketChat/Rocket.Chat/pull/22914)) - - _Fix_ issue in discussions search (which wasn't working after a search with no results was made); + - _Fix_ issue in discussions search (which wasn't working after a search with no results was made); - _Improve_ discussions and threads searches: both searches (`chat.getDiscussions` and `chat.getThreadsList`) are now case insensitive (do NOT differ capital from lower letters) and match incomplete words or terms. - Threads List being requested more than expected ([#22879](https://github.com/RocketChat/Rocket.Chat/pull/22879)) @@ -4120,8 +5342,8 @@ - Chore: Script to start Rocket.Chat in HA mode during development ([#22398](https://github.com/RocketChat/Rocket.Chat/pull/22398)) - Sometimes we need to start Rocket.Chat in High-Availability mode (cluster) during development to test how a feature behaves or hunt down a bug. Currently, this involves a lot of commands with details that might be lost if you haven't done it in a while. - + Sometimes we need to start Rocket.Chat in High-Availability mode (cluster) during development to test how a feature behaves or hunt down a bug. Currently, this involves a lot of commands with details that might be lost if you haven't done it in a while. + This PR intends to provide a really simple way for us to start many instances of Rocket.Chat connected in a cluster. - Chore: Update Livechat widget to 1.9.4 ([#22990](https://github.com/RocketChat/Rocket.Chat/pull/22990)) @@ -4138,13 +5360,13 @@ - Regression: File upload name suggestion ([#22953](https://github.com/RocketChat/Rocket.Chat/pull/22953)) - Before: - ![image](https://user-images.githubusercontent.com/40830821/129774936-ecdbe9a1-5e3f-4a0a-ad1e-6f13eb15c60b.png) - ![image](https://user-images.githubusercontent.com/40830821/129775011-fb0df01d-74e4-41ae-bb47-dcf4cc17735e.png) - - - After: - ![image](https://user-images.githubusercontent.com/40830821/129774877-928a8aa0-c003-4e57-8b33-ea6accc32774.png) + Before: + ![image](https://user-images.githubusercontent.com/40830821/129774936-ecdbe9a1-5e3f-4a0a-ad1e-6f13eb15c60b.png) + ![image](https://user-images.githubusercontent.com/40830821/129775011-fb0df01d-74e4-41ae-bb47-dcf4cc17735e.png) + + + After: + ![image](https://user-images.githubusercontent.com/40830821/129774877-928a8aa0-c003-4e57-8b33-ea6accc32774.png) ![image](https://user-images.githubusercontent.com/40830821/129774972-d67debaf-0ce9-44fb-93cb-d7612dd18edf.png) - Regression: Fix creation of self-DMs ([#23015](https://github.com/RocketChat/Rocket.Chat/pull/23015)) @@ -4212,7 +5434,8 @@ - Fix Auto Selection algorithm on community edition ([#22991](https://github.com/RocketChat/Rocket.Chat/pull/22991)) - - When using the autoselection algo on community editions, all agents were marked as unavailable due to an unapplied filter + - When using the autoselection algo on community editions, all agents were marked as unavailable due to an unapplied filter + - Fixed an issue when both user & system setting to manange EE max number of chats allowed were set to 0
@@ -4252,7 +5475,7 @@ - Apps-Engine's scheduler failing to update run tasks ([#22882](https://github.com/RocketChat/Rocket.Chat/pull/22882)) - [Agenda](https://github.com/agenda/agenda), the library that manages scheduling, depended on setting a job property named `nextRunAt` as `undefined` to signal whether it should be run on schedule or not. [Rocket.Chat's current Mongo driver](https://github.com/RocketChat/Rocket.Chat/pull/22399) ignores `undefined` values when updating documents and this was causing jobs to never stop running as Agenda couldn't clear that property (set them as `undefined`). + [Agenda](https://github.com/agenda/agenda), the library that manages scheduling, depended on setting a job property named `nextRunAt` as `undefined` to signal whether it should be run on schedule or not. [Rocket.Chat's current Mongo driver](https://github.com/RocketChat/Rocket.Chat/pull/22399) ignores `undefined` values when updating documents and this was causing jobs to never stop running as Agenda couldn't clear that property (set them as `undefined`). This updates Rocket.Chat's dependency on Agenda.js to point to [a fork that fixes the problem](https://github.com/RocketChat/agenda/releases/tag/3.1.2). - Close omnichannel conversations when agent is deactivated ([#22917](https://github.com/RocketChat/Rocket.Chat/pull/22917)) @@ -4306,7 +5529,7 @@ - Monitoring Track messages' round trip time ([#22676](https://github.com/RocketChat/Rocket.Chat/pull/22676)) - Track messages' roundtrip time from backend saves time to the time when received back from the oplog allowing track of oplog slowness. + Track messages' roundtrip time from backend saves time to the time when received back from the oplog allowing track of oplog slowness. Prometheus metric: `rocketchat_messages_roundtrip_time` - REST endpoint to remove User from Role ([#20485](https://github.com/RocketChat/Rocket.Chat/pull/20485) by [@Cosnavel](https://github.com/Cosnavel) & [@lucassartor](https://github.com/lucassartor) & [@ostjen](https://github.com/ostjen)) @@ -4318,19 +5541,22 @@ - Change message deletion confirmation modal to toast ([#22544](https://github.com/RocketChat/Rocket.Chat/pull/22544)) - Changed a timed modal for a toast message + Changed a timed modal for a toast message ![image](https://user-images.githubusercontent.com/40830821/124192670-0646f900-da9c-11eb-941c-9ae35421f6ef.png) - Configuration for indices in Apps-Engine models ([#22705](https://github.com/RocketChat/Rocket.Chat/pull/22705)) - * Add `appId` field to the data saved by the Scheduler - * Add `appId` index to `rocketchat_apps_persistence` model - * Skip "trash collection" when deleting records from `rocketchat_apps_persistence` - * Add a new setting to control for how long we should keep logs from the apps - - ![image](https://user-images.githubusercontent.com/1810309/126246666-907f9d98-1d84-4dfe-a80a-7dd874d36fa8.png) - - + * Add `appId` field to the data saved by the Scheduler + + * Add `appId` index to `rocketchat_apps_persistence` model + + * Skip "trash collection" when deleting records from `rocketchat_apps_persistence` + + * Add a new setting to control for how long we should keep logs from the apps + + ![image](https://user-images.githubusercontent.com/1810309/126246666-907f9d98-1d84-4dfe-a80a-7dd874d36fa8.png) + + ![image](https://user-images.githubusercontent.com/1810309/126246655-2ce3cb5f-b2f5-456e-a9c4-beccd9b3ef41.png) - Make `shortcut` field of canned responses unique ([#22700](https://github.com/RocketChat/Rocket.Chat/pull/22700)) @@ -4353,37 +5579,38 @@ - Replace remaing discussion creation modals with React modal. ([#22448](https://github.com/RocketChat/Rocket.Chat/pull/22448)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/123840524-cbe72b80-d8e4-11eb-9ddb-23a9f9d90aac.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/123840524-cbe72b80-d8e4-11eb-9ddb-23a9f9d90aac.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/123840219-74e15680-d8e4-11eb-95aa-00a990ffe0e7.png) - Return open room if available for visitors ([#22742](https://github.com/RocketChat/Rocket.Chat/pull/22742)) - Rewrite Enter Encryption Password Modal ([#22456](https://github.com/RocketChat/Rocket.Chat/pull/22456)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/123182889-bbf3c580-d466-11eb-8d4d-9cfc3d224e33.png) - - ### after - ![image](https://user-images.githubusercontent.com/27704687/123182916-cada7800-d466-11eb-96ee-850be190d419.png) - - ### Aditional Improves: + ### before + ![image](https://user-images.githubusercontent.com/27704687/123182889-bbf3c580-d466-11eb-8d4d-9cfc3d224e33.png) + + ### after + ![image](https://user-images.githubusercontent.com/27704687/123182916-cada7800-d466-11eb-96ee-850be190d419.png) + + ### Aditional Improves: + - Added a visual validation in the password field - Rewrite OTR modals ([#22583](https://github.com/RocketChat/Rocket.Chat/pull/22583)) - ![image](https://user-images.githubusercontent.com/40830821/124513267-cb510800-ddb0-11eb-8165-f103029c348f.png) - ![image](https://user-images.githubusercontent.com/40830821/124513354-04897800-ddb1-11eb-96f4-41fe906ca0d7.png) + ![image](https://user-images.githubusercontent.com/40830821/124513267-cb510800-ddb0-11eb-8165-f103029c348f.png) + ![image](https://user-images.githubusercontent.com/40830821/124513354-04897800-ddb1-11eb-96f4-41fe906ca0d7.png) ![image](https://user-images.githubusercontent.com/40830821/124513395-1b2fcf00-ddb1-11eb-83e4-3f8f9b4676ba.png) - Rewrite Save Encryption Password Modal ([#22447](https://github.com/RocketChat/Rocket.Chat/pull/22447)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/122980201-c337a800-d36e-11eb-8e2b-68534cea8e1e.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/122980201-c337a800-d36e-11eb-8e2b-68534cea8e1e.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/122980409-f8dc9100-d36e-11eb-9c15-aff779c84a91.png) - Rewrite sidebar footer as React Component ([#22687](https://github.com/RocketChat/Rocket.Chat/pull/22687)) @@ -4398,12 +5625,12 @@ - Wrong error message when trying to create a blocked username ([#22452](https://github.com/RocketChat/Rocket.Chat/pull/22452) by [@lucassartor](https://github.com/lucassartor)) - When trying to create a user with a blocked username, the UI was showing generic error message that it wasn't very detailed. - - Old error message: - ![image](https://user-images.githubusercontent.com/49413772/123120080-6d203e80-d41a-11eb-8c87-64e34334c856.png) - - New error message: + When trying to create a user with a blocked username, the UI was showing generic error message that it wasn't very detailed. + + Old error message: + ![image](https://user-images.githubusercontent.com/49413772/123120080-6d203e80-d41a-11eb-8c87-64e34334c856.png) + + New error message: ![aaa](https://user-images.githubusercontent.com/49413772/123120251-8c1ed080-d41a-11eb-8dc2-d7484923d851.PNG) ### 🐛 Bug fixes @@ -4411,19 +5638,19 @@ - **ENTERPRISE:** Engagement Dashboard displaying incorrect data about active users ([#22381](https://github.com/RocketChat/Rocket.Chat/pull/22381)) - - Fix sessions' and users' grouping in the Engagement Dashboard API endpoints; - - Fix the data displayed in the charts from the "Active users", "Users by time of day" and "When is the chat busier?" sections of the Engagement Dashboard; + - Fix sessions' and users' grouping in the Engagement Dashboard API endpoints; + - Fix the data displayed in the charts from the "Active users", "Users by time of day" and "When is the chat busier?" sections of the Engagement Dashboard; - Replace label used to describe the amount of Active Users in the License section of the Info page. - **ENTERPRISE:** Make AutoSelect algo take current agent load in consideration ([#22611](https://github.com/RocketChat/Rocket.Chat/pull/22611)) - **ENTERPRISE:** Race condition on Omnichannel visitor abandoned callback ([#22413](https://github.com/RocketChat/Rocket.Chat/pull/22413)) - As you can see [here](https://github.com/RocketChat/Rocket.Chat/blob/857791c39c97b51b5b6fd3718e0c816959a81c3b/ee/app/livechat-enterprise/server/lib/Helper.js#L127) the `predictedVisitorAbandonment` flag is not set if the room object doesn't have `v.lastMessageTs` property. So we need to always make sure the `v.lastMessageTs` is set before this method is called. - - Currently the `v.lastMessageTs` is being set in [this](https://github.com/RocketChat/Rocket.Chat/blob/857791c39c97b51b5b6fd3718e0c816959a81c3b/app/livechat/server/hooks/saveLastVisitorMessageTs.js#L4) (lets call this **hook-1**) hook which has `HIGH` priority - and the `predictedVisitorAbandonment` check is inturn performed in [this](https://github.com/RocketChat/Rocket.Chat/blob/857791c39c97b51b5b6fd3718e0c816959a81c3b/ee/app/livechat-enterprise/server/hooks/setPredictedVisitorAbandonmentTime.js#L5) (let call this **hook-2**) hook which is also `HIGH` priority. - + As you can see [here](https://github.com/RocketChat/Rocket.Chat/blob/857791c39c97b51b5b6fd3718e0c816959a81c3b/ee/app/livechat-enterprise/server/lib/Helper.js#L127) the `predictedVisitorAbandonment` flag is not set if the room object doesn't have `v.lastMessageTs` property. So we need to always make sure the `v.lastMessageTs` is set before this method is called. + + Currently the `v.lastMessageTs` is being set in [this](https://github.com/RocketChat/Rocket.Chat/blob/857791c39c97b51b5b6fd3718e0c816959a81c3b/app/livechat/server/hooks/saveLastVisitorMessageTs.js#L4) (lets call this **hook-1**) hook which has `HIGH` priority + and the `predictedVisitorAbandonment` check is inturn performed in [this](https://github.com/RocketChat/Rocket.Chat/blob/857791c39c97b51b5b6fd3718e0c816959a81c3b/ee/app/livechat-enterprise/server/hooks/setPredictedVisitorAbandonmentTime.js#L5) (let call this **hook-2**) hook which is also `HIGH` priority. + So ideally we'd except the **hook-1** to be called b4 **hook-2**, however currently since both of them are at same priority, there is no way to control which one is executed first. Hence in this PR, I'm making the priority of **hook-2** as `MEDIUM` to keeping the priority of **hook-1** the same as b4, i.e. `HIGH`. This should make sure that the **hook-1** is always executed b4 **hook-2** - Admin page crashing when commit hash is null ([#22057](https://github.com/RocketChat/Rocket.Chat/pull/22057) by [@cprice-kgi](https://github.com/cprice-kgi)) @@ -4432,39 +5659,41 @@ - Blank screen in message auditing DM tab ([#22763](https://github.com/RocketChat/Rocket.Chat/pull/22763) by [@ostjen](https://github.com/ostjen)) - The DM tab in message auditing was displaying a blank screen, instead of the actual tab. - + The DM tab in message auditing was displaying a blank screen, instead of the actual tab. + ![image](https://user-images.githubusercontent.com/28611993/127041404-dfca7f6a-2b8b-4c15-9cbd-c6238fac0063.png) - Bugs in AutoCompleteDepartment ([#22414](https://github.com/RocketChat/Rocket.Chat/pull/22414)) - Call button is still displayed when the user doesn't have permission to use it ([#22170](https://github.com/RocketChat/Rocket.Chat/pull/22170)) - - Hide 'Call' buttons from the tab bar for muted users; + - Hide 'Call' buttons from the tab bar for muted users; + - Display an error when a muted user attempts to enter a call using the 'Click to Join!' button. - Can't see full user profile on team's room ([#22355](https://github.com/RocketChat/Rocket.Chat/pull/22355)) - ### before - ![before](https://user-images.githubusercontent.com/27704687/121966860-bbac4980-cd45-11eb-8d48-2b0457110fc7.gif) - - ### after - ![after](https://user-images.githubusercontent.com/27704687/121966870-bea73a00-cd45-11eb-9c89-ec52ac17e20f.gif) - - ### aditional fix :rocket: + ### before + ![before](https://user-images.githubusercontent.com/27704687/121966860-bbac4980-cd45-11eb-8d48-2b0457110fc7.gif) + + ### after + ![after](https://user-images.githubusercontent.com/27704687/121966870-bea73a00-cd45-11eb-9c89-ec52ac17e20f.gif) + + ### aditional fix :rocket: + - unnecessary `TeamsMembers` component removed - Cannot create a discussion from top left sidebar as a user ([#22618](https://github.com/RocketChat/Rocket.Chat/pull/22618) by [@lucassartor](https://github.com/lucassartor)) - When trying to create a discussion using the top left sidebar modal with an role that don't have the `view-other-user-channels ` permission, an empty list would be shown, which is a wrong behavior. - Also, when being able to use this modal, discussions were listed as options, which is also a wrong behavior as there can't be nested discussions. - - This PR looks to fix both these issues. - - **Old behavior:** - ![old](https://user-images.githubusercontent.com/49413772/124960017-3c333280-dff2-11eb-86cd-b2638311517e.png) - - **New behavior:** + When trying to create a discussion using the top left sidebar modal with an role that don't have the `view-other-user-channels ` permission, an empty list would be shown, which is a wrong behavior. + Also, when being able to use this modal, discussions were listed as options, which is also a wrong behavior as there can't be nested discussions. + + This PR looks to fix both these issues. + + **Old behavior:** + ![old](https://user-images.githubusercontent.com/49413772/124960017-3c333280-dff2-11eb-86cd-b2638311517e.png) + + **New behavior:** ![image](https://user-images.githubusercontent.com/49413772/124958882-05a8e800-dff1-11eb-8203-b34a4f1c98a0.png) - Channel is automatically getting added to the first option in move to team feature ([#22670](https://github.com/RocketChat/Rocket.Chat/pull/22670) by [@ostjen](https://github.com/ostjen)) @@ -4479,12 +5708,12 @@ - Create discussion modal - cancel button and invite users alignment ([#22718](https://github.com/RocketChat/Rocket.Chat/pull/22718) by [@ostjen](https://github.com/ostjen)) - Changes in "open discussion" modal - - > Added cancel button - > Fixed alignment in invite user - - + Changes in "open discussion" modal + + > Added cancel button + > Fixed alignment in invite user + + ![image](https://user-images.githubusercontent.com/28611993/126388304-6ac76574-6924-426e-843d-afd53dc1c874.png) - crush in the getChannelHistory method ([#22667](https://github.com/RocketChat/Rocket.Chat/pull/22667) by [@MaestroArt](https://github.com/MaestroArt)) @@ -4519,27 +5748,29 @@ - Quote message not working for Livechat visitors ([#22586](https://github.com/RocketChat/Rocket.Chat/pull/22586)) - ### Before: - ![image](https://user-images.githubusercontent.com/34130764/124583613-de2b1180-de70-11eb-82aa-18564b317626.png) - ### After: + ### Before: + ![image](https://user-images.githubusercontent.com/34130764/124583613-de2b1180-de70-11eb-82aa-18564b317626.png) + ### After: ![image](https://user-images.githubusercontent.com/34130764/124583775-12063700-de71-11eb-8ab5-b0169fac2d40.png) - Redirect to login after delete own account ([#22499](https://github.com/RocketChat/Rocket.Chat/pull/22499)) - Redirect the user to login after delete own account - - ### Aditional fixes: - - Visual issue in password input on Delete Own Account Modal - - ### before - ![image](https://user-images.githubusercontent.com/27704687/123711503-f5ea1080-d846-11eb-96aa-8ed638ca665c.png) - - ### after + Redirect the user to login after delete own account + + ### Aditional fixes: + + - Visual issue in password input on Delete Own Account Modal + + ### before + ![image](https://user-images.githubusercontent.com/27704687/123711503-f5ea1080-d846-11eb-96aa-8ed638ca665c.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/123711336-b3c0cf00-d846-11eb-9408-a686d8668ba5.png) - Remove stack traces from Meteor errors when debug setting is disabled ([#22699](https://github.com/RocketChat/Rocket.Chat/pull/22699)) - - Fix 'not iterable' errors in the `normalizeMessage` function; + - Fix 'not iterable' errors in the `normalizeMessage` function; + - Remove stack traces from errors thrown by the `jitsi:updateTimeout` (and other `Meteor.Error`s) method. - Rewrite CurrentChats to TS ([#22424](https://github.com/RocketChat/Rocket.Chat/pull/22424)) @@ -4628,15 +5859,16 @@ - Regression: Data in the "Active Users" section is delayed in 1 day ([#22794](https://github.com/RocketChat/Rocket.Chat/pull/22794)) - - Fix 1 day delay in the Engagement Dashboard's "Active Users" section; - - Downgrade `@nivo/line` version. - **Expected behavior:** + - Fix 1 day delay in the Engagement Dashboard's "Active Users" section; + + - Downgrade `@nivo/line` version. + **Expected behavior:** ![active-users-engagement-dashboard](https://user-images.githubusercontent.com/36537004/127372185-390dc42f-bc90-4841-a22b-731f0aafcafe.PNG) - Regression: Data in the "New Users" section is delayed in 1 day ([#22751](https://github.com/RocketChat/Rocket.Chat/pull/22751)) - - Update nivo version (which was causing errors in the bar chart); - - Fix 1 day delay in '7 days' and '30 days' periods; + - Update nivo version (which was causing errors in the bar chart); + - Fix 1 day delay in '7 days' and '30 days' periods; - Update tooltip theme. - Regression: Federation warnings on ci ([#22765](https://github.com/RocketChat/Rocket.Chat/pull/22765) by [@g-thome](https://github.com/g-thome)) @@ -4661,9 +5893,9 @@ - Regression: Fix tooltip style in the "Busiest Chat Times" chart ([#22813](https://github.com/RocketChat/Rocket.Chat/pull/22813)) - - Fix tooltip in the Engagement Dashboard's "Busiest Chat Times" chart (Hours). - - **Expected behavior:** + - Fix tooltip in the Engagement Dashboard's "Busiest Chat Times" chart (Hours). + + **Expected behavior:** ![busiest-times-ed](https://user-images.githubusercontent.com/36537004/127527827-465397ed-f089-4fb7-9ab2-6fa8cea6abdf.PNG) - Regression: Fix users not being able to see the scope of the canned m… ([#22760](https://github.com/RocketChat/Rocket.Chat/pull/22760)) @@ -4680,10 +5912,10 @@ - Regression: Prevent custom status from being visible in sequential messages ([#22733](https://github.com/RocketChat/Rocket.Chat/pull/22733)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/126641946-866dae96-1983-43a5-b689-b24670473ad0.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/126641946-866dae96-1983-43a5-b689-b24670473ad0.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/126641752-3163eb95-1cd4-4d99-a61a-4d06d9e7e13e.png) - Regression: Properly force newline in attachment fields ([#22727](https://github.com/RocketChat/Rocket.Chat/pull/22727)) @@ -4864,30 +6096,32 @@ - Add `teams.convertToChannel` endpoint ([#22188](https://github.com/RocketChat/Rocket.Chat/pull/22188)) - - Add new `teams.converToChannel` endpoint; - - Update `ConvertToTeam` modal text (since this action can now be reversed); + - Add new `teams.converToChannel` endpoint; + + - Update `ConvertToTeam` modal text (since this action can now be reversed); + - Remove corresponding team memberships when a team is deleted or converted to a channel; - Add setting to configure default role for user on manual registration ([#20650](https://github.com/RocketChat/Rocket.Chat/pull/20650) by [@lucassartor](https://github.com/lucassartor)) - Add an `admin` setting to determine the initial `role` for new users who registered manually (through the register form and via API, not using an authentication service), normally all new users are assigned to the `user` role. - - The setting can be found in `Admin`->`Accounts`->`Registration`. - - ![image](https://user-images.githubusercontent.com/49413772/107252603-47b70900-6a14-11eb-9cc6-df76720b7365.png) - The setting initial value is false, so the default behaviour stays the same while creating a new server or upgrading one. - - https://user-images.githubusercontent.com/49413772/107253220-ddeb2f00-6a14-11eb-85b4-f770dbbe4970.mp4 - + Add an `admin` setting to determine the initial `role` for new users who registered manually (through the register form and via API, not using an authentication service), normally all new users are assigned to the `user` role. + + The setting can be found in `Admin`->`Accounts`->`Registration`. + + ![image](https://user-images.githubusercontent.com/49413772/107252603-47b70900-6a14-11eb-9cc6-df76720b7365.png) + The setting initial value is false, so the default behaviour stays the same while creating a new server or upgrading one. + + https://user-images.githubusercontent.com/49413772/107253220-ddeb2f00-6a14-11eb-85b4-f770dbbe4970.mp4 + Video showing an example of the setting being used and creating an new user with the default roles via API. - Content-Security-Policy for inline scripts ([#20724](https://github.com/RocketChat/Rocket.Chat/pull/20724)) - Security policies were applied for inline scripts cases. Due to the libraries and components we use it is not possible to disable inline styles and images as they would break Oembeds and other libraries. - - - basically the inline scripts were moved to a js file - + Security policies were applied for inline scripts cases. Due to the libraries and components we use it is not possible to disable inline styles and images as they would break Oembeds and other libraries. + + + basically the inline scripts were moved to a js file + and besides that some suggars syntax like `addScript` and `addStyle` were added, this way the application already takes care of inserting the elements and providing the content automatically. - Open modals in side effects outside React ([#22247](https://github.com/RocketChat/Rocket.Chat/pull/22247)) @@ -4903,15 +6137,17 @@ - Add BBB and Jitsi to Team ([#22312](https://github.com/RocketChat/Rocket.Chat/pull/22312)) - Added 2 new settings: - - `Admin > Video Conference > Big Blue Button > Enable for teams` + Added 2 new settings: + + - `Admin > Video Conference > Big Blue Button > Enable for teams` + - `Admin > Video Conference > Jitsi > Enable in teams` - Add debouncing to units selects filters ([#22097](https://github.com/RocketChat/Rocket.Chat/pull/22097)) - Add modal to close chats when tags/comments are not required ([#22245](https://github.com/RocketChat/Rocket.Chat/pull/22245) by [@rafaelblink](https://github.com/rafaelblink)) - When neither tags or comments are required to close a livechat, show this modal instead: + When neither tags or comments are required to close a livechat, show this modal instead: ![Screen Shot 2021-05-20 at 7 33 19 PM](https://user-images.githubusercontent.com/20868078/119057741-6af23c80-b9a3-11eb-902f-f8a7458ad11c.png) - Fallback messages on contextual bar ([#22376](https://github.com/RocketChat/Rocket.Chat/pull/22376)) @@ -4934,10 +6170,10 @@ - Remove differentiation between public x private channels in sidebar ([#22160](https://github.com/RocketChat/Rocket.Chat/pull/22160)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/119752184-e7d55880-be72-11eb-9167-be2f305ddb3f.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/119752184-e7d55880-be72-11eb-9167-be2f305ddb3f.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/119752125-c8d6c680-be72-11eb-8444-2e0c7cb1c600.png) - Rewrite create direct modal ([#22209](https://github.com/RocketChat/Rocket.Chat/pull/22209)) @@ -4946,8 +6182,8 @@ - Rewrite Create Discussion Modal (only through sidebar) ([#22224](https://github.com/RocketChat/Rocket.Chat/pull/22224)) - This is only available by creating a new discussion when clicking on the sidebar button. Other places will be implemented afterwards. - + This is only available by creating a new discussion when clicking on the sidebar button. Other places will be implemented afterwards. + ![image](https://user-images.githubusercontent.com/40830821/120556093-6af63180-c3d2-11eb-97ea-63c5423049dc.png) - Send only relevant data via WebSocket ([#22258](https://github.com/RocketChat/Rocket.Chat/pull/22258)) @@ -4961,12 +6197,12 @@ - **EE:** Canned responses can't be deleted ([#22095](https://github.com/RocketChat/Rocket.Chat/pull/22095) by [@rafaelblink](https://github.com/rafaelblink)) - Deletion button has been removed from the edition option. - - ## Before - ![image](https://user-images.githubusercontent.com/2493803/119059416-9f1b2c80-b9a6-11eb-933a-4efa1ac0552a.png) - - ### After + Deletion button has been removed from the edition option. + + ## Before + ![image](https://user-images.githubusercontent.com/2493803/119059416-9f1b2c80-b9a6-11eb-933a-4efa1ac0552a.png) + + ### After ![Rocket Chat (2)](https://user-images.githubusercontent.com/2493803/119172517-72b1ef80-ba3c-11eb-9178-04a12176f312.gif) - **ENTERPRISE:** Omnichannel enterprise permissions being added back to its default roles ([#22322](https://github.com/RocketChat/Rocket.Chat/pull/22322)) @@ -4975,19 +6211,19 @@ - **ENTERPRISE:** Prevent Visitor Abandonment after forwarding chat ([#22243](https://github.com/RocketChat/Rocket.Chat/pull/22243)) - Currently the Visitor Abandonment timer isn't affected when the chat is forwarded. However this is affecting the UX in certain situations like eg: A bot forwarding a chat to an human agent - ![image](https://user-images.githubusercontent.com/34130764/120896383-e4925780-c63e-11eb-937e-ffd7c4836159.png) - + Currently the Visitor Abandonment timer isn't affected when the chat is forwarded. However this is affecting the UX in certain situations like eg: A bot forwarding a chat to an human agent + ![image](https://user-images.githubusercontent.com/34130764/120896383-e4925780-c63e-11eb-937e-ffd7c4836159.png) + To solve this issue, we'll now be stoping the Visitor Abandonment timer once a chat is forwarded. - **IMPROVE:** Prevent creation of duplicated roles and new `roles.update` endpoint ([#22279](https://github.com/RocketChat/Rocket.Chat/pull/22279) by [@lucassartor](https://github.com/lucassartor)) - Currently, the action of updating a role is broken: because roles have their `_id` = `name`, when updating a role there's no way to validate if the user is trying to update or create a new role with a name that already exists - which causes wrong behaviors, such as roles with the same name and not being able to update them. - - To proper fix this, this PR looks to change the creation of roles. Now, roles have a unique `_id` value and there's a endpoint to update roles: `/api/v1/roles.update`. - - Doing so, it's possible to validate on both endpoints (`roles.create` and `roles.update`) to not allow roles with duplicated names. - + Currently, the action of updating a role is broken: because roles have their `_id` = `name`, when updating a role there's no way to validate if the user is trying to update or create a new role with a name that already exists - which causes wrong behaviors, such as roles with the same name and not being able to update them. + + To proper fix this, this PR looks to change the creation of roles. Now, roles have a unique `_id` value and there's a endpoint to update roles: `/api/v1/roles.update`. + + Doing so, it's possible to validate on both endpoints (`roles.create` and `roles.update`) to not allow roles with duplicated names. + **OBS:** The unique id changes only reflect new roles, the standard roles (such as admin and user) still have `_id` = `name`, but new roles now **can't** have the same name as them. - `channels.history`, `groups.history` and `im.history` REST endpoints not respecting hide system message config ([#22364](https://github.com/RocketChat/Rocket.Chat/pull/22364)) @@ -5004,10 +6240,10 @@ - Can't delete file from Room's file list ([#22191](https://github.com/RocketChat/Rocket.Chat/pull/22191)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/120215931-bb239700-c20c-11eb-9494-d4bc017df390.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/120215931-bb239700-c20c-11eb-9494-d4bc017df390.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/120216113-f8882480-c20c-11eb-9afb-b127e66a43da.png) - Cancel button and success toast at Leave Team modal ([#22373](https://github.com/RocketChat/Rocket.Chat/pull/22373)) @@ -5018,10 +6254,10 @@ - Convert and Move team permission ([#22350](https://github.com/RocketChat/Rocket.Chat/pull/22350)) - ### before - https://user-images.githubusercontent.com/45966964/114909360-5c04f100-9e1d-11eb-9363-f308e5d0be68.mp4 - - ### after + ### before + https://user-images.githubusercontent.com/45966964/114909360-5c04f100-9e1d-11eb-9363-f308e5d0be68.mp4 + + ### after https://user-images.githubusercontent.com/45966964/114909388-61fad200-9e1d-11eb-9bbe-114b55954a9f.mp4 - CORS error while interacting with any action button on Livechat ([#22150](https://github.com/RocketChat/Rocket.Chat/pull/22150)) @@ -5040,50 +6276,50 @@ - Members tab visual issues ([#22138](https://github.com/RocketChat/Rocket.Chat/pull/22138)) - ## Before - ![image](https://user-images.githubusercontent.com/27704687/119558283-95fbd800-bd77-11eb-91b4-91821f365bf3.png) - - ## After + ## Before + ![image](https://user-images.githubusercontent.com/27704687/119558283-95fbd800-bd77-11eb-91b4-91821f365bf3.png) + + ## After ![image](https://user-images.githubusercontent.com/27704687/119558120-6947c080-bd77-11eb-8ecb-7fedc07afa82.png) - Memory leak generated by Stream Cast usage ([#22329](https://github.com/RocketChat/Rocket.Chat/pull/22329)) - Stream Cast uses a different approach to broadcast data to the instances, it uses the DDP subscription method that requires a collection on the other side, if no collection exists with the given name `broadcast-stream` it caches in memory waiting for the collection to be set later. The cache is cleared only when a reconnection happens. - + Stream Cast uses a different approach to broadcast data to the instances, it uses the DDP subscription method that requires a collection on the other side, if no collection exists with the given name `broadcast-stream` it caches in memory waiting for the collection to be set later. The cache is cleared only when a reconnection happens. + This PR overrides the function that processes the data for that specific connection, preventing the cache and everything else to be processed since we already have our low-level listener to process the data. - Message box hiding on mobile view (Safari) ([#22212](https://github.com/RocketChat/Rocket.Chat/pull/22212)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/120404256-5b1c1600-c31c-11eb-96e9-860e4132db5f.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/120404256-5b1c1600-c31c-11eb-96e9-860e4132db5f.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/120404406-acc4a080-c31c-11eb-9efb-c2ad88664fda.png) - Missing burger menu on direct messages ([#22211](https://github.com/RocketChat/Rocket.Chat/pull/22211)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/120403671-09bf5700-c31b-11eb-92a1-a2f589bd85fc.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/120403671-09bf5700-c31b-11eb-92a1-a2f589bd85fc.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/120403693-1643af80-c31b-11eb-8027-dbdc4f560647.png) - Missing Throbber while thread list is loading ([#22316](https://github.com/RocketChat/Rocket.Chat/pull/22316)) - ### before - List was starting with no results even if there's results: - - ![image](https://user-images.githubusercontent.com/27704687/121606744-1e8ba100-ca25-11eb-9b31-706fb998d05f.png) - - ### after + ### before + List was starting with no results even if there's results: + + ![image](https://user-images.githubusercontent.com/27704687/121606744-1e8ba100-ca25-11eb-9b31-706fb998d05f.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/121606635-e97f4e80-ca24-11eb-81f7-af8b0cc41c89.png) - Not possible to edit some messages inside threads ([#22325](https://github.com/RocketChat/Rocket.Chat/pull/22325)) - ### Before - ![before](https://user-images.githubusercontent.com/27704687/121755733-4eeb4200-caee-11eb-9d77-1b498c38c478.gif) - - ### After + ### Before + ![before](https://user-images.githubusercontent.com/27704687/121755733-4eeb4200-caee-11eb-9d77-1b498c38c478.gif) + + ### After ![after](https://user-images.githubusercontent.com/27704687/121755736-514d9c00-caee-11eb-9897-78fcead172f2.gif) - Notifications not using user's name ([#22309](https://github.com/RocketChat/Rocket.Chat/pull/22309)) @@ -5110,10 +6346,10 @@ - Sidebar not closing when clicking on a channel ([#22271](https://github.com/RocketChat/Rocket.Chat/pull/22271)) - ### before - ![before](https://user-images.githubusercontent.com/27704687/121074843-c6e20100-c7aa-11eb-88db-76e39b57b064.gif) - - ### after + ### before + ![before](https://user-images.githubusercontent.com/27704687/121074843-c6e20100-c7aa-11eb-88db-76e39b57b064.gif) + + ### after ![after](https://user-images.githubusercontent.com/27704687/121074860-cb0e1e80-c7aa-11eb-9e96-06d75044b763.gif) - Sound notification is not emitted when the Omnichannel chat comes from another department ([#22291](https://github.com/RocketChat/Rocket.Chat/pull/22291)) @@ -5124,9 +6360,9 @@ - Undefined error when forwarding chats to offline department ([#22154](https://github.com/RocketChat/Rocket.Chat/pull/22154) by [@rafaelblink](https://github.com/rafaelblink)) - ![Screen Shot 2021-05-26 at 5 29 17 PM](https://user-images.githubusercontent.com/59577424/119727520-c495b380-be48-11eb-88a2-158017c7ad0a.png) - - Omnichannel agents are facing the error shown above when forwarding chats to offline departments. + ![Screen Shot 2021-05-26 at 5 29 17 PM](https://user-images.githubusercontent.com/59577424/119727520-c495b380-be48-11eb-88a2-158017c7ad0a.png) + + Omnichannel agents are facing the error shown above when forwarding chats to offline departments. The error usually takes place when the routing system algorithm is **Manual Selection**. - Unread bar in channel flash quickly and then disappear ([#22275](https://github.com/RocketChat/Rocket.Chat/pull/22275)) @@ -5157,15 +6393,15 @@ - Chore: Change modals for remove user from team && leave team ([#22141](https://github.com/RocketChat/Rocket.Chat/pull/22141)) - ![image](https://user-images.githubusercontent.com/40830821/119576154-93f14380-bd8e-11eb-8885-f889f2939bf4.png) + ![image](https://user-images.githubusercontent.com/40830821/119576154-93f14380-bd8e-11eb-8885-f889f2939bf4.png) ![image](https://user-images.githubusercontent.com/40830821/119576219-b5eac600-bd8e-11eb-832c-ea7a17a56bdd.png) - Chore: Check PR Title on every submission ([#22140](https://github.com/RocketChat/Rocket.Chat/pull/22140)) - Chore: Enable push gateway only if the server is registered ([#22346](https://github.com/RocketChat/Rocket.Chat/pull/22346) by [@lucassartor](https://github.com/lucassartor)) - Currently, when creating an unregistered server, the default value of the push gateway setting is set to true and is disabled (it can't be changed unless the server is registered). This is a wrong behavior as an unregistered server **can't** use the push gateway. - + Currently, when creating an unregistered server, the default value of the push gateway setting is set to true and is disabled (it can't be changed unless the server is registered). This is a wrong behavior as an unregistered server **can't** use the push gateway. + This PR creates a validation to check if the server is registered when enabling the push gateway. That way, even if the push gateway setting is turned on, but the server is unregistered, the push gateway **won't** work - it will behave like it is off. - Chore: Enforce TypeScript on Storybook ([#22317](https://github.com/RocketChat/Rocket.Chat/pull/22317)) @@ -5182,7 +6418,7 @@ - Chore: Update delete team modal to new design ([#22127](https://github.com/RocketChat/Rocket.Chat/pull/22127)) - Now the modal has only 2 steps (steps 1 and 2 were merged) + Now the modal has only 2 steps (steps 1 and 2 were merged) ![image](https://user-images.githubusercontent.com/40830821/119414580-2e398480-bcc6-11eb-9a47-515568257974.png) - Language update from LingoHub 🤖 on 2021-05-31Z ([#22196](https://github.com/RocketChat/Rocket.Chat/pull/22196)) @@ -5209,10 +6445,10 @@ - Regression: Missing flexDirection on select field ([#22300](https://github.com/RocketChat/Rocket.Chat/pull/22300)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/121425905-532a2a80-c949-11eb-885f-e8ddaf5c8d5c.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/121425905-532a2a80-c949-11eb-885f-e8ddaf5c8d5c.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/121425770-283fd680-c949-11eb-8d94-86886f174599.png) - Regression: RoomProvider using wrong types ([#22370](https://github.com/RocketChat/Rocket.Chat/pull/22370)) @@ -5353,50 +6589,50 @@ - **ENTERPRISE:** Introduce Load Rotation routing algorithm for Omnichannel ([#22090](https://github.com/RocketChat/Rocket.Chat/pull/22090) by [@rafaelblink](https://github.com/rafaelblink)) - This PR introduces a new Auto Chat Distribution (ACD) algorithm for Omnichannel: **Load Rotation**. - The algorithm distributes chats to agents one by one, which means that when a new chat arrives, the agent with the oldest routing assignment time will be selected to serve the chat, regardless of the number of chats in progress each agent has. - + This PR introduces a new Auto Chat Distribution (ACD) algorithm for Omnichannel: **Load Rotation**. + The algorithm distributes chats to agents one by one, which means that when a new chat arrives, the agent with the oldest routing assignment time will be selected to serve the chat, regardless of the number of chats in progress each agent has. + ![Screen Shot 2021-05-20 at 5 17 40 PM](https://user-images.githubusercontent.com/59577424/119043752-c61a3400-b98f-11eb-8543-f3176879af1d.png) - Back button for Omnichannel ([#21647](https://github.com/RocketChat/Rocket.Chat/pull/21647) by [@rafaelblink](https://github.com/rafaelblink)) - New Message Parser ([#21962](https://github.com/RocketChat/Rocket.Chat/pull/21962)) - The objective is to put an end to the confusion that we face having multiple parsers, and the problems that this brings, it is still experimental then users need to choose to use it. - - The benefits are multiple. no more unexpected cases or grammatical collisions (in addition to more flexible nested cases like bold within link labels). - Besides, we no longer render raw html, instead we use components, so the xss attacks are over (the easy ones at least). Without further discoveries and at the fronted, we only reder what is delivered thus improving our performance. + The objective is to put an end to the confusion that we face having multiple parsers, and the problems that this brings, it is still experimental then users need to choose to use it. + + The benefits are multiple. no more unexpected cases or grammatical collisions (in addition to more flexible nested cases like bold within link labels). + Besides, we no longer render raw html, instead we use components, so the xss attacks are over (the easy ones at least). Without further discoveries and at the fronted, we only reder what is delivered thus improving our performance. This can be used in multiple places, (message, alert, sidenav and in the entire mobile application.) - Option to notify failed login attempts to a channel ([#21968](https://github.com/RocketChat/Rocket.Chat/pull/21968)) - Option to prevent users from using Invisible status ([#20084](https://github.com/RocketChat/Rocket.Chat/pull/20084) by [@lucassartor](https://github.com/lucassartor)) - Add an `admin` option to allow/disallow the `Invisible` status option from all users. This option is available in the `Accounts` section. - - ![2021-01-06-11-55-22](https://user-images.githubusercontent.com/49413772/103782988-ebc52300-5016-11eb-8a29-dd540c21e11c.gif) - - If the option is turned off, the `users.setStatus` endpoint is also restricted from users trying to change their status to `Invisible`, throwing the following error: - ```json - { - "success": false, - "error": "Invisible status is disabled [error-not-allowed]", - "stack": "Error: Invisible status is disabled [error-not-allowed]\n at DDPCommon.MethodInvocation. (app/api/server/v1/users.js:425:13)\n at packages/dispatch_run-as-user.js:211:14\n at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1234:12)\n at Object.Meteor.runAsUser (packages/dispatch_run-as-user.js:210:33)\n at Object.post (app/api/server/v1/users.js:415:10)\n at app/api/server/api.js:394:82\n at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1234:12)\n at Object._internalRouteActionHandler [as action] (app/api/server/api.js:394:39)\n at Route.share.Route.Route._callEndpoint (packages/nimble_restivus/lib/route.coffee:150:32)\n at packages/nimble_restivus/lib/route.coffee:59:33\n at packages/simple_json-routes.js:98:9", - "errorType": "error-not-allowed", - "details": { - "method": "users.setStatus" - } - } + Add an `admin` option to allow/disallow the `Invisible` status option from all users. This option is available in the `Accounts` section. + + ![2021-01-06-11-55-22](https://user-images.githubusercontent.com/49413772/103782988-ebc52300-5016-11eb-8a29-dd540c21e11c.gif) + + If the option is turned off, the `users.setStatus` endpoint is also restricted from users trying to change their status to `Invisible`, throwing the following error: + ```json + { + "success": false, + "error": "Invisible status is disabled [error-not-allowed]", + "stack": "Error: Invisible status is disabled [error-not-allowed]\n at DDPCommon.MethodInvocation. (app/api/server/v1/users.js:425:13)\n at packages/dispatch_run-as-user.js:211:14\n at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1234:12)\n at Object.Meteor.runAsUser (packages/dispatch_run-as-user.js:210:33)\n at Object.post (app/api/server/v1/users.js:415:10)\n at app/api/server/api.js:394:82\n at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1234:12)\n at Object._internalRouteActionHandler [as action] (app/api/server/api.js:394:39)\n at Route.share.Route.Route._callEndpoint (packages/nimble_restivus/lib/route.coffee:150:32)\n at packages/nimble_restivus/lib/route.coffee:59:33\n at packages/simple_json-routes.js:98:9", + "errorType": "error-not-allowed", + "details": { + "method": "users.setStatus" + } + } ``` - Paginated and Filtered selects on new/edit unit ([#22052](https://github.com/RocketChat/Rocket.Chat/pull/22052) by [@rafaelblink](https://github.com/rafaelblink)) - REQUIRES https://github.com/RocketChat/Rocket.Chat.Fuselage/pull/447 - - Adds infinite scrolling selects to the units edit/create with the ability to be filtered by text as well - - ![Screen Shot 2021-05-17 at 9 24 19 AM](https://user-images.githubusercontent.com/20868078/118487999-abc32a80-b6f1-11eb-8d58-d031111ea0fb.png) - + REQUIRES https://github.com/RocketChat/Rocket.Chat.Fuselage/pull/447 + + Adds infinite scrolling selects to the units edit/create with the ability to be filtered by text as well + + ![Screen Shot 2021-05-17 at 9 24 19 AM](https://user-images.githubusercontent.com/20868078/118487999-abc32a80-b6f1-11eb-8d58-d031111ea0fb.png) + This Affects the monitors and departments inputs - Remove exif metadata from uploaded files ([#22044](https://github.com/RocketChat/Rocket.Chat/pull/22044)) @@ -5424,13 +6660,17 @@ - Inconsistent and misleading 2FA settings ([#22042](https://github.com/RocketChat/Rocket.Chat/pull/22042) by [@lucassartor](https://github.com/lucassartor)) - Currently, there are some inconsistencies and incorrect behaviors on the 2FA settings, such as: - - - When disabling the TOTP 2FA, all 2FA are disabled; - - There are no option to disable only the TOTP 2FA; - - If 2FA are disabled, the other settings aren't blocked (the e-mail 2FA setting, for example); - - It lacks some labels to warn the user of some specific 2FA options. - + Currently, there are some inconsistencies and incorrect behaviors on the 2FA settings, such as: + + + - When disabling the TOTP 2FA, all 2FA are disabled; + + - There are no option to disable only the TOTP 2FA; + + - If 2FA are disabled, the other settings aren't blocked (the e-mail 2FA setting, for example); + + - It lacks some labels to warn the user of some specific 2FA options. + This PR looks to fix those issues. - LDAP port setting input type to allow only numbers ([#21912](https://github.com/RocketChat/Rocket.Chat/pull/21912) by [@Deepak-learner](https://github.com/Deepak-learner)) @@ -5452,16 +6692,16 @@ - **APPS:** Scheduler duplicating recurrent tasks after server restart ([#21866](https://github.com/RocketChat/Rocket.Chat/pull/21866)) - Reintroduces the old method for creating recurring tasks in the apps' scheduler bridge to ensure tasks won't be duplicated. - - By introducing the [`skipImmediate` property option](https://github.com/RocketChat/Rocket.Chat/pull/21353) at the [`scheduleRecurring`](https://github.com/RocketChat/Rocket.Chat/blob/f8171f464ed8a7487795651767695fb33a1c709e/app/apps/server/bridges/scheduler.js#L119) method, the `every` method from _agenda.js_, which ensured no duplicates were created, was removed in favor of a more manual procedure. The new procedure was not taking into account the management of duplicates and as a result multiple copies of the same task could be created and they would get executed at the same time. - + Reintroduces the old method for creating recurring tasks in the apps' scheduler bridge to ensure tasks won't be duplicated. + + By introducing the [`skipImmediate` property option](https://github.com/RocketChat/Rocket.Chat/pull/21353) at the [`scheduleRecurring`](https://github.com/RocketChat/Rocket.Chat/blob/f8171f464ed8a7487795651767695fb33a1c709e/app/apps/server/bridges/scheduler.js#L119) method, the `every` method from _agenda.js_, which ensured no duplicates were created, was removed in favor of a more manual procedure. The new procedure was not taking into account the management of duplicates and as a result multiple copies of the same task could be created and they would get executed at the same time. + In the case of server restarts, every time this event happened and the app had the `startupSetting` configured to use _recurring tasks_, they would get recreated the same number of times. In the case of a server that restarts frequently (_n_ times), there would be the same (_n_) number of tasks duplicated (and running) in the system. - **ENTERPRISE:** Omnichannel Monitors can't forward chats to departments that they are not supervising ([#22128](https://github.com/RocketChat/Rocket.Chat/pull/22128)) - Currently, Omnichannel Monitors just can't forward chats to a department that is part of a `Business Unit` they're not supervising. This issue is causing critical problems on customer operations since this behaviour is not by design. - The reason this issue is taking place is that, by design, Monitors just have access to departments related to the `Business Units` they're monitoring, but this restriction is designed only for Omnichannel management areas, which means in case the monitor is, also, an agent, they're supposed to be able to forward a chat to any available departments regardless the `Business Units` it's associated with. + Currently, Omnichannel Monitors just can't forward chats to a department that is part of a `Business Unit` they're not supervising. This issue is causing critical problems on customer operations since this behaviour is not by design. + The reason this issue is taking place is that, by design, Monitors just have access to departments related to the `Business Units` they're monitoring, but this restriction is designed only for Omnichannel management areas, which means in case the monitor is, also, an agent, they're supposed to be able to forward a chat to any available departments regardless the `Business Units` it's associated with. So, initially, the restriction was implemented on the `Department Model` and, now, we're implementing the logic properly and introducing a new parameter to department endpoints, so the client will define which type of departments it needs. - **ENTERPRISE:** Omnichannel Monitors can't forward chats to departments that they are not supervising ([#22142](https://github.com/RocketChat/Rocket.Chat/pull/22142)) @@ -5500,18 +6740,18 @@ - Correcting a the wrong Archived label in edit room ([#21717](https://github.com/RocketChat/Rocket.Chat/pull/21717) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - ![image](https://user-images.githubusercontent.com/45966964/116584997-3cd78a80-a918-11eb-81fa-8a7eb5318ae9.png) - + ![image](https://user-images.githubusercontent.com/45966964/116584997-3cd78a80-a918-11eb-81fa-8a7eb5318ae9.png) + A label exists for Archived, and it has not been used. So I replaced it with the existing one. the label 'Archived' does not exist. - Custom OAuth not being completely deleted ([#21637](https://github.com/RocketChat/Rocket.Chat/pull/21637) by [@siva2204](https://github.com/siva2204)) - Directory Table's Sort Function ([#21921](https://github.com/RocketChat/Rocket.Chat/pull/21921)) - ### TableRow Margin Issue: - ![image](https://user-images.githubusercontent.com/27704687/116907348-d6a07f80-ac17-11eb-9411-edfe0906bfe1.png) - - ### Table Sort Action Issue: + ### TableRow Margin Issue: + ![image](https://user-images.githubusercontent.com/27704687/116907348-d6a07f80-ac17-11eb-9411-edfe0906bfe1.png) + + ### Table Sort Action Issue: ![directory](https://user-images.githubusercontent.com/27704687/116907441-f20b8a80-ac17-11eb-8790-bfce19e89a67.gif) - Discussion names showing a random value ([#22172](https://github.com/RocketChat/Rocket.Chat/pull/22172)) @@ -5522,54 +6762,54 @@ - Emails being sent with HTML entities getting escaped multiple times ([#21994](https://github.com/RocketChat/Rocket.Chat/pull/21994) by [@bhavayAnand9](https://github.com/bhavayAnand9)) - fixes an issue where if password contains special HTML character like &, in the email it would end up something like `&amp;` - - - password was going through multiple escapeHTML function calls - `secure&123 => secure&123 => secure&amp;123 + fixes an issue where if password contains special HTML character like &, in the email it would end up something like `&amp;` + + + password was going through multiple escapeHTML function calls + `secure&123 => secure&123 => secure&amp;123 ` - Error when you look at the members list of a room in which you are not a member ([#21952](https://github.com/RocketChat/Rocket.Chat/pull/21952) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - Before, when you look at the members of a room in which you are not a member the app crashed, i corrected this problem. - Indeed, there was a check on each currentSubscription. to see if it was not undefined except on currentSubscription.blocker - + Before, when you look at the members of a room in which you are not a member the app crashed, i corrected this problem. + Indeed, there was a check on each currentSubscription. to see if it was not undefined except on currentSubscription.blocker + https://user-images.githubusercontent.com/45966964/117087470-d3101400-ad4f-11eb-8f44-0ebca830a4d8.mp4 - errors when viewing a room that you're not subscribed to ([#21984](https://github.com/RocketChat/Rocket.Chat/pull/21984)) - Files list will not show deleted files. ([#21732](https://github.com/RocketChat/Rocket.Chat/pull/21732) by [@Darshilp326](https://github.com/Darshilp326)) - When you delete files from the header option, deleted files will not be shown. - + When you delete files from the header option, deleted files will not be shown. + https://user-images.githubusercontent.com/55157259/115730786-38552400-a3a4-11eb-9684-7f510920db66.mp4 - Fixed the fact that when a team was deleted, not all channels were unlinked from the team ([#21942](https://github.com/RocketChat/Rocket.Chat/pull/21942) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - Fixed the fact that when a team was deleted, not all channels were unlinked from the team. Only the first room of the rooms list was unlinked. - - After the fix, there is nos more errors: - - + Fixed the fact that when a team was deleted, not all channels were unlinked from the team. Only the first room of the rooms list was unlinked. + + After the fix, there is nos more errors: + + https://user-images.githubusercontent.com/45966964/117055182-2a47c180-ad1b-11eb-806f-07fb3fa7ec12.mp4 - Fixing Jitsi call ended Issue. ([#21808](https://github.com/RocketChat/Rocket.Chat/pull/21808)) - The new rewrite in react of contextual call component broke the Jitsi "click to join" messages. The issue being after 10 seconds of initiating the call, the message "click to join" always returned "Call Ended" even if the call was still going on. - This was due to the fact that after closing the contextual bar, the react component gets unmounted and we are not able to keep track of ongoing call and increase jitsi room timeout. - - This PR solves this issue by using the setInterval methods on component will unmount. When the call component unmounts, we keep on checking the state of jitsi call and based on conditions increase the jitsi room timeout. After the call is ended all setInterval calls are closed. - + The new rewrite in react of contextual call component broke the Jitsi "click to join" messages. The issue being after 10 seconds of initiating the call, the message "click to join" always returned "Call Ended" even if the call was still going on. + This was due to the fact that after closing the contextual bar, the react component gets unmounted and we are not able to keep track of ongoing call and increase jitsi room timeout. + + This PR solves this issue by using the setInterval methods on component will unmount. When the call component unmounts, we keep on checking the state of jitsi call and based on conditions increase the jitsi room timeout. After the call is ended all setInterval calls are closed. + This PR also removes the implementation of HEARTBEAT events of JitsiBridge. This is because this is no longer needed and all logic is being taken care of by the unmount function. - Handle NPS errors instead of throwing them ([#21945](https://github.com/RocketChat/Rocket.Chat/pull/21945)) - Header Tag Visual Issues ([#21991](https://github.com/RocketChat/Rocket.Chat/pull/21991)) - ### Normal - ![image](https://user-images.githubusercontent.com/27704687/117504793-69635600-af59-11eb-8b79-9d8f631490ee.png) - - ### Hover + ### Normal + ![image](https://user-images.githubusercontent.com/27704687/117504793-69635600-af59-11eb-8b79-9d8f631490ee.png) + + ### Hover ![image](https://user-images.githubusercontent.com/27704687/117504934-97489a80-af59-11eb-87c3-0a62731e9ce3.png) - Horizontal scrollbar not showing on tables ([#21852](https://github.com/RocketChat/Rocket.Chat/pull/21852)) @@ -5578,17 +6818,17 @@ - iFrame size on embedded videos ([#21992](https://github.com/RocketChat/Rocket.Chat/pull/21992)) - ### Before - ![image](https://user-images.githubusercontent.com/27704687/117508802-8bf86d80-af5f-11eb-9eb8-29e55b73eac5.png) - - ### After + ### Before + ![image](https://user-images.githubusercontent.com/27704687/117508802-8bf86d80-af5f-11eb-9eb8-29e55b73eac5.png) + + ### After ![image](https://user-images.githubusercontent.com/27704687/117508870-a4688800-af5f-11eb-9176-7f24de5fc424.png) - Incorrect error message when opening channel in anonymous read ([#22066](https://github.com/RocketChat/Rocket.Chat/pull/22066) by [@lucassartor](https://github.com/lucassartor)) - Every time you open a public channel with threads in it when using anonymous read an `Incorrect User` error will be thrown. - This is an incorrect behaviour as everything that is public should be valid for an anonymous user. - + Every time you open a public channel with threads in it when using anonymous read an `Incorrect User` error will be thrown. + This is an incorrect behaviour as everything that is public should be valid for an anonymous user. + Some files are adapted to that and have already removed this kind of incorrect error, but there are some that need some fix, this PR aims to do that. - Incorrect Team's Info spacing ([#22021](https://github.com/RocketChat/Rocket.Chat/pull/22021)) @@ -5601,19 +6841,21 @@ - Make the FR translation consistent with the 'room' translation + typos ([#21913](https://github.com/RocketChat/Rocket.Chat/pull/21913) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - In the FR translation files, there were two terms that were used to refer to **'room'**: - - 'salon' (149 times used) - - ![image](https://user-images.githubusercontent.com/45966964/116829860-ac62a980-aba6-11eb-8212-e6f15ed0af82.png) - - - 'salle' (46 times used) - - ![image](https://user-images.githubusercontent.com/45966964/116829871-be444c80-aba6-11eb-9b42-e213fee6586a.png) - - The problem is that both were used in the same context and sometimes even in the same option list. - However, since 'salon' is a better translation and was also in the majority, I used the translation 'salon' wherever 'salle' was marked. - - For example: + In the FR translation files, there were two terms that were used to refer to **'room'**: + + - 'salon' (149 times used) + + ![image](https://user-images.githubusercontent.com/45966964/116829860-ac62a980-aba6-11eb-8212-e6f15ed0af82.png) + + + - 'salle' (46 times used) + + ![image](https://user-images.githubusercontent.com/45966964/116829871-be444c80-aba6-11eb-9b42-e213fee6586a.png) + + The problem is that both were used in the same context and sometimes even in the same option list. + However, since 'salon' is a better translation and was also in the majority, I used the translation 'salon' wherever 'salle' was marked. + + For example: ![image](https://user-images.githubusercontent.com/45966964/116830523-1da45b80-abab-11eb-81f8-5225d51cecc6.png) - Maximum 25 channels can be loaded in the teams' channels list ([#21708](https://github.com/RocketChat/Rocket.Chat/pull/21708) by [@Jeanstaquet](https://github.com/Jeanstaquet)) @@ -5628,8 +6870,8 @@ - No warning message is sent when user is removed from a team's main channel ([#21949](https://github.com/RocketChat/Rocket.Chat/pull/21949)) - - Send a warning message to a team's main channel when a user is removed from the team; - - Trigger events while removing a user from a team's main channel; + - Send a warning message to a team's main channel when a user is removed from the team; + - Trigger events while removing a user from a team's main channel; - Fix `usersCount` field in the team's main room when a user is removed from the team (`usersCount` is now decreased by 1). - Not possible accept video call if "Hide right sidebar with click" is enabled ([#22175](https://github.com/RocketChat/Rocket.Chat/pull/22175)) @@ -5650,14 +6892,14 @@ - Prevent the userInfo tab to return 'User not found' each time if a certain member of a DM group has been deleted ([#21970](https://github.com/RocketChat/Rocket.Chat/pull/21970) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - Prevent the userInfo tab to return 'User not found' if a member of a DM group has been deleted. - This happens if the user that has been deleted is the one originally displayed on the userInfo tab in a DM group with >2 users. - + Prevent the userInfo tab to return 'User not found' if a member of a DM group has been deleted. + This happens if the user that has been deleted is the one originally displayed on the userInfo tab in a DM group with >2 users. + https://user-images.githubusercontent.com/45966964/117221081-db785580-ae08-11eb-9b33-2314a99eb037.mp4 - Prune messages not cleaning up unread threads ([#21326](https://github.com/RocketChat/Rocket.Chat/pull/21326) by [@renancleyson-dev](https://github.com/renancleyson-dev)) - Fixes permanent unread messages when admin prune at least two different thread messages in the room that were unread by some user. + Fixes permanent unread messages when admin prune at least two different thread messages in the room that were unread by some user. ![screencapture-localhost-3000-channel-general-thread-2021-03-26-13_17_16](https://user-images.githubusercontent.com/43624243/112678973-62b9cd00-8e4a-11eb-9af9-56f17cc66baf.png) - Redirect on remove user from channel by user profile tab ([#21951](https://github.com/RocketChat/Rocket.Chat/pull/21951)) @@ -5668,8 +6910,8 @@ - Removed fields from User Info for which the user doesn't have permissions. ([#20923](https://github.com/RocketChat/Rocket.Chat/pull/20923) by [@Darshilp326](https://github.com/Darshilp326)) - Removed LastLogin, CreatedAt and Roles for users who don't have permission. - + Removed LastLogin, CreatedAt and Roles for users who don't have permission. + https://user-images.githubusercontent.com/55157259/109381351-f2c62e80-78ff-11eb-9289-e11072bf62f8.mp4 - Replace `query` param by `name`, `username` and `status` on the `teams.members` endpoint ([#21539](https://github.com/RocketChat/Rocket.Chat/pull/21539)) @@ -5682,39 +6924,39 @@ - Unable to edit a 'direct' room setting in the admin due to the room name ([#21636](https://github.com/RocketChat/Rocket.Chat/pull/21636) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - When you are in the admin and want to change a room 'd' setting, it doesn't work because it takes into account the name that is set automatically and therefore tries to save that name. Since the name is not valid and should not be registered, we cannot change the setting for the 'd' room. - I made sure that when you want to change a setting in a 'd' room, that you don't take the name into account - - - https://user-images.githubusercontent.com/45966964/115150919-cd85af00-a06a-11eb-9667-ef3dcfc5adb6.mp4 - - + When you are in the admin and want to change a room 'd' setting, it doesn't work because it takes into account the name that is set automatically and therefore tries to save that name. Since the name is not valid and should not be registered, we cannot change the setting for the 'd' room. + I made sure that when you want to change a setting in a 'd' room, that you don't take the name into account + + + https://user-images.githubusercontent.com/45966964/115150919-cd85af00-a06a-11eb-9667-ef3dcfc5adb6.mp4 + + Behind the scene, the name is not saved - Unable to edit a user who does not have an email via the admin or via the user's profile ([#21626](https://github.com/RocketChat/Rocket.Chat/pull/21626) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - If a user does not have an email address, they cannot change it via their profile or via the admin. I fixed this issue. I have created several profiles and there was one that didn't have an email, I don't know how I did it, I am working on it. I had not modified the db to delete his email, hence the fix - - in admin - - https://user-images.githubusercontent.com/45966964/115112617-9b9b1c80-9f86-11eb-8e3a-950c3c1a1746.mp4 - - - - in the user profile - + If a user does not have an email address, they cannot change it via their profile or via the admin. I fixed this issue. I have created several profiles and there was one that didn't have an email, I don't know how I did it, I am working on it. I had not modified the db to delete his email, hence the fix + + in admin + + https://user-images.githubusercontent.com/45966964/115112617-9b9b1c80-9f86-11eb-8e3a-950c3c1a1746.mp4 + + + + in the user profile + https://user-images.githubusercontent.com/45966964/115112620-a0f86700-9f86-11eb-97b1-56eaba42216b.mp4 - Unable to get channels, sort by most recent message ([#21701](https://github.com/RocketChat/Rocket.Chat/pull/21701) by [@sumukhah](https://github.com/sumukhah)) - Unable to update app manually ([#21215](https://github.com/RocketChat/Rocket.Chat/pull/21215)) - It allows for update of apps using a zip file. - - When installing apps using the zip file, either by url or the file form, if the app was already installed, an error would be thrown stating the condition and forbidding the installation. Now, when sending a zip file of an app that is already installed, the user is presented with the following modal: - - ![2021-04-30-113936_627x235_scrot](https://user-images.githubusercontent.com/733282/116711383-2cbbbb80-a9a9-11eb-8c77-22d6802cb9f5.png) - + It allows for update of apps using a zip file. + + When installing apps using the zip file, either by url or the file form, if the app was already installed, an error would be thrown stating the condition and forbidding the installation. Now, when sending a zip file of an app that is already installed, the user is presented with the following modal: + + ![2021-04-30-113936_627x235_scrot](https://user-images.githubusercontent.com/733282/116711383-2cbbbb80-a9a9-11eb-8c77-22d6802cb9f5.png) + If the app also requires permissions to be reviewed, the modal that handles permission reviews will be shown after this one is accepted. - Unpin message reactivity ([#22029](https://github.com/RocketChat/Rocket.Chat/pull/22029)) @@ -5725,20 +6967,20 @@ - User Impersonation through sendMessage API ([#20391](https://github.com/RocketChat/Rocket.Chat/pull/20391) by [@lucassartor](https://github.com/lucassartor)) - Create a new permission: `message-impersonate`. For new installs only bot role will have the permission and for updating installs the permission will also be given to user role, so it won't break running deployments. - - If a message is being sent with `avatar` or `alias` properties, it validates if the sender has the `message-impersonate` permission, if not, an error is throwed: - ```json - { - "success": false, - "error": "Not enough permission", - "stack": "Error: Not enough permission\n ..." - } + Create a new permission: `message-impersonate`. For new installs only bot role will have the permission and for updating installs the permission will also be given to user role, so it won't break running deployments. + + If a message is being sent with `avatar` or `alias` properties, it validates if the sender has the `message-impersonate` permission, if not, an error is throwed: + ```json + { + "success": false, + "error": "Not enough permission", + "stack": "Error: Not enough permission\n ..." + } ``` - Visibility of burger menu on certain width ([#20736](https://github.com/RocketChat/Rocket.Chat/pull/20736)) - Burger was not visible on a certain width, specifically between 600 to 780. if width is more than 780px sidebar is shown, if less than 600 then burger icon was shown. But it wasn't shown between 600px to 780 px. + Burger was not visible on a certain width, specifically between 600 to 780. if width is more than 780px sidebar is shown, if less than 600 then burger icon was shown. But it wasn't shown between 600px to 780 px. It was because for showing burger icon we were only checking for `isMobile` which is lenght only less than 600. So i added one more check for condition if length is less than 780 px. - When closing chats a comment is always required ([#21947](https://github.com/RocketChat/Rocket.Chat/pull/21947)) @@ -5753,8 +6995,8 @@ - Wrong icon on "Move to team" option in the channel info actions ([#21944](https://github.com/RocketChat/Rocket.Chat/pull/21944)) - ![image](https://user-images.githubusercontent.com/40830821/117061659-d9bf6c80-acf8-11eb-8e29-be47e702dedd.png) - + ![image](https://user-images.githubusercontent.com/40830821/117061659-d9bf6c80-acf8-11eb-8e29-be47e702dedd.png) + Depends on https://github.com/RocketChat/Rocket.Chat.Fuselage/pull/444
@@ -5771,8 +7013,10 @@ - Add two more test cases to the slash-command test suite ([#21317](https://github.com/RocketChat/Rocket.Chat/pull/21317) by [@EduardoPicolo](https://github.com/EduardoPicolo)) - Added two more test cases to the slash-command test suite: - - 'should return an error when the command does not exist''; + Added two more test cases to the slash-command test suite: + + - 'should return an error when the command does not exist''; + - 'should return an error when no command is provided'; - Bump actions/stale from v3.0.8 to v3.0.18 ([#21877](https://github.com/RocketChat/Rocket.Chat/pull/21877) by [@dependabot[bot]](https://github.com/dependabot[bot])) @@ -5807,9 +7051,9 @@ - i18n: Add missing translation string in account preference ([#21448](https://github.com/RocketChat/Rocket.Chat/pull/21448) by [@sumukhah](https://github.com/sumukhah)) - "Test Desktop Notifications" was missing in translation, Added to the file. - Screenshot 2021-04-05 at 3 58 01 PM - + "Test Desktop Notifications" was missing in translation, Added to the file. + Screenshot 2021-04-05 at 3 58 01 PM + Screenshot 2021-04-05 at 3 58 32 PM - i18n: Correct a typo in German ([#21711](https://github.com/RocketChat/Rocket.Chat/pull/21711) by [@Jeanstaquet](https://github.com/Jeanstaquet)) @@ -5836,10 +7080,10 @@ - Regression: discussions display on sidebar ([#22157](https://github.com/RocketChat/Rocket.Chat/pull/22157)) - ### group by type active - ![image](https://user-images.githubusercontent.com/27704687/119741996-37a92500-be5d-11eb-8b36-4067a7a229f1.png) - - ### group by type inactive + ### group by type active + ![image](https://user-images.githubusercontent.com/27704687/119741996-37a92500-be5d-11eb-8b36-4067a7a229f1.png) + + ### group by type inactive ![image](https://user-images.githubusercontent.com/27704687/119742054-56a7b700-be5d-11eb-8810-e31d4216f573.png) - regression: fix departments with empty ancestors not being returned ([#22068](https://github.com/RocketChat/Rocket.Chat/pull/22068)) @@ -5850,8 +7094,8 @@ - regression: Fix Users list in the Administration ([#22034](https://github.com/RocketChat/Rocket.Chat/pull/22034) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - The app crashed if no custom fields for user profiles have been created by the admin. I fixed this issue. This bug was introduced by a recent commit. - + The app crashed if no custom fields for user profiles have been created by the admin. I fixed this issue. This bug was introduced by a recent commit. + https://user-images.githubusercontent.com/45966964/118210838-5b3a9b80-b46b-11eb-9fe5-5b813848190c.mp4 - Regression: Improve migration 225 ([#22099](https://github.com/RocketChat/Rocket.Chat/pull/22099)) @@ -5868,7 +7112,7 @@ - Regression: not allowed to edit roles due to a new verification ([#22159](https://github.com/RocketChat/Rocket.Chat/pull/22159)) - introduced by https://github.com/RocketChat/Rocket.Chat/pull/21905 + introduced by https://github.com/RocketChat/Rocket.Chat/pull/21905 ![Peek 2021-05-26 22-21](https://user-images.githubusercontent.com/27704687/119750970-b9567e00-be70-11eb-9d52-04c8595950df.gif) - regression: Select Team Modal margin ([#22030](https://github.com/RocketChat/Rocket.Chat/pull/22030)) @@ -5879,10 +7123,10 @@ - Regression: Visual issue on sort list item ([#22158](https://github.com/RocketChat/Rocket.Chat/pull/22158)) - ### before - ![image](https://user-images.githubusercontent.com/27704687/119743703-d84d1400-be60-11eb-97cc-c8256b2c8b07.png) - - ### after + ### before + ![image](https://user-images.githubusercontent.com/27704687/119743703-d84d1400-be60-11eb-97cc-c8256b2c8b07.png) + + ### after ![image](https://user-images.githubusercontent.com/27704687/119743638-b18edd80-be60-11eb-828d-22cc5e1b2f5b.png) - Release 3.14.2 ([#22135](https://github.com/RocketChat/Rocket.Chat/pull/22135)) @@ -6068,12 +7312,12 @@ - Paginated and Filtered selects on new/edit unit ([#22052](https://github.com/RocketChat/Rocket.Chat/pull/22052) by [@rafaelblink](https://github.com/rafaelblink)) - REQUIRES https://github.com/RocketChat/Rocket.Chat.Fuselage/pull/447 - - Adds infinite scrolling selects to the units edit/create with the ability to be filtered by text as well - - ![Screen Shot 2021-05-17 at 9 24 19 AM](https://user-images.githubusercontent.com/20868078/118487999-abc32a80-b6f1-11eb-8d58-d031111ea0fb.png) - + REQUIRES https://github.com/RocketChat/Rocket.Chat.Fuselage/pull/447 + + Adds infinite scrolling selects to the units edit/create with the ability to be filtered by text as well + + ![Screen Shot 2021-05-17 at 9 24 19 AM](https://user-images.githubusercontent.com/20868078/118487999-abc32a80-b6f1-11eb-8d58-d031111ea0fb.png) + This Affects the monitors and departments inputs ### 🚀 Improvements @@ -6149,18 +7393,24 @@ - New set of rules for client code ([#21318](https://github.com/RocketChat/Rocket.Chat/pull/21318)) - This _small_ PR does the following: - - - Now **React** is the web client's first-class citizen, being **loaded before Blaze**. Thus, `BlazeLayout` calls render templates inside of a React component (`BlazeLayoutWrapper`); - - Main client startup code, including polyfills, is written in **TypeScript**; - - At the moment, routes are treated as regular startup code; it's expected that `FlowRouter` will be deprecated in favor of a new routing library; - - **React** was updated to major version **17**, deprecating the usage of `React` as namespace (e.g. use `memo()` instead of `React.memo()`); - - The `client/` and `ee/client/` directory are linted with a **custom ESLint configuration** that includes: - - **Prettier**; - - `react-hooks/*` rules for TypeScript files; - - `react/no-multi-comp`, enforcing the rule of **one single React component per module**; - - `react/display-name`, which enforces that **React components must have a name for debugging**; - - `import/named`, avoiding broken named imports. + This _small_ PR does the following: + + + - Now **React** is the web client's first-class citizen, being **loaded before Blaze**. Thus, `BlazeLayout` calls render templates inside of a React component (`BlazeLayoutWrapper`); + + - Main client startup code, including polyfills, is written in **TypeScript**; + + - At the moment, routes are treated as regular startup code; it's expected that `FlowRouter` will be deprecated in favor of a new routing library; + + - **React** was updated to major version **17**, deprecating the usage of `React` as namespace (e.g. use `memo()` instead of `React.memo()`); + + - The `client/` and `ee/client/` directory are linted with a **custom ESLint configuration** that includes: + - **Prettier**; + - `react-hooks/*` rules for TypeScript files; + - `react/no-multi-comp`, enforcing the rule of **one single React component per module**; + - `react/display-name`, which enforces that **React components must have a name for debugging**; + - `import/named`, avoiding broken named imports. + - A bunch of components were refactored to match the new ESLint rules. - On Hold system messages ([#21360](https://github.com/RocketChat/Rocket.Chat/pull/21360) by [@rafaelblink](https://github.com/rafaelblink)) @@ -6169,12 +7419,15 @@ - Password history ([#21607](https://github.com/RocketChat/Rocket.Chat/pull/21607)) - - Store each user's previously used passwords in a `passwordHistory` field (in the `users` record); - - Users' previously used passwords are stored in their `passwordHistory` even when the setting is disabled; - - Add "Password History" setting -- when enabled, it blocks users from reusing their most recent passwords; - - Convert `comparePassword` file to TypeScript. - - ![Password_Change](https://user-images.githubusercontent.com/36537004/115035168-ac726200-9ea2-11eb-93c6-fc8182ba5f3f.png) + - Store each user's previously used passwords in a `passwordHistory` field (in the `users` record); + + - Users' previously used passwords are stored in their `passwordHistory` even when the setting is disabled; + + - Add "Password History" setting -- when enabled, it blocks users from reusing their most recent passwords; + + - Convert `comparePassword` file to TypeScript. + + ![Password_Change](https://user-images.githubusercontent.com/36537004/115035168-ac726200-9ea2-11eb-93c6-fc8182ba5f3f.png) ![Password_History](https://user-images.githubusercontent.com/36537004/115035175-ad0af880-9ea2-11eb-9f40-94c6327a9854.png) - REST endpoint `teams.update` ([#21134](https://github.com/RocketChat/Rocket.Chat/pull/21134) by [@g-thome](https://github.com/g-thome)) @@ -6192,14 +7445,18 @@ - Add error messages to the creation of channels or usernames containing reserved words ([#21016](https://github.com/RocketChat/Rocket.Chat/pull/21016)) - Display error messages when the user attempts to create or edit users' or channels' names with any of the following words (**case-insensitive**): - - admin; - - administrator; - - system; - - user. - ![create-channel](https://user-images.githubusercontent.com/36537004/110132223-b421ef80-7da9-11eb-82bc-f0d4e1df967f.png) - ![register-username](https://user-images.githubusercontent.com/36537004/110132234-b71ce000-7da9-11eb-904e-580233625951.png) - ![change-channel](https://user-images.githubusercontent.com/36537004/110143057-96f31e00-7db5-11eb-994a-39ae9e63392e.png) + Display error messages when the user attempts to create or edit users' or channels' names with any of the following words (**case-insensitive**): + + - admin; + + - administrator; + + - system; + + - user. + ![create-channel](https://user-images.githubusercontent.com/36537004/110132223-b421ef80-7da9-11eb-82bc-f0d4e1df967f.png) + ![register-username](https://user-images.githubusercontent.com/36537004/110132234-b71ce000-7da9-11eb-904e-580233625951.png) + ![change-channel](https://user-images.githubusercontent.com/36537004/110143057-96f31e00-7db5-11eb-994a-39ae9e63392e.png) ![change-username](https://user-images.githubusercontent.com/36537004/110143065-98244b00-7db5-11eb-9d13-afc5dc9866de.png) - add permission check when adding a channel to a team ([#21689](https://github.com/RocketChat/Rocket.Chat/pull/21689) by [@g-thome](https://github.com/g-thome)) @@ -6224,7 +7481,8 @@ - Resize custom emojis on upload instead of saving at max res ([#21593](https://github.com/RocketChat/Rocket.Chat/pull/21593)) - - Create new MediaService (ideally, should be in charge of all media-related operations) + - Create new MediaService (ideally, should be in charge of all media-related operations) + - Resize emojis to 128x128 ### 🐛 Bug fixes @@ -6244,25 +7502,25 @@ - Allows more than 25 discussions/files to be loaded in the contextualbar ([#21511](https://github.com/RocketChat/Rocket.Chat/pull/21511) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - In some places, you could not load more than 25 threads/discussions/files on the screen when searching the lists in the contextualbar. - Threads & list are numbered for a better view of the solution - - + In some places, you could not load more than 25 threads/discussions/files on the screen when searching the lists in the contextualbar. + Threads & list are numbered for a better view of the solution + + https://user-images.githubusercontent.com/45966964/114222225-93335800-996e-11eb-833f-568e83129aae.mp4 - Allows more than 25 threads to be loaded, fixes #21507 ([#21508](https://github.com/RocketChat/Rocket.Chat/pull/21508) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - Allows to display more than 25 users maximum in the users list ([#21518](https://github.com/RocketChat/Rocket.Chat/pull/21518) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - Now when you scroll to the bottom of the users list, it shows more users. Before the fix, the limit for the query for loadMore was calculated so that no additional users could be loaded. - - Before - - https://user-images.githubusercontent.com/45966964/114249739-baece500-999b-11eb-9bb0-3a5bcee18ad8.mp4 - - After - - + Now when you scroll to the bottom of the users list, it shows more users. Before the fix, the limit for the query for loadMore was calculated so that no additional users could be loaded. + + Before + + https://user-images.githubusercontent.com/45966964/114249739-baece500-999b-11eb-9bb0-3a5bcee18ad8.mp4 + + After + + https://user-images.githubusercontent.com/45966964/114249895-364e9680-999c-11eb-985c-47aedc763488.mp4 - App installation from marketplace not correctly displaying the permissions ([#21470](https://github.com/RocketChat/Rocket.Chat/pull/21470)) @@ -6329,19 +7587,19 @@ - Margins on contextual bar information ([#21457](https://github.com/RocketChat/Rocket.Chat/pull/21457)) - ### Room - **Before** - ![image](https://user-images.githubusercontent.com/27704687/115080812-ba8fa500-9ed9-11eb-9078-3625603bf92b.png) - - **After** - ![image](https://user-images.githubusercontent.com/27704687/115080966-e9a61680-9ed9-11eb-929f-6516c1563e99.png) - - ### Livechat + ### Room + **Before** + ![image](https://user-images.githubusercontent.com/27704687/115080812-ba8fa500-9ed9-11eb-9078-3625603bf92b.png) + + **After** + ![image](https://user-images.githubusercontent.com/27704687/115080966-e9a61680-9ed9-11eb-929f-6516c1563e99.png) + + ### Livechat ![image](https://user-images.githubusercontent.com/27704687/113640101-1859fc80-9651-11eb-88f8-09a899953988.png) - Message Block ordering ([#21464](https://github.com/RocketChat/Rocket.Chat/pull/21464)) - Reactions should come before reply button. + Reactions should come before reply button. ![image](https://user-images.githubusercontent.com/40830821/113748926-6f0e1780-96df-11eb-93a5-ddcfa891413e.png) - Message link null corrupts message rendering ([#21579](https://github.com/RocketChat/Rocket.Chat/pull/21579) by [@g-thome](https://github.com/g-thome)) @@ -6394,15 +7652,19 @@ - Typos/missing elements in the French translation ([#21525](https://github.com/RocketChat/Rocket.Chat/pull/21525) by [@Jeanstaquet](https://github.com/Jeanstaquet)) - - I have corrected some typos in the translation - - I added a translation for missing words - - I took the opportunity to correct a mistranslated word - - Test_Desktop_Notifications was missing in the EN and FR file + - I have corrected some typos in the translation + + - I added a translation for missing words + + - I took the opportunity to correct a mistranslated word + + - Test_Desktop_Notifications was missing in the EN and FR file ![image](https://user-images.githubusercontent.com/45966964/114290186-e7792d80-9a7d-11eb-8164-3b5e72e93703.png) - Updating a message causing URLs to be parsed even within markdown code ([#21489](https://github.com/RocketChat/Rocket.Chat/pull/21489)) - - Fix `updateMessage` to avoid parsing URLs inside markdown + - Fix `updateMessage` to avoid parsing URLs inside markdown + - Honor `parseUrls` property when updating messages - Use async await in TeamChannels delete channel action ([#21534](https://github.com/RocketChat/Rocket.Chat/pull/21534)) @@ -6415,8 +7677,8 @@ - Wrong user in user info ([#21451](https://github.com/RocketChat/Rocket.Chat/pull/21451)) - Fixed some race conditions in admin. - + Fixed some race conditions in admin. + Self DMs used to be created with the userId duplicated. Sometimes rooms can have 2 equal uids, but it's a self DM. Fixed a getter so this isn't a problem anymore.
@@ -6425,22 +7687,30 @@ - Doc: Corrected links to documentation of rocket.chat README.md ([#20478](https://github.com/RocketChat/Rocket.Chat/pull/20478) by [@joshi008](https://github.com/joshi008)) - The link for documentation in the readme was previously https://rocket.chat/docs/ while that was not working and according to the website it was https://docs.rocket.chat/ - The link for deployment methods in readme was corrected from https://rocket.chat/docs/installation/paas-deployments/ to https://docs.rocket.chat/installation/paas-deployments + The link for documentation in the readme was previously https://rocket.chat/docs/ while that was not working and according to the website it was https://docs.rocket.chat/ + The link for deployment methods in readme was corrected from https://rocket.chat/docs/installation/paas-deployments/ to https://docs.rocket.chat/installation/paas-deployments Some more links to the documentations were giving 404 error which hence updated. - [Improve] Remove useless tabbar options from Omnichannel rooms ([#21561](https://github.com/RocketChat/Rocket.Chat/pull/21561) by [@rafaelblink](https://github.com/rafaelblink)) - A React-based replacement for BlazeLayout ([#21527](https://github.com/RocketChat/Rocket.Chat/pull/21527)) - - The Meteor package **`kadira:blaze-layout` was removed**; - - A **global subscription** for the current application layout (**`appLayout`**) replaces `BlazeLayout` entirely; - - The **`#react-root` element** is rendered on server-side instead of dynamically injected into the DOM tree; - - The **"page loading" throbber** is now rendered on the React tree; - - The **`renderRouteComponent` helper was removed**; - - Some code run without any criteria on **`main` template** module was moved into **client startup modules**; - - React portals used to embed Blaze templates have their own subscription (**`blazePortals`**); - - Some **route components were refactored** to remove a URL path trap originally disabled by `renderRouteComponent`; + - The Meteor package **`kadira:blaze-layout` was removed**; + + - A **global subscription** for the current application layout (**`appLayout`**) replaces `BlazeLayout` entirely; + + - The **`#react-root` element** is rendered on server-side instead of dynamically injected into the DOM tree; + + - The **"page loading" throbber** is now rendered on the React tree; + + - The **`renderRouteComponent` helper was removed**; + + - Some code run without any criteria on **`main` template** module was moved into **client startup modules**; + + - React portals used to embed Blaze templates have their own subscription (**`blazePortals`**); + + - Some **route components were refactored** to remove a URL path trap originally disabled by `renderRouteComponent`; + - A new component to embed the DOM nodes generated by **`RoomManager`** was created. - Add ')' after Date and Time in DB migration ([#21519](https://github.com/RocketChat/Rocket.Chat/pull/21519) by [@im-adithya](https://github.com/im-adithya)) @@ -6463,8 +7733,8 @@ - Chore: Meteor update to 2.1.1 ([#21494](https://github.com/RocketChat/Rocket.Chat/pull/21494)) - Basically Node update to version 12.22.1 - + Basically Node update to version 12.22.1 + Meteor change log https://github.com/meteor/meteor/blob/devel/History.md#v211-2021-04-06 - Chore: Remove control character from room model operation ([#21493](https://github.com/RocketChat/Rocket.Chat/pull/21493)) @@ -6473,7 +7743,8 @@ - Fix: Missing module `eventemitter3` for micro services ([#21611](https://github.com/RocketChat/Rocket.Chat/pull/21611)) - - Fix error when running micro services after version 3.12 + - Fix error when running micro services after version 3.12 + - Fix build of docker image version latest for micro services - Language update from LingoHub 🤖 on 2021-04-05Z ([#21446](https://github.com/RocketChat/Rocket.Chat/pull/21446)) @@ -6486,9 +7757,12 @@ - QoL improvements to add channel to team flow ([#21778](https://github.com/RocketChat/Rocket.Chat/pull/21778)) - - Fixed canAccessRoom validation - - Added e2e tests - - Removed channels that user cannot add to the team from autocomplete suggestions + - Fixed canAccessRoom validation + + - Added e2e tests + + - Removed channels that user cannot add to the team from autocomplete suggestions + - Improved error messages - Regression: Bold, italic and strike render (Original markdown) ([#21747](https://github.com/RocketChat/Rocket.Chat/pull/21747)) @@ -6511,10 +7785,10 @@ - Regression: Legacy Banner Position ([#21598](https://github.com/RocketChat/Rocket.Chat/pull/21598)) - ### Before: - ![image](https://user-images.githubusercontent.com/27704687/114961773-dc3c4e00-9e3f-11eb-9a32-e882db3fbfbc.png) - - ### After + ### Before: + ![image](https://user-images.githubusercontent.com/27704687/114961773-dc3c4e00-9e3f-11eb-9a32-e882db3fbfbc.png) + + ### After ![image](https://user-images.githubusercontent.com/27704687/114961673-a6976500-9e3f-11eb-9238-a12870d7db8f.png) - regression: Markdown broken on safari ([#21780](https://github.com/RocketChat/Rocket.Chat/pull/21780)) @@ -6724,56 +7998,62 @@ - **APPS:** New event interfaces for pre/post user leaving a room ([#20917](https://github.com/RocketChat/Rocket.Chat/pull/20917) by [@lucassartor](https://github.com/lucassartor)) - Added events and errors that trigger when a user leaves a room. + Added events and errors that trigger when a user leaves a room. That way it can communicate with the Apps-Engine by the `IPreRoomUserLeave` and `IPostRoomUserLeave` event interfaces. - **Enterprise:** Omnichannel On-Hold Queue ([#20945](https://github.com/RocketChat/Rocket.Chat/pull/20945)) - ### About this feature - This feature has been introduced to deal with Inactive chats. A chat is considered Inactive if an Omnichannel End User (aka Visitor) has not replied back to an agent in some time. These types of inactive chats become very important when an organisation has a limit set for `Max Simultaneous Chats per agent` which is defined by the following setting :point_down: , as more number of Inactive chats would directly affect an agent's productivity. - ![image](https://user-images.githubusercontent.com/34130764/111533003-4d7ad980-878c-11eb-8c1c-2796678a07db.png) - - Before this feature, we only had one option to deal with such Inactive/Abandoned chats - which was to auto close abandoned chats via this setting :point_down: - ![image](https://user-images.githubusercontent.com/34130764/111534353-e65e2480-878d-11eb-82a5-71368064ef45.png) - - however closing a chat isn't a best option for some cases. Let me take an example to explain a scenario - - > An agent is assisting a customer for installing a very huge software which is likely to take more than 20-30 minutes to download. In such scenarios closing a chat isn't the best approach since even after the lengthy download the customer might still need some assist from the agent. - > So basically this chat is going to block the agent's queue until the customer is able to finish his time-consuming download task in which he/she doesn't require any agent's assistance. Due to the `Max Simultaneous Chats per agent` limit, the agent is also not able to use this extra time to help other customer thus affecting his overall productivity. - - **So how does the On-Hold feature solve this problem?** - With the On-Hold feature, an agent is now able to place a chat on-hold. On-Hold chats **don’t count towards the maximum number of concurrent chats** an agent can have. So in our above example, the agent can simply now place the customer on-hold for 20-30 minutes until the customer downloads the software and within this time, the agent can serve other customers - hence increasing the productivity of an agent. - - ---------------------------------------- - ### Working of the new On-Hold feature - - #### How can you place a chat on Hold ? - - A chat can be placed on-hold via 2 means - 1. Automatically place Abandoned chats On-hold - ![image](https://user-images.githubusercontent.com/34130764/111537074-06431780-8791-11eb-8d23-99f5d9f8ec45.png) - Via this :top: option you can define a timer which will get started when a customer sends a message. If we don't receive any message from the customer within this timer, the timer will get expired and the chat will be considered as Abandoned. - ![image](https://user-images.githubusercontent.com/34130764/111537346-53bf8480-8791-11eb-8dc7-260633b4e98f.png) - The via this :top: setting you can choose to automatically place this abandoned chat On Hold - 2. Manually place a chat On Hold - As an admin, you can allow an agent to manually place a chat on-hold. To do so, you'll need to turn on this :point_down: setting - ![image](https://user-images.githubusercontent.com/34130764/111537545-97b28980-8791-11eb-86fd-db45b87e9cc1.png) - Now an agent will be able to see a new `On Hold` button within their `Visitor Info Panel` like this :point_down: , provided the agent has sent the last message - ![image](https://user-images.githubusercontent.com/34130764/111537853-f24be580-8791-11eb-9561-d77ba430c625.png) - - #### How can you resume a On Hold chat ? - An On Hold chat can be resumed via 2 means - - 1. If the Customer sends a message - If the Customer / Omnichannel End User sends a message to the On Hold chat, the On Hold chat will get automatically resumed. - 2. Manually by agent - An Agent can manually resume the On Hold chat via clicking the `Resume` button in the bottom of a chat room. - ![image](https://user-images.githubusercontent.com/34130764/111538666-f88e9180-8792-11eb-8d14-01453b8e3db0.png) - - #### What would happen if the agent already reached maximum chats, and a On-Hold chat gets resumed ? - Based on how the chat was resumed, there are multiple cases are each case is dealt differently - - - If an agent manually tries to resume the On Hold chat, he/she will get an error saying `Maximum Simultaneous chat limit reached` + ### About this feature + This feature has been introduced to deal with Inactive chats. A chat is considered Inactive if an Omnichannel End User (aka Visitor) has not replied back to an agent in some time. These types of inactive chats become very important when an organisation has a limit set for `Max Simultaneous Chats per agent` which is defined by the following setting :point_down: , as more number of Inactive chats would directly affect an agent's productivity. + ![image](https://user-images.githubusercontent.com/34130764/111533003-4d7ad980-878c-11eb-8c1c-2796678a07db.png) + + Before this feature, we only had one option to deal with such Inactive/Abandoned chats - which was to auto close abandoned chats via this setting :point_down: + ![image](https://user-images.githubusercontent.com/34130764/111534353-e65e2480-878d-11eb-82a5-71368064ef45.png) + + however closing a chat isn't a best option for some cases. Let me take an example to explain a scenario + + > An agent is assisting a customer for installing a very huge software which is likely to take more than 20-30 minutes to download. In such scenarios closing a chat isn't the best approach since even after the lengthy download the customer might still need some assist from the agent. + > So basically this chat is going to block the agent's queue until the customer is able to finish his time-consuming download task in which he/she doesn't require any agent's assistance. Due to the `Max Simultaneous Chats per agent` limit, the agent is also not able to use this extra time to help other customer thus affecting his overall productivity. + + **So how does the On-Hold feature solve this problem?** + With the On-Hold feature, an agent is now able to place a chat on-hold. On-Hold chats **don’t count towards the maximum number of concurrent chats** an agent can have. So in our above example, the agent can simply now place the customer on-hold for 20-30 minutes until the customer downloads the software and within this time, the agent can serve other customers - hence increasing the productivity of an agent. + + ---------------------------------------- + ### Working of the new On-Hold feature + + #### How can you place a chat on Hold ? + + A chat can be placed on-hold via 2 means + + 1. Automatically place Abandoned chats On-hold + ![image](https://user-images.githubusercontent.com/34130764/111537074-06431780-8791-11eb-8d23-99f5d9f8ec45.png) + Via this :top: option you can define a timer which will get started when a customer sends a message. If we don't receive any message from the customer within this timer, the timer will get expired and the chat will be considered as Abandoned. + ![image](https://user-images.githubusercontent.com/34130764/111537346-53bf8480-8791-11eb-8dc7-260633b4e98f.png) + The via this :top: setting you can choose to automatically place this abandoned chat On Hold + + 2. Manually place a chat On Hold + As an admin, you can allow an agent to manually place a chat on-hold. To do so, you'll need to turn on this :point_down: setting + ![image](https://user-images.githubusercontent.com/34130764/111537545-97b28980-8791-11eb-86fd-db45b87e9cc1.png) + Now an agent will be able to see a new `On Hold` button within their `Visitor Info Panel` like this :point_down: , provided the agent has sent the last message + ![image](https://user-images.githubusercontent.com/34130764/111537853-f24be580-8791-11eb-9561-d77ba430c625.png) + + #### How can you resume a On Hold chat ? + An On Hold chat can be resumed via 2 means + + + 1. If the Customer sends a message + If the Customer / Omnichannel End User sends a message to the On Hold chat, the On Hold chat will get automatically resumed. + + 2. Manually by agent + An Agent can manually resume the On Hold chat via clicking the `Resume` button in the bottom of a chat room. + ![image](https://user-images.githubusercontent.com/34130764/111538666-f88e9180-8792-11eb-8d14-01453b8e3db0.png) + + #### What would happen if the agent already reached maximum chats, and a On-Hold chat gets resumed ? + Based on how the chat was resumed, there are multiple cases are each case is dealt differently + + + - If an agent manually tries to resume the On Hold chat, he/she will get an error saying `Maximum Simultaneous chat limit reached` + - If a customer replies back on an On Hold chat and the last serving agent has reached maximum capacity, then this customer will be placed on the queue again from where based on the Routing Algorithm selected, the chat will get transferred to any available agent - Ability to hide 'Room topic changed' system messages ([#21062](https://github.com/RocketChat/Rocket.Chat/pull/21062) by [@Tirieru](https://github.com/Tirieru)) @@ -6784,33 +8064,39 @@ - Teams ([#20966](https://github.com/RocketChat/Rocket.Chat/pull/20966) by [@g-thome](https://github.com/g-thome)) - ## Teams - - - - You can easily group your users as Teams on Rocket.Chat. The feature takes the hassle out of managing multiple users one by one and allows you to handle them at the same time efficiently. - - - - Teams can be public or private and each team can have its own channels, which also can be public or private. - - It's possible to add existing channels to a Team or create new ones inside a Team. - - It's possible to invite people outside a Team to join Team's channels. - - It's possible to convert channels to Teams - - It's possible to add all team members to a channel at once - - Team members have roles - - - ![image](https://user-images.githubusercontent.com/70927132/113421955-4f56b680-93a2-11eb-80dc-9b70a3f09b3e.png) - - - - **Quickly onboard new users with Autojoin channels** - - Teams can have Auto-join channels – channels to which the team members are automatically added, so you don’t need to go through the manual process of adding users repetitively - - ![image](https://user-images.githubusercontent.com/70927132/113419284-81194e80-939d-11eb-9fff-aeb05cbc8089.png) - - **Instantly mention multiple members at once** (available in EE) - + ## Teams + + + + You can easily group your users as Teams on Rocket.Chat. The feature takes the hassle out of managing multiple users one by one and allows you to handle them at the same time efficiently. + + + + - Teams can be public or private and each team can have its own channels, which also can be public or private. + + - It's possible to add existing channels to a Team or create new ones inside a Team. + + - It's possible to invite people outside a Team to join Team's channels. + + - It's possible to convert channels to Teams + + - It's possible to add all team members to a channel at once + + - Team members have roles + + + ![image](https://user-images.githubusercontent.com/70927132/113421955-4f56b680-93a2-11eb-80dc-9b70a3f09b3e.png) + + + + **Quickly onboard new users with Autojoin channels** + + Teams can have Auto-join channels – channels to which the team members are automatically added, so you don’t need to go through the manual process of adding users repetitively + + ![image](https://user-images.githubusercontent.com/70927132/113419284-81194e80-939d-11eb-9fff-aeb05cbc8089.png) + + **Instantly mention multiple members at once** (available in EE) + With Teams, you don’t need to remember everyone’s name to communicate with a team quickly. Just mention a Team — @engineers, for instance — and all members will be instantly notified. ### 🚀 Improvements @@ -6820,22 +8106,22 @@ - Added modal-box for preview after recording audio. ([#20370](https://github.com/RocketChat/Rocket.Chat/pull/20370) by [@Darshilp326](https://github.com/Darshilp326)) - A modal box will be displayed so that users can change the filename and add description. - - **Before** - - https://user-images.githubusercontent.com/55157259/105687301-4e2a8880-5f1e-11eb-873d-dc8a880a2fc8.mp4 - - **After** - + A modal box will be displayed so that users can change the filename and add description. + + **Before** + + https://user-images.githubusercontent.com/55157259/105687301-4e2a8880-5f1e-11eb-873d-dc8a880a2fc8.mp4 + + **After** + https://user-images.githubusercontent.com/55157259/105687342-597db400-5f1e-11eb-8b61-8f9d9ebad0c4.mp4 - Adds toast after follow/unfollow messages and following icon for followed messages without threads. ([#20025](https://github.com/RocketChat/Rocket.Chat/pull/20025) by [@RonLek](https://github.com/RonLek)) - There was no alert on following/unfollowing a message previously. Also, it was impossible to make out a followed message with no threads from an unfollowed one. - - This PR would show an alert on following/unfollowing a message and also display a small bell icon (similar to the ones for starred and pinned messages) when a message with no thread is followed. - + There was no alert on following/unfollowing a message previously. Also, it was impossible to make out a followed message with no threads from an unfollowed one. + + This PR would show an alert on following/unfollowing a message and also display a small bell icon (similar to the ones for starred and pinned messages) when a message with no thread is followed. + https://user-images.githubusercontent.com/28918901/103813540-43e73e00-5086-11eb-8592-2877eb650f3e.mp4 - Back to threads list button on threads contextual bar ([#20882](https://github.com/RocketChat/Rocket.Chat/pull/20882)) @@ -6848,12 +8134,12 @@ - Improve Apps permission modal ([#21193](https://github.com/RocketChat/Rocket.Chat/pull/21193) by [@lucassartor](https://github.com/lucassartor)) - Improve the UI of the Apps permission modal when installing an App that requires permissions. - - **New UI:** - ![after](https://user-images.githubusercontent.com/49413772/111685622-e817fe80-8806-11eb-998d-b56623560e74.PNG) - - **Old UI:** + Improve the UI of the Apps permission modal when installing an App that requires permissions. + + **New UI:** + ![after](https://user-images.githubusercontent.com/49413772/111685622-e817fe80-8806-11eb-998d-b56623560e74.PNG) + + **Old UI:** ![before](https://user-images.githubusercontent.com/49413772/111685897-375e2f00-8807-11eb-814e-cb8060dc1830.PNG) - Make debug logs of Apps configurable via Log_Level setting in the Admin panel ([#21000](https://github.com/RocketChat/Rocket.Chat/pull/21000) by [@cuonghuunguyen](https://github.com/cuonghuunguyen)) @@ -6864,15 +8150,15 @@ - Sort Users List In Case Insensitive Manner ([#20790](https://github.com/RocketChat/Rocket.Chat/pull/20790) by [@aditya-mitra](https://github.com/aditya-mitra)) - The users listed in the admin panel were sorted in a case-sensitive manner , where the capitals came first and then the small letters (like - *A B C a b c*). This Change fixes this by sorting the names in a caseinsensitive manner (now - *A a B b C c*). - - ### Before - - ![before](https://user-images.githubusercontent.com/55396651/108189880-3fa74980-7137-11eb-99da-6498707b4bf8.png) - - - ### With This Change - + The users listed in the admin panel were sorted in a case-sensitive manner , where the capitals came first and then the small letters (like - *A B C a b c*). This Change fixes this by sorting the names in a caseinsensitive manner (now - *A a B b C c*). + + ### Before + + ![before](https://user-images.githubusercontent.com/55396651/108189880-3fa74980-7137-11eb-99da-6498707b4bf8.png) + + + ### With This Change + ![after](https://user-images.githubusercontent.com/55396651/108190177-9dd42c80-7137-11eb-8b4e-b7cef4ba512f.png) ### 🐛 Bug fixes @@ -6886,12 +8172,12 @@ - **APPS:** Warn message while installing app in air-gapped environment ([#20992](https://github.com/RocketChat/Rocket.Chat/pull/20992) by [@lucassartor](https://github.com/lucassartor)) - Change **error** message to a **warn** message when uploading a `.zip` file app into a air-gapped environment. - - The **error** message was giving the impression for the user that the app wasn't properly being installed , which it wasn't the case: - ![error](https://user-images.githubusercontent.com/49413772/109855273-d3e4d680-7c36-11eb-824b-ad455d24710c.PNG) - - A more detailed **warn** message can fix that impression for the user: + Change **error** message to a **warn** message when uploading a `.zip` file app into a air-gapped environment. + + The **error** message was giving the impression for the user that the app wasn't properly being installed , which it wasn't the case: + ![error](https://user-images.githubusercontent.com/49413772/109855273-d3e4d680-7c36-11eb-824b-ad455d24710c.PNG) + + A more detailed **warn** message can fix that impression for the user: ![warn](https://user-images.githubusercontent.com/49413772/109855383-f2e36880-7c36-11eb-8d61-c442980bd8fd.PNG) - Add missing `unreads` field to `users.info` REST endpoint ([#20905](https://github.com/RocketChat/Rocket.Chat/pull/20905)) @@ -6906,10 +8192,10 @@ - Correct direction for admin mapview text ([#20897](https://github.com/RocketChat/Rocket.Chat/pull/20897) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) - ![Screenshot from 2021-02-25 02-49-21](https://user-images.githubusercontent.com/38764067/109068512-f8602080-7715-11eb-8e22-d610f9d046d8.png) - ![Screenshot from 2021-02-25 02-49-46](https://user-images.githubusercontent.com/38764067/109068516-fa29e400-7715-11eb-9119-1c79abce278f.png) - ![Screenshot from 2021-02-25 02-49-57](https://user-images.githubusercontent.com/38764067/109068519-fbf3a780-7715-11eb-8b3d-0dc32f898725.png) - + ![Screenshot from 2021-02-25 02-49-21](https://user-images.githubusercontent.com/38764067/109068512-f8602080-7715-11eb-8e22-d610f9d046d8.png) + ![Screenshot from 2021-02-25 02-49-46](https://user-images.githubusercontent.com/38764067/109068516-fa29e400-7715-11eb-9119-1c79abce278f.png) + ![Screenshot from 2021-02-25 02-49-57](https://user-images.githubusercontent.com/38764067/109068519-fbf3a780-7715-11eb-8b3d-0dc32f898725.png) + The text says the share button will be on the left of the messagebox once enabled. However, it actually is on the right. - Correct ignored message CSS ([#20928](https://github.com/RocketChat/Rocket.Chat/pull/20928) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) @@ -6926,13 +8212,13 @@ - Custom emojis to override default ([#20359](https://github.com/RocketChat/Rocket.Chat/pull/20359) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) - Due to the sequence of the imports and how the emojiRenderer prioritizes lists, the custom emojis could not override the emojione emojis. Making two small changes fixed the issue. - - With the custom emoji for `:facepalm:` added, you can check out the result below: - ### Before - ![Screenshot from 2021-01-25 02-20-04](https://user-images.githubusercontent.com/38764067/105643088-dfb0e080-5eb3-11eb-8a00-582c53fbe9a4.png) - - ### After + Due to the sequence of the imports and how the emojiRenderer prioritizes lists, the custom emojis could not override the emojione emojis. Making two small changes fixed the issue. + + With the custom emoji for `:facepalm:` added, you can check out the result below: + ### Before + ![Screenshot from 2021-01-25 02-20-04](https://user-images.githubusercontent.com/38764067/105643088-dfb0e080-5eb3-11eb-8a00-582c53fbe9a4.png) + + ### After ![Screenshot from 2021-01-25 02-18-58](https://user-images.githubusercontent.com/38764067/105643076-cdcf3d80-5eb3-11eb-84b8-5dbc4f1135df.png) - Empty URL in user avatar doesn't show error and enables save ([#20440](https://github.com/RocketChat/Rocket.Chat/pull/20440) by [@im-adithya](https://github.com/im-adithya)) @@ -6945,12 +8231,12 @@ - Fix the search list showing the last channel ([#21160](https://github.com/RocketChat/Rocket.Chat/pull/21160) by [@shrinish123](https://github.com/shrinish123)) - The search list now also properly shows the last channel - Before : - - ![searchlist](https://user-images.githubusercontent.com/56491104/111471487-f3a7ee80-874e-11eb-9c6e-19bbf0731d60.png) - - After : + The search list now also properly shows the last channel + Before : + + ![searchlist](https://user-images.githubusercontent.com/56491104/111471487-f3a7ee80-874e-11eb-9c6e-19bbf0731d60.png) + + After : ![search_final](https://user-images.githubusercontent.com/56491104/111471521-fe628380-874e-11eb-8fa3-d1edb57587e1.png) - Follow thread action on threads list ([#20881](https://github.com/RocketChat/Rocket.Chat/pull/20881)) @@ -6975,13 +8261,13 @@ - Multi Select isn't working in Export Messages ([#21236](https://github.com/RocketChat/Rocket.Chat/pull/21236) by [@PriyaBihani](https://github.com/PriyaBihani)) - While exporting messages, we were not able to select multiple Users like this: - - https://user-images.githubusercontent.com/69837339/111953057-169a2000-8b0c-11eb-94a4-0e1657683f96.mp4 - - Now we can select multiple users: - - + While exporting messages, we were not able to select multiple Users like this: + + https://user-images.githubusercontent.com/69837339/111953057-169a2000-8b0c-11eb-94a4-0e1657683f96.mp4 + + Now we can select multiple users: + + https://user-images.githubusercontent.com/69837339/111953097-274a9600-8b0c-11eb-9177-bec388b042bd.mp4 - New Channel popover not closing ([#21080](https://github.com/RocketChat/Rocket.Chat/pull/21080)) @@ -6990,31 +8276,31 @@ - OEmbedURLWidget - Show Full Embedded Text Description ([#20569](https://github.com/RocketChat/Rocket.Chat/pull/20569) by [@aditya-mitra](https://github.com/aditya-mitra)) - Embeds were cutoff when either _urls had a long description_. - This was handled by removing `overflow:hidden;text-overflow:ellipsis;` from the inline styles in [`oembedUrlWidget.html`](https://github.com/RocketChat/Rocket.Chat/blob/develop/app/oembed/client/oembedUrlWidget.html#L28). - - ### Earlier - - ![earlier](https://user-images.githubusercontent.com/55396651/107110825-00dcde00-6871-11eb-866e-13cabc5b0d05.png) - - ### Now - + Embeds were cutoff when either _urls had a long description_. + This was handled by removing `overflow:hidden;text-overflow:ellipsis;` from the inline styles in [`oembedUrlWidget.html`](https://github.com/RocketChat/Rocket.Chat/blob/develop/app/oembed/client/oembedUrlWidget.html#L28). + + ### Earlier + + ![earlier](https://user-images.githubusercontent.com/55396651/107110825-00dcde00-6871-11eb-866e-13cabc5b0d05.png) + + ### Now + ![now](https://user-images.githubusercontent.com/55396651/107110794-ca06c800-6870-11eb-9b3b-168679936612.png) - Reactions list showing users in reactions option of message action. ([#20753](https://github.com/RocketChat/Rocket.Chat/pull/20753) by [@Darshilp326](https://github.com/Darshilp326)) - Reactions list shows emojis with respected users who have reacted with that emoji. - + Reactions list shows emojis with respected users who have reacted with that emoji. + https://user-images.githubusercontent.com/55157259/107857609-5870e000-6e55-11eb-8137-494a9f71b171.mp4 - Removing truncation from profile ([#20352](https://github.com/RocketChat/Rocket.Chat/pull/20352) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) - Truncating text in profile view was making some information completely inaccessible. Removed it from the user status and the custom fields where if the information is longer, the user would actually want to see all of it. - - ### Before - ![Screenshot from 2021-01-24 20-54-44](https://user-images.githubusercontent.com/38764067/105634935-7e264d00-5e86-11eb-8a6c-9f2a363e0f6c.png) - - ### After + Truncating text in profile view was making some information completely inaccessible. Removed it from the user status and the custom fields where if the information is longer, the user would actually want to see all of it. + + ### Before + ![Screenshot from 2021-01-24 20-54-44](https://user-images.githubusercontent.com/38764067/105634935-7e264d00-5e86-11eb-8a6c-9f2a363e0f6c.png) + + ### After ![Screenshot from 2021-01-24 20-54-06](https://user-images.githubusercontent.com/38764067/105634940-82eb0100-5e86-11eb-8b90-e97a43c5e938.png) - Replace wrong field description on Room Information panel ([#21395](https://github.com/RocketChat/Rocket.Chat/pull/21395) by [@rafaelblink](https://github.com/rafaelblink)) @@ -7025,8 +8311,8 @@ - Set establishing to false if OTR timeouts ([#21183](https://github.com/RocketChat/Rocket.Chat/pull/21183) by [@Darshilp326](https://github.com/Darshilp326)) - Set establishing false if OTR timeouts. - + Set establishing false if OTR timeouts. + https://user-images.githubusercontent.com/55157259/111617086-b30cab80-8808-11eb-8740-3b4ffacfc322.mp4 - Sidebar scroll missing full height ([#21071](https://github.com/RocketChat/Rocket.Chat/pull/21071)) @@ -7065,20 +8351,33 @@ - Chore: Add tests for Meteor methods ([#20901](https://github.com/RocketChat/Rocket.Chat/pull/20901)) - Add end-to-end tests for the following meteor methods - - - [x] public-settings:get - - [x] rooms:get - - [x] subscriptions:get - - [x] permissions:get - - [x] loadMissedMessages - - [x] loadHistory - - [x] listCustomUserStatus - - [x] getUserRoles - - [x] getRoomRoles (called by the API, already covered) - - [x] getMessages - - [x] getUsersOfRoom - - [x] loadNextMessages + Add end-to-end tests for the following meteor methods + + + - [x] public-settings:get + + - [x] rooms:get + + - [x] subscriptions:get + + - [x] permissions:get + + - [x] loadMissedMessages + + - [x] loadHistory + + - [x] listCustomUserStatus + + - [x] getUserRoles + + - [x] getRoomRoles (called by the API, already covered) + + - [x] getMessages + + - [x] getUsersOfRoom + + - [x] loadNextMessages + - [x] getThreadMessages - Chore: Meteor update 2.1 ([#21061](https://github.com/RocketChat/Rocket.Chat/pull/21061)) @@ -7091,8 +8390,10 @@ - Improve: Increase testing coverage ([#21015](https://github.com/RocketChat/Rocket.Chat/pull/21015)) - Add test for - - settings/raw + Add test for + + - settings/raw + - minimongo/comparisons - Improve: NPS survey fetch ([#21263](https://github.com/RocketChat/Rocket.Chat/pull/21263)) @@ -7111,17 +8412,19 @@ - Regression: Add scope to permission checks in Team's endpoints ([#21369](https://github.com/RocketChat/Rocket.Chat/pull/21369)) - - Include scope (team's main room ID) in the permission checks; + - Include scope (team's main room ID) in the permission checks; - Remove the `teamName` parameter from the `members`, `addMembers`, `updateMember` and `removeMembers` methods (since `teamId` will always be defined). - Regression: Add support to filter on `teams.listRooms` endpoint ([#21327](https://github.com/RocketChat/Rocket.Chat/pull/21327)) - - Add support for queries (within the `query` parameter); + - Add support for queries (within the `query` parameter); + - Add support to pagination (`offset` and `count`) when an user doesn't have the permission to get all rooms. - Regression: Add teams support to directory ([#21351](https://github.com/RocketChat/Rocket.Chat/pull/21351)) - - Change `directory.js` to reduce function complexity + - Change `directory.js` to reduce function complexity + - Add `teams` type of item. Directory will return all public teams & private teams the user is part of. - Regression: add view room action on Teams Channels ([#21295](https://github.com/RocketChat/Rocket.Chat/pull/21295)) @@ -7174,18 +8477,19 @@ - Regression: Quick action button missing for Omnichannel On-Hold queue ([#21285](https://github.com/RocketChat/Rocket.Chat/pull/21285)) - - Move the Manual On Hold button to the new Omnichannel Header - ![image](https://user-images.githubusercontent.com/34130764/112291749-6ae10380-8cb6-11eb-94cd-e05efc14b1bf.png) - ![image](https://user-images.githubusercontent.com/34130764/112304146-27d95d00-8cc3-11eb-85db-dde04a110dd1.png) - + - Move the Manual On Hold button to the new Omnichannel Header + ![image](https://user-images.githubusercontent.com/34130764/112291749-6ae10380-8cb6-11eb-94cd-e05efc14b1bf.png) + ![image](https://user-images.githubusercontent.com/34130764/112304146-27d95d00-8cc3-11eb-85db-dde04a110dd1.png) + + - Minor fixes - regression: Remove Breadcrumbs and update Tag component ([#21399](https://github.com/RocketChat/Rocket.Chat/pull/21399)) - Regression: Remove channel action on add channel's modal don't work ([#21356](https://github.com/RocketChat/Rocket.Chat/pull/21356)) - ![removechannel-on-add-existing-modal](https://user-images.githubusercontent.com/27704687/112911017-eda8fa80-90ca-11eb-9c24-47a70be0c314.gif) - + ![removechannel-on-add-existing-modal](https://user-images.githubusercontent.com/27704687/112911017-eda8fa80-90ca-11eb-9c24-47a70be0c314.gif) + ![image](https://user-images.githubusercontent.com/27704687/112911052-02858e00-90cb-11eb-85a2-0ef1f5f9ffd9.png) - Regression: Remove primary color from button in TeamChannels component ([#21293](https://github.com/RocketChat/Rocket.Chat/pull/21293)) @@ -7214,10 +8518,10 @@ - Regression: Unify Contact information displayed on the Room header and Room Info ([#21312](https://github.com/RocketChat/Rocket.Chat/pull/21312) by [@rafaelblink](https://github.com/rafaelblink)) - ![image](https://user-images.githubusercontent.com/34130764/112586659-35592900-8e22-11eb-94be-32bdff7ca883.png) - - ![image](https://user-images.githubusercontent.com/2493803/112913130-788bf400-90cf-11eb-84c6-782b203e100a.png) - + ![image](https://user-images.githubusercontent.com/34130764/112586659-35592900-8e22-11eb-94be-32bdff7ca883.png) + + ![image](https://user-images.githubusercontent.com/2493803/112913130-788bf400-90cf-11eb-84c6-782b203e100a.png) + ![image](https://user-images.githubusercontent.com/2493803/112913146-817cc580-90cf-11eb-87ad-ef79766be2b3.png) - Regression: Unify team actions to add a room to a team ([#21386](https://github.com/RocketChat/Rocket.Chat/pull/21386)) @@ -7226,8 +8530,10 @@ - Regression: Update .invite endpoints to support multiple users at once ([#21328](https://github.com/RocketChat/Rocket.Chat/pull/21328)) - - channels.invite now supports passing an array as a param (either with usernames or userIds) via `usernames` or `userIds` properties. - - You can still use the endpoint to invite only one user via the old params `userId`, `username` or `user`. + - channels.invite now supports passing an array as a param (either with usernames or userIds) via `usernames` or `userIds` properties. + + - You can still use the endpoint to invite only one user via the old params `userId`, `username` or `user`. + - Same changes apply to groups.invite - Regression: user actions in admin ([#21307](https://github.com/RocketChat/Rocket.Chat/pull/21307)) @@ -7362,7 +8668,7 @@ - Close Call contextual bar after starting jitsi call. ([#21004](https://github.com/RocketChat/Rocket.Chat/pull/21004)) - After jitsi call is started, if the call is started in a new window then we should close contextual tab bar. + After jitsi call is started, if the call is started in a new window then we should close contextual tab bar. So, when 'YES' is pressed on modal, we call handleClose function if openNewWindow is true, as call doesn't starts on tab bar, it starts on new window. ### 🐛 Bug fixes @@ -7372,7 +8678,7 @@ - Stopping Jitsi reload ([#20973](https://github.com/RocketChat/Rocket.Chat/pull/20973)) - The Function where Jitsi call is started gets called many times due to `room.usernames` dep of useMemo, this dep triggers reloading of this function many times. + The Function where Jitsi call is started gets called many times due to `room.usernames` dep of useMemo, this dep triggers reloading of this function many times. So removing this dep from useMemo dependencies ### 👩‍💻👨‍💻 Core Team 🤓 @@ -7397,10 +8703,10 @@ - Cloud Workspace bridge ([#20838](https://github.com/RocketChat/Rocket.Chat/pull/20838)) - Adds the new CloudWorkspace functionality. - - It allows apps to request the access token for the workspace it's installed on, so it can perform actions with other Rocket.Chat services, such as the Omni Gateway. - + Adds the new CloudWorkspace functionality. + + It allows apps to request the access token for the workspace it's installed on, so it can perform actions with other Rocket.Chat services, such as the Omni Gateway. + https://github.com/RocketChat/Rocket.Chat.Apps-engine/pull/382 - Header with Breadcrumbs ([#20609](https://github.com/RocketChat/Rocket.Chat/pull/20609)) @@ -7418,10 +8724,10 @@ - Add symbol to indicate apps' required settings in the UI ([#20447](https://github.com/RocketChat/Rocket.Chat/pull/20447)) - - Apps are able to define **required** settings. These settings should not be left blank by the user and an error will be thrown and shown in the interface if an user attempts to save changes in the app details page leaving any required fields blank; - ![prt_screen_required_app_settings_warning](https://user-images.githubusercontent.com/36537004/106032964-e73cd900-60af-11eb-8eab-c11fd651b593.png) - - - A sign (*) is added to the label of app settings' fields that are required so as to highlight the fields which must not be left blank. + - Apps are able to define **required** settings. These settings should not be left blank by the user and an error will be thrown and shown in the interface if an user attempts to save changes in the app details page leaving any required fields blank; + ![prt_screen_required_app_settings_warning](https://user-images.githubusercontent.com/36537004/106032964-e73cd900-60af-11eb-8eab-c11fd651b593.png) + + - A sign (*) is added to the label of app settings' fields that are required so as to highlight the fields which must not be left blank. ![prt_screen_required_app_settings](https://user-images.githubusercontent.com/36537004/106014879-ae473900-609c-11eb-9b9e-95de7bbf20a5.png) - Add visual validation on users admin forms ([#20308](https://github.com/RocketChat/Rocket.Chat/pull/20308)) @@ -7442,20 +8748,20 @@ - Adds tooltip for sidebar header icons ([#19934](https://github.com/RocketChat/Rocket.Chat/pull/19934) by [@RonLek](https://github.com/RonLek)) - Previously the header icons in the sidebar didn't show a tooltip when hovered over. This PR fixes that. - + Previously the header icons in the sidebar didn't show a tooltip when hovered over. This PR fixes that. + ![Screenshot from 2020-12-22 15-17-41](https://user-images.githubusercontent.com/28918901/102874804-f2756700-4468-11eb-8324-b7f3194e62fe.png) - Better Presentation of Blockquotes ([#20750](https://github.com/RocketChat/Rocket.Chat/pull/20750) by [@aditya-mitra](https://github.com/aditya-mitra)) - Changed the values of `margin-top` and `margin-bottom` for *first* and *last* childs in blockquotes to increase readability. - - ### Before - - ![before](https://user-images.githubusercontent.com/55396651/107858662-3e3a0080-6e5b-11eb-8274-9bd956807235.png) - - ### Now - + Changed the values of `margin-top` and `margin-bottom` for *first* and *last* childs in blockquotes to increase readability. + + ### Before + + ![before](https://user-images.githubusercontent.com/55396651/107858662-3e3a0080-6e5b-11eb-8274-9bd956807235.png) + + ### Now + ![now](https://user-images.githubusercontent.com/55396651/107858471-480f3400-6e5a-11eb-9ccb-3f1be2fed0a4.png) - Change header based on room type ([#20612](https://github.com/RocketChat/Rocket.Chat/pull/20612)) @@ -7476,13 +8782,18 @@ - Replace react-window for react-virtuoso package ([#20392](https://github.com/RocketChat/Rocket.Chat/pull/20392)) - Remove: - - react-window - - react-window-infinite-loader - - simplebar-react - - Include: - - react-virtuoso + Remove: + + - react-window + + - react-window-infinite-loader + + - simplebar-react + + Include: + + - react-virtuoso + - rc-scrollbars - Rewrite Call as React component ([#19778](https://github.com/RocketChat/Rocket.Chat/pull/19778)) @@ -7498,13 +8809,13 @@ - Add debouncing to add users search field. ([#20297](https://github.com/RocketChat/Rocket.Chat/pull/20297) by [@Darshilp326](https://github.com/Darshilp326)) - BEFORE - - https://user-images.githubusercontent.com/55157259/105350722-98a3c080-5c11-11eb-82f3-d9a62a4fa50b.mp4 - - - AFTER - + BEFORE + + https://user-images.githubusercontent.com/55157259/105350722-98a3c080-5c11-11eb-82f3-d9a62a4fa50b.mp4 + + + AFTER + https://user-images.githubusercontent.com/55157259/105350757-a2c5bf00-5c11-11eb-91db-25c0b9e01a28.mp4 - Add tooltips to Thread header buttons ([#20456](https://github.com/RocketChat/Rocket.Chat/pull/20456) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) @@ -7517,8 +8828,8 @@ - Added check for view admin permission page ([#20403](https://github.com/RocketChat/Rocket.Chat/pull/20403)) - Admin Permission page was visible to all, if you add admin/permissions after the base url. This should not be visible to all user, only people with certain permissions should be able to see this page. - I am also able to see permissions page for open workspace of Rocket chat. + Admin Permission page was visible to all, if you add admin/permissions after the base url. This should not be visible to all user, only people with certain permissions should be able to see this page. + I am also able to see permissions page for open workspace of Rocket chat. ![image](https://user-images.githubusercontent.com/58601732/105829728-bfd00880-5fea-11eb-9121-6c53a752f140.png) - Adding the accidentally deleted tag template, used by other templates ([#20772](https://github.com/RocketChat/Rocket.Chat/pull/20772)) @@ -7527,8 +8838,8 @@ - Admin cannot clear user details like bio or nickname ([#20785](https://github.com/RocketChat/Rocket.Chat/pull/20785)) - When the API users.update is called to update user data, it passes data to saveUser function. Here before saving data like bio or nickname we are checking if they are available or not. If data is available then we are saving it, but we are not doing anything when data isn't available. - + When the API users.update is called to update user data, it passes data to saveUser function. Here before saving data like bio or nickname we are checking if they are available or not. If data is available then we are saving it, but we are not doing anything when data isn't available. + So unsetting data if data isn't available to save. Will also fix bio and other fields. :) - Admin Panel pages not visible in Safari ([#20912](https://github.com/RocketChat/Rocket.Chat/pull/20912)) @@ -7545,24 +8856,24 @@ - Blank Personal Access Token Bug ([#20193](https://github.com/RocketChat/Rocket.Chat/pull/20193) by [@RonLek](https://github.com/RonLek)) - Adds error when personal access token is blank thereby disallowing the creation of one. - + Adds error when personal access token is blank thereby disallowing the creation of one. + https://user-images.githubusercontent.com/28918901/104483631-5adde100-55ee-11eb-9938-64146bce127e.mp4 - CAS login failing due to TOTP requirement ([#20840](https://github.com/RocketChat/Rocket.Chat/pull/20840)) - Changed password input field for password access in edit room info. ([#20356](https://github.com/RocketChat/Rocket.Chat/pull/20356) by [@Darshilp326](https://github.com/Darshilp326)) - Password field would be secured with asterisks in edit room info - - https://user-images.githubusercontent.com/55157259/105641758-cad04f00-5eab-11eb-90de-0c91263edd55.mp4 - + Password field would be secured with asterisks in edit room info + + https://user-images.githubusercontent.com/55157259/105641758-cad04f00-5eab-11eb-90de-0c91263edd55.mp4 + . - Channel mentions showing user subscribed channels twice ([#20484](https://github.com/RocketChat/Rocket.Chat/pull/20484) by [@Darshilp326](https://github.com/Darshilp326)) - Channel mention shows user subscribed channels twice. - + Channel mention shows user subscribed channels twice. + https://user-images.githubusercontent.com/55157259/106183033-b353d780-61c5-11eb-8aab-1dbb62b02ff8.mp4 - CORS config not accepting multiple origins ([#20696](https://github.com/RocketChat/Rocket.Chat/pull/20696) by [@g-thome](https://github.com/g-thome)) @@ -7573,26 +8884,26 @@ - Default Attachments - Remove Extra Margin in Field Attachments ([#20618](https://github.com/RocketChat/Rocket.Chat/pull/20618) by [@aditya-mitra](https://github.com/aditya-mitra)) - A large amount of unnecessary margin which existed in the **Field Attachments inside the `DefaultAttachments`** has been fixed. - - ### Earlier - - ![earlier](https://user-images.githubusercontent.com/55396651/107056792-ba4b9d00-67f8-11eb-9153-05281416cddb.png) - - ### Now - + A large amount of unnecessary margin which existed in the **Field Attachments inside the `DefaultAttachments`** has been fixed. + + ### Earlier + + ![earlier](https://user-images.githubusercontent.com/55396651/107056792-ba4b9d00-67f8-11eb-9153-05281416cddb.png) + + ### Now + ![now](https://user-images.githubusercontent.com/55396651/107057196-3219c780-67f9-11eb-84db-e4a0addfc168.png) - Default Attachments - Show Full Attachment.Text with Markdown ([#20606](https://github.com/RocketChat/Rocket.Chat/pull/20606) by [@aditya-mitra](https://github.com/aditya-mitra)) - Removed truncating of text in `Attachment.Text`. - Added `Attachment.Text` to be parsed to markdown by default. - - ### Earlier - ![earlier](https://user-images.githubusercontent.com/55396651/106910781-92d8cf80-6727-11eb-82ec-818df7544ff0.png) - - ### Now - + Removed truncating of text in `Attachment.Text`. + Added `Attachment.Text` to be parsed to markdown by default. + + ### Earlier + ![earlier](https://user-images.githubusercontent.com/55396651/106910781-92d8cf80-6727-11eb-82ec-818df7544ff0.png) + + ### Now + ![now](https://user-images.githubusercontent.com/55396651/106910840-a126eb80-6727-11eb-8bd6-d86383dd9181.png) - Don't ask again not rendering ([#20745](https://github.com/RocketChat/Rocket.Chat/pull/20745)) @@ -7613,21 +8924,21 @@ - Feedback on bulk invite ([#20339](https://github.com/RocketChat/Rocket.Chat/pull/20339) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) - Resolved structure where no response was being received. Changed from callback to async/await. - Added error in case of empty submission, or if no valid emails were found. - + Resolved structure where no response was being received. Changed from callback to async/await. + Added error in case of empty submission, or if no valid emails were found. + https://user-images.githubusercontent.com/38764067/105613964-dfe5a900-5deb-11eb-80f2-21fc8dee57c0.mp4 - Filters are not being applied correctly in Omnichannel Current Chats list ([#20320](https://github.com/RocketChat/Rocket.Chat/pull/20320) by [@rafaelblink](https://github.com/rafaelblink)) - ### Before - ![image](https://user-images.githubusercontent.com/2493803/105537672-082cb500-5cd1-11eb-8f1b-1726ba60420a.png) - - ### After - ![image](https://user-images.githubusercontent.com/2493803/105537773-2d212800-5cd1-11eb-8746-048deb9502d9.png) - - ![image](https://user-images.githubusercontent.com/2493803/106494728-88090b00-6499-11eb-922e-5386107e2389.png) - + ### Before + ![image](https://user-images.githubusercontent.com/2493803/105537672-082cb500-5cd1-11eb-8f1b-1726ba60420a.png) + + ### After + ![image](https://user-images.githubusercontent.com/2493803/105537773-2d212800-5cd1-11eb-8746-048deb9502d9.png) + + ![image](https://user-images.githubusercontent.com/2493803/106494728-88090b00-6499-11eb-922e-5386107e2389.png) + ![image](https://user-images.githubusercontent.com/2493803/106494751-90f9dc80-6499-11eb-901b-5e4dbdc678ba.png) - Fix Empty highlighted words field ([#20329](https://github.com/RocketChat/Rocket.Chat/pull/20329)) @@ -7656,11 +8967,11 @@ - List of Omnichannel triggers is not listing data ([#20624](https://github.com/RocketChat/Rocket.Chat/pull/20624) by [@rafaelblink](https://github.com/rafaelblink)) - ### Before - ![image](https://user-images.githubusercontent.com/2493803/107095379-7308e080-67e7-11eb-8251-7e7ff891087a.png) - - - ### After + ### Before + ![image](https://user-images.githubusercontent.com/2493803/107095379-7308e080-67e7-11eb-8251-7e7ff891087a.png) + + + ### After ![image](https://user-images.githubusercontent.com/2493803/107095261-3b019d80-67e7-11eb-8425-8612b03ac50a.png) - Livechat bridge permission checkers ([#20653](https://github.com/RocketChat/Rocket.Chat/pull/20653) by [@lolimay](https://github.com/lolimay)) @@ -7683,7 +8994,8 @@ - Missing setting to control when to send the ReplyTo field in email notifications ([#20744](https://github.com/RocketChat/Rocket.Chat/pull/20744)) - - Add a new setting ("Add Reply-To header") in the Email settings' page to control when the Reply-To header is used in e-mail notifications; + - Add a new setting ("Add Reply-To header") in the Email settings' page to control when the Reply-To header is used in e-mail notifications; + - The new setting is turned off (`false` value) by default. - New Integration page was not being displayed ([#20670](https://github.com/RocketChat/Rocket.Chat/pull/20670)) @@ -7716,15 +9028,15 @@ - Remove duplicate getCommonRoomEvents() event binding for starredMessages ([#20185](https://github.com/RocketChat/Rocket.Chat/pull/20185) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) - The getCommonRoomEvents() returned functions were bound to the starredMessages template twice. This was causing some bugs, as detailed in the Issue mentioned below. + The getCommonRoomEvents() returned functions were bound to the starredMessages template twice. This was causing some bugs, as detailed in the Issue mentioned below. I removed the top events call that only bound the getCommonRoomEvents(). Therefore, only one call for the same is left, which is at the end of the file. Having the events bound just once removes the bugs mentioned. - Remove warning problems from console ([#20800](https://github.com/RocketChat/Rocket.Chat/pull/20800)) - Removed tooltip in kebab menu options. ([#20498](https://github.com/RocketChat/Rocket.Chat/pull/20498) by [@Darshilp326](https://github.com/Darshilp326)) - Removed tooltip as it was not needed. - + Removed tooltip as it was not needed. + https://user-images.githubusercontent.com/55157259/106246146-a53ca000-6233-11eb-9874-cbd1b4331bc0.mp4 - Retry icon comes out of the div ([#20390](https://github.com/RocketChat/Rocket.Chat/pull/20390) by [@im-adithya](https://github.com/im-adithya)) @@ -7739,8 +9051,8 @@ - Room's last message's update date format on IE ([#20680](https://github.com/RocketChat/Rocket.Chat/pull/20680)) - The proposed change fixes a bug when updates the cached records on Internet Explorer and it breaks the sidebar as shown on the screenshot below: - + The proposed change fixes a bug when updates the cached records on Internet Explorer and it breaks the sidebar as shown on the screenshot below: + ![image](https://user-images.githubusercontent.com/27704687/107578007-f2285b00-6bd1-11eb-9250-1e76ae67f9c9.png) - Save user password and email from My Account ([#20737](https://github.com/RocketChat/Rocket.Chat/pull/20737)) @@ -7749,8 +9061,8 @@ - Selected hide system messages would now be viewed in vertical bar. ([#20358](https://github.com/RocketChat/Rocket.Chat/pull/20358) by [@Darshilp326](https://github.com/Darshilp326)) - All selected hide system messages are now in vertical Bar. - + All selected hide system messages are now in vertical Bar. + https://user-images.githubusercontent.com/55157259/105642624-d5411780-5eb0-11eb-8848-93e4b02629cb.mp4 - Selected messages don't get unselected ([#20408](https://github.com/RocketChat/Rocket.Chat/pull/20408) by [@im-adithya](https://github.com/im-adithya)) @@ -7765,14 +9077,22 @@ - Several Slack Importer issues ([#20216](https://github.com/RocketChat/Rocket.Chat/pull/20216)) - - Fix: Slack Importer crashes when importing a large users.json file - - Fix: Slack importer crashes when messages have invalid mentions - - Skip listing all users on the preparation screen when the user count is too large. - - Split avatar download into a separate process. - - Update room's last message when the import is complete. - - Prevent invalid or duplicated channel names - - Improve message error handling. - - Reduce max allowed BSON size to avoid possible issues in some servers. + - Fix: Slack Importer crashes when importing a large users.json file + + - Fix: Slack importer crashes when messages have invalid mentions + + - Skip listing all users on the preparation screen when the user count is too large. + + - Split avatar download into a separate process. + + - Update room's last message when the import is complete. + + - Prevent invalid or duplicated channel names + + - Improve message error handling. + + - Reduce max allowed BSON size to avoid possible issues in some servers. + - Improve handling of very large channel files. - star icon was visible after unstarring a message ([#19645](https://github.com/RocketChat/Rocket.Chat/pull/19645) by [@bhavayAnand9](https://github.com/bhavayAnand9)) @@ -7791,15 +9111,15 @@ - User statuses in admin user info panel ([#20341](https://github.com/RocketChat/Rocket.Chat/pull/20341) by [@RonLek](https://github.com/RonLek)) - Modifies user statuses in admin info panel based on their actual status instead of their `statusConnection`. This enables correct and consistent change in user statuses. - Also, bot users having status as online were classified as offline, with this change they are now correctly classified based on their corresponding statuses. - + Modifies user statuses in admin info panel based on their actual status instead of their `statusConnection`. This enables correct and consistent change in user statuses. + Also, bot users having status as online were classified as offline, with this change they are now correctly classified based on their corresponding statuses. + https://user-images.githubusercontent.com/28918901/105624438-b8bcc500-5e47-11eb-8d1e-3a4180da1304.mp4 - Users autocomplete showing duplicated results ([#20481](https://github.com/RocketChat/Rocket.Chat/pull/20481) by [@Darshilp326](https://github.com/Darshilp326)) - Added new query for outside room users so that room members are not shown twice. - + Added new query for outside room users so that room members are not shown twice. + https://user-images.githubusercontent.com/55157259/106174582-33c10b00-61bb-11eb-9716-377ef7bba34e.mp4
@@ -7820,7 +9140,7 @@ - Chore: Disable Sessions Aggregates tests locally ([#20607](https://github.com/RocketChat/Rocket.Chat/pull/20607)) - Disable Session aggregates tests in local environments + Disable Session aggregates tests in local environments For context, refer to: #20161 - Chore: Improve performance of messages’ watcher ([#20519](https://github.com/RocketChat/Rocket.Chat/pull/20519)) @@ -8029,18 +9349,20 @@ - **ENTERPRISE:** Omnichannel Contact Manager as preferred agent for routing ([#20244](https://github.com/RocketChat/Rocket.Chat/pull/20244)) - If the `Contact-Manager` is assigned to a Visitor, the chat will automatically get transferred to the respective Contact-Manager, provided the Contact-Manager is online. In-case the Contact-Manager is offline, the chat will be transferred to any other online agent. - We have provided a setting to control this auto-assignment feature - ![image](https://user-images.githubusercontent.com/34130764/104880961-8104d780-5986-11eb-9d87-82b99814b028.png) - - Behavior based-on Routing method - - 1. Auto-selection, Load-Balancing, or External Service (`autoAssignAgent = true`) - This is straightforward, - - if the Contact-manager is online, the chat will be transferred to the Contact-Manger only - - if the Contact-manager is offline, the chat will be transferred to any other online-agent based on the Routing system - 2. Manual-selection (`autoAssignAgent = false`) - - If the Contact-Manager is online, the chat will appear in the Queue of Contact-Manager **ONLY** + If the `Contact-Manager` is assigned to a Visitor, the chat will automatically get transferred to the respective Contact-Manager, provided the Contact-Manager is online. In-case the Contact-Manager is offline, the chat will be transferred to any other online agent. + We have provided a setting to control this auto-assignment feature + ![image](https://user-images.githubusercontent.com/34130764/104880961-8104d780-5986-11eb-9d87-82b99814b028.png) + + Behavior based-on Routing method + + + 1. Auto-selection, Load-Balancing, or External Service (`autoAssignAgent = true`) + This is straightforward, + - if the Contact-manager is online, the chat will be transferred to the Contact-Manger only + - if the Contact-manager is offline, the chat will be transferred to any other online-agent based on the Routing system + + 2. Manual-selection (`autoAssignAgent = false`) + - If the Contact-Manager is online, the chat will appear in the Queue of Contact-Manager **ONLY** - If the Contact-Manager is offline, the chat will appear in the Queue of all related Agents/Manager ( like it's done right now ) - Banner system and NPS ([#20221](https://github.com/RocketChat/Rocket.Chat/pull/20221)) @@ -8049,34 +9371,34 @@ - Email Inboxes for Omnichannel ([#20101](https://github.com/RocketChat/Rocket.Chat/pull/20101) by [@rafaelblink](https://github.com/rafaelblink)) - With this new feature, email accounts will receive email messages(threads) which will be transformed into Omnichannel chats. It'll be possible to set up multiple email accounts, test the connection with email server(email provider) and define the behaviour of each account. - - https://user-images.githubusercontent.com/2493803/105430398-242d4980-5c32-11eb-835a-450c94837d23.mp4 - - ### New item on admin menu - - ![image](https://user-images.githubusercontent.com/2493803/105428723-bc293400-5c2e-11eb-8c02-e8d36ea82726.png) - - - ### Send test email tooltip - - ![image](https://user-images.githubusercontent.com/2493803/104366986-eaa16380-54f8-11eb-9ba7-831cfde2319c.png) - - - ### Inbox Info - - ![image](https://user-images.githubusercontent.com/2493803/104366796-ab731280-54f8-11eb-9941-a3cc8eb610e1.png) - - ### SMTP Info - - ![image](https://user-images.githubusercontent.com/2493803/104366868-c47bc380-54f8-11eb-969e-ccc29070957c.png) - - ### IMAP Info - - ![image](https://user-images.githubusercontent.com/2493803/104366897-cd6c9500-54f8-11eb-80c4-97d5b0c002d5.png) - - ### Messages - + With this new feature, email accounts will receive email messages(threads) which will be transformed into Omnichannel chats. It'll be possible to set up multiple email accounts, test the connection with email server(email provider) and define the behaviour of each account. + + https://user-images.githubusercontent.com/2493803/105430398-242d4980-5c32-11eb-835a-450c94837d23.mp4 + + ### New item on admin menu + + ![image](https://user-images.githubusercontent.com/2493803/105428723-bc293400-5c2e-11eb-8c02-e8d36ea82726.png) + + + ### Send test email tooltip + + ![image](https://user-images.githubusercontent.com/2493803/104366986-eaa16380-54f8-11eb-9ba7-831cfde2319c.png) + + + ### Inbox Info + + ![image](https://user-images.githubusercontent.com/2493803/104366796-ab731280-54f8-11eb-9941-a3cc8eb610e1.png) + + ### SMTP Info + + ![image](https://user-images.githubusercontent.com/2493803/104366868-c47bc380-54f8-11eb-969e-ccc29070957c.png) + + ### IMAP Info + + ![image](https://user-images.githubusercontent.com/2493803/104366897-cd6c9500-54f8-11eb-80c4-97d5b0c002d5.png) + + ### Messages + ![image](https://user-images.githubusercontent.com/2493803/105428971-45d90180-5c2f-11eb-992a-022a3df94471.png) - Encrypted Discussions and new Encryption Permissions ([#20201](https://github.com/RocketChat/Rocket.Chat/pull/20201)) @@ -8088,7 +9410,7 @@ - Add extra SAML settings to update room subs and add private room subs. ([#19489](https://github.com/RocketChat/Rocket.Chat/pull/19489) by [@tlskinneriv](https://github.com/tlskinneriv)) - Added a SAML setting to support updating room subscriptions each time a user logs in via SAML. + Added a SAML setting to support updating room subscriptions each time a user logs in via SAML. Added a SAML setting to support including private rooms in SAML updated subscriptions (whether initial or on each logon). - Autofocus on directory ([#20509](https://github.com/RocketChat/Rocket.Chat/pull/20509)) @@ -8115,7 +9437,7 @@ - Tooltip added for Kebab menu on chat header ([#20116](https://github.com/RocketChat/Rocket.Chat/pull/20116)) - Added the missing Tooltip for kebab menu on chat header. + Added the missing Tooltip for kebab menu on chat header. ![tooltip after](https://user-images.githubusercontent.com/58601732/104031406-b07f4b80-51f2-11eb-87a4-1e8da78a254f.gif) ### 🐛 Bug fixes @@ -8137,7 +9459,7 @@ - Added context check for closing active tabbar for member-list ([#20228](https://github.com/RocketChat/Rocket.Chat/pull/20228)) - When we click on a username and then click on see user's full profile, a tab gets active and shows us the user's profile, the problem occurs when the tab is still active and we try to see another user's profile. In this case, tabbar gets closed. + When we click on a username and then click on see user's full profile, a tab gets active and shows us the user's profile, the problem occurs when the tab is still active and we try to see another user's profile. In this case, tabbar gets closed. To resolve this, added context check for closing action of active tabbar. - Added Margin between status bullet and status label ([#20199](https://github.com/RocketChat/Rocket.Chat/pull/20199)) @@ -8146,8 +9468,8 @@ - Added success message on saving notification preference. ([#20220](https://github.com/RocketChat/Rocket.Chat/pull/20220) by [@Darshilp326](https://github.com/Darshilp326)) - Added success message after saving notification preferences. - + Added success message after saving notification preferences. + https://user-images.githubusercontent.com/55157259/104774617-03ca3e80-579d-11eb-8fa4-990b108dd8d9.mp4 - Admin User Info email verified status ([#20110](https://github.com/RocketChat/Rocket.Chat/pull/20110) by [@bdelwood](https://github.com/bdelwood)) @@ -8156,10 +9478,10 @@ - Change header's favorite icon to filled star ([#20174](https://github.com/RocketChat/Rocket.Chat/pull/20174)) - ### Before: - ![image](https://user-images.githubusercontent.com/27704687/104351819-a60bcd00-54e4-11eb-8b43-7d281a6e5dcb.png) - - ### After: + ### Before: + ![image](https://user-images.githubusercontent.com/27704687/104351819-a60bcd00-54e4-11eb-8b43-7d281a6e5dcb.png) + + ### After: ![image](https://user-images.githubusercontent.com/27704687/104351632-67761280-54e4-11eb-87ba-25b940494bb5.png) - Changed success message for adding custom sound. ([#20272](https://github.com/RocketChat/Rocket.Chat/pull/20272) by [@Darshilp326](https://github.com/Darshilp326)) @@ -8168,24 +9490,24 @@ - Changed success message for ignoring member. ([#19996](https://github.com/RocketChat/Rocket.Chat/pull/19996) by [@Darshilp326](https://github.com/Darshilp326)) - Different messages for ignoring/unignoring will be displayed. - + Different messages for ignoring/unignoring will be displayed. + https://user-images.githubusercontent.com/55157259/103310307-4241c880-4a3d-11eb-8c6c-4c9b99d023db.mp4 - Creation of Omnichannel rooms not working correctly through the Apps when the agent parameter is set ([#19997](https://github.com/RocketChat/Rocket.Chat/pull/19997)) - Engagement dashboard graphs labels superposing each other ([#20267](https://github.com/RocketChat/Rocket.Chat/pull/20267)) - Now after a certain breakpoint, the graphs should stack vertically, and overlapping text rotated. - + Now after a certain breakpoint, the graphs should stack vertically, and overlapping text rotated. + ![image](https://user-images.githubusercontent.com/40830821/105098926-93b40500-5a89-11eb-9a56-2fc3b1552914.png) - Fields overflowing page ([#20287](https://github.com/RocketChat/Rocket.Chat/pull/20287)) - ### Before - ![image](https://user-images.githubusercontent.com/40830821/105246952-c1b14c00-5b52-11eb-8671-cff88edf242d.png) - - ### After + ### Before + ![image](https://user-images.githubusercontent.com/40830821/105246952-c1b14c00-5b52-11eb-8671-cff88edf242d.png) + + ### After ![image](https://user-images.githubusercontent.com/40830821/105247125-0a690500-5b53-11eb-9f3c-d6a68108e336.png) - Fix error that occurs on changing archive status of room ([#20098](https://github.com/RocketChat/Rocket.Chat/pull/20098) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) @@ -8202,7 +9524,7 @@ - Livechat.RegisterGuest method removing unset fields ([#20124](https://github.com/RocketChat/Rocket.Chat/pull/20124) by [@rafaelblink](https://github.com/rafaelblink)) - After changes made on https://github.com/RocketChat/Rocket.Chat/pull/19931, the `Livechat.RegisterGuest` method started removing properties from the visitor inappropriately. The properties that did not receive value were removed from the object. + After changes made on https://github.com/RocketChat/Rocket.Chat/pull/19931, the `Livechat.RegisterGuest` method started removing properties from the visitor inappropriately. The properties that did not receive value were removed from the object. Those changes were made to support the new Contact Form, but now the form has its own method to deal with Contact data so those changes are no longer necessary. - Markdown added for Header Room topic ([#20021](https://github.com/RocketChat/Rocket.Chat/pull/20021)) @@ -8223,18 +9545,18 @@ - Omnichannel - Contact Center form is not validating custom fields properly ([#20196](https://github.com/RocketChat/Rocket.Chat/pull/20196) by [@rafaelblink](https://github.com/rafaelblink)) - The contact form is accepting undefined values in required custom fields when creating or editing contacts, and, the errror message isn't following Rocket.chat design system. - - ### Before - ![image](https://user-images.githubusercontent.com/2493803/104522668-31688980-55dd-11eb-92c5-83f96073edc4.png) - - ### After - - #### New - ![image](https://user-images.githubusercontent.com/2493803/104770494-68f74300-574f-11eb-94a3-c8fd73365308.png) - - - #### Edit + The contact form is accepting undefined values in required custom fields when creating or editing contacts, and, the errror message isn't following Rocket.chat design system. + + ### Before + ![image](https://user-images.githubusercontent.com/2493803/104522668-31688980-55dd-11eb-92c5-83f96073edc4.png) + + ### After + + #### New + ![image](https://user-images.githubusercontent.com/2493803/104770494-68f74300-574f-11eb-94a3-c8fd73365308.png) + + + #### Edit ![image](https://user-images.githubusercontent.com/2493803/104770538-7b717c80-574f-11eb-829f-1ae304103369.png) - Omnichannel Agents unable to take new chats in the queue ([#20022](https://github.com/RocketChat/Rocket.Chat/pull/20022) by [@rafaelblink](https://github.com/rafaelblink)) @@ -8255,15 +9577,15 @@ - Room special name in prompts ([#20277](https://github.com/RocketChat/Rocket.Chat/pull/20277) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) - The "Hide room" and "Leave Room" confirmation prompts use the "name" key from the room info. When the setting " - Allow Special Characters in Room Names" is enabled, the prompts show the normalized names instead of those that contain the special characters. - - Changed the value being used from name to fname, which always has the user-set name. - - Previous: - ![Screenshot from 2021-01-20 15-52-29](https://user-images.githubusercontent.com/38764067/105161642-9b31e780-5b37-11eb-8b0c-ec4b1414c948.png) - - Updated: + The "Hide room" and "Leave Room" confirmation prompts use the "name" key from the room info. When the setting " + Allow Special Characters in Room Names" is enabled, the prompts show the normalized names instead of those that contain the special characters. + + Changed the value being used from name to fname, which always has the user-set name. + + Previous: + ![Screenshot from 2021-01-20 15-52-29](https://user-images.githubusercontent.com/38764067/105161642-9b31e780-5b37-11eb-8b0c-ec4b1414c948.png) + + Updated: ![Screenshot from 2021-01-20 15-50-19](https://user-images.githubusercontent.com/38764067/105161627-966d3380-5b37-11eb-9812-3dd9352b4f95.png) - Room's list showing all rooms with same name ([#20176](https://github.com/RocketChat/Rocket.Chat/pull/20176)) @@ -8274,9 +9596,9 @@ - Saving with blank email in edit user ([#20259](https://github.com/RocketChat/Rocket.Chat/pull/20259) by [@RonLek](https://github.com/RonLek)) - Disallows showing a success popup when email field is made blank in Edit User and instead shows the relevant error popup. - - + Disallows showing a success popup when email field is made blank in Edit User and instead shows the relevant error popup. + + https://user-images.githubusercontent.com/28918901/104960749-dbd81680-59fa-11eb-9c7b-2b257936f894.mp4 - Search list filter ([#19937](https://github.com/RocketChat/Rocket.Chat/pull/19937)) @@ -8323,7 +9645,7 @@ - Add translation of Edit Status in all languages ([#19916](https://github.com/RocketChat/Rocket.Chat/pull/19916) by [@sushant52](https://github.com/sushant52)) - Closes [#19915](https://github.com/RocketChat/Rocket.Chat/issues/19915) + Closes [#19915](https://github.com/RocketChat/Rocket.Chat/issues/19915) The profile options menu is well translated in many languages. However, Edit Status is the only button which is not well translated. With this change, the whole profile options will be properly translated in a lot of languages. - Bump axios from 0.18.0 to 0.18.1 ([#20055](https://github.com/RocketChat/Rocket.Chat/pull/20055) by [@dependabot[bot]](https://github.com/dependabot[bot])) @@ -8358,10 +9680,10 @@ - Regression: Announcement bar not showing properly Markdown content ([#20290](https://github.com/RocketChat/Rocket.Chat/pull/20290)) - **Before**: - ![image](https://user-images.githubusercontent.com/27704687/105273746-a4907380-5b7a-11eb-8121-aff665251c44.png) - - **After**: + **Before**: + ![image](https://user-images.githubusercontent.com/27704687/105273746-a4907380-5b7a-11eb-8121-aff665251c44.png) + + **After**: ![image](https://user-images.githubusercontent.com/27704687/105274050-2e404100-5b7b-11eb-93b2-b6282a7bed95.png) - regression: Announcement link open in new tab ([#20435](https://github.com/RocketChat/Rocket.Chat/pull/20435)) @@ -8376,23 +9698,23 @@ - Regression: Change sort icon ([#20177](https://github.com/RocketChat/Rocket.Chat/pull/20177)) - ### Before - ![image](https://user-images.githubusercontent.com/40830821/104366414-1bcd6400-54f8-11eb-9fc7-c6f13f07a61e.png) - - ### After + ### Before + ![image](https://user-images.githubusercontent.com/40830821/104366414-1bcd6400-54f8-11eb-9fc7-c6f13f07a61e.png) + + ### After ![image](https://user-images.githubusercontent.com/40830821/104366542-4cad9900-54f8-11eb-83ca-acb99899515a.png) - Regression: Custom field labels are not displayed properly on Omnichannel Contact Profile form ([#20393](https://github.com/RocketChat/Rocket.Chat/pull/20393) by [@rafaelblink](https://github.com/rafaelblink)) - ### Before - ![image](https://user-images.githubusercontent.com/2493803/105780399-20116c80-5f4f-11eb-9620-0901472e453b.png) - - ![image](https://user-images.githubusercontent.com/2493803/105780420-2e5f8880-5f4f-11eb-8e93-8115ebc685be.png) - - ### After - - ![image](https://user-images.githubusercontent.com/2493803/105780832-1ccab080-5f50-11eb-8042-188dd0c41904.png) - + ### Before + ![image](https://user-images.githubusercontent.com/2493803/105780399-20116c80-5f4f-11eb-9620-0901472e453b.png) + + ![image](https://user-images.githubusercontent.com/2493803/105780420-2e5f8880-5f4f-11eb-8e93-8115ebc685be.png) + + ### After + + ![image](https://user-images.githubusercontent.com/2493803/105780832-1ccab080-5f50-11eb-8042-188dd0c41904.png) + ![image](https://user-images.githubusercontent.com/2493803/105780911-500d3f80-5f50-11eb-96e0-7df3f179dbd5.png) - Regression: ESLint Warning - explicit-function-return-type ([#20434](https://github.com/RocketChat/Rocket.Chat/pull/20434) by [@aditya-mitra](https://github.com/aditya-mitra)) @@ -8409,8 +9731,8 @@ - Regression: Fixed update room avatar issue. ([#20433](https://github.com/RocketChat/Rocket.Chat/pull/20433) by [@Darshilp326](https://github.com/Darshilp326)) - Users can now update their room avatar without any error. - + Users can now update their room avatar without any error. + https://user-images.githubusercontent.com/55157259/105951602-560d3880-6096-11eb-97a5-b5eb9a28b58d.mp4 - Regression: Info Page Icon style and usage graph breaking ([#20180](https://github.com/RocketChat/Rocket.Chat/pull/20180)) @@ -8427,11 +9749,11 @@ - Regression: Unread superposing announcement. ([#20306](https://github.com/RocketChat/Rocket.Chat/pull/20306)) - ### Before - ![image](https://user-images.githubusercontent.com/40830821/105412619-c2f67d80-5c13-11eb-8204-5932ea880c8a.png) - - - ### After + ### Before + ![image](https://user-images.githubusercontent.com/40830821/105412619-c2f67d80-5c13-11eb-8204-5932ea880c8a.png) + + + ### After ![image](https://user-images.githubusercontent.com/40830821/105411176-d1439a00-5c11-11eb-8d1b-ea27c8485214.png) - Regression: User Dropdown margin ([#20222](https://github.com/RocketChat/Rocket.Chat/pull/20222)) @@ -8719,8 +10041,8 @@ - Hightlights validation on Account Preferences page ([#19902](https://github.com/RocketChat/Rocket.Chat/pull/19902) by [@aKn1ghtOut](https://github.com/aKn1ghtOut)) - This PR fixes two issues in the account settings "preferences" panel. - Once set, the "Highlighted Words" setting cannot be reset to an empty string. This was fixed by changing the string validation from checking the length to checking the type of variable. + This PR fixes two issues in the account settings "preferences" panel. + Once set, the "Highlighted Words" setting cannot be reset to an empty string. This was fixed by changing the string validation from checking the length to checking the type of variable. Secondly, it tracks the changes to correctly identify if changes after the last "save changes" action have been made, using an "updates" state variable, instead of just comparing against the initialValue that does not change on clicking "save changes". - Image preview for image URLs on messages ([#19734](https://github.com/RocketChat/Rocket.Chat/pull/19734) by [@g-thome](https://github.com/g-thome)) @@ -8779,10 +10101,14 @@ - Chore: Update Pull Request template ([#19768](https://github.com/RocketChat/Rocket.Chat/pull/19768)) - Improve the template of Pull Requests in order to make it clear reducing duplicated information and removing the visible checklists that were generating noise and misunderstanding with the PR progress. - - Moved the checklists to inside comments - - Merge the changelog and proposed changes sections to have a single source of description that goes to the changelog - - Remove the screenshot section, they can be added inside the description + Improve the template of Pull Requests in order to make it clear reducing duplicated information and removing the visible checklists that were generating noise and misunderstanding with the PR progress. + + - Moved the checklists to inside comments + + - Merge the changelog and proposed changes sections to have a single source of description that goes to the changelog + + - Remove the screenshot section, they can be added inside the description + - Changed the proposed changes title to incentivizing the usage of images and videos - Frontend folder structure ([#19631](https://github.com/RocketChat/Rocket.Chat/pull/19631)) @@ -8817,11 +10143,11 @@ - Regression: Double Scrollbars on tables ([#19980](https://github.com/RocketChat/Rocket.Chat/pull/19980)) - Before: - ![image](https://user-images.githubusercontent.com/40830821/103242719-0ec84680-4936-11eb-87a7-68b6eea8de7b.png) - - - After: + Before: + ![image](https://user-images.githubusercontent.com/40830821/103242719-0ec84680-4936-11eb-87a7-68b6eea8de7b.png) + + + After: ![image](https://user-images.githubusercontent.com/40830821/103242680-ee988780-4935-11eb-99e2-a95de99f78f1.png) - Regression: Failed autolinker and markdown rendering ([#19831](https://github.com/RocketChat/Rocket.Chat/pull/19831)) @@ -8840,7 +10166,7 @@ - Regression: Omnichannel Custom Fields Form no longer working after refactoring ([#19948](https://github.com/RocketChat/Rocket.Chat/pull/19948)) - The Omnichannel `Custom Fields` form is not working anymore after some refactorings on client-side. + The Omnichannel `Custom Fields` form is not working anymore after some refactorings on client-side. When the user clicks on `Custom Field` in the Omnichannel menu, a blank page appears. - Regression: polishing licenses endpoints ([#19981](https://github.com/RocketChat/Rocket.Chat/pull/19981) by [@g-thome](https://github.com/g-thome)) @@ -9039,8 +10365,8 @@ - Bundle Size Client ([#19533](https://github.com/RocketChat/Rocket.Chat/pull/19533)) - temporarily removes some codeblock languages - Moved some libraries to dynamic imports + temporarily removes some codeblock languages + Moved some libraries to dynamic imports Removed some shared code not used on the client side - Forward Omnichannel room to agent in another department ([#19576](https://github.com/RocketChat/Rocket.Chat/pull/19576) by [@mrfigueiredo](https://github.com/mrfigueiredo)) @@ -10121,8 +11447,10 @@ - **2FA:** Password enforcement setting and 2FA protection when saving settings or resetting E2E encryption ([#18640](https://github.com/RocketChat/Rocket.Chat/pull/18640)) - - Increase the 2FA remembering time from 5min to 30min - - Add new setting to enforce 2FA password fallback (enabled only for new installations) + - Increase the 2FA remembering time from 5min to 30min + + - Add new setting to enforce 2FA password fallback (enabled only for new installations) + - Require 2FA to save settings and reset E2E Encryption keys - **Omnichannel:** Allow set other agent status via method `livechat:changeLivechatStatus ` ([#18571](https://github.com/RocketChat/Rocket.Chat/pull/18571)) @@ -10140,7 +11468,7 @@ - 2FA by Email setting showing for the user even when disabled by the admin ([#18473](https://github.com/RocketChat/Rocket.Chat/pull/18473)) - The option to disable/enable the **Two-factor authentication via Email** at `Account > Security > Two Factor Authentication + The option to disable/enable the **Two-factor authentication via Email** at `Account > Security > Two Factor Authentication ` was visible even when the setting **Enable Two Factor Authentication via Email** at `Admin > Accounts > Two Factor Authentication` was disabled leading to misbehavior since the functionality was disabled. - Agents enabledDepartment attribute not set on collection ([#18614](https://github.com/RocketChat/Rocket.Chat/pull/18614) by [@paulobernardoaf](https://github.com/paulobernardoaf)) @@ -10490,13 +11818,16 @@ - Mention autocomplete UI and performance improvements ([#18309](https://github.com/RocketChat/Rocket.Chat/pull/18309)) - * New setting to configure the number of suggestions `Admin > Layout > User Interface > Number of users' autocomplete suggestions` (default 5) - * The UI shows whenever the user is not a member of the room - * The UI shows when the suggestion came from the last messages for quick selection/reply - * The suggestions follow this order: - * The user with the exact username and member of the room - * The user with the exact username but not a member of the room (if allowed to list non-members) - * The users containing the text in username, name or nickname and member of the room + * New setting to configure the number of suggestions `Admin > Layout > User Interface > Number of users' autocomplete suggestions` (default 5) + + * The UI shows whenever the user is not a member of the room + + * The UI shows when the suggestion came from the last messages for quick selection/reply + + * The suggestions follow this order: + * The user with the exact username and member of the room + * The user with the exact username but not a member of the room (if allowed to list non-members) + * The users containing the text in username, name or nickname and member of the room * The users containing the text in username, name or nickname and not a member of the room (if allowed to list non-members) - Message action styles ([#18190](https://github.com/RocketChat/Rocket.Chat/pull/18190)) @@ -10838,10 +12169,10 @@ - Split NOTIFICATIONS_SCHEDULE_DELAY into three separate variables ([#17669](https://github.com/RocketChat/Rocket.Chat/pull/17669) by [@jazztickets](https://github.com/jazztickets)) - Email notification delay can now be customized with the following environment variables: - NOTIFICATIONS_SCHEDULE_DELAY_ONLINE - NOTIFICATIONS_SCHEDULE_DELAY_AWAY - NOTIFICATIONS_SCHEDULE_DELAY_OFFLINE + Email notification delay can now be customized with the following environment variables: + NOTIFICATIONS_SCHEDULE_DELAY_ONLINE + NOTIFICATIONS_SCHEDULE_DELAY_AWAY + NOTIFICATIONS_SCHEDULE_DELAY_OFFLINE Setting the value to -1 disable notifications for that type. - Threads ([#17416](https://github.com/RocketChat/Rocket.Chat/pull/17416)) @@ -11241,11 +12572,11 @@ - **ENTERPRISE:** Omnichannel Last-Chatted Agent Preferred option ([#17666](https://github.com/RocketChat/Rocket.Chat/pull/17666)) - If activated, this feature will store the last agent that assisted each Omnichannel visitor when a conversation is taken. So, when a visitor returns(it works with any entry point, Livechat, Facebook, REST API, and so on) and starts a new chat, the routing system checks: - - 1 - The visitor object for any stored agent that the visitor has previously talked to; - 2 - If a previous agent is not found, the system will try to find a previous conversation of the same visitor. If a room is found, the system will get the previous agent from the room; - + If activated, this feature will store the last agent that assisted each Omnichannel visitor when a conversation is taken. So, when a visitor returns(it works with any entry point, Livechat, Facebook, REST API, and so on) and starts a new chat, the routing system checks: + + 1 - The visitor object for any stored agent that the visitor has previously talked to; + 2 - If a previous agent is not found, the system will try to find a previous conversation of the same visitor. If a room is found, the system will get the previous agent from the room; + After this process, if an agent has been found, the system will check the agent's availability to assist the new chat. If it's not available, then the routing system will get the next available agent in the queue. - **ENTERPRISE:** Support for custom Livechat registration form fields ([#17581](https://github.com/RocketChat/Rocket.Chat/pull/17581)) @@ -11350,9 +12681,12 @@ - Notification sounds ([#17616](https://github.com/RocketChat/Rocket.Chat/pull/17616)) - * Global CDN config was ignored when loading the sound files - * Upload of custom sounds wasn't getting the file extension correctly - * Some translations were missing + * Global CDN config was ignored when loading the sound files + + * Upload of custom sounds wasn't getting the file extension correctly + + * Some translations were missing + * Edit and delete of custom sounds were not working correctly - Omnichannel departments are not saved when the offline channel name is not defined ([#17553](https://github.com/RocketChat/Rocket.Chat/pull/17553)) @@ -11640,14 +12974,19 @@ - Better Push and Email Notification logic ([#17357](https://github.com/RocketChat/Rocket.Chat/pull/17357)) - We are still using the same logic to define which notifications every new message will generate, it takes some servers' settings, users's preferences and subscriptions' settings in consideration to determine who will receive each notification type (desktop, audio, email and mobile push), but now it doesn't check the user's status (online, away, offline) for email and mobile push notifications but send those notifications to a new queue with the following rules: - - - When the user is online the notification is scheduled to be sent in 120 seconds - - When the user is away the notification is scheduled to be sent in 120 seconds minus the amount of time he is away - - When the user is offline the notification is scheduled to be sent right away - - When the user reads a channel all the notifications for that user are removed (clear queue) - - When a notification is processed to be sent to a user and there are other scheduled notifications: - - All the scheduled notifications for that user are rescheduled to now + We are still using the same logic to define which notifications every new message will generate, it takes some servers' settings, users's preferences and subscriptions' settings in consideration to determine who will receive each notification type (desktop, audio, email and mobile push), but now it doesn't check the user's status (online, away, offline) for email and mobile push notifications but send those notifications to a new queue with the following rules: + + + - When the user is online the notification is scheduled to be sent in 120 seconds + + - When the user is away the notification is scheduled to be sent in 120 seconds minus the amount of time he is away + + - When the user is offline the notification is scheduled to be sent right away + + - When the user reads a channel all the notifications for that user are removed (clear queue) + + - When a notification is processed to be sent to a user and there are other scheduled notifications: + - All the scheduled notifications for that user are rescheduled to now - The current notification goes back to the queue to be processed ordered by creation date - Buttons to check/uncheck all users and channels on import ([#17207](https://github.com/RocketChat/Rocket.Chat/pull/17207)) @@ -12010,7 +13349,7 @@ - Translation via MS translate ([#16363](https://github.com/RocketChat/Rocket.Chat/pull/16363) by [@mrsimpson](https://github.com/mrsimpson)) - Adds Microsoft's translation service (https://translator.microsoft.com/) as a provider for translation of messages. + Adds Microsoft's translation service (https://translator.microsoft.com/) as a provider for translation of messages. In addition to implementing the interface (similar to google and DeepL), a small change has been done in order to display the translation provider on the UI. - Two Factor authentication via email ([#15949](https://github.com/RocketChat/Rocket.Chat/pull/15949)) diff --git a/apps/meteor/.docker/Dockerfile.rhel b/apps/meteor/.docker/Dockerfile.rhel index 574dca2699dec..7ee11ce244155 100644 --- a/apps/meteor/.docker/Dockerfile.rhel +++ b/apps/meteor/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/ubi8/nodejs-12 -ENV RC_VERSION 4.8.0-develop +ENV RC_VERSION 5.0.0 MAINTAINER buildmaster@rocket.chat diff --git a/apps/meteor/.mocharc.api.js b/apps/meteor/.mocharc.api.js index 982d47181fe99..934fd1509ae15 100644 --- a/apps/meteor/.mocharc.api.js +++ b/apps/meteor/.mocharc.api.js @@ -9,5 +9,5 @@ module.exports = { timeout: 10000, bail: true, file: 'tests/end-to-end/teardown.js', - spec: ['tests/end-to-end/api/*.js', 'tests/end-to-end/api/*.ts', 'tests/end-to-end/apps/*.js'], + spec: ['tests/unit/app/api/server/v1/*.spec.ts', 'tests/end-to-end/api/*.js', 'tests/end-to-end/api/*.ts', 'tests/end-to-end/apps/*.js'], }; diff --git a/apps/meteor/.snapcraft/resources/prepareRocketChat b/apps/meteor/.snapcraft/resources/prepareRocketChat index 4ec018181fc95..1e89be5ce3f3a 100755 --- a/apps/meteor/.snapcraft/resources/prepareRocketChat +++ b/apps/meteor/.snapcraft/resources/prepareRocketChat @@ -1,6 +1,6 @@ #!/bin/bash -curl -SLf "https://releases.rocket.chat/4.8.0-develop/download/" -o rocket.chat.tgz +curl -SLf "https://releases.rocket.chat/5.0.0/download/" -o rocket.chat.tgz tar xf rocket.chat.tgz --strip 1 diff --git a/apps/meteor/.snapcraft/snap/snapcraft.yaml b/apps/meteor/.snapcraft/snap/snapcraft.yaml index 3ab87352bc422..024184829e7bb 100644 --- a/apps/meteor/.snapcraft/snap/snapcraft.yaml +++ b/apps/meteor/.snapcraft/snap/snapcraft.yaml @@ -7,7 +7,7 @@ # 5. `snapcraft snap` name: rocketchat-server -version: 4.8.0-develop +version: 5.0.0 summary: Rocket.Chat server description: Have your own Slack like online chat, built with Meteor. https://rocket.chat/ confinement: strict diff --git a/apps/meteor/app/action-links/client/lib/actionLinks.ts b/apps/meteor/app/action-links/client/lib/actionLinks.ts index 359eb88adfec9..d4214482096c5 100644 --- a/apps/meteor/app/action-links/client/lib/actionLinks.ts +++ b/apps/meteor/app/action-links/client/lib/actionLinks.ts @@ -42,7 +42,7 @@ export const actionLinks = { // return message; // }, - run(method: string, message: IMessage, instance: undefined): void { + run(method: string, message: IMessage, instance?: Blaze.TemplateInstance | Function): void { const actionLink = message.actionLinks && message.actionLinks.find((action) => action.method_id === method); if (!actionLink) { diff --git a/apps/meteor/app/api/server/api.d.ts b/apps/meteor/app/api/server/api.d.ts index 70d28d6169c0f..fc9519b87ea56 100644 --- a/apps/meteor/app/api/server/api.d.ts +++ b/apps/meteor/app/api/server/api.d.ts @@ -143,7 +143,7 @@ type Operations }; declare class APIClass { - fieldSeparator(fieldSeparator: unknown): void; + fieldSeparator: string; limitedUserFieldsToExclude(fields: { [x: string]: unknown }, limitedUserFieldsToExclude: unknown): { [x: string]: unknown }; diff --git a/apps/meteor/app/api/server/api.js b/apps/meteor/app/api/server/api.js index e92d061ae338e..c88592af1e1f3 100644 --- a/apps/meteor/app/api/server/api.js +++ b/apps/meteor/app/api/server/api.js @@ -425,6 +425,9 @@ export class APIClass extends Restivus { connection, }); + this.queryOperations = options.queryOperations; + this.queryFields = options.queryFields; + result = DDP._CurrentInvocation.withValue(invocation, () => Promise.await(originalAction.apply(this))) || API.v1.success(); log.http({ diff --git a/apps/meteor/app/api/server/helpers/insertUserObject.ts b/apps/meteor/app/api/server/helpers/insertUserObject.ts index 2516579cdb6f3..f3ea765534bf6 100644 --- a/apps/meteor/app/api/server/helpers/insertUserObject.ts +++ b/apps/meteor/app/api/server/helpers/insertUserObject.ts @@ -1,11 +1,12 @@ +import { Meteor } from 'meteor/meteor'; + import { Users } from '../../../models/server'; import { API } from '../api'; API.helperMethods.set( 'insertUserObject', - function _addUserToObject({ object, userId }: { object: { [key: string]: unknown }; userId: string }) { + Meteor.bindEnvironment(function _addUserToObject({ object, userId }: { object: { [key: string]: unknown }; userId: string }) { // Maybe `object: { [key: string]: Meteor.User }`? - const user = Users.findOneById(userId); if (user) { object.user = { @@ -16,5 +17,5 @@ API.helperMethods.set( } return object; - }, + }), ); diff --git a/apps/meteor/app/api/server/helpers/parseJsonQuery.js b/apps/meteor/app/api/server/helpers/parseJsonQuery.js deleted file mode 100644 index 18b9e372dcb4d..0000000000000 --- a/apps/meteor/app/api/server/helpers/parseJsonQuery.js +++ /dev/null @@ -1,119 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { EJSON } from 'meteor/ejson'; - -import { hasPermission } from '../../../authorization'; -import { clean } from '../lib/cleanQuery'; -import { API } from '../api'; - -const pathAllowConf = { - '/api/v1/users.list': ['$or', '$regex', '$and'], - 'def': ['$or', '$and', '$regex'], -}; - -API.helperMethods.set('parseJsonQuery', function _parseJsonQuery() { - let sort; - if (this.queryParams.sort) { - try { - sort = JSON.parse(this.queryParams.sort); - Object.entries(sort).forEach(([key, value]) => { - if (value !== 1 && value !== -1) { - throw new Meteor.Error('error-invalid-sort-parameter', `Invalid sort parameter: ${key}`, { - helperMethod: 'parseJsonQuery', - }); - } - }); - } catch (e) { - this.logger.warn(`Invalid sort parameter provided "${this.queryParams.sort}":`, e); - throw new Meteor.Error('error-invalid-sort', `Invalid sort parameter provided: "${this.queryParams.sort}"`, { - helperMethod: 'parseJsonQuery', - }); - } - } - - let fields; - if (this.queryParams.fields) { - try { - fields = JSON.parse(this.queryParams.fields); - - Object.entries(fields).forEach(([key, value]) => { - if (value !== 1 && value !== 0) { - throw new Meteor.Error('error-invalid-sort-parameter', `Invalid fields parameter: ${key}`, { - helperMethod: 'parseJsonQuery', - }); - } - }); - } catch (e) { - this.logger.warn(`Invalid fields parameter provided "${this.queryParams.fields}":`, e); - throw new Meteor.Error('error-invalid-fields', `Invalid fields parameter provided: "${this.queryParams.fields}"`, { - helperMethod: 'parseJsonQuery', - }); - } - } - - // Verify the user's selected fields only contains ones which their role allows - if (typeof fields === 'object') { - let nonSelectableFields = Object.keys(API.v1.defaultFieldsToExclude); - if (this.request.route.includes('/v1/users.')) { - const getFields = () => - Object.keys( - hasPermission(this.userId, 'view-full-other-user-info') - ? API.v1.limitedUserFieldsToExcludeIfIsPrivilegedUser - : API.v1.limitedUserFieldsToExclude, - ); - nonSelectableFields = nonSelectableFields.concat(getFields()); - } - - Object.keys(fields).forEach((k) => { - if (nonSelectableFields.includes(k) || nonSelectableFields.includes(k.split(API.v1.fieldSeparator)[0])) { - delete fields[k]; - } - }); - } - - // Limit the fields by default - fields = Object.assign({}, fields, API.v1.defaultFieldsToExclude); - if (this.request.route.includes('/v1/users.')) { - if (hasPermission(this.userId, 'view-full-other-user-info')) { - fields = Object.assign(fields, API.v1.limitedUserFieldsToExcludeIfIsPrivilegedUser); - } else { - fields = Object.assign(fields, API.v1.limitedUserFieldsToExclude); - } - } - - let query = {}; - if (this.queryParams.query) { - try { - query = EJSON.parse(this.queryParams.query); - query = clean(query, pathAllowConf[this.request.route] || pathAllowConf.def); - } catch (e) { - this.logger.warn(`Invalid query parameter provided "${this.queryParams.query}":`, e); - throw new Meteor.Error('error-invalid-query', `Invalid query parameter provided: "${this.queryParams.query}"`, { - helperMethod: 'parseJsonQuery', - }); - } - } - - // Verify the user has permission to query the fields they are - if (typeof query === 'object') { - let nonQueryableFields = Object.keys(API.v1.defaultFieldsToExclude); - if (this.request.route.includes('/v1/users.')) { - if (hasPermission(this.userId, 'view-full-other-user-info')) { - nonQueryableFields = nonQueryableFields.concat(Object.keys(API.v1.limitedUserFieldsToExcludeIfIsPrivilegedUser)); - } else { - nonQueryableFields = nonQueryableFields.concat(Object.keys(API.v1.limitedUserFieldsToExclude)); - } - } - - Object.keys(query).forEach((k) => { - if (nonQueryableFields.includes(k) || nonQueryableFields.includes(k.split(API.v1.fieldSeparator)[0])) { - delete query[k]; - } - }); - } - - return { - sort, - fields, - query, - }; -}); diff --git a/apps/meteor/app/api/server/helpers/parseJsonQuery.ts b/apps/meteor/app/api/server/helpers/parseJsonQuery.ts new file mode 100644 index 0000000000000..7e3592e765a0a --- /dev/null +++ b/apps/meteor/app/api/server/helpers/parseJsonQuery.ts @@ -0,0 +1,142 @@ +import { Meteor } from 'meteor/meteor'; +import { EJSON } from 'meteor/ejson'; + +import { hasPermission } from '../../../authorization/server'; +import { isValidQuery } from '../lib/isValidQuery'; +import { clean } from '../lib/cleanQuery'; +import { API } from '../api'; + +const pathAllowConf = { + '/api/v1/users.list': ['$or', '$regex', '$and'], + 'def': ['$or', '$and', '$regex'], +}; + +API.helperMethods.set( + 'parseJsonQuery', + function _parseJsonQuery(this: { + request: { + route: string; + }; + queryParams: { + query?: string; + sort?: string; + fields?: string; + }; + logger: any; + userId: string; + queryFields: string[]; + queryOperations: string[]; + }) { + let sort; + if (this.queryParams.sort) { + try { + sort = JSON.parse(this.queryParams.sort); + Object.entries(sort).forEach(([key, value]) => { + if (value !== 1 && value !== -1) { + throw new Meteor.Error('error-invalid-sort-parameter', `Invalid sort parameter: ${key}`, { + helperMethod: 'parseJsonQuery', + }); + } + }); + } catch (e) { + this.logger.warn(`Invalid sort parameter provided "${this.queryParams.sort}":`, e); + throw new Meteor.Error('error-invalid-sort', `Invalid sort parameter provided: "${this.queryParams.sort}"`, { + helperMethod: 'parseJsonQuery', + }); + } + } + + let fields: Record | undefined; + if (this.queryParams.fields) { + try { + fields = JSON.parse(this.queryParams.fields) as Record; + + Object.entries(fields).forEach(([key, value]) => { + if (value !== 1 && value !== 0) { + throw new Meteor.Error('error-invalid-sort-parameter', `Invalid fields parameter: ${key}`, { + helperMethod: 'parseJsonQuery', + }); + } + }); + } catch (e) { + this.logger.warn(`Invalid fields parameter provided "${this.queryParams.fields}":`, e); + throw new Meteor.Error('error-invalid-fields', `Invalid fields parameter provided: "${this.queryParams.fields}"`, { + helperMethod: 'parseJsonQuery', + }); + } + } + + // Verify the user's selected fields only contains ones which their role allows + if (typeof fields === 'object') { + let nonSelectableFields = Object.keys(API.v1.defaultFieldsToExclude); + if (this.request.route.includes('/v1/users.')) { + const getFields = () => + Object.keys( + hasPermission(this.userId, 'view-full-other-user-info') + ? API.v1.limitedUserFieldsToExcludeIfIsPrivilegedUser + : API.v1.limitedUserFieldsToExclude, + ); + nonSelectableFields = nonSelectableFields.concat(getFields()); + } + + Object.keys(fields).forEach((k) => { + if (nonSelectableFields.includes(k) || nonSelectableFields.includes(k.split(API.v1.fieldSeparator)[0])) { + fields && delete fields[k as keyof typeof fields]; + } + }); + } + + // Limit the fields by default + fields = Object.assign({}, fields, API.v1.defaultFieldsToExclude); + if (this.request.route.includes('/v1/users.')) { + if (hasPermission(this.userId, 'view-full-other-user-info')) { + fields = Object.assign(fields, API.v1.limitedUserFieldsToExcludeIfIsPrivilegedUser); + } else { + fields = Object.assign(fields, API.v1.limitedUserFieldsToExclude); + } + } + + let query: Record = {}; + if (this.queryParams.query) { + this.logger.warn('attribute query is deprecated'); + try { + query = EJSON.parse(this.queryParams.query); + query = clean(query, pathAllowConf.def); + } catch (e) { + this.logger.warn(`Invalid query parameter provided "${this.queryParams.query}":`, e); + throw new Meteor.Error('error-invalid-query', `Invalid query parameter provided: "${this.queryParams.query}"`, { + helperMethod: 'parseJsonQuery', + }); + } + } + + // Verify the user has permission to query the fields they are + if (typeof query === 'object') { + let nonQueryableFields = Object.keys(API.v1.defaultFieldsToExclude); + + if (this.request.route.includes('/v1/users.')) { + if (hasPermission(this.userId, 'view-full-other-user-info')) { + nonQueryableFields = nonQueryableFields.concat(Object.keys(API.v1.limitedUserFieldsToExcludeIfIsPrivilegedUser)); + } else { + nonQueryableFields = nonQueryableFields.concat(Object.keys(API.v1.limitedUserFieldsToExclude)); + } + } + + if (this.queryFields && !isValidQuery(query, this.queryFields || ['*'], this.queryOperations ?? pathAllowConf.def)) { + throw new Meteor.Error('error-invalid-query', isValidQuery.errors.join('\n')); + } + + Object.keys(query).forEach((k) => { + if (nonQueryableFields.includes(k) || nonQueryableFields.includes(k.split(API.v1.fieldSeparator)[0])) { + query && delete query[k]; + } + }); + } + + return { + sort, + fields, + query, + }; + }, +); diff --git a/apps/meteor/app/api/server/lib/cleanQuery.ts b/apps/meteor/app/api/server/lib/cleanQuery.ts index 1fe250e946094..0b4d1d9952ee7 100644 --- a/apps/meteor/app/api/server/lib/cleanQuery.ts +++ b/apps/meteor/app/api/server/lib/cleanQuery.ts @@ -2,7 +2,7 @@ type Query = { [k: string]: any }; const denyList = ['constructor', '__proto__', 'prototype']; -const removeDangerousProps = (v: Query): Query => { +export const removeDangerousProps = (v: Query): Query => { const query = Object.create(null); for (const key in v) { if (v.hasOwnProperty(key) && !denyList.includes(key)) { @@ -12,7 +12,7 @@ const removeDangerousProps = (v: Query): Query => { return query; }; - +/* @deprecated */ export function clean(v: Query, allowList: string[] = []): Query { const typedParam = removeDangerousProps(v); if (v instanceof Object) { diff --git a/apps/meteor/app/api/server/lib/custom-sounds.js b/apps/meteor/app/api/server/lib/custom-sounds.js deleted file mode 100644 index 0579e99f38e7d..0000000000000 --- a/apps/meteor/app/api/server/lib/custom-sounds.js +++ /dev/null @@ -1,20 +0,0 @@ -import { CustomSounds } from '../../../models/server/raw'; - -export async function findCustomSounds({ query = {}, pagination: { offset, count, sort } }) { - const cursor = await CustomSounds.find(query, { - sort: sort || { name: 1 }, - skip: offset, - limit: count, - }); - - const total = await cursor.count(); - - const sounds = await cursor.toArray(); - - return { - sounds, - count: sounds.length, - offset, - total, - }; -} diff --git a/apps/meteor/app/api/server/lib/custom-user-status.js b/apps/meteor/app/api/server/lib/custom-user-status.js deleted file mode 100644 index 6108af3c6a727..0000000000000 --- a/apps/meteor/app/api/server/lib/custom-user-status.js +++ /dev/null @@ -1,20 +0,0 @@ -import { CustomUserStatus } from '../../../models/server/raw'; - -export async function findCustomUserStatus({ query = {}, pagination: { offset, count, sort } }) { - const cursor = await CustomUserStatus.find(query, { - sort: sort || { name: 1 }, - skip: offset, - limit: count, - }); - - const total = await cursor.count(); - - const statuses = await cursor.toArray(); - - return { - statuses, - count: statuses.length, - offset, - total, - }; -} diff --git a/apps/meteor/app/api/server/lib/getUploadFormData.js b/apps/meteor/app/api/server/lib/getUploadFormData.js index bbeaddfea3a02..39b0e7436c133 100644 --- a/apps/meteor/app/api/server/lib/getUploadFormData.js +++ b/apps/meteor/app/api/server/lib/getUploadFormData.js @@ -2,7 +2,7 @@ import busboy from 'busboy'; export const getUploadFormData = async ({ request }) => new Promise((resolve, reject) => { - const bb = busboy({ headers: request.headers }); + const bb = busboy({ headers: request.headers, defParamCharset: 'utf8' }); const fields = {}; diff --git a/apps/meteor/app/api/server/lib/isValidQuery.ts b/apps/meteor/app/api/server/lib/isValidQuery.ts new file mode 100644 index 0000000000000..361e49966f6b0 --- /dev/null +++ b/apps/meteor/app/api/server/lib/isValidQuery.ts @@ -0,0 +1,58 @@ +import { removeDangerousProps } from './cleanQuery'; + +type Query = { [k: string]: any }; + +export const isValidQuery: { + (query: Query, allowedAttributes: string[], allowedOperations: string[]): boolean; + errors: string[]; +} = Object.assign( + (query: Query, allowedAttributes: string[], allowedOperations: string[]): boolean => { + isValidQuery.errors = []; + if (!(query instanceof Object)) { + throw new Error('query must be an object'); + } + + // eslint-disable-next-line @typescript-eslint/no-use-before-define + return verifyQuery(query, allowedAttributes, allowedOperations); + }, + { + errors: [], + }, +); + +export const verifyQuery = (query: Query, allowedAttributes: string[], allowedOperations: string[], parent = ''): boolean => { + return Object.entries(removeDangerousProps(query)).every(([key, value]) => { + const path = parent ? `${parent}.${key}` : key; + if (parent === '' && path.startsWith('$')) { + if (!allowedOperations.includes(path)) { + isValidQuery.errors.push(`Invalid operation: ${path}`); + return false; + } + if (!Array.isArray(value)) { + isValidQuery.errors.push(`Invalid parameter for operation: ${path} : ${value}`); + return false; + } + return value.every((v) => verifyQuery(v, allowedAttributes, allowedOperations)); + } + + if ( + !allowedAttributes.some((allowedAttribute) => { + if (allowedAttribute.endsWith('.*')) { + return path.startsWith(allowedAttribute.replace('.*', '')); + } + if (allowedAttribute.endsWith('*') && !allowedAttribute.endsWith('.*')) { + return true; + } + return path === allowedAttribute; + }) + ) { + isValidQuery.errors.push(`Invalid attribute: ${path}`); + return false; + } + + if (value instanceof Object) { + return verifyQuery(value, allowedAttributes, allowedOperations, path); + } + return true; + }); +}; diff --git a/apps/meteor/app/api/server/v1/custom-sounds.js b/apps/meteor/app/api/server/v1/custom-sounds.js deleted file mode 100644 index 57c5ac9a0c7f9..0000000000000 --- a/apps/meteor/app/api/server/v1/custom-sounds.js +++ /dev/null @@ -1,26 +0,0 @@ -import { API } from '../api'; -import { findCustomSounds } from '../lib/custom-sounds'; - -API.v1.addRoute( - 'custom-sounds.list', - { authRequired: true }, - { - get() { - const { offset, count } = this.getPaginationItems(); - const { sort, query } = this.parseJsonQuery(); - - return API.v1.success( - Promise.await( - findCustomSounds({ - query, - pagination: { - offset, - count, - sort, - }, - }), - ), - ); - }, - }, -); diff --git a/apps/meteor/app/api/server/v1/custom-sounds.ts b/apps/meteor/app/api/server/v1/custom-sounds.ts new file mode 100644 index 0000000000000..f6294c8a5ec13 --- /dev/null +++ b/apps/meteor/app/api/server/v1/custom-sounds.ts @@ -0,0 +1,29 @@ +import { CustomSounds } from '../../../models/server/raw'; +import { API } from '../api'; + +API.v1.addRoute( + 'custom-sounds.list', + { authRequired: true }, + { + async get() { + const { offset, count } = this.getPaginationItems(); + const { sort, query } = this.parseJsonQuery(); + const cursor = await CustomSounds.find(query, { + sort: sort || { name: 1 }, + skip: offset, + limit: count, + }); + + const total = await cursor.count(); + + const sounds = await cursor.toArray(); + + return API.v1.success({ + sounds, + count: sounds.length, + offset, + total, + }); + }, + }, +); diff --git a/apps/meteor/app/api/server/v1/custom-user-status.js b/apps/meteor/app/api/server/v1/custom-user-status.ts similarity index 55% rename from apps/meteor/app/api/server/v1/custom-user-status.js rename to apps/meteor/app/api/server/v1/custom-user-status.ts index b53583a4dc0b6..e86df11a7380e 100644 --- a/apps/meteor/app/api/server/v1/custom-user-status.js +++ b/apps/meteor/app/api/server/v1/custom-user-status.ts @@ -1,30 +1,33 @@ import { Meteor } from 'meteor/meteor'; import { Match, check } from 'meteor/check'; -import { CustomUserStatus } from '../../../models'; +import { CustomUserStatus } from '../../../models/server/raw'; import { API } from '../api'; -import { findCustomUserStatus } from '../lib/custom-user-status'; API.v1.addRoute( 'custom-user-status.list', { authRequired: true }, { - get() { + async get() { const { offset, count } = this.getPaginationItems(); const { sort, query } = this.parseJsonQuery(); - return API.v1.success( - Promise.await( - findCustomUserStatus({ - query, - pagination: { - offset, - count, - sort, - }, - }), - ), - ); + const cursor = await CustomUserStatus.find(query, { + sort: sort || { name: 1 }, + skip: offset, + limit: count, + }); + + const total = await cursor.count(); + + const statuses = await cursor.toArray(); + + return API.v1.success({ + statuses, + count: statuses.length, + offset, + total, + }); }, }, ); @@ -33,7 +36,7 @@ API.v1.addRoute( 'custom-user-status.create', { authRequired: true }, { - post() { + async post() { check(this.bodyParams, { name: String, statusType: Match.Maybe(String), @@ -44,12 +47,15 @@ API.v1.addRoute( statusType: this.bodyParams.statusType, }; - Meteor.runAsUser(this.userId, () => { - Meteor.call('insertOrUpdateUserStatus', userStatusData); - }); + Meteor.call('insertOrUpdateUserStatus', userStatusData); + + const customUserStatus = await CustomUserStatus.findOneByName(userStatusData.name); + if (!customUserStatus) { + throw new Meteor.Error('error-creating-custom-user-status', 'Error creating custom user status'); + } return API.v1.success({ - customUserStatus: CustomUserStatus.findOneByName(userStatusData.name), + customUserStatus, }); }, }, @@ -65,7 +71,7 @@ API.v1.addRoute( return API.v1.failure('The "customUserStatusId" params is required!'); } - Meteor.runAsUser(this.userId, () => Meteor.call('deleteCustomUserStatus', customUserStatusId)); + Meteor.call('deleteCustomUserStatus', customUserStatusId); return API.v1.success(); }, @@ -76,7 +82,7 @@ API.v1.addRoute( 'custom-user-status.update', { authRequired: true }, { - post() { + async post() { check(this.bodyParams, { _id: String, name: String, @@ -89,19 +95,23 @@ API.v1.addRoute( statusType: this.bodyParams.statusType, }; - const customUserStatus = CustomUserStatus.findOneById(userStatusData._id); + const customUserStatusToUpdate = await CustomUserStatus.findOneById(userStatusData._id); // Ensure the message exists - if (!customUserStatus) { + if (!customUserStatusToUpdate) { return API.v1.failure(`No custom user status found with the id of "${userStatusData._id}".`); } - Meteor.runAsUser(this.userId, () => { - Meteor.call('insertOrUpdateUserStatus', userStatusData); - }); + Meteor.call('insertOrUpdateUserStatus', userStatusData); + + const customUserStatus = await CustomUserStatus.findOneById(userStatusData._id); + + if (!customUserStatus) { + throw new Meteor.Error('error-updating-custom-user-status', 'Error updating custom user status'); + } return API.v1.success({ - customUserStatus: CustomUserStatus.findOneById(userStatusData._id), + customUserStatus, }); }, }, diff --git a/apps/meteor/app/api/server/v1/im.ts b/apps/meteor/app/api/server/v1/im.ts index 47e1f0df983b1..76542f1e55827 100644 --- a/apps/meteor/app/api/server/v1/im.ts +++ b/apps/meteor/app/api/server/v1/im.ts @@ -210,22 +210,23 @@ API.v1.addRoute( const ourQuery = query ? { rid: room._id, ...query } : { rid: room._id }; - const files = await Uploads.find(ourQuery, { - sort: sort || { name: 1 }, - skip: offset, - limit: count, - projection: fields, - }) - .map((file): IImFilesObject | (IImFilesObject & { user: Pick }) => { - if (file.userId) { - return this.insertUserObject }>({ - object: { ...file }, - userId: file.userId, - }); - } - return file; - }) - .toArray(); + const files = ( + await Uploads.find(ourQuery, { + sort: sort || { name: 1 }, + skip: offset, + limit: count, + projection: fields, + }).toArray() + ).map((file): IImFilesObject | (IImFilesObject & { user: Pick }) => { + if (file.userId) { + return this.insertUserObject }>({ + object: { ...file }, + userId: file.userId, + }); + } + return file; + }); + const total = await Uploads.find(ourQuery).count(); return API.v1.success({ files, @@ -252,14 +253,15 @@ API.v1.addRoute( const objectParams = { rid: room._id, - latest: latest ? new Date(latest).toISOString() : new Date().toISOString(), - oldest: oldest && new Date(oldest).toISOString(), + latest: latest ? new Date(latest) : new Date(), + oldest: oldest && new Date(oldest), inclusive: inclusive === 'true', offset, count, unreads: unreads === 'true', showThreadMessages: showThreadMessages === 'true', }; + const result = Meteor.call('getChannelHistory', objectParams); if (!result) { diff --git a/apps/meteor/app/api/server/v1/users.js b/apps/meteor/app/api/server/v1/users.js index 9dad4a9811f4f..d57d477a4cf33 100644 --- a/apps/meteor/app/api/server/v1/users.js +++ b/apps/meteor/app/api/server/v1/users.js @@ -27,6 +27,7 @@ import { resetUserE2EEncriptionKey } from '../../../../server/lib/resetUserE2EKe import { setUserStatus } from '../../../../imports/users-presence/server/activeUsers'; import { resetTOTP } from '../../../2fa/server/functions/resetTOTP'; import { Team } from '../../../../server/sdk'; +import { isValidQuery } from '../lib/isValidQuery'; API.v1.addRoute( 'users.create', @@ -269,7 +270,10 @@ API.v1.addRoute( API.v1.addRoute( 'users.list', - { authRequired: true }, + { + authRequired: true, + queryOperations: ['$or', '$and'], + }, { get() { if (!hasPermission(this.userId, 'view-d-room')) { @@ -284,6 +288,23 @@ API.v1.addRoute( const inclusiveFields = getInclusiveFields(nonEmptyFields); + const inclusiveFieldsKeys = Object.keys(inclusiveFields); + + if ( + !isValidQuery( + nonEmptyQuery, + [ + ...inclusiveFieldsKeys, + inclusiveFieldsKeys.includes('emails') && 'emails.address.*', + inclusiveFieldsKeys.includes('username') && 'username.*', + inclusiveFieldsKeys.includes('name') && 'name.*', + ].filter(Boolean), + this.queryOperations, + ) + ) { + throw new Meteor.Error('error-invalid-query', isValidQuery.errors.join('\n')); + } + const actualSort = sort && sort.name ? { nameInsensitive: sort.name, ...sort } : sort || { username: 1 }; const limit = diff --git a/apps/meteor/app/api/server/v1/voip/omnichannel.ts b/apps/meteor/app/api/server/v1/voip/omnichannel.ts index 0a1d614e68554..521da77aa2568 100644 --- a/apps/meteor/app/api/server/v1/voip/omnichannel.ts +++ b/apps/meteor/app/api/server/v1/voip/omnichannel.ts @@ -109,7 +109,7 @@ API.v1.addRoute( } if (!user) { - return API.v1.notFound(); + return API.v1.notFound('User not found or does not have livechat-agent role'); } try { diff --git a/apps/meteor/app/authentication/server/startup/index.js b/apps/meteor/app/authentication/server/startup/index.js index d5c8f2e97efd9..ebcbb4b364edf 100644 --- a/apps/meteor/app/authentication/server/startup/index.js +++ b/apps/meteor/app/authentication/server/startup/index.js @@ -18,6 +18,7 @@ import './settings'; import { getClientAddress } from '../../../../server/lib/getClientAddress'; import { getNewUserRoles } from '../../../../server/services/user/lib/getNewUserRoles'; import { AppEvents, Apps } from '../../../apps/server/orchestrator'; +import { safeGetMeteorUser } from '../../../utils/server/functions/safeGetMeteorUser'; Accounts.config({ forbidClientAccountCreation: true, @@ -213,7 +214,7 @@ Accounts.onCreateUser(function (options, user = {}) { callbacks.run('onCreateUser', options, user); // App IPostUserCreated event hook - Promise.await(Apps.triggerEvent(AppEvents.IPostUserCreated, { user, performedBy: Meteor.user() })); + Promise.await(Apps.triggerEvent(AppEvents.IPostUserCreated, { user, performedBy: safeGetMeteorUser() })); return user; }); diff --git a/apps/meteor/app/autotranslate/client/lib/actionButton.ts b/apps/meteor/app/autotranslate/client/lib/actionButton.ts index 772917208147d..8144d46dae1e6 100644 --- a/apps/meteor/app/autotranslate/client/lib/actionButton.ts +++ b/apps/meteor/app/autotranslate/client/lib/actionButton.ts @@ -6,7 +6,7 @@ import { AutoTranslate } from './autotranslate'; import { settings } from '../../../settings/client'; import { hasAtLeastOnePermission } from '../../../authorization/client'; import { MessageAction } from '../../../ui-utils/client/lib/MessageAction'; -import { messageArgs } from '../../../ui-utils/client/lib/messageArgs'; +import { messageArgs } from '../../../../client/lib/utils/messageArgs'; import { Messages } from '../../../models/client'; Meteor.startup(() => { diff --git a/apps/meteor/app/custom-oauth/client/custom_oauth_client.js b/apps/meteor/app/custom-oauth/client/custom_oauth_client.js index 772aa25f90062..efb73d898dd2b 100644 --- a/apps/meteor/app/custom-oauth/client/custom_oauth_client.js +++ b/apps/meteor/app/custom-oauth/client/custom_oauth_client.js @@ -7,7 +7,7 @@ import { ServiceConfiguration } from 'meteor/service-configuration'; import { OAuth } from 'meteor/oauth'; import './swapSessionStorage'; -import { isURL } from '../../utils/lib/isURL'; +import { isURL } from '../../../lib/utils/isURL'; // Request custom OAuth credentials for the user // @param options {optional} diff --git a/apps/meteor/app/custom-oauth/server/custom_oauth_server.js b/apps/meteor/app/custom-oauth/server/custom_oauth_server.js index 3b9844e07547c..cb0e1ee0d3f54 100644 --- a/apps/meteor/app/custom-oauth/server/custom_oauth_server.js +++ b/apps/meteor/app/custom-oauth/server/custom_oauth_server.js @@ -9,7 +9,7 @@ import _ from 'underscore'; import { normalizers, fromTemplate, renameInvalidProperties } from './transform_helpers'; import { Logger } from '../../logger'; import { Users } from '../../models'; -import { isURL } from '../../utils/lib/isURL'; +import { isURL } from '../../../lib/utils/isURL'; import { registerAccessTokenService } from '../../lib/server/oauth/oauth'; import { callbacks } from '../../../lib/callbacks'; diff --git a/apps/meteor/app/discussion/client/createDiscussionMessageAction.ts b/apps/meteor/app/discussion/client/createDiscussionMessageAction.ts index 6d7bac1317e09..0c78294b28ceb 100644 --- a/apps/meteor/app/discussion/client/createDiscussionMessageAction.ts +++ b/apps/meteor/app/discussion/client/createDiscussionMessageAction.ts @@ -4,7 +4,7 @@ import { Tracker } from 'meteor/tracker'; import { settings } from '../../settings/client'; import { hasPermission } from '../../authorization/client'; import { MessageAction } from '../../ui-utils/client'; -import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; +import { messageArgs } from '../../../client/lib/utils/messageArgs'; import { imperativeModal } from '../../../client/lib/imperativeModal'; import CreateDiscussion from '../../../client/components/CreateDiscussion/CreateDiscussion'; import { roomCoordinator } from '../../../client/lib/rooms/roomCoordinator'; diff --git a/apps/meteor/app/federation-v2/server/matrix-client/user.ts b/apps/meteor/app/federation-v2/server/matrix-client/user.ts index 21b705db044ba..9e6ba092e9b4a 100644 --- a/apps/meteor/app/federation-v2/server/matrix-client/user.ts +++ b/apps/meteor/app/federation-v2/server/matrix-client/user.ts @@ -1,5 +1,6 @@ import type { MatrixProfileInfo } from '@rocket.chat/forked-matrix-bot-sdk'; import { IUser } from '@rocket.chat/core-typings'; +import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import { matrixBridge } from '../bridge'; import { MatrixBridgedUser, MatrixBridgedRoom, Users } from '../../../models/server'; @@ -7,6 +8,7 @@ import { addUserToRoom } from '../../../lib/server/functions'; import { matrixClient } from '.'; import { dataInterface } from '../data-interface'; import { settings } from '../../../settings/server'; +import { api } from '../../../../server/sdk/api'; interface ICreateUserResult { uid: string; @@ -86,7 +88,6 @@ export const invite = async (inviterId: string, roomId: string, invitedId: strin } console.log(`[${inviterId}-${invitedId}-${roomId}] Inviting the user to the room...`); - // Invite && Auto-join if the user is Rocket.Chat controlled if (!invitedUserIsRemote) { // Invite the user to the room @@ -97,7 +98,18 @@ export const invite = async (inviterId: string, roomId: string, invitedId: strin await matrixBridge.getInstance().getIntent(invitedUserMatrixId).join(matrixRoomId); } else if (room.t !== 'd') { // Invite the user to the room but don't wait as this is dependent on the user accepting the invite because we don't control this user - matrixBridge.getInstance().getIntent(bridgedInviterUser.mui).invite(matrixRoomId, invitedUserMatrixId); + matrixBridge + .getInstance() + .getIntent(bridgedInviterUser.mui) + .invite(matrixRoomId, invitedUserMatrixId) + .catch(() => { + api.broadcast('notify.ephemeralMessage', inviterId, roomId, { + msg: TAPi18n.__('Federation_Matrix_only_owners_can_invite_users', { + postProcess: 'sprintf', + lng: settings.get('Language') || 'en', + }), + }); + }); } // Add the matrix user to the invited room diff --git a/apps/meteor/app/federation-v2/server/settings.ts b/apps/meteor/app/federation-v2/server/settings.ts index 3be8a336af905..f10264a3ea37b 100644 --- a/apps/meteor/app/federation-v2/server/settings.ts +++ b/apps/meteor/app/federation-v2/server/settings.ts @@ -44,12 +44,14 @@ settingsRegistry.addGroup('Federation', function () { type: 'string', i18nLabel: 'Federation_Matrix_homeserver_url', i18nDescription: 'Federation_Matrix_homeserver_url_desc', + alert: 'Federation_Matrix_homeserver_url_alert', }); this.add('Federation_Matrix_homeserver_domain', 'local.rocket.chat', { type: 'string', i18nLabel: 'Federation_Matrix_homeserver_domain', i18nDescription: 'Federation_Matrix_homeserver_domain_desc', + alert: 'Federation_Matrix_homeserver_domain_alert', }); this.add('Federation_Matrix_bridge_url', 'http://host.docker.internal:3300', { diff --git a/apps/meteor/app/integrations/server/api/api.js b/apps/meteor/app/integrations/server/api/api.js index dd5d9967467b1..57a4c2b132bde 100644 --- a/apps/meteor/app/integrations/server/api/api.js +++ b/apps/meteor/app/integrations/server/api/api.js @@ -1,5 +1,4 @@ -import vm from 'vm'; - +import { VM, VMScript } from 'vm2'; import { Meteor } from 'meteor/meteor'; import { HTTP } from 'meteor/http'; import { Random } from 'meteor/random'; @@ -71,11 +70,16 @@ function getIntegrationScript(integration) { incomingLogger.info({ msg: 'Will evaluate script of Trigger', name: integration.name }); incomingLogger.debug(script); - const vmScript = vm.createScript(script, 'script.js'); - vmScript.runInNewContext(sandbox); - if (sandbox.Script) { + const vmScript = new VMScript(`${script}; Script;`, 'script.js'); + const vm = new VM({ + sandbox, + }); + + const ScriptClass = vm.run(vmScript); + + if (ScriptClass) { compiledScripts[integration._id] = { - script: new sandbox.Script(), + script: new ScriptClass(), store, _updatedAt: integration._updatedAt, }; @@ -92,10 +96,8 @@ function getIntegrationScript(integration) { throw API.v1.failure('error-evaluating-script'); } - if (!sandbox.Script) { - incomingLogger.error({ msg: 'Class "Script" not in Trigger', name: integration.name }); - throw API.v1.failure('class-script-not-found'); - } + incomingLogger.error({ msg: 'Class "Script" not in Trigger', name: integration.name }); + throw API.v1.failure('class-script-not-found'); } function createIntegration(options, user) { @@ -205,9 +207,12 @@ function executeIntegrationRest() { sandbox.script = script; sandbox.request = request; - const result = Future.fromPromise( - vm.runInNewContext( - ` + const vm = new VM({ + timeout: 3000, + sandbox, + }); + + const scriptResult = vm.run(` new Promise((resolve, reject) => { Fiber(() => { scriptTimeout(reject); @@ -218,13 +223,9 @@ function executeIntegrationRest() { } }).run(); }).catch((error) => { throw new Error(error); }); - `, - sandbox, - { - timeout: 3000, - }, - ), - ).wait(); + `); + + const result = Future.fromPromise(scriptResult).wait(); if (!result) { incomingLogger.debug({ diff --git a/apps/meteor/app/integrations/server/lib/triggerHandler.js b/apps/meteor/app/integrations/server/lib/triggerHandler.js index 576c63071413d..bc78c8595b83e 100644 --- a/apps/meteor/app/integrations/server/lib/triggerHandler.js +++ b/apps/meteor/app/integrations/server/lib/triggerHandler.js @@ -1,5 +1,4 @@ -import vm from 'vm'; - +import { VM, VMScript } from 'vm2'; import { Meteor } from 'meteor/meteor'; import { Random } from 'meteor/random'; import { HTTP } from 'meteor/http'; @@ -19,7 +18,6 @@ import { fetch } from '../../../../server/lib/http/fetch'; export class RocketChatIntegrationHandler { constructor() { - this.vm = vm; this.successResults = [200, 201, 202]; this.compiledScripts = {}; this.triggers = {}; @@ -275,18 +273,20 @@ export class RocketChatIntegrationHandler { const script = integration.scriptCompiled; const { store, sandbox } = this.buildSandbox(); - let vmScript; try { outgoingLogger.info({ msg: 'Will evaluate script of Trigger', name: integration.name }); outgoingLogger.debug(script); - vmScript = this.vm.createScript(script, 'script.js'); + const vmScript = new VMScript(`${script}; Script;`, 'script.js'); + const vm = new VM({ + sandbox, + }); - vmScript.runInNewContext(sandbox); + const ScriptClass = vm.run(vmScript); - if (sandbox.Script) { + if (ScriptClass) { this.compiledScripts[integration._id] = { - script: new sandbox.Script(), + script: new ScriptClass(), store, _updatedAt: integration._updatedAt, }; @@ -303,10 +303,8 @@ export class RocketChatIntegrationHandler { throw new Meteor.Error('error-evaluating-script'); } - if (!sandbox.Script) { - outgoingLogger.error(`Class "Script" not in Trigger ${integration.name}:`); - throw new Meteor.Error('class-script-not-found'); - } + outgoingLogger.error(`Class "Script" not in Trigger ${integration.name}:`); + throw new Meteor.Error('class-script-not-found'); } hasScriptAndMethod(integration, method) { @@ -352,9 +350,12 @@ export class RocketChatIntegrationHandler { this.updateHistory({ historyId, step: `execute-script-before-running-${method}` }); - const result = Future.fromPromise( - this.vm.runInNewContext( - ` + const vm = new VM({ + timeout: 3000, + sandbox, + }); + + const scriptResult = vm.run(` new Promise((resolve, reject) => { Fiber(() => { scriptTimeout(reject); @@ -365,13 +366,9 @@ export class RocketChatIntegrationHandler { } }).run(); }).catch((error) => { throw new Error(error); }); - `, - sandbox, - { - timeout: 3000, - }, - ), - ).wait(); + `); + + const result = Future.fromPromise(scriptResult).wait(); outgoingLogger.debug({ msg: `Script method "${method}" result of the Integration "${integration.name}" is:`, diff --git a/apps/meteor/app/lib/server/functions/saveUser.js b/apps/meteor/app/lib/server/functions/saveUser.js index 5b5b1853060de..771f22d4d5364 100644 --- a/apps/meteor/app/lib/server/functions/saveUser.js +++ b/apps/meteor/app/lib/server/functions/saveUser.js @@ -15,6 +15,7 @@ import { checkEmailAvailability, checkUsernameAvailability, setUserAvatar, setEm import { Users } from '../../../models/server'; import { callbacks } from '../../../../lib/callbacks'; import { AppEvents, Apps } from '../../../apps/server/orchestrator'; +import { safeGetMeteorUser } from '../../../utils/server/functions/safeGetMeteorUser'; const MAX_BIO_LENGTH = 260; const MAX_NICKNAME_LENGTH = 120; @@ -420,7 +421,7 @@ export const saveUser = function (userId, userData) { Apps.triggerEvent(AppEvents.IPostUserUpdated, { user: userUpdated, previousUser: oldUserData, - performedBy: Meteor.user(), + performedBy: safeGetMeteorUser(), }), ); diff --git a/apps/meteor/app/lib/server/functions/sendMessage.js b/apps/meteor/app/lib/server/functions/sendMessage.js index cb389e13a66ca..9c906439ab526 100644 --- a/apps/meteor/app/lib/server/functions/sendMessage.js +++ b/apps/meteor/app/lib/server/functions/sendMessage.js @@ -4,11 +4,12 @@ import { settings } from '../../../settings'; import { callbacks } from '../../../../lib/callbacks'; import { Messages } from '../../../models'; import { Apps } from '../../../apps/server'; -import { isURL, isRelativeURL } from '../../../utils/lib/isURL'; +import { isURL } from '../../../../lib/utils/isURL'; import { FileUpload } from '../../../file-upload/server'; import { hasPermission } from '../../../authorization/server'; import { SystemLogger } from '../../../../server/lib/logger/system'; import { parseUrlsInMessage } from './parseUrlsInMessage'; +import { isRelativeURL } from '../../../../lib/utils/isRelativeURL'; /** * IMPORTANT diff --git a/apps/meteor/app/livechat/lib/Assets.js b/apps/meteor/app/livechat/lib/Assets.js deleted file mode 100644 index 32546c6003be7..0000000000000 --- a/apps/meteor/app/livechat/lib/Assets.js +++ /dev/null @@ -1,2 +0,0 @@ -export const addServerUrlToIndex = (file) => - file.replace('', ``); diff --git a/apps/meteor/app/livechat/lib/Assets.ts b/apps/meteor/app/livechat/lib/Assets.ts new file mode 100644 index 0000000000000..c812cd22a9b37 --- /dev/null +++ b/apps/meteor/app/livechat/lib/Assets.ts @@ -0,0 +1,4 @@ +export const addServerUrlToIndex = (file: string): string => { + const rootUrl = (global as any).__meteor_runtime_config__.ROOT_URL.replace(/\/$/, ''); + return file.replace('', ``); +}; diff --git a/apps/meteor/app/livechat/lib/messageTypes.js b/apps/meteor/app/livechat/lib/messageTypes.ts similarity index 65% rename from apps/meteor/app/livechat/lib/messageTypes.js rename to apps/meteor/app/livechat/lib/messageTypes.ts index 62bf6c8aeaf29..096534d83b9dc 100644 --- a/apps/meteor/app/livechat/lib/messageTypes.js +++ b/apps/meteor/app/livechat/lib/messageTypes.ts @@ -2,19 +2,19 @@ import formatDistance from 'date-fns/formatDistance'; import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import moment from 'moment'; import { escapeHTML } from '@rocket.chat/string-helpers'; +import { IOmnichannelSystemMessage } from '@rocket.chat/core-typings'; -import { MessageTypes } from '../../ui-utils'; +import { MessageTypes } from '../../ui-utils/lib/MessageTypes'; MessageTypes.registerType({ id: 'livechat_navigation_history', system: true, message: 'New_visitor_navigation', - data(message) { - if (!message.navigation || !message.navigation.page) { - return; - } + data(message: IOmnichannelSystemMessage) { return { - history: `${(message.navigation.page.title ? `${message.navigation.page.title} - ` : '') + message.navigation.page.location.href}`, + history: message.navigation + ? `${(message.navigation.page.title ? `${message.navigation.page.title} - ` : '') + message.navigation.page.location.href}` + : '', }; }, }); @@ -23,9 +23,11 @@ MessageTypes.registerType({ id: 'livechat_transfer_history', system: true, message: 'New_chat_transfer', - data(message) { + data(message: IOmnichannelSystemMessage) { if (!message.transferData) { - return; + return { + transfer: '', + }; } const { comment } = message.transferData; @@ -33,20 +35,19 @@ MessageTypes.registerType({ const from = message.transferData.transferredBy && (message.transferData.transferredBy.name || message.transferData.transferredBy.username); const transferTypes = { - agent: () => + agent: (): string => TAPi18n.__(`Livechat_transfer_to_agent${commentLabel}`, { from, - to: - message.transferData.transferredTo && (message.transferData.transferredTo.name || message.transferData.transferredTo.username), + to: message?.transferData?.transferredTo?.name || message?.transferData?.transferredTo?.username || '', ...(comment && { comment }), }), - department: () => + department: (): string => TAPi18n.__(`Livechat_transfer_to_department${commentLabel}`, { from, - to: message.transferData.nextDepartment && message.transferData.nextDepartment.name, + to: message?.transferData?.nextDepartment?.name || '', ...(comment && { comment }), }), - queue: () => + queue: (): string => TAPi18n.__('Livechat_transfer_return_to_the_queue', { from, }), @@ -61,21 +62,23 @@ MessageTypes.registerType({ id: 'livechat_transcript_history', system: true, message: 'Livechat_chat_transcript_sent', - data(message) { + data(message: IOmnichannelSystemMessage) { if (!message.requestData) { - return; + return { + transcript: '', + }; } - const { requestData: { type, visitor = {}, user = {} } = {} } = message; + const { requestData: { type, visitor, user } = { type: 'user' } } = message; const requestTypes = { - visitor: () => + visitor: (): string => TAPi18n.__('Livechat_visitor_transcript_request', { - guest: visitor.name || visitor.username, + guest: visitor?.name || visitor?.username || '', }), - user: () => + user: (): string => TAPi18n.__('Livechat_user_sent_chat_transcript_to_visitor', { - agent: user.name || user.username, - guest: visitor.name || visitor.username, + agent: user?.name || user?.username || '', + guest: visitor?.name || visitor?.username || '', }), }; @@ -105,15 +108,16 @@ MessageTypes.registerType({ } return escapeHTML(message.msg); }, + message: 'room_changed_privacy', }); MessageTypes.registerType({ id: 'omnichannel_placed_chat_on_hold', system: true, message: 'Omnichannel_placed_chat_on_hold', - data(message) { + data(message: IOmnichannelSystemMessage) { return { - comment: message.comment, + comment: message.comment ? message.comment : 'No comment provided', }; }, }); @@ -122,9 +126,9 @@ MessageTypes.registerType({ id: 'omnichannel_on_hold_chat_resumed', system: true, message: 'Omnichannel_on_hold_chat_resumed', - data(message) { + data(message: IOmnichannelSystemMessage) { return { - comment: message.comment, + comment: message.comment ? message.comment : 'No comment provided', }; }, }); diff --git a/apps/meteor/app/livechat/lib/stream/constants.js b/apps/meteor/app/livechat/lib/stream/constants.ts similarity index 100% rename from apps/meteor/app/livechat/lib/stream/constants.js rename to apps/meteor/app/livechat/lib/stream/constants.ts diff --git a/apps/meteor/app/mentions-flextab/client/actionButton.ts b/apps/meteor/app/mentions-flextab/client/actionButton.ts index c9f45e4920a83..11168a8cae7a1 100644 --- a/apps/meteor/app/mentions-flextab/client/actionButton.ts +++ b/apps/meteor/app/mentions-flextab/client/actionButton.ts @@ -3,7 +3,7 @@ import { Template } from 'meteor/templating'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { MessageAction, RoomHistoryManager } from '../../ui-utils/client'; -import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; +import { messageArgs } from '../../../client/lib/utils/messageArgs'; import { Rooms } from '../../models/client'; Meteor.startup(function () { diff --git a/apps/meteor/app/message-mark-as-unread/client/actionButton.ts b/apps/meteor/app/message-mark-as-unread/client/actionButton.ts index d9c4326432654..bccd985749db1 100644 --- a/apps/meteor/app/message-mark-as-unread/client/actionButton.ts +++ b/apps/meteor/app/message-mark-as-unread/client/actionButton.ts @@ -2,7 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { RoomManager, MessageAction } from '../../ui-utils/client'; -import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; +import { messageArgs } from '../../../client/lib/utils/messageArgs'; import { ChatSubscription } from '../../models/client'; import { handleError } from '../../../client/lib/utils/handleError'; import { roomCoordinator } from '../../../client/lib/rooms/roomCoordinator'; diff --git a/apps/meteor/app/message-pin/client/actionButton.ts b/apps/meteor/app/message-pin/client/actionButton.ts index 7ea4d1664e465..e69f6c272d30c 100644 --- a/apps/meteor/app/message-pin/client/actionButton.ts +++ b/apps/meteor/app/message-pin/client/actionButton.ts @@ -4,7 +4,7 @@ import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import { FlowRouter } from 'meteor/kadira:flow-router'; import { RoomHistoryManager, MessageAction } from '../../ui-utils/client'; -import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; +import { messageArgs } from '../../../client/lib/utils/messageArgs'; import { settings } from '../../settings/client'; import { hasAtLeastOnePermission } from '../../authorization/client'; import { Rooms } from '../../models/client'; diff --git a/apps/meteor/app/message-star/client/actionButton.ts b/apps/meteor/app/message-star/client/actionButton.ts index aa3597bafec9c..51c21c4ee77c7 100644 --- a/apps/meteor/app/message-star/client/actionButton.ts +++ b/apps/meteor/app/message-star/client/actionButton.ts @@ -5,7 +5,7 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { settings } from '../../settings/client'; import { RoomHistoryManager, MessageAction } from '../../ui-utils/client'; -import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; +import { messageArgs } from '../../../client/lib/utils/messageArgs'; import { Rooms } from '../../models/client'; import { handleError } from '../../../client/lib/utils/handleError'; import { dispatchToastMessage } from '../../../client/lib/toast'; diff --git a/apps/meteor/app/models/server/raw/CustomUserStatus.ts b/apps/meteor/app/models/server/raw/CustomUserStatus.ts index be94faa2833a8..d23dc8fd5a138 100644 --- a/apps/meteor/app/models/server/raw/CustomUserStatus.ts +++ b/apps/meteor/app/models/server/raw/CustomUserStatus.ts @@ -9,8 +9,11 @@ export class CustomUserStatusRaw extends BaseRaw { } // find one by name - async findOneByName(name: string, options: WithoutProjection>): Promise { - return this.findOne({ name }, options); + + async findOneByName(name: string, options?: undefined): Promise; + + async findOneByName(name: string, options?: WithoutProjection>): Promise { + return options ? this.findOne({ name }, options) : this.findOne({ name }); } // find diff --git a/apps/meteor/app/models/server/raw/Users.js b/apps/meteor/app/models/server/raw/Users.js index 48ab66ec19583..7630ad813d087 100644 --- a/apps/meteor/app/models/server/raw/Users.js +++ b/apps/meteor/app/models/server/raw/Users.js @@ -998,7 +998,7 @@ export class UsersRaw extends BaseRaw { getAvailableAgentsIncludingExt(includeExt, text, options) { const query = { - roles: { $in: ['livechat-agent', 'livechat-manager', 'livechat-monitor'] }, + roles: { $in: ['livechat-agent'] }, $and: [ ...(text && text.trim() ? [{ $or: [{ username: new RegExp(escapeRegExp(text), 'i') }, { name: new RegExp(escapeRegExp(text), 'i') }] }] diff --git a/apps/meteor/app/oembed/server/server.js b/apps/meteor/app/oembed/server/server.js index 84f25366a558b..84d5f3eef3e7e 100644 --- a/apps/meteor/app/oembed/server/server.js +++ b/apps/meteor/app/oembed/server/server.js @@ -12,7 +12,7 @@ import { Messages } from '../../models/server'; import { OEmbedCache } from '../../models/server/raw'; import { callbacks } from '../../../lib/callbacks'; import { settings } from '../../settings/server'; -import { isURL } from '../../utils/lib/isURL'; +import { isURL } from '../../../lib/utils/isURL'; import { SystemLogger } from '../../../server/lib/logger/system'; import { Info } from '../../utils/server'; import { fetch } from '../../../server/lib/http/fetch'; diff --git a/apps/meteor/app/reactions/client/init.js b/apps/meteor/app/reactions/client/init.js index 15f77ef642de2..bc83ed83e05c7 100644 --- a/apps/meteor/app/reactions/client/init.js +++ b/apps/meteor/app/reactions/client/init.js @@ -3,7 +3,7 @@ import { Blaze } from 'meteor/blaze'; import { Rooms, Subscriptions } from '../../models'; import { MessageAction } from '../../ui-utils'; -import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; +import { messageArgs } from '../../../client/lib/utils/messageArgs'; import { EmojiPicker } from '../../emoji'; import { tooltip } from '../../ui/client/components/tooltip'; import { roomCoordinator } from '../../../client/lib/rooms/roomCoordinator'; diff --git a/apps/meteor/app/reactions/server/setReaction.js b/apps/meteor/app/reactions/server/setReaction.js index 336747f1af4a3..f477519e6d03f 100644 --- a/apps/meteor/app/reactions/server/setReaction.js +++ b/apps/meteor/app/reactions/server/setReaction.js @@ -94,7 +94,7 @@ async function setReaction(room, user, message, reaction, shouldReact) { isReacted = true; } - Promise.await(Apps.triggerEvent(AppEvents.IPostMessageReacted, message, Meteor.user(), reaction, isReacted)); + Promise.await(Apps.triggerEvent(AppEvents.IPostMessageReacted, message, user, reaction, isReacted)); msgStream.emit(message.rid, message); } diff --git a/apps/meteor/app/search/client/provider/result.js b/apps/meteor/app/search/client/provider/result.js index 5c6eaf62be50e..ec0ca30f97841 100644 --- a/apps/meteor/app/search/client/provider/result.js +++ b/apps/meteor/app/search/client/provider/result.js @@ -8,7 +8,7 @@ import _ from 'underscore'; import { messageContext } from '../../../ui-utils/client/lib/messageContext'; import { MessageAction, RoomHistoryManager } from '../../../ui-utils'; -import { messageArgs } from '../../../ui-utils/client/lib/messageArgs'; +import { messageArgs } from '../../../../client/lib/utils/messageArgs'; import { Rooms } from '../../../models/client'; import { getCommonRoomEvents } from '../../../ui/client/views/app/lib/getCommonRoomEvents'; import { goToRoomById } from '../../../../client/lib/utils/goToRoomById'; diff --git a/apps/meteor/app/threads/client/messageAction/replyInThread.ts b/apps/meteor/app/threads/client/messageAction/replyInThread.ts index 1c939110bbd3f..82b166310c273 100644 --- a/apps/meteor/app/threads/client/messageAction/replyInThread.ts +++ b/apps/meteor/app/threads/client/messageAction/replyInThread.ts @@ -4,7 +4,7 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { settings } from '../../../settings/client'; import { MessageAction } from '../../../ui-utils/client'; -import { messageArgs } from '../../../ui-utils/client/lib/messageArgs'; +import { messageArgs } from '../../../../client/lib/utils/messageArgs'; import { roomCoordinator } from '../../../../client/lib/rooms/roomCoordinator'; Meteor.startup(function () { diff --git a/apps/meteor/app/ui-message/client/actionButtons/messageAction.ts b/apps/meteor/app/ui-message/client/actionButtons/messageAction.ts index 2237ce94ebdee..992a47b348934 100644 --- a/apps/meteor/app/ui-message/client/actionButtons/messageAction.ts +++ b/apps/meteor/app/ui-message/client/actionButtons/messageAction.ts @@ -1,7 +1,8 @@ import { IUIActionButton } from '@rocket.chat/apps-engine/definition/ui'; import { Utilities } from '../../../apps/lib/misc/Utilities'; -import { MessageAction, messageArgs } from '../../../ui-utils/client'; +import { MessageAction } from '../../../ui-utils/client'; +import { messageArgs } from '../../../../client/lib/utils/messageArgs'; import { t } from '../../../utils/client'; import { triggerActionButtonAction } from '../ActionManager'; import { applyButtonFilters } from './lib/applyButtonFilters'; diff --git a/apps/meteor/app/ui-utils/client/index.js b/apps/meteor/app/ui-utils/client/index.js index eaf3768818f2b..db8f01451f68f 100644 --- a/apps/meteor/app/ui-utils/client/index.js +++ b/apps/meteor/app/ui-utils/client/index.js @@ -18,4 +18,3 @@ export { MessageTypes, MessageType } from '../lib/MessageTypes'; export { Message } from '../lib/Message'; export { openRoom } from './lib/openRoom'; export * from './lib/collapseArrow'; -export * from './lib/messageArgs'; diff --git a/apps/meteor/app/ui-utils/client/lib/RoomManager.js b/apps/meteor/app/ui-utils/client/lib/RoomManager.js index 0f9ae25dc45ac..28048fc7a84f5 100644 --- a/apps/meteor/app/ui-utils/client/lib/RoomManager.js +++ b/apps/meteor/app/ui-utils/client/lib/RoomManager.js @@ -14,7 +14,6 @@ import { Notifications } from '../../../notifications'; import { CachedChatRoom, ChatMessage, ChatSubscription, CachedChatSubscription, ChatRoom } from '../../../models'; import { CachedCollectionManager } from '../../../ui-cached-collection'; import { getConfig } from '../../../../client/lib/utils/getConfig'; -import { ROOM_DATA_STREAM } from '../../../utils/stream/constants'; import { callWithErrorHandling } from '../../../../client/lib/utils/callWithErrorHandling'; import { RoomManager as NewRoomManager } from '../../../../client/lib/RoomManager'; import { roomCoordinator } from '../../../../client/lib/rooms/roomCoordinator'; @@ -44,7 +43,7 @@ const onDeleteMessageBulkStream = ({ rid, ts, excludePinned, ignoreDiscussion, u export const RoomManager = new (function () { const openedRooms = {}; const msgStream = new Meteor.Streamer('room-messages'); - const roomStream = new Meteor.Streamer(ROOM_DATA_STREAM); + const roomStream = new Meteor.Streamer('room-data'); const onlineUsers = new ReactiveVar({}); const Dep = new Tracker.Dependency(); diff --git a/apps/meteor/app/ui-utils/client/lib/menu.js b/apps/meteor/app/ui-utils/client/lib/menu.js index 3969c261f3daf..af3e1b6368b26 100644 --- a/apps/meteor/app/ui-utils/client/lib/menu.js +++ b/apps/meteor/app/ui-utils/client/lib/menu.js @@ -2,7 +2,7 @@ import { Session } from 'meteor/session'; import { Meteor } from 'meteor/meteor'; import { Emitter } from '@rocket.chat/emitter'; -import { isRtl } from '../../../utils'; +import { isRTLScriptLanguage } from '../../../../client/lib/utils/isRTLScriptLanguage'; const sideNavW = 280; const map = (x, in_min, in_max, out_min, out_max) => ((x - in_min) * (out_max - out_min)) / (in_max - in_min) + out_min; @@ -16,7 +16,7 @@ export const menu = new (class extends Emitter { } get isRtl() { - return isRtl(Meteor._localStorage.getItem('userLanguage')); + return isRTLScriptLanguage(Meteor._localStorage.getItem('userLanguage')); } translate(diff, width = sideNavW) { diff --git a/apps/meteor/app/ui-utils/client/lib/messageActionDefault.ts b/apps/meteor/app/ui-utils/client/lib/messageActionDefault.ts index fbdf4a9ec5669..bfae100522403 100644 --- a/apps/meteor/app/ui-utils/client/lib/messageActionDefault.ts +++ b/apps/meteor/app/ui-utils/client/lib/messageActionDefault.ts @@ -5,7 +5,7 @@ import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import { Session } from 'meteor/session'; import { IMessage } from '@rocket.chat/core-typings'; -import { messageArgs } from './messageArgs'; +import { messageArgs } from '../../../../client/lib/utils/messageArgs'; import { roomCoordinator } from '../../../../client/lib/rooms/roomCoordinator'; import { Rooms, Subscriptions } from '../../../models/client'; import { hasAtLeastOnePermission, hasPermission } from '../../../authorization/client'; diff --git a/apps/meteor/app/ui-utils/client/lib/messageContext.js b/apps/meteor/app/ui-utils/client/lib/messageContext.js index 7a1d4b73a0e9c..878199c11de1b 100644 --- a/apps/meteor/app/ui-utils/client/lib/messageContext.js +++ b/apps/meteor/app/ui-utils/client/lib/messageContext.js @@ -28,7 +28,7 @@ const fields = { export function messageContext({ rid } = Template.instance()) { const uid = Meteor.userId(); const user = Users.findOne({ _id: uid }, { fields }) || {}; - // const instance = Template.instance(); + const instance = Template.instance(); const openThread = (e) => { const { rid, mid, tmid } = e.currentTarget.dataset; const room = Rooms.findOne({ _id: rid }); @@ -55,7 +55,7 @@ export function messageContext({ rid } = Template.instance()) { value: msg._id, message: msg, }) - : (msg, actionlink) => actionLinks.run(actionlink, msg); + : (msg, actionlink) => actionLinks.run(actionlink, msg, instance); const openDiscussion = (e) => { e.preventDefault(); diff --git a/apps/meteor/app/ui-utils/client/lib/popover.js b/apps/meteor/app/ui-utils/client/lib/popover.js index 7a387095dcc54..ac588786fa747 100644 --- a/apps/meteor/app/ui-utils/client/lib/popover.js +++ b/apps/meteor/app/ui-utils/client/lib/popover.js @@ -2,10 +2,11 @@ import './popover.html'; import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; import _ from 'underscore'; +import { Meteor } from 'meteor/meteor'; import { messageBox } from './messageBox'; import { MessageAction } from './MessageAction'; -import { isRtl } from '../../../utils/client'; +import { isRTLScriptLanguage } from '../../../../client/lib/utils/isRTLScriptLanguage'; export const popover = { renderedPopover: null, @@ -55,7 +56,7 @@ Template.popover.onRendered(function () { const direction = typeof this.data.direction === 'function' ? this.data.direction() : this.data.direction; const verticalDirection = /top/.test(direction) ? 'top' : 'bottom'; - const rtlDirection = isRtl() ^ /inverted/.test(direction) ? 'left' : 'right'; + const rtlDirection = isRTLScriptLanguage(Meteor._localStorage.getItem('userLanguage')) ^ /inverted/.test(direction) ? 'left' : 'right'; const rightDirection = /right/.test(direction) ? 'right' : rtlDirection; const horizontalDirection = /left/.test(direction) ? 'left' : rightDirection; diff --git a/apps/meteor/app/ui/client/views/app/lib/getCommonRoomEvents.js b/apps/meteor/app/ui/client/views/app/lib/getCommonRoomEvents.js index cc414abde456e..2e1262589c60f 100644 --- a/apps/meteor/app/ui/client/views/app/lib/getCommonRoomEvents.js +++ b/apps/meteor/app/ui/client/views/app/lib/getCommonRoomEvents.js @@ -6,9 +6,9 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { popover, MessageAction } from '../../../../../ui-utils/client'; import { addMessageToList } from '../../../../../ui-utils/client/lib/MessageAction'; import { callWithErrorHandling } from '../../../../../../client/lib/utils/callWithErrorHandling'; -import { isURL } from '../../../../../utils/lib/isURL'; +import { isURL } from '../../../../../../lib/utils/isURL'; import { openUserCard } from '../../../lib/UserCard'; -import { messageArgs } from '../../../../../ui-utils/client/lib/messageArgs'; +import { messageArgs } from '../../../../../../client/lib/utils/messageArgs'; import { ChatMessage, Rooms, Messages } from '../../../../../models'; import { t } from '../../../../../utils/client'; import { chatMessages } from '../room'; diff --git a/apps/meteor/app/ui/client/views/app/room.js b/apps/meteor/app/ui/client/views/app/room.js index 7087e7a148e28..93314819f0c7a 100644 --- a/apps/meteor/app/ui/client/views/app/room.js +++ b/apps/meteor/app/ui/client/views/app/room.js @@ -15,7 +15,7 @@ import { WebRTC } from '../../../../webrtc/client'; import { ChatMessage, RoomRoles, Users, Subscriptions, Rooms } from '../../../../models'; import { RoomHistoryManager, RoomManager, readMessage } from '../../../../ui-utils/client'; import { messageContext } from '../../../../ui-utils/client/lib/messageContext'; -import { messageArgs } from '../../../../ui-utils/client/lib/messageArgs'; +import { messageArgs } from '../../../../../client/lib/utils/messageArgs'; import { settings } from '../../../../settings/client'; import { callbacks } from '../../../../../lib/callbacks'; import { hasAllPermission, hasRole } from '../../../../authorization/client'; diff --git a/apps/meteor/app/utils/client/index.js b/apps/meteor/app/utils/client/index.js index 47e4db68d5c05..26bc7cd5d5b18 100644 --- a/apps/meteor/app/utils/client/index.js +++ b/apps/meteor/app/utils/client/index.js @@ -1,4 +1,4 @@ -export { t, isRtl } from '../lib/tapi18n'; +export { t } from '../lib/tapi18n'; export { getDefaultSubscriptionPref } from '../lib/getDefaultSubscriptionPref'; export { Info } from '../rocketchat.info'; export { getUserPreference } from '../lib/getUserPreference'; @@ -11,4 +11,4 @@ export { getURL } from '../lib/getURL'; export { placeholders } from '../lib/placeholders'; export { templateVarHandler } from '../lib/templateVarHandler'; export { APIClient } from './lib/RestApiClient'; -export { secondsToHHMMSS } from '../lib/timeConverter'; +export { secondsToHHMMSS } from '../../../lib/utils/secondsToHHMMSS'; diff --git a/apps/meteor/app/utils/lib/getURL.js b/apps/meteor/app/utils/lib/getURL.js index a4697e030e0b0..649c349308f66 100644 --- a/apps/meteor/app/utils/lib/getURL.js +++ b/apps/meteor/app/utils/lib/getURL.js @@ -1,7 +1,7 @@ import s from 'underscore.string'; import { escapeRegExp } from '@rocket.chat/string-helpers'; -import { isURL } from './isURL'; +import { isURL } from '../../../lib/utils/isURL'; import { settings } from '../../settings'; function getCloudUrl(path, _site_url, cloudRoute, cloudParams = {}) { diff --git a/apps/meteor/app/utils/lib/isURL.js b/apps/meteor/app/utils/lib/isURL.js deleted file mode 100644 index f0ca35ec2d44c..0000000000000 --- a/apps/meteor/app/utils/lib/isURL.js +++ /dev/null @@ -1,2 +0,0 @@ -export const isURL = (str) => /^(https?:\/\/|data:)/.test(str); -export const isRelativeURL = (str) => /^[^\/]+\/[^\/].*$|^\/[^\/].*$/gim.test(str); diff --git a/apps/meteor/app/utils/lib/tapi18n.js b/apps/meteor/app/utils/lib/tapi18n.js index 776ff77c867dd..f3dc16bbce226 100644 --- a/apps/meteor/app/utils/lib/tapi18n.js +++ b/apps/meteor/app/utils/lib/tapi18n.js @@ -1,6 +1,5 @@ import _ from 'underscore'; import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; -import { Meteor } from 'meteor/meteor'; export const t = function (key, ...replaces) { if (_.isObject(replaces[0])) { @@ -11,8 +10,3 @@ export const t = function (key, ...replaces) { sprintf: replaces, }); }; - -export const isRtl = (lang) => { - const language = lang || Meteor._localStorage.getItem('userLanguage') || 'en-US'; - return ['ar', 'dv', 'fa', 'he', 'ku', 'ps', 'sd', 'ug', 'ur', 'yi'].includes(language.split('-').shift().toLowerCase()); -}; diff --git a/apps/meteor/app/utils/lib/timeConverter.js b/apps/meteor/app/utils/lib/timeConverter.js deleted file mode 100644 index 18ec061a2ae9e..0000000000000 --- a/apps/meteor/app/utils/lib/timeConverter.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * return readable time format from seconds - * @param {Double} sec seconds - * @return {String} Readable string format - */ -export const secondsToHHMMSS = (sec) => { - sec = parseFloat(sec); - - let hours = Math.floor(sec / 3600); - let minutes = Math.floor((sec - hours * 3600) / 60); - let seconds = Math.round(sec - hours * 3600 - minutes * 60); - - if (hours < 10) { - hours = `0${hours}`; - } - if (minutes < 10) { - minutes = `0${minutes}`; - } - if (seconds < 10) { - seconds = `0${seconds}`; - } - - if (hours > 0) { - return `${hours}:${minutes}:${seconds}`; - } - if (minutes > 0) { - return `00:${minutes}:${seconds}`; - } - return `00:00:${seconds}`; -}; diff --git a/apps/meteor/app/utils/rocketchat.info b/apps/meteor/app/utils/rocketchat.info index 2e677278a91d9..5c57c10153f0d 100644 --- a/apps/meteor/app/utils/rocketchat.info +++ b/apps/meteor/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "4.8.0-develop" + "version": "5.0.0" } diff --git a/apps/meteor/app/utils/server/functions/safeGetMeteorUser.ts b/apps/meteor/app/utils/server/functions/safeGetMeteorUser.ts new file mode 100644 index 0000000000000..d1ed4246d00d9 --- /dev/null +++ b/apps/meteor/app/utils/server/functions/safeGetMeteorUser.ts @@ -0,0 +1,29 @@ +import { Meteor } from 'meteor/meteor'; + +const invalidEnvironmentErrorMessage = 'Meteor.userId can only be invoked in method calls or publications.'; + +/** + * Helper that executes the `Meteor.user()`, but + * supresses errors thrown if the code isn't + * executed inside Meteor's environment + * + * Use this function only if it the code path is + * expected to run out of Meteor's environment and + * is prepared to handle those cases. Otherwise, it + * is advisable to call `Meteor.user()` directly + * + * @returns The current user in the Meteor session, or null if not available + */ +export function safeGetMeteorUser(): Meteor.User | null { + try { + return Meteor.user(); + } catch (error: any) { + // This is the only type of error we want to capture and supress, + // so if the error thrown is different from what we expect, we let it go + if (error?.message !== invalidEnvironmentErrorMessage) { + throw error; + } + + return null; + } +} diff --git a/apps/meteor/app/utils/server/index.js b/apps/meteor/app/utils/server/index.js index 6b21eb718d868..8b2905f0dcbcf 100644 --- a/apps/meteor/app/utils/server/index.js +++ b/apps/meteor/app/utils/server/index.js @@ -1,4 +1,4 @@ -export { t, isRtl } from '../lib/tapi18n'; +export { t } from '../lib/tapi18n'; export { getDefaultSubscriptionPref } from '../lib/getDefaultSubscriptionPref'; export { Info } from '../rocketchat.info'; export { getUserPreference } from '../lib/getUserPreference'; @@ -13,4 +13,4 @@ export { getURL } from '../lib/getURL'; export { getValidRoomName } from '../lib/getValidRoomName'; export { placeholders } from '../lib/placeholders'; export { templateVarHandler } from '../lib/templateVarHandler'; -export { secondsToHHMMSS } from '../lib/timeConverter'; +export { secondsToHHMMSS } from '../../../lib/utils/secondsToHHMMSS'; diff --git a/apps/meteor/app/utils/stream/constants.js b/apps/meteor/app/utils/stream/constants.js deleted file mode 100644 index 9f8587b17deeb..0000000000000 --- a/apps/meteor/app/utils/stream/constants.js +++ /dev/null @@ -1 +0,0 @@ -export const ROOM_DATA_STREAM = 'room-data'; diff --git a/apps/meteor/app/videobridge/client/actionLink.js b/apps/meteor/app/videobridge/client/actionLink.js index 817e5ad32795a..e99981c072eb8 100644 --- a/apps/meteor/app/videobridge/client/actionLink.js +++ b/apps/meteor/app/videobridge/client/actionLink.js @@ -34,7 +34,12 @@ actionLinks.register('joinJitsiCall', function (message, params, instance) { }); if (jitsiTimeout > clickTime) { - instance.tabBar.open('video'); + if (instance instanceof Function) { + instance('video'); + } else { + instance.tabBar.open('video'); + } + return; } @@ -50,7 +55,11 @@ actionLinks.register('joinJitsiCall', function (message, params, instance) { } if (result?.jitsiTimeout && result.jitsiTimeout instanceof Date && result.jitsiTimeout > clickTime) { - instance.tabBar.open('video'); + if (instance instanceof Function) { + instance('video'); + } else { + instance.tabBar.open('video'); + } return; } diff --git a/apps/meteor/app/webdav/client/actionButton.ts b/apps/meteor/app/webdav/client/actionButton.ts index 5444d4ce4dd6d..f3f24b6232a9a 100644 --- a/apps/meteor/app/webdav/client/actionButton.ts +++ b/apps/meteor/app/webdav/client/actionButton.ts @@ -4,7 +4,7 @@ import { t, getURL } from '../../utils/client'; import { WebdavAccounts } from '../../models/client'; import { settings } from '../../settings/client'; import { MessageAction, modal } from '../../ui-utils/client'; -import { messageArgs } from '../../ui-utils/client/lib/messageArgs'; +import { messageArgs } from '../../../client/lib/utils/messageArgs'; Meteor.startup(function () { MessageAction.addButton({ diff --git a/apps/meteor/client/components/GenericModal.tsx b/apps/meteor/client/components/GenericModal.tsx index afd8467aee08c..ba60587ba2ed2 100644 --- a/apps/meteor/client/components/GenericModal.tsx +++ b/apps/meteor/client/components/GenericModal.tsx @@ -15,7 +15,7 @@ type GenericModalProps = RequiredModalProps & { icon?: ComponentProps['name'] | ReactElement | null; confirmDisabled?: boolean; onCancel?: () => void; - onClose: () => void; + onClose?: () => void; onConfirm: () => void; }; diff --git a/apps/meteor/client/components/Message/Attachments/QuoteAttachment.tsx b/apps/meteor/client/components/Message/Attachments/QuoteAttachment.tsx index 1c374ece329fe..d0296152c3cc0 100644 --- a/apps/meteor/client/components/Message/Attachments/QuoteAttachment.tsx +++ b/apps/meteor/client/components/Message/Attachments/QuoteAttachment.tsx @@ -54,7 +54,7 @@ export const QuoteAttachment: FC = ({ {attachments && ( - + )} diff --git a/apps/meteor/client/components/Omnichannel/Tags.tsx b/apps/meteor/client/components/Omnichannel/Tags.tsx index 3ab4b9e7630d3..f0d13fec4df0d 100644 --- a/apps/meteor/client/components/Omnichannel/Tags.tsx +++ b/apps/meteor/client/components/Omnichannel/Tags.tsx @@ -10,7 +10,7 @@ import { formsSubscription } from '../../views/omnichannel/additionalForms'; import { FormSkeleton } from './Skeleton'; const Tags = ({ - tags, + tags = [], handler, error, tagRequired, diff --git a/apps/meteor/client/components/RoomAutoComplete/RoomAutoComplete.tsx b/apps/meteor/client/components/RoomAutoComplete/RoomAutoComplete.tsx index 762bd2cc7ed1a..731d3a724cb53 100644 --- a/apps/meteor/client/components/RoomAutoComplete/RoomAutoComplete.tsx +++ b/apps/meteor/client/components/RoomAutoComplete/RoomAutoComplete.tsx @@ -11,12 +11,13 @@ const query = ( selector: string; } => ({ selector: JSON.stringify({ name: term }) }); -type RoomAutoCompleteProps = Omit, 'value' | 'filter'> & { - value: any; +type RoomAutoCompleteProps = Omit, 'value' | 'filter' | 'onChange'> & { + value: T; + onChange: (value: TemplateStringsArray) => void; }; /* @deprecated */ -const RoomAutoComplete = (props: RoomAutoCompleteProps): ReactElement => { +const RoomAutoComplete = (props: RoomAutoCompleteProps): ReactElement => { const [filter, setFilter] = useState(''); const { value: data } = useEndpointData( 'rooms.autocomplete.channelAndPrivate', @@ -33,7 +34,8 @@ const RoomAutoComplete = (props: RoomAutoCompleteProps): ReactElement => { return ( ( diff --git a/apps/meteor/client/components/Sidebar/Content.js b/apps/meteor/client/components/Sidebar/Content.tsx similarity index 82% rename from apps/meteor/client/components/Sidebar/Content.js rename to apps/meteor/client/components/Sidebar/Content.tsx index 3be97eb0ef59a..866594071c5ea 100644 --- a/apps/meteor/client/components/Sidebar/Content.js +++ b/apps/meteor/client/components/Sidebar/Content.tsx @@ -1,9 +1,9 @@ import { Box } from '@rocket.chat/fuselage'; -import React from 'react'; +import React, { FC } from 'react'; import ScrollableContentWrapper from '../ScrollableContentWrapper'; -const Content = ({ children, ...props }) => ( +const Content: FC = ({ children, ...props }) => ( diff --git a/apps/meteor/client/components/Sidebar/Header.js b/apps/meteor/client/components/Sidebar/Header.tsx similarity index 73% rename from apps/meteor/client/components/Sidebar/Header.js rename to apps/meteor/client/components/Sidebar/Header.tsx index 1c90fbd05c8e0..2bc7e5cfb4809 100644 --- a/apps/meteor/client/components/Sidebar/Header.js +++ b/apps/meteor/client/components/Sidebar/Header.tsx @@ -1,7 +1,12 @@ import { Box, ActionButton } from '@rocket.chat/fuselage'; -import React from 'react'; +import React, { FC, ReactElement } from 'react'; -const Header = ({ title, onClose, children = undefined, ...props }) => ( +type HeaderProps = { + title?: ReactElement | string; + onClose?: () => void; +}; + +const Header: FC = ({ title, onClose, children, ...props }) => ( {(title || onClose) && ( diff --git a/apps/meteor/client/components/Sidebar/ItemsAssembler.js b/apps/meteor/client/components/Sidebar/ItemsAssembler.js deleted file mode 100644 index 98e64fe7e30f4..0000000000000 --- a/apps/meteor/client/components/Sidebar/ItemsAssembler.js +++ /dev/null @@ -1,22 +0,0 @@ -import { useTranslation } from '@rocket.chat/ui-contexts'; -import React, { memo } from 'react'; - -import Sidebar from './Sidebar'; - -const ItemsAssembler = ({ items, currentPath }) => { - const t = useTranslation(); - return items.map(({ href, pathSection, i18nLabel, name, icon, permissionGranted, pathGroup, tag }) => ( - - )); -}; - -export default memo(ItemsAssembler); diff --git a/apps/meteor/client/components/Sidebar/NavigationItem.js b/apps/meteor/client/components/Sidebar/NavigationItem.js deleted file mode 100644 index 01bd0b415e0a1..0000000000000 --- a/apps/meteor/client/components/Sidebar/NavigationItem.js +++ /dev/null @@ -1,24 +0,0 @@ -import { Box, Icon, Tag } from '@rocket.chat/fuselage'; -import { useRoutePath } from '@rocket.chat/ui-contexts'; -import React, { memo, useMemo } from 'react'; - -import Sidebar from './Sidebar'; - -const NavigationItem = ({ permissionGranted, pathGroup, pathSection, icon, label, currentPath, tag }) => { - const params = useMemo(() => ({ group: pathGroup }), [pathGroup]); - const path = useRoutePath(pathSection, params); - const isActive = path === currentPath || false; - if (permissionGranted && !permissionGranted()) { - return null; - } - return ( - - {icon && } - - {label} {tag && {tag}} - - - ); -}; - -export default memo(NavigationItem); diff --git a/apps/meteor/client/components/Sidebar/Sidebar.js b/apps/meteor/client/components/Sidebar/Sidebar.tsx similarity index 68% rename from apps/meteor/client/components/Sidebar/Sidebar.js rename to apps/meteor/client/components/Sidebar/Sidebar.tsx index fd23a8df36435..2e8b572365d44 100644 --- a/apps/meteor/client/components/Sidebar/Sidebar.js +++ b/apps/meteor/client/components/Sidebar/Sidebar.tsx @@ -1,7 +1,7 @@ import { Box } from '@rocket.chat/fuselage'; -import React from 'react'; +import React, { FC } from 'react'; -const Sidebar = ({ children, ...props }) => ( +const Sidebar: FC = ({ children, ...props }) => ( {children} diff --git a/apps/meteor/client/components/Sidebar/GenericItem.tsx b/apps/meteor/client/components/Sidebar/SidebarGenericItem.tsx similarity index 80% rename from apps/meteor/client/components/Sidebar/GenericItem.tsx rename to apps/meteor/client/components/Sidebar/SidebarGenericItem.tsx index cf1b3d04f2e58..28977f091d33a 100644 --- a/apps/meteor/client/components/Sidebar/GenericItem.tsx +++ b/apps/meteor/client/components/Sidebar/SidebarGenericItem.tsx @@ -3,8 +3,8 @@ import { Box } from '@rocket.chat/fuselage'; import type colors from '@rocket.chat/fuselage-tokens/colors'; import React, { memo, ReactElement, ReactNode } from 'react'; -type GenericItemProps = { - href: string; +type SidebarGenericItemProps = { + href?: string; active?: boolean; children: ReactNode; customColors?: { @@ -15,7 +15,14 @@ type GenericItemProps = { textColor?: string; }; -const GenericItem = ({ href, active, children, customColors, textColor = 'default', ...props }: GenericItemProps): ReactElement => ( +const SidebarGenericItem = ({ + href, + active, + children, + customColors, + textColor = 'default', + ...props +}: SidebarGenericItemProps): ReactElement => ( = ({ items, currentPath }) => { + const t = useTranslation(); + return ( + <> + {items.map(({ href, pathSection, i18nLabel, name, icon, permissionGranted, pathGroup, tag }) => ( + [0])} + key={i18nLabel || name} + currentPath={currentPath} + tag={t.has(tag as Parameters[0]) ? t(tag as Parameters[0]) : undefined} + /> + ))} + ; + + ); +}; + +export default memo(SidebarItemsAssembler); diff --git a/apps/meteor/client/components/Sidebar/SidebarNavigationItem.tsx b/apps/meteor/client/components/Sidebar/SidebarNavigationItem.tsx new file mode 100644 index 0000000000000..5d9127e4b2f8c --- /dev/null +++ b/apps/meteor/client/components/Sidebar/SidebarNavigationItem.tsx @@ -0,0 +1,42 @@ +import { Box, Icon, IconProps, Tag } from '@rocket.chat/fuselage'; +import { useRoutePath } from '@rocket.chat/ui-contexts'; +import React, { memo, useMemo, FC } from 'react'; + +import SidebarGenericItem from './SidebarGenericItem'; + +type SidebarNavigationItemProps = { + permissionGranted?: (() => boolean) | boolean; + pathGroup: string; + pathSection: string; + icon?: IconProps['name']; + label?: string; + tag?: string; + currentPath?: string; +}; + +const SidebarNavigationItem: FC = ({ + permissionGranted, + pathGroup, + pathSection, + icon, + label, + currentPath, + tag, +}) => { + const params = useMemo(() => ({ group: pathGroup }), [pathGroup]); + const path = useRoutePath(pathSection, params); + const isActive = path === currentPath || false; + if (permissionGranted === false || (typeof permissionGranted === 'function' && !permissionGranted())) { + return null; + } + return ( + + {icon && } + + {label} {tag && {tag}} + + + ); +}; + +export default memo(SidebarNavigationItem); diff --git a/apps/meteor/client/components/Sidebar/index.ts b/apps/meteor/client/components/Sidebar/index.ts index f4d4d03140e0c..39df0d41d8795 100644 --- a/apps/meteor/client/components/Sidebar/index.ts +++ b/apps/meteor/client/components/Sidebar/index.ts @@ -1,16 +1,16 @@ import Content from './Content'; -import GenericItem from './GenericItem'; import Header from './Header'; -import ItemsAssembler from './ItemsAssembler'; import ListItem from './ListItem'; -import NavigationItem from './NavigationItem'; import Sidebar from './Sidebar'; +import GenericItem from './SidebarGenericItem'; +import SidebarItemsAssembler from './SidebarItemsAssembler'; +import NavigationItem from './SidebarNavigationItem'; export default Object.assign(Sidebar, { Content, Header, GenericItem, NavigationItem, - ItemsAssembler, + ItemsAssembler: SidebarItemsAssembler, ListItem, }); diff --git a/apps/meteor/client/components/UserAutoComplete/UserAutoComplete.tsx b/apps/meteor/client/components/UserAutoComplete/UserAutoComplete.tsx index f24bbb096be39..376b055a7830e 100644 --- a/apps/meteor/client/components/UserAutoComplete/UserAutoComplete.tsx +++ b/apps/meteor/client/components/UserAutoComplete/UserAutoComplete.tsx @@ -1,6 +1,6 @@ import { AutoComplete, Option, Box, Chip, Options } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; -import React, { ComponentProps, memo, MouseEventHandler, ReactElement, useMemo, useState } from 'react'; +import React, { ComponentProps, memo, ReactElement, useMemo, useState } from 'react'; import { useEndpointData } from '../../hooks/useEndpointData'; import UserAvatar from '../avatar/UserAvatar'; @@ -12,12 +12,12 @@ const query = ( selector: string; } => ({ selector: JSON.stringify({ term, conditions }) }); -type UserAutoCompleteProps = Omit, 'value' | 'filter'> & - Omit, 'value'> & { +type UserAutoCompleteProps = Omit, 'value' | 'filter' | 'onChange'> & + Omit, 'value' | 'onChange'> & { conditions?: { [key: string]: unknown }; - onChange?: MouseEventHandler; - value: any; filter?: string; + value: string; + onChange?: (value: string) => void; }; const UserAutoComplete = ({ value, ...props }: UserAutoCompleteProps): ReactElement => { @@ -34,8 +34,8 @@ const UserAutoComplete = ({ value, ...props }: UserAutoCompleteProps): ReactElem return ( { @@ -44,7 +44,7 @@ const UserAutoComplete = ({ value, ...props }: UserAutoCompleteProps): ReactElem } return ( - + props.onChange?.(value)} mie='x4'> {label} diff --git a/apps/meteor/client/components/UserAutoCompleteMultiple/UserAutoCompleteMultiple.js b/apps/meteor/client/components/UserAutoCompleteMultiple/UserAutoCompleteMultiple.tsx similarity index 57% rename from apps/meteor/client/components/UserAutoCompleteMultiple/UserAutoCompleteMultiple.js rename to apps/meteor/client/components/UserAutoCompleteMultiple/UserAutoCompleteMultiple.tsx index dea3b0ec81c5e..5e3d7e03bbb74 100644 --- a/apps/meteor/client/components/UserAutoCompleteMultiple/UserAutoCompleteMultiple.js +++ b/apps/meteor/client/components/UserAutoCompleteMultiple/UserAutoCompleteMultiple.tsx @@ -1,33 +1,47 @@ import { AutoComplete, Box, Option, Chip } from '@rocket.chat/fuselage'; import { useMutableCallback, useDebouncedValue } from '@rocket.chat/fuselage-hooks'; -import React, { memo, useMemo, useState } from 'react'; +import React, { ComponentProps, memo, ReactElement, useMemo, useState } from 'react'; import { useEndpointData } from '../../hooks/useEndpointData'; import UserAvatar from '../avatar/UserAvatar'; -const query = (term = '') => ({ selector: JSON.stringify({ term }) }); +const query = ( + term = '', +): { + selector: string; +} => ({ selector: JSON.stringify({ term }) }); -const UserAutoCompleteMultiple = (props) => { +type UserAutoCompleteMultipleProps = Omit, 'value' | 'filter' | 'onChange'> & + Omit, 'value' | 'is' | 'className' | 'onChange'> & { + onChange: (value: any, action: 'remove' | undefined) => void; + value: any; + filter?: string; + }; + +const UserAutoCompleteMultiple = ({ onChange, ...props }: UserAutoCompleteMultipleProps): ReactElement => { const [filter, setFilter] = useState(''); const debouncedFilter = useDebouncedValue(filter, 1000); const { value: data } = useEndpointData( 'users.autocomplete', useMemo(() => query(debouncedFilter), [debouncedFilter]), ); - const options = useMemo(() => (data && data.items.map((user) => ({ value: user.username, label: user.name }))) || [], [data]); + + const options = useMemo(() => data?.items.map((user) => ({ value: user.username, label: user.name })) || [], [data]); + const onClickRemove = useMutableCallback((e) => { e.stopPropagation(); e.preventDefault(); - props.onChange(e.currentTarget.value, 'remove'); + onChange?.(e.currentTarget.value, 'remove'); }); return ( - selected?.map((value) => ( + renderSelected={({ value: selected }): ReactElement => + selected?.map((value: any) => ( @@ -36,7 +50,7 @@ const UserAutoCompleteMultiple = (props) => { )) } - renderItem={({ value, label, ...props }) => ( + renderItem={({ value, label, ...props }): ReactElement => ( diff --git a/apps/meteor/client/views/admin/apps/AppMenu.js b/apps/meteor/client/views/admin/apps/AppMenu.js index ca1492a573869..7daf4505c9b5a 100644 --- a/apps/meteor/client/views/admin/apps/AppMenu.js +++ b/apps/meteor/client/views/admin/apps/AppMenu.js @@ -124,39 +124,43 @@ function AppMenu({ app, ...props }) { action: handleSubscription, }, }), - ...(isAppEnabled && { - disable: { + ...(app.installed && + isAppEnabled && { + disable: { + label: ( + + + {t('Disable')} + + ), + action: handleDisable, + }, + }), + ...(app.installed && + !isAppEnabled && { + enable: { + label: ( + + + {t('Enable')} + + ), + action: handleEnable, + }, + }), + ...(app.installed && { + uninstall: { label: ( - - - {t('Disable')} + + + {t('Uninstall')} ), - action: handleDisable, + action: handleUninstall, }, }), - ...(!isAppEnabled && { - enable: { - label: ( - - - {t('Enable')} - - ), - action: handleEnable, - }, - }), - uninstall: { - label: ( - - - {t('Uninstall')} - - ), - action: handleUninstall, - }, }), - [canAppBeSubscribed, t, handleSubscription, isAppEnabled, handleDisable, handleEnable, handleUninstall], + [canAppBeSubscribed, t, handleSubscription, app.installed, isAppEnabled, handleDisable, handleEnable, handleUninstall], ); return ; diff --git a/apps/meteor/client/views/admin/apps/AppRow.tsx b/apps/meteor/client/views/admin/apps/AppRow.tsx index a3b975827c34d..33fcfd4a33e7e 100644 --- a/apps/meteor/client/views/admin/apps/AppRow.tsx +++ b/apps/meteor/client/views/admin/apps/AppRow.tsx @@ -94,8 +94,8 @@ const AppRow: FC = ({ medium, ...props }) => { )} - - {installed && } + + {installed && } diff --git a/apps/meteor/client/views/admin/apps/MarketplaceRow.tsx b/apps/meteor/client/views/admin/apps/MarketplaceRow.tsx index 73117cc2dc3be..7080723ce82e6 100644 --- a/apps/meteor/client/views/admin/apps/MarketplaceRow.tsx +++ b/apps/meteor/client/views/admin/apps/MarketplaceRow.tsx @@ -27,6 +27,7 @@ const MarketplaceRow: FC = ({ medium, large, ...props }) => marketplaceVersion, iconFileContent, installed, + isSubscribed, } = props; const t = useTranslation(); @@ -103,8 +104,8 @@ const MarketplaceRow: FC = ({ medium, large, ...props }) => )} - - {installed && } + + {(installed || isSubscribed) && } diff --git a/apps/meteor/client/views/admin/federationDashboard/OverviewSection.tsx b/apps/meteor/client/views/admin/federationDashboard/OverviewSection.tsx index 2c0407ca9507e..618ad33f18e1b 100644 --- a/apps/meteor/client/views/admin/federationDashboard/OverviewSection.tsx +++ b/apps/meteor/client/views/admin/federationDashboard/OverviewSection.tsx @@ -2,7 +2,7 @@ import { Box, Skeleton } from '@rocket.chat/fuselage'; import { useTranslation } from '@rocket.chat/ui-contexts'; import React, { ReactElement, useMemo } from 'react'; -import CounterSet from '../../../components/data/CounterSet'; +import CounterSet from '../../../components/dataView/CounterSet'; import { AsyncStatePhase } from '../../../hooks/useAsyncState'; import { usePolledMethodData } from '../../../hooks/usePolledMethodData'; diff --git a/apps/meteor/client/views/admin/info/UsageCard.tsx b/apps/meteor/client/views/admin/info/UsageCard.tsx index a1e867d105472..dd06bd8276ecf 100644 --- a/apps/meteor/client/views/admin/info/UsageCard.tsx +++ b/apps/meteor/client/views/admin/info/UsageCard.tsx @@ -104,7 +104,7 @@ const UsageCard = ({ statistics, vertical }: UsageCardProps): ReactElement => { - {t('Rooms')} + {t('Total_rooms')} @@ -155,7 +155,7 @@ const UsageCard = ({ statistics, vertical }: UsageCardProps): ReactElement => { /> - {t('Messages')} + {t('Total_messages')} diff --git a/apps/meteor/client/views/admin/permissions/UsersInRole/UsersInRolePage.tsx b/apps/meteor/client/views/admin/permissions/UsersInRole/UsersInRolePage.tsx index 018abbcb33c55..33352a1147c72 100644 --- a/apps/meteor/client/views/admin/permissions/UsersInRole/UsersInRolePage.tsx +++ b/apps/meteor/client/views/admin/permissions/UsersInRole/UsersInRolePage.tsx @@ -12,8 +12,8 @@ import UsersInRoleTable from './UsersInRoleTable'; const UsersInRolePage = ({ role }: { role: IRole }): ReactElement => { const t = useTranslation(); const reload = useRef<() => void>(() => undefined); - const [user, setUser] = useState(''); - const [rid, setRid] = useState(); + const [user, setUser] = useState(''); + const [rid, setRid] = useState(''); const [userError, setUserError] = useState(); const dispatchToastMessage = useToastMessageDispatch(); @@ -36,10 +36,10 @@ const UsersInRolePage = ({ role }: { role: IRole }): ReactElement => { try { await addUser({ roleId: _id, username: user, roomId: rid }); dispatchToastMessage({ type: 'success', message: t('User_added') }); - setUser(undefined); + setUser(''); reload.current?.(); } catch (error) { - dispatchToastMessage({ type: 'error', message: String(error) }); + dispatchToastMessage({ type: 'error', message: error }); } }); diff --git a/apps/meteor/client/views/admin/settings/SettingsGroupCard.tsx b/apps/meteor/client/views/admin/settings/SettingsGroupCard.tsx index c454106ed8c37..0579452bd15e4 100644 --- a/apps/meteor/client/views/admin/settings/SettingsGroupCard.tsx +++ b/apps/meteor/client/views/admin/settings/SettingsGroupCard.tsx @@ -6,11 +6,12 @@ import { useRoute, TranslationKey, useTranslation } from '@rocket.chat/ui-contex import React, { ReactElement } from 'react'; import Card from '../../../components/Card'; +import MarkdownText from '../../../components/MarkdownText'; const clampStyle = css` display: -webkit-box; overflow: hidden; - -webkit-line-clamp: 4; + -webkit-line-clamp: 5; -webkit-box-orient: vertical; `; @@ -38,7 +39,9 @@ const SettingsGroupCard = ({ id, title, description }: SettingsGroupCard): React {t(title)} - {description && t.has(description) && t(description)} + + {description && t.has(description) && } + @@ -36,6 +41,6 @@ function AddAgent({ reload, ...props }) { ); -} +}; export default AddAgent; diff --git a/apps/meteor/client/views/omnichannel/agents/AgentEdit.tsx b/apps/meteor/client/views/omnichannel/agents/AgentEdit.tsx index efd3fa568af1a..b05e1eb504edb 100644 --- a/apps/meteor/client/views/omnichannel/agents/AgentEdit.tsx +++ b/apps/meteor/client/views/omnichannel/agents/AgentEdit.tsx @@ -1,4 +1,4 @@ -import type { IUser } from '@rocket.chat/core-typings'; +import type { ILivechatAgent, ILivechatDepartment, ILivechatDepartmentAgents } from '@rocket.chat/core-typings'; import { Field, TextInput, Button, Margins, Box, MultiSelect, Icon, Select } from '@rocket.chat/fuselage'; import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; import { useToastMessageDispatch, useRoute, useSetting, useMethod, useTranslation } from '@rocket.chat/ui-contexts'; @@ -15,14 +15,13 @@ import { formsSubscription } from '../additionalForms'; // Department type dataType = { - status: string; - user: IUser; + user: Pick; }; type AgentEditProps = { data: dataType; - userDepartments: { departments: Array<{ departmentId: string }> }; - availableDepartments: { departments: Array<{ _id: string; name?: string }> }; + userDepartments: { departments: Pick[] }; + availableDepartments: { departments: Pick[] }; uid: string; reset: () => void; }; @@ -44,7 +43,7 @@ const AgentEdit: FC = ({ data, userDepartments, availableDepartm [availableDepartments], ); const initialDepartmentValue = useMemo( - () => (userDepartments?.departments ? userDepartments.departments.map(({ departmentId }) => departmentId) : []), + () => (userDepartments.departments ? userDepartments.departments.map(({ departmentId }) => departmentId) : []), [userDepartments], ); const eeForms = useSubscription(formsSubscription); diff --git a/apps/meteor/client/views/omnichannel/agents/AgentEditWithData.js b/apps/meteor/client/views/omnichannel/agents/AgentEditWithData.tsx similarity index 76% rename from apps/meteor/client/views/omnichannel/agents/AgentEditWithData.js rename to apps/meteor/client/views/omnichannel/agents/AgentEditWithData.tsx index b4559b2e6422c..04357e5469008 100644 --- a/apps/meteor/client/views/omnichannel/agents/AgentEditWithData.js +++ b/apps/meteor/client/views/omnichannel/agents/AgentEditWithData.tsx @@ -1,13 +1,18 @@ import { Box } from '@rocket.chat/fuselage'; import { useTranslation } from '@rocket.chat/ui-contexts'; -import React from 'react'; +import React, { FC } from 'react'; import { FormSkeleton } from '../../../components/Skeleton'; import { AsyncStatePhase } from '../../../hooks/useAsyncState'; import { useEndpointData } from '../../../hooks/useEndpointData'; import AgentEdit from './AgentEdit'; -function AgentEditWithData({ uid, reload }) { +type AgentEditWithDataProps = { + uid: string; + reload: () => void; +}; + +const AgentEditWithData: FC = ({ uid, reload }) => { const t = useTranslation(); const { value: data, phase: state, error } = useEndpointData(`livechat/users/agent/${uid}`); const { @@ -21,7 +26,11 @@ function AgentEditWithData({ uid, reload }) { error: availableDepartmentsError, } = useEndpointData('livechat/department'); - if ([state, availableDepartmentsState, userDepartmentsState].includes(AsyncStatePhase.LOADING)) { + if ( + [state, availableDepartmentsState, userDepartmentsState].includes(AsyncStatePhase.LOADING) || + !userDepartments || + !availableDepartments + ) { return ; } @@ -30,6 +39,6 @@ function AgentEditWithData({ uid, reload }) { } return ; -} +}; export default AgentEditWithData; diff --git a/apps/meteor/client/views/omnichannel/agents/AgentInfo.js b/apps/meteor/client/views/omnichannel/agents/AgentInfo.tsx similarity index 63% rename from apps/meteor/client/views/omnichannel/agents/AgentInfo.js rename to apps/meteor/client/views/omnichannel/agents/AgentInfo.tsx index e8935bd6667fe..3287aca13583e 100644 --- a/apps/meteor/client/views/omnichannel/agents/AgentInfo.js +++ b/apps/meteor/client/views/omnichannel/agents/AgentInfo.tsx @@ -1,7 +1,6 @@ import { Box, Margins, ButtonGroup } from '@rocket.chat/fuselage'; import { useTranslation } from '@rocket.chat/ui-contexts'; -import React, { memo } from 'react'; -import { useSubscription } from 'use-subscription'; +import React, { HTMLAttributes, memo } from 'react'; import { FormSkeleton } from '../../../components/Skeleton'; import { UserStatus } from '../../../components/UserStatus'; @@ -9,42 +8,45 @@ import VerticalBar from '../../../components/VerticalBar'; import { AsyncStatePhase } from '../../../hooks/useAsyncState'; import { useEndpointData } from '../../../hooks/useEndpointData'; import UserInfo from '../../room/contextualBar/UserInfo'; -import { formsSubscription } from '../additionalForms'; +import { useFormsSubscription } from '../additionalForms'; import AgentInfoAction from './AgentInfoAction'; -export const AgentInfo = memo(function AgentInfo({ uid, children, ...props }) { +type AgentInfoProps = { + uid: string; +} & Omit, 'is'>; + +export const AgentInfo = memo(function AgentInfo({ uid, children, ...props }) { const t = useTranslation(); - const { value: data, phase: state, error } = useEndpointData(`livechat/users/agent/${uid}`); - const eeForms = useSubscription(formsSubscription); + const result = useEndpointData(`livechat/users/agent/${uid}`); - const { useMaxChatsPerAgentDisplay = () => {} } = eeForms; + const { useMaxChatsPerAgentDisplay } = useFormsSubscription(); - const MaxChats = useMaxChatsPerAgentDisplay(); + const MaxChats = useMaxChatsPerAgentDisplay?.(); - if (state === AsyncStatePhase.LOADING) { + if (result.phase === AsyncStatePhase.LOADING) { return ; } - if (error || !data || !data.user) { + if (result.phase === AsyncStatePhase.REJECTED) { return {t('User_not_found')}; } - const { user } = data; + const { user } = result.value; const { username, statusLivechat, status: userStatus } = user; return ( - + - + {children} - } /> + } /> {statusLivechat && ( diff --git a/apps/meteor/client/views/omnichannel/agents/AgentInfoAction.js b/apps/meteor/client/views/omnichannel/agents/AgentInfoAction.js deleted file mode 100644 index ade040c902d95..0000000000000 --- a/apps/meteor/client/views/omnichannel/agents/AgentInfoAction.js +++ /dev/null @@ -1,11 +0,0 @@ -import { Button, Icon } from '@rocket.chat/fuselage'; -import React from 'react'; - -const AgentInfoAction = ({ icon, label, ...props }) => ( - -); - -export default AgentInfoAction; diff --git a/apps/meteor/client/views/omnichannel/agents/AgentInfoAction.tsx b/apps/meteor/client/views/omnichannel/agents/AgentInfoAction.tsx new file mode 100644 index 0000000000000..99cb056f564af --- /dev/null +++ b/apps/meteor/client/views/omnichannel/agents/AgentInfoAction.tsx @@ -0,0 +1,17 @@ +import { Button, Icon, IconProps } from '@rocket.chat/fuselage'; +import React, { FC, HtmlHTMLAttributes } from 'react'; + +type AgentInfoActionProps = { + icon: IconProps['name']; + label?: string; + title?: string; +} & Omit, 'is'>; + +const AgentInfoAction: FC = ({ icon, label, ...props }) => ( + +); + +export default AgentInfoAction; diff --git a/apps/meteor/client/views/omnichannel/agents/AgentInfoActions.js b/apps/meteor/client/views/omnichannel/agents/AgentInfoActions.tsx similarity index 68% rename from apps/meteor/client/views/omnichannel/agents/AgentInfoActions.js rename to apps/meteor/client/views/omnichannel/agents/AgentInfoActions.tsx index 95f5755badbae..ddd50628da4d1 100644 --- a/apps/meteor/client/views/omnichannel/agents/AgentInfoActions.js +++ b/apps/meteor/client/views/omnichannel/agents/AgentInfoActions.tsx @@ -1,12 +1,14 @@ import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; import { useSetModal, useToastMessageDispatch, useRouteParameter, useRoute, useTranslation } from '@rocket.chat/ui-contexts'; -import React from 'react'; +import React, { VFC } from 'react'; import GenericModal from '../../../components/GenericModal'; import { useEndpointAction } from '../../../hooks/useEndpointAction'; import AgentInfo from './AgentInfo'; -function AgentInfoActions({ reload }) { +const AgentInfoActions: VFC<{ + reload: () => void; +}> = ({ reload }) => { const t = useTranslation(); const _id = useRouteParameter('id'); const agentsRoute = useRoute('omnichannel-agents'); @@ -24,30 +26,32 @@ function AgentInfoActions({ reload }) { const handleDelete = useMutableCallback((e) => { e.stopPropagation(); - const onDeleteAgent = async () => { + const onDeleteAgent = async (): Promise => { try { await handleRemoveClick(); dispatchToastMessage({ type: 'success', message: t('Agent_removed') }); } catch (error) { - dispatchToastMessage({ type: 'error', message: error }); + dispatchToastMessage({ type: 'error', message: String(error) }); } setModal(); }; - setModal( setModal()} confirmText={t('Delete')} />); + setModal( setModal()} confirmText={t('Delete')} />); }); const handleEditClick = useMutableCallback(() => agentsRoute.push({ context: 'edit', - id: _id, + id: String(_id), }), ); - return [ - , - , - ]; -} + return ( + <> + , + , + + ); +}; export default AgentInfoActions; diff --git a/apps/meteor/client/views/omnichannel/agents/AgentsPage.js b/apps/meteor/client/views/omnichannel/agents/AgentsPage.js deleted file mode 100644 index 4418d146009ee..0000000000000 --- a/apps/meteor/client/views/omnichannel/agents/AgentsPage.js +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; - -import FilterByText from '../../../components/FilterByText'; -import GenericTable from '../../../components/GenericTable'; -import Page from '../../../components/Page'; -import AddAgent from './AddAgent'; - -function AgentsPage({ data, reload, header, setParams, params, title, renderRow, children }) { - return ( - - - - - - } - /> - - - {children} - - ); -} - -export default AgentsPage; diff --git a/apps/meteor/client/views/omnichannel/agents/AgentsPage.tsx b/apps/meteor/client/views/omnichannel/agents/AgentsPage.tsx new file mode 100644 index 0000000000000..84293e15582fc --- /dev/null +++ b/apps/meteor/client/views/omnichannel/agents/AgentsPage.tsx @@ -0,0 +1,39 @@ +import React, { FC, Key, ReactNode, ReactElement } from 'react'; + +import FilterByText from '../../../components/FilterByText'; +import GenericTable from '../../../components/GenericTable'; +import Page from '../../../components/Page'; +import AddAgent from './AddAgent'; + +type AgentPageProps = { + reload: () => void; + data: any; + header: ReactNode; + setParams: (params: any) => void; + params: any; + title: string; + renderRow: (props: { _id?: Key }) => ReactElement; +}; + +const AgentsPage: FC = ({ data, reload, header, setParams, params, title, renderRow, children }) => ( + + + + + + } + /> + + + {children} + +); + +export default AgentsPage; diff --git a/apps/meteor/client/views/omnichannel/agents/AgentsRoute.js b/apps/meteor/client/views/omnichannel/agents/AgentsRoute.tsx similarity index 71% rename from apps/meteor/client/views/omnichannel/agents/AgentsRoute.js rename to apps/meteor/client/views/omnichannel/agents/AgentsRoute.tsx index b674e26b6e0ef..c47c96f596a54 100644 --- a/apps/meteor/client/views/omnichannel/agents/AgentsRoute.js +++ b/apps/meteor/client/views/omnichannel/agents/AgentsRoute.tsx @@ -1,9 +1,11 @@ import { Box, Table } from '@rocket.chat/fuselage'; import { useDebouncedValue, useMediaQuery, useMutableCallback } from '@rocket.chat/fuselage-hooks'; +import { PaginatedRequest } from '@rocket.chat/rest-typings'; import { useRouteParameter, useRoute, usePermission, useTranslation } from '@rocket.chat/ui-contexts'; -import React, { useMemo, useCallback, useState } from 'react'; +import React, { useMemo, useCallback, useState, FC, ReactElement } from 'react'; import GenericTable from '../../../components/GenericTable'; +import { useSort } from '../../../components/GenericTable/hooks/useSort'; import VerticalBar from '../../../components/VerticalBar'; import UserAvatar from '../../../components/avatar/UserAvatar'; import { useEndpointData } from '../../../hooks/useEndpointData'; @@ -14,9 +16,20 @@ import AgentInfoActions from './AgentInfoActions'; import AgentsPage from './AgentsPage'; import RemoveAgentButton from './RemoveAgentButton'; -const sortDir = (sortDir) => (sortDir === 'asc' ? 1 : -1); - -const useQuery = ({ text, itemsPerPage, current }, [column, direction]) => +const sortDir = (sortDir: 'asc' | 'desc'): 1 | -1 => (sortDir === 'asc' ? 1 : -1); + +const useQuery = ( + { + text, + itemsPerPage, + current, + }: { + text: string; + itemsPerPage: number; + current: number; + }, + [column, direction]: [string, 'asc' | 'desc'], +): PaginatedRequest<{ text: string }> => useMemo( () => ({ fields: JSON.stringify({ name: 1, username: 1, emails: 1, avatarETag: 1 }), @@ -31,34 +44,39 @@ const useQuery = ({ text, itemsPerPage, current }, [column, direction]) => [text, itemsPerPage, current, column, direction], ); -function AgentsRoute() { +const AgentsRoute: FC = () => { const t = useTranslation(); const canViewAgents = usePermission('manage-livechat-agents'); const [params, setParams] = useState({ text: '', current: 0, itemsPerPage: 25 }); - const [sort, setSort] = useState(['name', 'asc']); + const { sortBy, sortDirection, setSort } = useSort<'name' | 'username' | 'emails.address' | 'statusLivechat'>('name'); const mediaQuery = useMediaQuery('(min-width: 1024px)'); const debouncedParams = useDebouncedValue(params, 500); - const debouncedSort = useDebouncedValue(sort, 500); + const debouncedSort = useDebouncedValue([sortBy, sortDirection], 500) as [ + 'name' | 'username' | 'emails.address' | 'statusLivechat', + 'asc' | 'desc', + ]; const query = useQuery(debouncedParams, debouncedSort); const agentsRoute = useRoute('omnichannel-agents'); const context = useRouteParameter('context'); const id = useRouteParameter('id'); - const onHeaderClick = useMutableCallback((id) => { - const [sortBy, sortDirection] = sort; + if (!id) { + throw new Error('Agent id is required'); + } + const onHeaderClick = useMutableCallback((id) => { if (sortBy === id) { - setSort([id, sortDirection === 'asc' ? 'desc' : 'asc']); + setSort(id, sortDirection === 'asc' ? 'desc' : 'asc'); return; } - setSort([id, 'asc']); + setSort(id, 'asc'); }); const onRowClick = useMutableCallback( - (id) => () => + (id) => (): void => agentsRoute.push({ context: 'info', id, @@ -70,14 +88,14 @@ function AgentsRoute() { const header = useMemo( () => [ - + {t('Name')} , mediaQuery && ( @@ -86,8 +104,8 @@ function AgentsRoute() { ), @@ -95,8 +113,8 @@ function AgentsRoute() { , @@ -106,8 +124,8 @@ function AgentsRoute() { {t('Remove')} , ].filter(Boolean), - [sort, onHeaderClick, t, mediaQuery], - ); + [sortDirection, sortBy, onHeaderClick, t, mediaQuery], + ) as ReactElement[]; const renderRow = useCallback( ({ emails, _id, username, name, avatarETag, statusLivechat }) => ( @@ -138,7 +156,7 @@ function AgentsRoute() { )} - {emails && emails.length && emails[0].address} + {emails?.length && emails[0].address} {statusLivechat === 'available' ? t('Available') : t('Not_Available')} @@ -146,11 +164,11 @@ function AgentsRoute() { [mediaQuery, reload, onRowClick, t], ); - const EditAgentsTab = useCallback(() => { + const EditAgentsTab = useCallback((): ReactElement => { if (!context) { - return ''; + return <>; } - const handleVerticalBarCloseButtonClick = () => { + const handleVerticalBarCloseButtonClick = (): void => { agentsRoute.push({}); }; @@ -165,7 +183,7 @@ function AgentsRoute() { {context === 'edit' && } {context === 'info' && ( - + )} @@ -177,20 +195,10 @@ function AgentsRoute() { } return ( - + ); -} +}; export default AgentsRoute; diff --git a/apps/meteor/client/views/omnichannel/agents/RemoveAgentButton.js b/apps/meteor/client/views/omnichannel/agents/RemoveAgentButton.tsx similarity index 77% rename from apps/meteor/client/views/omnichannel/agents/RemoveAgentButton.js rename to apps/meteor/client/views/omnichannel/agents/RemoveAgentButton.tsx index b8c8ea0b7d989..b37303a3ca59f 100644 --- a/apps/meteor/client/views/omnichannel/agents/RemoveAgentButton.js +++ b/apps/meteor/client/views/omnichannel/agents/RemoveAgentButton.tsx @@ -1,12 +1,17 @@ import { Table, Icon, Button } from '@rocket.chat/fuselage'; import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; import { useSetModal, useToastMessageDispatch, useTranslation } from '@rocket.chat/ui-contexts'; -import React from 'react'; +import React, { FC } from 'react'; import GenericModal from '../../../components/GenericModal'; import { useEndpointAction } from '../../../hooks/useEndpointAction'; -function RemoveAgentButton({ _id, reload }) { +type RemoveAgentButtonProps = { + _id: string; + reload: () => void; +}; + +const RemoveAgentButton: FC = ({ _id, reload }) => { const deleteAction = useEndpointAction('DELETE', `livechat/users/agent/${_id}`); const setModal = useSetModal(); const dispatchToastMessage = useToastMessageDispatch(); @@ -21,17 +26,17 @@ function RemoveAgentButton({ _id, reload }) { const handleDelete = useMutableCallback((e) => { e.stopPropagation(); - const onDeleteAgent = async () => { + const onDeleteAgent = async (): Promise => { try { await handleRemoveClick(); dispatchToastMessage({ type: 'success', message: t('Agent_removed') }); } catch (error) { - dispatchToastMessage({ type: 'error', message: error }); + dispatchToastMessage({ type: 'error', message: String(error) }); } setModal(); }; - setModal( setModal()} confirmText={t('Delete')} />); + setModal( setModal()} confirmText={t('Delete')} />); }); return ( @@ -41,6 +46,6 @@ function RemoveAgentButton({ _id, reload }) { ); -} +}; export default RemoveAgentButton; diff --git a/apps/meteor/client/views/omnichannel/analytics/InterchangeableChart.js b/apps/meteor/client/views/omnichannel/analytics/InterchangeableChart.js index d6d369a5ad783..59c2cc3fadd3c 100644 --- a/apps/meteor/client/views/omnichannel/analytics/InterchangeableChart.js +++ b/apps/meteor/client/views/omnichannel/analytics/InterchangeableChart.js @@ -3,7 +3,7 @@ import { useToastMessageDispatch, useMethod, useTranslation } from '@rocket.chat import React, { useRef, useEffect } from 'react'; import { drawLineChart } from '../../../../app/livechat/client/lib/chartHandler'; -import { secondsToHHMMSS } from '../../../../app/utils/lib/timeConverter'; +import { secondsToHHMMSS } from '../../../../lib/utils/secondsToHHMMSS'; import Chart from '../realTimeMonitoring/charts/Chart'; const getChartTooltips = (chartName) => { diff --git a/apps/meteor/client/views/omnichannel/installation/Installation.js b/apps/meteor/client/views/omnichannel/installation/Installation.tsx similarity index 87% rename from apps/meteor/client/views/omnichannel/installation/Installation.js rename to apps/meteor/client/views/omnichannel/installation/Installation.tsx index 9d203fcde090a..54998c7e575e8 100644 --- a/apps/meteor/client/views/omnichannel/installation/Installation.js +++ b/apps/meteor/client/views/omnichannel/installation/Installation.tsx @@ -1,16 +1,16 @@ import { Box } from '@rocket.chat/fuselage'; import { useSetting, useTranslation } from '@rocket.chat/ui-contexts'; -import React from 'react'; +import React, { ReactElement } from 'react'; import Page from '../../../components/Page'; import RawText from '../../../components/RawText'; import TextCopy from '../../../components/TextCopy'; import Wrapper from './Wrapper'; -const Installation = () => { +const Installation = (): ReactElement => { const t = useTranslation(); - - const siteUrl = useSetting('Site_Url')?.replace(/\/$/, ''); + const setting = useSetting('Site_Url') as string; + const siteUrl = setting?.replace(/\/$/, ''); const installString = `