-
+
-
+
-
);
} else if (this.state.page === 'gitlab') {
return (
{teamListing}
-
+
);
} else if (this.state.page === 'google') {
return (
{teamListing}
-
+
);
} else if (this.state.page === 'none') {
@@ -157,6 +157,8 @@ export default class TeamSignUp extends React.Component {
);
}
+
+ return null;
}
}
diff --git a/web/react/components/signup_team_confirm.jsx b/web/react/components/signup_team_confirm.jsx
index de83285dbb..290d8e503d 100644
--- a/web/react/components/signup_team_confirm.jsx
+++ b/web/react/components/signup_team_confirm.jsx
@@ -4,10 +4,6 @@
import {FormattedMessage, FormattedHTMLMessage} from 'mm-intl';
export default class SignupTeamConfirm extends React.Component {
- constructor(props) {
- super(props);
- }
-
render() {
return (
diff --git a/web/react/components/signup_user_complete.jsx b/web/react/components/signup_user_complete.jsx
index b770a2a2c6..740a7b166e 100644
--- a/web/react/components/signup_user_complete.jsx
+++ b/web/react/components/signup_user_complete.jsx
@@ -254,7 +254,7 @@ class SignupUserComplete extends React.Component {
key='gitlab'
href={'/' + this.props.teamName + '/signup/gitlab' + window.location.search}
>
-
+
-
+
);
- icon = ;
+ icon = ;
} else if (item.username === 'channel') {
username = 'channel';
description = (
@@ -33,7 +33,7 @@ class AtMentionSuggestion extends React.Component {
defaultMessage='Notifies everyone in the channel'
/>
);
- icon = ;
+ icon = ;
} else {
username = item.username;
description = Utils.getFullName(item);
diff --git a/web/react/components/suggestion/suggestion_box.jsx b/web/react/components/suggestion/suggestion_box.jsx
index 57a33c24a5..ea9f835ebf 100644
--- a/web/react/components/suggestion/suggestion_box.jsx
+++ b/web/react/components/suggestion/suggestion_box.jsx
@@ -140,7 +140,7 @@ export default class SuggestionBox extends React.Component {
return (
{textbox}
-
+
);
}
diff --git a/web/react/components/team_export_tab.jsx b/web/react/components/team_export_tab.jsx
index 8330637d8d..12743d9e3c 100644
--- a/web/react/components/team_export_tab.jsx
+++ b/web/react/components/team_export_tab.jsx
@@ -36,7 +36,7 @@ export default class TeamExportTab extends React.Component {
case 'in-progress':
messageSection = (
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/web/react/components/team_settings.jsx b/web/react/components/team_settings.jsx
index bbcedb5ddb..e3207d5733 100644
--- a/web/react/components/team_settings.jsx
+++ b/web/react/components/team_settings.jsx
@@ -55,7 +55,7 @@ export default class TeamSettings extends React.Component {
case 'export':
result = (
-
+
);
break;
diff --git a/web/react/components/team_signup_choose_auth.jsx b/web/react/components/team_signup_choose_auth.jsx
index 2dc67e92e0..8c98c5538d 100644
--- a/web/react/components/team_signup_choose_auth.jsx
+++ b/web/react/components/team_signup_choose_auth.jsx
@@ -23,7 +23,7 @@ export default class ChooseAuthPage extends React.Component {
}.bind(this)
}
>
-
+
-
+
-
+
+ />
diff --git a/web/react/components/team_signup_welcome_page.jsx b/web/react/components/team_signup_welcome_page.jsx
index 18951be72f..9939c3ffd9 100644
--- a/web/react/components/team_signup_welcome_page.jsx
+++ b/web/react/components/team_signup_welcome_page.jsx
@@ -150,7 +150,7 @@ class TeamSignupWelcomePage extends React.Component {
id='team_signup_welcome.confirm'
defaultMessage='Please confirm your email address:'
/>
-
+
{this.props.state.team.email}
@@ -176,7 +176,7 @@ class TeamSignupWelcomePage extends React.Component {
{storageError}
diff --git a/web/react/components/time_since.jsx b/web/react/components/time_since.jsx
index 1560d24691..d5891cc57f 100644
--- a/web/react/components/time_since.jsx
+++ b/web/react/components/time_since.jsx
@@ -10,9 +10,6 @@ var Tooltip = ReactBootstrap.Tooltip;
var OverlayTrigger = ReactBootstrap.OverlayTrigger;
export default class TimeSince extends React.Component {
- constructor(props) {
- super(props);
- }
componentDidMount() {
this.intervalId = setInterval(() => {
this.forceUpdate();
@@ -51,7 +48,7 @@ export default class TimeSince extends React.Component {
overlay={tooltip}
>
);
diff --git a/web/react/components/toggle_modal_button.jsx b/web/react/components/toggle_modal_button.jsx
index ce8ff3f60d..10f9a4736b 100644
--- a/web/react/components/toggle_modal_button.jsx
+++ b/web/react/components/toggle_modal_button.jsx
@@ -22,7 +22,7 @@ export default class ModalToggleButton extends React.Component {
}
render() {
- const {children, dialogType, dialogProps, onClick, ...props} = this.props; // eslint-disable-line no-redeclare
+ const {children, dialogType, dialogProps, onClick, ...props} = this.props; // eslint-disable-line no-use-before-define
// allow callers to provide an onClick which will be called before the modal is shown
let clickHandler = this.show;
diff --git a/web/react/components/tutorial/tutorial_intro_screens.jsx b/web/react/components/tutorial/tutorial_intro_screens.jsx
index 78cfb7b60e..2bacdeb28b 100644
--- a/web/react/components/tutorial/tutorial_intro_screens.jsx
+++ b/web/react/components/tutorial/tutorial_intro_screens.jsx
@@ -58,6 +58,7 @@ export default class TutorialIntroScreens extends React.Component {
case 2:
return this.createScreenThree();
}
+ return null;
}
createScreenOne() {
const circles = this.createCircles();
diff --git a/web/react/components/unread_channel_indicator.jsx b/web/react/components/unread_channel_indicator.jsx
index 509ac9e4d8..f897cdea3a 100644
--- a/web/react/components/unread_channel_indicator.jsx
+++ b/web/react/components/unread_channel_indicator.jsx
@@ -4,9 +4,6 @@
// Indicator for the left sidebar which indicate if there's unread posts in a channel that is not shown
// because it is either above or below the screen
export default class UnreadChannelIndicator extends React.Component {
- constructor(props) {
- super(props);
- }
render() {
let displayValue = 'none';
if (this.props.show) {
diff --git a/web/react/components/user_settings/user_settings_integrations.jsx b/web/react/components/user_settings/user_settings_integrations.jsx
index 07d5230d10..e4f460a6dd 100644
--- a/web/react/components/user_settings/user_settings_integrations.jsx
+++ b/web/react/components/user_settings/user_settings_integrations.jsx
@@ -57,7 +57,7 @@ class UserSettingsIntegrationsTab extends React.Component {
if (global.window.mm_config.EnableIncomingWebhooks === 'true') {
if (this.props.activeSection === 'incoming-hooks') {
inputs.push(
-
+
);
incomingHooksSection = (
@@ -88,7 +88,7 @@ class UserSettingsIntegrationsTab extends React.Component {
if (global.window.mm_config.EnableOutgoingWebhooks === 'true') {
if (this.props.activeSection === 'outgoing-hooks') {
inputs.push(
-
+
);
outgoingHooksSection = (
@@ -119,7 +119,7 @@ class UserSettingsIntegrationsTab extends React.Component {
if (global.window.mm_config.EnableCommands === 'true') {
if (this.props.activeSection === 'command-hooks') {
inputs.push(
-
+
);
commandHooksSection = (
diff --git a/web/react/components/user_settings/user_settings_modal.jsx b/web/react/components/user_settings/user_settings_modal.jsx
index 5442f7ac4a..80d03d88ee 100644
--- a/web/react/components/user_settings/user_settings_modal.jsx
+++ b/web/react/components/user_settings/user_settings_modal.jsx
@@ -111,12 +111,13 @@ class UserSettingsModal extends React.Component {
this.afterConfirm = () => this.handleHide();
this.showConfirmModal();
- return false;
+ return;
}
this.resetTheme();
this.deactivateTab();
this.props.onModalDismissed();
+ return;
}
// called after the dialog is fully hidden and faded out
@@ -295,7 +296,12 @@ class UserSettingsModal extends React.Component {
closeModal={this.closeModal}
collapseModal={this.collapseModal}
setEnforceFocus={(enforceFocus) => this.setState({enforceFocus})}
- setRequireConfirm={(requireConfirm) => this.requireConfirm = requireConfirm}
+ setRequireConfirm={
+ (requireConfirm) => {
+ this.requireConfirm = requireConfirm;
+ return;
+ }
+ }
/>
diff --git a/web/react/components/user_settings/user_settings_notifications.jsx b/web/react/components/user_settings/user_settings_notifications.jsx
index 786e53f102..ee9febb8e8 100644
--- a/web/react/components/user_settings/user_settings_notifications.jsx
+++ b/web/react/components/user_settings/user_settings_notifications.jsx
@@ -445,7 +445,7 @@ class NotificationsTab extends React.Component {
title={formatMessage(holders.desktopSounds)}
describe={describe}
updateSection={handleUpdateSoundSection}
- disableOpen = {!this.state.soundNeeded}
+ disableOpen={!this.state.soundNeeded}
/>
);
}
@@ -826,4 +826,4 @@ NotificationsTab.propTypes = {
collapseModal: React.PropTypes.func.isRequired
};
-export default injectIntl(NotificationsTab);
\ No newline at end of file
+export default injectIntl(NotificationsTab);
diff --git a/web/react/components/view_image.jsx b/web/react/components/view_image.jsx
index 90885e4954..713fbf80ba 100644
--- a/web/react/components/view_image.jsx
+++ b/web/react/components/view_image.jsx
@@ -203,7 +203,9 @@ class ViewImageModal extends React.Component {
window.open(serverData.public_link);
}
},
- () => {}
+ () => {
+ //Do Nothing on error
+ }
);
}
@@ -383,6 +385,11 @@ function LoadingImagePreview({progress, loading}) {
);
}
+LoadingImagePreview.propTypes = {
+ progress: React.PropTypes.number,
+ loading: React.PropTypes.string
+};
+
function ImagePreview({filename, fileUrl, fileInfo, maxHeight}) {
let previewUrl;
if (fileInfo.has_preview_image) {
@@ -405,4 +412,11 @@ function ImagePreview({filename, fileUrl, fileInfo, maxHeight}) {
);
}
-export default injectIntl(ViewImageModal);
\ No newline at end of file
+ImagePreview.propTypes = {
+ filename: React.PropTypes.string.isRequired,
+ fileUrl: React.PropTypes.string.isRequired,
+ fileInfo: React.PropTypes.object.isRequired,
+ maxHeight: React.PropTypes.number.isRequired
+};
+
+export default injectIntl(ViewImageModal);
diff --git a/web/react/components/view_image_popover_bar.jsx b/web/react/components/view_image_popover_bar.jsx
index 97671b845f..819df76d8e 100644
--- a/web/react/components/view_image_popover_bar.jsx
+++ b/web/react/components/view_image_popover_bar.jsx
@@ -4,9 +4,6 @@
import {FormattedMessage} from 'mm-intl';
export default class ViewImagePopoverBar extends React.Component {
- constructor(props) {
- super(props);
- }
render() {
var publicLink = '';
if (global.window.mm_config.EnablePublicLink === 'true') {
diff --git a/web/react/components/youtube_video.jsx b/web/react/components/youtube_video.jsx
index bf3c43840c..fae846afb3 100644
--- a/web/react/components/youtube_video.jsx
+++ b/web/react/components/youtube_video.jsx
@@ -94,6 +94,7 @@ export default class YoutubeVideo extends React.Component {
receivedYoutubeData: true,
title: metadata.title
});
+ return null;
}
play() {
diff --git a/web/react/package.json b/web/react/package.json
index 5fc2f28518..07ffa0cdfd 100644
--- a/web/react/package.json
+++ b/web/react/package.json
@@ -3,10 +3,10 @@
"version": "0.0.1",
"private": true,
"dependencies": {
- "autolinker": "0.22.0",
- "fastclick": "^1.0.6",
+ "autolinker": "0.24.0",
+ "fastclick": "1.0.6",
"flux": "2.1.1",
- "highlight.js": "8.9.1",
+ "highlight.js": "9.1.0",
"keymirror": "0.1.1",
"marked": "mattermost/marked#cb85e5cc81bc7937dbb73c3c53d9532b1b97e3ca",
"mm-intl": "mattermost/mm-intl#805442fd474fa40cd586ddeda404dbbe8e60626d",
@@ -14,18 +14,18 @@
"twemoji": "1.4.1"
},
"devDependencies": {
- "babel-eslint": "4.1.7",
- "babel-plugin-transform-runtime": "6.1.4",
- "babel-preset-es2015": "6.1.18",
- "babel-preset-react": "6.1.18",
- "babel-preset-stage-0": "6.1.18",
+ "babel-eslint": "5.0.0",
+ "babel-plugin-transform-runtime": "6.5.2",
+ "babel-preset-es2015": "6.5.0",
+ "babel-preset-react": "6.5.0",
+ "babel-preset-stage-0": "6.5.0",
"babelify": "7.2.0",
- "browserify": "12.0.1",
- "eslint": "1.9.0",
- "eslint-plugin-react": "3.9.0",
+ "browserify": "13.0.0",
+ "eslint": "2.2.0",
+ "eslint-plugin-react": "4.0.0",
"exorcist": "0.4.0",
"uglify-js": "2.6.1",
- "watchify": "3.6.1"
+ "watchify": "3.7.0"
},
"scripts": {
"check": "",
diff --git a/web/react/pages/admin_console.jsx b/web/react/pages/admin_console.jsx
index 3f4c39934c..989936d9e2 100644
--- a/web/react/pages/admin_console.jsx
+++ b/web/react/pages/admin_console.jsx
@@ -56,7 +56,7 @@ class Root extends React.Component {
tab={this.props.map.ActiveTab}
teamId={this.props.map.TeamId}
/>
-
+
);
@@ -65,7 +65,7 @@ class Root extends React.Component {
global.window.setup_admin_console_page = function setup(props) {
ReactDOM.render(
-