// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import BackstageList from 'components/backstage/components/backstage_list.jsx'; import InstalledCommand from './installed_command.jsx'; import * as AsyncClient from 'utils/async_client.jsx'; import * as Utils from 'utils/utils.jsx'; import React from 'react'; import {FormattedMessage} from 'react-intl'; export default class InstalledCommands extends React.Component { static get propTypes() { return { team: React.PropTypes.object, user: React.PropTypes.object, users: React.PropTypes.object, commands: React.PropTypes.array, loading: React.PropTypes.bool, isAdmin: React.PropTypes.bool }; } constructor(props) { super(props); this.regenCommandToken = this.regenCommandToken.bind(this); this.deleteCommand = this.deleteCommand.bind(this); } regenCommandToken(command) { AsyncClient.regenCommandToken(command.id); } deleteCommand(command) { AsyncClient.deleteCommand(command.id); } commandCompare(a, b) { let nameA = a.display_name; if (!nameA) { nameA = Utils.localizeMessage('installed_commands.unnamed_command', 'Unnamed Slash Command'); } let nameB = b.display_name; if (!nameB) { nameB = Utils.localizeMessage('installed_commands.unnamed_command', 'Unnamed Slash Command'); } return nameA.localeCompare(nameB); } render() { const commands = this.props.commands.sort(this.commandCompare).map((command) => { const canChange = this.props.isAdmin || this.props.user.id === command.creator_id; return ( ); }); return ( } addText={ } addLink={'/' + this.props.team.name + '/integrations/commands/add'} emptyText={ } helpText={ ) }} /> } searchPlaceholder={Utils.localizeMessage('installed_commands.search', 'Search Slash Commands')} loading={this.props.loading} > {commands} ); } }