PLT-857: Support for Incoming Webhooks - Try #2

Этот коммит содержится в:
Florian Orben
2015-11-05 23:32:44 +01:00
родитель 4b6eb56415
Коммит b085bc2d56
10 изменённых файлов: 182 добавлений и 41 удалений

Просмотреть файл

@@ -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>

Просмотреть файл

@@ -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;
}
}
}

Просмотреть файл

@@ -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
}