// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import React from 'react'; import UserStore from 'stores/user_store.jsx'; import IntegrationStore from 'stores/integration_store.jsx'; import * as OAuthActions from 'actions/oauth_actions.jsx'; import {localizeMessage} from 'utils/utils.jsx'; import BackstageList from 'components/backstage/components/backstage_list.jsx'; import {FormattedMessage} from 'react-intl'; import InstalledOAuthApp from './installed_oauth_app.jsx'; export default class InstalledOAuthApps extends React.Component { static get propTypes() { return { team: React.PropTypes.object }; } constructor(props) { super(props); this.handleIntegrationChange = this.handleIntegrationChange.bind(this); this.deleteOAuthApp = this.deleteOAuthApp.bind(this); const userId = UserStore.getCurrentId(); this.state = { oauthApps: IntegrationStore.getOAuthApps(userId), loading: !IntegrationStore.hasReceivedOAuthApps(userId) }; } componentDidMount() { IntegrationStore.addChangeListener(this.handleIntegrationChange); if (window.mm_config.EnableOAuthServiceProvider === 'true') { OAuthActions.listOAuthApps(UserStore.getCurrentId()); } } componentWillUnmount() { IntegrationStore.removeChangeListener(this.handleIntegrationChange); } handleIntegrationChange() { const userId = UserStore.getCurrentId(); this.setState({ oauthApps: IntegrationStore.getOAuthApps(userId), loading: !IntegrationStore.hasReceivedOAuthApps(userId) }); } deleteOAuthApp(app) { const userId = UserStore.getCurrentId(); OAuthActions.deleteOAuthApp(app.id, userId); } oauthAppCompare(a, b) { let nameA = a.name; if (!nameA) { nameA = localizeMessage('installed_integrations.unnamed_oauth_app', 'Unnamed OAuth 2.0 Application'); } let nameB = b.name; if (!nameB) { nameB = localizeMessage('installed_integrations.unnamed_oauth_app', 'Unnamed OAuth 2.0 Application'); } return nameA.localeCompare(nameB); } render() { const oauthApps = this.state.oauthApps.sort(this.oauthAppCompare).map((app) => { return ( ); }); const isSystemAdmin = UserStore.isSystemAdminForCurrentUser(); const config = global.mm_config; const integrationsEnabled = (config.EnableOAuthServiceProvider === 'true' && (isSystemAdmin || config.EnableOnlyAdminIntegrations !== 'true')); let props; if (integrationsEnabled) { props = { addLink: '/' + this.props.team.name + '/integrations/oauth2-apps/add', addText: localizeMessage('installed_oauth_apps.add', 'Add OAuth 2.0 Application') }; } return ( } helpText={ ) }} /> } emptyText={ } searchPlaceholder={localizeMessage('installed_oauth_apps.search', 'Search OAuth 2.0 Applications')} loading={this.state.loading} {...props} > {oauthApps} ); } }