import { Badge, Card, Center, Flex, Group, Image, Stack, Text } from '@mantine/core'; import { useTranslation } from 'next-i18next'; import { IconGitPullRequest } from '@tabler/icons-react'; 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-list', icon: IconGitPullRequest, options: {}, 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, isFetching } = useMediaRequestQuery(); if (!data || isFetching) { return ; } if (data.length === 0) { return (
{t('noRequests')}
); } const countPendingApproval = data.filter( (x) => x.status === MediaRequestStatus.PendingApproval ).length; return ( {countPendingApproval > 0 ? ( {t('pending', { countPendingApproval })} ) : ( {t('nonePending')} )} {data.map((item) => ( poster {item.airDate.split('-')[0]} {item.name} requester avatar {item.userName} ))} ); } const MediaRequestStatusBadge = ({ status }: { status: MediaRequestStatus }) => { const { t } = useTranslation('modules/media-requests-list'); switch (status) { case MediaRequestStatus.Approved: return {t('state.approved')}; case MediaRequestStatus.Declined: return {t('state.declined')}; case MediaRequestStatus.PendingApproval: return {t('state.pendingApproval')}; default: return <>; } }; export default definition;