import BlocklistedTagsBadge from '@app/components/BlocklistedTagsBadge'; 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 { MediaType } from '@server/constants/media'; import type { Blocklist } from '@server/entity/Blocklist'; import axios from 'axios'; 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.BlocklistBlock', { blocklistedby: 'Blocklisted By', blocklistdate: 'Blocklisted date', }); interface BlocklistBlockProps { tmdbId: number; mediaType: MediaType; onUpdate?: () => void; onDelete?: () => void; } const BlocklistBlock = ({ tmdbId, mediaType, onUpdate, onDelete, }: BlocklistBlockProps) => { const { user } = useUser(); const intl = useIntl(); const [isUpdating, setIsUpdating] = useState(false); const { addToast } = useToasts(); const { data } = useSWR( `/api/v1/blocklist/${tmdbId}?mediaType=${mediaType}` ); const removeFromBlocklist = async (tmdbId: number, title?: string) => { setIsUpdating(true); try { await axios.delete(`/api/v1/blocklist/${tmdbId}?mediaType=${mediaType}`); addToast( {intl.formatMessage(globalMessages.removeFromBlocklistSuccess, { title, strong: (msg: React.ReactNode) => {msg}, })} , { appearance: 'success', autoDismiss: true } ); } catch { addToast(intl.formatMessage(globalMessages.blocklistError), { appearance: 'error', autoDismiss: true, }); } onUpdate?.(); onDelete?.(); setIsUpdating(false); }; if (!data) { return ( <> ); } return (
{data.user ? ( <> {data.user.displayName} ) : data.blocklistedTags ? ( <> {intl.formatMessage(messages.blocklistedby)}:  ) : null}
{intl.formatMessage(globalMessages.blocklisted)}
{intl.formatDate(data.createdAt, { year: 'numeric', month: 'long', day: 'numeric', })}
); }; export default BlocklistBlock;