import Badge from '@app/components/Common/Badge'; import Button from '@app/components/Common/Button'; import LoadingSpinner from '@app/components/Common/LoadingSpinner'; import Tooltip from '@app/components/Common/Tooltip'; import { useUser } from '@app/hooks/useUser'; import globalMessages from '@app/i18n/globalMessages'; import defineMessages from '@app/utils/defineMessages'; import { CalendarIcon, TrashIcon, UserIcon } from '@heroicons/react/24/solid'; import type { Blacklist } from '@server/entity/Blacklist'; import Link from 'next/link'; import { useState } from 'react'; import { useIntl } from 'react-intl'; import { useToasts } from 'react-toast-notifications'; import useSWR from 'swr'; const messages = defineMessages('component.BlacklistBlock', { blacklistedby: 'Blacklisted By', blacklistdate: 'Blacklisted date', }); interface BlacklistBlockProps { tmdbId: number; onUpdate?: () => void; onDelete?: () => void; } const BlacklistBlock = ({ tmdbId, onUpdate, onDelete, }: BlacklistBlockProps) => { const { user } = useUser(); const intl = useIntl(); const [isUpdating, setIsUpdating] = useState(false); const { addToast } = useToasts(); const { data } = useSWR(`/api/v1/blacklist/${tmdbId}`); const removeFromBlacklist = async (tmdbId: number, title?: string) => { setIsUpdating(true); const res = await fetch('/api/v1/blacklist/' + tmdbId, { method: 'DELETE', }); if (res.status === 204) { addToast( {intl.formatMessage(globalMessages.removeFromBlacklistSuccess, { title, strong: (msg: React.ReactNode) => {msg}, })} , { appearance: 'success', autoDismiss: true } ); } else { addToast(intl.formatMessage(globalMessages.blacklistError), { appearance: 'error', autoDismiss: true, }); } onUpdate && onUpdate(); onDelete && onDelete(); setIsUpdating(false); }; if (!data) { return ( <> ); } return (
{data.user.displayName}
{intl.formatMessage(globalMessages.blacklisted)}
{intl.formatDate(data.createdAt, { year: 'numeric', month: 'long', day: 'numeric', })}
); }; export default BlacklistBlock;