mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
Fix react warnings and part of backstage (#4706)
This commit is contained in:
@@ -57,15 +57,15 @@ export default class AccessHistoryModal extends React.Component {
|
||||
}
|
||||
|
||||
onAuditChange() {
|
||||
var newState = this.getStateFromStoresForAudits();
|
||||
const newState = this.getStateFromStoresForAudits();
|
||||
if (!Utils.areObjectsEqual(newState.audits, this.state.audits)) {
|
||||
this.setState(newState);
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
var content;
|
||||
if (this.state.audits.loading) {
|
||||
let content;
|
||||
if (this.state.audits.length === 0) {
|
||||
content = (<LoadingScreen/>);
|
||||
} else {
|
||||
content = (
|
||||
|
||||
@@ -79,8 +79,6 @@ export default class AdminSidebarSection extends React.Component {
|
||||
sidebarItem = (
|
||||
<div
|
||||
className={`${className}-title`}
|
||||
activeClassName={`${className}-title ${className}-title--active`}
|
||||
onlyActiveOnIndex={this.props.onlyActiveOnIndex}
|
||||
>
|
||||
<span className={`${className}-title__text`}>
|
||||
{this.props.title}
|
||||
|
||||
@@ -51,7 +51,6 @@ export default class FileUploadSetting extends Setting {
|
||||
if (error) {
|
||||
Utils.clearFileInput(this.refs.fileInput);
|
||||
}
|
||||
this.setState({fileSelected: false, fileName: null, serverError: error});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -61,7 +60,7 @@ export default class FileUploadSetting extends Setting {
|
||||
serverError = <div className='form-group has-error'><label className='control-label'>{this.state.serverError}</label></div>;
|
||||
}
|
||||
|
||||
var btnClass = 'btn';
|
||||
let btnClass = 'btn';
|
||||
if (this.state.fileSelected) {
|
||||
btnClass = 'btn btn-primary';
|
||||
}
|
||||
|
||||
@@ -191,6 +191,7 @@ export default class UserList extends React.Component {
|
||||
const service = (user.auth_service === Constants.LDAP_SERVICE || user.auth_service === Constants.SAML_SERVICE) ? user.auth_service.toUpperCase() : Utils.toTitleCase(user.auth_service);
|
||||
info.push(
|
||||
<FormattedHTMLMessage
|
||||
key='admin.user_item.authServiceNotEmail'
|
||||
id='admin.user_item.authServiceNotEmail'
|
||||
defaultMessage='<strong>Sign-in Method:</strong> {service}'
|
||||
values={{
|
||||
@@ -201,6 +202,7 @@ export default class UserList extends React.Component {
|
||||
} else {
|
||||
info.push(
|
||||
<FormattedHTMLMessage
|
||||
key='admin.user_item.authServiceEmail'
|
||||
id='admin.user_item.authServiceEmail'
|
||||
defaultMessage='<strong>Sign-in Method:</strong> Email'
|
||||
/>
|
||||
@@ -212,6 +214,7 @@ export default class UserList extends React.Component {
|
||||
if (user.mfa_active) {
|
||||
info.push(
|
||||
<FormattedHTMLMessage
|
||||
key='admin.user_item.mfaYes'
|
||||
id='admin.user_item.mfaYes'
|
||||
defaultMessage='<strong>MFA</strong>: Yes'
|
||||
/>
|
||||
@@ -219,6 +222,7 @@ export default class UserList extends React.Component {
|
||||
} else {
|
||||
info.push(
|
||||
<FormattedHTMLMessage
|
||||
key='admin.user_item.mfaNo'
|
||||
id='admin.user_item.mfaNo'
|
||||
defaultMessage='<strong>MFA</strong>: No'
|
||||
/>
|
||||
|
||||
@@ -18,7 +18,7 @@ export default class TextSetting extends React.Component {
|
||||
React.PropTypes.number
|
||||
]).isRequired,
|
||||
maxLength: React.PropTypes.number,
|
||||
onChange: React.PropTypes.func.isRequired,
|
||||
onChange: React.PropTypes.func,
|
||||
disabled: React.PropTypes.bool,
|
||||
type: React.PropTypes.oneOf([
|
||||
'input',
|
||||
|
||||
@@ -83,6 +83,6 @@ DoughnutChart.propTypes = {
|
||||
title: React.PropTypes.node,
|
||||
width: React.PropTypes.string,
|
||||
height: React.PropTypes.string,
|
||||
data: React.PropTypes.array,
|
||||
data: React.PropTypes.object,
|
||||
options: React.PropTypes.object
|
||||
};
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
import React from 'react';
|
||||
|
||||
import TeamStore from 'stores/team_store.jsx';
|
||||
import UserStore from 'stores/user_store.jsx';
|
||||
|
||||
import BackstageSidebar from './components/backstage_sidebar.jsx';
|
||||
import BackstageNavbar from './components/backstage_navbar.jsx';
|
||||
@@ -13,8 +14,7 @@ export default class BackstageController extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
children: React.PropTypes.node.isRequired,
|
||||
params: React.PropTypes.object.isRequired,
|
||||
user: React.PropTypes.object.isRequired
|
||||
params: React.PropTypes.object.isRequired
|
||||
};
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ export default class BackstageController extends React.Component {
|
||||
this.onTeamChange = this.onTeamChange.bind(this);
|
||||
|
||||
this.state = {
|
||||
user: UserStore.getCurrentUser(),
|
||||
team: props.params.team ? TeamStore.getByName(props.params.team) : TeamStore.getCurrent()
|
||||
};
|
||||
}
|
||||
@@ -50,7 +51,7 @@ export default class BackstageController extends React.Component {
|
||||
<div className='backstage-body'>
|
||||
<BackstageSidebar
|
||||
team={this.state.team}
|
||||
user={this.props.user}
|
||||
user={this.state.user}
|
||||
/>
|
||||
{
|
||||
React.Children.map(this.props.children, (child) => {
|
||||
@@ -60,7 +61,7 @@ export default class BackstageController extends React.Component {
|
||||
|
||||
return React.cloneElement(child, {
|
||||
team: this.state.team,
|
||||
user: this.props.user
|
||||
user: this.state.user
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
@@ -65,7 +65,6 @@ export default class BackstageSection extends React.Component {
|
||||
<Link
|
||||
className={`${className}-title`}
|
||||
activeClassName={`${className}-title--active`}
|
||||
onClick={this.handleClick}
|
||||
to={link}
|
||||
>
|
||||
<span className={`${className}-title__text`}>
|
||||
|
||||
@@ -40,10 +40,6 @@ export default class ChannelInviteButton extends React.Component {
|
||||
this.props.channel.id,
|
||||
this.props.user.id,
|
||||
() => {
|
||||
this.setState({
|
||||
addingUser: false
|
||||
});
|
||||
|
||||
this.props.onInviteError(null);
|
||||
},
|
||||
(err) => {
|
||||
|
||||
@@ -123,12 +123,12 @@ export default class ChannelInviteModal extends React.Component {
|
||||
}
|
||||
|
||||
render() {
|
||||
var inviteError = null;
|
||||
let inviteError = null;
|
||||
if (this.state.inviteError) {
|
||||
inviteError = (<label className='has-error control-label'>{this.state.inviteError}</label>);
|
||||
}
|
||||
|
||||
var content;
|
||||
let content;
|
||||
if (this.state.loading) {
|
||||
content = (<LoadingScreen/>);
|
||||
} else {
|
||||
|
||||
@@ -14,13 +14,13 @@ import SpinnerButton from 'components/spinner_button.jsx';
|
||||
|
||||
export default class AddEmoji extends React.Component {
|
||||
static propTypes = {
|
||||
team: React.PropTypes.object.isRequired,
|
||||
user: React.PropTypes.object.isRequired
|
||||
}
|
||||
team: React.PropTypes.object,
|
||||
user: React.PropTypes.object
|
||||
};
|
||||
|
||||
static contextTypes = {
|
||||
router: React.PropTypes.object.isRequired
|
||||
}
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
@@ -19,8 +19,8 @@ import {FormattedMessage} from 'react-intl';
|
||||
export default class EmojiList extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.propTypes.object.isRequired,
|
||||
user: React.propTypes.object.isRequired
|
||||
team: React.PropTypes.object,
|
||||
user: React.PropTypes.object
|
||||
};
|
||||
}
|
||||
|
||||
@@ -95,11 +95,21 @@ export default class EmojiList extends React.Component {
|
||||
const emojis = [];
|
||||
if (this.state.loading) {
|
||||
emojis.push(
|
||||
<LoadingScreen key='loading'/>
|
||||
<tr
|
||||
key='loading'
|
||||
className='backstage-list__item backstage-list__empty'
|
||||
>
|
||||
<td colSpan='4'>
|
||||
<LoadingScreen key='loading'/>
|
||||
</td>
|
||||
</tr>
|
||||
);
|
||||
} else if (this.state.emojis.length === 0) {
|
||||
} else if (this.state.emojis.size === 0) {
|
||||
emojis.push(
|
||||
<tr className='backstage-list__item backstage-list__empty'>
|
||||
<tr
|
||||
key='empty'
|
||||
className='backstage-list__item backstage-list__empty'
|
||||
>
|
||||
<td colSpan='4'>
|
||||
<FormattedMessage
|
||||
id='emoji_list.empty'
|
||||
@@ -180,33 +190,37 @@ export default class EmojiList extends React.Component {
|
||||
</span>
|
||||
<div className='backstage-list'>
|
||||
<table className='emoji-list__table'>
|
||||
<tr className='backstage-list__item emoji-list__table-header'>
|
||||
<th className='emoji-list__name'>
|
||||
<FormattedMessage
|
||||
id='emoji_list.name'
|
||||
defaultMessage='Name'
|
||||
/>
|
||||
</th>
|
||||
<th className='emoji-list__image'>
|
||||
<FormattedMessage
|
||||
id='emoji_list.image'
|
||||
defaultMessage='Image'
|
||||
/>
|
||||
</th>
|
||||
<th className='emoji-list__creator'>
|
||||
<FormattedMessage
|
||||
id='emoji_list.creator'
|
||||
defaultMessage='Creator'
|
||||
/>
|
||||
</th>
|
||||
<th className='emoji-list_actions'>
|
||||
<FormattedMessage
|
||||
id='emoji_list.actions'
|
||||
defaultMessage='Actions'
|
||||
/>
|
||||
</th>
|
||||
</tr>
|
||||
{emojis}
|
||||
<thead>
|
||||
<tr className='backstage-list__item emoji-list__table-header'>
|
||||
<th className='emoji-list__name'>
|
||||
<FormattedMessage
|
||||
id='emoji_list.name'
|
||||
defaultMessage='Name'
|
||||
/>
|
||||
</th>
|
||||
<th className='emoji-list__image'>
|
||||
<FormattedMessage
|
||||
id='emoji_list.image'
|
||||
defaultMessage='Image'
|
||||
/>
|
||||
</th>
|
||||
<th className='emoji-list__creator'>
|
||||
<FormattedMessage
|
||||
id='emoji_list.creator'
|
||||
defaultMessage='Creator'
|
||||
/>
|
||||
</th>
|
||||
<th className='emoji-list_actions'>
|
||||
<FormattedMessage
|
||||
id='emoji_list.actions'
|
||||
defaultMessage='Actions'
|
||||
/>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{emojis}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -9,7 +9,7 @@ export default class FormError extends React.Component {
|
||||
return {
|
||||
type: React.PropTypes.node,
|
||||
error: React.PropTypes.node,
|
||||
margin: React.PropTypes.node,
|
||||
margin: React.PropTypes.bool,
|
||||
errors: React.PropTypes.arrayOf(React.PropTypes.node)
|
||||
};
|
||||
}
|
||||
|
||||
@@ -90,10 +90,11 @@ export default class GetLinkModal extends React.Component {
|
||||
className='form-control no-resize min-height'
|
||||
ref='textarea'
|
||||
value={this.props.link}
|
||||
readOnly={true}
|
||||
/>
|
||||
);
|
||||
|
||||
var copyLinkConfirm = null;
|
||||
let copyLinkConfirm = null;
|
||||
if (this.state.copiedLink) {
|
||||
copyLinkConfirm = (
|
||||
<p className='alert alert-success alert--confirm'>
|
||||
|
||||
@@ -21,6 +21,7 @@ export default class NotLoggedIn extends React.Component {
|
||||
if (global.window.mm_config.HelpLink) {
|
||||
content.push(
|
||||
<a
|
||||
key='help_link'
|
||||
id='help_link'
|
||||
className='pull-right footer-link'
|
||||
target='_blank'
|
||||
@@ -35,6 +36,7 @@ export default class NotLoggedIn extends React.Component {
|
||||
if (global.window.mm_config.TermsOfServiceLink) {
|
||||
content.push(
|
||||
<a
|
||||
key='terms_link'
|
||||
id='terms_link'
|
||||
className='pull-right footer-link'
|
||||
target='_blank'
|
||||
@@ -49,6 +51,7 @@ export default class NotLoggedIn extends React.Component {
|
||||
if (global.window.mm_config.PrivacyPolicyLink) {
|
||||
content.push(
|
||||
<a
|
||||
key='privacy_link'
|
||||
id='privacy_link'
|
||||
className='pull-right footer-link'
|
||||
target='_blank'
|
||||
@@ -63,6 +66,7 @@ export default class NotLoggedIn extends React.Component {
|
||||
if (global.window.mm_config.AboutLink) {
|
||||
content.push(
|
||||
<a
|
||||
key='about_link'
|
||||
id='about_link'
|
||||
className='pull-right footer-link'
|
||||
target='_blank'
|
||||
|
||||
@@ -19,7 +19,7 @@ const REQUEST_GET = 'G';
|
||||
export default class AddCommand extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.propTypes.object.isRequired
|
||||
team: React.PropTypes.object
|
||||
};
|
||||
}
|
||||
|
||||
@@ -513,7 +513,7 @@ export default class AddCommand extends React.Component {
|
||||
className='form-control'
|
||||
value={this.state.username}
|
||||
onChange={this.updateUsername}
|
||||
placholder={Utils.localizeMessage('add_command.username.placeholder', 'Username')}
|
||||
placeholder={Utils.localizeMessage('add_command.username.placeholder', 'Username')}
|
||||
/>
|
||||
<div className='form__help'>
|
||||
<FormattedMessage
|
||||
|
||||
@@ -15,7 +15,7 @@ import SpinnerButton from 'components/spinner_button.jsx';
|
||||
export default class AddIncomingWebhook extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.PropTypes.object.isRequired
|
||||
team: React.PropTypes.object
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ import SpinnerButton from 'components/spinner_button.jsx';
|
||||
export default class AddOAuthApp extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.propTypes.object.isRequired
|
||||
team: React.PropTypes.object
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
import React from 'react';
|
||||
|
||||
import * as AsyncClient from 'utils/async_client.jsx';
|
||||
import {localizeMessage} from 'utils/utils.jsx';
|
||||
|
||||
import BackstageHeader from 'components/backstage/components/backstage_header.jsx';
|
||||
import ChannelSelect from 'components/channel_select.jsx';
|
||||
@@ -15,7 +16,7 @@ import SpinnerButton from 'components/spinner_button.jsx';
|
||||
export default class AddOutgoingWebhook extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.propTypes.object.isRequired
|
||||
team: React.PropTypes.object
|
||||
};
|
||||
}
|
||||
|
||||
@@ -368,18 +369,12 @@ export default class AddOutgoingWebhook extends React.Component {
|
||||
<option
|
||||
value='0'
|
||||
>
|
||||
<FormattedMessage
|
||||
id='add_outgoing_webhook.triggerWordsTriggerWhenFullWord'
|
||||
defaultMessage='First word matches a trigger word exactly'
|
||||
/>
|
||||
{localizeMessage('add_outgoing_webhook.triggerWordsTriggerWhenFullWord', 'First word matches a trigger word exactly')}
|
||||
</option>
|
||||
<option
|
||||
value='1'
|
||||
>
|
||||
<FormattedMessage
|
||||
id='add_outgoing_webhook.triggerWordsTriggerWhenStartsWith'
|
||||
defaultMessage='First word starts with a trigger word'
|
||||
/>
|
||||
{localizeMessage('add_outgoing_webhook.triggerWordsTriggerWhenStartsWith', 'First word starts with a trigger word')}
|
||||
</option>
|
||||
</select>
|
||||
<div className='form__help'>
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// See License.txt for license information.
|
||||
|
||||
import IntegrationStore from 'stores/integration_store.jsx';
|
||||
import TeamStore from 'stores/team_store.jsx';
|
||||
import UserStore from 'stores/user_store.jsx';
|
||||
|
||||
import {loadTeamCommands} from 'actions/integration_actions.jsx';
|
||||
@@ -12,8 +11,8 @@ import React from 'react';
|
||||
export default class CommandsContainer extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.propTypes.object.isRequired,
|
||||
children: React.propTypes.node.isRequired
|
||||
team: React.PropTypes.object,
|
||||
children: React.PropTypes.node
|
||||
};
|
||||
}
|
||||
|
||||
@@ -23,10 +22,10 @@ export default class CommandsContainer extends React.Component {
|
||||
this.handleIntegrationChange = this.handleIntegrationChange.bind(this);
|
||||
this.handleUserChange = this.handleUserChange.bind(this);
|
||||
|
||||
const teamId = TeamStore.getCurrentId();
|
||||
const teamId = this.props.team ? this.props.team.id : '';
|
||||
|
||||
this.state = {
|
||||
commands: IntegrationStore.getCommands(teamId),
|
||||
commands: IntegrationStore.getCommands(teamId) || [],
|
||||
loading: !IntegrationStore.hasReceivedCommands(teamId),
|
||||
users: UserStore.getProfiles()
|
||||
};
|
||||
@@ -47,7 +46,7 @@ export default class CommandsContainer extends React.Component {
|
||||
}
|
||||
|
||||
handleIntegrationChange() {
|
||||
const teamId = TeamStore.getCurrentId();
|
||||
const teamId = this.props.team.id;
|
||||
|
||||
this.setState({
|
||||
commands: IntegrationStore.getCommands(teamId),
|
||||
|
||||
@@ -15,7 +15,7 @@ import Constants from 'utils/constants.jsx';
|
||||
export default class ConfirmIntegration extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.PropTypes.object.isRequired,
|
||||
team: React.PropTypes.object,
|
||||
location: React.PropTypes.object,
|
||||
loading: React.PropTypes.bool
|
||||
};
|
||||
@@ -159,7 +159,7 @@ export default class ConfirmIntegration extends React.Component {
|
||||
|
||||
helpText = [];
|
||||
helpText.push(
|
||||
<p>
|
||||
<p key='add_oauth_app.doneHelp'>
|
||||
<FormattedHTMLMessage
|
||||
id='add_oauth_app.doneHelp'
|
||||
defaultMessage='Your OAuth 2.0 application has been set up. Please use the following Client ID and Client Secret when requesting authorization for your application (see <a href="https://docs.mattermost.com/developer/oauth-2-0-applications.html">documentation</a> for further details).'
|
||||
@@ -167,7 +167,7 @@ export default class ConfirmIntegration extends React.Component {
|
||||
</p>
|
||||
);
|
||||
helpText.push(
|
||||
<p>
|
||||
<p key='add_oauth_app.clientId'>
|
||||
<FormattedHTMLMessage
|
||||
id='add_oauth_app.clientId'
|
||||
defaultMessage='<b>Client ID:</b> {id}'
|
||||
@@ -186,7 +186,7 @@ export default class ConfirmIntegration extends React.Component {
|
||||
);
|
||||
|
||||
helpText.push(
|
||||
<p>
|
||||
<p key='add_oauth_app.doneUrlHelp'>
|
||||
<FormattedHTMLMessage
|
||||
id='add_oauth_app.doneUrlHelp'
|
||||
defaultMessage='The following are your authorized redirect URL(s).'
|
||||
|
||||
@@ -23,7 +23,7 @@ const REQUEST_GET = 'G';
|
||||
export default class EditCommand extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.propTypes.object.isRequired,
|
||||
team: React.PropTypes.object,
|
||||
location: React.PropTypes.object
|
||||
};
|
||||
}
|
||||
@@ -624,7 +624,7 @@ export default class EditCommand extends React.Component {
|
||||
className='form-control'
|
||||
value={this.state.username}
|
||||
onChange={this.updateUsername}
|
||||
placholder={Utils.localizeMessage('add_command.username.placeholder', 'Username')}
|
||||
placeholder={Utils.localizeMessage('add_command.username.placeholder', 'Username')}
|
||||
/>
|
||||
<div className='form__help'>
|
||||
<FormattedMessage
|
||||
|
||||
@@ -2,11 +2,13 @@
|
||||
// See License.txt for license information.
|
||||
|
||||
import React from 'react';
|
||||
import {Link} from 'react-router';
|
||||
import {FormattedMessage} from 'react-intl';
|
||||
|
||||
export default class InstalledCommand extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.PropTypes.object.isRequired,
|
||||
command: React.PropTypes.object.isRequired,
|
||||
onRegenToken: React.PropTypes.func.isRequired,
|
||||
onDelete: React.PropTypes.func.isRequired,
|
||||
@@ -129,14 +131,14 @@ export default class InstalledCommand extends React.Component {
|
||||
/>
|
||||
</a>
|
||||
{' - '}
|
||||
<a
|
||||
href={'edit?id=' + command.id}
|
||||
<Link
|
||||
to={`/${this.props.team.name}/integrations/commands/edit?id=${command.id}`}
|
||||
>
|
||||
<FormattedMessage
|
||||
id='installed_integrations.edit'
|
||||
defaultMessage='Edit'
|
||||
/>
|
||||
</a>
|
||||
</Link>
|
||||
{' - '}
|
||||
<a
|
||||
href='#'
|
||||
|
||||
@@ -13,10 +13,10 @@ import {FormattedMessage} from 'react-intl';
|
||||
export default class InstalledCommands extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.propTypes.object.isRequired,
|
||||
users: React.propTypes.object.isRequired,
|
||||
commands: React.propTypes.array.isRequired,
|
||||
loading: React.propTypes.bool.isRequired
|
||||
team: React.PropTypes.object,
|
||||
users: React.PropTypes.object,
|
||||
commands: React.PropTypes.array,
|
||||
loading: React.PropTypes.bool
|
||||
};
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ export default class InstalledCommands extends React.Component {
|
||||
return (
|
||||
<InstalledCommand
|
||||
key={command.id}
|
||||
team={this.props.team}
|
||||
command={command}
|
||||
onRegenToken={this.regenCommandToken}
|
||||
onDelete={this.deleteCommand}
|
||||
|
||||
@@ -19,7 +19,7 @@ import {FormattedMessage} from 'react-intl';
|
||||
export default class InstalledIncomingWebhooks extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.PropTypes.object.isRequired
|
||||
team: React.PropTypes.object
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ import InstalledOAuthApp from './installed_oauth_app.jsx';
|
||||
export default class InstalledOAuthApps extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.propTypes.object.isRequired
|
||||
team: React.PropTypes.object
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ import {FormattedMessage} from 'react-intl';
|
||||
export default class InstalledOutgoingWebhooks extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.propTypes.object.isRequired
|
||||
team: React.PropTypes.object
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ import * as Utils from 'utils/utils.jsx';
|
||||
export default class Integrations extends React.Component {
|
||||
static get propTypes() {
|
||||
return {
|
||||
team: React.PropTypes.object.isRequired,
|
||||
user: React.PropTypes.object.isRequired
|
||||
team: React.PropTypes.object,
|
||||
user: React.PropTypes.object
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -461,17 +461,6 @@ export default class LoginController extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
if (gitlabSigninEnabled || samlSigninEnabled || office365SigninEnabled || googleSigninEnabled || gitlabSigninEnabled) {
|
||||
loginControls.push(
|
||||
<h5 key='oauthHeader'>
|
||||
<FormattedMessage
|
||||
id='login.signInWith'
|
||||
defaultMessage='Sign in with:'
|
||||
/>
|
||||
</h5>
|
||||
);
|
||||
}
|
||||
|
||||
if (gitlabSigninEnabled) {
|
||||
loginControls.push(
|
||||
<a
|
||||
|
||||
@@ -12,6 +12,7 @@ import TeamStore from 'stores/team_store.jsx';
|
||||
|
||||
import * as AsyncClient from 'utils/async_client.jsx';
|
||||
import * as UserAgent from 'utils/user_agent.jsx';
|
||||
import {localizeMessage} from 'utils/utils.jsx';
|
||||
import Constants from 'utils/constants.jsx';
|
||||
|
||||
import React from 'react';
|
||||
@@ -196,16 +197,10 @@ export default class MoreDirectChannels extends React.Component {
|
||||
onChange={this.toggleList}
|
||||
>
|
||||
<option value='any'>
|
||||
<FormattedMessage
|
||||
id='filtered_user_list.any_team'
|
||||
defaultMessage='All Users'
|
||||
/>
|
||||
{localizeMessage('filtered_user_list.any_team', 'All Users')}
|
||||
</option>
|
||||
<option value='team'>
|
||||
<FormattedMessage
|
||||
id='filtered_user_list.team_only'
|
||||
defaultMessage='Members of this Team'
|
||||
/>
|
||||
{localizeMessage('filtered_user_list.team_only', 'Members of this Team')}
|
||||
</option>
|
||||
</select>
|
||||
<span
|
||||
|
||||
@@ -18,11 +18,7 @@ export default class RhsDropdown extends React.Component {
|
||||
};
|
||||
}
|
||||
|
||||
toggleDropdown(e) {
|
||||
if (e) {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
toggleDropdown() {
|
||||
const showDropdown = !this.state.showDropdown;
|
||||
if (Agent.isMobile() || Agent.isMobileApp()) {
|
||||
const scroll = document.querySelector('.scrollbar--view');
|
||||
@@ -39,8 +35,9 @@ export default class RhsDropdown extends React.Component {
|
||||
render() {
|
||||
return (
|
||||
<Dropdown
|
||||
id='rhs_dropdown'
|
||||
open={this.state.showDropdown}
|
||||
onClose={this.toggleDropdown}
|
||||
onToggle={this.toggleDropdown}
|
||||
>
|
||||
<a
|
||||
href='#'
|
||||
|
||||
@@ -190,6 +190,6 @@ RhsHeaderPost.propTypes = {
|
||||
isWebrtc: React.PropTypes.bool,
|
||||
fromSearch: React.PropTypes.string,
|
||||
fromFlaggedPosts: React.PropTypes.bool,
|
||||
toggleSize: React.PropTypes.function,
|
||||
shrink: React.PropTypes.function
|
||||
toggleSize: React.PropTypes.func,
|
||||
shrink: React.PropTypes.func
|
||||
};
|
||||
|
||||
@@ -374,6 +374,6 @@ RhsThread.propTypes = {
|
||||
isMentionSearch: React.PropTypes.bool,
|
||||
currentUser: React.PropTypes.object.isRequired,
|
||||
useMilitaryTime: React.PropTypes.bool.isRequired,
|
||||
toggleSize: React.PropTypes.function,
|
||||
shrink: React.PropTypes.function
|
||||
toggleSize: React.PropTypes.func,
|
||||
shrink: React.PropTypes.func
|
||||
};
|
||||
|
||||
@@ -271,7 +271,7 @@ export default class SearchResults extends React.Component {
|
||||
SearchResults.propTypes = {
|
||||
isMentionSearch: React.PropTypes.bool,
|
||||
useMilitaryTime: React.PropTypes.bool.isRequired,
|
||||
toggleSize: React.PropTypes.function,
|
||||
shrink: React.PropTypes.function,
|
||||
toggleSize: React.PropTypes.func,
|
||||
shrink: React.PropTypes.func,
|
||||
isFlaggedPosts: React.PropTypes.bool
|
||||
};
|
||||
|
||||
@@ -129,7 +129,7 @@ export default class SearchResultsHeader extends React.Component {
|
||||
|
||||
SearchResultsHeader.propTypes = {
|
||||
isMentionSearch: React.PropTypes.bool,
|
||||
toggleSize: React.PropTypes.function,
|
||||
shrink: React.PropTypes.function,
|
||||
toggleSize: React.PropTypes.func,
|
||||
shrink: React.PropTypes.func,
|
||||
isFlaggedPosts: React.PropTypes.bool
|
||||
};
|
||||
|
||||
@@ -301,6 +301,6 @@ SearchResultsItem.propTypes = {
|
||||
isFlaggedSearch: React.PropTypes.bool,
|
||||
term: React.PropTypes.string,
|
||||
useMilitaryTime: React.PropTypes.bool.isRequired,
|
||||
shrink: React.PropTypes.function,
|
||||
shrink: React.PropTypes.func,
|
||||
isFlagged: React.PropTypes.bool
|
||||
};
|
||||
|
||||
@@ -322,7 +322,7 @@ export default class SidebarHeaderDropdown extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
var teams = [];
|
||||
const teams = [];
|
||||
|
||||
if (config.EnableTeamCreation === 'true') {
|
||||
teams.push(
|
||||
|
||||
@@ -77,16 +77,24 @@ class UserSettingsModal extends React.Component {
|
||||
};
|
||||
|
||||
this.requireConfirm = false;
|
||||
this.mounted = false;
|
||||
}
|
||||
|
||||
onUserChanged() {
|
||||
this.setState({currentUser: UserStore.getCurrentUser()});
|
||||
if (this.mounted) {
|
||||
this.setState({currentUser: UserStore.getCurrentUser()});
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.mounted = true;
|
||||
UserStore.addChangeListener(this.onUserChanged);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.mounted = false;
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
UserStore.removeChangeListener(this.onUserChanged);
|
||||
if (!Utils.isMobile()) {
|
||||
|
||||
@@ -96,5 +96,5 @@ export default class WebrtcHeader extends React.Component {
|
||||
WebrtcHeader.propTypes = {
|
||||
username: React.PropTypes.string.isRequired,
|
||||
onClose: React.PropTypes.func.isRequired,
|
||||
toggleSize: React.PropTypes.function
|
||||
toggleSize: React.PropTypes.func
|
||||
};
|
||||
|
||||
@@ -1218,5 +1218,5 @@ WebrtcController.propTypes = {
|
||||
userId: React.PropTypes.string.isRequired,
|
||||
isCaller: React.PropTypes.bool.isRequired,
|
||||
expanded: React.PropTypes.bool.isRequired,
|
||||
toggleSize: React.PropTypes.function
|
||||
};
|
||||
toggleSize: React.PropTypes.func
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user