share-handler.js 2.98 KB
import {get, first} from 'lodash';
const qs = require('yoho-qs');
const cookie = require('yoho-cookie');

let app_version = cookie.get('app_version') || qs.app_version || '';

function _version2num(version) {
  if (!version) {
    return 0;
  }

  let [m, j, b] = version.split(',');

  return (+m) * 10000 + (+j) * 100 + (+b);
}

function versionCompare(left, right) {
  let leftNum = _version2num(left);
  let rightNum = _version2num(right);

  if (leftNum === rightNum) {
    return 0;
  } else if (leftNum > rightNum) {
    return 1;
  } else {
    return -1;
  }
}

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]}`;
  }

  const requiredVersion = '6.9.11';
  let hideType = ['7', '8', '9'];

  if (versionCompare(app_version, requiredVersion) >= 0) {
    hideType = ['8', '9'];
  }

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

const getTopicShareData = (topic) => {
  return {
    title: topic.topicName,
    imgUrl: handleProtocol(topic.topicImageUrl),
    link: handleProtocol(`${location.origin}/grass/topic/${topic.topicId}?share=true`),
    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}?share=true`),
    desc: author.signature || '',
    hideType: ['7', '8', '9']
  };
};

export {
  getDetailShareData,
  getTopicShareData,
  getAuthorShareData
};