From 51b4f5f4516ed863195ff9d6b8395d7b4016d17e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Francisco=20Siebel?= <jfsiebel@gmail.com>
Date: Mon, 17 Dec 2018 09:48:34 -0200
Subject: [PATCH] WIP change components to PureComponents and add memo

---
 .../ui/components/chat/alert/component.jsx    |  4 ++--
 .../ui/components/chat/alert/container.jsx    |  4 ++--
 .../chat/alert/push-alert/component.jsx       |  4 ++--
 .../chat/chat-dropdown/component.jsx          |  4 ++--
 .../imports/ui/components/chat/component.jsx  |  4 ++--
 .../imports/ui/components/chat/container.jsx  |  5 ++--
 .../chat/message-form/component.jsx           |  4 ++--
 .../message-form-actions/component.jsx        | 23 -------------------
 .../message-form-actions/styles.scss          |  1 -
 .../message-list-item/message/component.jsx   |  4 ++--
 10 files changed, 17 insertions(+), 40 deletions(-)
 delete mode 100644 bigbluebutton-html5/imports/ui/components/chat/message-form/message-form-actions/component.jsx
 delete mode 100644 bigbluebutton-html5/imports/ui/components/chat/message-form/message-form-actions/styles.scss

diff --git a/bigbluebutton-html5/imports/ui/components/chat/alert/component.jsx b/bigbluebutton-html5/imports/ui/components/chat/alert/component.jsx
index 923f1b97d5..2c9408a392 100755
--- a/bigbluebutton-html5/imports/ui/components/chat/alert/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/chat/alert/component.jsx
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import React, { PureComponent } from 'react';
 import PropTypes from 'prop-types';
 import { defineMessages, injectIntl } from 'react-intl';
 import { Session } from 'meteor/session';
@@ -37,7 +37,7 @@ const intlMessages = defineMessages({
 const PUBLIC_KEY = 'public';
 const PRIVATE_KEY = 'private';
 
-class ChatAlert extends Component {
+class ChatAlert extends PureComponent {
   constructor(props) {
     super(props);
     this.state = {
diff --git a/bigbluebutton-html5/imports/ui/components/chat/alert/container.jsx b/bigbluebutton-html5/imports/ui/components/chat/alert/container.jsx
index b0bee3dd6b..bddf44f912 100755
--- a/bigbluebutton-html5/imports/ui/components/chat/alert/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/chat/alert/container.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { memo } from 'react';
 import { withTracker } from 'meteor/react-meteor-data';
 import UserListService from '/imports/ui/components/user-list/service';
 import Settings from '/imports/ui/services/settings';
@@ -18,4 +18,4 @@ export default withTracker(() => {
     openChats,
     publicUserId: Meteor.settings.public.chat.public_group_id,
   };
-})(ChatAlertContainer);
+})(memo(ChatAlertContainer));
diff --git a/bigbluebutton-html5/imports/ui/components/chat/alert/push-alert/component.jsx b/bigbluebutton-html5/imports/ui/components/chat/alert/push-alert/component.jsx
index 6cae1188ed..ba73f249ff 100755
--- a/bigbluebutton-html5/imports/ui/components/chat/alert/push-alert/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/chat/alert/push-alert/component.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { PureComponent } from 'react';
 import PropTypes from 'prop-types';
 import _ from 'lodash';
 import injectNotify from '/imports/ui/components/toast/inject-notify/component';
@@ -15,7 +15,7 @@ const propTypes = {
   content: PropTypes.node.isRequired,
 };
 
-class ChatPushAlert extends React.Component {
+class ChatPushAlert extends PureComponent {
   static link(message, chatId) {
     return (
       <div
diff --git a/bigbluebutton-html5/imports/ui/components/chat/chat-dropdown/component.jsx b/bigbluebutton-html5/imports/ui/components/chat/chat-dropdown/component.jsx
index 48433e1782..f4be63330d 100644
--- a/bigbluebutton-html5/imports/ui/components/chat/chat-dropdown/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/chat/chat-dropdown/component.jsx
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import React, { PureComponent } from 'react';
 import { defineMessages, injectIntl } from 'react-intl';
 import { withModalMounter } from '/imports/ui/components/modal/service';
 import Clipboard from 'clipboard';
@@ -33,7 +33,7 @@ const intlMessages = defineMessages({
   },
 });
 
-class ChatDropdown extends Component {
+class ChatDropdown extends PureComponent {
   constructor(props) {
     super(props);
 
diff --git a/bigbluebutton-html5/imports/ui/components/chat/component.jsx b/bigbluebutton-html5/imports/ui/components/chat/component.jsx
index 7c6faba8da..03c00b88a9 100644
--- a/bigbluebutton-html5/imports/ui/components/chat/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/chat/component.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { memo } from 'react';
 import PropTypes from 'prop-types';
 import { defineMessages, injectIntl } from 'react-intl';
 import injectWbResizeEvent from '/imports/ui/components/presentation/resize-wrapper/component';
@@ -109,7 +109,7 @@ const Chat = (props) => {
   );
 };
 
-export default withShortcutHelper(injectWbResizeEvent(injectIntl(Chat)), ['hidePrivateChat', 'closePrivateChat']);
+export default withShortcutHelper(injectWbResizeEvent(injectIntl(memo(Chat))), ['hidePrivateChat', 'closePrivateChat']);
 
 const propTypes = {
   chatID: PropTypes.string.isRequired,
diff --git a/bigbluebutton-html5/imports/ui/components/chat/container.jsx b/bigbluebutton-html5/imports/ui/components/chat/container.jsx
index be1314c06f..349a27780a 100644
--- a/bigbluebutton-html5/imports/ui/components/chat/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/chat/container.jsx
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import React, { PureComponent } from 'react';
 import { defineMessages, injectIntl } from 'react-intl';
 import { withTracker } from 'meteor/react-meteor-data';
 import { Session } from 'meteor/session';
@@ -29,11 +29,12 @@ const intlMessages = defineMessages({
   },
 });
 
-class ChatContainer extends Component {
+class ChatContainer extends PureComponent {
   componentDidMount() {
     // in case of reopening a chat, need to make sure it's removed from closed list
     ChatService.removeFromClosedChatsSession();
   }
+
   render() {
     return (
       <Chat {...this.props}>
diff --git a/bigbluebutton-html5/imports/ui/components/chat/message-form/component.jsx b/bigbluebutton-html5/imports/ui/components/chat/message-form/component.jsx
index 78bcc8081e..85d0c213b7 100755
--- a/bigbluebutton-html5/imports/ui/components/chat/message-form/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/chat/message-form/component.jsx
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import React, { PureComponent } from 'react';
 import { defineMessages, injectIntl } from 'react-intl';
 import cx from 'classnames';
 import TextareaAutosize from 'react-autosize-textarea';
@@ -32,7 +32,7 @@ const messages = defineMessages({
   },
 });
 
-class MessageForm extends Component {
+class MessageForm extends PureComponent {
   constructor(props) {
     super(props);
 
diff --git a/bigbluebutton-html5/imports/ui/components/chat/message-form/message-form-actions/component.jsx b/bigbluebutton-html5/imports/ui/components/chat/message-form/message-form-actions/component.jsx
deleted file mode 100644
index 08da9326f0..0000000000
--- a/bigbluebutton-html5/imports/ui/components/chat/message-form/message-form-actions/component.jsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import React from 'react';
-
-import Icon from '../../../icon/component';
-import BaseButton from '../../../button/base/component';
-
-const propTypes = {
-  ...BaseButton.propTypes,
-};
-
-const defaultProps = {
-  ...BaseButton.defaultProps,
-};
-
-const MessageFormActions = () => (
-  <BaseButton {...this.props}>
-    <Icon iconName={'add'} />
-  </BaseButton>
-);
-
-export default
-
-  MessageFormActions.propTypes = propTypes;
-MessageFormActions.defaultProps = defaultProps;
diff --git a/bigbluebutton-html5/imports/ui/components/chat/message-form/message-form-actions/styles.scss b/bigbluebutton-html5/imports/ui/components/chat/message-form/message-form-actions/styles.scss
deleted file mode 100644
index 0d56ef179f..0000000000
--- a/bigbluebutton-html5/imports/ui/components/chat/message-form/message-form-actions/styles.scss
+++ /dev/null
@@ -1 +0,0 @@
-@import "/imports/ui/stylesheets/variables/_all";
diff --git a/bigbluebutton-html5/imports/ui/components/chat/message-list/message-list-item/message/component.jsx b/bigbluebutton-html5/imports/ui/components/chat/message-list/message-list-item/message/component.jsx
index c946e6ceeb..614d2f2886 100644
--- a/bigbluebutton-html5/imports/ui/components/chat/message-list/message-list-item/message/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/chat/message-list/message-list-item/message/component.jsx
@@ -1,4 +1,4 @@
-import React, { Component } from 'react';
+import React, { PureComponent } from 'react';
 import PropTypes from 'prop-types';
 import _ from 'lodash';
 
@@ -28,7 +28,7 @@ const isElementInViewport = (el) => {
   );
 };
 
-export default class MessageListItem extends Component {
+export default class MessageListItem extends PureComponent {
   constructor(props) {
     super(props);
 
-- 
GitLab