import { Avatar, Center, Group, Loader, ScrollArea, Stack, Table, Text, Title, } from '@mantine/core'; import { IconAlertTriangle, IconMovie } from '@tabler/icons-react'; import { useTranslation } from 'next-i18next'; import { AppAvatar } from '../../components/AppAvatar'; import { useEditModeStore } from '../../components/Dashboard/Views/useEditModeStore'; import { useConfigContext } from '../../config/provider'; import { useGetMediaServers } from './useGetMediaServers'; import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; import { TableRow } from './TableRow'; const definition = defineWidget({ id: 'media-server', icon: IconMovie, options: {}, component: MediaServerTile, gridstack: { minWidth: 3, minHeight: 2, maxWidth: 12, maxHeight: 12, }, }); export type MediaServerWidget = IWidget<(typeof definition)['id'], typeof definition>; interface MediaServerWidgetProps { widget: MediaServerWidget; } function MediaServerTile({ widget }: MediaServerWidgetProps) { const { t } = useTranslation('modules/media-server'); const { config } = useConfigContext(); const isEditMode = useEditModeStore((x) => x.enabled); const { data, isError, isFetching, isInitialLoading } = useGetMediaServers({ enabled: config !== undefined, }); if (isError) { return (
{t('card.errors.general.title')} {t('card.errors.general.text')}
); } if (isInitialLoading) { return ( {t('descriptor.name')} Homarr is loading streams... ); } return ( {data?.servers.map((server) => { const app = config?.apps.find((x) => x.id === server.appId); return server.sessions.map((session, index) => ( )); })}
{t('card.table.header.session')} {t('card.table.header.user')} {t('card.table.header.currentlyPlaying')}
{data?.servers.map((server) => { const app = config?.apps.find((x) => x.id === server.appId); if (!app) { return null; } return ( ); })}
); } export default definition;