react-share#RedditShareButton JavaScript Examples
The following examples show how to use
react-share#RedditShareButton.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: share.js From blog with Apache License 2.0 | 8 votes |
ShareButton = (props) => {
const { location, siteMetadata, post } = props;
const twitter = [ siteMetadata.social.twitter ];
const url = siteMetadata.siteUrl + location.pathname;
const iconSize = 30;
const iconStyle = {
paddingRight: "0.3em",
marginBottom: "0.2em"
};
return (
<>
<TwitterShareButton url={url} quote={url} title={post.title} hashtags={post.tags} related={twitter} style={iconStyle}>
<TwitterIcon size={iconSize}/>
</TwitterShareButton>
<LinkedinShareButton url={url} title={post.title} quote={url} source={siteMetadata.siteUrl} style={iconStyle}>
<LinkedinIcon size={iconSize}/>
</LinkedinShareButton>
<FacebookShareButton url={url} quote={url} style={iconStyle}>
<FacebookIcon size={iconSize}/>
</FacebookShareButton>
<RedditShareButton url={url} quote={url} title={post.title} style={iconStyle}>
<RedditIcon size={iconSize}/>
</RedditShareButton>
<EmailShareButton url={url} quote={url} subject={post.title} style={iconStyle}>
<EmailIcon size={iconSize}/>
</EmailShareButton>
</>
);
}
Example #2
Source File: ShareButtons.jsx From Corona-tracker with MIT License | 6 votes |
ShareButtons = () => {
const url = 'https://coronatracker.squarespace.com';
return (
<>
<FacebookShareButton url={url}>
<FacebookIcon size={32} round />
</FacebookShareButton>
<LinkedinShareButton url={url}>
<LinkedinIcon size={32} round />
</LinkedinShareButton>
<TwitterShareButton url={url}>
<TwitterIcon size={32} round />
</TwitterShareButton>
<RedditShareButton url={url}>
<RedditIcon size={32} round />
</RedditShareButton>
<TelegramShareButton url={url}>
<TelegramIcon size={32} round />
</TelegramShareButton>
</>
);
}
Example #3
Source File: index.js From gatsby-blog-mdx with MIT License | 6 votes |
ShareButtons = ({ location }) => {
return (
<div className="share-buttons-wrap">
{config.shareButtons.email && (
<EmailShareButton url={location}>
<EmailIcon round size={32} />
</EmailShareButton>
)}
{config.shareButtons.facebook && (
<FacebookShareButton url={location}>
<FacebookIcon round size={32} />
</FacebookShareButton>
)}
{config.shareButtons.twitter && (
<TwitterShareButton url={location}>
<TwitterIcon round size={32} />
</TwitterShareButton>
)}
{config.shareButtons.reddit && (
<RedditShareButton url={location}>
<RedditIcon round size={32} />
</RedditShareButton>
)}
{config.shareButtons.linkedIn && (
<LinkedinShareButton url={location}>
<LinkedinIcon round size={32} />
</LinkedinShareButton>
)}
</div>
)
}
Example #4
Source File: SocialMediaButtons.js From covid-19 with MIT License | 6 votes |
SocialMediaButtons = (props) => {
const location = useLocation();
let url;
if (props.url) {
url = props.url;
} else {
url = 'https://covid-19.direct' + location.pathname;
}
const bgStyle = {};
if (props.backgroundColor) {
bgStyle.fill = props.backgroundColor;
}
return (
<div className={props.className}>
{[
[FacebookShareButton, FacebookIcon],
[TwitterShareButton, TwitterIcon],
[RedditShareButton, RedditIcon],
[WhatsappShareButton, WhatsappIcon],
[EmailShareButton, EmailIcon],
].map(([Button, Icon], i) => (
<Button className={props.buttonClassName} url={url} quote={QUOTE} key={i}>
<Icon
size={props.size || '1em'}
round={true}
bgStyle={bgStyle}
iconFillColor={props.iconColor}
/>
</Button>
))}
</div>
);
}
Example #5
Source File: sharebuttons.js From staticwebsitehosting with MIT License | 5 votes |
buttonConfigs = { twitter: { Button: TwitterShareButton, Icon: TwitterIcon }, facebook: { Button: FacebookShareButton, Icon: FacebookIcon }, reddit: { Button: RedditShareButton, Icon: RedditIcon }, }
Example #6
Source File: ShareModal.js From mern-social-media with MIT License | 5 votes |
ShareModal = ({ url, theme, setIsShare }) => {
return (
<div className="share_modal">
<div className="share_modal-container">
<div className="share_modal-header">
<span>Share to...</span>
<span onClick={() => setIsShare(false)}>×</span>
</div>
<div
className=" share_modal-body"
style={{ filter: theme ? "invert(1)" : "invert(0)" }}
>
<FacebookShareButton url={url}>
<FacebookIcon round={true} size={32} />
</FacebookShareButton>
<TwitterShareButton url={url}>
<TwitterIcon round={true} size={32} />
</TwitterShareButton>
<EmailShareButton url={url}>
<EmailIcon round={true} size={32} />
</EmailShareButton>
<TelegramShareButton url={url}>
<TelegramIcon round={true} size={32} />
</TelegramShareButton>
<WhatsappShareButton url={url}>
<WhatsappIcon round={true} size={32} />
</WhatsappShareButton>
<PinterestShareButton url={url}>
<PinterestIcon round={true} size={32} />
</PinterestShareButton>
<RedditShareButton url={url}>
<RedditIcon round={true} size={32} />
</RedditShareButton>
<LinkedinShareButton url={url}>
<LineIcon round={true} size={32} />
</LinkedinShareButton>
</div>
</div>
</div>
);
}
Example #7
Source File: ShareModal.js From gophie-web with MIT License | 4 votes |
ShareModal = (props) => {
const [btnCopyText, setBtnCopyText] = useState(copy.defaultText);
const [isUrlCopied, setUrlCopied] = useState(false);
const copyURLToClipboard = () => {
setUrlCopied(true);
};
useEffect(() => {
if (isUrlCopied === true) {
setBtnCopyText(copy.copiedText);
setTimeout(() => {
setBtnCopyText(copy.defaultText);
setUrlCopied(false);
}, 2000);
}
}, [isUrlCopied])
const { movie } = props;
let url = "";
// console.log(movie.referral_id);
if (window.location.hostname === "localhost") {
url = `localhost:${window.location.port}/shared/${movie.referral_id}`;
} else {
url = `https://gophie.cam/shared/${movie.referral_id}`;
}
return (
<>
<Modal
show={props.display}
onHide={props.onHide}
className="share-card"
centered
aria-labelledby="contained-modal-title-vcenter"
>
<Modal.Header closeButton>
<Modal.Title>Share Movie</Modal.Title>
</Modal.Header>
<Modal.Body className="show-grid mt-5">
<Container>
<Row className="justify-content-between">
<FacebookShareButton
url={url}
quote={movie.name}
className="mb-2 mr-3"
>
<FacebookIcon size={50} round={true} />
</FacebookShareButton>
<TwitterShareButton
url={url}
title={movie.name}
className="mb-2 mr-3"
>
<TwitterIcon size={50} round={true} />
</TwitterShareButton>
<WhatsappShareButton
url={url}
title={movie.name}
className="mb-2 mr-3"
>
<WhatsappIcon size={50} round={true} />
</WhatsappShareButton>
<TelegramShareButton
url={url}
title={movie.name}
className="mb-2 mr-3"
>
<TelegramIcon size={50} round={true} />
</TelegramShareButton>
<RedditShareButton url={url} title={movie.name} className="mb-2">
<RedditIcon size={50} round={true} />
</RedditShareButton>
</Row>
<Row className="justify-content-center mt-3 eoErth">
<CopyToClipboard text={url}
onCopy={() => copyURLToClipboard(true)}>
<button
className={isUrlCopied ? copy.copiedClass : copy.defaultClass}
onClick={copyURLToClipboard}
type="button"
>
{btnCopyText}
</button>
</CopyToClipboard>
</Row>
</Container>
</Modal.Body>
</Modal>
</>
);
}
Example #8
Source File: index.js From proof-of-humanity-web with MIT License | 4 votes |
export default function SubmissionDetailsCard({
submission,
contract,
vouchers,
}) {
const {
requests: [request],
latestRequest: [latestRequest],
id,
name,
vouchees,
...rest
} = (submission = useFragment(
submissionDetailsCardFragments.submission,
submission
));
const orderedVouchees = lodashOrderBy(
vouchees,
(a) => a.requests[a.requests.length - 1].lastStatusChange,
"desc"
);
const [accounts] = useWeb3("eth", "getAccounts");
const isSelf =
accounts?.[0] && accounts[0].toLowerCase() === id.toLowerCase();
const { lastStatusChange } = request;
const {
submissionBaseDeposit,
submissionDuration,
requiredNumberOfVouches,
challengePeriodDuration,
} = (contract = useFragment(
submissionDetailsCardFragments.contract,
contract
));
const status = submissionStatusEnum.parse({ ...rest, submissionDuration });
const { challenges } = latestRequest || {};
const activeChallenges = challenges.filter(
({ disputeID }) => disputeID !== null
);
// Note that there is a challenge object with first round data even if there
// is no challenge.
const challenge = (challenges && challenges[0]) || {};
const { rounds, lastRoundID } = challenge || {};
const round = (rounds && rounds[0]) || {};
const { hasPaid } = round || {};
const evidence = useEvidenceFile()(request.evidence[0].URI);
const contributions = useMemo(
() =>
round.contributions.map((contribution) =>
partyEnum.parse(contribution.values)
),
[round.contributions]
);
const compoundName =
[evidence?.file?.firstName, evidence?.file?.lastName]
.filter(Boolean)
.join(" ") || name;
const displayName =
compoundName === name ? name : `${compoundName} (${name})`;
const [arbitrationCost] = useContract(
"klerosLiquid",
"arbitrationCost",
useMemo(
() => ({
address: request.arbitrator,
args: [request.arbitratorExtraData],
}),
[request]
)
);
const { web3 } = useWeb3();
const totalCost = useMemo(
() => arbitrationCost?.add(web3.utils.toBN(submissionBaseDeposit)),
[arbitrationCost, web3.utils, submissionBaseDeposit]
);
const totalContribution = useMemo(
() =>
contributions.reduce(
(acc, { Requester }) => acc.add(web3.utils.toBN(Requester)),
web3.utils.toBN(0)
),
[contributions, web3.utils]
);
const [offChainVouches, setOffChainVouches] = useState([]);
useEffect(() => {
if (!id) return;
(async () => {
const res = await (
await fetch(
`${process.env.NEXT_PUBLIC_VOUCH_DB_URL}/vouch/search?submissionId=${id}`
)
).json();
if (res && res.vouches && res.vouches.length > 0)
setOffChainVouches(res.vouches[0].vouchers);
})();
}, [id]);
const registeredGraphVouchers = useFragment(
submissionDetailsCardFragments.vouchers,
vouchers
).filter(
(voucher) =>
Date.now() / 1000 - voucher.submissionTime < submissionDuration &&
voucher.id !== id.toLowerCase()
);
const currentGraphVouchers = request.vouches.filter(
(voucher) =>
Date.now() / 1000 - voucher.submissionTime < submissionDuration &&
voucher.id !== id.toLowerCase()
);
const [registeredVouchers, currentVouchers] = useMemo(() => {
const completeSet = new Set();
const onlyCurrentSet = new Set();
offChainVouches.forEach((v) => {
if (v !== id.toLowerCase()) {
completeSet.add(v);
onlyCurrentSet.add(v);
}
});
registeredGraphVouchers.forEach((v) => completeSet.add(v.id));
currentGraphVouchers.forEach((v) => onlyCurrentSet.add(v.id));
return [[...completeSet], [...onlyCurrentSet]];
}, [offChainVouches, registeredGraphVouchers, currentGraphVouchers, id]);
const shareTitle =
status === submissionStatusEnum.Vouching
? "Register and vouch for this profile on Proof Of Humanity."
: "Check out this profile on Proof Of Humanity.";
const firstRoundFullyFunded = Number(lastRoundID) === 0 && hasPaid[0];
return (
<Card
mainSx={{
alignItems: "stretch",
flexDirection: ["column", null, null, "row"],
padding: 0,
}}
>
<Flex
sx={{
alignItems: "center",
backgroundColor: "muted",
flexDirection: "column",
maxWidth: [null, null, null, 300],
paddingX: 3,
paddingY: 4,
textAlign: "center",
}}
>
<Image
sx={{ objectFit: "contain" }}
variant="avatar"
src={evidence?.file?.photo}
/>
<Text
sx={{
fontSize: 2,
fontWeight: "bold",
marginY: 2,
overflowWrap: "anywhere",
}}
>
{evidence instanceof Error
? "We are doing some maintenance work and will be online again soon."
: evidence?.file?.name &&
(name.replaceAll(/[^\s\w]/g, "") ===
evidence.file.name.replaceAll(/[^\s\w]/g, "")
? evidence.file.name
: "We are doing some maintenance work and will be online again soon.")}
</Text>
<Text sx={{ wordBreak: "break-word" }} count={2}>
{evidence?.file ? evidence.file.bio || " " : null}
</Text>
<Box sx={{ marginY: 2, width: "100%" }}>
{status === submissionStatusEnum.Vouching && (
<>
{((totalCost?.gt(totalContribution) && Number(lastRoundID) > 0) ||
(Number(lastRoundID) === 0 && !hasPaid[0])) && (
<FundButton
totalCost={totalCost}
totalContribution={totalContribution}
contract="proofOfHumanity"
method="fundSubmission"
args={[id]}
>
Fund Submission
</FundButton>
)}
{!isSelf && <GaslessVouchButton submissionID={id} />}
{!isSelf && <VouchButton submissionID={id} />}
</>
)}
</Box>
<Flex sx={{ width: "100%" }}>
<Box
sx={{
flex: 1,
marginBottom: 3,
paddingX: 1,
}}
>
<Text>Vouchers</Text>
<Text sx={{ fontWeight: "bold", paddingX: 1 }}>
{String(currentVouchers.length)}/{requiredNumberOfVouches}
</Text>
</Box>
{status !== submissionStatusEnum.Registered && (
<Box
sx={{
flex: 1,
borderLeftColor: "text",
borderLeftStyle: "solid",
borderLeftWidth: 1,
}}
>
<Text>Deposit</Text>
<Text sx={{ fontWeight: "bold" }}>
{firstRoundFullyFunded
? "100%"
: totalCost
? `${(
totalContribution
.mul(web3.utils.toBN(10000)) // Basis points.
.div(totalCost)
.toNumber() / 100
).toFixed(2)}%`
: "0%"}
</Text>
</Box>
)}
</Flex>
{challenges?.length > 0 && challenge.disputeID !== null && (
<Flex
sx={{
alignItems: "center",
flexDirection: "column",
marginTop: 3,
}}
>
<Text sx={{ fontWeight: "bold" }}>
{`Dispute${activeChallenges?.length > 1 ? "s" : ""}:`}
</Text>
{activeChallenges.map(
({ disputeID, reason, duplicateSubmission }, i) => (
<Flex
key={i}
sx={{
flexDirection: "row",
}}
>
<Link
newTab
href={`https://resolve.kleros.io/cases/${disputeID}`}
sx={{ marginLeft: 1 }}
>
#{disputeID}{" "}
{challengeReasonEnum.parse(reason).startCase !== "None"
? challengeReasonEnum.parse(reason).startCase
: null}
{challengeReasonEnum.parse(reason).startCase === "Duplicate"
? " of-"
: null}
</Link>
{challengeReasonEnum.parse(reason).startCase ===
"Duplicate" ? (
<SmallAvatar submissionId={duplicateSubmission.id} />
) : null}
</Flex>
)
)}
</Flex>
)}
<Box sx={{ marginTop: "auto" }}>
<Deadlines
submission={submission}
contract={contract}
status={status}
/>
</Box>
</Flex>
<Box sx={{ flex: 1, padding: 4 }}>
<Flex
sx={{
alignItems: "center",
gap: 8,
marginBottom: "4px",
}}
>
<User />
<Text as="span" sx={{ fontWeight: "bold" }}>
{displayName}
</Text>
</Flex>
<EthereumAccount
diameter={16}
address={id}
sx={{
marginBottom: 2,
fontWeight: "bold",
}}
/>
<Video url={evidence?.file?.video} />
<UBICard
submissionID={id}
lastStatusChange={lastStatusChange}
challengePeriodDuration={challengePeriodDuration}
status={status}
registeredVouchers={registeredVouchers}
firstRoundFullyFunded={firstRoundFullyFunded}
/>
{status === submissionStatusEnum.Vouching && (
<Alert
type="muted"
title="Something wrong with this submission?"
sx={{ mt: 3, wordWrap: "break-word" }}
>
<Text>
There is still time to save this submitter's deposit! Send
them an email to{" "}
<Link href={`mailto:${id}@ethmail.cc`}>{id}@ethmail.cc</Link>. It
may save the submitter's deposit!
</Text>
</Alert>
)}
{registeredVouchers.length > 0 && (
<>
<Text
sx={{
marginTop: 2,
marginBottom: 1,
opacity: 0.45,
}}
>
Vouched by:
</Text>
<Flex sx={{ flexWrap: "wrap" }}>
{registeredVouchers.map((voucherId) => (
<SmallAvatar key={voucherId} submissionId={voucherId} />
))}
</Flex>
</>
)}
{vouchees.length > 0 && (
<>
<Text
sx={{
marginTop: 2,
marginBottom: 1,
opacity: 0.45,
}}
>
Vouched for:
</Text>
<Flex sx={{ flexWrap: "wrap" }}>
{orderedVouchees.map(({ id: address }) => (
<SmallAvatar key={address} submissionId={address} />
))}
</Flex>
</>
)}
<Flex sx={{ justifyContent: "flex-end" }}>
<RedditShareButton url={location.href} title={shareTitle}>
<RedditIcon size={32} />
</RedditShareButton>
<TelegramShareButton url={location.href} title={shareTitle}>
<TelegramIcon size={32} />
</TelegramShareButton>
<TwitterShareButton
url={location.href}
title={shareTitle}
via="Kleros_io"
hashtags={["kleros", "proofofhumanity"]}
>
<TwitterIcon size={32} />
</TwitterShareButton>
</Flex>
</Box>
</Card>
);
}
Example #9
Source File: appeal.js From proof-of-humanity-web with MIT License | 4 votes |
function AppealTabPanel({
sharedStakeMultiplier,
winnerStakeMultiplier,
loserStakeMultiplier,
arbitrator,
challenge: {
challengeID,
disputeID,
parties: [party1, party2],
rounds: [{ paidFees, hasPaid }],
},
arbitratorExtraData,
contract,
args,
}) {
const { web3 } = useWeb3();
sharedStakeMultiplier = web3.utils.toBN(sharedStakeMultiplier);
winnerStakeMultiplier = web3.utils.toBN(winnerStakeMultiplier);
loserStakeMultiplier = web3.utils.toBN(loserStakeMultiplier);
const divisor = web3.utils.toBN(10000);
const hundred = web3.utils.toBN(100);
const undecided = {
label: "Previous round undecided.",
reward: sharedStakeMultiplier.mul(hundred).div(sharedStakeMultiplier),
};
const winner = {
label: "Previous round winner.",
reward: loserStakeMultiplier.mul(hundred).div(winnerStakeMultiplier),
};
const loser = {
label: "Previous round loser.",
reward: winnerStakeMultiplier.mul(hundred).div(loserStakeMultiplier),
};
const [appealCost] = useContract(
"klerosLiquid",
"appealCost",
useMemo(
() => ({ address: arbitrator, args: [disputeID, arbitratorExtraData] }),
[arbitrator, disputeID, arbitratorExtraData]
)
);
if (appealCost) {
undecided.cost = appealCost.add(
appealCost.mul(sharedStakeMultiplier).div(divisor)
);
winner.cost = appealCost.add(
appealCost.mul(winnerStakeMultiplier).div(divisor)
);
loser.cost = appealCost.add(
appealCost.mul(loserStakeMultiplier).div(divisor)
);
}
const [appealPeriod] = useContract(
"klerosLiquid",
"appealPeriod",
useMemo(
() => ({ address: arbitrator, args: [disputeID] }),
[arbitrator, disputeID]
)
);
if (appealPeriod) {
undecided.deadline = appealPeriod.end;
winner.deadline = appealPeriod.end;
loser.deadline = appealPeriod.start.add(
appealPeriod.end.sub(appealPeriod.start).div(web3.utils.toBN(2))
);
}
let [currentRuling] = useContract(
"klerosLiquid",
"currentRuling",
useMemo(
() => ({ address: arbitrator, args: [disputeID] }),
[arbitrator, disputeID]
)
);
currentRuling = currentRuling?.toNumber();
const shareTitle = `Crowdfunding Appeal Fees for ${party1} vs ${party2}.`;
return (
<>
<Text sx={{ marginBottom: 2 }}>
Help fund a side’s appeal fees to win part of the other side’s deposit
when your side ultimately wins. If only one side manages to fund their
fees, it automatically wins. (Rewards only apply to rounds where both
sides are fully funded.)
</Text>
<Grid sx={{ marginBottom: 3 }} gap={2} columns={[1, 1, 1, 2]}>
<AppealTabPanelCard
address={party1}
{...[undecided, winner, loser][currentRuling]}
paidFees={paidFees[1]}
hasPaid={hasPaid[0]}
oppositeHasPaid={hasPaid[1]}
loserDeadline={loser.deadline}
isWinner={currentRuling === 1}
contract={contract}
args={[...args, challengeID, 1]}
partyLabel="Submitter"
/>
<AppealTabPanelCard
address={party2}
{...[undecided, loser, winner][currentRuling]}
paidFees={paidFees[2]}
hasPaid={hasPaid[1]}
oppositeHasPaid={hasPaid[0]}
loserDeadline={loser.deadline}
isWinner={currentRuling === 2}
contract={contract}
args={[...args, challengeID, 2]}
partyLabel="Challenger"
/>
</Grid>
<Flex sx={{ justifyContent: "center" }}>
<RedditShareButton url={location.href} title={shareTitle}>
<RedditIcon size={32} />
</RedditShareButton>
<TelegramShareButton url={location.href} title={shareTitle}>
<TelegramIcon size={32} />
</TelegramShareButton>
<TwitterShareButton
url={location.href}
title={shareTitle}
via="Kleros_io"
hashtags={["kleros", "appeals"]}
>
<TwitterIcon size={32} />
</TwitterShareButton>
</Flex>
</>
);
}