import { Center, createStyles, Group, Stack, Text, Title } from '@mantine/core'; import { IconUnlink } from '@tabler/icons'; import { useQuery } from '@tanstack/react-query'; import axios from 'axios'; import { useTranslation } from 'next-i18next'; import { useConfigContext } from '../../config/provider'; import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; import { DashDotCompactNetwork, DashDotInfo } from './DashDotCompactNetwork'; import { DashDotCompactStorage } from './DashDotCompactStorage'; import { DashDotGraph } from './DashDotGraph'; const definition = defineWidget({ id: 'dashdot', icon: 'https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/dashdot.png', options: { cpuMultiView: { type: 'switch', defaultValue: false, }, storageMultiView: { type: 'switch', defaultValue: false, }, useCompactView: { type: 'switch', defaultValue: true, }, usePercentages: { type: 'switch', defaultValue: false, }, graphs: { type: 'multi-select', defaultValue: ['cpu', 'memory'], data: [ // ['cpu', 'memory', 'storage', 'network', 'gpu'], into { label, value } { label: 'CPU', value: 'cpu' }, { label: 'Memory', value: 'memory' }, { label: 'Storage', value: 'storage' }, { label: 'Network', value: 'network' }, { label: 'GPU', value: 'gpu' }, ], }, url: { type: 'text', defaultValue: '', }, }, gridstack: { minWidth: 2, minHeight: 2, maxWidth: 12, maxHeight: 14, }, component: DashDotTile, }); export type IDashDotTile = IWidget<(typeof definition)['id'], typeof definition>; interface DashDotTileProps { widget: IDashDotTile; } function DashDotTile({ widget }: DashDotTileProps) { const { classes } = useDashDotTileStyles(); const { t } = useTranslation('modules/dashdot'); const dashDotUrl = widget.properties.url; const locationProtocol = window.location.protocol; const detectedProtocolDowngrade = locationProtocol === 'https:' && dashDotUrl.toLowerCase().startsWith('http:'); const { data: info } = useDashDotInfo({ dashDotUrl, enabled: !detectedProtocolDowngrade, }); if (detectedProtocolDowngrade) { return (
{t('card.errors.noInformation')}
} {info && (