share-handler.js 2.12 KB
import {get, first} from 'lodash';

const DEFAULT_SHARE_IMAGE = 'http://static.yohobuy.com/m/v1/img/touch/apple-touch-icon-144x144-precomposed-new.png';

function handleProtocol(url) {
  if (url.indexOf('//') < 0 || url.indexOf('http') >= 0) {
    return url;
  }

  url = url.split('//');
  url[0] = 'https:';

  return url.join('//');
}

const getDetailShareData = (article) => {
  let shareImage = '';

  let desc = '';

  if (article.sort === 2) {
    shareImage = article.coverImage;
    desc = article.articleTitle;
  } else if (article.sort === 4) {
    shareImage = article.coverUrl;
    desc = article.content;
  } else {
    let blockList = get(article, 'blockList', []);

    shareImage = get(first(blockList.filter(block => block.templateKey === 'image')), 'contentData', '');
    desc = get(blockList.filter(block => block.templateKey === 'text'), '[0].contentData', '');
  }

  if (shareImage && shareImage.indexOf('//') >= 0) {
    shareImage = `${window ? window.location.protocol : ''}//${shareImage.split('//')[1]}`;
  }

  return {
    title: `@${article.authorName} 在有货社区上发了一篇内容,快点开看看!`,
    imgUrl: handleProtocol(get(shareImage.split('?'), '[0]') || DEFAULT_SHARE_IMAGE),
    link: handleProtocol(`${window ? window.location.origin : ''}/grass/article/${article.articleId}`),
    desc,
    hideType: ['7', '8', '9']
  };
};

const getTopicShareData = (topic) => {
  return {
    title: topic.topicName,
    imgUrl: handleProtocol(topic.topicImageUrl),
    link: handleProtocol(`${location.origin}/grass/topic/${topic.topicId}`),
    desc: '我在有货的社区发现一个热门话题。' + topic.topicDesc,
    hideType: ['7', '8', '9']
  };
};

const getAuthorShareData = (author) => {
  return {
    title: `@${author.nickName} YO!社区,一起来玩潮流!`,
    imgUrl: handleProtocol(get(author, 'headIco', '').split('?')[0] || DEFAULT_SHARE_IMAGE),
    link: handleProtocol(`${location.origin}/grass/author/${author.authorType}/${author.authorUid}`),
    desc: author.signature || '',
    hideType: ['7', '8', '9']
  };
};

export {
  getDetailShareData,
  getTopicShareData,
  getAuthorShareData
};