import {
ActionIcon,
Badge,
Card,
Center,
Flex,
Group,
Image,
Stack,
Text,
Tooltip,
} from '@mantine/core';
import { useTranslation } from 'next-i18next';
import { IconCheck, IconGitPullRequest, IconThumbDown, IconThumbUp } from '@tabler/icons-react';
import { useMutation } from '@tanstack/react-query';
import axios from 'axios';
import { notifications } from '@mantine/notifications';
import { defineWidget } from '../helper';
import { WidgetLoading } from '../loading';
import { IWidget } from '../widgets';
import { useMediaRequestQuery } from './media-request-query';
import { MediaRequest, MediaRequestStatus } from './media-request-types';
const definition = defineWidget({
id: 'media-requests-list',
icon: IconGitPullRequest,
options: {
replaceLinksWithExternalHost: {
type: 'switch',
defaultValue: true,
},
},
component: MediaRequestListTile,
gridstack: {
minWidth: 3,
minHeight: 2,
maxWidth: 12,
maxHeight: 12,
},
});
export type MediaRequestListWidget = IWidget<(typeof definition)['id'], typeof definition>;
interface MediaRequestListWidgetProps {
widget: MediaRequestListWidget;
}
function MediaRequestListTile({ widget }: MediaRequestListWidgetProps) {
const { t } = useTranslation('modules/media-requests-list');
const { data, refetch, isLoading } = useMediaRequestQuery();
// Use mutation to approve or deny a pending request
const mutate = useMutation({
mutationFn: async (e: { request: MediaRequest; action: string }) => {
const data = await axios.put(`/api/modules/overseerr/${e.request.id}?action=${e.action}`);
notifications.show({
title: t('requestUpdated'),
message: t('requestUpdatedMessage', { title: e.request.name }),
color: 'blue',
});
refetch();
},
});
if (!data || isLoading) {
return