import * as React from "react"; import { ButtonBody, ButtonProps, inflateButtonProps } from "../controls/Button"; import { classList } from "../util"; interface SocialButtonProps { className?: string; url?: string; type?: "facebook" | "twitter" | "discourse" | "google-classroom" | "microsoft-teams" | "whatsapp"; heading?: string; } export const SocialButton = (props: SocialButtonProps) => { const { className, url, type, heading } = props; const classes = classList(className, "social-button", "type"); const socialOptions = pxt.appTarget.appTheme.socialOptions || {}; let socialUrl = ""; switch (type) { case "facebook": { socialUrl = `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(url)}`; break; } case "twitter": { let twitterText = lf("Check out what I made!"); if (socialOptions.twitterHandle && socialOptions.orgTwitterHandle) { twitterText = lf("Check out what I made with @{0} and @{1}!", socialOptions.twitterHandle, socialOptions.orgTwitterHandle); } else if (socialOptions.twitterHandle) { twitterText = lf("Check out what I made with @{0}!", socialOptions.twitterHandle); } else if (socialOptions.orgTwitterHandle) { twitterText = lf("Check out what I made with @{0}!", socialOptions.orgTwitterHandle); } socialUrl = `https://twitter.com/intent/tweet?url=${encodeURIComponent(url)}` + `&text=${encodeURIComponent(twitterText)}` + (socialOptions.hashtags ? `&hashtags=${encodeURIComponent(socialOptions.hashtags)}` : '') + (socialOptions.related ? `&related=${encodeURIComponent(socialOptions.related)}` : ''); break; } case "discourse": { // https://meta.discourse.org/t/compose-a-new-pre-filled-topic-via-url/28074 socialUrl = `${socialOptions.discourse || "https://forum.makecode.com/"}new-topic?title=${encodeURIComponent(url)}`; if (socialOptions.discourseCategory) socialUrl += `&category=${encodeURIComponent(socialOptions.discourseCategory)}`; break; } case "google-classroom": socialUrl = `https://classroom.google.com/share?url=${encodeURIComponent(url)}`; break; case "microsoft-teams": socialUrl = `https://teams.microsoft.com/share?href=${encodeURIComponent(url)}`; break; case "whatsapp": socialUrl = `https://api.whatsapp.com/send?text=${encodeURIComponent(url)}`; break; } const handleClick = () => { pxt.tickEvent(`share.social.${type}`); } switch (type) { // Icon buttons case "facebook": case "twitter": case "discourse": case "whatsapp": return ( ); // Image buttons case "google-classroom": case "microsoft-teams": return ( } heading={heading} onClick={handleClick} /> ); } } const LinkButton = (props: ButtonProps & { heading: string }) => { const inflatedProps = inflateButtonProps(props); const onClick = (ev: React.MouseEvent) => { if (props.onClick) { props.onClick(); } ev.stopPropagation(); // if we are in game, don't call preventDefault so that the default browser // navigation behavior occurs if (!pxt.BrowserUtils.isInGame()) { ev.preventDefault(); pxt.BrowserUtils.popupWindow(props.href, props.heading, 600, 600); } } return ( ); }