summaryrefslogtreecommitdiffstats
path: root/webapp/components/post_view/post_attachment.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/components/post_view/post_attachment.jsx')
-rw-r--r--webapp/components/post_view/post_attachment.jsx46
1 files changed, 46 insertions, 0 deletions
diff --git a/webapp/components/post_view/post_attachment.jsx b/webapp/components/post_view/post_attachment.jsx
index 36fe3bf9f..cc7aa509c 100644
--- a/webapp/components/post_view/post_attachment.jsx
+++ b/webapp/components/post_view/post_attachment.jsx
@@ -4,6 +4,8 @@
import * as TextFormatting from 'utils/text_formatting.jsx';
import {localizeMessage} from 'utils/utils.jsx';
+import * as PostActions from 'actions/post_actions.jsx';
+
import $ from 'jquery';
import React from 'react';
import PropTypes from 'prop-types';
@@ -12,6 +14,11 @@ export default class PostAttachment extends React.PureComponent {
static propTypes = {
/**
+ * The post id
+ */
+ postId: PropTypes.string.isRequired,
+
+ /**
* The attachment to render
*/
attachment: PropTypes.object.isRequired
@@ -20,6 +27,8 @@ export default class PostAttachment extends React.PureComponent {
constructor(props) {
super(props);
+ this.handleActionButtonClick = this.handleActionButtonClick.bind(this);
+ this.getActionView = this.getActionView.bind(this);
this.getFieldsTable = this.getFieldsTable.bind(this);
this.getInitState = this.getInitState.bind(this);
this.shouldCollapse = this.shouldCollapse.bind(this);
@@ -80,6 +89,41 @@ export default class PostAttachment extends React.PureComponent {
return TextFormatting.formatText(text) + `<div><a class="attachment-link-more" href="#">${localizeMessage('post_attachment.more', 'Show more...')}</a></div>`;
}
+ getActionView() {
+ const actions = this.props.attachment.actions;
+ if (!actions || !actions.length) {
+ return '';
+ }
+
+ const buttons = [];
+
+ actions.forEach((action) => {
+ if (!action.id || !action.name) {
+ return;
+ }
+ buttons.push(
+ <button
+ key={action.id}
+ onClick={() => this.handleActionButtonClick(action.id)}
+ >
+ {action.name}
+ </button>
+ );
+ });
+
+ return (
+ <div
+ className='attachment-actions'
+ >
+ {buttons}
+ </div>
+ );
+ }
+
+ handleActionButtonClick(actionId) {
+ PostActions.doPostAction(this.props.postId, actionId);
+ }
+
getFieldsTable() {
const fields = this.props.attachment.fields;
if (!fields || !fields.length) {
@@ -275,6 +319,7 @@ export default class PostAttachment extends React.PureComponent {
}
const fields = this.getFieldsTable();
+ const actions = this.getActionView();
let useBorderStyle;
if (data.color && data.color[0] === '#') {
@@ -301,6 +346,7 @@ export default class PostAttachment extends React.PureComponent {
{text}
{image}
{fields}
+ {actions}
</div>
{thumb}
<div style={{clear: 'both'}}/>