import classNames from "classnames"; import { useContext, useState, useEffect } from "react"; import Status from "./status"; import Widget from "./widget"; import Ping from "./ping"; import SiteMonitor from "./site-monitor"; import KubernetesStatus from "./kubernetes-status"; import Docker from "widgets/docker/component"; import Kubernetes from "widgets/kubernetes/component"; import { SettingsContext } from "utils/contexts/settings"; import ResolvedIcon from "components/resolvedicon"; export default function Item({ service, group, useEqualHeights }) { const hasLink = (service.href && service.href !== "#") || (service.href_local && service.href_local !== "#"); const { settings } = useContext(SettingsContext); const showStats = service.showStats === false ? false : settings.showStats; const statusStyle = service.statusStyle !== undefined ? service.statusStyle : settings.statusStyle; const [statsOpen, setStatsOpen] = useState(service.showStats); const [statsClosing, setStatsClosing] = useState(false); const [isLocalConnection, setIsLocalConnection] = useState(false) useEffect(() => { try { if (!service.href_local) { return; } if (!service.href) { setIsLocalConnection(true); return; } const windowHref = window.location.href; const localRanges = [ /^10\./, /^192\.168\./, /^172\.(1[6-9]|2[0-9]|3[0-1])\./, /^127\.0\.0\.1$/, /^::1$/, /^localhost$/i ]; const tldRegex = /^(https?:\/\/)?((([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))(\/.*)?)(:[0-9]{1,5})?\/?.*$/;; const inLocalRange = localRanges.some((range) => range.test(windowHref)); const isValidTLD = tldRegex.test(windowHref); setIsLocalConnection(inLocalRange || !isValidTLD); } catch (err) { console.error("error while deciding weather connection is local or external"); } }) // set stats to closed after 300ms const closeStats = () => { if (statsOpen) { setStatsClosing(true); setTimeout(() => { setStatsOpen(false); setStatsClosing(false); }, 300); } }; return (
{ service.description }
{service.description}