Source: social/SocialIcon.js

import React, {useMemo } from "react";
import { processOptions } from "../../_core";
import * as ReactShare from "react-share";

/**
 * Componente que renderiza un icono de red social. Docs: https://github.com/nygardk/react-share
 * @name Reactor.Components.Social.SocialIcon
 * @param {("email"|"facebook"|"facebookMessenger"|"hatena"|"instapaper"|"line"|"linkedin"|"livejournal"|"mailru"|"ok"|"pinterest"|"pocket"|"reddit"|"telegram"|"tumblr"|"twitter"|"viber"|"vk"|"weibo"|"whatsapp"|"workplace")} name Nombre de la red social
 * @param {string} options Opciones del componente, ver en la documentacion los posibles parametros
 * @class
 * @example
<social_icon></social_icon>
 */

export const SocialIcon = ({ name, options, children }) => {
  const Component = useMemo(() => icons[name], [name]);
  const objOptions = useMemo(() => processOptions(options), [options]);
  return (
    <Component {...objOptions}>
      {children}
    </Component>
  )
}

const icons = {
  email: ReactShare.EmailIcon,
  facebook: ReactShare.FacebookIcon,
  facebookMessenger: ReactShare.FacebookMessengerIcon,
  hatena: ReactShare.HatenaIcon,
  instapaper: ReactShare.InstapaperIcon,
  line: ReactShare.LineIcon,
  linkedin: ReactShare.LinkedinIcon,
  livejournal: ReactShare.LivejournalIcon,
  mailru: ReactShare.MailruIcon,
  ok: ReactShare.OKIcon,
  pinterest: ReactShare.PinterestIcon,
  pocket: ReactShare.PocketIcon,
  reddit: ReactShare.RedditIcon,
  telegram: ReactShare.TelegramIcon,
  tumblr: ReactShare.TumblrIcon,
  twitter: ReactShare.TwitterIcon,
  viber: ReactShare.ViberIcon,
  vk: ReactShare.VKIcon,
  weibo: ReactShare.WeiboIcon,
  whatsapp: ReactShare.WhatsappIcon,
  workplace: ReactShare.WorkplaceIcon
};