import { Badge, Box, Button, Card, Group, Image, SimpleGrid, Stack, Text } from '@mantine/core'; import { useElementSize } from '@mantine/hooks'; import { IconDeviceGamepad, IconPlayerPlay, IconPlayerStop } from '@tabler/icons-react'; import { useSession } from 'next-auth/react'; import { useTranslation } from 'next-i18next'; import { api } from '~/utils/api'; import { useConfigContext } from '~/config/provider'; import { defineWidget } from '../helper'; import { WidgetLoading } from '../loading'; import { IWidget } from '../widgets'; import { useDnsHoleSummeryQuery } from './DnsHoleSummary'; import { PiholeApiSummaryType } from './type'; const definition = defineWidget({ id: 'dns-hole-controls', icon: IconDeviceGamepad, options: {}, gridstack: { minWidth: 2, minHeight: 1, maxWidth: 12, maxHeight: 12, }, component: DnsHoleControlsWidgetTile, }); export type IDnsHoleControlsWidget = IWidget<(typeof definition)['id'], typeof definition>; interface DnsHoleControlsWidgetProps { widget: IDnsHoleControlsWidget; } function DnsHoleControlsWidgetTile({ widget }: DnsHoleControlsWidgetProps) { const utils = api.useContext(); const { data: sessionData } = useSession(); const { isInitialLoading, data } = useDnsHoleSummeryQuery(); const { mutateAsync } = useDnsHoleControlMutation(); const { width, ref } = useElementSize(); const { t } = useTranslation('common'); const { name: configName, config } = useConfigContext(); if (isInitialLoading || !data || !configName) { return ; } return ( {sessionData?.user?.isAdmin && ( 275 ? 2 : 1} verticalSpacing="0.25rem" spacing="0.25rem" > )} {data.status.map((status, index) => { const app = config?.apps.find((x) => x.id === status.appId); if (!app) { return null; } return ( ({ backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark[4] : theme.colors.gray[2], textAlign: 'center', padding: 5, borderRadius: theme.radius.md, })} > {app.name} ); })} ); } const StatusBadge = ({ status }: { status: PiholeApiSummaryType['status'] }) => { const { t } = useTranslation('common'); if (status === 'enabled') { return ( {t('enabled')} ); } return ( {t('disabled')} ); }; const useDnsHoleControlMutation = () => api.dnsHole.control.useMutation(); export default definition;