Files
mostlymatter/web/react/components/edit_channel_modal.jsx
2015-11-04 22:37:26 +05:00

151 строка
5.3 KiB
JavaScript
Исходник Ответственный История

Этот файл содержит неоднозначные символы Юникода
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const Client = require('../utils/client.jsx');
const AsyncClient = require('../utils/async_client.jsx');
export default class EditChannelModal extends React.Component {
constructor(props) {
super(props);
this.handleEdit = this.handleEdit.bind(this);
this.handleUserInput = this.handleUserInput.bind(this);
this.handleClose = this.handleClose.bind(this);
this.onShow = this.onShow.bind(this);
this.handleShown = this.handleShown.bind(this);
this.state = {
header: '',
title: '',
channelId: '',
serverError: ''
};
}
handleEdit() {
var data = {};
data.channel_id = this.state.channelId;
if (data.channel_id.length !== 26) {
return;
}
data.channel_header = this.state.header.trim();
Client.updateChannelHeader(data,
() => {
this.setState({serverError: ''});
AsyncClient.getChannel(this.state.channelId);
$(ReactDOM.findDOMNode(this.refs.modal)).modal('hide');
},
(err) => {
if (err.message === 'Invalid channel_header parameter') {
this.setState({serverError: 'This channel header is too long, please enter a shorter one'});
} else {
this.setState({serverError: err.message});
}
}
);
}
handleUserInput(e) {
this.setState({header: e.target.value});
}
handleClose() {
this.setState({header: '', serverError: ''});
}
onShow(e) {
const button = e.relatedTarget;
this.setState({header: $(button).attr('data-header'), title: $(button).attr('data-title'), channelId: $(button).attr('data-channelid'), serverError: ''});
}
handleShown() {
$('#edit_channel #edit_header').focus();
}
componentDidMount() {
$(ReactDOM.findDOMNode(this.refs.modal)).on('show.bs.modal', this.onShow);
$(ReactDOM.findDOMNode(this.refs.modal)).on('hidden.bs.modal', this.handleClose);
$(ReactDOM.findDOMNode(this.refs.modal)).on('shown.bs.modal', this.handleShown);
}
componentWillUnmount() {
$(ReactDOM.findDOMNode(this.refs.modal)).off('hidden.bs.modal', this.handleClose);
}
render() {
var serverError = null;
if (this.state.serverError) {
serverError = <div className='form-group has-error'><br/><label className='control-label'>{this.state.serverError}</label></div>;
}
var editTitle = (
<h4
className='modal-title'
ref='title'
>
{'Edit Header'}
</h4>
);
if (this.state.title) {
editTitle = (
<h4
className='modal-title'
ref='title'
>
{'Edit Header for '}<span className='name'>{this.state.title}</span>
</h4>
);
}
return (
<div
className='modal fade'
ref='modal'
id='edit_channel'
role='dialog'
tabIndex='-1'
aria-hidden='true'
>
<div className='modal-dialog'>
<div className='modal-content'>
<div className='modal-header'>
<button
type='button'
className='close'
data-dismiss='modal'
aria-label='Close'
>
<span aria-hidden='true'>{'×'}</span>
</button>
{editTitle}
</div>
<div className='modal-body'>
<p>{'Edit the text appearing next to the channel name in the channel header.'}</p>
<textarea
className='form-control no-resize'
rows='6'
id='edit_header'
maxLength='1024'
value={this.state.header}
onChange={this.handleUserInput}
/>
{serverError}
</div>
<div className='modal-footer'>
<button
type='button'
className='btn btn-default'
data-dismiss='modal'
>
{'Cancel'}
</button>
<button
type='button'
className='btn btn-primary'
onClick={this.handleEdit}
>
{'Save'}
</button>
</div>
</div>
</div>
</div>
);
}
}