// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import LoadingScreen from '../loading_screen.jsx'; import * as Client from '../../utils/client.jsx'; import {intlShape, injectIntl, defineMessages, FormattedMessage, FormattedHTMLMessage} from 'mm-intl'; const holders = defineMessages({ requestTypePost: { id: 'user.settings.cmds.request_type_post', defaultMessage: 'POST' }, requestTypeGet: { id: 'user.settings.cmds.request_type_get', defaultMessage: 'GET' }, addDisplayNamePlaceholder: { id: 'user.settings.cmds.add_display_name.placeholder', defaultMessage: 'Display Name' }, addUsernamePlaceholder: { id: 'user.settings.cmds.add_username.placeholder', defaultMessage: 'Username' }, addTriggerPlaceholder: { id: 'user.settings.cmds.add_trigger.placeholder', defaultMessage: 'Command trigger e.g. "hello" not including the slash' }, addAutoCompleteDescPlaceholder: { id: 'user.settings.cmds.auto_complete_desc.placeholder', defaultMessage: 'A short description of what this commands does.' }, addAutoCompleteHintPlaceholder: { id: 'user.settings.cmds.auto_complete_hint.placeholder', defaultMessage: '[zipcode]' }, adUrlPlaceholder: { id: 'user.settings.cmds.url.placeholder', defaultMessage: 'Must start with http:// or https://' }, autocompleteYes: { id: 'user.settings.cmds.auto_complete.yes', defaultMessage: 'yes' }, autocompleteNo: { id: 'user.settings.cmds.auto_complete.no', defaultMessage: 'no' } }); export default class ManageCommandCmds extends React.Component { constructor() { super(); this.getCmds = this.getCmds.bind(this); this.addNewCmd = this.addNewCmd.bind(this); this.emptyCmd = this.emptyCmd.bind(this); this.updateTrigger = this.updateTrigger.bind(this); this.updateURL = this.updateURL.bind(this); this.updateMethod = this.updateMethod.bind(this); this.updateUsername = this.updateUsername.bind(this); this.updateIconURL = this.updateIconURL.bind(this); this.updateDisplayName = this.updateDisplayName.bind(this); this.updateAutoComplete = this.updateAutoComplete.bind(this); this.updateAutoCompleteDesc = this.updateAutoCompleteDesc.bind(this); this.updateAutoCompleteHint = this.updateAutoCompleteHint.bind(this); this.state = {cmds: [], cmd: this.emptyCmd(), getCmdsComplete: false}; } static propTypes() { return { intl: intlShape.isRequired }; } emptyCmd() { var cmd = {}; cmd.url = ''; cmd.trigger = ''; cmd.method = 'P'; cmd.username = ''; cmd.icon_url = ''; cmd.auto_complete = false; cmd.auto_complete_desc = ''; cmd.auto_complete_hint = ''; cmd.display_name = ''; return cmd; } componentDidMount() { this.getCmds(); } addNewCmd(e) { e.preventDefault(); if (this.state.cmd.trigger === '' || this.state.cmd.url === '') { return; } var cmd = this.state.cmd; if (cmd.trigger.length !== 0) { cmd.trigger = cmd.trigger.trim(); } cmd.url = cmd.url.trim(); Client.addCommand( cmd, (data) => { let cmds = Object.assign([], this.state.cmds); if (!cmds) { cmds = []; } cmds.push(data); this.setState({cmds, addError: null, cmd: this.emptyCmd()}); }, (err) => { this.setState({addError: err.message}); } ); } removeCmd(id) { const data = {}; data.id = id; Client.deleteCommand( data, () => { const cmds = this.state.cmds; let index = -1; for (let i = 0; i < cmds.length; i++) { if (cmds[i].id === id) { index = i; break; } } if (index !== -1) { cmds.splice(index, 1); } this.setState({cmds}); }, (err) => { this.setState({editError: err.message}); } ); } regenToken(id) { const regenData = {}; regenData.id = id; Client.regenCommandToken( regenData, (data) => { const cmds = Object.assign([], this.state.cmds); for (let i = 0; i < cmds.length; i++) { if (cmds[i].id === id) { cmds[i] = data; break; } } this.setState({cmds, editError: null}); }, (err) => { this.setState({editError: err.message}); } ); } getCmds() { Client.listTeamCommands( (data) => { if (data) { this.setState({cmds: data, getCmdsComplete: true, editError: null}); } }, (err) => { this.setState({editError: err.message}); } ); } updateTrigger(e) { var cmd = this.state.cmd; cmd.trigger = e.target.value; this.setState(cmd); } updateURL(e) { var cmd = this.state.cmd; cmd.url = e.target.value; this.setState(cmd); } updateMethod(e) { var cmd = this.state.cmd; cmd.method = e.target.value; this.setState(cmd); } updateUsername(e) { var cmd = this.state.cmd; cmd.username = e.target.value; this.setState(cmd); } updateIconURL(e) { var cmd = this.state.cmd; cmd.icon_url = e.target.value; this.setState(cmd); } updateDisplayName(e) { var cmd = this.state.cmd; cmd.display_name = e.target.value; this.setState(cmd); } updateAutoComplete(e) { var cmd = this.state.cmd; cmd.auto_complete = e.target.checked; this.setState(cmd); } updateAutoCompleteDesc(e) { var cmd = this.state.cmd; cmd.auto_complete_desc = e.target.value; this.setState(cmd); } updateAutoCompleteHint(e) { var cmd = this.state.cmd; cmd.auto_complete_hint = e.target.value; this.setState(cmd); } render() { let addError; if (this.state.addError) { addError = ; } let editError; if (this.state.editError) { addError = ; } const cmds = []; this.state.cmds.forEach((cmd) => { let triggerDiv; if (cmd.trigger && cmd.trigger.length !== 0) { triggerDiv = (
{cmd.trigger}
); } cmds.push(
{cmd.display_name}
{cmd.username}
{cmd.icon_url}
{cmd.auto_complete ? this.props.intl.formatMessage(holders.autocompleteYes) : this.props.intl.formatMessage(holders.autocompleteNo)}
{cmd.auto_complete_desc}
{cmd.auto_complete_hint}
{ cmd.method === 'P' ? : }
{cmd.url}
{triggerDiv}
{cmd.token}
); }); let displayCmds; if (!this.state.getCmdsComplete) { displayCmds = ; } else if (cmds.length > 0) { displayCmds = cmds; } else { displayCmds = (
); } const existingCmds = (
{displayCmds}
); const disableButton = this.state.cmd.trigger === '' || this.state.cmd.url === ''; return (
{''}
{addError}
{existingCmds} {editError}
); } } export default injectIntl(ManageCommandCmds);