Split delete modal trigger for reuse (#5740)
Spllit delete modal trigger for reuse and make emoji delete to use this modal trigger.
Этот коммит содержится в:
коммит произвёл
Joram Wilander
родитель
efd6c86066
Коммит
9b10f3ef54
62
webapp/components/delete_modal_trigger.jsx
Обычный файл
62
webapp/components/delete_modal_trigger.jsx
Обычный файл
@@ -0,0 +1,62 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import ConfirmModal from './confirm_modal.jsx';
|
||||||
|
|
||||||
|
export default class DeleteModalTrigger extends React.Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
if (this.constructor === DeleteModalTrigger) {
|
||||||
|
throw new TypeError('Can not construct abstract class.');
|
||||||
|
}
|
||||||
|
this.handleConfirm = this.handleConfirm.bind(this);
|
||||||
|
this.handleCancel = this.handleCancel.bind(this);
|
||||||
|
this.handleOpenModal = this.handleOpenModal.bind(this);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
showDeleteModal: false
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
handleOpenModal(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
showDeleteModal: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
handleConfirm(e) {
|
||||||
|
this.props.onDelete(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
handleCancel() {
|
||||||
|
this.setState({
|
||||||
|
showDeleteModal: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<span>
|
||||||
|
<a
|
||||||
|
href='#'
|
||||||
|
onClick={this.handleOpenModal}
|
||||||
|
>
|
||||||
|
{ this.triggerTitle }
|
||||||
|
</a>
|
||||||
|
<ConfirmModal
|
||||||
|
show={this.state.showDeleteModal}
|
||||||
|
title={this.modalTitle}
|
||||||
|
message={this.modalMessage}
|
||||||
|
confirmButton={this.modalConfirmButton}
|
||||||
|
onConfirm={this.handleConfirm}
|
||||||
|
onCancel={this.handleCancel}
|
||||||
|
/>
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DeleteModalTrigger.propTypes = {
|
||||||
|
onDelete: React.PropTypes.func.isRequired
|
||||||
|
};
|
||||||
49
webapp/components/emoji/components/delete_emoji_modal.jsx
Обычный файл
49
webapp/components/emoji/components/delete_emoji_modal.jsx
Обычный файл
@@ -0,0 +1,49 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import {FormattedMessage} from 'react-intl';
|
||||||
|
|
||||||
|
import DeleteModalTrigger from '../../delete_modal_trigger.jsx';
|
||||||
|
|
||||||
|
export default class DeleteEmoji extends DeleteModalTrigger {
|
||||||
|
get triggerTitle() {
|
||||||
|
return (
|
||||||
|
<FormattedMessage
|
||||||
|
id='emoji_list.delete'
|
||||||
|
defaultMessage='Delete'
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
get modalTitle() {
|
||||||
|
return (
|
||||||
|
<FormattedMessage
|
||||||
|
id='emoji_list.delete.confirm.title'
|
||||||
|
defaultMessage='Delete Custom Emoji'
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
get modalMessage() {
|
||||||
|
return (
|
||||||
|
<div className='alert alert-warning'>
|
||||||
|
<i className='fa fa-warning'/>
|
||||||
|
<FormattedMessage
|
||||||
|
id='emoji_list.delete.confirm.msg'
|
||||||
|
defaultMessage='This action permanently deletes the custom emoji. Are you sure you want to delete it?'
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
get modalConfirmButton() {
|
||||||
|
return (
|
||||||
|
<FormattedMessage
|
||||||
|
id='emoji_list.delete.confirm.button'
|
||||||
|
defaultMessage='Delete'
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DeleteEmoji.propTypes = {
|
||||||
|
onDelete: React.PropTypes.func.isRequired
|
||||||
|
};
|
||||||
@@ -4,6 +4,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import EmojiStore from 'stores/emoji_store.jsx';
|
import EmojiStore from 'stores/emoji_store.jsx';
|
||||||
|
import DeleteEmoji from './delete_emoji_modal.jsx';
|
||||||
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
|
||||||
@@ -80,15 +81,7 @@ export default class EmojiListItem extends React.Component {
|
|||||||
let deleteButton = null;
|
let deleteButton = null;
|
||||||
if (this.props.onDelete) {
|
if (this.props.onDelete) {
|
||||||
deleteButton = (
|
deleteButton = (
|
||||||
<a
|
<DeleteEmoji onDelete={this.handleDelete}/>
|
||||||
href='#'
|
|
||||||
onClick={this.handleDelete}
|
|
||||||
>
|
|
||||||
<FormattedMessage
|
|
||||||
id='emoji_list.delete'
|
|
||||||
defaultMessage='Delete'
|
|
||||||
/>
|
|
||||||
</a>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,48 +1,29 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {FormattedMessage} from 'react-intl';
|
import {FormattedMessage} from 'react-intl';
|
||||||
|
|
||||||
import ConfirmModal from '../../confirm_modal.jsx';
|
import DeleteModalTrigger from '../../delete_modal_trigger.jsx';
|
||||||
|
|
||||||
export default class DeleteIntegration extends React.Component {
|
export default class DeleteIntegration extends DeleteModalTrigger {
|
||||||
constructor(props) {
|
get triggerTitle() {
|
||||||
super(props);
|
return (
|
||||||
|
<FormattedMessage
|
||||||
this.handleConfirm = this.handleConfirm.bind(this);
|
id='installed_integrations.delete'
|
||||||
this.handleCancel = this.handleCancel.bind(this);
|
defaultMessage='Delete'
|
||||||
this.handleOpenModal = this.handleOpenModal.bind(this);
|
/>
|
||||||
|
);
|
||||||
this.state = {
|
|
||||||
showDeleteModal: false
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
handleOpenModal(e) {
|
get modalTitle() {
|
||||||
e.preventDefault();
|
return (
|
||||||
|
|
||||||
this.setState({
|
|
||||||
showDeleteModal: true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
handleConfirm() {
|
|
||||||
this.props.onDelete();
|
|
||||||
}
|
|
||||||
|
|
||||||
handleCancel() {
|
|
||||||
this.setState({
|
|
||||||
showDeleteModal: false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
const title = (
|
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='integrations.delete.confirm.title'
|
id='integrations.delete.confirm.title'
|
||||||
defaultMessage='Delete Integration'
|
defaultMessage='Delete Integration'
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const message = (
|
get modalMessage() {
|
||||||
|
return (
|
||||||
<div className='alert alert-warning'>
|
<div className='alert alert-warning'>
|
||||||
<i className='fa fa-warning'/>
|
<i className='fa fa-warning'/>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
@@ -51,35 +32,15 @@ export default class DeleteIntegration extends React.Component {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const confirmButton = (
|
get modalConfirmButton() {
|
||||||
|
return (
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='integrations.delete.confirm.button'
|
id='integrations.delete.confirm.button'
|
||||||
defaultMessage='Delete'
|
defaultMessage='Delete'
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
|
||||||
<span>
|
|
||||||
<a
|
|
||||||
href='#'
|
|
||||||
onClick={this.handleOpenModal}
|
|
||||||
>
|
|
||||||
<FormattedMessage
|
|
||||||
id='installed_integrations.delete'
|
|
||||||
defaultMessage='Delete'
|
|
||||||
/>
|
|
||||||
</a>
|
|
||||||
<ConfirmModal
|
|
||||||
show={this.state.showDeleteModal}
|
|
||||||
title={title}
|
|
||||||
message={message}
|
|
||||||
confirmButton={confirmButton}
|
|
||||||
onConfirm={this.handleConfirm}
|
|
||||||
onCancel={this.handleCancel}
|
|
||||||
/>
|
|
||||||
</span>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
3
webapp/i18n/en.json
Обычный файл → Исполняемый файл
3
webapp/i18n/en.json
Обычный файл → Исполняемый файл
@@ -1275,6 +1275,9 @@
|
|||||||
"emoji_list.add": "Add Custom Emoji",
|
"emoji_list.add": "Add Custom Emoji",
|
||||||
"emoji_list.creator": "Creator",
|
"emoji_list.creator": "Creator",
|
||||||
"emoji_list.delete": "Delete",
|
"emoji_list.delete": "Delete",
|
||||||
|
"emoji_list.delete.confirm.button": "Delete",
|
||||||
|
"emoji_list.delete.confirm.msg": "This action permanently deletes the custom emoji. Are you sure you want to delete it?",
|
||||||
|
"emoji_list.delete.confirm.title": "Delete Custom Emoji",
|
||||||
"emoji_list.empty": "No Custom Emoji Found",
|
"emoji_list.empty": "No Custom Emoji Found",
|
||||||
"emoji_list.header": "Custom Emoji",
|
"emoji_list.header": "Custom Emoji",
|
||||||
"emoji_list.help": "Custom emoji are available to everyone on your server. Type ':' in a message box to bring up the emoji selection menu. Other users may need to refresh the page before new emojis appear.",
|
"emoji_list.help": "Custom emoji are available to everyone on your server. Type ':' in a message box to bring up the emoji selection menu. Other users may need to refresh the page before new emojis appear.",
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user