Source: social/SocialButton.js

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

/**
 * Componente que renderiza boton para compartir en un red social. <a href="https://github.com/nygardk/react-share" target="_new">Documentacion de react-share</a>
 * @name Reactor.Components.Social.SocialButton
 * @param {("email"|"facebook"|"hatena"|"instapaper"|"line"|"linkedin"|"livejournal"|"mailru"|"ok"|"pinterest"|"pocket"|"reddit"|"telegram"|"tumblr"|"twitter"|"viber"|"vk"|"whatsapp"|"workplace")} name Nombre de la red social que se va a compartir con este botón
 * @param {string} options Json string con los parametros aceptados por el componente de red social que se está llamando (cada uno tiene parametros distintos ver la documentación)
 * @param {("true"|"false")} debug Si es true se envia a la consola información de depuración. Por defecto es false
 * @class
 * @example
<social_button name="" href="NombreOperacion" data='{"param": "value"}'>Instagram</social_button>
 */

export const SocialButton = ({ name, options, children, debug = "false" }) => {

  const Component = useMemo(() => buttons[name], [name]);
  const objOptions = useMemo(() => processOptions(options), [options]);

  useEffect(()=>{
    debug === "true" && console.log({name, options, objOptions})
  }, [])

  return (
    <Component {...objOptions}>
      {children}
    </Component>
  )
}
const buttons = {
  email: ReactShare.EmailShareButton,
  facebook: ReactShare.FacebookShareButton,
  hatena: ReactShare.HatenaShareButton,
  instapaper: ReactShare.InstapaperShareButton,
  line: ReactShare.LineShareButton,
  linkedin: ReactShare.LinkedinShareButton,
  livejournal: ReactShare.LivejournalShareButton,
  mailru: ReactShare.MailruShareButton,
  ok: ReactShare.OKShareButton,
  pinterest: ReactShare.PinterestShareButton,
  pocket: ReactShare.PocketShareButton,
  reddit: ReactShare.RedditShareButton,
  telegram: ReactShare.TelegramShareButton,
  tumblr: ReactShare.TumblrShareButton,
  twitter: ReactShare.TwitterShareButton,
  viber: ReactShare.ViberShareButton,
  vk: ReactShare.VKShareButton,
  whatsapp: ReactShare.WhatsappShareButton,
  workplace: ReactShare.WorkplaceShareButton,
};