import { Card, Flex, Stack, Text } from '@mantine/core';
import { IconChartBar } from '@tabler/icons-react';
import { useTranslation } from 'next-i18next';
import { defineWidget } from '../helper';
import { WidgetLoading } from '../loading';
import { IWidget } from '../widgets';
import { useMediaRequestQuery } from './media-request-query';
import { MediaRequestStatus } from './media-request-types';
const definition = defineWidget({
id: 'media-requests-stats',
icon: IconChartBar,
options: {
direction: {
type: 'select',
defaultValue: 'row' as 'row' | 'column',
data: [
{ value: 'row' },
{ value: 'column' },
],
},
},
gridstack: {
minWidth: 1,
minHeight: 1,
maxWidth: 12,
maxHeight: 12,
},
component: MediaRequestStatsTile,
});
export type MediaRequestStatsWidget = IWidget<(typeof definition)['id'], typeof definition>;
interface MediaRequestStatsWidgetProps {
widget: MediaRequestStatsWidget;
}
function MediaRequestStatsTile({ widget }: MediaRequestStatsWidgetProps) {
const { t } = useTranslation('modules/media-requests-stats');
const { data, isFetching } = useMediaRequestQuery();
if (!data || isFetching) {
return ;
}
return (
x.status === MediaRequestStatus.PendingApproval).length}
label={t('stats.pending')}
/>
x.type === 'tv').length}
label={t('stats.tvRequests')}
/>
x.type === 'movie').length}
label={t('stats.movieRequests')}
/>
);
}
interface StatCardProps {
number: number;
label: string;
}
const StatCard = ({ number, label }: StatCardProps) => {
return (
{number}
{label}
);
};
export default definition;