import React from 'react'; import { Alert } from 'antd'; import { Icon } from 'UI'; const localhostWarn = (project: string) => project + '_localhost_warn'; const VersionComparison = { Lower: -1, Same: 0, Higher: 1, }; function parseVersion(version: string) { const cleanVersion = version.split(/[-+]/)[0]; return cleanVersion.split('.').map(Number); } function compareVersions( suppliedVersion: string, currentVersion: string ): number { if (!suppliedVersion || !currentVersion) return VersionComparison.Same; const v1 = parseVersion(suppliedVersion); const v2 = parseVersion(currentVersion); if (v1[0] < v2[0]) return VersionComparison.Lower; if (v1[0] > v2[0]) return VersionComparison.Higher; return VersionComparison.Same; } const WarnBadge = React.memo( ({ currentLocation, version, siteId, }: { currentLocation: string; version: string; siteId: string; }) => { const localhostWarnSiteKey = localhostWarn(siteId); const defaultLocalhostWarn = localStorage.getItem(localhostWarnSiteKey) !== '1'; const localhostWarnActive = currentLocation && defaultLocalhostWarn && /(localhost)|(127.0.0.1)|(0.0.0.0)/.test(currentLocation); const trackerVersion = window.env.TRACKER_VERSION ?? undefined; const trackerVerDiff = compareVersions(version, trackerVersion); const trackerWarnActive = trackerVerDiff !== VersionComparison.Same; const [showLocalhostWarn, setLocalhostWarn] = React.useState(localhostWarnActive); const [showTrackerWarn, setTrackerWarn] = React.useState(trackerWarnActive); const closeWarning = (type: 1 | 2) => { if (type === 1) { localStorage.setItem(localhostWarnSiteKey, '1'); setLocalhostWarn(false); } if (type === 2) { setTrackerWarn(false); } }; if (!showLocalhostWarn && !showTrackerWarn) return null; return (