diff --git a/src/components/RequestList/RequestItem/index.tsx b/src/components/RequestList/RequestItem/index.tsx index 5e764ecbb..037590e5d 100644 --- a/src/components/RequestList/RequestItem/index.tsx +++ b/src/components/RequestList/RequestItem/index.tsx @@ -17,9 +17,10 @@ import { TrashIcon, XMarkIcon, } from '@heroicons/react/24/solid'; -import { MediaRequestStatus } from '@server/constants/media'; +import { MediaRequestStatus, MediaType } from '@server/constants/media'; import type { MediaRequest } from '@server/entity/MediaRequest'; import type { NonFunctionProperties } from '@server/interfaces/api/common'; +import type { RadarrSettings, SonarrSettings } from '@server/lib/settings'; import type { MovieDetails } from '@server/models/Movie'; import type { TvDetails } from '@server/models/Tv'; import Link from 'next/link'; @@ -293,9 +294,16 @@ const RequestItemError = ({ interface RequestItemProps { request: NonFunctionProperties & { profileName?: string }; revalidateList: () => void; + radarrData?: RadarrSettings[]; + sonarrData?: SonarrSettings[]; } -const RequestItem = ({ request, revalidateList }: RequestItemProps) => { +const RequestItem = ({ + request, + revalidateList, + radarrData, + sonarrData, +}: RequestItemProps) => { const settings = useSettings(); const { ref, inView } = useInView({ triggerOnce: true, @@ -390,6 +398,23 @@ const RequestItem = ({ request, revalidateList }: RequestItemProps) => { iOSPlexUrl4k: requestData?.media?.iOSPlexUrl4k, }); + const serviceExists = () => { + if (title?.mediaInfo) { + if (title?.mediaInfo.mediaType === MediaType.MOVIE) { + return ( + radarrData?.find((radarr) => radarr.id === request.serverId) !== + undefined + ); + } else { + return ( + sonarrData?.find((sonarr) => sonarr.id === request.serverId) !== + undefined + ); + } + } + return false; + }; + if (!title && !error) { return (
{ )} {requestData.status !== MediaRequestStatus.PENDING && hasPermission(Permission.MANAGE_REQUESTS) && ( - <> - deleteRequest()} - confirmText={intl.formatMessage(globalMessages.areyousure)} - className="w-full" - > - - {intl.formatMessage(messages.deleterequest)} - - deleteMediaFile()} - confirmText={intl.formatMessage(globalMessages.areyousure)} - className="w-full" - > - - - {intl.formatMessage(messages.removearr, { - arr: request.type === 'movie' ? 'Radarr' : 'Sonarr', - })} - - - + deleteRequest()} + confirmText={intl.formatMessage(globalMessages.areyousure)} + className="w-full" + > + + {intl.formatMessage(messages.deleterequest)} + + )} + {hasPermission(Permission.MANAGE_REQUESTS) && + title?.mediaInfo?.serviceId && + serviceExists() && ( + deleteMediaFile()} + confirmText={intl.formatMessage(globalMessages.areyousure)} + className="w-full" + > + + + {intl.formatMessage(messages.removearr, { + arr: request.type === 'movie' ? 'Radarr' : 'Sonarr', + })} + + )} {requestData.status === MediaRequestStatus.PENDING && hasPermission(Permission.MANAGE_REQUESTS) && ( diff --git a/src/components/RequestList/index.tsx b/src/components/RequestList/index.tsx index 6cdf5b0bf..468c0853e 100644 --- a/src/components/RequestList/index.tsx +++ b/src/components/RequestList/index.tsx @@ -17,6 +17,8 @@ import { FunnelIcon, } from '@heroicons/react/24/solid'; import type { RequestResultsResponse } from '@server/interfaces/api/requestInterfaces'; +import { Permission } from '@server/lib/permissions'; +import type { RadarrSettings, SonarrSettings } from '@server/lib/settings'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; @@ -51,7 +53,7 @@ const RequestList = () => { const { user } = useUser({ id: Number(router.query.userId), }); - const { user: currentUser } = useUser(); + const { user: currentUser, hasPermission } = useUser(); const [currentFilter, setCurrentFilter] = useState(Filter.PENDING); const [currentSort, setCurrentSort] = useState('added'); const [currentSortDirection, setCurrentSortDirection] = @@ -62,6 +64,13 @@ const RequestList = () => { const pageIndex = page - 1; const updateQueryParams = useUpdateQueryParams({ page: page.toString() }); + const { data: radarrData } = useSWR( + hasPermission(Permission.ADMIN) ? '/api/v1/settings/radarr' : null + ); + const { data: sonarrData } = useSWR( + hasPermission(Permission.ADMIN) ? '/api/v1/settings/sonarr' : null + ); + const { data, error, @@ -245,6 +254,8 @@ const RequestList = () => { revalidate()} + radarrData={radarrData} + sonarrData={sonarrData} />
);