exports.AttachmentView = function()

in BuildAnIntelligentBot/src/ChatBot/wwwroot/built/Attachment.js [93:226]


exports.AttachmentView = function (props) {
    if (!props.attachment)
        return;
    var attachment = props.attachment;
    var onCardAction = function (cardAction) { return cardAction &&
        (function (e) {
            props.onCardAction(cardAction.type, cardAction.value);
            e.stopPropagation();
        }); };
    var attachedImage = function (images) { return images && images.length > 0 &&
        React.createElement(Media, { src: images[0].url, onLoad: props.onImageLoad, onClick: onCardAction(images[0].tap), alt: images[0].alt }); };
    var getRichCardContentMedia = function (type, content) {
        if (!content.media || content.media.length === 0) {
            return null;
        }
        // rendering every media in the media array. Validates every type as image, video, audio or a function that returns those values.
        return content.media.map(function (md, i) {
            var t = (typeof type === 'string') ? type : type(md.url);
            return React.createElement(Media, { type: t, src: md.url, onLoad: props.onImageLoad, poster: content.image && content.image.url, autoPlay: content.autostart, loop: content.autoloop, key: i });
        });
    };
    switch (attachment.contentType) {
        case "application/vnd.microsoft.card.hero":
            if (!attachment.content)
                return null;
            var heroCardBuilder_1 = new CardBuilder.AdaptiveCardBuilder();
            if (attachment.content.images) {
                attachment.content.images.forEach(function (img) { return heroCardBuilder_1.addImage(img.url, null, img.tap); });
            }
            heroCardBuilder_1.addCommon(attachment.content);
            return (React.createElement(AdaptiveCardContainer_1.default, { className: "hero", nativeCard: heroCardBuilder_1.card, onImageLoad: props.onImageLoad, onCardAction: props.onCardAction, onClick: onCardAction(attachment.content.tap) }));
        case "application/vnd.microsoft.card.thumbnail":
            if (!attachment.content)
                return null;
            var thumbnailCardBuilder = new CardBuilder.AdaptiveCardBuilder();
            if (attachment.content.images && attachment.content.images.length > 0) {
                var columns_1 = thumbnailCardBuilder.addColumnSet([75, 25]);
                thumbnailCardBuilder.addTextBlock(attachment.content.title, { size: adaptivecards_1.TextSize.Medium, weight: adaptivecards_1.TextWeight.Bolder }, columns_1[0]);
                thumbnailCardBuilder.addTextBlock(attachment.content.subtitle, { isSubtle: true, wrap: true }, columns_1[0]);
                thumbnailCardBuilder.addImage(attachment.content.images[0].url, columns_1[1], attachment.content.images[0].tap);
                thumbnailCardBuilder.addTextBlock(attachment.content.text, { wrap: true });
                thumbnailCardBuilder.addButtons(attachment.content.buttons);
            }
            else {
                thumbnailCardBuilder.addCommon(attachment.content);
            }
            return (React.createElement(AdaptiveCardContainer_1.default, { className: "thumbnail", nativeCard: thumbnailCardBuilder.card, onImageLoad: props.onImageLoad, onCardAction: props.onCardAction, onClick: onCardAction(attachment.content.tap) }));
        case "application/vnd.microsoft.card.video":
            if (!attachment.content || !attachment.content.media || attachment.content.media.length === 0)
                return null;
            return (React.createElement(AdaptiveCardContainer_1.default, { className: "video", nativeCard: CardBuilder.buildCommonCard(attachment.content), onCardAction: props.onCardAction }, getRichCardContentMedia('video', attachment.content)));
        case "application/vnd.microsoft.card.animation":
            if (!attachment.content || !attachment.content.media || attachment.content.media.length === 0)
                return null;
            return (React.createElement(AdaptiveCardContainer_1.default, { className: "animation", nativeCard: CardBuilder.buildCommonCard(attachment.content), onCardAction: props.onCardAction }, getRichCardContentMedia(mediaType, attachment.content)));
        case "application/vnd.microsoft.card.audio":
            if (!attachment.content || !attachment.content.media || attachment.content.media.length === 0)
                return null;
            return (React.createElement(AdaptiveCardContainer_1.default, { className: "audio", nativeCard: CardBuilder.buildCommonCard(attachment.content), onCardAction: props.onCardAction }, getRichCardContentMedia('audio', attachment.content)));
        case "application/vnd.microsoft.card.signin":
            if (!attachment.content)
                return null;
            return (React.createElement(AdaptiveCardContainer_1.default, { className: "signin", nativeCard: CardBuilder.buildCommonCard(attachment.content), onCardAction: props.onCardAction }));
        case "application/vnd.microsoft.card.oauth":
            if (!attachment.content)
                return null;
            return (React.createElement(AdaptiveCardContainer_1.default, { className: "signin", nativeCard: CardBuilder.buildOAuthCard(attachment.content), onCardAction: props.onCardAction }));
        case "application/vnd.microsoft.card.receipt":
            if (!attachment.content)
                return null;
            var receiptCardBuilder_1 = new CardBuilder.AdaptiveCardBuilder();
            receiptCardBuilder_1.addTextBlock(attachment.content.title, { size: adaptivecards_1.TextSize.Medium, weight: adaptivecards_1.TextWeight.Bolder });
            var columns_2 = receiptCardBuilder_1.addColumnSet([75, 25]);
            attachment.content.facts && attachment.content.facts.map(function (fact, i) {
                receiptCardBuilder_1.addTextBlock(fact.key, { size: adaptivecards_1.TextSize.Medium }, columns_2[0]);
                receiptCardBuilder_1.addTextBlock(fact.value, { size: adaptivecards_1.TextSize.Medium, horizontalAlignment: adaptivecards_1.HorizontalAlignment.Right }, columns_2[1]);
            });
            attachment.content.items && attachment.content.items.map(function (item, i) {
                if (item.image) {
                    var columns2 = receiptCardBuilder_1.addColumnSet([15, 75, 10]);
                    receiptCardBuilder_1.addImage(item.image.url, columns2[0], item.image.tap);
                    receiptCardBuilder_1.addTextBlock(item.title, { size: adaptivecards_1.TextSize.Medium, weight: adaptivecards_1.TextWeight.Bolder, wrap: true }, columns2[1]);
                    receiptCardBuilder_1.addTextBlock(item.subtitle, { size: adaptivecards_1.TextSize.Medium, wrap: true }, columns2[1]);
                    receiptCardBuilder_1.addTextBlock(item.price, { horizontalAlignment: adaptivecards_1.HorizontalAlignment.Right }, columns2[2]);
                }
                else {
                    var columns3 = receiptCardBuilder_1.addColumnSet([75, 25]);
                    receiptCardBuilder_1.addTextBlock(item.title, { size: adaptivecards_1.TextSize.Medium, weight: adaptivecards_1.TextWeight.Bolder, wrap: true }, columns3[0]);
                    receiptCardBuilder_1.addTextBlock(item.subtitle, { size: adaptivecards_1.TextSize.Medium, wrap: true }, columns3[0]);
                    receiptCardBuilder_1.addTextBlock(item.price, { horizontalAlignment: adaptivecards_1.HorizontalAlignment.Right }, columns3[1]);
                }
            });
            if (exists(attachment.content.vat)) {
                var vatCol = receiptCardBuilder_1.addColumnSet([75, 25]);
                receiptCardBuilder_1.addTextBlock(props.format.strings.receiptVat, { size: adaptivecards_1.TextSize.Medium, weight: adaptivecards_1.TextWeight.Bolder }, vatCol[0]);
                receiptCardBuilder_1.addTextBlock(attachment.content.vat, { horizontalAlignment: adaptivecards_1.HorizontalAlignment.Right }, vatCol[1]);
            }
            if (exists(attachment.content.tax)) {
                var taxCol = receiptCardBuilder_1.addColumnSet([75, 25]);
                receiptCardBuilder_1.addTextBlock(props.format.strings.receiptTax, { size: adaptivecards_1.TextSize.Medium, weight: adaptivecards_1.TextWeight.Bolder }, taxCol[0]);
                receiptCardBuilder_1.addTextBlock(attachment.content.tax, { horizontalAlignment: adaptivecards_1.HorizontalAlignment.Right }, taxCol[1]);
            }
            if (exists(attachment.content.total)) {
                var totalCol = receiptCardBuilder_1.addColumnSet([75, 25]);
                receiptCardBuilder_1.addTextBlock(props.format.strings.receiptTotal, { size: adaptivecards_1.TextSize.Medium, weight: adaptivecards_1.TextWeight.Bolder }, totalCol[0]);
                receiptCardBuilder_1.addTextBlock(attachment.content.total, { horizontalAlignment: adaptivecards_1.HorizontalAlignment.Right, size: adaptivecards_1.TextSize.Medium, weight: adaptivecards_1.TextWeight.Bolder }, totalCol[1]);
            }
            receiptCardBuilder_1.addButtons(attachment.content.buttons);
            return (React.createElement(AdaptiveCardContainer_1.default, { className: 'receipt', nativeCard: receiptCardBuilder_1.card, onCardAction: props.onCardAction, onClick: onCardAction(attachment.content.tap) }));
        case "application/vnd.microsoft.card.adaptive":
            if (!attachment.content)
                return null;
            return (React.createElement(AdaptiveCardContainer_1.default, { jsonCard: attachment.content, onImageLoad: props.onImageLoad, onCardAction: props.onCardAction }));
        // Deprecated format for Skype channels. For testing legacy bots in Emulator only.
        case "application/vnd.microsoft.card.flex":
            if (!attachment.content)
                return null;
            return (React.createElement(AdaptiveCardContainer_1.default, { className: "flex", nativeCard: CardBuilder.buildCommonCard(attachment.content), onCardAction: props.onCardAction }, attachedImage(attachment.content.images)));
        case "image/svg+xml":
        case "image/png":
        case "image/jpg":
        case "image/jpeg":
        case "image/gif":
            return React.createElement(Media, { src: attachment.contentUrl, onLoad: props.onImageLoad });
        case "audio/mpeg":
        case "audio/mp4":
            return React.createElement(Media, { type: 'audio', src: attachment.contentUrl });
        case "video/mp4":
            return React.createElement(Media, { type: 'video', poster: attachment.thumbnailUrl, src: attachment.contentUrl, onLoad: props.onImageLoad });
        default:
            var unknownAttachment = props.attachment;
            return React.createElement(Unknown, { format: props.format, contentType: unknownAttachment.contentType, contentUrl: unknownAttachment.contentUrl, name: unknownAttachment.name });
    }
};