PLT-857: Support for Incoming Webhooks - Try #2
Этот коммит содержится в:
@@ -7,7 +7,7 @@ const Utils = require('../utils/utils.jsx');
|
||||
const Constants = require('../utils/constants.jsx');
|
||||
const TextFormatting = require('../utils/text_formatting.jsx');
|
||||
const twemoji = require('twemoji');
|
||||
const PostAttachmentList = require('./post_attachment_list.jsx');
|
||||
const PostBodyAdditionalContent = require('./post_body_additional_content.jsx');
|
||||
|
||||
export default class PostBody extends React.Component {
|
||||
constructor(props) {
|
||||
@@ -317,15 +317,6 @@ export default class PostBody extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
let postAttachments = '';
|
||||
if (post.attachments && post.attachments.length) {
|
||||
postAttachments = (
|
||||
<PostAttachmentList
|
||||
attachments={post.attachments}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='post-body'>
|
||||
{comment}
|
||||
@@ -341,7 +332,9 @@ export default class PostBody extends React.Component {
|
||||
dangerouslySetInnerHTML={{__html: TextFormatting.formatText(this.state.message)}}
|
||||
/>
|
||||
</div>
|
||||
{postAttachments}
|
||||
<PostBodyAdditionalContent
|
||||
post={post}
|
||||
/>
|
||||
{fileAttachmentHolder}
|
||||
{embed}
|
||||
</div>
|
||||
|
||||
56
web/react/components/post_body_additional_content.jsx
Обычный файл
56
web/react/components/post_body_additional_content.jsx
Обычный файл
@@ -0,0 +1,56 @@
|
||||
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
|
||||
// See License.txt for license information.
|
||||
|
||||
const PostAttachmentList = require('./post_attachment_list.jsx');
|
||||
|
||||
export default class PostBodyAdditionalContent extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.getSlackAttachment = this.getSlackAttachment.bind(this);
|
||||
this.getComponent = this.getComponent.bind(this);
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
this.setState({type: this.props.post.type, shouldRender: Boolean(this.props.post.type)});
|
||||
}
|
||||
|
||||
getSlackAttachment() {
|
||||
const attachments = this.props.post.props && this.props.post.props.attachments || [];
|
||||
return (
|
||||
<PostAttachmentList
|
||||
key={'post_body_additional_content' + this.props.post.id}
|
||||
attachments={attachments}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
getComponent() {
|
||||
switch (this.state.type) {
|
||||
case 'slack_attachment':
|
||||
return this.getSlackAttachment();
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
let content = [];
|
||||
|
||||
if (this.state.shouldRender) {
|
||||
const component = this.getComponent();
|
||||
|
||||
if (component) {
|
||||
content = component;
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
{content}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
PostBodyAdditionalContent.propTypes = {
|
||||
post: React.PropTypes.object.isRequired
|
||||
};
|
||||
@@ -668,6 +668,7 @@ body.ios {
|
||||
}
|
||||
.attachment__image {
|
||||
max-width: 100%;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
.attachment__thumb-container {
|
||||
width: 20%;
|
||||
@@ -682,5 +683,8 @@ body.ios {
|
||||
.attachment___field-caption {
|
||||
font-weight: 700;
|
||||
}
|
||||
.attachment___field p {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
web/web.go
11
web/web.go
@@ -990,6 +990,15 @@ func incomingWebhook(c *api.Context, w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
channelName := parsedRequest.ChannelName
|
||||
webhookType := parsedRequest.Type
|
||||
|
||||
if parsedRequest.Attachments != nil {
|
||||
if len(parsedRequest.Props) == 0 {
|
||||
parsedRequest.Props = make(model.StringInterface)
|
||||
}
|
||||
parsedRequest.Props["attachments"] = parsedRequest.Attachments
|
||||
webhookType = model.POST_SLACK_ATTACHMENT
|
||||
}
|
||||
|
||||
var hook *model.IncomingWebhook
|
||||
if result := <-hchan; result.Err != nil {
|
||||
@@ -1039,7 +1048,7 @@ func incomingWebhook(c *api.Context, w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := api.CreateWebhookPost(c, channel.Id, text, overrideUsername, overrideIconUrl); err != nil {
|
||||
if _, err := api.CreateWebhookPost(c, channel.Id, text, overrideUsername, overrideIconUrl, parsedRequest.Props, webhookType); err != nil {
|
||||
c.Err = err
|
||||
return
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user