diff --git a/app/javascript/images/donation_banner.png b/app/javascript/images/donation_banner.png new file mode 100644 index 00000000000..617ad7af975 Binary files /dev/null and b/app/javascript/images/donation_banner.png differ diff --git a/app/javascript/mastodon/components/dismissable_banner.tsx b/app/javascript/mastodon/components/dismissable_banner.tsx index a874f4792e4..840841f6ced 100644 --- a/app/javascript/mastodon/components/dismissable_banner.tsx +++ b/app/javascript/mastodon/components/dismissable_banner.tsx @@ -3,6 +3,8 @@ import { useCallback, useState, useEffect } from 'react'; import { defineMessages, useIntl } from 'react-intl'; +import classNames from 'classnames'; + import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { changeSetting } from 'mastodon/actions/settings'; import { bannerSettings } from 'mastodon/settings'; @@ -16,6 +18,7 @@ const messages = defineMessages({ interface Props { id: string; + className?: string; } export function useDismissableBannerState({ id }: Props) { @@ -53,6 +56,7 @@ export function useDismissableBannerState({ id }: Props) { export const DismissableBanner: React.FC> = ({ id, children, + className, }) => { const intl = useIntl(); const { wasDismissed, dismiss } = useDismissableBannerState({ @@ -64,7 +68,7 @@ export const DismissableBanner: React.FC> = ({ } return ( -
+
{ + const donationData = useAppSelector((state) => state.donate.apiResponse); + const dispatch = useAppDispatch(); + + const handleClick = useCallback(() => { + dispatch(showDonateModal()); + }, [dispatch]); + + if (!donationData) { + return null; + } + return ( + + +

{donationData.banner_message}

+