From a7f5577f7d3a0e3fda70021d8fd53626a9ec7a24 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 30 Dec 2019 10:40:29 -0300 Subject: [PATCH 001/141] Bump version to 2.5.0-develop --- .docker/Dockerfile.rhel | 2 +- app/utils/rocketchat.info | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index f6dbe409cfc6c..03ad77912684b 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 2.4.0 +ENV RC_VERSION 2.5.0-develop MAINTAINER buildmaster@rocket.chat diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index c36401de16739..40e588b24f098 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "2.4.0" + "version": "2.5.0-develop" } diff --git a/package.json b/package.json index c68f2a57eac10..82625d5d864de 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "2.4.0", + "version": "2.5.0-develop", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 4bdcb30ab700f163e286d4cb01920020233cb77f Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Tue, 31 Dec 2019 14:06:16 -0300 Subject: [PATCH 002/141] [FIX] api-bypass-rate-limiter permission was not working (#16080) --- app/api/server/api.js | 10 +++++----- app/integrations/server/api/api.js | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/api/server/api.js b/app/api/server/api.js index dd4125e366432..ed7f413dda848 100644 --- a/app/api/server/api.js +++ b/app/api/server/api.js @@ -179,15 +179,15 @@ export class APIClass extends Restivus { return rateLimiterDictionary[route]; } - shouldVerifyRateLimit(route) { + shouldVerifyRateLimit(route, userId) { return rateLimiterDictionary.hasOwnProperty(route) && settings.get('API_Enable_Rate_Limiter') === true && (process.env.NODE_ENV !== 'development' || settings.get('API_Enable_Rate_Limiter_Dev') === true) - && !(this.userId && hasPermission(this.userId, 'api-bypass-rate-limit')); + && !(userId && hasPermission(userId, 'api-bypass-rate-limit')); } - enforceRateLimit(objectForRateLimitMatch, request, response) { - if (!this.shouldVerifyRateLimit(objectForRateLimitMatch.route)) { + enforceRateLimit(objectForRateLimitMatch, request, response, userId) { + if (!this.shouldVerifyRateLimit(objectForRateLimitMatch.route, userId)) { return; } @@ -321,7 +321,7 @@ export class APIClass extends Restivus { }; try { - api.enforceRateLimit(objectForRateLimitMatch, this.request, this.response); + api.enforceRateLimit(objectForRateLimitMatch, this.request, this.response, this.userId); if (shouldVerifyPermissions && (!this.userId || !hasAllPermission(this.userId, options.permissionsRequired))) { throw new Meteor.Error('error-unauthorized', 'User does not have the permissions required for this action', { diff --git a/app/integrations/server/api/api.js b/app/integrations/server/api/api.js index f645ea574e7b9..db79dc0943bdf 100644 --- a/app/integrations/server/api/api.js +++ b/app/integrations/server/api/api.js @@ -333,7 +333,7 @@ class WebHookAPI extends APIClass { There is only one generic route propagated to Restivus which has URL-path-parameters for the integration and the token. Since the rate-limiter operates on absolute routes, we need to add a limiter to the absolute url before we can validate it */ - enforceRateLimit(objectForRateLimitMatch, request, response) { + enforceRateLimit(objectForRateLimitMatch, request, response, userId) { const { method, url } = request; const route = url.replace(`/${ this.apiPath }`, ''); const nameRoute = this.getFullRouteName(route, [method.toLowerCase()]); @@ -354,7 +354,7 @@ class WebHookAPI extends APIClass { const integrationForRateLimitMatch = objectForRateLimitMatch; integrationForRateLimitMatch.route = nameRoute; - super.enforceRateLimit(integrationForRateLimitMatch, request, response); + super.enforceRateLimit(integrationForRateLimitMatch, request, response, userId); } } From a9ae0bb47cb76d4cd32b600c663da0f21ea44b58 Mon Sep 17 00:00:00 2001 From: Maria Eduarda Cunha <42151808+mariaeduardacunha@users.noreply.github.com> Date: Thu, 2 Jan 2020 17:54:58 -0300 Subject: [PATCH 003/141] [FIX] Login change language button (#16085) --- app/ui-login/client/login/footer.js | 45 ++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/app/ui-login/client/login/footer.js b/app/ui-login/client/login/footer.js index 84001103b262f..b44d573f4cf68 100644 --- a/app/ui-login/client/login/footer.js +++ b/app/ui-login/client/login/footer.js @@ -5,24 +5,44 @@ import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import { settings } from '../../../settings'; -Template.loginFooter.onCreated(function() { - this.suggestedLanguage = new ReactiveVar(); +const filterLanguage = (language) => { + // Fix browsers having all-lowercase language settings eg. pt-br, en-us + const regex = /([a-z]{2,3})-([a-z]{2,4})/; + const matches = regex.exec(language); + if (matches) { + return `${ matches[1] }-${ matches[2].toUpperCase() }`; + } - this.suggestAnotherLanguageFor = (language) => { - const loadAndSetSuggestedLanguage = (language) => TAPi18n._loadLanguage(language) - .then(() => this.suggestedLanguage.set(language)); + return language; +}; - const serverLanguage = settings.get('Language'); +Template.loginFooter.onCreated(function() { + this.suggestedLanguage = new ReactiveVar(); - if (serverLanguage !== language) { - loadAndSetSuggestedLanguage(serverLanguage || 'en'); - } else if (!/^en/.test(language)) { - loadAndSetSuggestedLanguage('en'); - } else { - this.suggestedLanguage.set(undefined); + const loadAndSetSuggestedLanguage = async (language = 'en') => { + const lng = filterLanguage(language); + try { + await TAPi18n._loadLanguage(filterLanguage(lng)); + window.setLanguage(lng); + + const serverLanguage = filterLanguage(settings.get('Language')); + + if (serverLanguage !== lng) { + return serverLanguage; + } + if (serverLanguage !== 'en') { + return 'en'; + } + } catch (e) { + return null; } }; + this.suggestAnotherLanguageFor = async (language) => { + const suggest = await loadAndSetSuggestedLanguage(language); + this.suggestedLanguage.set(suggest); + }; + const currentLanguage = Meteor._localStorage.getItem('userLanguage'); this.suggestAnotherLanguageFor(currentLanguage); }); @@ -37,7 +57,6 @@ Template.loginFooter.helpers({ Template.loginFooter.events({ 'click button.js-switch-language'(e, t) { const language = t.suggestedLanguage.get(); - window.setLanguage(language); t.suggestAnotherLanguageFor(language); return false; }, From a082a50c3399e9f80823ad59240752e6ed6067e2 Mon Sep 17 00:00:00 2001 From: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Date: Mon, 6 Jan 2020 08:35:36 -0300 Subject: [PATCH 004/141] [FIX] Thread message icon overlapping text (#16083) --- app/theme/client/imports/general/base_old.css | 8 ++++++++ app/ui-message/client/messageThread.html | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/theme/client/imports/general/base_old.css b/app/theme/client/imports/general/base_old.css index a51b0f8431ea7..90ec2b53e5697 100644 --- a/app/theme/client/imports/general/base_old.css +++ b/app/theme/client/imports/general/base_old.css @@ -4843,6 +4843,14 @@ rc-old select, & .user.user-card-message { margin-left: -5px; } + + & .thread-icons--thread { + position: relative; + + left: 0; + + margin: 0 3px; + } } .rc-old .messages-box:not(.compact) .hide-avatars .message.sequential .info { diff --git a/app/ui-message/client/messageThread.html b/app/ui-message/client/messageThread.html index 1ce3cc6b10912..4b69ec8557839 100644 --- a/app/ui-message/client/messageThread.html +++ b/app/ui-message/client/messageThread.html @@ -1,6 +1,6 @@ diff --git a/app/ui-sidenav/client/sidebarItem.js b/app/ui-sidenav/client/sidebarItem.js index 5d7f0175d9511..d1eb0292ba6eb 100644 --- a/app/ui-sidenav/client/sidebarItem.js +++ b/app/ui-sidenav/client/sidebarItem.js @@ -201,6 +201,12 @@ Template.sidebarItem.events({ }); Template.sidebarItemIcon.helpers({ + uid() { + if (!this.rid) { + return this._id; + } + return this.rid.replace(this.u._id, ''); + }, isRoom() { return this.rid || this._id; }, diff --git a/app/ui-sidenav/client/userPresence.html b/app/ui-sidenav/client/userPresence.html new file mode 100644 index 0000000000000..28bfe5bc76511 --- /dev/null +++ b/app/ui-sidenav/client/userPresence.html @@ -0,0 +1 @@ + diff --git a/app/ui-sidenav/client/userPresence.js b/app/ui-sidenav/client/userPresence.js new file mode 100644 index 0000000000000..32501e8d92532 --- /dev/null +++ b/app/ui-sidenav/client/userPresence.js @@ -0,0 +1,87 @@ +import { Meteor } from 'meteor/meteor'; +// import { ReactiveVar } from 'meteor/reactive-var'; +import { Template } from 'meteor/templating'; +import { Tracker } from 'meteor/tracker'; +import _ from 'underscore'; +import mem from 'mem'; + +import { APIClient } from '../../utils/client'; +import { saveUser } from '../../../imports/startup/client/listenActiveUsers'; + +import './userPresence.html'; + +const data = new Map(); +const promises = new Map(); +const pending = new Map(); + +const getAll = _.debounce(async function getAll() { + const ids = Array.from(pending.keys()); + + if (ids.length === 0) { + return; + } + + const params = { + ids, + }; + + try { + const { + users, + } = await APIClient.v1.get('users.presence', params); + + users.forEach((user) => saveUser(user, true)); + + ids.forEach((id) => { + const { resolve } = promises.get(id); + resolve(); + }); + } catch (e) { + ids.forEach((id) => { + const { reject } = promises.get(id); + reject(); + }); + } +}, 1000); + +const get = mem(function get(id) { + const promise = pending.get(id) || new Promise((resolve, reject) => { + promises.set(id, { resolve, reject }); + }); + pending.set(id, promise); + return promise; +}); + +const options = { + threshold: 0.1, +}; + +let lastEntries = []; +const handleEntries = function(entries) { + lastEntries = entries.filter(({ isIntersecting }) => isIntersecting); + lastEntries.forEach(async (entry) => { + const { uid } = data.get(entry.target); + await get(uid); + pending.delete(uid); + }); + getAll(); +}; + +const observer = new IntersectionObserver(handleEntries, options); + +Tracker.autorun(() => { + if (!Meteor.userId() || !Meteor.status().connected) { + return Meteor.users.update({}, { $unset: { status: '' } }, { multi: true }); + } + mem.clear(get); + + for (const node of data.keys()) { + observer.unobserve(node); + observer.observe(node); + } +}); + +Template.userPresence.onRendered(function() { + data.set(this.firstNode, this.data); + observer.observe(this.firstNode); +}); diff --git a/app/ui/client/components/header/headerRoom.html b/app/ui/client/components/header/headerRoom.html index 7cd0b5a2e1bb1..456547049feda 100644 --- a/app/ui/client/components/header/headerRoom.html +++ b/app/ui/client/components/header/headerRoom.html @@ -42,10 +42,10 @@ {{/unless}} {{#if isDirect}} - + {{# userPresence uid=uid}}
{{userStatusText}}
-
+
{{/userPresence}} {{else}} {{#if roomTopic}}{{{roomTopic}}}{{/if}} {{/if}} diff --git a/app/ui/client/components/header/headerRoom.js b/app/ui/client/components/header/headerRoom.js index 28f69ab444a0e..52f5360d7f5cd 100644 --- a/app/ui/client/components/header/headerRoom.js +++ b/app/ui/client/components/header/headerRoom.js @@ -32,7 +32,9 @@ Template.headerRoom.helpers({ isToggleFavoriteButtonChecked: () => Template.instance().state.get('favorite'), toggleFavoriteButtonIconLabel: () => (Template.instance().state.get('favorite') ? t('Unfavorite') : t('Favorite')), toggleFavoriteButtonIcon: () => (Template.instance().state.get('favorite') ? 'star-filled' : 'star'), - + uid() { + return this._id.replace(Meteor.userId(), ''); + }, back() { return Template.instance().data.back; }, diff --git a/imports/startup/client/listenActiveUsers.js b/imports/startup/client/listenActiveUsers.js index a559034926af2..105be406a228d 100644 --- a/imports/startup/client/listenActiveUsers.js +++ b/imports/startup/client/listenActiveUsers.js @@ -1,5 +1,4 @@ import { Meteor } from 'meteor/meteor'; -import { Tracker } from 'meteor/tracker'; import { debounce } from 'underscore'; import { Notifications } from '../../../app/notifications/client'; @@ -13,7 +12,7 @@ const STATUS_MAP = [ 'busy', ]; -const saveUser = (user, force = false) => { +export const saveUser = (user, force = false) => { // do not update my own user, my user's status will come from a subscription if (user._id === Meteor.userId()) { return; @@ -72,19 +71,6 @@ const getUsersPresence = debounce(async (isConnected) => { } }, 1000); -let wasConnected = false; -Tracker.autorun(() => { - if (!Meteor.userId() || !Meteor.status().connected) { - return; - } - - lastStatusChange = null; - - getUsersPresence(wasConnected); - - wasConnected = true; -}); - Meteor.startup(function() { Notifications.onLogged('user-status', ([_id, username, status, statusText]) => { // only set after first request completed From e6a8821a8d552e35718cc418bef89ff6429b6aa6 Mon Sep 17 00:00:00 2001 From: Marcos Spessatto Defendi Date: Tue, 4 Feb 2020 18:28:57 -0300 Subject: [PATCH 086/141] [FIX] Result of get avatar from url can be null (#16123) --- app/lib/server/functions/setUserAvatar.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/lib/server/functions/setUserAvatar.js b/app/lib/server/functions/setUserAvatar.js index 4e7ec6201c9bc..9cab632e239ac 100644 --- a/app/lib/server/functions/setUserAvatar.js +++ b/app/lib/server/functions/setUserAvatar.js @@ -17,6 +17,10 @@ export const setUserAvatar = function(user, dataURI, contentType, service) { try { result = HTTP.get(dataURI, { npmRequestOptions: { encoding: 'binary', rejectUnauthorized: false } }); + if (!result) { + console.log(`Not a valid response, from the avatar url: ${ dataURI }`); + throw new Meteor.Error('error-avatar-invalid-url', `Invalid avatar URL: ${ dataURI }`, { function: 'setUserAvatar', url: dataURI }); + } } catch (error) { if (!error.response || error.response.statusCode !== 404) { console.log(`Error while handling the setting of the avatar from a url (${ dataURI }) for ${ user.username }:`, error); @@ -26,12 +30,12 @@ export const setUserAvatar = function(user, dataURI, contentType, service) { if (result.statusCode !== 200) { console.log(`Not a valid response, ${ result.statusCode }, from the avatar url: ${ dataURI }`); - throw new Meteor.Error('error-avatar-invalid-url', `Invalid avatar URL: ${ dataURI }`, { function: 'RocketChat.setUserAvatar', url: dataURI }); + throw new Meteor.Error('error-avatar-invalid-url', `Invalid avatar URL: ${ dataURI }`, { function: 'setUserAvatar', url: dataURI }); } if (!/image\/.+/.test(result.headers['content-type'])) { console.log(`Not a valid content-type from the provided url, ${ result.headers['content-type'] }, from the avatar url: ${ dataURI }`); - throw new Meteor.Error('error-avatar-invalid-url', `Invalid avatar URL: ${ dataURI }`, { function: 'RocketChat.setUserAvatar', url: dataURI }); + throw new Meteor.Error('error-avatar-invalid-url', `Invalid avatar URL: ${ dataURI }`, { function: 'setUserAvatar', url: dataURI }); } encoding = 'binary'; From 193225433876f9ec17f011527957b1a7b86ae69b Mon Sep 17 00:00:00 2001 From: Douglas Gubert Date: Tue, 4 Feb 2020 18:42:01 -0300 Subject: [PATCH 087/141] [NEW] UiKit - Interactive UI elements for Rocket.Chat Apps (#16048) --- app/api/server/v1/commands.js | 35 +- app/apps/server/bridges/bridges.js | 6 + app/apps/server/bridges/commands.js | 9 +- app/apps/server/bridges/listeners.js | 11 + app/apps/server/bridges/uiInteraction.js | 13 + app/apps/server/communication/index.js | 11 +- app/apps/server/communication/uikit.js | 159 + app/apps/server/converters/messages.js | 2 + app/apps/server/orchestrator.js | 16 +- .../methods/executeSlashCommandPreview.js | 2 +- .../client/imports/components/messages.css | 8 + app/theme/client/imports/components/modal.css | 10 +- app/ui-message/client/ActionManager.js | 154 + app/ui-message/client/blocks/Blocks.html | 3 + app/ui-message/client/blocks/Blocks.js | 35 + .../client/blocks/ButtonElement.html | 3 + app/ui-message/client/blocks/MessageBlock.js | 164 + app/ui-message/client/blocks/ModalBlock.html | 3 + app/ui-message/client/blocks/ModalBlock.js | 103 + app/ui-message/client/blocks/TextBlock.html | 12 + app/ui-message/client/blocks/TextBlock.js | 5 + app/ui-message/client/blocks/index.js | 5 + app/ui-message/client/blocks/styles.css | 18 + app/ui-message/client/index.js | 1 + app/ui-message/client/message.html | 5 + app/ui-utils/client/lib/modal.html | 9 +- app/ui-utils/client/lib/modal.js | 244 +- app/ui/client/lib/chatMessages.js | 4 +- app/ui/client/views/app/room.js | 9 +- app/utils/lib/slashCommand.js | 11 +- .../settings/inputs/SelectSettingInput.js | 15 +- package-lock.json | 17864 +++++++--------- package.json | 10 +- packages/rocketchat-i18n/i18n/pt-BR.i18n.json | 1 + 34 files changed, 8582 insertions(+), 10378 deletions(-) create mode 100644 app/apps/server/bridges/uiInteraction.js create mode 100644 app/apps/server/communication/uikit.js create mode 100644 app/ui-message/client/ActionManager.js create mode 100644 app/ui-message/client/blocks/Blocks.html create mode 100644 app/ui-message/client/blocks/Blocks.js create mode 100644 app/ui-message/client/blocks/ButtonElement.html create mode 100644 app/ui-message/client/blocks/MessageBlock.js create mode 100644 app/ui-message/client/blocks/ModalBlock.html create mode 100644 app/ui-message/client/blocks/ModalBlock.js create mode 100644 app/ui-message/client/blocks/TextBlock.html create mode 100644 app/ui-message/client/blocks/TextBlock.js create mode 100644 app/ui-message/client/blocks/index.js create mode 100644 app/ui-message/client/blocks/styles.css diff --git a/app/api/server/v1/commands.js b/app/api/server/v1/commands.js index 5657bbb2d7410..3a46a677e4f99 100644 --- a/app/api/server/v1/commands.js +++ b/app/api/server/v1/commands.js @@ -51,7 +51,7 @@ API.v1.addRoute('commands.list', { authRequired: true }, { }, }); -// Expects a body of: { command: 'gimme', params: 'any string value', roomId: 'value' } +// Expects a body of: { command: 'gimme', params: 'any string value', roomId: 'value', triggerId: 'value' } API.v1.addRoute('commands.run', { authRequired: true }, { post() { const body = this.bodyParams; @@ -74,7 +74,7 @@ API.v1.addRoute('commands.run', { authRequired: true }, { } const cmd = body.command.toLowerCase(); - if (!slashCommands.commands[body.command.toLowerCase()]) { + if (!slashCommands.commands[cmd]) { return API.v1.failure('The command provided does not exist (or is disabled).'); } @@ -96,7 +96,9 @@ API.v1.addRoute('commands.run', { authRequired: true }, { message.tmid = body.tmid; } - const result = Meteor.runAsUser(user._id, () => slashCommands.run(cmd, params, message)); + const { triggerId } = body; + + const result = Meteor.runAsUser(user._id, () => slashCommands.run(cmd, params, message, triggerId)); return API.v1.success({ result }); }, @@ -137,7 +139,7 @@ API.v1.addRoute('commands.preview', { authRequired: true }, { return API.v1.success({ preview }); }, - // Expects a body format of: { command: 'giphy', params: 'mine', roomId: 'value', previewItem: { id: 'sadf8' type: 'image', value: 'https://dev.null/gif } } + // Expects a body format of: { command: 'giphy', params: 'mine', roomId: 'value', tmid: 'value', triggerId: 'value', previewItem: { id: 'sadf8' type: 'image', value: 'https://dev.null/gif' } } post() { const body = this.bodyParams; const user = this.getLoggedInUser(); @@ -162,6 +164,14 @@ API.v1.addRoute('commands.preview', { authRequired: true }, { return API.v1.failure('The preview item being executed is in the wrong format.'); } + if (body.tmid && typeof body.tmid !== 'string') { + return API.v1.failure('The tmid parameter when provided must be a string.'); + } + + if (body.triggerId && typeof body.triggerId !== 'string') { + return API.v1.failure('The triggerId parameter when provided must be a string.'); + } + const cmd = body.command.toLowerCase(); if (!slashCommands.commands[cmd]) { return API.v1.failure('The command provided does not exist (or is disabled).'); @@ -171,9 +181,24 @@ API.v1.addRoute('commands.preview', { authRequired: true }, { Meteor.call('canAccessRoom', body.roomId, user._id); const params = body.params ? body.params : ''; + const message = { + rid: body.roomId, + }; + + if (body.tmid) { + const thread = Messages.findOneById(body.tmid); + if (!thread || thread.rid !== body.roomId) { + return API.v1.failure('Invalid thread.'); + } + message.tmid = body.tmid; + } Meteor.runAsUser(user._id, () => { - Meteor.call('executeSlashCommandPreview', { cmd, params, msg: { rid: body.roomId } }, body.previewItem); + Meteor.call('executeSlashCommandPreview', { + cmd, + params, + msg: { rid: body.roomId, tmid: body.tmid }, + }, body.previewItem, body.triggerId); }); return API.v1.success(); diff --git a/app/apps/server/bridges/bridges.js b/app/apps/server/bridges/bridges.js index 6298e94980005..c495332e6d1b7 100644 --- a/app/apps/server/bridges/bridges.js +++ b/app/apps/server/bridges/bridges.js @@ -15,6 +15,7 @@ import { AppSettingBridge } from './settings'; import { AppUserBridge } from './users'; import { AppLivechatBridge } from './livechat'; import { AppUploadBridge } from './uploads'; +import { UiInteractionBridge } from './uiInteraction'; export class RealAppBridges extends AppBridges { constructor(orch) { @@ -35,6 +36,7 @@ export class RealAppBridges extends AppBridges { this._userBridge = new AppUserBridge(orch); this._livechatBridge = new AppLivechatBridge(orch); this._uploadBridge = new AppUploadBridge(orch); + this._uiInteractionBridge = new UiInteractionBridge(orch); } getCommandBridge() { @@ -96,4 +98,8 @@ export class RealAppBridges extends AppBridges { getUploadBridge() { return this._uploadBridge; } + + getUiInteractionBridge() { + return this._uiInteractionBridge; + } } diff --git a/app/apps/server/bridges/commands.js b/app/apps/server/bridges/commands.js index aab50a25bc293..87ef7cdd68f07 100644 --- a/app/apps/server/bridges/commands.js +++ b/app/apps/server/bridges/commands.js @@ -91,6 +91,7 @@ export class AppCommandsBridge { this._verifyCommand(command); const item = { + appId, command: command.command.toLowerCase(), params: Utilities.getI18nKeyForApp(command.i18nParamsExample, appId), description: Utilities.getI18nKeyForApp(command.i18nDescription, appId), @@ -145,7 +146,7 @@ export class AppCommandsBridge { } } - _appCommandExecutor(command, parameters, message) { + _appCommandExecutor(command, parameters, message, triggerId) { const user = this.orch.getConverters().get('users').convertById(Meteor.userId()); const room = this.orch.getConverters().get('rooms').convertById(message.rid); const threadId = message.tmid; @@ -156,7 +157,9 @@ export class AppCommandsBridge { Object.freeze(room), Object.freeze(params), threadId, + triggerId, ); + Promise.await(this.orch.getManager().getCommandManager().executeCommand(command, context)); } @@ -175,7 +178,7 @@ export class AppCommandsBridge { return Promise.await(this.orch.getManager().getCommandManager().getPreviews(command, context)); } - _appCommandPreviewExecutor(command, parameters, message, preview) { + _appCommandPreviewExecutor(command, parameters, message, preview, triggerId) { const user = this.orch.getConverters().get('users').convertById(Meteor.userId()); const room = this.orch.getConverters().get('rooms').convertById(message.rid); const threadId = message.tmid; @@ -186,7 +189,9 @@ export class AppCommandsBridge { Object.freeze(room), Object.freeze(params), threadId, + triggerId, ); + Promise.await(this.orch.getManager().getCommandManager().executePreview(command, preview, context)); } } diff --git a/app/apps/server/bridges/listeners.js b/app/apps/server/bridges/listeners.js index 01c039d62e64c..88bdc7c499c47 100644 --- a/app/apps/server/bridges/listeners.js +++ b/app/apps/server/bridges/listeners.js @@ -37,6 +37,17 @@ export class AppListenerBridge { // } } + async uiKitInteractionEvent(inte, action) { + return this.orch.getManager().getListenerManager().executeListener(inte, action); + + // try { + + // } catch (e) { + // this.orch.debugLog(`${ e.name }: ${ e.message }`); + // this.orch.debugLog(e.stack); + // } + } + async livechatEvent(inte, room) { const rm = this.orch.getConverters().get('rooms').convertRoom(room); const result = await this.orch.getManager().getListenerManager().executeListener(inte, rm); diff --git a/app/apps/server/bridges/uiInteraction.js b/app/apps/server/bridges/uiInteraction.js new file mode 100644 index 0000000000000..6acddadd1ca55 --- /dev/null +++ b/app/apps/server/bridges/uiInteraction.js @@ -0,0 +1,13 @@ +import { Notifications } from '../../../notifications/server'; + +export class UiInteractionBridge { + constructor(orch) { + this.orch = orch; + } + + async notifyUser(user, interaction, appId) { + this.orch.debugLog(`The App ${ appId } is sending an interaction to user.`); + + Notifications.notifyUser(user.id, 'uiInteraction', interaction); + } +} diff --git a/app/apps/server/communication/index.js b/app/apps/server/communication/index.js index 525d6ab56cc2c..251fec9e06e00 100644 --- a/app/apps/server/communication/index.js +++ b/app/apps/server/communication/index.js @@ -1,11 +1,6 @@ import { AppMethods } from './methods'; import { AppsRestApi } from './rest'; -import { AppEvents, AppServerNotifier, AppServerListener } from './websockets'; +import { AppUIKitInteractionApi } from './uikit'; +import { AppEvents, AppServerListener, AppServerNotifier } from './websockets'; -export { - AppMethods, - AppsRestApi, - AppEvents, - AppServerNotifier, - AppServerListener, -}; +export { AppUIKitInteractionApi, AppMethods, AppsRestApi, AppEvents, AppServerNotifier, AppServerListener }; diff --git a/app/apps/server/communication/uikit.js b/app/apps/server/communication/uikit.js new file mode 100644 index 0000000000000..cae3e6eaf2888 --- /dev/null +++ b/app/apps/server/communication/uikit.js @@ -0,0 +1,159 @@ +import express from 'express'; +import { WebApp } from 'meteor/webapp'; +import { UIKitIncomingInteractionType } from '@rocket.chat/apps-engine/definition/uikit'; + +import { Users } from '../../../models/server'; + +const apiServer = express(); + +apiServer.disable('x-powered-by'); + +WebApp.connectHandlers.use(apiServer); + +// eslint-disable-next-line new-cap +const router = express.Router(); + +const unauthorized = (res) => + res.status(401).send({ + status: 'error', + message: 'You must be logged in to do this.', + }); + +router.use((req, res, next) => { + const { + 'x-user-id': userId, + 'x-auth-token': authToken, + } = req.headers; + + if (!userId || !authToken) { + return unauthorized(res); + } + + const user = Users.findOneByIdAndLoginToken(userId, authToken); + if (!user) { + return unauthorized(res); + } + + req.user = user; + req.userId = user._id; + + next(); +}); + +apiServer.use('/api/apps/ui.interaction/', router); + +export class AppUIKitInteractionApi { + constructor(orch) { + this.orch = orch; + + router.post('/:appId', (req, res) => { + const { + appId, + } = req.params; + + const { + type, + } = req.body; + + switch (type) { + case UIKitIncomingInteractionType.BLOCK: { + const { + type, + actionId, + triggerId, + mid, + rid, + payload, + } = req.body; + + const room = this.orch.getConverters().get('rooms').convertById(rid); + const user = this.orch.getConverters().get('users').convertToApp(req.user); + const message = mid && this.orch.getConverters().get('messages').convertById(mid); + + const action = { + type, + appId, + actionId, + message, + triggerId, + payload, + user, + room, + }; + + try { + const result = Promise.await(this.orch.getBridges().getListenerBridge().uiKitInteractionEvent('IUIKitInteractionHandler', action)); + + res.send(result); + } catch (e) { + res.status(500).send(e.message); + } + break; + } + + case UIKitIncomingInteractionType.VIEW_CLOSED: { + const { + type, + actionId, + view, + isCleared, + } = req.body; + + const user = this.orch.getConverters().get('users').convertToApp(req.user); + + const action = { + type, + appId, + actionId, + user, + payload: { + view, + isCleared, + }, + }; + + try { + Promise.await(this.orch.getBridges().getListenerBridge().uiKitInteractionEvent('IUIKitInteractionHandler', action)); + + res.send(200); + } catch (e) { + console.log(e); + res.status(500).send(e.message); + } + break; + } + + case UIKitIncomingInteractionType.VIEW_SUBMIT: { + const { + type, + actionId, + triggerId, + payload, + } = req.body; + + const user = this.orch.getConverters().get('users').convertToApp(req.user); + + const action = { + type, + appId, + actionId, + triggerId, + payload, + user, + }; + + try { + const result = Promise.await(this.orch.getBridges().getListenerBridge().uiKitInteractionEvent('IUIKitInteractionHandler', action)); + + res.send(result); + } catch (e) { + res.status(500).send(e.message); + } + break; + } + } + + // TODO: validate payloads per type + }); + } +} diff --git a/app/apps/server/converters/messages.js b/app/apps/server/converters/messages.js index 9d7afc4289413..0da7cbd768d20 100644 --- a/app/apps/server/converters/messages.js +++ b/app/apps/server/converters/messages.js @@ -35,6 +35,7 @@ export class AppMessagesConverter { customFields: 'customFields', groupable: 'groupable', token: 'token', + blocks: 'blocks', room: (message) => { const result = this.orch.getConverters().get('rooms').convertById(message.rid); delete message.rid; @@ -135,6 +136,7 @@ export class AppMessagesConverter { attachments, reactions: message.reactions, parseUrls: message.parseUrls, + blocks: message.blocks, token: message.token, }; diff --git a/app/apps/server/orchestrator.js b/app/apps/server/orchestrator.js index 84c71af4fa0f4..6f2a45bc01baf 100644 --- a/app/apps/server/orchestrator.js +++ b/app/apps/server/orchestrator.js @@ -1,16 +1,17 @@ import { Meteor } from 'meteor/meteor'; import { AppManager } from '@rocket.chat/apps-engine/server/AppManager'; +import { Logger } from '../../logger'; +import { AppsLogsModel, AppsModel, AppsPersistenceModel, Permissions } from '../../models'; +import { settings } from '../../settings'; import { RealAppBridges } from './bridges'; -import { AppMethods, AppsRestApi, AppServerNotifier } from './communication'; +import { AppMethods, AppServerNotifier, AppsRestApi, AppUIKitInteractionApi } from './communication'; import { AppMessagesConverter, AppRoomsConverter, AppSettingsConverter, AppUsersConverter } from './converters'; -import { AppRealStorage, AppRealLogsStorage } from './storage'; -import { settings } from '../../settings'; -import { Permissions, AppsLogsModel, AppsModel, AppsPersistenceModel } from '../../models'; -import { Logger } from '../../logger'; -import { AppVisitorsConverter } from './converters/visitors'; -import { AppUploadsConverter } from './converters/uploads'; import { AppDepartmentsConverter } from './converters/departments'; +import { AppUploadsConverter } from './converters/uploads'; +import { AppVisitorsConverter } from './converters/visitors'; +import { AppRealLogsStorage, AppRealStorage } from './storage'; + class AppServerOrchestrator { constructor() { @@ -46,6 +47,7 @@ class AppServerOrchestrator { this._communicators.set('methods', new AppMethods(this)); this._communicators.set('notifier', new AppServerNotifier(this)); this._communicators.set('restapi', new AppsRestApi(this, this._manager)); + this._communicators.set('uikit', new AppUIKitInteractionApi(this)); this._isInitialized = true; } diff --git a/app/lib/server/methods/executeSlashCommandPreview.js b/app/lib/server/methods/executeSlashCommandPreview.js index 887721dcfb113..52f2c18527a5c 100644 --- a/app/lib/server/methods/executeSlashCommandPreview.js +++ b/app/lib/server/methods/executeSlashCommandPreview.js @@ -29,6 +29,6 @@ Meteor.methods({ }); } - return slashCommands.executePreview(command.cmd, command.params, command.msg, preview); + return slashCommands.executePreview(command.cmd, command.params, command.msg, preview, command.triggerId); }, }); diff --git a/app/theme/client/imports/components/messages.css b/app/theme/client/imports/components/messages.css index ed417dd3ba09b..ffb10d16430db 100644 --- a/app/theme/client/imports/components/messages.css +++ b/app/theme/client/imports/components/messages.css @@ -44,6 +44,14 @@ } } +.rc-ui-kit { + display: inline-block; + + width: 100%; + + max-width: 400px; +} + .message { & .toggle-hidden { display: none; diff --git a/app/theme/client/imports/components/modal.css b/app/theme/client/imports/components/modal.css index 23a849554592b..50cdb198b0723 100644 --- a/app/theme/client/imports/components/modal.css +++ b/app/theme/client/imports/components/modal.css @@ -7,7 +7,7 @@ height: auto; max-height: 90%; - padding: 1.5rem; + padding: 1rem; animation: dropdown-show 0.3s cubic-bezier(0.45, 0.05, 0.55, 0.95); @@ -143,19 +143,13 @@ flex: 0 0 auto; - padding: 16px; + padding: 1rem; justify-content: space-between; & > .rc-button { margin: 0; } - - &--empty { - padding: 0; - - background: transparent; - } } } diff --git a/app/ui-message/client/ActionManager.js b/app/ui-message/client/ActionManager.js new file mode 100644 index 0000000000000..8d35f78a18cf6 --- /dev/null +++ b/app/ui-message/client/ActionManager.js @@ -0,0 +1,154 @@ +import { UIKitInteractionType, UIKitIncomingInteractionType } from '@rocket.chat/apps-engine/definition/uikit'; +import { Meteor } from 'meteor/meteor'; +import { Random } from 'meteor/random'; +import EventEmitter from 'wolfy87-eventemitter'; + +import Notifications from '../../notifications/client/lib/Notifications'; +import { CachedCollectionManager } from '../../ui-cached-collection'; +import { modal } from '../../ui-utils/client/lib/modal'; +import { APIClient } from '../../utils'; + +const events = new EventEmitter(); + +export const on = (...args) => { + events.on(...args); +}; + +export const off = (...args) => { + events.off(...args); +}; + +const TRIGGER_TIMEOUT = 5000; + +const triggersId = new Map(); + +const instances = new Map(); + +const invalidateTriggerId = (id) => { + const appId = triggersId.get(id); + triggersId.delete(id); + return appId; +}; + +export const generateTriggerId = (appId) => { + const triggerId = Random.id(); + triggersId.set(triggerId, appId); + setTimeout(invalidateTriggerId, TRIGGER_TIMEOUT, triggerId); + return triggerId; +}; + +const handlePayloadUserInteraction = (type, { /* appId,*/ triggerId, ...data }) => { + if (!triggersId.has(triggerId)) { + return; + } + const appId = invalidateTriggerId(triggerId); + if (!appId) { + return; + } + + const { view } = data; + let { viewId } = data; + + if (view && view.id) { + viewId = view.id; + } + + if (!viewId) { + return; + } + + if ([UIKitInteractionType.ERRORS].includes(type)) { + events.emit(viewId, { + type, + triggerId, + viewId, + appId, + ...data, + }); + return UIKitInteractionType.ERRORS; + } + + if ([UIKitInteractionType.MODAL_UPDATE].includes(type)) { + events.emit(viewId, { + type, + triggerId, + viewId, + appId, + ...data, + }); + return UIKitInteractionType.MODAL_UPDATE; + } + + if ([UIKitInteractionType.MODAL_OPEN].includes(type)) { + const instance = modal.push({ + template: 'ModalBlock', + modifier: 'uikit', + closeOnEscape: false, + data: { + triggerId, + viewId, + appId, + ...data, + }, + }); + instances.set(viewId, instance); + return UIKitInteractionType.MODAL_OPEN; + } + + return UIKitInteractionType.MODAL_ClOSE; +}; + +export const triggerAction = async ({ type, actionId, appId, rid, mid, viewId, ...rest }) => new Promise(async (resolve, reject) => { + const triggerId = generateTriggerId(appId); + + const payload = rest.payload || rest; + + setTimeout(reject, TRIGGER_TIMEOUT, triggerId); + + const { type: interactionType, ...data } = await APIClient.post( + `apps/ui.interaction/${ appId }`, + { type, actionId, payload, mid, rid, triggerId, viewId }, + ); + + return resolve(handlePayloadUserInteraction(interactionType, data)); +}); + +export const triggerBlockAction = (options) => triggerAction({ type: UIKitIncomingInteractionType.BLOCK, ...options }); +export const triggerSubmitView = async ({ viewId, ...options }) => { + const close = () => { + const instance = instances.get(viewId); + + if (instance) { + instance.close(); + instances.delete(viewId); + } + }; + + try { + const result = await triggerAction({ type: UIKitIncomingInteractionType.VIEW_SUBMIT, viewId, ...options }); + if (!result || UIKitInteractionType.MODAL_CLOSE === result) { + close(); + } + } catch { + close(); + } +}; +export const triggerCancel = async ({ view, ...options }) => { + const instance = instances.get(view.id); + try { + await triggerAction({ type: UIKitIncomingInteractionType.VIEW_CLOSED, view, ...options }); + } finally { + if (instance) { + instance.close(); + instances.delete(view.id); + } + } +}; + +Meteor.startup(() => + CachedCollectionManager.onLogin(() => + Notifications.onUser('uiInteraction', ({ type, ...data }) => { + handlePayloadUserInteraction(type, data); + }), + ), +); diff --git a/app/ui-message/client/blocks/Blocks.html b/app/ui-message/client/blocks/Blocks.html new file mode 100644 index 0000000000000..0d3495e14c53c --- /dev/null +++ b/app/ui-message/client/blocks/Blocks.html @@ -0,0 +1,3 @@ + diff --git a/app/ui-message/client/blocks/Blocks.js b/app/ui-message/client/blocks/Blocks.js new file mode 100644 index 0000000000000..28f6c67366677 --- /dev/null +++ b/app/ui-message/client/blocks/Blocks.js @@ -0,0 +1,35 @@ +import { Template } from 'meteor/templating'; +import { ReactiveVar } from 'meteor/reactive-var'; + +import { messageBlockWithContext } from './MessageBlock'; +import './Blocks.html'; +import * as ActionManager from '../ActionManager'; + +Template.Blocks.onRendered(async function() { + const React = await import('react'); + const ReactDOM = await import('react-dom'); + const state = new ReactiveVar(); + this.autorun(() => { + state.set(Template.currentData()); + }); + + ReactDOM.render( + React.createElement(messageBlockWithContext({ + action: (options) => { + const { actionId, value, blockId, mid = this.data.mid } = options; + ActionManager.triggerBlockAction({ actionId, appId: this.data.blocks[1].appId, value, blockId, rid: this.data.rid, mid }); + }, + // state: alert, + appId: this.data.appId, + rid: this.data.rid, + }), { data: () => state.get() }), + this.firstNode, + ); + const event = new Event('rendered'); + this.firstNode.dispatchEvent(event); +}); + +Template.Blocks.onDestroyed(async function() { + const ReactDOM = await import('react-dom'); + this.firstNode && ReactDOM.unmountComponentAtNode(this.firstNode); +}); diff --git a/app/ui-message/client/blocks/ButtonElement.html b/app/ui-message/client/blocks/ButtonElement.html new file mode 100644 index 0000000000000..5711982a2e6ef --- /dev/null +++ b/app/ui-message/client/blocks/ButtonElement.html @@ -0,0 +1,3 @@ + diff --git a/app/ui-message/client/blocks/MessageBlock.js b/app/ui-message/client/blocks/MessageBlock.js new file mode 100644 index 0000000000000..d3eb6a797e7fa --- /dev/null +++ b/app/ui-message/client/blocks/MessageBlock.js @@ -0,0 +1,164 @@ +import React, { useRef, useEffect, useCallback, useMemo } from 'react'; +import { UiKitMessage as uiKitMessage, kitContext, UiKitModal as uiKitModal, messageParser, modalParser, UiKitComponent } from '@rocket.chat/fuselage-ui-kit'; +import { uiKitText } from '@rocket.chat/ui-kit'; +import { Modal, AnimatedVisibility, ButtonGroup, Button, Box } from '@rocket.chat/fuselage'; +import { useUniqueId } from '@rocket.chat/fuselage-hooks'; + +import { renderMessageBody } from '../../../ui-utils/client'; +import { useReactiveValue } from '../../../../client/hooks/useReactiveValue'; + + +const focusableElementsString = 'a[href]:not([tabindex="-1"]), area[href]:not([tabindex="-1"]), input:not([disabled]):not([tabindex="-1"]), select:not([disabled]):not([tabindex="-1"]), textarea:not([disabled]):not([tabindex="-1"]), button:not([disabled]):not([tabindex="-1"]), iframe, object, embed, [tabindex]:not([tabindex="-1"]), [contenteditable]'; + +messageParser.text = ({ text, type } = {}) => { + if (type !== 'mrkdwn') { + return text; + } + + return ; +}; + +modalParser.text = messageParser.text; + +const contextDefault = { + action: console.log, + state: (data) => { + console.log('state', data); + }, +}; +export const messageBlockWithContext = (context) => (props) => { + const data = useReactiveValue(props.data); + return ( + + {uiKitMessage(data.blocks)} + + ); +}; + +const textParser = uiKitText(new class { + plain_text({ text }) { + return text; + } + + text({ text }) { + return text; + } +}()); +const thumb = 'data:image/gif;base64,R0lGODlhAQABAIAAAMLCwgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=='; + +// https://www.w3.org/TR/wai-aria-practices/examples/dialog-modal/dialog.html + +export const modalBlockWithContext = ({ + view: { + title, + close, + submit, + }, + onSubmit, + onClose, + onCancel, + ...context +}) => (props) => { + const id = `modal_id_${ useUniqueId() }`; + + const { view, ...data } = useReactiveValue(props.data); + const ref = useRef(); + + // Auto focus + useEffect(() => ref.current && ref.current.querySelector(focusableElementsString).focus(), [ref.current]); + // save fovus to restore after close + const previousFocus = useMemo(() => document.activeElement, []); + // restore the focus after the component unmount + useEffect(() => () => previousFocus && previousFocus.focus(), []); + // Handle Tab, Shift + Tab, Enter and Escape + const handleKeyUp = useCallback((event) => { + if (event.keyCode === 13) { // ENTER + return onSubmit(); + } + + if (event.keyCode === 27) { // ESC + event.stopPropagation(); + event.preventDefault(); + onClose(); + return false; + } + + if (event.keyCode === 9) { // TAB + const elements = Array.from(ref.current.querySelectorAll(focusableElementsString)); + const [first] = elements; + const last = elements.pop(); + + if (!ref.current.contains(document.activeElement)) { + return first.focus(); + } + + if (event.shiftKey) { + if (!first || first === document.activeElement) { + last.focus(); + event.stopPropagation(); + event.preventDefault(); + } + return; + } + + if (!last || last === document.activeElement) { + first.focus(); + event.stopPropagation(); + event.preventDefault(); + } + } + }, [onSubmit]); + // Clean the events + useEffect(() => { + const close = (e) => { + e.preventDefault(); + e.stopPropagation(); + onClose(); + return false; + }; + const element = document.querySelector('.rc-modal-wrapper'); + document.addEventListener('keydown', handleKeyUp); + element.addEventListener('click', close); + return () => { + document.removeEventListener('keydown', handleKeyUp); + element.removeEventListener('click', close); + }; + }, handleKeyUp); + + return ( + + + + + {/* */} + + {textParser([title])} + + + + + + + + + + + + + + + + + ); +}; + +export const MessageBlock = ({ blocks }, context = contextDefault) => ( + + {uiKitMessage(blocks)} + +); diff --git a/app/ui-message/client/blocks/ModalBlock.html b/app/ui-message/client/blocks/ModalBlock.html new file mode 100644 index 0000000000000..15f1f6f715f3d --- /dev/null +++ b/app/ui-message/client/blocks/ModalBlock.html @@ -0,0 +1,3 @@ + diff --git a/app/ui-message/client/blocks/ModalBlock.js b/app/ui-message/client/blocks/ModalBlock.js new file mode 100644 index 0000000000000..83584c2e15e36 --- /dev/null +++ b/app/ui-message/client/blocks/ModalBlock.js @@ -0,0 +1,103 @@ +import { Template } from 'meteor/templating'; +import { ReactiveDict } from 'meteor/reactive-dict'; +import { ReactiveVar } from 'meteor/reactive-var'; + +import { modalBlockWithContext } from './MessageBlock'; +import './ModalBlock.html'; +import * as ActionManager from '../ActionManager'; + +Template.ModalBlock.onRendered(async function() { + const React = await import('react'); + const ReactDOM = await import('react-dom'); + const state = new ReactiveVar(); + + const { viewId, appId } = this.data; + + this.autorun(() => { + state.set(Template.currentData()); + }); + + const handleUpdate = ({ type, ...data }) => { + if (type === 'errors') { + return state.set({ ...state.get(), errors: data.errors }); + } + return state.set(data); + }; + + this.cancel = () => { + ActionManager.off(viewId, handleUpdate); + }; + + this.node = this.find('.js-modal-block').parentElement; + ActionManager.on(viewId, handleUpdate); + + const filterInputFields = ({ type, element }) => type === 'input' && element.initialValue; + const mapElementToState = ({ element, blockId }) => [element.actionId, { value: element.initialValue, blockId }]; + const groupStateByBlockIdMap = (obj, [key, { blockId, value }]) => { + obj[blockId] = obj[blockId] || {}; + obj[blockId][key] = value; + return obj; + }; + const groupStateByBlockId = (obj) => Object.entries(obj).reduce(groupStateByBlockIdMap, {}); + + this.state = new ReactiveDict(Object.fromEntries(this.data.view.blocks.filter(filterInputFields).map(mapElementToState))); + + ReactDOM.render( + React.createElement( + modalBlockWithContext({ + onCancel: () => ActionManager.triggerCancel({ + appId, + viewId, + view: { + ...this.data.view, + id: viewId, + state: groupStateByBlockId(this.state.all()), + }, + }), + onClose: () => ActionManager.triggerCancel({ + appId, + viewId, + view: { + ...this.data.view, + id: viewId, + state: groupStateByBlockId(this.state.all()), + }, + isCleared: true, + }), + onSubmit: () => ActionManager.triggerSubmitView({ + viewId, + appId, + payload: { + view: { + ...this.data.view, + id: viewId, + state: groupStateByBlockId(this.state.all()), + }, + }, + }), + action: ({ actionId, appId, value, blockId, mid = this.data.mid }) => { + ActionManager.triggerBlockAction({ + actionId, + appId, + value, + blockId, + mid, + }); + }, + state: ({ actionId, value, /* ,appId, */ blockId = 'default' }) => { + this.state.set(actionId, { + blockId, + value, + }); + }, + ...this.data, + }), + { data: () => state.get() }, + ), + this.node, + ); +}); +Template.ModalBlock.onDestroyed(async function() { + const ReactDOM = await import('react-dom'); + this.node && ReactDOM.unmountComponentAtNode(this.node); +}); diff --git a/app/ui-message/client/blocks/TextBlock.html b/app/ui-message/client/blocks/TextBlock.html new file mode 100644 index 0000000000000..9ede6447c0b51 --- /dev/null +++ b/app/ui-message/client/blocks/TextBlock.html @@ -0,0 +1,12 @@ + + diff --git a/app/ui-message/client/blocks/TextBlock.js b/app/ui-message/client/blocks/TextBlock.js new file mode 100644 index 0000000000000..e71c590301ee5 --- /dev/null +++ b/app/ui-message/client/blocks/TextBlock.js @@ -0,0 +1,5 @@ + + +// import { Template } from 'meteor/templating'; + +import './TextBlock.html'; diff --git a/app/ui-message/client/blocks/index.js b/app/ui-message/client/blocks/index.js new file mode 100644 index 0000000000000..2b64c4de523cc --- /dev/null +++ b/app/ui-message/client/blocks/index.js @@ -0,0 +1,5 @@ +import './styles.css'; +import './Blocks.js'; +import './ModalBlock'; +import './TextBlock'; +import './ButtonElement.html'; diff --git a/app/ui-message/client/blocks/styles.css b/app/ui-message/client/blocks/styles.css new file mode 100644 index 0000000000000..2f990fc2f0453 --- /dev/null +++ b/app/ui-message/client/blocks/styles.css @@ -0,0 +1,18 @@ +.block-kit-debug.debug { + padding: 1rem; + + border: 1px solid; +} + +.block-kit-debug legend { + display: none; +} + +.block-kit-debug.debug legend { + display: initial; +} + +.rc-modal--uikit { + width: 680px; + max-width: 100%; +} diff --git a/app/ui-message/client/index.js b/app/ui-message/client/index.js index ab52f2f87da5c..e2a0c2288ce63 100644 --- a/app/ui-message/client/index.js +++ b/app/ui-message/client/index.js @@ -6,3 +6,4 @@ import './popup/messagePopupChannel'; import './popup/messagePopupConfig'; import './popup/messagePopupEmoji'; import './popup/messagePopupSlashCommandPreview'; +import './blocks'; diff --git a/app/ui-message/client/message.html b/app/ui-message/client/message.html index 302d5369ffc2b..d1c89d8f5a107 100644 --- a/app/ui-message/client/message.html +++ b/app/ui-message/client/message.html @@ -80,6 +80,11 @@ {{else}} {{{body}}} {{/if}} + {{#if msg.blocks}} +
+ {{> Blocks blocks=msg.blocks rid=msg.rid mid=msg._id}} +
+ {{/if}} diff --git a/app/ui-utils/client/lib/modal.html b/app/ui-utils/client/lib/modal.html index e3e703e1f7992..69cbe1da8bf81 100644 --- a/app/ui-utils/client/lib/modal.html +++ b/app/ui-utils/client/lib/modal.html @@ -1,8 +1,12 @@ diff --git a/app/ui-utils/client/lib/modal.js b/app/ui-utils/client/lib/modal.js index 07170159f4f36..36bc03702d6ee 100644 --- a/app/ui-utils/client/lib/modal.js +++ b/app/ui-utils/client/lib/modal.js @@ -1,97 +1,185 @@ -import './modal.html'; import { Meteor } from 'meteor/meteor'; import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; import { t, getUserPreference, handleError } from '../../../utils'; +import './modal.html'; -export const modal = { - renderedModal: null, - open(config = {}, fn, onCancel) { - config.confirmButtonText = config.confirmButtonText || (config.type === 'error' ? t('Ok') : t('Send')); - config.cancelButtonText = config.cancelButtonText || t('Cancel'); - config.closeOnConfirm = config.closeOnConfirm == null ? true : config.closeOnConfirm; - config.showConfirmButton = config.showConfirmButton == null ? true : config.showConfirmButton; - config.showFooter = config.showConfirmButton === true || config.showCancelButton === true; - config.confirmOnEnter = config.confirmOnEnter == null ? true : config.confirmOnEnter; - - if (config.type === 'input') { - config.input = true; - config.type = false; - - if (!config.inputType) { - config.inputType = 'text'; - } +let modalStack = []; + +const createModal = (config = {}, fn, onCancel) => { + config.confirmButtonText = config.confirmButtonText || (config.type === 'error' ? t('Ok') : t('Send')); + config.cancelButtonText = config.cancelButtonText || t('Cancel'); + config.closeOnConfirm = config.closeOnConfirm == null ? true : config.closeOnConfirm; + config.showConfirmButton = config.showConfirmButton == null ? true : config.showConfirmButton; + config.showFooter = config.showConfirmButton === true || config.showCancelButton === true; + config.confirmOnEnter = config.confirmOnEnter == null ? true : config.confirmOnEnter; + config.closeOnEscape = config.closeOnEscape == null ? true : config.closeOnEscape; + + if (config.type === 'input') { + config.input = true; + config.type = false; + + if (!config.inputType) { + config.inputType = 'text'; } + } - this.close(); - this.fn = fn; - this.onCancel = onCancel; - this.config = config; + let renderedModal; + let timer; + + const instance = { + ...config, + + render: () => { + if (renderedModal) { + renderedModal.firstNode().style.display = ''; + return; + } + + renderedModal = Blaze.renderWithData(Template.rc_modal, instance, document.body); + + if (config.timer) { + timer = setTimeout(() => { + instance.close(); + }, config.timer); + } + }, + + hide: () => { + if (renderedModal) { + renderedModal.firstNode().style.display = 'none'; + } + + if (timer) { + clearTimeout(timer); + timer = undefined; + } + }, + + destroy: () => { + if (renderedModal) { + Blaze.remove(renderedModal); + renderedModal = undefined; + } + + if (timer) { + clearTimeout(timer); + timer = undefined; + } + }, + + close: () => { + instance.destroy(); + modalStack = modalStack.filter((modal) => modal !== instance); + if (modalStack.length) { + modalStack[modalStack.length - 1].render(); + } + }, + + confirm: (value) => { + config.closeOnConfirm && instance.close(); + + if (fn) { + fn.call(instance, value); + return; + } + + instance.close(); + }, + + cancel: () => { + if (onCancel) { + onCancel.call(instance); + } + instance.close(); + }, + + showInputError: (text) => { + const errorEl = document.querySelector('.rc-modal__content-error'); + errorEl.innerHTML = text; + errorEl.style.display = 'block'; + }, + }; + + return instance; +}; + +export const modal = { + open: (config = {}, fn, onCancel) => { + modalStack.forEach((instance) => { + instance.destroy(); + }); + modalStack = []; + + const instance = createModal(config, fn, onCancel); if (config.dontAskAgain) { const dontAskAgainList = getUserPreference(Meteor.userId(), 'dontAskAgainList'); if (dontAskAgainList && dontAskAgainList.some((dontAsk) => dontAsk.action === config.dontAskAgain.action)) { - this.confirm(true); + instance.confirm(true); return; } } - this.renderedModal = Blaze.renderWithData(Template.rc_modal, config, document.body); - this.timer = null; - if (config.timer) { - this.timer = setTimeout(() => this.close(), config.timer); + instance.render(); + modalStack.push(instance); + }, + push: (config = {}, fn, onCancel) => { + const instance = createModal(config, fn, onCancel); + + modalStack.forEach((instance) => { + instance.hide(); + }); + instance.render(); + modalStack.push(instance); + return instance; + }, + cancel: () => { + if (modalStack.length) { + modalStack[modalStack.length - 1].cancel(); } }, - cancel() { - if (this.onCancel) { - this.onCancel(); + close: () => { + if (modalStack.length) { + modalStack[modalStack.length - 1].close(); } - this.close(); }, - close() { - if (this.renderedModal) { - Blaze.remove(this.renderedModal); + confirm: (value) => { + if (modalStack.length) { + modalStack[modalStack.length - 1].confirm(value); } - this.fn = null; - this.onCancel = null; - if (this.timer) { - clearTimeout(this.timer); + }, + showInputError: (text) => { + if (modalStack.length) { + modalStack[modalStack.length - 1].showInputError(text); } }, - confirm(value) { - const { fn } = this; - - this.config.closeOnConfirm && this.close(); - - if (fn) { - fn.call(this, value); + onKeyDown: (event) => { + if (!modalStack.length) { return; } - this.close(); - }, - showInputError(text) { - const errorEl = document.querySelector('.rc-modal__content-error'); - errorEl.innerHTML = text; - errorEl.style.display = 'block'; - }, - onKeydown(e) { - if (modal.config.confirmOnEnter && e.key === 'Enter') { - e.preventDefault(); - e.stopPropagation(); + const instance = modalStack[modalStack.length - 1]; - if (modal.config.input) { - return modal.confirm($('.js-modal-input').val()); + if (instance && instance.config && instance.config.confirmOnEnter && event.key === 'Enter') { + event.preventDefault(); + event.stopPropagation(); + + if (instance.config.input) { + return instance.confirm($('.js-modal-input').val()); } - modal.confirm(true); - } else if (e.key === 'Escape') { - e.preventDefault(); - e.stopPropagation(); + instance.confirm(true); + return; + } + + if (event.key === 'Escape') { + event.preventDefault(); + event.stopPropagation(); - modal.close(); + instance.close(); } }, }; @@ -131,25 +219,25 @@ Template.rc_modal.onRendered(function() { $('.js-modal-input').focus(); } - document.addEventListener('keydown', modal.onKeydown); + this.data.closeOnEscape && document.addEventListener('keydown', modal.onKeyDown); }); Template.rc_modal.onDestroyed(function() { - document.removeEventListener('keydown', modal.onKeydown); + document.removeEventListener('keydown', modal.onKeyDown); }); Template.rc_modal.events({ - 'click .js-action'(e, instance) { - !this.action || this.action.call(instance.data.data, e, instance); - e.stopPropagation(); - modal.close(); + 'click .js-action'(event, instance) { + !this.action || this.action.call(instance.data.data, event, instance); + event.stopPropagation(); + this.close(); }, 'click .js-close'(e) { e.stopPropagation(); - modal.cancel(); + this.cancel(); }, - 'click .js-confirm'(e, instance) { - e.stopPropagation(); + 'click .js-confirm'(event, instance) { + event.stopPropagation(); const { dontAskAgain } = instance.data; if (dontAskAgain && document.getElementById('dont-ask-me-again').checked) { const dontAskAgainObject = { @@ -172,20 +260,20 @@ Template.rc_modal.events({ } if (instance.data.input) { - modal.confirm(document.getElementsByClassName('js-modal-input')[0].value); + this.confirm(document.getElementsByClassName('js-modal-input')[0].value); return; } - modal.confirm(true); + this.confirm(true); }, - 'click .rc-modal-wrapper'(e, instance) { + 'click .rc-modal-wrapper'(event, instance) { if (instance.data.allowOutsideClick === false) { return false; } - if (e.currentTarget === e.target) { - e.stopPropagation(); - modal.close(); + if (event.currentTarget === event.target) { + event.stopPropagation(); + this.close(); } }, }); diff --git a/app/ui/client/lib/chatMessages.js b/app/ui/client/lib/chatMessages.js index 5f92373e0a08d..2268d417e5245 100644 --- a/app/ui/client/lib/chatMessages.js +++ b/app/ui/client/lib/chatMessages.js @@ -27,6 +27,7 @@ import { promises } from '../../../promises/client'; import { hasAtLeastOnePermission } from '../../../authorization/client'; import { Messages, Rooms, ChatMessage, ChatSubscription } from '../../../models/client'; import { emoji } from '../../../emoji/client'; +import { generateTriggerId } from '../../../ui-message/client/ActionManager'; const messageBoxState = { @@ -406,7 +407,8 @@ export class ChatMessages { if (commandOptions.clientOnly) { commandOptions.callback(command, param, msgObject); } else { - Meteor.call('slashCommand', { cmd: command, params: param, msg: msgObject }, (err, result) => { + const triggerId = generateTriggerId(slashCommands.commands[command].appId); + Meteor.call('slashCommand', { cmd: command, params: param, msg: msgObject, triggerId }, (err, result) => { typeof commandOptions.result === 'function' && commandOptions.result(err, result, { cmd: command, params: param, msg: msgObject }); }); } diff --git a/app/ui/client/views/app/room.js b/app/ui/client/views/app/room.js index f89d4ad4ea882..a3a073bc10ff2 100644 --- a/app/ui/client/views/app/room.js +++ b/app/ui/client/views/app/room.js @@ -284,16 +284,13 @@ Template.room.helpers({ embeddedVersion() { return Layout.isEmbedded(); }, - showTopNavbar() { return !Layout.isEmbedded() || settings.get('UI_Show_top_navbar_embedded_layout'); }, - subscribed() { const { state } = Template.instance(); return state.get('subscribed'); }, - messagesHistory() { const { rid } = Template.instance(); const room = Rooms.findOne(rid, { fields: { sysMes: 1 } }); @@ -930,7 +927,11 @@ Template.room.events({ } }, 'load .gallery-item'(e, template) { - return template.sendToBottomIfNecessaryDebounced(); + template.sendToBottomIfNecessaryDebounced(); + }, + + 'rendered .js-block-wrapper'(e, i) { + i.sendToBottomIfNecessaryDebounced(); }, 'click .jump-recent button'(e, template) { diff --git a/app/utils/lib/slashCommand.js b/app/utils/lib/slashCommand.js index eca6e052e6369..62dff58429524 100644 --- a/app/utils/lib/slashCommand.js +++ b/app/utils/lib/slashCommand.js @@ -19,13 +19,12 @@ slashCommands.add = function _addingSlashCommand(command, callback, options = {} }; }; -slashCommands.run = function _runningSlashCommand(command, params, message) { +slashCommands.run = function _runningSlashCommand(command, params, message, triggerId) { if (slashCommands.commands[command] && typeof slashCommands.commands[command].callback === 'function') { if (!message || !message.rid) { throw new Meteor.Error('invalid-command-usage', 'Executing a command requires at least a message with a room id.'); } - - return slashCommands.commands[command].callback(command, params, message); + return slashCommands.commands[command].callback(command, params, message, triggerId); } }; @@ -51,7 +50,7 @@ slashCommands.getPreviews = function _gettingSlashCommandPreviews(command, param } }; -slashCommands.executePreview = function _executeSlashCommandPreview(command, params, message, preview) { +slashCommands.executePreview = function _executeSlashCommandPreview(command, params, message, preview, triggerId) { if (slashCommands.commands[command] && typeof slashCommands.commands[command].previewCallback === 'function') { if (!message || !message.rid) { throw new Meteor.Error('invalid-command-usage', 'Executing a command requires at least a message with a room id.'); @@ -62,7 +61,7 @@ slashCommands.executePreview = function _executeSlashCommandPreview(command, par throw new Meteor.Error('error-invalid-preview', 'Preview Item must have an id, type, and value.'); } - return slashCommands.commands[command].previewCallback(command, params, message, preview); + return slashCommands.commands[command].previewCallback(command, params, message, preview, triggerId); } }; @@ -80,6 +79,6 @@ Meteor.methods({ }); } - return slashCommands.run(command.cmd, command.params, command.msg); + return slashCommands.run(command.cmd, command.params, command.msg, command.triggerId); }, }); diff --git a/client/components/admin/settings/inputs/SelectSettingInput.js b/client/components/admin/settings/inputs/SelectSettingInput.js index 9d93cf642d1ba..13a2937783418 100644 --- a/client/components/admin/settings/inputs/SelectSettingInput.js +++ b/client/components/admin/settings/inputs/SelectSettingInput.js @@ -24,8 +24,8 @@ export function SelectSettingInput({ }) { const t = useTranslation(); - const handleChange = (event) => { - onChangeValue && onChangeValue(event.currentTarget.value); + const handleChange = ([value]) => { + onChangeValue && onChangeValue(value); }; return <> @@ -51,5 +51,16 @@ export function SelectSettingInput({ )} + {/* Date: Sat, 8 Feb 2020 10:07:27 -0300 Subject: [PATCH 115/141] Bump version to 3.0.0-rc.5 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 82 ++++++++++++++++++++++++++++++++++++++- HISTORY.md | 46 ++++++++++++++++++++-- app/utils/rocketchat.info | 2 +- package.json | 2 +- 5 files changed, 126 insertions(+), 8 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index ba03d09c71904..60acc3a860c32 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 3.0.0-rc.4 +ENV RC_VERSION 3.0.0-rc.5 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 1cb04844106bf..29dbe3b24c93d 100644 --- a/.github/history.json +++ b/.github/history.json @@ -39363,6 +39363,86 @@ ] } ] + }, + "2.4.8": { + "node_version": "8.17.0", + "npm_version": "6.13.4", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "16506", + "title": "Release 2.4.8", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "16486", + "title": "Update presence package to 2.6.1", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + } + ] + }, + "3.0.0-rc.5": { + "node_version": "12.14.0", + "npm_version": "6.13.4", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "16515", + "title": "Regression: Update Uikit", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "d-gubert" + ] + }, + { + "pr": "16514", + "title": "Regression: UIKit - Send container info on block actions triggered on a message", + "userLogin": "d-gubert", + "milestone": "3.0.0", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "16516", + "title": "Use base64 for import files upload to prevent file corruption", + "userLogin": "rodrigok", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "16511", + "title": "Regression: Send app info along with interaction payload to the UI", + "userLogin": "d-gubert", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "16513", + "title": "Regression: Ui Kit messaging issues (#16513)", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + } + ] } } -} \ No newline at end of file +} diff --git a/HISTORY.md b/HISTORY.md index 2fd3ba02594ff..08656f3430531 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,26 @@ # 3.0.0 (Under Release Candidate Process) +## 3.0.0-rc.5 +`2020-02-08 · 5 🔍· 4 👩‍💻👨‍💻` + +
+🔍 Minor changes + +- Regression: Send app info along with interaction payload to the UI ([#16511](https://github.com/RocketChat/Rocket.Chat/pull/16511)) +- Regression: UIKit - Send container info on block actions triggered on a message ([#16514](https://github.com/RocketChat/Rocket.Chat/pull/16514)) +- Regression: Update Uikit ([#16515](https://github.com/RocketChat/Rocket.Chat/pull/16515)) +- Use base64 for import files upload to prevent file corruption ([#16516](https://github.com/RocketChat/Rocket.Chat/pull/16516)) + +
+ +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@d-gubert](https://github.com/d-gubert) +- [@ggazzo](https://github.com/ggazzo) +- [@rodrigok](https://github.com/rodrigok) +- [@sampaiodiego](https://github.com/sampaiodiego) + ## 3.0.0-rc.4 `2020-02-06 · 2 🔍 · 2 👩‍💻👨‍💻` @@ -35,7 +55,7 @@ - [@sampaiodiego](https://github.com/sampaiodiego) ## 3.0.0-rc.2 -`2020-02-05 · 3 🐛 · 5 🔍 · 3 👩‍💻👨‍💻` +`2020-02-05 · 3 🐛 · 4 🔍 · 2 👩‍💻👨‍💻` ### 🐛 Bug fixes @@ -47,7 +67,6 @@ 🔍 Minor changes - Regression: prevent submit modal ([#16488](https://github.com/RocketChat/Rocket.Chat/pull/16488)) -- Update presence package to 2.6.1 ([#16486](https://github.com/RocketChat/Rocket.Chat/pull/16486)) - Regression: allow private channels to hide system messages ([#16483](https://github.com/RocketChat/Rocket.Chat/pull/16483)) - Regression: Fix uikit modal closing on click ([#16475](https://github.com/RocketChat/Rocket.Chat/pull/16475)) - Regression: Fix undefined presence after reconnect ([#16477](https://github.com/RocketChat/Rocket.Chat/pull/16477)) @@ -58,7 +77,6 @@ - [@MartinSchoeler](https://github.com/MartinSchoeler) - [@ggazzo](https://github.com/ggazzo) -- [@sampaiodiego](https://github.com/sampaiodiego) ## 3.0.0-rc.1 `2020-02-04 · 1 🔍 · 1 👩‍💻👨‍💻` @@ -187,6 +205,26 @@ - [@sampaiodiego](https://github.com/sampaiodiego) - [@tassoevan](https://github.com/tassoevan) +# 2.4.8 +`2020-02-07 · 2 🔍 · 1 👩‍💻👨‍💻` + +### Engine versions +- Node: `8.17.0` +- NPM: `6.13.4` +- MongoDB: `3.4, 3.6, 4.0` + +
+🔍 Minor changes + +- Release 2.4.8 ([#16506](https://github.com/RocketChat/Rocket.Chat/pull/16506)) +- Update presence package to 2.6.1 ([#16486](https://github.com/RocketChat/Rocket.Chat/pull/16486)) + +
+ +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@sampaiodiego](https://github.com/sampaiodiego) + # 2.4.7 `2020-02-03 · 1 🐛 · 1 🔍 · 2 👩‍💻👨‍💻` @@ -6572,4 +6610,4 @@ - [@graywolf336](https://github.com/graywolf336) - [@marceloschmidt](https://github.com/marceloschmidt) - [@rodrigok](https://github.com/rodrigok) -- [@sampaiodiego](https://github.com/sampaiodiego) \ No newline at end of file +- [@sampaiodiego](https://github.com/sampaiodiego) diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 3e6472d84834c..396539db5742b 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.0.0-rc.4" + "version": "3.0.0-rc.5" } diff --git a/package.json b/package.json index 3fcd6b80bf49b..71af61b33f7bc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.0.0-rc.4", + "version": "3.0.0-rc.5", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 252cb6ffa06f3c0acabcd66fe14ba389815ad158 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Sat, 8 Feb 2020 11:34:06 -0300 Subject: [PATCH 116/141] Regression: update package-lock (#16528) --- package-lock.json | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index c5f9e7193c09c..c9465a100e7fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2711,36 +2711,36 @@ } }, "@rocket.chat/fuselage": { - "version": "0.2.0-ui-kit.90", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage/-/fuselage-0.2.0-ui-kit.90.tgz", - "integrity": "sha512-ZMpH2FgYurSgDO3PZ1p5ge404AE9T4RcI86ErbJ/aLuqkk2exjX7D03DYo4m1layfqJRZohz7VZBv8YivwVr4Q==", + "version": "0.2.0-alpha.23", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage/-/fuselage-0.2.0-alpha.23.tgz", + "integrity": "sha512-0UGLqDV20jagF0SlWNrEUcggJ6WwrbeR5oCtbmVhhb1MQuUl1JInbsNCouXyh40w/o9knQJTHtnCgY1oFrc5XQ==", "requires": { - "@rocket.chat/fuselage-tokens": "^0.2.0-alpha.18", - "@rocket.chat/icons": "^0.2.0-alpha.18" + "@rocket.chat/fuselage-tokens": "^0.2.0-alpha.23", + "@rocket.chat/icons": "^0.2.0-alpha.23" } }, "@rocket.chat/fuselage-hooks": { - "version": "0.2.0-dev.91", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-hooks/-/fuselage-hooks-0.2.0-dev.91.tgz", - "integrity": "sha512-oK+tgZNHPlTtxB1zS3lI5aRW64HhO3l8nxzdiLJKnh+4N+yqkCE/HR2LUvdrAhvAfp4d2EaE7FROtYwjqgwuKg==" + "version": "0.2.0-alpha.23", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-hooks/-/fuselage-hooks-0.2.0-alpha.23.tgz", + "integrity": "sha512-HsEgwTV0i+XrBfYY4T38MYk20Jq5y8STcQOzBox39T8IpriTS8v3GFkz4ja2JkjCj44k7Rsr0vtEbhhHmM20xw==" }, "@rocket.chat/fuselage-tokens": { - "version": "0.2.0-alpha.22", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.2.0-alpha.22.tgz", - "integrity": "sha512-m6iDvQPPd2p+vhHEyjnB5QO+ojO2nj8jXVZhpsHCeHCbTst0DTJtwpZEmqgcbKTH5V6zMmg+Q4Oli26aPOFzJw==" + "version": "0.2.0-alpha.23", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.2.0-alpha.23.tgz", + "integrity": "sha512-rpRgkp8TOqveaZk4odpAkjuv6ecHURCuzwo5ACzrcIGfRi18CH9LEt+X7dddWIKFUS+XQigtusRdgs7ZtYU5lg==" }, "@rocket.chat/fuselage-ui-kit": { - "version": "0.2.0-ui-kit.90", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-ui-kit/-/fuselage-ui-kit-0.2.0-ui-kit.90.tgz", - "integrity": "sha512-zNoIlGbsusUp0fiu05oAOAppxGMyUO6GWPTBxSpXIvHAjtyAGS9OefCbW6Biz1fQnR3j9rjApmKeeijn2aDLaQ==", + "version": "0.2.0-alpha.23", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-ui-kit/-/fuselage-ui-kit-0.2.0-alpha.23.tgz", + "integrity": "sha512-en4UuVksaEZgYt7b3KMtrW2KiUXg/K7eKXddoogG1cN+f7rgaUP9kMsd0Kyo5WUCCQOa0GDmbrVCRpK0aKSMXA==", "requires": { - "@rocket.chat/ui-kit": "^0.2.0-alpha.18" + "@rocket.chat/ui-kit": "^0.2.0-alpha.23" } }, "@rocket.chat/icons": { - "version": "0.2.0-dev.91", - "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.2.0-dev.91.tgz", - "integrity": "sha512-7LeRINkMWD7x9WlNVa9IEKajFz8fK3+CJbW0X00pMqXBCV7zHVew7OgWg32vY1JzPnL0Tj+X9wnWM8A4tGJFSw==" + "version": "0.2.0-alpha.23", + "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.2.0-alpha.23.tgz", + "integrity": "sha512-iK/R8JP234RsS90su5M9vh5VSOaxHFRfYtXa3KfJP2Yuq4YOLfXTyj+Kq1OEC4kdUbWUBN/6w+n3W4uSSWjWdA==" }, "@rocket.chat/livechat": { "version": "1.3.0", @@ -2830,9 +2830,9 @@ } }, "@rocket.chat/ui-kit": { - "version": "0.2.0-dev.88", - "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.2.0-dev.88.tgz", - "integrity": "sha512-2W/Ajmg8G7rQ+HzBCVnKci6at5fiD1lG4iBV0/S42xQLEPBxQKmEQT2Gh4vS1UMBFvYAS/U5ML1IXrjhDNxa4w==" + "version": "0.2.0-alpha.23", + "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.2.0-alpha.23.tgz", + "integrity": "sha512-K5DMWrNp238eptvRH1QertyyidYYfuwVkb8xyg3OFKzRictqLbSK1QkK1lfJmZFMguJbaF2sGIorHsJjNMKubA==" }, "@settlin/spacebars-loader": { "version": "1.0.7", From 694260908c08574f27cb6e26238fce1b0f04653e Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Sat, 8 Feb 2020 17:26:31 -0300 Subject: [PATCH 117/141] [BREAK] Change apps/icon endpoint to return app's icon and use it to show on Ui Kit modal (#16522) --- app/apps/server/bridges/uiInteraction.js | 6 ----- app/apps/server/communication/rest.js | 26 +++++++++++++++----- app/ui-message/client/blocks/MessageBlock.js | 7 ++---- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/app/apps/server/bridges/uiInteraction.js b/app/apps/server/bridges/uiInteraction.js index ade9af8d54c34..2c726cc2102c2 100644 --- a/app/apps/server/bridges/uiInteraction.js +++ b/app/apps/server/bridges/uiInteraction.js @@ -14,12 +14,6 @@ export class UiInteractionBridge { throw new Error('Invalid app provided'); } - const { name, iconFileContent } = app.getInfo(); - - Object.assign(interaction, { - appInfo: { name, base64Icon: iconFileContent }, - }); - Notifications.notifyUser(user.id, 'uiInteraction', interaction); } } diff --git a/app/apps/server/communication/rest.js b/app/apps/server/communication/rest.js index d8793a6d8ca4d..ccfd34fdf8486 100644 --- a/app/apps/server/communication/rest.js +++ b/app/apps/server/communication/rest.js @@ -503,16 +503,30 @@ export class AppsRestApi { }, }); - this.api.addRoute(':id/icon', { authRequired: true, permissionsRequired: ['manage-apps'] }, { + this.api.addRoute(':id/icon', { authRequired: false }, { get() { const prl = manager.getOneById(this.urlParams.id); + if (!prl) { + return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); + } - if (prl) { - const info = prl.getInfo(); - - return API.v1.success({ iconFileContent: info.iconFileContent }); + const info = prl.getInfo(); + if (!info || !info.iconFileContent) { + return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); } - return API.v1.notFound(`No App found by the id of: ${ this.urlParams.id }`); + + const imageData = info.iconFileContent.split(';base64,'); + + const buf = Buffer.from(imageData[1], 'base64'); + + return { + statusCode: 200, + headers: { + 'Content-Length': buf.length, + 'Content-Type': imageData[0].replace('data:', ''), + }, + body: buf, + }; }, }); diff --git a/app/ui-message/client/blocks/MessageBlock.js b/app/ui-message/client/blocks/MessageBlock.js index fef59621b873d..e9af533655ffe 100644 --- a/app/ui-message/client/blocks/MessageBlock.js +++ b/app/ui-message/client/blocks/MessageBlock.js @@ -5,9 +5,9 @@ import { Modal, AnimatedVisibility, ButtonGroup, Button, Box } from '@rocket.cha import { useUniqueId } from '@rocket.chat/fuselage-hooks'; import { renderMessageBody } from '../../../ui-utils/client'; +import { getURL } from '../../../utils/lib/getURL'; import { useReactiveValue } from '../../../../client/hooks/useReactiveValue'; - const focusableElementsString = 'a[href]:not([tabindex="-1"]), area[href]:not([tabindex="-1"]), input:not([disabled]):not([tabindex="-1"]), select:not([disabled]):not([tabindex="-1"]), textarea:not([disabled]):not([tabindex="-1"]), button:not([disabled]):not([tabindex="-1"]), iframe, object, embed, [tabindex]:not([tabindex="-1"]), [contenteditable]'; messageParser.text = ({ text, type } = {}) => { @@ -44,7 +44,6 @@ const textParser = uiKitText(new class { return text; } }()); -const thumb = 'data:image/gif;base64,R0lGODlhAQABAIAAAMLCwgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=='; // https://www.w3.org/TR/wai-aria-practices/examples/dialog-modal/dialog.html @@ -128,14 +127,12 @@ export const modalBlockWithContext = ({ element.removeEventListener('click', close); }; }, handleKeyDown); - const { appInfo = { base64Icon: thumb } } = data; return ( - {/* */} - + {textParser([title])} From 0950c0a53d8def00e41b1c653b0bdbefa181ac83 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Sat, 8 Feb 2020 17:25:54 -0300 Subject: [PATCH 118/141] Bump version to 3.0.0-rc.6 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 21 ++++++++++++++++++++- HISTORY.md | 23 +++++++++++++++++++---- app/utils/rocketchat.info | 2 +- package.json | 2 +- 5 files changed, 42 insertions(+), 8 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 60acc3a860c32..f0ad9b94610a0 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 3.0.0-rc.5 +ENV RC_VERSION 3.0.0-rc.6 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 29dbe3b24c93d..e3f127ee40d34 100644 --- a/.github/history.json +++ b/.github/history.json @@ -39443,6 +39443,25 @@ ] } ] + }, + "3.0.0-rc.6": { + "node_version": "12.14.0", + "npm_version": "6.13.4", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "16528", + "title": "Regression: update package-lock", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + } + ] } } -} +} \ No newline at end of file diff --git a/HISTORY.md b/HISTORY.md index 08656f3430531..ffe48fe22349e 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,16 +1,31 @@ # 3.0.0 (Under Release Candidate Process) +## 3.0.0-rc.6 +`2020-02-08 · 1 🔍 · 1 👩‍💻👨‍💻` + +
+🔍 Minor changes + +- Regression: update package-lock ([#16528](https://github.com/RocketChat/Rocket.Chat/pull/16528)) + +
+ +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@ggazzo](https://github.com/ggazzo) + ## 3.0.0-rc.5 -`2020-02-08 · 5 🔍· 4 👩‍💻👨‍💻` +`2020-02-08 · 5 🔍 · 4 👩‍💻👨‍💻`
🔍 Minor changes -- Regression: Send app info along with interaction payload to the UI ([#16511](https://github.com/RocketChat/Rocket.Chat/pull/16511)) -- Regression: UIKit - Send container info on block actions triggered on a message ([#16514](https://github.com/RocketChat/Rocket.Chat/pull/16514)) - Regression: Update Uikit ([#16515](https://github.com/RocketChat/Rocket.Chat/pull/16515)) +- Regression: UIKit - Send container info on block actions triggered on a message ([#16514](https://github.com/RocketChat/Rocket.Chat/pull/16514)) - Use base64 for import files upload to prevent file corruption ([#16516](https://github.com/RocketChat/Rocket.Chat/pull/16516)) +- Regression: Send app info along with interaction payload to the UI ([#16511](https://github.com/RocketChat/Rocket.Chat/pull/16511)) +- Regression: Ui Kit messaging issues (#16513) ([#16513](https://github.com/RocketChat/Rocket.Chat/pull/16513))
@@ -6610,4 +6625,4 @@ - [@graywolf336](https://github.com/graywolf336) - [@marceloschmidt](https://github.com/marceloschmidt) - [@rodrigok](https://github.com/rodrigok) -- [@sampaiodiego](https://github.com/sampaiodiego) +- [@sampaiodiego](https://github.com/sampaiodiego) \ No newline at end of file diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 396539db5742b..eea7e9040cb6d 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.0.0-rc.5" + "version": "3.0.0-rc.6" } diff --git a/package.json b/package.json index 71af61b33f7bc..f5f87e9f5d506 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.0.0-rc.5", + "version": "3.0.0-rc.6", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From ad449c436360759694fafdb043453df1715ca9a7 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Sat, 8 Feb 2020 18:03:59 -0300 Subject: [PATCH 119/141] Bump version to 3.0.0-rc.7 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 20 ++++++++++++++++++++ HISTORY.md | 11 +++++++++++ app/utils/rocketchat.info | 2 +- package.json | 2 +- 5 files changed, 34 insertions(+), 3 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index f0ad9b94610a0..03b88a7ff34af 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 3.0.0-rc.6 +ENV RC_VERSION 3.0.0-rc.7 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index e3f127ee40d34..3e8c6be547b84 100644 --- a/.github/history.json +++ b/.github/history.json @@ -39462,6 +39462,26 @@ ] } ] + }, + "3.0.0-rc.7": { + "node_version": "12.14.0", + "npm_version": "6.13.4", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "16522", + "title": "[BREAK] Change apps/icon endpoint to return app's icon and use it to show on Ui Kit modal", + "userLogin": "sampaiodiego", + "milestone": "3.0.0", + "contributors": [ + "sampaiodiego" + ] + } + ] } } } \ No newline at end of file diff --git a/HISTORY.md b/HISTORY.md index ffe48fe22349e..1760950a98874 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,17 @@ # 3.0.0 (Under Release Candidate Process) +## 3.0.0-rc.7 +`2020-02-08 · 1 ️️️⚠️ · 1 👩‍💻👨‍💻` + +### ⚠️ BREAKING CHANGES + +- Change apps/icon endpoint to return app's icon and use it to show on Ui Kit modal ([#16522](https://github.com/RocketChat/Rocket.Chat/pull/16522)) + +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@sampaiodiego](https://github.com/sampaiodiego) + ## 3.0.0-rc.6 `2020-02-08 · 1 🔍 · 1 👩‍💻👨‍💻` diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index eea7e9040cb6d..6731584d84a24 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.0.0-rc.6" + "version": "3.0.0-rc.7" } diff --git a/package.json b/package.json index f5f87e9f5d506..a6e985ffe253e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.0.0-rc.6", + "version": "3.0.0-rc.7", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 704e5017e934a4c9550a5665dbe9d135a9bdb030 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Mon, 10 Feb 2020 10:49:01 -0300 Subject: [PATCH 120/141] Regression: UIKit missing select states: error/disabled (#16540) --- app/ui-master/client/main.js | 4 + .../settings/inputs/SelectSettingInput.js | 2 +- package-lock.json | 895 +++++++++++++++++- package.json | 10 +- 4 files changed, 882 insertions(+), 29 deletions(-) diff --git a/app/ui-master/client/main.js b/app/ui-master/client/main.js index fbd030cb663dd..0a2831c3fe8dd 100644 --- a/app/ui-master/client/main.js +++ b/app/ui-master/client/main.js @@ -96,6 +96,10 @@ Template.body.onRendered(function() { popover.close(); + if (document.querySelector('.rc-modal-wrapper dialog[open]')) { + return; + } + const inputMessage = chatMessages[RoomManager.openedRoom] && chatMessages[RoomManager.openedRoom].input; if (!inputMessage) { return; diff --git a/client/components/admin/settings/inputs/SelectSettingInput.js b/client/components/admin/settings/inputs/SelectSettingInput.js index dfbac684831da..7fa5f3b5395c5 100644 --- a/client/components/admin/settings/inputs/SelectSettingInput.js +++ b/client/components/admin/settings/inputs/SelectSettingInput.js @@ -24,7 +24,7 @@ export function SelectSettingInput({ }) { const t = useTranslation(); - const handleChange = ([value]) => { + const handleChange = (value) => { onChangeValue && onChangeValue(value); }; diff --git a/package-lock.json b/package-lock.json index c9465a100e7fe..36ef79210d8f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2711,36 +2711,885 @@ } }, "@rocket.chat/fuselage": { - "version": "0.2.0-alpha.23", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage/-/fuselage-0.2.0-alpha.23.tgz", - "integrity": "sha512-0UGLqDV20jagF0SlWNrEUcggJ6WwrbeR5oCtbmVhhb1MQuUl1JInbsNCouXyh40w/o9knQJTHtnCgY1oFrc5XQ==", + "version": "0.2.0-alpha.25", "requires": { - "@rocket.chat/fuselage-tokens": "^0.2.0-alpha.23", - "@rocket.chat/icons": "^0.2.0-alpha.23" + "@rocket.chat/fuselage-tokens": "^0.2.0-alpha.25", + "@rocket.chat/icons": "^0.2.0-alpha.25" + }, + "dependencies": { + "@babel/generator": { + "version": "7.7.4", + "requires": { + "source-map": "^0.5.0" + } + }, + "@babel/parser": { + "version": "7.7.5" + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.7.4" + }, + "@rocket.chat/fuselage-tokens": { + "version": "0.2.0-alpha.25", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.2.0-alpha.25.tgz", + "integrity": "sha512-0HTOBj/m04yF3KI35Tj0rH3gf7AHVtXR4UDebvDU8PnXZwuWMhhbwzE5uFkAANLIrpH8tSkujOFatF+USMtvsg==" + }, + "@rocket.chat/icons": { + "version": "0.2.0-alpha.25", + "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.2.0-alpha.25.tgz", + "integrity": "sha512-EmsbESuMtUTC1P5Tg2p8LfzkujYVqhWNKBFecU66b3vROpmzI2OHjEoJG70olcJ4Pw7071VarpsAlmByj+8CjQ==" + }, + "@storybook/addon-actions": { + "version": "5.2.8", + "requires": { + "@storybook/addons": "5.2.8", + "@storybook/api": "5.2.8", + "@storybook/client-api": "5.2.8", + "@storybook/components": "5.2.8", + "@storybook/core-events": "5.2.8", + "@storybook/theming": "5.2.8", + "react": "^16.8.3", + "react-inspector": "^3.0.2" + }, + "dependencies": { + "@storybook/components": { + "version": "5.2.8", + "requires": { + "@storybook/theming": "5.2.8", + "markdown-to-jsx": "^6.9.1", + "react": "^16.8.3", + "react-dom": "^16.8.3", + "react-focus-lock": "^1.18.3", + "react-helmet-async": "^1.0.2", + "react-popper-tooltip": "^2.8.3", + "react-syntax-highlighter": "^8.0.1", + "react-textarea-autosize": "^7.1.0", + "simplebar-react": "^1.0.0-alpha.6" + }, + "dependencies": { + "react-dom": { + "version": "16.11.0", + "dependencies": { + "scheduler": { + "version": "0.18.0" + } + } + }, + "react-helmet-async": { + "version": "1.0.4" + }, + "react-popper-tooltip": { + "version": "2.10.0", + "requires": { + "react-popper": "^1.3.4" + } + }, + "simplebar-react": { + "version": "1.2.3" + } + } + }, + "create-react-context": { + "version": "0.3.0" + }, + "markdown-to-jsx": { + "version": "6.10.3" + }, + "react": { + "version": "16.11.0" + }, + "react-clientside-effect": { + "version": "1.2.2" + }, + "react-focus-lock": { + "version": "1.19.1", + "requires": { + "react-clientside-effect": "^1.2.0" + } + }, + "react-inspector": { + "version": "3.0.2" + }, + "react-popper": { + "version": "1.3.6", + "requires": { + "create-react-context": "^0.3.0" + } + }, + "react-syntax-highlighter": { + "version": "8.1.0" + }, + "react-textarea-autosize": { + "version": "7.1.2" + } + } + }, + "@storybook/addon-backgrounds": { + "version": "5.2.8", + "requires": { + "@storybook/addons": "5.2.8", + "@storybook/api": "5.2.8", + "@storybook/components": "5.2.8", + "@storybook/core-events": "5.2.8", + "@storybook/theming": "5.2.8", + "react": "^16.8.3" + }, + "dependencies": { + "@storybook/components": { + "version": "5.2.8", + "requires": { + "@storybook/theming": "5.2.8", + "markdown-to-jsx": "^6.9.1", + "react": "^16.8.3", + "react-dom": "^16.8.3", + "react-focus-lock": "^1.18.3", + "react-helmet-async": "^1.0.2", + "react-popper-tooltip": "^2.8.3", + "react-syntax-highlighter": "^8.0.1", + "react-textarea-autosize": "^7.1.0", + "simplebar-react": "^1.0.0-alpha.6" + }, + "dependencies": { + "react-dom": { + "version": "16.11.0", + "dependencies": { + "scheduler": { + "version": "0.18.0" + } + } + }, + "react-helmet-async": { + "version": "1.0.4" + }, + "react-popper-tooltip": { + "version": "2.10.0", + "requires": { + "react-popper": "^1.3.4" + } + }, + "simplebar-react": { + "version": "1.2.3" + } + } + }, + "create-react-context": { + "version": "0.3.0" + }, + "markdown-to-jsx": { + "version": "6.10.3" + }, + "react": { + "version": "16.11.0" + }, + "react-clientside-effect": { + "version": "1.2.2" + }, + "react-focus-lock": { + "version": "1.19.1", + "requires": { + "react-clientside-effect": "^1.2.0" + } + }, + "react-popper": { + "version": "1.3.6", + "requires": { + "create-react-context": "^0.3.0" + } + }, + "react-syntax-highlighter": { + "version": "8.1.0" + }, + "react-textarea-autosize": { + "version": "7.1.2" + } + } + }, + "@storybook/addon-centered": { + "version": "5.2.8", + "requires": { + "@storybook/addons": "5.2.8" + } + }, + "@storybook/addon-docs": { + "version": "5.2.8", + "requires": { + "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.3", + "@storybook/addons": "5.2.8", + "@storybook/api": "5.2.8", + "@storybook/components": "5.2.8", + "@storybook/router": "5.2.8", + "@storybook/source-loader": "5.2.8", + "@storybook/theming": "5.2.8" + } + }, + "@storybook/addon-jest": { + "version": "5.2.8", + "requires": { + "@storybook/addons": "5.2.8", + "@storybook/api": "5.2.8", + "@storybook/components": "5.2.8", + "@storybook/core-events": "5.2.8", + "@storybook/theming": "5.2.8", + "react": "^16.8.3", + "react-sizeme": "^2.5.2" + }, + "dependencies": { + "react": { + "version": "16.11.0" + }, + "react-sizeme": { + "version": "2.6.10" + } + } + }, + "@storybook/addon-knobs": { + "version": "5.2.8", + "requires": { + "@storybook/addons": "5.2.8", + "@storybook/api": "5.2.8", + "@storybook/client-api": "5.2.8", + "@storybook/components": "5.2.8", + "@storybook/core-events": "5.2.8", + "@storybook/theming": "5.2.8" + } + }, + "@storybook/addon-links": { + "version": "5.2.8", + "requires": { + "@storybook/addons": "5.2.8", + "@storybook/core-events": "5.2.8", + "@storybook/router": "5.2.8" + } + }, + "@storybook/addon-options": { + "version": "5.2.8", + "requires": { + "@storybook/addons": "5.2.8" + } + }, + "@storybook/addon-viewport": { + "version": "5.2.8", + "requires": { + "@storybook/addons": "5.2.8", + "@storybook/api": "5.2.8", + "@storybook/components": "5.2.8", + "@storybook/core-events": "5.2.8", + "@storybook/theming": "5.2.8" + } + }, + "@storybook/addons": { + "version": "5.2.8", + "requires": { + "@storybook/api": "5.2.8", + "@storybook/channels": "5.2.8", + "@storybook/core-events": "5.2.8" + } + }, + "@storybook/api": { + "version": "5.2.8", + "requires": { + "@storybook/channels": "5.2.8", + "@storybook/core-events": "5.2.8", + "@storybook/router": "5.2.8", + "@storybook/theming": "5.2.8", + "react": "^16.8.3" + }, + "dependencies": { + "react": { + "version": "16.11.0" + } + } + }, + "@storybook/channel-postmessage": { + "version": "5.2.8", + "requires": { + "@storybook/channels": "5.2.8" + } + }, + "@storybook/channels": { + "version": "5.2.8" + }, + "@storybook/client-api": { + "version": "5.2.8", + "requires": { + "@storybook/addons": "5.2.8", + "@storybook/channel-postmessage": "5.2.8", + "@storybook/channels": "5.2.8", + "@storybook/core-events": "5.2.8", + "@storybook/router": "5.2.8", + "is-plain-object": "^3.0.0" + } + }, + "@storybook/components": { + "version": "5.2.8", + "requires": { + "@storybook/theming": "5.2.8", + "markdown-to-jsx": "^6.9.1", + "react": "^16.8.3", + "react-dom": "^16.8.3", + "react-focus-lock": "^1.18.3", + "react-helmet-async": "^1.0.2", + "react-popper-tooltip": "^2.8.3", + "react-syntax-highlighter": "^8.0.1", + "react-textarea-autosize": "^7.1.0", + "simplebar-react": "^1.0.0-alpha.6" + }, + "dependencies": { + "create-react-context": { + "version": "0.3.0" + }, + "markdown-to-jsx": { + "version": "6.10.3" + }, + "react": { + "version": "16.11.0" + }, + "react-clientside-effect": { + "version": "1.2.2" + }, + "react-dom": { + "version": "16.11.0", + "dependencies": { + "scheduler": { + "version": "0.18.0" + } + } + }, + "react-focus-lock": { + "version": "1.19.1", + "requires": { + "react-clientside-effect": "^1.2.0" + } + }, + "react-helmet-async": { + "version": "1.0.4" + }, + "react-popper": { + "version": "1.3.6", + "requires": { + "create-react-context": "^0.3.0" + } + }, + "react-popper-tooltip": { + "version": "2.10.0", + "requires": { + "react-popper": "^1.3.4" + } + }, + "react-syntax-highlighter": { + "version": "8.1.0" + }, + "react-textarea-autosize": { + "version": "7.1.2" + }, + "simplebar-react": { + "version": "1.2.3" + } + } + }, + "@storybook/core": { + "version": "5.2.8", + "requires": { + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", + "@babel/preset-env": "^7.7.1", + "@storybook/addons": "5.2.8", + "@storybook/channel-postmessage": "5.2.8", + "@storybook/client-api": "5.2.8", + "@storybook/core-events": "5.2.8", + "@storybook/node-logger": "5.2.8", + "@storybook/router": "5.2.8", + "@storybook/theming": "5.2.8", + "@storybook/ui": "5.2.8", + "autoprefixer": "^9.4.9", + "find-cache-dir": "^3.0.0", + "resolve": "^1.11.0", + "terser-webpack-plugin": "^1.2.4", + "webpack": "^4.33.0" + }, + "dependencies": { + "@babel/preset-env": { + "version": "7.7.6", + "requires": { + "@babel/plugin-proposal-object-rest-spread": "^7.7.4", + "browserslist": "^4.6.0", + "core-js-compat": "^3.4.7", + "semver": "^5.5.0" + }, + "dependencies": { + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.7.7" + }, + "semver": { + "version": "5.7.1" + } + } + }, + "autoprefixer": { + "version": "9.7.1", + "requires": { + "browserslist": "^4.7.2", + "caniuse-lite": "^1.0.30001006", + "postcss": "^7.0.21", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "browserslist": { + "version": "4.7.3", + "requires": { + "caniuse-lite": "^1.0.30001010", + "node-releases": "^1.1.40" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001015" + } + } + } + } + }, + "caniuse-lite": { + "version": "1.0.30001012" + }, + "enhanced-resolve": { + "version": "4.1.1", + "requires": { + "memory-fs": "^0.5.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0" + } + } + }, + "find-cache-dir": { + "version": "3.2.0", + "requires": { + "make-dir": "^3.0.0", + "pkg-dir": "^4.1.0" + } + }, + "node-releases": { + "version": "1.1.42" + }, + "postcss": { + "version": "7.0.23", + "requires": { + "source-map": "^0.6.1" + } + }, + "serialize-javascript": { + "version": "1.9.1" + }, + "source-map": { + "version": "0.6.1" + }, + "terser-webpack-plugin": { + "version": "1.4.1", + "requires": { + "find-cache-dir": "^2.1.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "requires": { + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "requires": { + "semver": "^5.6.0" + } + }, + "pkg-dir": { + "version": "3.0.0" + }, + "semver": { + "version": "5.7.1" + } + } + }, + "webpack": { + "version": "4.41.2", + "requires": { + "acorn": "^6.2.1", + "enhanced-resolve": "^4.1.0", + "terser-webpack-plugin": "^1.4.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "requires": { + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "requires": { + "semver": "^5.6.0" + } + }, + "pkg-dir": { + "version": "3.0.0" + }, + "semver": { + "version": "5.7.1" + }, + "serialize-javascript": { + "version": "2.1.2" + }, + "terser-webpack-plugin": { + "version": "1.4.3", + "requires": { + "find-cache-dir": "^2.1.0", + "serialize-javascript": "^2.1.2", + "source-map": "^0.6.1" + } + }, + "webpack": { + "version": "4.41.4", + "requires": { + "acorn": "^6.2.1", + "enhanced-resolve": "^4.1.0", + "terser-webpack-plugin": "^1.4.3" + } + } + } + } + } + }, + "@storybook/core-events": { + "version": "5.2.8" + }, + "@storybook/node-logger": { + "version": "5.2.8" + }, + "@storybook/react": { + "version": "5.2.8", + "requires": { + "@storybook/addons": "5.2.8", + "@storybook/core": "5.2.8", + "@storybook/node-logger": "5.2.8", + "mini-css-extract-plugin": "^0.7.0", + "webpack": "^4.33.0" + }, + "dependencies": { + "enhanced-resolve": { + "version": "4.1.1", + "requires": { + "memory-fs": "^0.5.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0" + } + } + }, + "mini-css-extract-plugin": { + "version": "0.7.0" + }, + "webpack": { + "version": "4.41.2", + "requires": { + "acorn": "^6.2.1", + "enhanced-resolve": "^4.1.0", + "terser-webpack-plugin": "^1.4.1" + } + } + } + }, + "@storybook/router": { + "version": "5.2.8" + }, + "@storybook/source-loader": { + "version": "5.2.8", + "requires": { + "@storybook/addons": "5.2.8", + "@storybook/router": "5.2.8" + } + }, + "@storybook/theming": { + "version": "5.2.8" + }, + "@storybook/ui": { + "version": "5.2.8", + "requires": { + "@storybook/addons": "5.2.8", + "@storybook/api": "5.2.8", + "@storybook/channels": "5.2.8", + "@storybook/components": "5.2.8", + "@storybook/core-events": "5.2.8", + "@storybook/router": "5.2.8", + "@storybook/theming": "5.2.8", + "markdown-to-jsx": "^6.9.3", + "react": "^16.8.3", + "react-dom": "^16.8.3", + "react-helmet-async": "^1.0.2", + "react-hotkeys": "2.0.0-pre4", + "react-sizeme": "^2.6.7", + "regenerator-runtime": "^0.13.2" + }, + "dependencies": { + "markdown-to-jsx": { + "version": "6.10.3" + }, + "react": { + "version": "16.11.0" + }, + "react-dom": { + "version": "16.11.0", + "requires": { + "scheduler": "^0.17.0" + } + }, + "react-helmet-async": { + "version": "1.0.4" + }, + "react-hotkeys": { + "version": "2.0.0-pre4" + }, + "react-sizeme": { + "version": "2.6.10", + "dependencies": { + "react-dom": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.12.0.tgz", + "integrity": "sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==", + "requires": { + "scheduler": "^0.18.0" + }, + "dependencies": { + "react": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", + "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==" + } + } + }, + "scheduler": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", + "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==" + } + } + }, + "regenerator-runtime": { + "version": "0.13.3" + } + } + }, + "acorn": { + "version": "6.4.0" + }, + "autoprefixer": { + "version": "9.7.3", + "requires": { + "browserslist": "^4.8.0", + "caniuse-lite": "^1.0.30001012", + "postcss": "^7.0.23", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001015" + } + } + }, + "browserslist": { + "version": "4.8.2", + "requires": { + "caniuse-lite": "^1.0.30001015", + "node-releases": "^1.1.42" + } + }, + "caniuse-lite": { + "version": "1.0.30001016" + }, + "core-js-compat": { + "version": "3.6.0", + "requires": { + "browserslist": "^4.8.2", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0" + } + } + }, + "emoji-regex": { + "version": "7.0.3" + }, + "enhanced-resolve": { + "version": "4.1.0" + }, + "is-plain-object": { + "version": "3.0.0", + "requires": { + "isobject": "^4.0.0" + } + }, + "isobject": { + "version": "4.0.0" + }, + "locate-path": { + "version": "5.0.0", + "requires": { + "p-locate": "^4.1.0" + } + }, + "loki": { + "version": "0.16.0", + "requires": { + "fs-extra": "^7.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1" + } + } + }, + "make-dir": { + "version": "3.0.0" + }, + "mini-css-extract-plugin": { + "version": "0.8.2" + }, + "node-releases": { + "version": "1.1.43" + }, + "p-locate": { + "version": "4.1.0" + }, + "path-exists": { + "version": "4.0.0" + }, + "pkg-dir": { + "version": "4.2.0", + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.24", + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1" + } + } + }, + "postcss-value-parser": { + "version": "4.0.2" + }, + "resolve": { + "version": "1.12.0" + }, + "sass-loader": { + "version": "8.0.0", + "requires": { + "schema-utils": "^2.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.6.1" + } + } + }, + "scheduler": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz", + "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==" + }, + "source-map": { + "version": "0.5.7" + }, + "string-width": { + "version": "3.1.0", + "requires": { + "emoji-regex": "^7.0.1" + } + }, + "terser-webpack-plugin": { + "version": "1.4.3", + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1" + } + } + }, + "webpack": { + "version": "4.41.4", + "requires": { + "acorn": "^6.2.1", + "enhanced-resolve": "^4.1.0", + "terser-webpack-plugin": "^1.4.3" + }, + "dependencies": { + "enhanced-resolve": { + "version": "4.1.1", + "requires": { + "memory-fs": "^0.5.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0" + } + } + } + } + }, + "webpack-cli": { + "version": "3.3.10", + "requires": { + "enhanced-resolve": "4.1.0", + "yargs": "13.2.4" + } + }, + "yargs": { + "version": "13.2.4", + "requires": { + "string-width": "^3.0.0" + } + } } }, "@rocket.chat/fuselage-hooks": { - "version": "0.2.0-alpha.23", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-hooks/-/fuselage-hooks-0.2.0-alpha.23.tgz", - "integrity": "sha512-HsEgwTV0i+XrBfYY4T38MYk20Jq5y8STcQOzBox39T8IpriTS8v3GFkz4ja2JkjCj44k7Rsr0vtEbhhHmM20xw==" - }, - "@rocket.chat/fuselage-tokens": { - "version": "0.2.0-alpha.23", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.2.0-alpha.23.tgz", - "integrity": "sha512-rpRgkp8TOqveaZk4odpAkjuv6ecHURCuzwo5ACzrcIGfRi18CH9LEt+X7dddWIKFUS+XQigtusRdgs7ZtYU5lg==" + "version": "0.2.0-alpha.25", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-hooks/-/fuselage-hooks-0.2.0-alpha.25.tgz", + "integrity": "sha512-3rGclcanS5ezQFMtQYGmfGRs+M2vFBug/wLzYSBJXtXlmqwZY4tobErU+QejMxqkH1pI8jOP2ymKv4y/QdW84w==" }, "@rocket.chat/fuselage-ui-kit": { - "version": "0.2.0-alpha.23", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-ui-kit/-/fuselage-ui-kit-0.2.0-alpha.23.tgz", - "integrity": "sha512-en4UuVksaEZgYt7b3KMtrW2KiUXg/K7eKXddoogG1cN+f7rgaUP9kMsd0Kyo5WUCCQOa0GDmbrVCRpK0aKSMXA==", + "version": "0.2.0-alpha.25", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-ui-kit/-/fuselage-ui-kit-0.2.0-alpha.25.tgz", + "integrity": "sha512-GuDGhPImF6BaJKhkJ/f0nnz7dkvtjXDy+cMpd22wdwQZClBi5SF2LQp0hTzrAtqHSe1/sC7n/YNW8O+WFVGCYA==", "requires": { - "@rocket.chat/ui-kit": "^0.2.0-alpha.23" + "@rocket.chat/ui-kit": "^0.2.0-alpha.25" } }, "@rocket.chat/icons": { - "version": "0.2.0-alpha.23", - "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.2.0-alpha.23.tgz", - "integrity": "sha512-iK/R8JP234RsS90su5M9vh5VSOaxHFRfYtXa3KfJP2Yuq4YOLfXTyj+Kq1OEC4kdUbWUBN/6w+n3W4uSSWjWdA==" + "version": "0.2.0-alpha.25", + "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.2.0-alpha.25.tgz", + "integrity": "sha512-EmsbESuMtUTC1P5Tg2p8LfzkujYVqhWNKBFecU66b3vROpmzI2OHjEoJG70olcJ4Pw7071VarpsAlmByj+8CjQ==" }, "@rocket.chat/livechat": { "version": "1.3.0", @@ -2830,9 +3679,9 @@ } }, "@rocket.chat/ui-kit": { - "version": "0.2.0-alpha.23", - "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.2.0-alpha.23.tgz", - "integrity": "sha512-K5DMWrNp238eptvRH1QertyyidYYfuwVkb8xyg3OFKzRictqLbSK1QkK1lfJmZFMguJbaF2sGIorHsJjNMKubA==" + "version": "0.2.0-alpha.25", + "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.2.0-alpha.25.tgz", + "integrity": "sha512-k9Z/IEPOzdM9GUneKf10AL/ZYZxmx2aFe+wbb5BRvz3GA0TpkguXbeS83Yvg3OJIt86ls/5VdQ7K6UDb6YU0Yw==" }, "@settlin/spacebars-loader": { "version": "1.0.7", diff --git a/package.json b/package.json index 9b37cd7111303..f49c93b33cf59 100644 --- a/package.json +++ b/package.json @@ -123,11 +123,11 @@ "@google-cloud/storage": "^2.3.1", "@google-cloud/vision": "^1.8.0", "@rocket.chat/apps-engine": "^1.12.0-beta.2731", - "@rocket.chat/fuselage": "^0.2.0-alpha.23", - "@rocket.chat/fuselage-hooks": "^0.2.0-alpha.23", - "@rocket.chat/fuselage-ui-kit": "^0.2.0-alpha.23", - "@rocket.chat/icons": "^0.2.0-alpha.23", - "@rocket.chat/ui-kit": "^0.2.0-alpha.23", + "@rocket.chat/fuselage": "^0.2.0-alpha.25", + "@rocket.chat/fuselage-hooks": "^0.2.0-alpha.25", + "@rocket.chat/fuselage-ui-kit": "^0.2.0-alpha.25", + "@rocket.chat/icons": "^0.2.0-alpha.25", + "@rocket.chat/ui-kit": "^0.2.0-alpha.25", "@slack/client": "^4.8.0", "adm-zip": "RocketChat/adm-zip", "archiver": "^3.0.0", From 5b840d14065ead63c97560e35ded9f1536c576e8 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Mon, 10 Feb 2020 19:26:49 -0300 Subject: [PATCH 121/141] [FIX] Introduce AppLivechatBridge.isOnlineAsync method (#16467) * Make the isOnline bridge method as asynchronous. * Update Apps-Engine version Co-authored-by: Douglas Gubert --- app/apps/server/bridges/livechat.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/apps/server/bridges/livechat.js b/app/apps/server/bridges/livechat.js index f319dfd7ab89b..f719b8251cbe1 100644 --- a/app/apps/server/bridges/livechat.js +++ b/app/apps/server/bridges/livechat.js @@ -16,6 +16,10 @@ export class AppLivechatBridge { return Livechat.online(department); } + async isOnlineAsync(department) { + return Livechat.online(department); + } + async createMessage(message, appId) { this.orch.debugLog(`The App ${ appId } is creating a new message.`); From 3a570b7d2a9019d9b1d8fa1240b88529130f1b8b Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Tue, 11 Feb 2020 00:06:33 -0300 Subject: [PATCH 122/141] [FIX] Do not stop on DM imports if one of users was not found (#16547) --- app/importer-slack/server/importer.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/importer-slack/server/importer.js b/app/importer-slack/server/importer.js index 4310949e1a9da..8cbfb213f5753 100644 --- a/app/importer-slack/server/importer.js +++ b/app/importer-slack/server/importer.js @@ -626,6 +626,16 @@ export class SlackImporter extends Base { channel.rocketId = existingRoom._id; Rooms.update({ _id: channel.rocketId }, { $addToSet: { importIds: channel.id } }); } else { + if (!userId1) { + this.logger.error(`DM creation: User not found for id ${ channel.members[0] } and channel id ${ channel.id }`); + return; + } + + if (!userId2) { + this.logger.error(`DM creation: User not found for id ${ channel.members[1] } and channel id ${ channel.id }`); + return; + } + const user = this._getBasicUserData(userId2); if (!user) { From 5ef94d9e9ab0a583989dea34d1ac074488ac3ffe Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Tue, 11 Feb 2020 00:23:54 -0300 Subject: [PATCH 123/141] Regression: UIkit input states (#16552) --- package-lock.json | 895 ++-------------------------------------------- package.json | 10 +- 2 files changed, 28 insertions(+), 877 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36ef79210d8f8..9a4ef952c8812 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2711,885 +2711,36 @@ } }, "@rocket.chat/fuselage": { - "version": "0.2.0-alpha.25", + "version": "0.2.0-alpha.29", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage/-/fuselage-0.2.0-alpha.29.tgz", + "integrity": "sha512-tvWOIenjk1rBawwON5uSIq+Y+bIfJI/8kU799uyR0prTf6n3mT1qEJeUH1PQ3QcPnP4ujq1ur0VCrag6m4BBng==", "requires": { - "@rocket.chat/fuselage-tokens": "^0.2.0-alpha.25", - "@rocket.chat/icons": "^0.2.0-alpha.25" - }, - "dependencies": { - "@babel/generator": { - "version": "7.7.4", - "requires": { - "source-map": "^0.5.0" - } - }, - "@babel/parser": { - "version": "7.7.5" - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.4" - }, - "@rocket.chat/fuselage-tokens": { - "version": "0.2.0-alpha.25", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.2.0-alpha.25.tgz", - "integrity": "sha512-0HTOBj/m04yF3KI35Tj0rH3gf7AHVtXR4UDebvDU8PnXZwuWMhhbwzE5uFkAANLIrpH8tSkujOFatF+USMtvsg==" - }, - "@rocket.chat/icons": { - "version": "0.2.0-alpha.25", - "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.2.0-alpha.25.tgz", - "integrity": "sha512-EmsbESuMtUTC1P5Tg2p8LfzkujYVqhWNKBFecU66b3vROpmzI2OHjEoJG70olcJ4Pw7071VarpsAlmByj+8CjQ==" - }, - "@storybook/addon-actions": { - "version": "5.2.8", - "requires": { - "@storybook/addons": "5.2.8", - "@storybook/api": "5.2.8", - "@storybook/client-api": "5.2.8", - "@storybook/components": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/theming": "5.2.8", - "react": "^16.8.3", - "react-inspector": "^3.0.2" - }, - "dependencies": { - "@storybook/components": { - "version": "5.2.8", - "requires": { - "@storybook/theming": "5.2.8", - "markdown-to-jsx": "^6.9.1", - "react": "^16.8.3", - "react-dom": "^16.8.3", - "react-focus-lock": "^1.18.3", - "react-helmet-async": "^1.0.2", - "react-popper-tooltip": "^2.8.3", - "react-syntax-highlighter": "^8.0.1", - "react-textarea-autosize": "^7.1.0", - "simplebar-react": "^1.0.0-alpha.6" - }, - "dependencies": { - "react-dom": { - "version": "16.11.0", - "dependencies": { - "scheduler": { - "version": "0.18.0" - } - } - }, - "react-helmet-async": { - "version": "1.0.4" - }, - "react-popper-tooltip": { - "version": "2.10.0", - "requires": { - "react-popper": "^1.3.4" - } - }, - "simplebar-react": { - "version": "1.2.3" - } - } - }, - "create-react-context": { - "version": "0.3.0" - }, - "markdown-to-jsx": { - "version": "6.10.3" - }, - "react": { - "version": "16.11.0" - }, - "react-clientside-effect": { - "version": "1.2.2" - }, - "react-focus-lock": { - "version": "1.19.1", - "requires": { - "react-clientside-effect": "^1.2.0" - } - }, - "react-inspector": { - "version": "3.0.2" - }, - "react-popper": { - "version": "1.3.6", - "requires": { - "create-react-context": "^0.3.0" - } - }, - "react-syntax-highlighter": { - "version": "8.1.0" - }, - "react-textarea-autosize": { - "version": "7.1.2" - } - } - }, - "@storybook/addon-backgrounds": { - "version": "5.2.8", - "requires": { - "@storybook/addons": "5.2.8", - "@storybook/api": "5.2.8", - "@storybook/components": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/theming": "5.2.8", - "react": "^16.8.3" - }, - "dependencies": { - "@storybook/components": { - "version": "5.2.8", - "requires": { - "@storybook/theming": "5.2.8", - "markdown-to-jsx": "^6.9.1", - "react": "^16.8.3", - "react-dom": "^16.8.3", - "react-focus-lock": "^1.18.3", - "react-helmet-async": "^1.0.2", - "react-popper-tooltip": "^2.8.3", - "react-syntax-highlighter": "^8.0.1", - "react-textarea-autosize": "^7.1.0", - "simplebar-react": "^1.0.0-alpha.6" - }, - "dependencies": { - "react-dom": { - "version": "16.11.0", - "dependencies": { - "scheduler": { - "version": "0.18.0" - } - } - }, - "react-helmet-async": { - "version": "1.0.4" - }, - "react-popper-tooltip": { - "version": "2.10.0", - "requires": { - "react-popper": "^1.3.4" - } - }, - "simplebar-react": { - "version": "1.2.3" - } - } - }, - "create-react-context": { - "version": "0.3.0" - }, - "markdown-to-jsx": { - "version": "6.10.3" - }, - "react": { - "version": "16.11.0" - }, - "react-clientside-effect": { - "version": "1.2.2" - }, - "react-focus-lock": { - "version": "1.19.1", - "requires": { - "react-clientside-effect": "^1.2.0" - } - }, - "react-popper": { - "version": "1.3.6", - "requires": { - "create-react-context": "^0.3.0" - } - }, - "react-syntax-highlighter": { - "version": "8.1.0" - }, - "react-textarea-autosize": { - "version": "7.1.2" - } - } - }, - "@storybook/addon-centered": { - "version": "5.2.8", - "requires": { - "@storybook/addons": "5.2.8" - } - }, - "@storybook/addon-docs": { - "version": "5.2.8", - "requires": { - "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.3", - "@storybook/addons": "5.2.8", - "@storybook/api": "5.2.8", - "@storybook/components": "5.2.8", - "@storybook/router": "5.2.8", - "@storybook/source-loader": "5.2.8", - "@storybook/theming": "5.2.8" - } - }, - "@storybook/addon-jest": { - "version": "5.2.8", - "requires": { - "@storybook/addons": "5.2.8", - "@storybook/api": "5.2.8", - "@storybook/components": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/theming": "5.2.8", - "react": "^16.8.3", - "react-sizeme": "^2.5.2" - }, - "dependencies": { - "react": { - "version": "16.11.0" - }, - "react-sizeme": { - "version": "2.6.10" - } - } - }, - "@storybook/addon-knobs": { - "version": "5.2.8", - "requires": { - "@storybook/addons": "5.2.8", - "@storybook/api": "5.2.8", - "@storybook/client-api": "5.2.8", - "@storybook/components": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/theming": "5.2.8" - } - }, - "@storybook/addon-links": { - "version": "5.2.8", - "requires": { - "@storybook/addons": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/router": "5.2.8" - } - }, - "@storybook/addon-options": { - "version": "5.2.8", - "requires": { - "@storybook/addons": "5.2.8" - } - }, - "@storybook/addon-viewport": { - "version": "5.2.8", - "requires": { - "@storybook/addons": "5.2.8", - "@storybook/api": "5.2.8", - "@storybook/components": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/theming": "5.2.8" - } - }, - "@storybook/addons": { - "version": "5.2.8", - "requires": { - "@storybook/api": "5.2.8", - "@storybook/channels": "5.2.8", - "@storybook/core-events": "5.2.8" - } - }, - "@storybook/api": { - "version": "5.2.8", - "requires": { - "@storybook/channels": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/router": "5.2.8", - "@storybook/theming": "5.2.8", - "react": "^16.8.3" - }, - "dependencies": { - "react": { - "version": "16.11.0" - } - } - }, - "@storybook/channel-postmessage": { - "version": "5.2.8", - "requires": { - "@storybook/channels": "5.2.8" - } - }, - "@storybook/channels": { - "version": "5.2.8" - }, - "@storybook/client-api": { - "version": "5.2.8", - "requires": { - "@storybook/addons": "5.2.8", - "@storybook/channel-postmessage": "5.2.8", - "@storybook/channels": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/router": "5.2.8", - "is-plain-object": "^3.0.0" - } - }, - "@storybook/components": { - "version": "5.2.8", - "requires": { - "@storybook/theming": "5.2.8", - "markdown-to-jsx": "^6.9.1", - "react": "^16.8.3", - "react-dom": "^16.8.3", - "react-focus-lock": "^1.18.3", - "react-helmet-async": "^1.0.2", - "react-popper-tooltip": "^2.8.3", - "react-syntax-highlighter": "^8.0.1", - "react-textarea-autosize": "^7.1.0", - "simplebar-react": "^1.0.0-alpha.6" - }, - "dependencies": { - "create-react-context": { - "version": "0.3.0" - }, - "markdown-to-jsx": { - "version": "6.10.3" - }, - "react": { - "version": "16.11.0" - }, - "react-clientside-effect": { - "version": "1.2.2" - }, - "react-dom": { - "version": "16.11.0", - "dependencies": { - "scheduler": { - "version": "0.18.0" - } - } - }, - "react-focus-lock": { - "version": "1.19.1", - "requires": { - "react-clientside-effect": "^1.2.0" - } - }, - "react-helmet-async": { - "version": "1.0.4" - }, - "react-popper": { - "version": "1.3.6", - "requires": { - "create-react-context": "^0.3.0" - } - }, - "react-popper-tooltip": { - "version": "2.10.0", - "requires": { - "react-popper": "^1.3.4" - } - }, - "react-syntax-highlighter": { - "version": "8.1.0" - }, - "react-textarea-autosize": { - "version": "7.1.2" - }, - "simplebar-react": { - "version": "1.2.3" - } - } - }, - "@storybook/core": { - "version": "5.2.8", - "requires": { - "@babel/plugin-proposal-object-rest-spread": "^7.6.2", - "@babel/preset-env": "^7.7.1", - "@storybook/addons": "5.2.8", - "@storybook/channel-postmessage": "5.2.8", - "@storybook/client-api": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/node-logger": "5.2.8", - "@storybook/router": "5.2.8", - "@storybook/theming": "5.2.8", - "@storybook/ui": "5.2.8", - "autoprefixer": "^9.4.9", - "find-cache-dir": "^3.0.0", - "resolve": "^1.11.0", - "terser-webpack-plugin": "^1.2.4", - "webpack": "^4.33.0" - }, - "dependencies": { - "@babel/preset-env": { - "version": "7.7.6", - "requires": { - "@babel/plugin-proposal-object-rest-spread": "^7.7.4", - "browserslist": "^4.6.0", - "core-js-compat": "^3.4.7", - "semver": "^5.5.0" - }, - "dependencies": { - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.7" - }, - "semver": { - "version": "5.7.1" - } - } - }, - "autoprefixer": { - "version": "9.7.1", - "requires": { - "browserslist": "^4.7.2", - "caniuse-lite": "^1.0.30001006", - "postcss": "^7.0.21", - "postcss-value-parser": "^4.0.2" - }, - "dependencies": { - "browserslist": { - "version": "4.7.3", - "requires": { - "caniuse-lite": "^1.0.30001010", - "node-releases": "^1.1.40" - }, - "dependencies": { - "caniuse-lite": { - "version": "1.0.30001015" - } - } - } - } - }, - "caniuse-lite": { - "version": "1.0.30001012" - }, - "enhanced-resolve": { - "version": "4.1.1", - "requires": { - "memory-fs": "^0.5.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0" - } - } - }, - "find-cache-dir": { - "version": "3.2.0", - "requires": { - "make-dir": "^3.0.0", - "pkg-dir": "^4.1.0" - } - }, - "node-releases": { - "version": "1.1.42" - }, - "postcss": { - "version": "7.0.23", - "requires": { - "source-map": "^0.6.1" - } - }, - "serialize-javascript": { - "version": "1.9.1" - }, - "source-map": { - "version": "0.6.1" - }, - "terser-webpack-plugin": { - "version": "1.4.1", - "requires": { - "find-cache-dir": "^2.1.0", - "serialize-javascript": "^1.7.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "requires": { - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "requires": { - "semver": "^5.6.0" - } - }, - "pkg-dir": { - "version": "3.0.0" - }, - "semver": { - "version": "5.7.1" - } - } - }, - "webpack": { - "version": "4.41.2", - "requires": { - "acorn": "^6.2.1", - "enhanced-resolve": "^4.1.0", - "terser-webpack-plugin": "^1.4.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "requires": { - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "requires": { - "semver": "^5.6.0" - } - }, - "pkg-dir": { - "version": "3.0.0" - }, - "semver": { - "version": "5.7.1" - }, - "serialize-javascript": { - "version": "2.1.2" - }, - "terser-webpack-plugin": { - "version": "1.4.3", - "requires": { - "find-cache-dir": "^2.1.0", - "serialize-javascript": "^2.1.2", - "source-map": "^0.6.1" - } - }, - "webpack": { - "version": "4.41.4", - "requires": { - "acorn": "^6.2.1", - "enhanced-resolve": "^4.1.0", - "terser-webpack-plugin": "^1.4.3" - } - } - } - } - } - }, - "@storybook/core-events": { - "version": "5.2.8" - }, - "@storybook/node-logger": { - "version": "5.2.8" - }, - "@storybook/react": { - "version": "5.2.8", - "requires": { - "@storybook/addons": "5.2.8", - "@storybook/core": "5.2.8", - "@storybook/node-logger": "5.2.8", - "mini-css-extract-plugin": "^0.7.0", - "webpack": "^4.33.0" - }, - "dependencies": { - "enhanced-resolve": { - "version": "4.1.1", - "requires": { - "memory-fs": "^0.5.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0" - } - } - }, - "mini-css-extract-plugin": { - "version": "0.7.0" - }, - "webpack": { - "version": "4.41.2", - "requires": { - "acorn": "^6.2.1", - "enhanced-resolve": "^4.1.0", - "terser-webpack-plugin": "^1.4.1" - } - } - } - }, - "@storybook/router": { - "version": "5.2.8" - }, - "@storybook/source-loader": { - "version": "5.2.8", - "requires": { - "@storybook/addons": "5.2.8", - "@storybook/router": "5.2.8" - } - }, - "@storybook/theming": { - "version": "5.2.8" - }, - "@storybook/ui": { - "version": "5.2.8", - "requires": { - "@storybook/addons": "5.2.8", - "@storybook/api": "5.2.8", - "@storybook/channels": "5.2.8", - "@storybook/components": "5.2.8", - "@storybook/core-events": "5.2.8", - "@storybook/router": "5.2.8", - "@storybook/theming": "5.2.8", - "markdown-to-jsx": "^6.9.3", - "react": "^16.8.3", - "react-dom": "^16.8.3", - "react-helmet-async": "^1.0.2", - "react-hotkeys": "2.0.0-pre4", - "react-sizeme": "^2.6.7", - "regenerator-runtime": "^0.13.2" - }, - "dependencies": { - "markdown-to-jsx": { - "version": "6.10.3" - }, - "react": { - "version": "16.11.0" - }, - "react-dom": { - "version": "16.11.0", - "requires": { - "scheduler": "^0.17.0" - } - }, - "react-helmet-async": { - "version": "1.0.4" - }, - "react-hotkeys": { - "version": "2.0.0-pre4" - }, - "react-sizeme": { - "version": "2.6.10", - "dependencies": { - "react-dom": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.12.0.tgz", - "integrity": "sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==", - "requires": { - "scheduler": "^0.18.0" - }, - "dependencies": { - "react": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", - "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==" - } - } - }, - "scheduler": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", - "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==" - } - } - }, - "regenerator-runtime": { - "version": "0.13.3" - } - } - }, - "acorn": { - "version": "6.4.0" - }, - "autoprefixer": { - "version": "9.7.3", - "requires": { - "browserslist": "^4.8.0", - "caniuse-lite": "^1.0.30001012", - "postcss": "^7.0.23", - "postcss-value-parser": "^4.0.2" - }, - "dependencies": { - "caniuse-lite": { - "version": "1.0.30001015" - } - } - }, - "browserslist": { - "version": "4.8.2", - "requires": { - "caniuse-lite": "^1.0.30001015", - "node-releases": "^1.1.42" - } - }, - "caniuse-lite": { - "version": "1.0.30001016" - }, - "core-js-compat": { - "version": "3.6.0", - "requires": { - "browserslist": "^4.8.2", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0" - } - } - }, - "emoji-regex": { - "version": "7.0.3" - }, - "enhanced-resolve": { - "version": "4.1.0" - }, - "is-plain-object": { - "version": "3.0.0", - "requires": { - "isobject": "^4.0.0" - } - }, - "isobject": { - "version": "4.0.0" - }, - "locate-path": { - "version": "5.0.0", - "requires": { - "p-locate": "^4.1.0" - } - }, - "loki": { - "version": "0.16.0", - "requires": { - "fs-extra": "^7.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1" - } - } - }, - "make-dir": { - "version": "3.0.0" - }, - "mini-css-extract-plugin": { - "version": "0.8.2" - }, - "node-releases": { - "version": "1.1.43" - }, - "p-locate": { - "version": "4.1.0" - }, - "path-exists": { - "version": "4.0.0" - }, - "pkg-dir": { - "version": "4.2.0", - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.24", - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1" - } - } - }, - "postcss-value-parser": { - "version": "4.0.2" - }, - "resolve": { - "version": "1.12.0" - }, - "sass-loader": { - "version": "8.0.0", - "requires": { - "schema-utils": "^2.1.0" - }, - "dependencies": { - "schema-utils": { - "version": "2.6.1" - } - } - }, - "scheduler": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz", - "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==" - }, - "source-map": { - "version": "0.5.7" - }, - "string-width": { - "version": "3.1.0", - "requires": { - "emoji-regex": "^7.0.1" - } - }, - "terser-webpack-plugin": { - "version": "1.4.3", - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1" - } - } - }, - "webpack": { - "version": "4.41.4", - "requires": { - "acorn": "^6.2.1", - "enhanced-resolve": "^4.1.0", - "terser-webpack-plugin": "^1.4.3" - }, - "dependencies": { - "enhanced-resolve": { - "version": "4.1.1", - "requires": { - "memory-fs": "^0.5.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0" - } - } - } - } - }, - "webpack-cli": { - "version": "3.3.10", - "requires": { - "enhanced-resolve": "4.1.0", - "yargs": "13.2.4" - } - }, - "yargs": { - "version": "13.2.4", - "requires": { - "string-width": "^3.0.0" - } - } + "@rocket.chat/fuselage-tokens": "^0.2.0-alpha.29", + "@rocket.chat/icons": "^0.2.0-alpha.29" } }, "@rocket.chat/fuselage-hooks": { - "version": "0.2.0-alpha.25", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-hooks/-/fuselage-hooks-0.2.0-alpha.25.tgz", - "integrity": "sha512-3rGclcanS5ezQFMtQYGmfGRs+M2vFBug/wLzYSBJXtXlmqwZY4tobErU+QejMxqkH1pI8jOP2ymKv4y/QdW84w==" + "version": "0.2.0-alpha.29", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-hooks/-/fuselage-hooks-0.2.0-alpha.29.tgz", + "integrity": "sha512-FT24q8oiqR7hf/GnNZv11eFSkDkUNFf08/odjFqyprl7b2xwDe7H/xca2/R15kBqfq1bi9eEiSkuZswkNFy4ow==" + }, + "@rocket.chat/fuselage-tokens": { + "version": "0.2.0-alpha.29", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.2.0-alpha.29.tgz", + "integrity": "sha512-JcAU/LI9cqn4TA5DmeKrUcUvFP3iEK608yUDRSyMdkemuQvDEe58TQJT36sE00DVcaYZlj+iTvHSlVhoDfy4YA==" }, "@rocket.chat/fuselage-ui-kit": { - "version": "0.2.0-alpha.25", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-ui-kit/-/fuselage-ui-kit-0.2.0-alpha.25.tgz", - "integrity": "sha512-GuDGhPImF6BaJKhkJ/f0nnz7dkvtjXDy+cMpd22wdwQZClBi5SF2LQp0hTzrAtqHSe1/sC7n/YNW8O+WFVGCYA==", + "version": "0.2.0-alpha.29", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-ui-kit/-/fuselage-ui-kit-0.2.0-alpha.29.tgz", + "integrity": "sha512-8oZkWh4No854vHNFfFeLrs5GNF5jbtnCGeCuou83fKi6v8mnMueWYun+3ffo1sZYN9ylymNg5n8zI8rwSR3tDw==", "requires": { - "@rocket.chat/ui-kit": "^0.2.0-alpha.25" + "@rocket.chat/ui-kit": "^0.2.0-alpha.29" } }, "@rocket.chat/icons": { - "version": "0.2.0-alpha.25", - "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.2.0-alpha.25.tgz", - "integrity": "sha512-EmsbESuMtUTC1P5Tg2p8LfzkujYVqhWNKBFecU66b3vROpmzI2OHjEoJG70olcJ4Pw7071VarpsAlmByj+8CjQ==" + "version": "0.2.0-alpha.29", + "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.2.0-alpha.29.tgz", + "integrity": "sha512-QMQK+fyu2cIRBzNwlOvl/zCX62TyY2EsgKc+YArBrr2kgHkpxGHy8CJIXyFg1dVOYX/LeehRNSnFW1naxCM1ww==" }, "@rocket.chat/livechat": { "version": "1.3.0", @@ -3679,9 +2830,9 @@ } }, "@rocket.chat/ui-kit": { - "version": "0.2.0-alpha.25", - "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.2.0-alpha.25.tgz", - "integrity": "sha512-k9Z/IEPOzdM9GUneKf10AL/ZYZxmx2aFe+wbb5BRvz3GA0TpkguXbeS83Yvg3OJIt86ls/5VdQ7K6UDb6YU0Yw==" + "version": "0.2.0-alpha.29", + "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.2.0-alpha.29.tgz", + "integrity": "sha512-JBM9VZqi5DQiIeu4e7iT+ESsWjIrSBDoPg7hxfADa7p4Km4PZB/Qm3rgNOa+Ag2gg9v7jdpzChPDY8erim9KbQ==" }, "@settlin/spacebars-loader": { "version": "1.0.7", diff --git a/package.json b/package.json index f49c93b33cf59..5d23808819a85 100644 --- a/package.json +++ b/package.json @@ -123,11 +123,11 @@ "@google-cloud/storage": "^2.3.1", "@google-cloud/vision": "^1.8.0", "@rocket.chat/apps-engine": "^1.12.0-beta.2731", - "@rocket.chat/fuselage": "^0.2.0-alpha.25", - "@rocket.chat/fuselage-hooks": "^0.2.0-alpha.25", - "@rocket.chat/fuselage-ui-kit": "^0.2.0-alpha.25", - "@rocket.chat/icons": "^0.2.0-alpha.25", - "@rocket.chat/ui-kit": "^0.2.0-alpha.25", + "@rocket.chat/fuselage": "^0.2.0-alpha.29", + "@rocket.chat/fuselage-hooks": "^0.2.0-alpha.29", + "@rocket.chat/fuselage-ui-kit": "^0.2.0-alpha.29", + "@rocket.chat/icons": "^0.2.0-alpha.29", + "@rocket.chat/ui-kit": "^0.2.0-alpha.29", "@slack/client": "^4.8.0", "adm-zip": "RocketChat/adm-zip", "archiver": "^3.0.0", From c34504402fcd1647fe0cfff8284531e60a7780b8 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Tue, 11 Feb 2020 00:28:19 -0300 Subject: [PATCH 124/141] Bump version to 3.0.0-rc.8 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 72 +++++++++++++++++++++++++++++++++++++++ HISTORY.md | 49 ++++++++++++++++++++++++-- app/utils/rocketchat.info | 2 +- package.json | 2 +- 5 files changed, 122 insertions(+), 5 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 03b88a7ff34af..68f5343b6cc5a 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 3.0.0-rc.7 +ENV RC_VERSION 3.0.0-rc.8 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 3e8c6be547b84..ca9a5d78bdcd6 100644 --- a/.github/history.json +++ b/.github/history.json @@ -39482,6 +39482,78 @@ ] } ] + }, + "2.4.9": { + "node_version": "8.17.0", + "npm_version": "6.13.4", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "16544", + "title": "Release 2.4.9", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "16452", + "title": "[FIX] `stdout` streamer infinite loop", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + } + ] + }, + "3.0.0-rc.8": { + "node_version": "12.14.0", + "npm_version": "6.13.4", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "16552", + "title": "Regression: UIkit input states", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "16547", + "title": "[FIX] Do not stop on DM imports if one of users was not found", + "userLogin": "rodrigok", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "16467", + "title": "[FIX] Introduce AppLivechatBridge.isOnlineAsync method", + "userLogin": "renatobecker", + "milestone": "3.0.0", + "contributors": [ + "renatobecker", + "d-gubert" + ] + }, + { + "pr": "16540", + "title": "Regression: UIKit missing select states: error/disabled", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + } + ] } } } \ No newline at end of file diff --git a/HISTORY.md b/HISTORY.md index 1760950a98874..430698e55584c 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,29 @@ # 3.0.0 (Under Release Candidate Process) +## 3.0.0-rc.8 +`2020-02-11 · 2 🐛 · 2 🔍 · 4 👩‍💻👨‍💻` + +### 🐛 Bug fixes + +- Do not stop on DM imports if one of users was not found ([#16547](https://github.com/RocketChat/Rocket.Chat/pull/16547)) +- Introduce AppLivechatBridge.isOnlineAsync method ([#16467](https://github.com/RocketChat/Rocket.Chat/pull/16467)) + +
+🔍 Minor changes + +- Regression: UIkit input states ([#16552](https://github.com/RocketChat/Rocket.Chat/pull/16552)) +- Regression: UIKit missing select states: error/disabled ([#16540](https://github.com/RocketChat/Rocket.Chat/pull/16540)) + +
+ +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@d-gubert](https://github.com/d-gubert) +- [@ggazzo](https://github.com/ggazzo) +- [@renatobecker](https://github.com/renatobecker) +- [@rodrigok](https://github.com/rodrigok) + ## 3.0.0-rc.7 `2020-02-08 · 1 ️️️⚠️ · 1 👩‍💻👨‍💻` @@ -119,7 +142,7 @@ - [@sampaiodiego](https://github.com/sampaiodiego) ## 3.0.0-rc.0 -`2020-02-04 · 5 ️️️⚠️ · 10 🎉 · 11 🚀 · 23 🐛 · 18 🔍 · 19 👩‍💻👨‍💻` +`2020-02-04 · 5 ️️️⚠️ · 10 🎉 · 11 🚀 · 22 🐛 · 18 🔍 · 19 👩‍💻👨‍💻` ### ⚠️ BREAKING CHANGES @@ -159,7 +182,6 @@ ### 🐛 Bug fixes - Result of get avatar from url can be null ([#16123](https://github.com/RocketChat/Rocket.Chat/pull/16123)) -- `stdout` streamer infinite loop ([#16452](https://github.com/RocketChat/Rocket.Chat/pull/16452)) - Rooms not being marked as read sometimes ([#16397](https://github.com/RocketChat/Rocket.Chat/pull/16397)) - Container heights ([#16388](https://github.com/RocketChat/Rocket.Chat/pull/16388)) - Mail Msg Cancel button not closing the flexbar ([#16263](https://github.com/RocketChat/Rocket.Chat/pull/16263) by [@ashwaniYDV](https://github.com/ashwaniYDV)) @@ -231,6 +253,29 @@ - [@sampaiodiego](https://github.com/sampaiodiego) - [@tassoevan](https://github.com/tassoevan) +# 2.4.9 +`2020-02-10 · 1 🐛 · 1 🔍 · 1 👩‍💻👨‍💻` + +### Engine versions +- Node: `8.17.0` +- NPM: `6.13.4` +- MongoDB: `3.4, 3.6, 4.0` + +### 🐛 Bug fixes + +- `stdout` streamer infinite loop ([#16452](https://github.com/RocketChat/Rocket.Chat/pull/16452)) + +
+🔍 Minor changes + +- Release 2.4.9 ([#16544](https://github.com/RocketChat/Rocket.Chat/pull/16544)) + +
+ +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@sampaiodiego](https://github.com/sampaiodiego) + # 2.4.8 `2020-02-07 · 2 🔍 · 1 👩‍💻👨‍💻` diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 6731584d84a24..aed9bf90a9c5a 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.0.0-rc.7" + "version": "3.0.0-rc.8" } diff --git a/package.json b/package.json index 4d7a04cbf65b2..ec5cc640ff05e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.0.0-rc.7", + "version": "3.0.0-rc.8", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 3abc887e7507a901609b751b72fcc9dd50075015 Mon Sep 17 00:00:00 2001 From: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Date: Tue, 11 Feb 2020 13:22:16 -0300 Subject: [PATCH 125/141] Regression: Modal onSubmit (#16556) --- app/ui-message/client/blocks/MessageBlock.js | 2 +- app/ui-message/client/blocks/ModalBlock.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/ui-message/client/blocks/MessageBlock.js b/app/ui-message/client/blocks/MessageBlock.js index e9af533655ffe..13a3fa061ef36 100644 --- a/app/ui-message/client/blocks/MessageBlock.js +++ b/app/ui-message/client/blocks/MessageBlock.js @@ -73,7 +73,7 @@ export const modalBlockWithContext = ({ // Handle Tab, Shift + Tab, Enter and Escape const handleKeyDown = useCallback((event) => { if (event.keyCode === 13) { // ENTER - return onSubmit(); + return onSubmit(event); } if (event.keyCode === 27) { // ESC diff --git a/app/ui-message/client/blocks/ModalBlock.js b/app/ui-message/client/blocks/ModalBlock.js index 1fb9cf7290723..fcf516f176363 100644 --- a/app/ui-message/client/blocks/ModalBlock.js +++ b/app/ui-message/client/blocks/ModalBlock.js @@ -86,6 +86,7 @@ Template.ModalBlock.onRendered(async function() { }), onSubmit: (e) => { if (e) { + e.nativeEvent.stopImmediatePropagation(); e.stopPropagation(); e.preventDefault(); } From ad1dafcab85ea2731a966a9ae3b155f8923dd2d4 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Wed, 12 Feb 2020 18:45:33 -0300 Subject: [PATCH 126/141] [FIX] Invite links proxy URLs not working when using CDN (#16581) --- app/utils/lib/getURL.js | 8 ++++---- app/utils/lib/getURL.tests.js | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/utils/lib/getURL.js b/app/utils/lib/getURL.js index 7b52a1ba84261..43800aad5c3b7 100644 --- a/app/utils/lib/getURL.js +++ b/app/utils/lib/getURL.js @@ -36,6 +36,10 @@ export const _getURL = (path, { cdn, full, cloud, cloud_route, _cdn_prefix, _roo const url = s.rtrim(`${ pathPrefix }/${ finalPath }`, '/') + query; + if (cloud) { + return getCloudUrl(url, siteUrl, cloudRoute); + } + if (cdn && cdnPrefix !== '') { return cdnPrefix + url; } @@ -44,10 +48,6 @@ export const _getURL = (path, { cdn, full, cloud, cloud_route, _cdn_prefix, _roo return siteUrl + url; } - if (cloud) { - return getCloudUrl(url, siteUrl, cloudRoute); - } - return url; }; diff --git a/app/utils/lib/getURL.tests.js b/app/utils/lib/getURL.tests.js index 27ab4439ddef1..73d6d01865501 100644 --- a/app/utils/lib/getURL.tests.js +++ b/app/utils/lib/getURL.tests.js @@ -89,7 +89,7 @@ const testCases = (options) => { } } } else if (options._cdn_prefix === '') { - if (options.full && !options.cdn) { + if (options.full && !options.cdn && !options.cloud) { it('should return with host if full: true', () => { testPaths(options, (path) => _site_url + path); }); @@ -107,19 +107,19 @@ const testCases = (options) => { }); } - if (options.full && options.cdn) { + if (options.full && options.cdn && !options.cloud) { it('should return with host if full: true and cdn: true', () => { testPaths(options, (path) => _site_url + path); }); } } else { - if (options.full && !options.cdn) { + if (options.full && !options.cdn && !options.cloud) { it('should return with host if full: true', () => { testPaths(options, (path) => _site_url + path); }); } - if (!options.full && options.cdn) { + if (!options.full && options.cdn && !options.cloud) { it('should return with cdn prefix if cdn: true', () => { testPaths(options, (path) => options._cdn_prefix + path); }); @@ -131,7 +131,7 @@ const testCases = (options) => { }); } - if (options.full && options.cdn) { + if (options.full && options.cdn && !options.cloud) { it('should return with host if full: true and cdn: true', () => { testPaths(options, (path) => options._cdn_prefix + path); }); From e7d13fd36f03dc1510f3bfad80592cec150f7d2d Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 12 Feb 2020 18:51:47 -0300 Subject: [PATCH 127/141] Add breaking notice regarding TLS (#16575) --- .github/history-manual.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/history-manual.json b/.github/history-manual.json index d3783a7b48e22..984498859c9a3 100644 --- a/.github/history-manual.json +++ b/.github/history-manual.json @@ -16,5 +16,10 @@ "title": "[BREAK] Support for Cordova (Rocket.Chat Legacy app) has reached End-of-life, support has been discontinued", "userLogin": "sampaiodiego", "contributors": [] + }], + "3.0.0-rc.9": [{ + "title": "[BREAK] TLS v1.0 and TLS v1.1 were disabled by due to NodeJS update to v12. You can still enable them by using flags like `--tls-min-v1.0` and `--tls-min-v1.1`", + "userLogin": "sampaiodiego", + "contributors": [] }] } From fa41d1c7917e49e53cc9e5dc403e945f85af581c Mon Sep 17 00:00:00 2001 From: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Date: Wed, 12 Feb 2020 19:10:45 -0300 Subject: [PATCH 128/141] [FIX] Error when successfully joining room by invite link (#16571) --- app/ui/client/views/app/invite.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/ui/client/views/app/invite.js b/app/ui/client/views/app/invite.js index 695609cde3962..fd12cfd741c45 100644 --- a/app/ui/client/views/app/invite.js +++ b/app/ui/client/views/app/invite.js @@ -42,13 +42,14 @@ Template.invite.onCreated(function() { return this.inviteIsValid.set(false); }); - this.autorun(() => { + this.autorun((c) => { if (!this.inviteIsValid.get()) { return; } const user = Meteor.user(); if (user) { + c.stop(); APIClient.v1.post('useInviteToken', { token }).then((result) => { if (!result || !result.room || !result.room.name) { toastr.error(t('Failed_to_activate_invite_token')); From a056afb19183b1a3aea6855f9ccb4a6c0d4fcea3 Mon Sep 17 00:00:00 2001 From: Douglas Gubert Date: Wed, 12 Feb 2020 19:41:28 -0300 Subject: [PATCH 129/141] Update Apps-Engine version (#16584) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9a4ef952c8812..7b2872f883cd1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2681,9 +2681,9 @@ } }, "@rocket.chat/apps-engine": { - "version": "1.12.0-beta.2731", - "resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.12.0-beta.2731.tgz", - "integrity": "sha512-xWaN7opGMpE4VwE1gVizpCp685oOuk5+If7lIh+6ypDm62wGOA6gS2fzj8HH+X1ajDr9ZPRIoDfv8DIZ1Q078Q==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/apps-engine/-/apps-engine-1.12.0.tgz", + "integrity": "sha512-HqhUQIisnMdx9X/ZnQh71dyxL+NLKtMjCyf7qoPmKs/MzMJ2a/Ix4AjSL5SRajM3SGlB1+cZ5/+vVZNeXOe68g==", "requires": { "adm-zip": "^0.4.9", "cryptiles": "^4.1.3", diff --git a/package.json b/package.json index 5d23808819a85..e35b059efe2d6 100644 --- a/package.json +++ b/package.json @@ -122,7 +122,7 @@ "@google-cloud/language": "^3.7.0", "@google-cloud/storage": "^2.3.1", "@google-cloud/vision": "^1.8.0", - "@rocket.chat/apps-engine": "^1.12.0-beta.2731", + "@rocket.chat/apps-engine": "^1.12.0", "@rocket.chat/fuselage": "^0.2.0-alpha.29", "@rocket.chat/fuselage-hooks": "^0.2.0-alpha.29", "@rocket.chat/fuselage-ui-kit": "^0.2.0-alpha.29", From c196c18ccfce902b7cae22d1ce3380fe44e7b0f5 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Thu, 13 Feb 2020 10:01:03 -0300 Subject: [PATCH 130/141] Update Livechat widget dependency version to 1.3.1. (#16580) --- package-lock.json | 17 +++++++++++------ package.json | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7b2872f883cd1..4d53a39140cec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2694,6 +2694,11 @@ "uuid": "^3.2.1" }, "dependencies": { + "adm-zip": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.14.tgz", + "integrity": "sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g==" + }, "typescript": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", @@ -2743,9 +2748,9 @@ "integrity": "sha512-QMQK+fyu2cIRBzNwlOvl/zCX62TyY2EsgKc+YArBrr2kgHkpxGHy8CJIXyFg1dVOYX/LeehRNSnFW1naxCM1ww==" }, "@rocket.chat/livechat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@rocket.chat/livechat/-/livechat-1.3.0.tgz", - "integrity": "sha512-4qKRtvtFvMCNdfWm8R6GoBCyEYO8nvRXzoCGgaYjfK0d9SdSmEygMi7E3g90iWASPUXsXqe8YhEYOVtaFGmD4A==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@rocket.chat/livechat/-/livechat-1.3.1.tgz", + "integrity": "sha512-FlnVnAVtGbb3Gko4iLarAhpdUQia6gkO55k47+A8lSTPM8ATNsJYVUZmequq/dOWz3ZLjJcIVyVu73Q5cpoEUw==", "dev": true, "requires": { "@kossnocorp/desvg": "^0.2.0", @@ -2805,9 +2810,9 @@ } }, "@rocket.chat/sdk": { - "version": "1.0.0-alpha.31", - "resolved": "https://registry.npmjs.org/@rocket.chat/sdk/-/sdk-1.0.0-alpha.31.tgz", - "integrity": "sha512-+ScMW4+Ik8n0WK1suqAI03ZFivwzwyJZeLnOXtX9hDzpRN4UOXCGh/dAhlTjS3/oaF3lmwjF00s4+UUMZBN51w==", + "version": "1.0.0-alpha.41", + "resolved": "https://registry.npmjs.org/@rocket.chat/sdk/-/sdk-1.0.0-alpha.41.tgz", + "integrity": "sha512-jQ+/exEQMOv+bwH+yzPTC0oJGIKj/AlMc95IvWAn/vHDLjjS3aGzpIpZhBwsMOBVvb/5N8rnq6kEleCkEJk28g==", "dev": true, "requires": { "js-sha256": "^0.9.0", diff --git a/package.json b/package.json index e35b059efe2d6..da9d4d3f2b87e 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "@babel/preset-react": "^7.0.0", "@octokit/rest": "^16.1.0", "@rocket.chat/eslint-config": "^0.3.0", - "@rocket.chat/livechat": "^1.3.0", + "@rocket.chat/livechat": "^1.3.1", "@settlin/spacebars-loader": "^1.0.7", "@storybook/addon-actions": "^5.2.8", "@storybook/addon-knobs": "^5.2.8", From 8987dc0154e60aceb2300e6f19d53c8e422405cb Mon Sep 17 00:00:00 2001 From: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Date: Thu, 13 Feb 2020 16:25:33 -0300 Subject: [PATCH 131/141] fixed duplicated toastrs (#16578) --- app/ui-flextab/client/tabs/createInviteLink.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/ui-flextab/client/tabs/createInviteLink.js b/app/ui-flextab/client/tabs/createInviteLink.js index c264e33cb94b4..7dca20958f073 100644 --- a/app/ui-flextab/client/tabs/createInviteLink.js +++ b/app/ui-flextab/client/tabs/createInviteLink.js @@ -3,6 +3,7 @@ import { Template } from 'meteor/templating'; import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import toastr from 'toastr'; import Clipboard from 'clipboard'; +import { Session } from 'meteor/session'; import { t, APIClient } from '../../../utils'; import { formatDateAndTime } from '../../../lib/client/lib/formatDate'; @@ -93,10 +94,16 @@ Template.createInviteLink.onCreated(function() { this.url = new ReactiveVar(''); this.inviteData = new ReactiveVar(null); - getInviteLink(this, this.data.rid); + const { rid } = this.data; - const clipboard = new Clipboard('.js-copy'); - clipboard.on('success', function() { - toastr.success(TAPi18n.__('Copied')); + getInviteLink(this, rid); + + this.clipboard = new Clipboard('.js-copy'); + this.clipboard.on('success', () => { + Session.get('openedRoom') === rid && toastr.success(TAPi18n.__('Copied')); }); }); + +Template.createInviteLink.onDestroyed(function() { + this.clipboard.destroy(); +}); From c500a24e9d25fb15b9d8103200e9882d06b8a744 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Thu, 13 Feb 2020 17:02:02 -0300 Subject: [PATCH 132/141] Regression: UIKit update modal actions (#16570) --- app/ui-message/client/blocks/MessageBlock.js | 43 ++- app/ui-message/client/blocks/ModalBlock.js | 84 +++--- package-lock.json | 290 +++++++++---------- package.json | 10 +- 4 files changed, 227 insertions(+), 200 deletions(-) diff --git a/app/ui-message/client/blocks/MessageBlock.js b/app/ui-message/client/blocks/MessageBlock.js index 13a3fa061ef36..7830bafbb09e7 100644 --- a/app/ui-message/client/blocks/MessageBlock.js +++ b/app/ui-message/client/blocks/MessageBlock.js @@ -10,6 +10,8 @@ import { useReactiveValue } from '../../../../client/hooks/useReactiveValue'; const focusableElementsString = 'a[href]:not([tabindex="-1"]), area[href]:not([tabindex="-1"]), input:not([disabled]):not([tabindex="-1"]), select:not([disabled]):not([tabindex="-1"]), textarea:not([disabled]):not([tabindex="-1"]), button:not([disabled]):not([tabindex="-1"]), iframe, object, embed, [tabindex]:not([tabindex="-1"]), [contenteditable]'; +const focusableElementsStringInvalid = 'a[href]:not([tabindex="-1"]):invalid, area[href]:not([tabindex="-1"]):invalid, input:not([disabled]):not([tabindex="-1"]):invalid, select:not([disabled]):not([tabindex="-1"]):invalid, textarea:not([disabled]):not([tabindex="-1"]):invalid, button:not([disabled]):not([tabindex="-1"]):invalid, iframe:invalid, object:invalid, embed:invalid, [tabindex]:not([tabindex="-1"]):invalid, [contenteditable]:invalid'; + messageParser.text = ({ text, type } = {}) => { if (type !== 'mrkdwn') { return text; @@ -48,11 +50,6 @@ const textParser = uiKitText(new class { // https://www.w3.org/TR/wai-aria-practices/examples/dialog-modal/dialog.html export const modalBlockWithContext = ({ - view: { - title, - close, - submit, - }, onSubmit, onClose, onCancel, @@ -65,8 +62,20 @@ export const modalBlockWithContext = ({ const ref = useRef(); // Auto focus - useEffect(() => ref.current && ref.current.querySelector(focusableElementsString).focus(), [ref.current]); - // save fovus to restore after close + useEffect(() => { + if (!ref.current) { + return; + } + + if (data.errors && Object.keys(data.errors).length) { + const element = ref.current.querySelector(focusableElementsStringInvalid); + element && element.focus(); + } else { + const element = ref.current.querySelector(focusableElementsString); + element && element.focus(); + } + }, [ref.current, data.errors]); + // save focus to restore after close const previousFocus = useMemo(() => document.activeElement, []); // restore the focus after the component unmount useEffect(() => () => previousFocus && previousFocus.focus(), []); @@ -111,6 +120,7 @@ export const modalBlockWithContext = ({ // Clean the events useEffect(() => { const element = document.querySelector('.rc-modal-wrapper'); + const container = element.querySelector('.rcx-modal__content'); const close = (e) => { if (e.target !== element) { return; @@ -120,20 +130,29 @@ export const modalBlockWithContext = ({ onClose(); return false; }; - document.addEventListener('keydown', handleKeyDown); + + const ignoreIfnotContains = (e) => { + if (!container.contains(e.target)) { + return; + } + return handleKeyDown(e); + }; + + document.addEventListener('keydown', ignoreIfnotContains); element.addEventListener('click', close); return () => { - document.removeEventListener('keydown', handleKeyDown); + document.removeEventListener('keydown', ignoreIfnotContains); element.removeEventListener('click', close); }; }, handleKeyDown); + return ( - {textParser([title])} + {textParser([view.title])} @@ -148,8 +167,8 @@ export const modalBlockWithContext = ({ - - + { view.close && } + { view.submit && } diff --git a/app/ui-message/client/blocks/ModalBlock.js b/app/ui-message/client/blocks/ModalBlock.js index fcf516f176363..36c5c7ab58066 100644 --- a/app/ui-message/client/blocks/ModalBlock.js +++ b/app/ui-message/client/blocks/ModalBlock.js @@ -8,6 +8,14 @@ import { modalBlockWithContext } from './MessageBlock'; import './ModalBlock.html'; +const prevent = (e) => { + if (e) { + (e.nativeEvent || e).stopImmediatePropagation(); + e.stopPropagation(); + e.preventDefault(); + } +}; + Template.ModalBlock.onRendered(async function() { const React = await import('react'); const ReactDOM = await import('react-dom'); @@ -65,32 +73,34 @@ Template.ModalBlock.onRendered(async function() { ReactDOM.render( React.createElement( modalBlockWithContext({ - onCancel: () => ActionManager.triggerCancel({ - appId, - viewId, - view: { - ...this.data.view, - id: viewId, - state: groupStateByBlockId(this.state.all()), - }, - }), - onClose: () => ActionManager.triggerCancel({ - appId, - viewId, - view: { - ...this.data.view, - id: viewId, - state: groupStateByBlockId(this.state.all()), - }, - isCleared: true, - }), + onCancel: (e) => { + prevent(e); + return ActionManager.triggerCancel({ + appId, + viewId, + view: { + ...this.data.view, + id: viewId, + state: groupStateByBlockId(this.state.all()), + }, + }); + }, + onClose: (e) => { + prevent(e); + return ActionManager.triggerCancel({ + appId, + viewId, + view: { + ...this.data.view, + id: viewId, + state: groupStateByBlockId(this.state.all()), + }, + isCleared: true, + }); + }, onSubmit: (e) => { - if (e) { - e.nativeEvent.stopImmediatePropagation(); - e.stopPropagation(); - e.preventDefault(); - } - return ActionManager.triggerSubmitView({ + prevent(e); + ActionManager.triggerSubmitView({ viewId, appId, payload: { @@ -102,19 +112,17 @@ Template.ModalBlock.onRendered(async function() { }, }); }, - action: ({ actionId, appId, value, blockId, mid = this.data.mid }) => { - ActionManager.triggerBlockAction({ - container: { - type: UIKitIncomingInteractionContainerType.VIEW, - id: viewId, - }, - actionId, - appId, - value, - blockId, - mid, - }); - }, + action: ({ actionId, appId, value, blockId, mid = this.data.mid }) => ActionManager.triggerBlockAction({ + container: { + type: UIKitIncomingInteractionContainerType.VIEW, + id: viewId, + }, + actionId, + appId, + value, + blockId, + mid, + }), state: ({ actionId, value, /* ,appId, */ blockId = 'default' }) => { this.state.set(actionId, { blockId, diff --git a/package-lock.json b/package-lock.json index 4d53a39140cec..c7c9edd9db8ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2716,36 +2716,36 @@ } }, "@rocket.chat/fuselage": { - "version": "0.2.0-alpha.29", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage/-/fuselage-0.2.0-alpha.29.tgz", - "integrity": "sha512-tvWOIenjk1rBawwON5uSIq+Y+bIfJI/8kU799uyR0prTf6n3mT1qEJeUH1PQ3QcPnP4ujq1ur0VCrag6m4BBng==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage/-/fuselage-0.2.0.tgz", + "integrity": "sha512-APEd9eF9DXVcIrddGov+4yCK18RkOmkGFrNUpCHWqeuAjEy0oApaUWp4e9ISIviIEIijtZ6Q9T2jaLjSKdkzLA==", "requires": { - "@rocket.chat/fuselage-tokens": "^0.2.0-alpha.29", - "@rocket.chat/icons": "^0.2.0-alpha.29" + "@rocket.chat/fuselage-tokens": "^0.2.0", + "@rocket.chat/icons": "^0.2.0" } }, "@rocket.chat/fuselage-hooks": { - "version": "0.2.0-alpha.29", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-hooks/-/fuselage-hooks-0.2.0-alpha.29.tgz", - "integrity": "sha512-FT24q8oiqR7hf/GnNZv11eFSkDkUNFf08/odjFqyprl7b2xwDe7H/xca2/R15kBqfq1bi9eEiSkuZswkNFy4ow==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-hooks/-/fuselage-hooks-0.2.0.tgz", + "integrity": "sha512-OKQWhsbm3eHU1IDshwEqZhpzMW+loGPdpr1W2mZHbazkcRQYVp7V76Hl3Hh/HHGn8+EPY4fluoPVHgoOm42NiA==" }, "@rocket.chat/fuselage-tokens": { - "version": "0.2.0-alpha.29", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.2.0-alpha.29.tgz", - "integrity": "sha512-JcAU/LI9cqn4TA5DmeKrUcUvFP3iEK608yUDRSyMdkemuQvDEe58TQJT36sE00DVcaYZlj+iTvHSlVhoDfy4YA==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-tokens/-/fuselage-tokens-0.2.0.tgz", + "integrity": "sha512-mHAoZ4mAXXYJ+Sz6DYwe/StO7HyMUNdYw+2U+9uzyO5Zyy5e88+lxD2+HI0UQ7AC6cM/Y77s1kNhTwDpP70oHw==" }, "@rocket.chat/fuselage-ui-kit": { - "version": "0.2.0-alpha.29", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-ui-kit/-/fuselage-ui-kit-0.2.0-alpha.29.tgz", - "integrity": "sha512-8oZkWh4No854vHNFfFeLrs5GNF5jbtnCGeCuou83fKi6v8mnMueWYun+3ffo1sZYN9ylymNg5n8zI8rwSR3tDw==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage-ui-kit/-/fuselage-ui-kit-0.2.0.tgz", + "integrity": "sha512-slgtaz0gFWaU70XyMFI74L6tIUsrKdSae74/8BLq/w4dm3q1Faoc9jDvsgcvqta+/n0GguxjMNrEi6iOI4L96w==", "requires": { - "@rocket.chat/ui-kit": "^0.2.0-alpha.29" + "@rocket.chat/ui-kit": "^0.2.0" } }, "@rocket.chat/icons": { - "version": "0.2.0-alpha.29", - "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.2.0-alpha.29.tgz", - "integrity": "sha512-QMQK+fyu2cIRBzNwlOvl/zCX62TyY2EsgKc+YArBrr2kgHkpxGHy8CJIXyFg1dVOYX/LeehRNSnFW1naxCM1ww==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.2.0.tgz", + "integrity": "sha512-EUXi/TGe2YBVASoWPHm+FeRyq6gxNJjByNtc6wb1s0wyPxESD3rPpRkxR1PKjQtSTzNSFW8woEVT1UNPly7v1g==" }, "@rocket.chat/livechat": { "version": "1.3.1", @@ -2835,9 +2835,9 @@ } }, "@rocket.chat/ui-kit": { - "version": "0.2.0-alpha.29", - "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.2.0-alpha.29.tgz", - "integrity": "sha512-JBM9VZqi5DQiIeu4e7iT+ESsWjIrSBDoPg7hxfADa7p4Km4PZB/Qm3rgNOa+Ag2gg9v7jdpzChPDY8erim9KbQ==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@rocket.chat/ui-kit/-/ui-kit-0.2.0.tgz", + "integrity": "sha512-O6QNicDDRRbiULWXdkVmgUl1Pf3CoVVA8L7JEfiegQcTdPEsHlWGYBxcpbt23gY4hoNmbknlJHfCPNWd7oLcmQ==" }, "@settlin/spacebars-loader": { "version": "1.0.7", @@ -14907,28 +14907,28 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "optional": true }, "aproba": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "optional": true, @@ -14939,14 +14939,14 @@ }, "balanced-match": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true, "optional": true }, "brace-expansion": { "version": "1.1.11", - "resolved": false, + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "optional": true, @@ -14964,28 +14964,28 @@ }, "code-point-at": { "version": "1.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "optional": true }, "concat-map": { "version": "0.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true, "optional": true }, "console-control-strings": { "version": "1.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true, "optional": true }, "core-util-is": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "optional": true @@ -15002,21 +15002,21 @@ }, "deep-extend": { "version": "0.6.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "optional": true }, "delegates": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true @@ -15033,14 +15033,14 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "optional": true }, "gauge": { "version": "2.7.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, @@ -15072,14 +15072,14 @@ }, "has-unicode": { "version": "2.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.24", - "resolved": false, + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "optional": true, @@ -15099,7 +15099,7 @@ }, "inflight": { "version": "1.0.6", - "resolved": false, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "optional": true, @@ -15117,14 +15117,14 @@ }, "ini": { "version": "1.3.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "optional": true, @@ -15134,14 +15134,14 @@ }, "isarray": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "optional": true, @@ -15151,7 +15151,7 @@ }, "minimist": { "version": "0.0.8", - "resolved": false, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true, "optional": true @@ -15179,7 +15179,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "optional": true, @@ -15234,7 +15234,7 @@ }, "nopt": { "version": "4.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "optional": true, @@ -15263,7 +15263,7 @@ }, "npmlog": { "version": "4.1.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, @@ -15276,21 +15276,21 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "once": { "version": "1.4.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "optional": true, @@ -15300,21 +15300,21 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "osenv": { "version": "0.1.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, @@ -15325,7 +15325,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "optional": true @@ -15339,7 +15339,7 @@ }, "rc": { "version": "1.2.8", - "resolved": false, + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "optional": true, @@ -15352,7 +15352,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "optional": true @@ -15361,7 +15361,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": false, + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, @@ -15387,21 +15387,21 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "optional": true }, "safer-buffer": { "version": "2.1.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "optional": true }, "sax": { "version": "1.2.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "optional": true @@ -15415,21 +15415,21 @@ }, "set-blocking": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, "string-width": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "optional": true, @@ -15441,7 +15441,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, @@ -15451,7 +15451,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "optional": true, @@ -15461,7 +15461,7 @@ }, "strip-json-comments": { "version": "2.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true @@ -15484,14 +15484,14 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, "wide-align": { "version": "1.1.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "optional": true, @@ -15501,7 +15501,7 @@ }, "wrappy": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "optional": true @@ -19864,7 +19864,7 @@ "dependencies": { "asn1.js": { "version": "4.10.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "requires": { "bn.js": "^4.0.0", @@ -19874,7 +19874,7 @@ }, "assert": { "version": "1.4.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", "requires": { "util": "0.10.3" @@ -19882,7 +19882,7 @@ "dependencies": { "util": { "version": "0.10.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "requires": { "inherits": "2.0.1" @@ -19892,22 +19892,22 @@ }, "base64-js": { "version": "1.3.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" }, "bn.js": { "version": "4.11.8", - "resolved": false, + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, "brorand": { "version": "1.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, "browserify-aes": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { "buffer-xor": "^1.0.3", @@ -19920,7 +19920,7 @@ }, "browserify-cipher": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "requires": { "browserify-aes": "^1.0.4", @@ -19930,7 +19930,7 @@ }, "browserify-des": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "requires": { "cipher-base": "^1.0.1", @@ -19941,7 +19941,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "requires": { "bn.js": "^4.1.0", @@ -19950,7 +19950,7 @@ }, "browserify-sign": { "version": "4.0.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "requires": { "bn.js": "^4.1.1", @@ -19964,7 +19964,7 @@ }, "browserify-zlib": { "version": "0.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "requires": { "pako": "~1.0.5" @@ -19972,7 +19972,7 @@ }, "buffer": { "version": "5.2.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "requires": { "base64-js": "^1.0.2", @@ -19981,17 +19981,17 @@ }, "buffer-xor": { "version": "1.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, "builtin-status-codes": { "version": "3.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, "cipher-base": { "version": "1.0.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { "inherits": "^2.0.1", @@ -20000,7 +20000,7 @@ }, "console-browserify": { "version": "1.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "requires": { "date-now": "^0.1.4" @@ -20008,17 +20008,17 @@ }, "constants-browserify": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" }, "core-util-is": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "create-ecdh": { "version": "4.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "requires": { "bn.js": "^4.1.0", @@ -20027,7 +20027,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { "cipher-base": "^1.0.1", @@ -20039,7 +20039,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": false, + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { "cipher-base": "^1.0.3", @@ -20052,7 +20052,7 @@ }, "crypto-browserify": { "version": "3.12.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "requires": { "browserify-cipher": "^1.0.0", @@ -20070,12 +20070,12 @@ }, "date-now": { "version": "0.1.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" }, "des.js": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "requires": { "inherits": "^2.0.1", @@ -20084,7 +20084,7 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "requires": { "bn.js": "^4.1.0", @@ -20094,12 +20094,12 @@ }, "domain-browser": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" }, "elliptic": { "version": "6.4.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "requires": { "bn.js": "^4.4.0", @@ -20113,12 +20113,12 @@ }, "events": { "version": "3.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" }, "evp_bytestokey": { "version": "1.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "requires": { "md5.js": "^1.3.4", @@ -20127,7 +20127,7 @@ }, "hash-base": { "version": "3.0.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { "inherits": "^2.0.1", @@ -20136,7 +20136,7 @@ }, "hash.js": { "version": "1.1.7", - "resolved": false, + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "requires": { "inherits": "^2.0.3", @@ -20145,14 +20145,14 @@ "dependencies": { "inherits": { "version": "2.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, "hmac-drbg": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { "hash.js": "^1.0.3", @@ -20162,27 +20162,27 @@ }, "https-browserify": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, "ieee754": { "version": "1.1.13", - "resolved": false, + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "inherits": { "version": "2.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" }, "isarray": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "md5.js": { "version": "1.3.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "requires": { "hash-base": "^3.0.0", @@ -20192,7 +20192,7 @@ }, "miller-rabin": { "version": "4.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "requires": { "bn.js": "^4.0.0", @@ -20201,27 +20201,27 @@ }, "minimalistic-assert": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "os-browserify": { "version": "0.3.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, "pako": { "version": "1.0.10", - "resolved": false, + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" }, "parse-asn1": { "version": "5.1.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "requires": { "asn1.js": "^4.0.0", @@ -20234,12 +20234,12 @@ }, "path-browserify": { "version": "1.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.0.tgz", "integrity": "sha512-Hkavx/nY4/plImrZPHRk2CL9vpOymZLgEbMNX1U0bjcBL7QN9wODxyx0yaMZURSQaUtSEvDrfAvxa9oPb0at9g==" }, "pbkdf2": { "version": "3.0.17", - "resolved": false, + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "requires": { "create-hash": "^1.1.2", @@ -20251,17 +20251,17 @@ }, "process": { "version": "0.11.10", - "resolved": false, + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" }, "process-nextick-args": { "version": "2.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "public-encrypt": { "version": "4.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "requires": { "bn.js": "^4.1.0", @@ -20274,22 +20274,22 @@ }, "punycode": { "version": "2.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "querystring": { "version": "0.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, "querystring-es3": { "version": "0.2.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, "randombytes": { "version": "2.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { "safe-buffer": "^5.1.0" @@ -20297,7 +20297,7 @@ }, "randomfill": { "version": "1.0.4", - "resolved": false, + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "requires": { "randombytes": "^2.0.5", @@ -20306,7 +20306,7 @@ }, "readable-stream": { "version": "3.3.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", "requires": { "inherits": "^2.0.3", @@ -20316,14 +20316,14 @@ "dependencies": { "inherits": { "version": "2.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, "ripemd160": { "version": "2.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { "hash-base": "^3.0.0", @@ -20332,17 +20332,17 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "setimmediate": { "version": "1.0.5", - "resolved": false, + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "sha.js": { "version": "2.4.11", - "resolved": false, + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { "inherits": "^2.0.1", @@ -20351,7 +20351,7 @@ }, "stream-browserify": { "version": "2.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "requires": { "inherits": "~2.0.1", @@ -20360,7 +20360,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", - "resolved": false, + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -20374,14 +20374,14 @@ "dependencies": { "inherits": { "version": "2.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, "string_decoder": { "version": "1.1.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -20391,7 +20391,7 @@ }, "stream-http": { "version": "3.0.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.0.0.tgz", "integrity": "sha512-JELJfd+btL9GHtxU3+XXhg9NLYrKFnhybfvRuDghtyVkOFydz3PKNT1df07AMr88qW03WHF+FSV0PySpXignCA==", "requires": { "builtin-status-codes": "^3.0.0", @@ -20402,7 +20402,7 @@ }, "string_decoder": { "version": "1.2.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", "requires": { "safe-buffer": "~5.1.0" @@ -20410,7 +20410,7 @@ }, "timers-browserify": { "version": "2.0.10", - "resolved": false, + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "requires": { "setimmediate": "^1.0.4" @@ -20418,12 +20418,12 @@ }, "tty-browserify": { "version": "0.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" }, "url": { "version": "0.11.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "requires": { "punycode": "1.3.2", @@ -20432,14 +20432,14 @@ "dependencies": { "punycode": { "version": "1.3.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" } } }, "util": { "version": "0.11.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "requires": { "inherits": "2.0.3" @@ -20447,24 +20447,24 @@ "dependencies": { "inherits": { "version": "2.0.3", - "resolved": false, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, "util-deprecate": { "version": "1.0.2", - "resolved": false, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "vm-browserify": { "version": "1.1.0", - "resolved": false, + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==" }, "xtend": { "version": "4.0.1", - "resolved": false, + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" } } diff --git a/package.json b/package.json index da9d4d3f2b87e..1c08903128ff4 100644 --- a/package.json +++ b/package.json @@ -123,11 +123,11 @@ "@google-cloud/storage": "^2.3.1", "@google-cloud/vision": "^1.8.0", "@rocket.chat/apps-engine": "^1.12.0", - "@rocket.chat/fuselage": "^0.2.0-alpha.29", - "@rocket.chat/fuselage-hooks": "^0.2.0-alpha.29", - "@rocket.chat/fuselage-ui-kit": "^0.2.0-alpha.29", - "@rocket.chat/icons": "^0.2.0-alpha.29", - "@rocket.chat/ui-kit": "^0.2.0-alpha.29", + "@rocket.chat/fuselage": "^0.2.0", + "@rocket.chat/fuselage-hooks": "^0.2.0", + "@rocket.chat/fuselage-ui-kit": "^0.2.0", + "@rocket.chat/icons": "^0.2.0", + "@rocket.chat/ui-kit": "^0.2.0", "@slack/client": "^4.8.0", "adm-zip": "RocketChat/adm-zip", "archiver": "^3.0.0", From 6cd869a470de1560a27df1b7430fc40c2ca6123b Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Thu, 13 Feb 2020 17:09:28 -0300 Subject: [PATCH 133/141] Regression: fix read unread messages (#16562) --- app/ui/client/views/app/room.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/ui/client/views/app/room.js b/app/ui/client/views/app/room.js index c1dc93ca085a7..8a6ab42e2a45b 100644 --- a/app/ui/client/views/app/room.js +++ b/app/ui/client/views/app/room.js @@ -1375,6 +1375,5 @@ callbacks.add('enter-room', (sub) => { if (isAReplyInDMFromChannel && chatMessages[sub.rid]) { chatMessages[sub.rid].restoreReplies(); } - readMessage.read(sub.rid); - readMessage.refreshUnreadMark(sub.rid); + setTimeout(() => readMessage.read(sub.rid), 1000); }); From 6b1d536f179096bb269d536fd92f0a378b28b57e Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Thu, 13 Feb 2020 18:03:14 -0300 Subject: [PATCH 134/141] Bump version to 3.0.0-rc.9 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 134 +++++++++++++++++++++++++++++++- HISTORY.md | 159 ++++---------------------------------- app/utils/rocketchat.info | 2 +- package.json | 2 +- 5 files changed, 153 insertions(+), 146 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 68f5343b6cc5a..fec10bb4a0ced 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 3.0.0-rc.8 +ENV RC_VERSION 3.0.0-rc.9 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 3200a1a390111..9b61a6d82ba9c 100644 --- a/.github/history.json +++ b/.github/history.json @@ -39554,6 +39554,138 @@ ] } ] + }, + "3.0.0-rc.9": { + "node_version": "12.14.0", + "npm_version": "6.13.4", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "16544", + "title": "Release 2.4.9", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "16377", + "title": "Release 2.4.4", + "userLogin": "sampaiodiego", + "contributors": [ + "rodrigok", + "sampaiodiego" + ] + }, + { + "pr": "16189", + "title": "[FIX] Enable apps change properties of the sender on the message as before", + "userLogin": "d-gubert", + "milestone": "2.4.1", + "contributors": [ + "d-gubert", + "sampaiodiego", + "web-flow" + ] + }, + { + "pr": "16171", + "title": "[FIX] Add missing password field back to administration area", + "userLogin": "rodrigok", + "milestone": "2.4.1", + "contributors": [ + "rodrigok", + "sampaiodiego" + ] + }, + { + "pr": "16139", + "title": "[FIX] JS errors on Administration page", + "userLogin": "mariaeduardacunha", + "milestone": "2.4.1", + "contributors": [ + "mariaeduardacunha" + ] + }, + { + "pr": "16562", + "title": "Regression: fix read unread messages", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo" + ] + }, + { + "pr": "16570", + "title": "Regression: UIKit update modal actions", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "sampaiodiego" + ] + }, + { + "pr": "16578", + "title": "[FIX] When copying invite links, multiple toastr messages", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "16580", + "title": "[FIX] Livechat Widget version 1.3.1", + "userLogin": "renatobecker", + "milestone": "3.0.0", + "contributors": [ + "renatobecker" + ] + }, + { + "pr": "16584", + "title": "Update Apps-Engine version", + "userLogin": "d-gubert", + "contributors": [ + "d-gubert" + ] + }, + { + "pr": "16571", + "title": "[FIX] Error when successfully joining room by invite link", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + }, + { + "pr": "16575", + "title": "Add breaking notice regarding TLS", + "userLogin": "sampaiodiego", + "contributors": [ + "sampaiodiego" + ] + }, + { + "pr": "16581", + "title": "[FIX] Invite links proxy URLs not working when using CDN", + "userLogin": "rodrigok", + "contributors": [ + "rodrigok" + ] + }, + { + "pr": "16556", + "title": "Regression: Modal onSubmit", + "userLogin": "gabriellsh", + "contributors": [ + "gabriellsh" + ] + } + ] } } -} +} \ No newline at end of file diff --git a/HISTORY.md b/HISTORY.md index 6797abf256b84..f2ea34f2179f9 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,161 +1,36 @@ -# 2.4.9 -`2020-02-10 · 1 🐛 · 1 👩‍💻👨‍💻` - -### Engine versions -- Node: `8.17.0` -- NPM: `6.13.4` -- MongoDB: `3.4, 3.6, 4.0` - -### 🐛 Bug fixes - -- `stdout` streamer infinite loop ([#16452](https://github.com/RocketChat/Rocket.Chat/pull/16452)) - -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@sampaiodiego](https://github.com/sampaiodiego) - -# 2.4.8 -`2020-02-07 · 1 🔍 · 1 👩‍💻👨‍💻` - -### Engine versions -- Node: `8.17.0` -- NPM: `6.13.4` -- MongoDB: `3.4, 3.6, 4.0` - -
-🔍 Minor changes - -- Update presence package to 2.6.1 ([#16486](https://github.com/RocketChat/Rocket.Chat/pull/16486)) - -
- -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@sampaiodiego](https://github.com/sampaiodiego) - -# 2.4.7 -`2020-02-03 · 1 🐛 · 1 👩‍💻👨‍💻` - -### Engine versions -- Node: `8.17.0` -- NPM: `6.13.4` -- MongoDB: `3.4, 3.6, 4.0` - -### 🐛 Bug fixes - -- Option to make a channel default ([#16433](https://github.com/RocketChat/Rocket.Chat/pull/16433)) - -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@MarcosSpessatto](https://github.com/MarcosSpessatto) - -# 2.4.6 -`2020-01-31 · 2 🔍 · 2 👩‍💻👨‍💻` -### Engine versions -- Node: `8.17.0` -- NPM: `6.13.4` -- MongoDB: `3.4, 3.6, 4.0` - -
-🔍 Minor changes - -- Revert message properties validation ([#16395](https://github.com/RocketChat/Rocket.Chat/pull/16395)) -- Fix index creation for apps_logs collection ([#16401](https://github.com/RocketChat/Rocket.Chat/pull/16401)) - -
- -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@MarcosSpessatto](https://github.com/MarcosSpessatto) -- [@rodrigok](https://github.com/rodrigok) - -# 2.4.4 -`2020-01-29 · 1 🐛 · 2 🔍 · 2 👩‍💻👨‍💻` +# 3.0.0 (Under Release Candidate Process) -### Engine versions -- Node: `8.17.0` -- NPM: `6.13.4` -- MongoDB: `3.4, 3.6, 4.0` +## 3.0.0-rc.9 +`2020-02-13 · 4 🐛 · 5 🔍 · 6 👩‍💻👨‍💻` ### 🐛 Bug fixes -- App removal was moving logs to the trash collection ([#16362](https://github.com/RocketChat/Rocket.Chat/pull/16362)) +- When copying invite links, multiple toastr messages ([#16578](https://github.com/RocketChat/Rocket.Chat/pull/16578)) +- Livechat Widget version 1.3.1 ([#16580](https://github.com/RocketChat/Rocket.Chat/pull/16580)) +- Error when successfully joining room by invite link ([#16571](https://github.com/RocketChat/Rocket.Chat/pull/16571)) +- Invite links proxy URLs not working when using CDN ([#16581](https://github.com/RocketChat/Rocket.Chat/pull/16581))
🔍 Minor changes -- Release 2.4.4 ([#16377](https://github.com/RocketChat/Rocket.Chat/pull/16377)) -- Regression: Rate limiter was not working due to Meteor internal changes ([#16361](https://github.com/RocketChat/Rocket.Chat/pull/16361)) +- Regression: fix read unread messages ([#16562](https://github.com/RocketChat/Rocket.Chat/pull/16562)) +- Regression: UIKit update modal actions ([#16570](https://github.com/RocketChat/Rocket.Chat/pull/16570)) +- Update Apps-Engine version ([#16584](https://github.com/RocketChat/Rocket.Chat/pull/16584)) +- Add breaking notice regarding TLS ([#16575](https://github.com/RocketChat/Rocket.Chat/pull/16575)) +- Regression: Modal onSubmit ([#16556](https://github.com/RocketChat/Rocket.Chat/pull/16556))
### 👩‍💻👨‍💻 Core Team 🤓 -- [@rodrigok](https://github.com/rodrigok) -- [@sampaiodiego](https://github.com/sampaiodiego) - -# 2.4.3 -`2020-01-28 · 2 🐛 · 2 👩‍💻👨‍💻` - -### Engine versions -- Node: `8.17.0` -- NPM: `6.13.4` -- MongoDB: `3.4, 3.6, 4.0` - -### 🐛 Bug fixes - -- Unknown error when sending message if 'Set a User Name to Alias in Message' setting is enabled ([#16347](https://github.com/RocketChat/Rocket.Chat/pull/16347)) -- Invite links usage by channel owners/moderators ([#16176](https://github.com/RocketChat/Rocket.Chat/pull/16176)) - -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@pierre-lehnen-rc](https://github.com/pierre-lehnen-rc) -- [@sampaiodiego](https://github.com/sampaiodiego) - -# 2.4.2 -`2020-01-17 · 4 🐛 · 4 👩‍💻👨‍💻` - -### Engine versions -- Node: `8.17.0` -- NPM: `6.13.4` -- MongoDB: `3.4, 3.6, 4.0` - -### 🐛 Bug fixes - -- Setup Wizard inputs and Admin Settings ([#16147](https://github.com/RocketChat/Rocket.Chat/pull/16147)) -- Slack CSV User Importer ([#16253](https://github.com/RocketChat/Rocket.Chat/pull/16253)) -- Integrations list without pagination and outgoing integration creation ([#16233](https://github.com/RocketChat/Rocket.Chat/pull/16233)) -- User stuck after reset password ([#16184](https://github.com/RocketChat/Rocket.Chat/pull/16184)) - -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@MarcosSpessatto](https://github.com/MarcosSpessatto) -- [@ggazzo](https://github.com/ggazzo) -- [@sampaiodiego](https://github.com/sampaiodiego) -- [@tassoevan](https://github.com/tassoevan) - -# 2.4.1 -`2020-01-10 · 2 🐛 · 3 👩‍💻👨‍💻` - -### Engine versions -- Node: `8.17.0` -- NPM: `6.13.4` -- MongoDB: `3.4, 3.6, 4.0` - -### 🐛 Bug fixes - -- Enable apps change properties of the sender on the message as before ([#16189](https://github.com/RocketChat/Rocket.Chat/pull/16189)) -- JS errors on Administration page ([#16139](https://github.com/RocketChat/Rocket.Chat/pull/16139)) - -### 👩‍💻👨‍💻 Core Team 🤓 - - [@d-gubert](https://github.com/d-gubert) -- [@mariaeduardacunha](https://github.com/mariaeduardacunha) +- [@gabriellsh](https://github.com/gabriellsh) +- [@ggazzo](https://github.com/ggazzo) +- [@renatobecker](https://github.com/renatobecker) +- [@rodrigok](https://github.com/rodrigok) - [@sampaiodiego](https://github.com/sampaiodiego) -# 3.0.0 (Under Release Candidate Process) - ## 3.0.0-rc.8 `2020-02-11 · 2 🐛 · 2 🔍 · 4 👩‍💻👨‍💻` @@ -6836,4 +6711,4 @@ - [@graywolf336](https://github.com/graywolf336) - [@marceloschmidt](https://github.com/marceloschmidt) - [@rodrigok](https://github.com/rodrigok) -- [@sampaiodiego](https://github.com/sampaiodiego) +- [@sampaiodiego](https://github.com/sampaiodiego) \ No newline at end of file diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index aed9bf90a9c5a..38ace9bd80864 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.0.0-rc.8" + "version": "3.0.0-rc.9" } diff --git a/package.json b/package.json index 387d072c1b3bf..6f8b2067df88b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.0.0-rc.8", + "version": "3.0.0-rc.9", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 5c2b7b3a58f267377a1772ab6ebddf33560829b9 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Fri, 14 Feb 2020 13:55:57 -0300 Subject: [PATCH 135/141] [FIX] Bug on starting Jitsi video calls , multiple messages (#16601) Co-authored-by: Diego Sampaio --- app/videobridge/client/views/videoFlexTab.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/videobridge/client/views/videoFlexTab.js b/app/videobridge/client/views/videoFlexTab.js index 6aedc954a9689..1b55095af7597 100644 --- a/app/videobridge/client/views/videoFlexTab.js +++ b/app/videobridge/client/views/videoFlexTab.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; +import { TimeSync } from 'meteor/mizzao:timesync'; import { settings } from '../../../settings'; import { modal, TabBar } from '../../../ui-utils'; @@ -59,7 +60,7 @@ Template.videoFlexTab.onRendered(function() { const update = () => { const { jitsiTimeout } = Rooms.findOne({ _id: rid }, { fields: { jitsiTimeout: 1 }, reactive: false }); - if (jitsiTimeout && (new Date() - new Date(jitsiTimeout) + CONSTANTS.TIMEOUT < CONSTANTS.DEBOUNCE)) { + if (jitsiTimeout && (TimeSync.serverTime(), - new Date(jitsiTimeout) + CONSTANTS.TIMEOUT < CONSTANTS.DEBOUNCE)) { return; } if (Meteor.status().connected) { From 1ea6ecea0691c79c5a6d3ef9b2d9c965bbaf4d53 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Fri, 14 Feb 2020 16:55:53 -0300 Subject: [PATCH 136/141] Bump version to 3.0.0-rc.10 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 20 ++++++++++++++++++++ HISTORY.md | 11 +++++++++++ app/utils/rocketchat.info | 2 +- package.json | 2 +- 5 files changed, 34 insertions(+), 3 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index fec10bb4a0ced..13f7401a5ba56 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 3.0.0-rc.9 +ENV RC_VERSION 3.0.0-rc.10 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 9b61a6d82ba9c..1a943e00616f2 100644 --- a/.github/history.json +++ b/.github/history.json @@ -39686,6 +39686,26 @@ ] } ] + }, + "3.0.0-rc.10": { + "node_version": "12.14.0", + "npm_version": "6.13.4", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "16601", + "title": "[FIX] Bug on starting Jitsi video calls , multiple messages", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "web-flow" + ] + } + ] } } } \ No newline at end of file diff --git a/HISTORY.md b/HISTORY.md index f2ea34f2179f9..9efa5dccd6504 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,17 @@ # 3.0.0 (Under Release Candidate Process) +## 3.0.0-rc.10 +`2020-02-14 · 1 🐛 · 1 👩‍💻👨‍💻` + +### 🐛 Bug fixes + +- Bug on starting Jitsi video calls , multiple messages ([#16601](https://github.com/RocketChat/Rocket.Chat/pull/16601)) + +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@ggazzo](https://github.com/ggazzo) + ## 3.0.0-rc.9 `2020-02-13 · 4 🐛 · 5 🔍 · 6 👩‍💻👨‍💻` diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 38ace9bd80864..1c647adc84347 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.0.0-rc.9" + "version": "3.0.0-rc.10" } diff --git a/package.json b/package.json index 6f8b2067df88b..d58e75e8cdb1b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.0.0-rc.9", + "version": "3.0.0-rc.10", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From d14dbd793d194cda25f9199e844973b619a2162b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20J=C3=A4gle?= Date: Fri, 14 Feb 2020 21:31:50 +0100 Subject: [PATCH 137/141] Fix github actions accessing the github registry (#16521) --- .github/workflows/build_and_test.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 4ec6ed9f62ac3..9a9f943d9e04b 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -329,9 +329,7 @@ jobs: run: | cd /tmp/build-pr - export OWNER="${GITHUB_REPOSITORY%/*}" - - docker login docker.pkg.github.com -u "${OWNER}" -p "${GITHUB_TOKEN}" + docker login docker.pkg.github.com -u "${GITHUB_ACTOR}" -p "${GITHUB_TOKEN}" cp $GITHUB_WORKSPACE/.docker/Dockerfile . From 5bce20ee7e0e916474af1b005b019ebe48e2ec00 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Fri, 14 Feb 2020 20:02:07 -0300 Subject: [PATCH 138/141] send file on enter --- app/ui-utils/client/lib/modal.js | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/app/ui-utils/client/lib/modal.js b/app/ui-utils/client/lib/modal.js index 36bc03702d6ee..2e43898bbdb80 100644 --- a/app/ui-utils/client/lib/modal.js +++ b/app/ui-utils/client/lib/modal.js @@ -160,26 +160,28 @@ export const modal = { if (!modalStack.length) { return; } - const instance = modalStack[modalStack.length - 1]; - - if (instance && instance.config && instance.config.confirmOnEnter && event.key === 'Enter') { + if (event.key === 'Escape') { event.preventDefault(); event.stopPropagation(); - if (instance.config.input) { - return instance.confirm($('.js-modal-input').val()); - } + instance.close(); + } - instance.confirm(true); + if (!document.querySelector('.rc-modal__content').contains(event.target)) { return; } - if (event.key === 'Escape') { + + if (instance && instance && instance.confirmOnEnter && event.key === 'Enter') { event.preventDefault(); event.stopPropagation(); - instance.close(); + if (instance.input) { + return instance.confirm($('.js-modal-input').val()); + } + + instance.confirm(true); } }, }; @@ -211,18 +213,20 @@ Template.rc_modal.helpers({ }); Template.rc_modal.onRendered(function() { + this.oldFocus = document.activeElement; if (this.data.onRendered) { this.data.onRendered(); } if (this.data.input) { - $('.js-modal-input').focus(); + $('.js-modal-input', this.firstNode).focus(); } this.data.closeOnEscape && document.addEventListener('keydown', modal.onKeyDown); }); Template.rc_modal.onDestroyed(function() { + this.oldFocus && this.oldFocus.focus(); document.removeEventListener('keydown', modal.onKeyDown); }); @@ -233,6 +237,7 @@ Template.rc_modal.events({ this.close(); }, 'click .js-close'(e) { + e.preventDefault(); e.stopPropagation(); this.cancel(); }, From 48ed2fba30b8a5872cb156f8d1feb4cb1af94435 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Fri, 14 Feb 2020 21:36:37 -0300 Subject: [PATCH 139/141] Fix enter behavior --- app/ui-utils/client/lib/modal.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/app/ui-utils/client/lib/modal.js b/app/ui-utils/client/lib/modal.js index 2e43898bbdb80..dc77ddbce1803 100644 --- a/app/ui-utils/client/lib/modal.js +++ b/app/ui-utils/client/lib/modal.js @@ -168,12 +168,7 @@ export const modal = { instance.close(); } - if (!document.querySelector('.rc-modal__content').contains(event.target)) { - return; - } - - - if (instance && instance && instance.confirmOnEnter && event.key === 'Enter') { + if (instance && instance.confirmOnEnter && event.key === 'Enter') { event.preventDefault(); event.stopPropagation(); @@ -220,6 +215,8 @@ Template.rc_modal.onRendered(function() { if (this.data.input) { $('.js-modal-input', this.firstNode).focus(); + } else if (this.data.showConfirmButton && this.data.confirmOnEnter) { + $('.js-confirm', this.firstNode).focus(); } this.data.closeOnEscape && document.addEventListener('keydown', modal.onKeyDown); From 12a10b2055dae8b73500fc7381e61053d8a2001e Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Fri, 14 Feb 2020 22:16:28 -0300 Subject: [PATCH 140/141] Bump version to 3.0.0-rc.11 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 29 +++++++++++++++++++++++++++++ HISTORY.md | 29 +++++++++++++++++++++++++++-- app/utils/rocketchat.info | 2 +- package.json | 2 +- 5 files changed, 59 insertions(+), 5 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 13f7401a5ba56..ab9f914dbb021 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 3.0.0-rc.10 +ENV RC_VERSION 3.0.0-rc.11 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 1a943e00616f2..20342238e979a 100644 --- a/.github/history.json +++ b/.github/history.json @@ -39706,6 +39706,35 @@ ] } ] + }, + "3.0.0-rc.11": { + "node_version": "12.14.0", + "npm_version": "6.13.4", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [ + { + "pr": "16607", + "title": "Regression: send file modal not working via keyboard", + "userLogin": "ggazzo", + "contributors": [ + "ggazzo", + "sampaiodiego" + ] + }, + { + "pr": "16521", + "title": "Fix github actions accessing the github registry", + "userLogin": "mrsimpson", + "contributors": [ + "mrsimpson", + "web-flow" + ] + } + ] } } } \ No newline at end of file diff --git a/HISTORY.md b/HISTORY.md index 9efa5dccd6504..a2b0617a758dd 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,26 @@ # 3.0.0 (Under Release Candidate Process) +## 3.0.0-rc.11 +`2020-02-14 · 2 🔍 · 3 👩‍💻👨‍💻` + +
+🔍 Minor changes + +- Regression: send file modal not working via keyboard ([#16607](https://github.com/RocketChat/Rocket.Chat/pull/16607)) +- Fix github actions accessing the github registry ([#16521](https://github.com/RocketChat/Rocket.Chat/pull/16521) by [@mrsimpson](https://github.com/mrsimpson)) + +
+ +### 👩‍💻👨‍💻 Contributors 😍 + +- [@mrsimpson](https://github.com/mrsimpson) + +### 👩‍💻👨‍💻 Core Team 🤓 + +- [@ggazzo](https://github.com/ggazzo) +- [@sampaiodiego](https://github.com/sampaiodiego) + ## 3.0.0-rc.10 `2020-02-14 · 1 🐛 · 1 👩‍💻👨‍💻` @@ -13,7 +33,11 @@ - [@ggazzo](https://github.com/ggazzo) ## 3.0.0-rc.9 -`2020-02-13 · 4 🐛 · 5 🔍 · 6 👩‍💻👨‍💻` +`2020-02-13 · 1 ️️️⚠️ · 4 🐛 · 5 🔍 · 6 👩‍💻👨‍💻` + +### ⚠️ BREAKING CHANGES + +- TLS v1.0 and TLS v1.1 were disabled by due to NodeJS update to v12. You can still enable them by using flags like `--tls-min-v1.0` and `--tls-min-v1.1` ### 🐛 Bug fixes @@ -3020,10 +3044,11 @@ - [@tassoevan](https://github.com/tassoevan) # 0.72.0 -`2018-11-28 · 1 ️️️⚠️ · 6 🎉 · 16 🚀 · 22 🐛 · 79 🔍 · 25 👩‍💻👨‍💻` +`2018-11-28 · 2 ️️️⚠️ · 6 🎉 · 16 🚀 · 22 🐛 · 79 🔍 · 25 👩‍💻👨‍💻` ### ⚠️ BREAKING CHANGES +- Support for Cordova (Rocket.Chat Legacy app) has reached End-of-life, support has been discontinued - Update to Meteor to 1.8 ([#12468](https://github.com/RocketChat/Rocket.Chat/pull/12468)) ### 🎉 New features diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 1c647adc84347..f693e71d0d2e1 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.0.0-rc.10" + "version": "3.0.0-rc.11" } diff --git a/package.json b/package.json index d58e75e8cdb1b..fa046d7416594 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.0.0-rc.10", + "version": "3.0.0-rc.11", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 0f6428f54793a2fc28bd6b46bb5107aacc19ad72 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Fri, 14 Feb 2020 22:18:54 -0300 Subject: [PATCH 141/141] Bump version to 3.0.0 --- .docker/Dockerfile.rhel | 2 +- .github/history.json | 10 ++ HISTORY.md | 253 +++++++------------------------------- app/utils/rocketchat.info | 2 +- package.json | 2 +- 5 files changed, 58 insertions(+), 211 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index ab9f914dbb021..0a700be61b46c 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/rhscl/nodejs-8-rhel7 -ENV RC_VERSION 3.0.0-rc.11 +ENV RC_VERSION 3.0.0 MAINTAINER buildmaster@rocket.chat diff --git a/.github/history.json b/.github/history.json index 20342238e979a..afd5cd31de041 100644 --- a/.github/history.json +++ b/.github/history.json @@ -39735,6 +39735,16 @@ ] } ] + }, + "3.0.0": { + "node_version": "12.14.0", + "npm_version": "6.13.4", + "mongo_versions": [ + "3.4", + "3.6", + "4.0" + ], + "pull_requests": [] } } } \ No newline at end of file diff --git a/HISTORY.md b/HISTORY.md index a2b0617a758dd..4abcc90030c18 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,213 +1,11 @@ -# 3.0.0 (Under Release Candidate Process) +# 3.0.0 +`2020-02-14 · 7 ️️️⚠️ · 10 🎉 · 11 🚀 · 32 🐛 · 43 🔍 · 21 👩‍💻👨‍💻` -## 3.0.0-rc.11 -`2020-02-14 · 2 🔍 · 3 👩‍💻👨‍💻` - -
-🔍 Minor changes - -- Regression: send file modal not working via keyboard ([#16607](https://github.com/RocketChat/Rocket.Chat/pull/16607)) -- Fix github actions accessing the github registry ([#16521](https://github.com/RocketChat/Rocket.Chat/pull/16521) by [@mrsimpson](https://github.com/mrsimpson)) - -
- -### 👩‍💻👨‍💻 Contributors 😍 - -- [@mrsimpson](https://github.com/mrsimpson) - -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@ggazzo](https://github.com/ggazzo) -- [@sampaiodiego](https://github.com/sampaiodiego) - -## 3.0.0-rc.10 -`2020-02-14 · 1 🐛 · 1 👩‍💻👨‍💻` - -### 🐛 Bug fixes - -- Bug on starting Jitsi video calls , multiple messages ([#16601](https://github.com/RocketChat/Rocket.Chat/pull/16601)) - -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@ggazzo](https://github.com/ggazzo) - -## 3.0.0-rc.9 -`2020-02-13 · 1 ️️️⚠️ · 4 🐛 · 5 🔍 · 6 👩‍💻👨‍💻` - -### ⚠️ BREAKING CHANGES - -- TLS v1.0 and TLS v1.1 were disabled by due to NodeJS update to v12. You can still enable them by using flags like `--tls-min-v1.0` and `--tls-min-v1.1` - -### 🐛 Bug fixes - -- When copying invite links, multiple toastr messages ([#16578](https://github.com/RocketChat/Rocket.Chat/pull/16578)) -- Livechat Widget version 1.3.1 ([#16580](https://github.com/RocketChat/Rocket.Chat/pull/16580)) -- Error when successfully joining room by invite link ([#16571](https://github.com/RocketChat/Rocket.Chat/pull/16571)) -- Invite links proxy URLs not working when using CDN ([#16581](https://github.com/RocketChat/Rocket.Chat/pull/16581)) - -
-🔍 Minor changes - -- Regression: fix read unread messages ([#16562](https://github.com/RocketChat/Rocket.Chat/pull/16562)) -- Regression: UIKit update modal actions ([#16570](https://github.com/RocketChat/Rocket.Chat/pull/16570)) -- Update Apps-Engine version ([#16584](https://github.com/RocketChat/Rocket.Chat/pull/16584)) -- Add breaking notice regarding TLS ([#16575](https://github.com/RocketChat/Rocket.Chat/pull/16575)) -- Regression: Modal onSubmit ([#16556](https://github.com/RocketChat/Rocket.Chat/pull/16556)) - -
- -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@d-gubert](https://github.com/d-gubert) -- [@gabriellsh](https://github.com/gabriellsh) -- [@ggazzo](https://github.com/ggazzo) -- [@renatobecker](https://github.com/renatobecker) -- [@rodrigok](https://github.com/rodrigok) -- [@sampaiodiego](https://github.com/sampaiodiego) - -## 3.0.0-rc.8 -`2020-02-11 · 2 🐛 · 2 🔍 · 4 👩‍💻👨‍💻` - -### 🐛 Bug fixes - -- Do not stop on DM imports if one of users was not found ([#16547](https://github.com/RocketChat/Rocket.Chat/pull/16547)) -- Introduce AppLivechatBridge.isOnlineAsync method ([#16467](https://github.com/RocketChat/Rocket.Chat/pull/16467)) - -
-🔍 Minor changes - -- Regression: UIkit input states ([#16552](https://github.com/RocketChat/Rocket.Chat/pull/16552)) -- Regression: UIKit missing select states: error/disabled ([#16540](https://github.com/RocketChat/Rocket.Chat/pull/16540)) - -
- -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@d-gubert](https://github.com/d-gubert) -- [@ggazzo](https://github.com/ggazzo) -- [@renatobecker](https://github.com/renatobecker) -- [@rodrigok](https://github.com/rodrigok) - -## 3.0.0-rc.7 -`2020-02-08 · 1 ️️️⚠️ · 1 👩‍💻👨‍💻` - -### ⚠️ BREAKING CHANGES - -- Change apps/icon endpoint to return app's icon and use it to show on Ui Kit modal ([#16522](https://github.com/RocketChat/Rocket.Chat/pull/16522)) - -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@sampaiodiego](https://github.com/sampaiodiego) - -## 3.0.0-rc.6 -`2020-02-08 · 1 🔍 · 1 👩‍💻👨‍💻` - -
-🔍 Minor changes - -- Regression: update package-lock ([#16528](https://github.com/RocketChat/Rocket.Chat/pull/16528)) - -
- -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@ggazzo](https://github.com/ggazzo) - -## 3.0.0-rc.5 -`2020-02-08 · 5 🔍 · 4 👩‍💻👨‍💻` - -
-🔍 Minor changes - -- Regression: Update Uikit ([#16515](https://github.com/RocketChat/Rocket.Chat/pull/16515)) -- Regression: UIKit - Send container info on block actions triggered on a message ([#16514](https://github.com/RocketChat/Rocket.Chat/pull/16514)) -- Use base64 for import files upload to prevent file corruption ([#16516](https://github.com/RocketChat/Rocket.Chat/pull/16516)) -- Regression: Send app info along with interaction payload to the UI ([#16511](https://github.com/RocketChat/Rocket.Chat/pull/16511)) -- Regression: Ui Kit messaging issues (#16513) ([#16513](https://github.com/RocketChat/Rocket.Chat/pull/16513)) - -
- -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@d-gubert](https://github.com/d-gubert) -- [@ggazzo](https://github.com/ggazzo) -- [@rodrigok](https://github.com/rodrigok) -- [@sampaiodiego](https://github.com/sampaiodiego) - -## 3.0.0-rc.4 -`2020-02-06 · 2 🔍 · 2 👩‍💻👨‍💻` - -
-🔍 Minor changes - -- Fix: License missing from manual register handler ([#16505](https://github.com/RocketChat/Rocket.Chat/pull/16505)) -- Exclude federated and app users from active user count ([#16489](https://github.com/RocketChat/Rocket.Chat/pull/16489)) - -
- -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@d-gubert](https://github.com/d-gubert) -- [@geekgonecrazy](https://github.com/geekgonecrazy) - -## 3.0.0-rc.3 -`2020-02-06 · 3 🔍 · 2 👩‍💻👨‍💻` - -
-🔍 Minor changes - -- Remove users.info being called without need ([#16504](https://github.com/RocketChat/Rocket.Chat/pull/16504)) -- Add Ui Kit container ([#16503](https://github.com/RocketChat/Rocket.Chat/pull/16503)) -- Catch zip errors on import file load ([#16494](https://github.com/RocketChat/Rocket.Chat/pull/16494)) - -
- -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@rodrigok](https://github.com/rodrigok) -- [@sampaiodiego](https://github.com/sampaiodiego) - -## 3.0.0-rc.2 -`2020-02-05 · 3 🐛 · 4 🔍 · 2 👩‍💻👨‍💻` - -### 🐛 Bug fixes - -- Missing edited icon in newly created messages ([#16484](https://github.com/RocketChat/Rocket.Chat/pull/16484)) -- Read Message after receive a message and the room is opened ([#16473](https://github.com/RocketChat/Rocket.Chat/pull/16473)) -- Send message with pending messages ([#16474](https://github.com/RocketChat/Rocket.Chat/pull/16474)) - -
-🔍 Minor changes - -- Regression: prevent submit modal ([#16488](https://github.com/RocketChat/Rocket.Chat/pull/16488)) -- Regression: allow private channels to hide system messages ([#16483](https://github.com/RocketChat/Rocket.Chat/pull/16483)) -- Regression: Fix uikit modal closing on click ([#16475](https://github.com/RocketChat/Rocket.Chat/pull/16475)) -- Regression: Fix undefined presence after reconnect ([#16477](https://github.com/RocketChat/Rocket.Chat/pull/16477)) - -
- -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@MartinSchoeler](https://github.com/MartinSchoeler) -- [@ggazzo](https://github.com/ggazzo) - -## 3.0.0-rc.1 -`2020-02-04 · 1 🔍 · 1 👩‍💻👨‍💻` - -
-🔍 Minor changes - -- Fix tests ([#16469](https://github.com/RocketChat/Rocket.Chat/pull/16469)) - -
- -### 👩‍💻👨‍💻 Core Team 🤓 - -- [@sampaiodiego](https://github.com/sampaiodiego) - -## 3.0.0-rc.0 -`2020-02-04 · 5 ️️️⚠️ · 10 🎉 · 11 🚀 · 22 🐛 · 18 🔍 · 19 👩‍💻👨‍💻` +### Engine versions +- Node: `12.14.0` +- NPM: `6.13.4` +- MongoDB: `3.4, 3.6, 4.0` ### ⚠️ BREAKING CHANGES @@ -216,6 +14,8 @@ - Hide system messages ([#16243](https://github.com/RocketChat/Rocket.Chat/pull/16243)) - Upgrade to Meteor 1.9 and NodeJS 12 ([#16252](https://github.com/RocketChat/Rocket.Chat/pull/16252)) - Removed room counter from sidebar ([#16036](https://github.com/RocketChat/Rocket.Chat/pull/16036)) +- Change apps/icon endpoint to return app's icon and use it to show on Ui Kit modal ([#16522](https://github.com/RocketChat/Rocket.Chat/pull/16522)) +- TLS v1.0 and TLS v1.1 were disabled by due to NodeJS update to v12. You can still enable them by using flags like `--tls-min-v1.0` and `--tls-min-v1.1` ### 🎉 New features @@ -268,6 +68,16 @@ - Thread message icon overlapping text ([#16083](https://github.com/RocketChat/Rocket.Chat/pull/16083)) - Login change language button ([#16085](https://github.com/RocketChat/Rocket.Chat/pull/16085)) - api-bypass-rate-limiter permission was not working ([#16080](https://github.com/RocketChat/Rocket.Chat/pull/16080)) +- Missing edited icon in newly created messages ([#16484](https://github.com/RocketChat/Rocket.Chat/pull/16484)) +- Read Message after receive a message and the room is opened ([#16473](https://github.com/RocketChat/Rocket.Chat/pull/16473)) +- Send message with pending messages ([#16474](https://github.com/RocketChat/Rocket.Chat/pull/16474)) +- Do not stop on DM imports if one of users was not found ([#16547](https://github.com/RocketChat/Rocket.Chat/pull/16547)) +- Introduce AppLivechatBridge.isOnlineAsync method ([#16467](https://github.com/RocketChat/Rocket.Chat/pull/16467)) +- When copying invite links, multiple toastr messages ([#16578](https://github.com/RocketChat/Rocket.Chat/pull/16578)) +- Livechat Widget version 1.3.1 ([#16580](https://github.com/RocketChat/Rocket.Chat/pull/16580)) +- Error when successfully joining room by invite link ([#16571](https://github.com/RocketChat/Rocket.Chat/pull/16571)) +- Invite links proxy URLs not working when using CDN ([#16581](https://github.com/RocketChat/Rocket.Chat/pull/16581)) +- Bug on starting Jitsi video calls , multiple messages ([#16601](https://github.com/RocketChat/Rocket.Chat/pull/16601))
🔍 Minor changes @@ -290,6 +100,31 @@ - Disable PR Docker image build ([#16141](https://github.com/RocketChat/Rocket.Chat/pull/16141)) - Add Cloud Info to translation dictionary ([#16122](https://github.com/RocketChat/Rocket.Chat/pull/16122) by [@aviral243](https://github.com/aviral243)) - Merge master into develop & Set version to 2.5.0-develop ([#16107](https://github.com/RocketChat/Rocket.Chat/pull/16107)) +- Fix tests ([#16469](https://github.com/RocketChat/Rocket.Chat/pull/16469)) +- Regression: prevent submit modal ([#16488](https://github.com/RocketChat/Rocket.Chat/pull/16488)) +- Regression: allow private channels to hide system messages ([#16483](https://github.com/RocketChat/Rocket.Chat/pull/16483)) +- Regression: Fix uikit modal closing on click ([#16475](https://github.com/RocketChat/Rocket.Chat/pull/16475)) +- Regression: Fix undefined presence after reconnect ([#16477](https://github.com/RocketChat/Rocket.Chat/pull/16477)) +- Remove users.info being called without need ([#16504](https://github.com/RocketChat/Rocket.Chat/pull/16504)) +- Add Ui Kit container ([#16503](https://github.com/RocketChat/Rocket.Chat/pull/16503)) +- Catch zip errors on import file load ([#16494](https://github.com/RocketChat/Rocket.Chat/pull/16494)) +- Fix: License missing from manual register handler ([#16505](https://github.com/RocketChat/Rocket.Chat/pull/16505)) +- Exclude federated and app users from active user count ([#16489](https://github.com/RocketChat/Rocket.Chat/pull/16489)) +- Regression: Update Uikit ([#16515](https://github.com/RocketChat/Rocket.Chat/pull/16515)) +- Regression: UIKit - Send container info on block actions triggered on a message ([#16514](https://github.com/RocketChat/Rocket.Chat/pull/16514)) +- Use base64 for import files upload to prevent file corruption ([#16516](https://github.com/RocketChat/Rocket.Chat/pull/16516)) +- Regression: Send app info along with interaction payload to the UI ([#16511](https://github.com/RocketChat/Rocket.Chat/pull/16511)) +- Regression: Ui Kit messaging issues (#16513) ([#16513](https://github.com/RocketChat/Rocket.Chat/pull/16513)) +- Regression: update package-lock ([#16528](https://github.com/RocketChat/Rocket.Chat/pull/16528)) +- Regression: UIkit input states ([#16552](https://github.com/RocketChat/Rocket.Chat/pull/16552)) +- Regression: UIKit missing select states: error/disabled ([#16540](https://github.com/RocketChat/Rocket.Chat/pull/16540)) +- Regression: fix read unread messages ([#16562](https://github.com/RocketChat/Rocket.Chat/pull/16562)) +- Regression: UIKit update modal actions ([#16570](https://github.com/RocketChat/Rocket.Chat/pull/16570)) +- Update Apps-Engine version ([#16584](https://github.com/RocketChat/Rocket.Chat/pull/16584)) +- Add breaking notice regarding TLS ([#16575](https://github.com/RocketChat/Rocket.Chat/pull/16575)) +- Regression: Modal onSubmit ([#16556](https://github.com/RocketChat/Rocket.Chat/pull/16556)) +- Regression: send file modal not working via keyboard ([#16607](https://github.com/RocketChat/Rocket.Chat/pull/16607)) +- Fix github actions accessing the github registry ([#16521](https://github.com/RocketChat/Rocket.Chat/pull/16521) by [@mrsimpson](https://github.com/mrsimpson))
@@ -299,6 +134,7 @@ - [@antkaz](https://github.com/antkaz) - [@ashwaniYDV](https://github.com/ashwaniYDV) - [@aviral243](https://github.com/aviral243) +- [@mrsimpson](https://github.com/mrsimpson) - [@ritwizsinha](https://github.com/ritwizsinha) - [@vickyokrm](https://github.com/vickyokrm) @@ -309,6 +145,7 @@ - [@MartinSchoeler](https://github.com/MartinSchoeler) - [@d-gubert](https://github.com/d-gubert) - [@gabriellsh](https://github.com/gabriellsh) +- [@geekgonecrazy](https://github.com/geekgonecrazy) - [@ggazzo](https://github.com/ggazzo) - [@lolimay](https://github.com/lolimay) - [@mariaeduardacunha](https://github.com/mariaeduardacunha) diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index f693e71d0d2e1..3d617ac0916ff 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.0.0-rc.11" + "version": "3.0.0" } diff --git a/package.json b/package.json index fa046d7416594..0d0f66e6678cb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.0.0-rc.11", + "version": "3.0.0", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/"