import React, { useEffect } from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { Stack, HStack, Card, Tooltip, Avatar, Text, Icon } from 'soapbox/components/ui'; import IconButton from 'soapbox/components/ui/icon-button/icon-button'; import StatusCard from 'soapbox/features/status/components/card'; import { useAppSelector } from 'soapbox/hooks'; import type { Card as CardEntity } from 'soapbox/types/entities'; const messages = defineMessages({ tooltip: { id: 'sponsored.tooltip', defaultMessage: '{siteTitle} displays ads to help fund our service.' }, }); interface IAd { /** Embedded ad data in Card format (almost like OEmbed). */ card: CardEntity, /** Impression URL to fetch upon display. */ impression?: string, } /** Displays an ad in sponsored post format. */ const Ad: React.FC = ({ card, impression }) => { const intl = useIntl(); const instance = useAppSelector(state => state.instance); // Fetch the impression URL (if any) upon displaying the ad. // It's common for ad providers to provide this. useEffect(() => { if (impression) { fetch(impression); } }, [impression]); return ( {instance.title} {}} horizontal /> ); }; export default Ad;