diff --git a/webapp/components/delete_modal_trigger.jsx b/webapp/components/delete_modal_trigger.jsx
new file mode 100644
index 0000000000..9ccbf33a24
--- /dev/null
+++ b/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 (
+
+
+ { this.triggerTitle }
+
+
+
+ );
+ }
+}
+
+DeleteModalTrigger.propTypes = {
+ onDelete: React.PropTypes.func.isRequired
+};
diff --git a/webapp/components/emoji/components/delete_emoji_modal.jsx b/webapp/components/emoji/components/delete_emoji_modal.jsx
new file mode 100644
index 0000000000..604e3a27ba
--- /dev/null
+++ b/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 (
+
+ );
+ }
+
+ get modalTitle() {
+ return (
+
+ );
+ }
+
+ get modalMessage() {
+ return (
+
+
+
+
+ );
+ }
+
+ get modalConfirmButton() {
+ return (
+
+ );
+ }
+}
+
+DeleteEmoji.propTypes = {
+ onDelete: React.PropTypes.func.isRequired
+};
diff --git a/webapp/components/emoji/components/emoji_list_item.jsx b/webapp/components/emoji/components/emoji_list_item.jsx
index f2ed82ba79..019b0ca935 100644
--- a/webapp/components/emoji/components/emoji_list_item.jsx
+++ b/webapp/components/emoji/components/emoji_list_item.jsx
@@ -4,6 +4,7 @@
import React from 'react';
import EmojiStore from 'stores/emoji_store.jsx';
+import DeleteEmoji from './delete_emoji_modal.jsx';
import * as Utils from 'utils/utils.jsx';
@@ -80,15 +81,7 @@ export default class EmojiListItem extends React.Component {
let deleteButton = null;
if (this.props.onDelete) {
deleteButton = (
-
-
-
+
);
}
diff --git a/webapp/components/integrations/components/delete_integration.jsx b/webapp/components/integrations/components/delete_integration.jsx
index 442ac57f76..8e2e27596c 100644
--- a/webapp/components/integrations/components/delete_integration.jsx
+++ b/webapp/components/integrations/components/delete_integration.jsx
@@ -1,48 +1,29 @@
import React from 'react';
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 {
- constructor(props) {
- super(props);
-
- this.handleConfirm = this.handleConfirm.bind(this);
- this.handleCancel = this.handleCancel.bind(this);
- this.handleOpenModal = this.handleOpenModal.bind(this);
-
- this.state = {
- showDeleteModal: false
- };
+export default class DeleteIntegration extends DeleteModalTrigger {
+ get triggerTitle() {
+ return (
+
+ );
}
- handleOpenModal(e) {
- e.preventDefault();
-
- this.setState({
- showDeleteModal: true
- });
- }
-
- handleConfirm() {
- this.props.onDelete();
- }
-
- handleCancel() {
- this.setState({
- showDeleteModal: false
- });
- }
-
- render() {
- const title = (
+ get modalTitle() {
+ return (
);
+ }
- const message = (
+ get modalMessage() {
+ return (
);
+ }
- const confirmButton = (
+ get modalConfirmButton() {
+ return (
);
-
- return (
-
-
-
-
-
-
- );
}
}
diff --git a/webapp/i18n/en.json b/webapp/i18n/en.json
old mode 100644
new mode 100755
index bc30b53e72..85974b7215
--- a/webapp/i18n/en.json
+++ b/webapp/i18n/en.json
@@ -1275,6 +1275,9 @@
"emoji_list.add": "Add Custom Emoji",
"emoji_list.creator": "Creator",
"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.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.",