diff options
90 files changed, 449 insertions, 406 deletions
diff --git a/web/react/.eslintrc b/web/react/.eslintrc deleted file mode 100644 index 013175567..000000000 --- a/web/react/.eslintrc +++ /dev/null @@ -1,204 +0,0 @@ -{ - "extends": "eslint:recommended", - "ecmaFeatures": { - "jsx": true, - "blockBindings": true, - "modules": true, - "classes": true, - "arrowFunctions": true, - "defaultParams": true - }, - "parser": "babel-eslint", - "plugins": [ - "react" - ], - "env": { - "browser": true, - "node": true, - "jquery": true, - "es6": true - }, - "globals": { - "React": false, - "ReactDOM": false, - "ReactBootstrap": false, - "ReactIntl": false, - "ReactIntlLocaleData": false, - "Chart": false, - "katex": false - }, - "rules": { - "comma-dangle": [2, "never"], - "no-arrow-condition": 2, - "no-case-declarations": 2, - "no-cond-assign": [2, "except-parens"], - "no-console": 2, - "no-constant-condition": 2, - "no-debugger": 2, - "no-dupe-args": 2, - "no-dupe-keys": 2, - "no-duplicate-case": 2, - "no-empty": 2, - "no-empty-pattern": 2, - "no-ex-assign": 2, - "no-extra-semi": 2, - "no-fallthrough": 2, - "no-func-assign": 2, - "no-inner-declarations": 0, - "no-invalid-regexp": 2, - "no-irregular-whitespace": 2, - "no-unexpected-multiline": 2, - "no-unreachable": 2, - "no-magic-numbers": [1, { "ignore": [-1, 0, 1, 2], "enforceConst": true, "detectObjects": true } ], - "valid-typeof": 2, - - "block-scoped-var": 2, - "complexity": [0, 8], - "consistent-return": 2, - "curly": [2, "all"], - "dot-location": [2, "object"], - "dot-notation": 2, - "eqeqeq": [2, "smart"], - "global-require": 2, - "guard-for-in": 2, - "no-alert": 2, - "no-array-constructor": 2, - "no-caller": 2, - "no-div-regex": 2, - "no-else-return": 2, - "no-eval": 2, - "no-extend-native": 2, - "no-extra-bind": 2, - "no-floating-decimal": 2, - "no-implied-eval": 2, - "no-iterator": 2, - "no-labels": 2, - "no-lone-blocks": 2, - "no-loop-func": 2, - "no-multi-spaces": [2, { "exceptions": { "Property": false } }], - "no-multi-str": 0, - "no-native-reassign": 2, - "no-new": 2, - "no-new-func": 2, - "no-new-object": 2, - "no-new-wrappers": 2, - "no-octal-escape": 2, - "no-param-reassign": 2, - "no-process-env": 2, - "no-process-exit": 2, - "no-proto": 2, - "no-redeclare": 2, - "no-return-assign": [2, "always"], - "no-script-url": 2, - "no-self-compare": 2, - "no-sequences": 2, - "no-throw-literal": 2, - "no-undef-init": 2, - "no-unused-expressions": 2, - "no-useless-concat": 1, - "no-void": 2, - "no-warning-comments": 1, - "no-with": 2, - "radix": 2, - "vars-on-top": 0, - "wrap-iife": [2, "outside"], - "yoda": [2, "never", {"exceptRange": false, "onlyEquality": false}], - - "no-undefined": 2, - "no-shadow": [2, {"hoist": "functions"}], - "no-shadow-restricted-names": 2, - "no-unused-vars": [2, {"vars": "all", "args": "after-used"}], - "no-use-before-define": [2, "nofunc"], - - // Style - "array-bracket-spacing": [2, "never"], - "brace-style": [2, "1tbs", { "allowSingleLine": false }], - "camelcase": [2, {"properties": "never"}], - "comma-spacing": [2, {"before": false, "after": true}], - "comma-style": [2, "last"], - "computed-property-spacing": [2, "never"], - "consistent-this": [2, "self"], - "func-names": 2, - "func-style": [2, "declaration"], - "indent": [2, 4, {"SwitchCase": 0}], - "jsx-quotes": [2, "prefer-single"], - "key-spacing": [2, {"beforeColon": false, "afterColon": true}], - "linebreak-style": 2, - "lines-around-comment": [2, { "beforeBlockComment": true, "beforeLineComment": true, "allowBlockStart": true, "allowBlockEnd": true }], - "new-cap": 2, - "new-parens": 2, - "no-lonely-if": 2, - "no-mixed-spaces-and-tabs": 2, - "no-multiple-empty-lines": [2, {"max": 1}], - "no-negated-condition": 2, - "no-nested-ternary": 2, - "no-spaced-func": 2, - "no-ternary": 0, - "no-trailing-spaces": [2, { "skipBlankLines": false }], - "no-underscore-dangle": 2, - "no-unneeded-ternary": [2, {"defaultAssignment": false}], - "object-curly-spacing": [2, "never"], - "one-var": [2, "never"], - "operator-linebreak": [2, "after"], - "padded-blocks": [2, "never"], - "quote-props": [2, "as-needed"], - "quotes": [2, "single", "avoid-escape"], - "semi": [2, "always"], - "semi-spacing": [2, {"before": false, "after": true}], - "space-after-keywords": [2, "always"], - "space-before-blocks": [2, "always"], - "space-before-function-paren": [2, "never"], - "space-before-keywords": [2, "always"], - "space-in-parens": [2, "never"], - "space-infix-ops": 2, - "space-return-throw-case": 2, - "space-unary-ops": [2, { "words": true, "nonwords": false }], - "wrap-regex": 2, - - // ES6 stuff - "arrow-parens": [2, "always"], - "arrow-body-style": 0, - "arrow-spacing": [2, { "before": true, "after": true }], - "constructor-super": 2, - "generator-star-spacing": [2, {"before": false, "after": true}], - "no-class-assign": 2, - "no-const-assign": 2, - "no-dupe-class-members": 2, - "no-this-before-super": 2, - "no-var": 0, - "object-shorthand": [1, "always"], - "prefer-arrow-callback": 1, - "prefer-const": 1, - "prefer-spread": 2, - "prefer-reflect": 1, - "prefer-template": 0, - "require-yield": 2, - - // React Specific - "react/display-name": [2, { "acceptTranspilerName": true }], - "react/jsx-boolean-value": [2, "always"], - "react/jsx-closing-bracket-location": [2, { "location": "tag-aligned" }], - "react/jsx-curly-spacing": [2, "never"], - "react/jsx-indent-props": [2, 4], - "react/jsx-key": 2, - "react/jsx-max-props-per-line": [2, { "maximum": 1 }], - "react/jsx-no-bind": 1, - "react/jsx-no-duplicate-props": [2, { "ignoreCase": false }], - "react/jsx-no-literals": 1, - "react/jsx-no-undef": 2, - "react/jsx-uses-react": 2, - "react/jsx-uses-vars": 2, - "react/no-danger": 0, - "react/no-did-mount-set-state": 2, - "react/no-did-update-set-state": 2, - "react/no-direct-mutation-state": 2, - "react/no-multi-comp": [2, { "ignoreStateless": true }], - "react/no-set-state": 0, - "react/no-unknown-property": 2, - "react/prefer-es6-class": 2, - "react/prop-types": 2, - "react/self-closing-comp": 2, - "react/sort-comp": 0, - "react/wrap-multilines": 2 - } -} diff --git a/web/react/.eslintrc.json b/web/react/.eslintrc.json new file mode 100644 index 000000000..51345113b --- /dev/null +++ b/web/react/.eslintrc.json @@ -0,0 +1,226 @@ +{ + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "jsx": true, + "impliedStrict": true, + "modules": true + } + }, + "parser": "babel-eslint", + "plugins": [ + "react" + ], + "env": { + "browser": true, + "node": true, + "jquery": true, + "es6": true + }, + "globals": { + "React": false, + "ReactDOM": false, + "ReactBootstrap": false, + "ReactIntl": false, + "ReactIntlLocaleData": false, + "Chart": false, + "katex": false + }, + "rules": { + "comma-dangle": [2, "never"], + "array-callback-return": 2, + "prefer-rest-params": 2, + "no-unmodified-loop-condition": 2, + "sort-imports": 0, + "no-new-symbol": 2, + "no-empty-function": 2, + "no-whitespace-before-property": 2, + "no-useless-constructor": 2, + "id-blacklist": 0, + "one-var-declaration-per-line": 0, + "no-extra-label": 2, + "template-curly-spacing": [2, "never"], + "no-self-assign": 2, + "newline-per-chained-call": 0, + "no-confusing-arrow": 2, + "no-case-declarations": 2, + "no-cond-assign": [2, "except-parens"], + "no-console": 2, + "no-constant-condition": 2, + "no-debugger": 2, + "no-dupe-args": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-empty": 2, + "no-empty-pattern": 2, + "no-ex-assign": 2, + "no-extra-semi": 2, + "no-fallthrough": 2, + "no-func-assign": 2, + "no-inner-declarations": 0, + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-unexpected-multiline": 2, + "no-unreachable": 2, + "no-magic-numbers": [1, { "ignore": [-1, 0, 1, 2], "enforceConst": true, "detectObjects": true } ], + "valid-typeof": 2, + + "block-scoped-var": 2, + "complexity": [0, 8], + "consistent-return": 2, + "curly": [2, "all"], + "dot-location": [2, "object"], + "dot-notation": 2, + "eqeqeq": [2, "smart"], + "global-require": 2, + "guard-for-in": 2, + "no-alert": 2, + "no-array-constructor": 2, + "no-caller": 2, + "no-div-regex": 2, + "no-else-return": 2, + "no-eval": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-floating-decimal": 2, + "no-implied-eval": 2, + "no-implicit-globals": 0, + "no-iterator": 2, + "no-labels": 2, + "no-lone-blocks": 2, + "no-loop-func": 2, + "no-multi-spaces": [2, { "exceptions": { "Property": false } }], + "no-multi-str": 0, + "no-native-reassign": 2, + "no-new": 2, + "no-new-func": 2, + "no-new-object": 2, + "no-new-wrappers": 2, + "no-octal-escape": 2, + "no-param-reassign": 2, + "no-process-env": 2, + "no-process-exit": 2, + "no-proto": 2, + "no-redeclare": 2, + "no-return-assign": [2, "always"], + "no-script-url": 2, + "no-self-compare": 2, + "no-sequences": 2, + "no-throw-literal": 2, + "no-undef-init": 2, + "no-unused-expressions": 2, + "no-useless-concat": 1, + "no-void": 2, + "no-warning-comments": 1, + "no-with": 2, + "radix": 2, + "vars-on-top": 0, + "wrap-iife": [2, "outside"], + "yoda": [2, "never", {"exceptRange": false, "onlyEquality": false}], + + "no-undefined": 2, + "no-shadow": [2, {"hoist": "functions"}], + "no-shadow-restricted-names": 2, + "no-unused-vars": [2, {"vars": "all", "args": "after-used"}], + "no-use-before-define": [2, "nofunc"], + + // Style + "array-bracket-spacing": [2, "never"], + "brace-style": [2, "1tbs", { "allowSingleLine": false }], + "camelcase": [2, {"properties": "never"}], + "comma-spacing": [2, {"before": false, "after": true}], + "comma-style": [2, "last"], + "computed-property-spacing": [2, "never"], + "consistent-this": [2, "self"], + "func-names": 2, + "func-style": [2, "declaration"], + "indent": [2, 4, {"SwitchCase": 0}], + "jsx-quotes": [2, "prefer-single"], + "key-spacing": [2, {"beforeColon": false, "afterColon": true}], + "linebreak-style": 2, + "lines-around-comment": [2, { "beforeBlockComment": true, "beforeLineComment": true, "allowBlockStart": true, "allowBlockEnd": true }], + "new-cap": 2, + "new-parens": 2, + "no-lonely-if": 2, + "no-mixed-spaces-and-tabs": 2, + "no-multiple-empty-lines": [2, {"max": 1}], + "no-negated-condition": 2, + "no-nested-ternary": 2, + "no-spaced-func": 2, + "no-ternary": 0, + "no-trailing-spaces": [2, { "skipBlankLines": false }], + "no-underscore-dangle": 2, + "no-unneeded-ternary": [2, {"defaultAssignment": false}], + "object-curly-spacing": [2, "never"], + "one-var": [2, "never"], + "operator-linebreak": [2, "after"], + "padded-blocks": [2, "never"], + "quote-props": [2, "as-needed"], + "quotes": [2, "single", "avoid-escape"], + "semi": [2, "always"], + "semi-spacing": [2, {"before": false, "after": true}], + "keyword-spacing": [2, {"before": true, "after": true, "overrides": {}}], + "space-before-blocks": [2, "always"], + "space-before-function-paren": [2, "never"], + "space-in-parens": [2, "never"], + "space-infix-ops": 2, + "space-unary-ops": [2, { "words": true, "nonwords": false }], + "wrap-regex": 2, + + // ES6 stuff + "arrow-parens": [2, "always"], + "arrow-body-style": 0, + "arrow-spacing": [2, { "before": true, "after": true }], + "constructor-super": 2, + "generator-star-spacing": [2, {"before": false, "after": true}], + "no-class-assign": 2, + "no-const-assign": 2, + "no-dupe-class-members": 2, + "no-this-before-super": 2, + "no-var": 0, + "object-shorthand": [1, "always"], + "prefer-arrow-callback": 1, + "prefer-const": 1, + "prefer-spread": 2, + "prefer-reflect": 1, + "prefer-template": 0, + "require-yield": 2, + + // React Specific + "react/display-name": [2, { "ignoreTranspilerName": false }], + "react/no-deprecated": 2, + "react/no-is-mounted": 2, + "react/no-string-refs": 1, + "react/jsx-pascal-case": 2, + "react/jsx-indent": [1, 4], + "react/jsx-equals-spacing": [2, "never"], + "react/jsx-handler-names": 0, + "react/jsx-boolean-value": [2, "always"], + "react/jsx-closing-bracket-location": [2, { "location": "tag-aligned" }], + "react/jsx-curly-spacing": [2, "never"], + "react/jsx-indent-props": [2, 4], + "react/jsx-key": 2, + "react/jsx-max-props-per-line": [2, { "maximum": 1 }], + "react/jsx-no-bind": 1, + "react/jsx-space-before-closing": [2, "never"], + "react/jsx-no-duplicate-props": [2, { "ignoreCase": false }], + "react/jsx-no-literals": 1, + "react/jsx-no-undef": 2, + "react/jsx-uses-react": 2, + "react/jsx-uses-vars": 2, + "react/no-danger": 0, + "react/no-did-mount-set-state": 2, + "react/no-did-update-set-state": 2, + "react/no-direct-mutation-state": 2, + "react/no-multi-comp": [2, { "ignoreStateless": true }], + "react/no-set-state": 0, + "react/no-unknown-property": 2, + "react/prefer-es6-class": 2, + "react/prop-types": 2, + "react/self-closing-comp": 2, + "react/sort-comp": 0, + "react/wrap-multilines": 2 + } +} diff --git a/web/react/components/access_history_modal.jsx b/web/react/components/access_history_modal.jsx index af4d3fb0f..cd1db32ec 100644 --- a/web/react/components/access_history_modal.jsx +++ b/web/react/components/access_history_modal.jsx @@ -68,7 +68,7 @@ class AccessHistoryModal extends React.Component { render() { var content; if (this.state.audits.loading) { - content = (<LoadingScreen />); + content = (<LoadingScreen/>); } else { content = ( <AuditTable diff --git a/web/react/components/activity_log_modal.jsx b/web/react/components/activity_log_modal.jsx index f8a2af571..1a0c9c6d5 100644 --- a/web/react/components/activity_log_modal.jsx +++ b/web/react/components/activity_log_modal.jsx @@ -199,7 +199,7 @@ export default class ActivityLogModal extends React.Component { className='activity-log__table' > <div className='activity-log__report'> - <div className='report__platform'><i className={devicePicture} />{devicePlatform}</div> + <div className='report__platform'><i className={devicePicture}/>{devicePlatform}</div> <div className='report__info'> <div> <FormattedMessage @@ -231,7 +231,7 @@ export default class ActivityLogModal extends React.Component { let content; if (this.state.sessions.loading) { - content = <LoadingScreen />; + content = <LoadingScreen/>; } else { content = <form role='form'>{activityList}</form>; } diff --git a/web/react/components/admin_console/admin_controller.jsx b/web/react/components/admin_console/admin_controller.jsx index 695e2083a..de0b085bc 100644 --- a/web/react/components/admin_console/admin_controller.jsx +++ b/web/react/components/admin_console/admin_controller.jsx @@ -130,47 +130,47 @@ export default class AdminController extends React.Component { } render() { - var tab = <LoadingScreen />; + var tab = <LoadingScreen/>; if (this.state.config != null) { if (this.state.selected === 'email_settings') { - tab = <EmailSettingsTab config={this.state.config} />; + tab = <EmailSettingsTab config={this.state.config}/>; } else if (this.state.selected === 'log_settings') { - tab = <LogSettingsTab config={this.state.config} />; + tab = <LogSettingsTab config={this.state.config}/>; } else if (this.state.selected === 'logs') { - tab = <LogsTab />; + tab = <LogsTab/>; } else if (this.state.selected === 'audits') { - tab = <AuditsTab />; + tab = <AuditsTab/>; } else if (this.state.selected === 'image_settings') { - tab = <FileSettingsTab config={this.state.config} />; + tab = <FileSettingsTab config={this.state.config}/>; } else if (this.state.selected === 'privacy_settings') { - tab = <PrivacySettingsTab config={this.state.config} />; + tab = <PrivacySettingsTab config={this.state.config}/>; } else if (this.state.selected === 'rate_settings') { - tab = <RateSettingsTab config={this.state.config} />; + tab = <RateSettingsTab config={this.state.config}/>; } else if (this.state.selected === 'gitlab_settings') { - tab = <GitLabSettingsTab config={this.state.config} />; + tab = <GitLabSettingsTab config={this.state.config}/>; } else if (this.state.selected === 'sql_settings') { - tab = <SqlSettingsTab config={this.state.config} />; + tab = <SqlSettingsTab config={this.state.config}/>; } else if (this.state.selected === 'team_settings') { - tab = <TeamSettingsTab config={this.state.config} />; + tab = <TeamSettingsTab config={this.state.config}/>; } else if (this.state.selected === 'service_settings') { - tab = <ServiceSettingsTab config={this.state.config} />; + tab = <ServiceSettingsTab config={this.state.config}/>; } else if (this.state.selected === 'legal_and_support_settings') { - tab = <LegalAndSupportSettingsTab config={this.state.config} />; + tab = <LegalAndSupportSettingsTab config={this.state.config}/>; } else if (this.state.selected === 'ldap_settings') { - tab = <LdapSettingsTab config={this.state.config} />; + tab = <LdapSettingsTab config={this.state.config}/>; } else if (this.state.selected === 'license') { - tab = <LicenseSettingsTab config={this.state.config} />; + tab = <LicenseSettingsTab config={this.state.config}/>; } else if (this.state.selected === 'team_users') { if (this.state.teams) { - tab = <TeamUsersTab team={this.state.teams[this.state.selectedTeam]} />; + tab = <TeamUsersTab team={this.state.teams[this.state.selectedTeam]}/>; } } else if (this.state.selected === 'team_analytics') { if (this.state.teams) { - tab = <TeamAnalyticsTab team={this.state.teams[this.state.selectedTeam]} />; + tab = <TeamAnalyticsTab team={this.state.teams[this.state.selectedTeam]}/>; } } else if (this.state.selected === 'system_analytics') { - tab = <SystemAnalyticsTab />; + tab = <SystemAnalyticsTab/>; } } diff --git a/web/react/components/admin_console/admin_sidebar.jsx b/web/react/components/admin_console/admin_sidebar.jsx index 795b19eec..6621e5743 100644 --- a/web/react/components/admin_console/admin_sidebar.jsx +++ b/web/react/components/admin_console/admin_sidebar.jsx @@ -236,7 +236,7 @@ export default class AdminSidebar extends React.Component { return ( <div className='sidebar--left sidebar--collapsable'> <div> - <AdminSidebarHeader /> + <AdminSidebarHeader/> <div className='nav-pills__container'> <ul className='nav nav-pills nav-stacked'> <li> diff --git a/web/react/components/admin_console/admin_sidebar_header.jsx b/web/react/components/admin_console/admin_sidebar_header.jsx index db499265e..8c9f74934 100644 --- a/web/react/components/admin_console/admin_sidebar_header.jsx +++ b/web/react/components/admin_console/admin_sidebar_header.jsx @@ -61,7 +61,7 @@ export default class SidebarHeader extends React.Component { </div> </div> </a> - <AdminNavbarDropdown ref='dropdown' /> + <AdminNavbarDropdown ref='dropdown'/> </div> ); } diff --git a/web/react/components/admin_console/audits.jsx b/web/react/components/admin_console/audits.jsx index 173e63b45..c519e0a23 100644 --- a/web/react/components/admin_console/audits.jsx +++ b/web/react/components/admin_console/audits.jsx @@ -54,7 +54,7 @@ export default class Audits extends React.Component { } if (this.state.audits === null) { - content = <LoadingScreen />; + content = <LoadingScreen/>; } else { content = ( <div style={{margin: '10px'}}> diff --git a/web/react/components/admin_console/logs.jsx b/web/react/components/admin_console/logs.jsx index 71a4a5d8c..8457999f5 100644 --- a/web/react/components/admin_console/logs.jsx +++ b/web/react/components/admin_console/logs.jsx @@ -47,7 +47,7 @@ export default class Logs extends React.Component { var content = null; if (this.state.logs === null) { - content = <LoadingScreen />; + content = <LoadingScreen/>; } else { content = []; @@ -61,7 +61,7 @@ export default class Logs extends React.Component { style.color = 'red'; } - content.push(<br key={'br_' + i} />); + content.push(<br key={'br_' + i}/>); content.push( <span key={'log_' + i} diff --git a/web/react/components/admin_console/statistic_count.jsx b/web/react/components/admin_console/statistic_count.jsx index 57af0ed1b..118a0ad31 100644 --- a/web/react/components/admin_console/statistic_count.jsx +++ b/web/react/components/admin_console/statistic_count.jsx @@ -4,10 +4,6 @@ import {FormattedMessage} from 'mm-intl'; export default class StatisticCount extends React.Component { - constructor(props) { - super(props); - } - render() { let loading = ( <FormattedMessage diff --git a/web/react/components/admin_console/team_users.jsx b/web/react/components/admin_console/team_users.jsx index 1177c9c56..256576f9b 100644 --- a/web/react/components/admin_console/team_users.jsx +++ b/web/react/components/admin_console/team_users.jsx @@ -112,9 +112,6 @@ export default class UserList extends React.Component { this.getTeamProfiles(newProps.team.id); } - componentWillUnmount() { - } - render() { var serverError = ''; if (this.state.serverError) { @@ -134,7 +131,7 @@ export default class UserList extends React.Component { /> </h3> {serverError} - <LoadingScreen /> + <LoadingScreen/> </div> ); } diff --git a/web/react/components/audit_table.jsx b/web/react/components/audit_table.jsx index 31d04f19b..47eee6d3f 100644 --- a/web/react/components/audit_table.jsx +++ b/web/react/components/audit_table.jsx @@ -207,9 +207,6 @@ const holders = defineMessages({ }); class AuditTable extends React.Component { - constructor(props) { - super(props); - } render() { var accessList = []; diff --git a/web/react/components/authorize.jsx b/web/react/components/authorize.jsx index 4a4985268..35ad7ac10 100644 --- a/web/react/components/authorize.jsx +++ b/web/react/components/authorize.jsx @@ -27,7 +27,9 @@ export default class Authorize extends React.Component { window.location.replace(data.redirect); } }, - () => {} + () => { + //Do nothing on error + } ); } handleDeny() { diff --git a/web/react/components/center_panel.jsx b/web/react/components/center_panel.jsx index 7d2be04d6..6cb749075 100644 --- a/web/react/components/center_panel.jsx +++ b/web/react/components/center_panel.jsx @@ -55,10 +55,10 @@ export default class CenterPanel extends React.Component { let postsContainer; let createPost; if (this.state.showTutorialScreens) { - postsContainer = <TutorialIntroScreens />; + postsContainer = <TutorialIntroScreens/>; createPost = null; } else if (this.state.showPostFocus) { - postsContainer = <PostFocusView />; + postsContainer = <PostFocusView/>; handleClick = function clickHandler(e) { e.preventDefault(); @@ -80,13 +80,13 @@ export default class CenterPanel extends React.Component { </div> ); } else { - postsContainer = <PostsViewContainer />; + postsContainer = <PostsViewContainer/>; createPost = ( <div className='post-create__container' id='post-create' > - <CreatePost /> + <CreatePost/> </div> ); } @@ -108,7 +108,7 @@ export default class CenterPanel extends React.Component { className='app__content' > <div id='channel-header'> - <ChannelHeader /> + <ChannelHeader/> </div> {postsContainer} {createPost} diff --git a/web/react/components/channel_header.jsx b/web/react/components/channel_header.jsx index a827cbcc6..b5eb546cf 100644 --- a/web/react/components/channel_header.jsx +++ b/web/react/components/channel_header.jsx @@ -408,7 +408,7 @@ export default class ChannelHeader extends React.Component { aria-expanded='true' > <strong className='heading'>{channelTitle} </strong> - <span className='glyphicon glyphicon-chevron-down header-dropdown__icon' /> + <span className='glyphicon glyphicon-chevron-down header-dropdown__icon'/> </a> <ul className='dropdown-menu' @@ -439,7 +439,7 @@ export default class ChannelHeader extends React.Component { channelId={channel.id} /> </th> - <th className='search-bar__container'><NavbarSearchBox /></th> + <th className='search-bar__container'><NavbarSearchBox/></th> <th> <div className='dropdown channel-header__links'> <OverlayTrigger diff --git a/web/react/components/channel_invite_modal.jsx b/web/react/components/channel_invite_modal.jsx index 7dc2c0a11..c9fe871d0 100644 --- a/web/react/components/channel_invite_modal.jsx +++ b/web/react/components/channel_invite_modal.jsx @@ -138,7 +138,7 @@ export default class ChannelInviteModal extends React.Component { var content; if (this.state.loading) { - content = (<LoadingScreen />); + content = (<LoadingScreen/>); } else { content = ( <MemberList diff --git a/web/react/components/channel_members_modal.jsx b/web/react/components/channel_members_modal.jsx index f3cbef719..fd452f206 100644 --- a/web/react/components/channel_members_modal.jsx +++ b/web/react/components/channel_members_modal.jsx @@ -172,7 +172,7 @@ export default class ChannelMembersModal extends React.Component { let content; if (this.state.loading) { - content = (<LoadingScreen />); + content = (<LoadingScreen/>); } else { content = ( <div className='team-member-list'> diff --git a/web/react/components/channel_notifications_modal.jsx b/web/react/components/channel_notifications_modal.jsx index 59ef8966e..6591de687 100644 --- a/web/react/components/channel_notifications_modal.jsx +++ b/web/react/components/channel_notifications_modal.jsx @@ -168,7 +168,7 @@ export default class ChannelNotificationsModal extends React.Component { checked={notifyActive[1]} onChange={this.handleUpdateNotifyLevel.bind(this, 'all')} /> - <FormattedMessage id='channel_notifications.allActivity' /> + <FormattedMessage id='channel_notifications.allActivity'/> </label> <br/> </div> @@ -179,7 +179,7 @@ export default class ChannelNotificationsModal extends React.Component { checked={notifyActive[2]} onChange={this.handleUpdateNotifyLevel.bind(this, 'mention')} /> - <FormattedMessage id='channel_notifications.onlyMentions' /> + <FormattedMessage id='channel_notifications.onlyMentions'/> </label> <br/> </div> @@ -190,7 +190,7 @@ export default class ChannelNotificationsModal extends React.Component { checked={notifyActive[3]} onChange={this.handleUpdateNotifyLevel.bind(this, 'none')} /> - <FormattedMessage id='channel_notifications.never' /> + <FormattedMessage id='channel_notifications.never'/> </label> </div> </div> @@ -234,11 +234,11 @@ export default class ChannelNotificationsModal extends React.Component { /> ); } else if (this.state.notifyLevel === 'mention') { - describe = (<FormattedMessage id='channel_notifications.onlyMentions' />); + describe = (<FormattedMessage id='channel_notifications.onlyMentions'/>); } else if (this.state.notifyLevel === 'all') { - describe = (<FormattedMessage id='channel_notifications.allActivity' />); + describe = (<FormattedMessage id='channel_notifications.allActivity'/>); } else { - describe = (<FormattedMessage id='channel_notifications.never' />); + describe = (<FormattedMessage id='channel_notifications.never'/>); } handleUpdateSection = function updateSection(e) { @@ -311,7 +311,7 @@ export default class ChannelNotificationsModal extends React.Component { defaultMessage='For all unread messages' /> </label> - <br /> + <br/> </div> <div className='radio'> <label> @@ -320,9 +320,9 @@ export default class ChannelNotificationsModal extends React.Component { checked={this.state.markUnreadLevel === 'mention'} onChange={this.handleUpdateMarkUnreadLevel.bind(this, 'mention')} /> - <FormattedMessage id='channel_notifications.onlyMentions' /> + <FormattedMessage id='channel_notifications.onlyMentions'/> </label> - <br /> + <br/> </div> </div> )]; @@ -363,7 +363,7 @@ export default class ChannelNotificationsModal extends React.Component { /> ); } else { - describe = (<FormattedMessage id='channel_notifications.onlyMentions' />); + describe = (<FormattedMessage id='channel_notifications.onlyMentions'/>); } const handleUpdateSection = function handleUpdateSection(e) { diff --git a/web/react/components/channel_view.jsx b/web/react/components/channel_view.jsx index 7cbb638a0..9c4131292 100644 --- a/web/react/components/channel_view.jsx +++ b/web/react/components/channel_view.jsx @@ -7,9 +7,6 @@ import SidebarRight from '../components/sidebar_right.jsx'; import SidebarRightMenu from '../components/sidebar_right_menu.jsx'; export default class ChannelView extends React.Component { - constructor(props) { - super(props); - } render() { return ( <div className='container-fluid'> @@ -31,7 +28,7 @@ export default class ChannelView extends React.Component { > <Sidebar/> </div> - <CenterPanel /> + <CenterPanel/> </div> ); } diff --git a/web/react/components/create_post.jsx b/web/react/components/create_post.jsx index 48b6594a1..9d7a19554 100644 --- a/web/react/components/create_post.jsx +++ b/web/react/components/create_post.jsx @@ -477,7 +477,7 @@ class CreatePost extends React.Component { className='send-button theme' onClick={this.handleSubmit} > - <i className='fa fa-paper-plane' /> + <i className='fa fa-paper-plane'/> </a> {tutorialTip} </div> diff --git a/web/react/components/delete_post_modal.jsx b/web/react/components/delete_post_modal.jsx index 95b2e58a8..773d0b420 100644 --- a/web/react/components/delete_post_modal.jsx +++ b/web/react/components/delete_post_modal.jsx @@ -178,8 +178,8 @@ export default class DeletePostModal extends React.Component { term: (postTerm) }} /> - <br /> - <br /> + <br/> + <br/> {commentWarning} {error} </Modal.Body> diff --git a/web/react/components/edit_post_modal.jsx b/web/react/components/edit_post_modal.jsx index e54b7d9b8..380ca7bde 100644 --- a/web/react/components/edit_post_modal.jsx +++ b/web/react/components/edit_post_modal.jsx @@ -135,9 +135,9 @@ class EditPostModal extends React.Component { PreferenceStore.removeChangeListener(this.onPreferenceChange); } render() { - var error = (<div className='form-group'><br /></div>); + var error = (<div className='form-group'><br/></div>); if (this.state.error) { - error = (<div className='form-group has-error'><br /><label className='control-label'>{this.state.error}</label></div>); + error = (<div className='form-group has-error'><br/><label className='control-label'>{this.state.error}</label></div>); } return ( diff --git a/web/react/components/email_verify.jsx b/web/react/components/email_verify.jsx index ef1a62130..702a20eba 100644 --- a/web/react/components/email_verify.jsx +++ b/web/react/components/email_verify.jsx @@ -70,7 +70,7 @@ export default class EmailVerify extends React.Component { ); if (this.props.resendSuccess) { resendConfirm = ( - <div><br /><p className='alert alert-success'><i className='fa fa-check'></i> + <div><br/><p className='alert alert-success'><i className='fa fa-check'></i> <FormattedMessage id='email_verify.sent' defaultMessage=' Verification email sent.' diff --git a/web/react/components/file_attachment.jsx b/web/react/components/file_attachment.jsx index 776394828..810f90b13 100644 --- a/web/react/components/file_attachment.jsx +++ b/web/react/components/file_attachment.jsx @@ -245,7 +245,9 @@ class FileAttachment extends React.Component { this.setState({fileSize: parseInt(data.size, 10), mime: data.mime}); } }.bind(this), - function error() {} + function error() { + // Do nothing + } ); } else { fileSizeString = utils.fileSizeToString(this.state.fileSize); @@ -312,4 +314,4 @@ FileAttachment.propTypes = { handleImageClick: React.PropTypes.func }; -export default injectIntl(FileAttachment);
\ No newline at end of file +export default injectIntl(FileAttachment); diff --git a/web/react/components/file_info_preview.jsx b/web/react/components/file_info_preview.jsx index 1dac140c9..30c3fc97f 100644 --- a/web/react/components/file_info_preview.jsx +++ b/web/react/components/file_info_preview.jsx @@ -37,7 +37,7 @@ export default function FileInfoPreview({filename, fileUrl, fileInfo, formatMess href={fileUrl} target='_blank' > - <span className='file-details__preview-helper' /> + <span className='file-details__preview-helper'/> <img src={Utils.getPreviewImagePath(filename)}/> </a> <div className='file-details'> @@ -47,3 +47,10 @@ export default function FileInfoPreview({filename, fileUrl, fileInfo, formatMess </div> ); } + +FileInfoPreview.propTypes = { + filename: React.PropTypes.string.isRequired, + fileUrl: React.PropTypes.string.isRequired, + fileInfo: React.PropTypes.object.isRequired, + formatMessage: React.PropTypes.func.isRequired +}; diff --git a/web/react/components/file_upload.jsx b/web/react/components/file_upload.jsx index 0454fe510..cb8ede51b 100644 --- a/web/react/components/file_upload.jsx +++ b/web/react/components/file_upload.jsx @@ -305,7 +305,7 @@ class FileUpload extends React.Component { className='btn btn-file' > <span> - <i className='glyphicon glyphicon-paperclip' /> + <i className='glyphicon glyphicon-paperclip'/> </span> <input ref='fileInput' diff --git a/web/react/components/get_link_modal.jsx b/web/react/components/get_link_modal.jsx index de3387a35..6a5c3b588 100644 --- a/web/react/components/get_link_modal.jsx +++ b/web/react/components/get_link_modal.jsx @@ -48,8 +48,8 @@ export default class GetLinkModal extends React.Component { helpText = ( <p> {this.props.helpText} - <br /> - <br /> + <br/> + <br/> </p> ); } diff --git a/web/react/components/invite_member_modal.jsx b/web/react/components/invite_member_modal.jsx index f2a0a7565..0c0330c40 100644 --- a/web/react/components/invite_member_modal.jsx +++ b/web/react/components/invite_member_modal.jsx @@ -376,7 +376,7 @@ class InviteMemberModal extends React.Component { ); if (this.state.isSendingEmails) { sendButtonLabel = ( - <span><i className='fa fa-spinner fa-spin' /> + <span><i className='fa fa-spinner fa-spin'/> <FormattedMessage id='invite_member.sending' defaultMessage=' Sending' diff --git a/web/react/components/login.jsx b/web/react/components/login.jsx index 0123a0f3c..380790b8f 100644 --- a/web/react/components/login.jsx +++ b/web/react/components/login.jsx @@ -28,7 +28,7 @@ export default class Login extends React.Component { key='gitlab' href={'/' + teamName + '/login/gitlab'} > - <span className='icon' /> + <span className='icon'/> <span> <FormattedMessage id='login.gitlab' @@ -46,7 +46,7 @@ export default class Login extends React.Component { key='google' href={'/' + teamName + '/login/google'} > - <span className='icon' /> + <span className='icon'/> <span> <FormattedMessage id='login.google' @@ -80,7 +80,7 @@ export default class Login extends React.Component { if (msg != null) { extraBox = ( <div className='alert alert-success'> - <i className='fa fa-check' /> + <i className='fa fa-check'/> {msg} </div> ); diff --git a/web/react/components/member_list.jsx b/web/react/components/member_list.jsx index 8c6dc4209..e6737087b 100644 --- a/web/react/components/member_list.jsx +++ b/web/react/components/member_list.jsx @@ -4,10 +4,6 @@ import MemberListItem from './member_list_item.jsx'; export default class MemberList extends React.Component { - constructor(props) { - super(props); - } - render() { var members = []; diff --git a/web/react/components/member_list_item.jsx b/web/react/components/member_list_item.jsx index 41ea58eeb..88b98738d 100644 --- a/web/react/components/member_list_item.jsx +++ b/web/react/components/member_list_item.jsx @@ -112,7 +112,7 @@ export default class MemberListItem extends React.Component { </div> ); } else { - invite = (<div className='member-role text-capitalize'><span className='fa fa-pencil hidden'></span>{member.roles || <FormattedMessage id='member_item.member' />}</div>); + invite = (<div className='member-role text-capitalize'><span className='fa fa-pencil hidden'></span>{member.roles || <FormattedMessage id='member_item.member'/>}</div>); } return ( diff --git a/web/react/components/more_channels.jsx b/web/react/components/more_channels.jsx index d800f93d8..db61e5f49 100644 --- a/web/react/components/more_channels.jsx +++ b/web/react/components/more_channels.jsx @@ -82,7 +82,7 @@ export default class MoreChannels extends React.Component { if (this.state.channels != null) { var channels = this.state.channels; if (channels.loading) { - moreChannels = <LoadingScreen />; + moreChannels = <LoadingScreen/>; } else if (channels.length) { moreChannels = ( <table className='more-table table'> diff --git a/web/react/components/navbar.jsx b/web/react/components/navbar.jsx index 835298635..a06fb449b 100644 --- a/web/react/components/navbar.jsx +++ b/web/react/components/navbar.jsx @@ -380,7 +380,7 @@ export default class Navbar extends React.Component { <span className='icon-bar'></span> <span className='icon-bar'></span> <span className='icon-bar'></span> - <NotifyCounts /> + <NotifyCounts/> </button> ); @@ -393,7 +393,7 @@ export default class Navbar extends React.Component { data-target='#sidebar-nav' onClick={this.toggleRightSidebar} > - <span dangerouslySetInnerHTML={{__html: Constants.MENU_ICON}} /> + <span dangerouslySetInnerHTML={{__html: Constants.MENU_ICON}}/> </button> ); } @@ -502,7 +502,7 @@ export default class Navbar extends React.Component { className='navbar-toggle pull-right' onClick={this.showSearch} > - <span className='glyphicon glyphicon-search icon--white' /> + <span className='glyphicon glyphicon-search icon--white'/> </button> ); diff --git a/web/react/components/post_attachment_list.jsx b/web/react/components/post_attachment_list.jsx index 9c6700e2d..ae03e15d3 100644 --- a/web/react/components/post_attachment_list.jsx +++ b/web/react/components/post_attachment_list.jsx @@ -4,10 +4,6 @@ import PostAttachment from './post_attachment.jsx'; export default class PostAttachmentList extends React.Component { - constructor(props) { - super(props); - } - render() { let content = []; this.props.attachments.forEach((attachment, i) => { diff --git a/web/react/components/post_attachment_oembed.jsx b/web/react/components/post_attachment_oembed.jsx index 4b12ee95e..d76e5f02e 100644 --- a/web/react/components/post_attachment_oembed.jsx +++ b/web/react/components/post_attachment_oembed.jsx @@ -46,6 +46,7 @@ export default class PostAttachmentOEmbed extends React.Component { } }); } + return null; } render() { diff --git a/web/react/components/post_body_additional_content.jsx b/web/react/components/post_body_additional_content.jsx index 7e6f3f037..4871eea4f 100644 --- a/web/react/components/post_body_additional_content.jsx +++ b/web/react/components/post_body_additional_content.jsx @@ -52,7 +52,7 @@ export default class PostBodyAdditionalContent extends React.Component { render() { let content = []; - if (Boolean(this.props.post.type)) { + if (this.props.post.type) { const component = this.getComponent(); if (component) { diff --git a/web/react/components/post_header.jsx b/web/react/components/post_header.jsx index 037b48096..c52391daa 100644 --- a/web/react/components/post_header.jsx +++ b/web/react/components/post_header.jsx @@ -15,7 +15,7 @@ export default class PostHeader extends React.Component { render() { var post = this.props.post; - let userProfile = <UserProfile userId={post.user_id} />; + let userProfile = <UserProfile userId={post.user_id}/>; let botIndicator; if (post.props && post.props.from_webhook) { diff --git a/web/react/components/posts_view.jsx b/web/react/components/posts_view.jsx index 19ab7d5aa..15810d9cf 100644 --- a/web/react/components/posts_view.jsx +++ b/web/react/components/posts_view.jsx @@ -252,7 +252,7 @@ export default class PostsView extends React.Component { key={currentPostDay.toDateString()} className='date-separator' > - <hr className='separator__hr' /> + <hr className='separator__hr'/> <div className='separator__text'> <FormattedDate value={currentPostDay} @@ -455,7 +455,7 @@ export default class PostsView extends React.Component { href='#' onClick={this.loadMorePostsBottom} > - <FormattedMessage id='posts_view.loadMore' /> + <FormattedMessage id='posts_view.loadMore'/> </a> ); } else { @@ -528,11 +528,11 @@ PostsView.propTypes = { function FloatingTimestamp({isScrolling, post}) { // only show on mobile if ($(window).width() > 768) { - return <noscript />; + return <noscript/>; } if (!post) { - return <noscript />; + return <noscript/>; } const dateString = ( @@ -557,10 +557,15 @@ function FloatingTimestamp({isScrolling, post}) { ); } +FloatingTimestamp.propTypes = { + isScrolling: React.PropTypes.bool.isRequired, + post: React.PropTypes.object +}; + function ScrollToBottomArrows({isScrolling, atBottom, onClick}) { // only show on mobile if ($(window).width() > 768) { - return <noscript />; + return <noscript/>; } let className = 'post-list__arrows'; @@ -573,7 +578,13 @@ function ScrollToBottomArrows({isScrolling, atBottom, onClick}) { className={className} onClick={onClick} > - <span dangerouslySetInnerHTML={{__html: Constants.SCROLL_BOTTOM_ICON}} /> + <span dangerouslySetInnerHTML={{__html: Constants.SCROLL_BOTTOM_ICON}}/> </div> ); } + +ScrollToBottomArrows.propTypes = { + isScrolling: React.PropTypes.bool.isRequired, + atBottom: React.PropTypes.bool.isRequired, + onClick: React.PropTypes.func.isRequired +}; diff --git a/web/react/components/posts_view_container.jsx b/web/react/components/posts_view_container.jsx index 631bd1872..972342021 100644 --- a/web/react/components/posts_view_container.jsx +++ b/web/react/components/posts_view_container.jsx @@ -173,7 +173,9 @@ export default class PostsViewContainer extends React.Component { scrollPostId={this.state.scrollPost} postViewScrolled={this.handlePostsViewScroll} loadMorePostsTopClicked={this.loadMorePostsTop} - loadMorePostsBottomClicked={() => {}} + loadMorePostsBottomClicked={() => { + // Do Nothing + }} showMoreMessagesTop={!this.state.atTop[this.state.currentChannelIndex]} showMoreMessagesBottom={false} introText={channel ? createChannelIntroMessage(channel) : null} diff --git a/web/react/components/rhs_comment.jsx b/web/react/components/rhs_comment.jsx index 201a4c569..2ebca9b8d 100644 --- a/web/react/components/rhs_comment.jsx +++ b/web/react/components/rhs_comment.jsx @@ -246,7 +246,7 @@ class RhsComment extends React.Component { <div> <ul className='post__header'> <li className='col__name'> - <strong><UserProfile userId={post.user_id} /></strong> + <strong><UserProfile userId={post.user_id}/></strong> </li> <li className='col'> <time className='post__time'> diff --git a/web/react/components/rhs_root_post.jsx b/web/react/components/rhs_root_post.jsx index adf66da85..32946ef23 100644 --- a/web/react/components/rhs_root_post.jsx +++ b/web/react/components/rhs_root_post.jsx @@ -185,7 +185,7 @@ export default class RhsRootPost extends React.Component { ); } - let userProfile = <UserProfile userId={post.user_id} />; + let userProfile = <UserProfile userId={post.user_id}/>; let botIndicator; if (post.props && post.props.from_webhook) { diff --git a/web/react/components/rhs_thread.jsx b/web/react/components/rhs_thread.jsx index 945b09e37..667030b3a 100644 --- a/web/react/components/rhs_thread.jsx +++ b/web/react/components/rhs_thread.jsx @@ -196,12 +196,12 @@ export default class RhsThread extends React.Component { var currentId = UserStore.getCurrentId(); var searchForm; if (currentId != null) { - searchForm = <SearchBox />; + searchForm = <SearchBox/>; } return ( <div className='post-right__container'> - <FileUploadOverlay overlayType='right' /> + <FileUploadOverlay overlayType='right'/> <div className='search-bar__container sidebar--right__search-header'>{searchForm}</div> <div className='sidebar-right__body'> <RhsHeaderPost diff --git a/web/react/components/search_bar.jsx b/web/react/components/search_bar.jsx index f7cb1b8f2..1cdd09cc8 100644 --- a/web/react/components/search_bar.jsx +++ b/web/react/components/search_bar.jsx @@ -169,7 +169,7 @@ class SearchBar extends React.Component { style={{overflow: 'visible'}} autoComplete='off' > - <span className='glyphicon glyphicon-search sidebar__search-icon' /> + <span className='glyphicon glyphicon-search sidebar__search-icon'/> <SuggestionBox ref='search' className='form-control search-bar' diff --git a/web/react/components/search_results.jsx b/web/react/components/search_results.jsx index 12c066734..d10c5be27 100644 --- a/web/react/components/search_results.jsx +++ b/web/react/components/search_results.jsx @@ -97,7 +97,7 @@ export default class SearchResults extends React.Component { var currentId = UserStore.getCurrentId(); var searchForm = null; if (currentId) { - searchForm = <SearchBox />; + searchForm = <SearchBox/>; } var noResults = (!results || !results.order || !results.order.length); var searchTerm = SearchStore.getSearchTerm(); @@ -151,7 +151,7 @@ export default class SearchResults extends React.Component { <div className='sidebar--right__content'> <div className='search-bar__container sidebar--right__search-header'>{searchForm}</div> <div className='sidebar-right__body'> - <SearchResultsHeader isMentionSearch={this.props.isMentionSearch} /> + <SearchResultsHeader isMentionSearch={this.props.isMentionSearch}/> <div id='search-items-container' className='search-items-container' diff --git a/web/react/components/search_results_item.jsx b/web/react/components/search_results_item.jsx index d3533037f..3363c97f7 100644 --- a/web/react/components/search_results_item.jsx +++ b/web/react/components/search_results_item.jsx @@ -60,7 +60,7 @@ export default class SearchResultsItem extends React.Component { return ( <div className='search-item__container'> <div className='date-separator'> - <hr className='separator__hr' /> + <hr className='separator__hr'/> <div className='separator__text'> <FormattedDate value={this.props.post.create_at} @@ -84,7 +84,7 @@ export default class SearchResultsItem extends React.Component { </div> <div> <ul className='post__header'> - <li className='col__name'><strong><UserProfile userId={this.props.post.user_id} /></strong></li> + <li className='col__name'><strong><UserProfile userId={this.props.post.user_id}/></strong></li> <li className='col'> <time className='search-item-time'> <FormattedDate diff --git a/web/react/components/setting_item_max.jsx b/web/react/components/setting_item_max.jsx index ac750614b..70f011d26 100644 --- a/web/react/components/setting_item_max.jsx +++ b/web/react/components/setting_item_max.jsx @@ -61,7 +61,7 @@ export default class SettingItemMax extends React.Component { {extraInfo} </li> <li className='setting-list-item'> - <hr /> + <hr/> {serverError} {clientError} {submit} diff --git a/web/react/components/settings_sidebar.jsx b/web/react/components/settings_sidebar.jsx index 271ea9a41..90c0e8435 100644 --- a/web/react/components/settings_sidebar.jsx +++ b/web/react/components/settings_sidebar.jsx @@ -40,7 +40,7 @@ export default class SettingsSidebar extends React.Component { href='#' onClick={this.handleClick.bind(null, tab)} > - <i className={tab.icon} /> + <i className={tab.icon}/> {tab.uiName} </a> </li> diff --git a/web/react/components/sidebar_right.jsx b/web/react/components/sidebar_right.jsx index ee247265d..b81c0d099 100644 --- a/web/react/components/sidebar_right.jsx +++ b/web/react/components/sidebar_right.jsx @@ -87,6 +87,7 @@ export default class SidebarRight extends React.Component { $('.sidebar__overlay').remove(); }); }, 500);*/ + return null; } componentDidUpdate() { this.doStrangeThings(); @@ -115,7 +116,7 @@ export default class SidebarRight extends React.Component { var content = ''; if (this.state.search_visible) { - content = <SearchResults isMentionSearch={this.state.is_mention_search} />; + content = <SearchResults isMentionSearch={this.state.is_mention_search}/>; } else if (this.state.post_right_visible) { content = ( <RhsThread diff --git a/web/react/components/signup_team.jsx b/web/react/components/signup_team.jsx index 098e9f65a..5e8ae117d 100644 --- a/web/react/components/signup_team.jsx +++ b/web/react/components/signup_team.jsx @@ -130,21 +130,21 @@ export default class TeamSignUp extends React.Component { return ( <div> {teamListing} - <EmailSignUpPage /> + <EmailSignUpPage/> </div> ); } else if (this.state.page === 'gitlab') { return ( <div> {teamListing} - <SSOSignupPage service={Constants.GITLAB_SERVICE} /> + <SSOSignupPage service={Constants.GITLAB_SERVICE}/> </div> ); } else if (this.state.page === 'google') { return ( <div> {teamListing} - <SSOSignupPage service={Constants.GOOGLE_SERVICE} /> + <SSOSignupPage service={Constants.GOOGLE_SERVICE}/> </div> ); } else if (this.state.page === 'none') { @@ -157,6 +157,8 @@ export default class TeamSignUp extends React.Component { </div> ); } + + return null; } } diff --git a/web/react/components/signup_team_confirm.jsx b/web/react/components/signup_team_confirm.jsx index de83285db..290d8e503 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 ( <div className='signup-team__container'> diff --git a/web/react/components/signup_user_complete.jsx b/web/react/components/signup_user_complete.jsx index b770a2a2c..740a7b166 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} > - <span className='icon' /> + <span className='icon'/> <span> <FormattedMessage id='signup_user_completed.gitlab' @@ -272,7 +272,7 @@ class SignupUserComplete extends React.Component { key='google' href={'/' + this.props.teamName + '/signup/google' + window.location.search} > - <span className='icon' /> + <span className='icon'/> <span> <FormattedMessage id='signup_user_completed.google' diff --git a/web/react/components/suggestion/at_mention_provider.jsx b/web/react/components/suggestion/at_mention_provider.jsx index 50231ad15..c4e1314c9 100644 --- a/web/react/components/suggestion/at_mention_provider.jsx +++ b/web/react/components/suggestion/at_mention_provider.jsx @@ -24,7 +24,7 @@ class AtMentionSuggestion extends React.Component { defaultMessage='Notifies everyone in the team' /> ); - icon = <i className='mention-img fa fa-users fa-2x' />; + icon = <i className='mention-img fa fa-users fa-2x'/>; } else if (item.username === 'channel') { username = 'channel'; description = ( @@ -33,7 +33,7 @@ class AtMentionSuggestion extends React.Component { defaultMessage='Notifies everyone in the channel' /> ); - icon = <i className='mention-img fa fa-users fa-2x' />; + icon = <i className='mention-img fa fa-users fa-2x'/>; } 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 57a33c24a..ea9f835eb 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 ( <div> {textbox} - <SuggestionListComponent suggestionId={this.suggestionId} /> + <SuggestionListComponent suggestionId={this.suggestionId}/> </div> ); } diff --git a/web/react/components/team_export_tab.jsx b/web/react/components/team_export_tab.jsx index 8330637d8..12743d9e3 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 = ( <p className='confirm-import alert alert-warning'> - <i className='fa fa-spinner fa-pulse' /> + <i className='fa fa-spinner fa-pulse'/> <FormattedMessage id='team_export_tab.exporting' defaultMessage=' Exporting...' @@ -47,7 +47,7 @@ export default class TeamExportTab extends React.Component { case 'ready': messageSection = ( <p className='confirm-import alert alert-success'> - <i className='fa fa-check' /> + <i className='fa fa-check'/> <FormattedMessage id='team_export_tab.ready' defaultMessage=' Ready for ' @@ -67,7 +67,7 @@ export default class TeamExportTab extends React.Component { case 'failure': messageSection = ( <p className='confirm-import alert alert-warning'> - <i className='fa fa-warning' /> + <i className='fa fa-warning'/> <FormattedMessage id='team_export_tab.unable' defaultMessage=' Unable to export: {error}' diff --git a/web/react/components/team_import_tab.jsx b/web/react/components/team_import_tab.jsx index adf990672..828e9fc4e 100644 --- a/web/react/components/team_import_tab.jsx +++ b/web/react/components/team_import_tab.jsx @@ -79,7 +79,7 @@ class TeamImportTab extends React.Component { case 'done': messageSection = ( <p className='confirm-import alert alert-success'> - <i className='fa fa-check' /> + <i className='fa fa-check'/> <FormattedMessage id='team_import_tab.successful' defaultMessage=' Import successful: ' @@ -99,7 +99,7 @@ class TeamImportTab extends React.Component { case 'fail': messageSection = ( <p className='confirm-import alert alert-warning'> - <i className='fa fa-warning' /> + <i className='fa fa-warning'/> <FormattedMessage id='team_import_tab.failure' defaultMessage=' Import failure: ' diff --git a/web/react/components/team_members_modal.jsx b/web/react/components/team_members_modal.jsx index 92adb6e2a..8ac435742 100644 --- a/web/react/components/team_members_modal.jsx +++ b/web/react/components/team_members_modal.jsx @@ -56,7 +56,7 @@ export default class TeamMembersModal extends React.Component { </Modal.Header> <Modal.Body ref='modalBody'> <div className='team-member-list'> - <MemberListTeam /> + <MemberListTeam/> </div> </Modal.Body> <Modal.Footer> diff --git a/web/react/components/team_settings.jsx b/web/react/components/team_settings.jsx index bbcedb5dd..e3207d573 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 = ( <div> - <ExportTab /> + <ExportTab/> </div> ); break; diff --git a/web/react/components/team_signup_choose_auth.jsx b/web/react/components/team_signup_choose_auth.jsx index 2dc67e92e..8c98c5538 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) } > - <span className='icon' /> + <span className='icon'/> <span> <FormattedMessage id='choose_auth_page.gitlabCreate' @@ -47,7 +47,7 @@ export default class ChooseAuthPage extends React.Component { } } > - <span className='icon' /> + <span className='icon'/> <span> <FormattedMessage id='choose_auth_page.googleCreate' @@ -71,7 +71,7 @@ export default class ChooseAuthPage extends React.Component { }.bind(this) } > - <span className='fa fa-envelope' /> + <span className='fa fa-envelope'/> <span> <FormattedMessage id='choose_auth_page.emailCreate' diff --git a/web/react/components/team_signup_send_invites_page.jsx b/web/react/components/team_signup_send_invites_page.jsx index 343db13e8..55cfe5114 100644 --- a/web/react/components/team_signup_send_invites_page.jsx +++ b/web/react/components/team_signup_send_invites_page.jsx @@ -183,7 +183,7 @@ export default class TeamSignupSendInvitesPage extends React.Component { <FormattedMessage id='team_signup_send_invites.next' defaultMessage='Next' - /><i className='glyphicon glyphicon-chevron-right' /> + /><i className='glyphicon glyphicon-chevron-right'/> </button> </div> </form> diff --git a/web/react/components/team_signup_welcome_page.jsx b/web/react/components/team_signup_welcome_page.jsx index 18951be72..9939c3ffd 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:' /> - <br /> + <br/> <div className='inner__content'> <div className='block--gray'>{this.props.state.team.email}</div> </div> @@ -176,7 +176,7 @@ class TeamSignupWelcomePage extends React.Component { </button> {storageError} </div> - <hr /> + <hr/> <div className={emailDivContainerClass}> <div className={emailDivClass}> <div className='row'> diff --git a/web/react/components/time_since.jsx b/web/react/components/time_since.jsx index 1560d2469..d5891cc57 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} > <time className='post__time'> - <FormattedRelative value={this.props.eventTime} /> + <FormattedRelative value={this.props.eventTime}/> </time> </OverlayTrigger> ); diff --git a/web/react/components/toggle_modal_button.jsx b/web/react/components/toggle_modal_button.jsx index ce8ff3f60..10f9a4736 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 78cfb7b60..2bacdeb28 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 509ac9e4d..f897cdea3 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 07d5230d1..e4f460a6d 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( - <ManageIncomingHooks key='incoming-hook-ui' /> + <ManageIncomingHooks key='incoming-hook-ui'/> ); 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( - <ManageOutgoingHooks key='outgoing-hook-ui' /> + <ManageOutgoingHooks key='outgoing-hook-ui'/> ); 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( - <ManageCommandHooks key='command-hook-ui' /> + <ManageCommandHooks key='command-hook-ui'/> ); commandHooksSection = ( diff --git a/web/react/components/user_settings/user_settings_modal.jsx b/web/react/components/user_settings/user_settings_modal.jsx index 5442f7ac4..80d03d88e 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; + } + } /> </div> </div> diff --git a/web/react/components/user_settings/user_settings_notifications.jsx b/web/react/components/user_settings/user_settings_notifications.jsx index 786e53f10..ee9febb8e 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 90885e495..713fbf80b 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 97671b845..819df76d8 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 bf3c43840..fae846afb 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 5fc2f2851..07ffa0cdf 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 3f4c39934..989936d9e 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} /> - <SelectTeamModal /> + <SelectTeamModal/> </div> </IntlProvider> ); @@ -65,7 +65,7 @@ class Root extends React.Component { global.window.setup_admin_console_page = function setup(props) { ReactDOM.render( - <Root map={props} />, + <Root map={props}/>, document.getElementById('admin_controller') ); }; diff --git a/web/react/pages/authorize.jsx b/web/react/pages/authorize.jsx index 7474332ce..20fea19f0 100644 --- a/web/react/pages/authorize.jsx +++ b/web/react/pages/authorize.jsx @@ -29,6 +29,7 @@ class Root extends React.Component { translations: data, loaded: true }); + return; }, () => { this.setState({ @@ -64,7 +65,7 @@ class Root extends React.Component { global.window.setup_authorize_page = function setup(props) { ReactDOM.render( - <Root map={props} />, + <Root map={props}/>, document.getElementById('authorize') ); }; diff --git a/web/react/pages/channel.jsx b/web/react/pages/channel.jsx index bd7c7c69b..61fa91cf8 100644 --- a/web/react/pages/channel.jsx +++ b/web/react/pages/channel.jsx @@ -68,18 +68,17 @@ class Root extends React.Component { <ChannelLoader/> <ErrorBar/> <ChannelView/> - - <GetPostLinkModal /> - <GetTeamInviteLinkModal /> - <InviteMemberModal /> - <ImportThemeModal /> - <TeamSettingsModal /> - <RenameChannelModal /> - <MoreChannelsModal /> - <EditPostModal /> - <DeletePostModal /> - <RemovedFromChannelModal /> - <RegisterAppModal /> + <GetPostLinkModal/> + <GetTeamInviteLinkModal/> + <InviteMemberModal/> + <ImportThemeModal/> + <TeamSettingsModal/> + <RenameChannelModal/> + <MoreChannelsModal/> + <EditPostModal/> + <DeletePostModal/> + <RemovedFromChannelModal/> + <RegisterAppModal/> </div> </IntlProvider> ); @@ -94,7 +93,7 @@ global.window.setup_channel_page = function setup(props, team, channel) { } ReactDOM.render( - <Root map={props} />, + <Root map={props}/>, document.getElementById('channel_view') ); }; diff --git a/web/react/pages/claim_account.jsx b/web/react/pages/claim_account.jsx index 7c6af73ca..abbf72ea3 100644 --- a/web/react/pages/claim_account.jsx +++ b/web/react/pages/claim_account.jsx @@ -62,7 +62,7 @@ class Root extends React.Component { global.window.setup_claim_account_page = function setup(props) { ReactDOM.render( - <Root map={props} />, + <Root map={props}/>, document.getElementById('claim') ); };
\ No newline at end of file diff --git a/web/react/pages/docs.jsx b/web/react/pages/docs.jsx index 2f5d4db55..2e47e3e6a 100644 --- a/web/react/pages/docs.jsx +++ b/web/react/pages/docs.jsx @@ -48,7 +48,7 @@ class Root extends React.Component { locale={this.props.map.Locale} messages={this.state.translations} > - <Docs site={this.props.map.Site} /> + <Docs site={this.props.map.Site}/> </IntlProvider> ); } @@ -58,7 +58,7 @@ global.window.mm_user = global.window.mm_user || {}; global.window.setup_documentation_page = function setup(props) { ReactDOM.render( - <Root map={props} />, + <Root map={props}/>, document.getElementById('docs') ); }; diff --git a/web/react/pages/find_team.jsx b/web/react/pages/find_team.jsx index ee2cf0de1..93394fcde 100644 --- a/web/react/pages/find_team.jsx +++ b/web/react/pages/find_team.jsx @@ -48,7 +48,7 @@ class Root extends React.Component { locale={this.props.map.Locale} messages={this.state.translations} > - <FindTeam /> + <FindTeam/> </IntlProvider> ); } @@ -56,7 +56,7 @@ class Root extends React.Component { global.window.setup_find_team_page = function setup(props) { ReactDOM.render( - <Root map={props} />, + <Root map={props}/>, document.getElementById('find-team') ); };
\ No newline at end of file diff --git a/web/react/pages/login.jsx b/web/react/pages/login.jsx index 38852ad7c..ec9080945 100644 --- a/web/react/pages/login.jsx +++ b/web/react/pages/login.jsx @@ -60,7 +60,7 @@ class Root extends React.Component { global.window.setup_login_page = function setup(props) { ReactDOM.render( - <Root map={props} />, + <Root map={props}/>, document.getElementById('login') ); };
\ No newline at end of file diff --git a/web/react/pages/password_reset.jsx b/web/react/pages/password_reset.jsx index 23bbf2691..7caff5034 100644 --- a/web/react/pages/password_reset.jsx +++ b/web/react/pages/password_reset.jsx @@ -62,7 +62,7 @@ class Root extends React.Component { global.window.setup_password_reset_page = function setup(props) { ReactDOM.render( - <Root map={props} />, + <Root map={props}/>, document.getElementById('reset') ); }; diff --git a/web/react/pages/signup_team.jsx b/web/react/pages/signup_team.jsx index c80b65580..f276c3ff7 100644 --- a/web/react/pages/signup_team.jsx +++ b/web/react/pages/signup_team.jsx @@ -49,7 +49,7 @@ class Root extends React.Component { locale={this.props.map.Locale} messages={this.state.translations} > - <SignupTeam teams={this.props.teams} /> + <SignupTeam teams={this.props.teams}/> </IntlProvider> ); } diff --git a/web/react/pages/signup_team_complete.jsx b/web/react/pages/signup_team_complete.jsx index 1bee4e598..8c237f698 100644 --- a/web/react/pages/signup_team_complete.jsx +++ b/web/react/pages/signup_team_complete.jsx @@ -60,7 +60,7 @@ class Root extends React.Component { global.window.setup_signup_team_complete_page = function setup(props) { ReactDOM.render( - <Root map={props} />, + <Root map={props}/>, document.getElementById('signup-team-complete') ); };
\ No newline at end of file diff --git a/web/react/pages/signup_team_confirm.jsx b/web/react/pages/signup_team_confirm.jsx index 9a536c92e..13c8f3fd0 100644 --- a/web/react/pages/signup_team_confirm.jsx +++ b/web/react/pages/signup_team_confirm.jsx @@ -58,7 +58,7 @@ class Root extends React.Component { global.window.setup_signup_team_confirm_page = function setup(props) { ReactDOM.render( - <Root map={props} />, + <Root map={props}/>, document.getElementById('signup-team-confirm') ); };
\ No newline at end of file diff --git a/web/react/pages/signup_user_complete.jsx b/web/react/pages/signup_user_complete.jsx index 6c761c1ee..a14f2140b 100644 --- a/web/react/pages/signup_user_complete.jsx +++ b/web/react/pages/signup_user_complete.jsx @@ -63,7 +63,7 @@ class Root extends React.Component { global.window.setup_signup_user_complete_page = function setup(props) { ReactDOM.render( - <Root map={props} />, + <Root map={props}/>, document.getElementById('signup-user-complete') ); };
\ No newline at end of file diff --git a/web/react/pages/verify.jsx b/web/react/pages/verify.jsx index 2fc619e58..6b336daa1 100644 --- a/web/react/pages/verify.jsx +++ b/web/react/pages/verify.jsx @@ -61,7 +61,7 @@ class Root extends React.Component { global.window.setupVerifyPage = function setup(props) { ReactDOM.render( - <Root map={props} />, + <Root map={props}/>, document.getElementById('verify') ); }; diff --git a/web/react/stores/modal_store.jsx b/web/react/stores/modal_store.jsx index 931443f62..5ea38030b 100644 --- a/web/react/stores/modal_store.jsx +++ b/web/react/stores/modal_store.jsx @@ -28,7 +28,7 @@ class ModalStoreClass extends EventEmitter { handleEventPayload(payload) { // toggle event handlers should accept a boolean show/hide value and can accept a map of arguments - const {type, value, ...args} = payload.action; //eslint-disable-line no-redeclare + const {type, value, ...args} = payload.action; //eslint-disable-line no-use-before-define switch (type) { case ActionTypes.TOGGLE_IMPORT_THEME_MODAL: diff --git a/web/react/stores/suggestion_store.jsx b/web/react/stores/suggestion_store.jsx index dd5c107e0..efd2b76ed 100644 --- a/web/react/stores/suggestion_store.jsx +++ b/web/react/stores/suggestion_store.jsx @@ -210,7 +210,7 @@ class SuggestionStore extends EventEmitter { } handleEventPayload(payload) { - const {type, id, ...other} = payload.action; // eslint-disable-line no-redeclare + const {type, id, ...other} = payload.action; // eslint-disable-line no-use-before-define switch (type) { case ActionTypes.SUGGESTION_PRETEXT_CHANGED: diff --git a/web/react/utils/channel_intro_messages.jsx b/web/react/utils/channel_intro_messages.jsx index 1aca0467e..79e58147f 100644 --- a/web/react/utils/channel_intro_messages.jsx +++ b/web/react/utils/channel_intro_messages.jsx @@ -23,6 +23,7 @@ export function createChannelIntroMessage(channel) { } else if (channel.type === 'O' || channel.type === 'P') { return createStandardIntroMessage(channel); } + return null; } export function createDMIntroMessage(channel) { @@ -46,7 +47,7 @@ export function createDMIntroMessage(channel) { </div> <div className='channel-intro-profile'> <strong> - <UserProfile userId={teammate.id} /> + <UserProfile userId={teammate.id}/> </strong> </div> <p className='channel-intro-text'> diff --git a/web/react/utils/client.jsx b/web/react/utils/client.jsx index 992337671..81bdb7293 100644 --- a/web/react/utils/client.jsx +++ b/web/react/utils/client.jsx @@ -1430,7 +1430,7 @@ export function listIncomingHooks(success, error) { export function getAllPreferences(success, error) { $.ajax({ - url: `/api/v1/preferences/`, + url: '/api/v1/preferences/', dataType: 'json', type: 'GET', success, diff --git a/web/react/utils/emoticons.jsx b/web/react/utils/emoticons.jsx index 23a847969..18cce3bde 100644 --- a/web/react/utils/emoticons.jsx +++ b/web/react/utils/emoticons.jsx @@ -157,5 +157,5 @@ export function getImagePathForEmoticon(name) { if (name) { return `/static/images/emoji/${name}.png`; } - return `/static/images/emoji`; + return '/static/images/emoji'; } diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx index 2b946d81f..a4d2515e2 100644 --- a/web/react/utils/utils.jsx +++ b/web/react/utils/utils.jsx @@ -142,6 +142,7 @@ export function getCookie(name) { if (parts.length === 2) { return parts.pop().split(';').shift(); } + return ''; } var requestedNotificationPermission = false; @@ -188,7 +189,10 @@ export function ding() { var audio = new Audio('/static/images/bing.mp3'); audio.play(); canDing = false; - setTimeout(() => canDing = true, 3000); + setTimeout(() => { + canDing = true; + return; + }, 3000); } } |